From 15ea2ce8ea8480798bf280c0cd0acd2360f644e4 Mon Sep 17 00:00:00 2001 From: uglifruit Date: Wed, 5 Aug 2026 23:01:36 +0100 Subject: [PATCH 1/4] Add 62_BioMimicry Six physics engines - Horses, Geese, Frogs, Rain, Meteors, Cicadas - generating organic triggers, CV and audio from real models: equine footfall timing, Kuramoto coupled oscillators, leaky integrate-and-fire, an inhomogeneous Poisson process, and amplitude-coupled insect patches. Voices are animal recordings with up to eight round robins each. In Horses the round robins are the four hooves, so a gait sounds like an animal rather than a drum machine. Hold the switch at power-on for TUNED, which plays the same recordings at their recorded pitch with no detuning, so uploaded notes can be galloped or dripped in tune, with 1V/oct on CV 2 saying which round robin just fired. Samples are replaceable from the browser over USB-MIDI (web/index.html) - Editor: web, so sitegen hosts it. Uploads land in a reserved 1MB flash region at a fixed address, so reflashing the firmware does not wipe them. Source WAVs are not duplicated here; the converted samples/*.raw are committed, so this builds as-is. Full history and the source recordings are at https://github.com/uglifruit/WorkshopBio CC-BY-4.0 for the card source. The sample library is Pixabay, under the Pixabay Content License; ComputerCard.h is Chris Johnson's, MIT. --- releases/62_BioMimicry/.gitignore | 30 + releases/62_BioMimicry/CMakeLists.txt | 93 ++ releases/62_BioMimicry/ComputerCard.h | 1200 +++++++++++++++++ releases/62_BioMimicry/LICENSE | 424 +++++++ releases/62_BioMimicry/README.md | 437 +++++++ releases/62_BioMimicry/UF2/biomimicry.uf2 | Bin 0 -> 1940992 bytes releases/62_BioMimicry/biomimicry.h | 108 ++ releases/62_BioMimicry/crosscore.h | 171 +++ releases/62_BioMimicry/docs/.gitkeep | 1 + releases/62_BioMimicry/docs/DEVLOG.md | 1170 +++++++++++++++++ releases/62_BioMimicry/engines.cpp | 1056 +++++++++++++++ releases/62_BioMimicry/engines.h | 154 +++ releases/62_BioMimicry/fastmath.cpp | 50 + releases/62_BioMimicry/fastmath.h | 188 +++ releases/62_BioMimicry/info.yaml | 195 +++ releases/62_BioMimicry/main.cpp | 1057 +++++++++++++++ releases/62_BioMimicry/pico_sdk_import.cmake | 121 ++ releases/62_BioMimicry/profile.h | 158 +++ releases/62_BioMimicry/samples/README.md | 50 + releases/62_BioMimicry/samples/cicadas_1.raw | Bin 0 -> 7842 bytes releases/62_BioMimicry/samples/cicadas_2.raw | Bin 0 -> 8220 bytes releases/62_BioMimicry/samples/cicadas_3.raw | Bin 0 -> 8252 bytes releases/62_BioMimicry/samples/cicadas_4.raw | Bin 0 -> 7379 bytes releases/62_BioMimicry/samples/cicadas_5.raw | Bin 0 -> 6321 bytes releases/62_BioMimicry/samples/cicadas_6.raw | Bin 0 -> 5856 bytes releases/62_BioMimicry/samples/cicadas_7.raw | Bin 0 -> 6794 bytes releases/62_BioMimicry/samples/cicadas_8.raw | Bin 0 -> 6388 bytes releases/62_BioMimicry/samples/frogs_1.raw | Bin 0 -> 45056 bytes releases/62_BioMimicry/samples/frogs_2.raw | Bin 0 -> 38559 bytes releases/62_BioMimicry/samples/frogs_3.raw | Bin 0 -> 30473 bytes releases/62_BioMimicry/samples/frogs_4.raw | Bin 0 -> 46626 bytes releases/62_BioMimicry/samples/frogs_5.raw | Bin 0 -> 39303 bytes releases/62_BioMimicry/samples/frogs_6.raw | Bin 0 -> 40940 bytes releases/62_BioMimicry/samples/frogs_7.raw | Bin 0 -> 30595 bytes releases/62_BioMimicry/samples/frogs_8.raw | Bin 0 -> 24510 bytes releases/62_BioMimicry/samples/geese_1.raw | Bin 0 -> 9866 bytes releases/62_BioMimicry/samples/geese_2.raw | Bin 0 -> 8549 bytes releases/62_BioMimicry/samples/geese_3.raw | Bin 0 -> 6568 bytes releases/62_BioMimicry/samples/geese_4.raw | Bin 0 -> 8222 bytes releases/62_BioMimicry/samples/geese_5.raw | Bin 0 -> 8936 bytes releases/62_BioMimicry/samples/geese_6.raw | Bin 0 -> 7853 bytes releases/62_BioMimicry/samples/geese_7.raw | Bin 0 -> 10658 bytes releases/62_BioMimicry/samples/geese_8.raw | Bin 0 -> 8442 bytes releases/62_BioMimicry/samples/horses_1.raw | Bin 0 -> 5241 bytes releases/62_BioMimicry/samples/horses_2.raw | Bin 0 -> 6028 bytes releases/62_BioMimicry/samples/horses_3.raw | Bin 0 -> 8250 bytes releases/62_BioMimicry/samples/horses_4.raw | Bin 0 -> 8857 bytes releases/62_BioMimicry/samples/meteors_1.raw | Bin 0 -> 39443 bytes releases/62_BioMimicry/samples/meteors_2.raw | Bin 0 -> 59739 bytes releases/62_BioMimicry/samples/meteors_3.raw | Bin 0 -> 35389 bytes releases/62_BioMimicry/samples/meteors_4.raw | Bin 0 -> 97493 bytes releases/62_BioMimicry/samples/meteors_5.raw | Bin 0 -> 118596 bytes releases/62_BioMimicry/samples/rain_1.raw | Bin 0 -> 3543 bytes releases/62_BioMimicry/samples/rain_2.raw | Bin 0 -> 3148 bytes releases/62_BioMimicry/samples/rain_3.raw | Bin 0 -> 5243 bytes releases/62_BioMimicry/samples/rain_4.raw | Bin 0 -> 7090 bytes releases/62_BioMimicry/samples/rain_5.raw | Bin 0 -> 3150 bytes releases/62_BioMimicry/samples/rain_6.raw | Bin 0 -> 6046 bytes releases/62_BioMimicry/samples/rain_7.raw | Bin 0 -> 6301 bytes releases/62_BioMimicry/samples/rain_8.raw | Bin 0 -> 5725 bytes releases/62_BioMimicry/samples_default.h | 72 ++ releases/62_BioMimicry/samplestore.h | 186 +++ releases/62_BioMimicry/tools/bin2h.py | 49 + releases/62_BioMimicry/tools/checksize.cmake | 46 + releases/62_BioMimicry/tools/gensamples.py | 166 +++ releases/62_BioMimicry/tools/importwav.py | 343 +++++ releases/62_BioMimicry/tools/mksamples.py | 154 +++ releases/62_BioMimicry/tools/simulate.cpp | 101 ++ releases/62_BioMimicry/tools/simulate.py | 617 +++++++++ releases/62_BioMimicry/tusb_config.h | 119 ++ releases/62_BioMimicry/usb_descriptors.c | 165 +++ releases/62_BioMimicry/voices.cpp | 654 ++++++++++ releases/62_BioMimicry/voices.h | 156 +++ releases/62_BioMimicry/web/index.html | 1201 ++++++++++++++++++ releases/62_BioMimicry/webui.cpp | 899 +++++++++++++ releases/62_BioMimicry/webui.h | 174 +++ 76 files changed, 11765 insertions(+) create mode 100644 releases/62_BioMimicry/.gitignore create mode 100644 releases/62_BioMimicry/CMakeLists.txt create mode 100644 releases/62_BioMimicry/ComputerCard.h create mode 100644 releases/62_BioMimicry/LICENSE create mode 100644 releases/62_BioMimicry/README.md create mode 100644 releases/62_BioMimicry/UF2/biomimicry.uf2 create mode 100644 releases/62_BioMimicry/biomimicry.h create mode 100644 releases/62_BioMimicry/crosscore.h create mode 100644 releases/62_BioMimicry/docs/.gitkeep create mode 100644 releases/62_BioMimicry/docs/DEVLOG.md create mode 100644 releases/62_BioMimicry/engines.cpp create mode 100644 releases/62_BioMimicry/engines.h create mode 100644 releases/62_BioMimicry/fastmath.cpp create mode 100644 releases/62_BioMimicry/fastmath.h create mode 100644 releases/62_BioMimicry/info.yaml create mode 100644 releases/62_BioMimicry/main.cpp create mode 100644 releases/62_BioMimicry/pico_sdk_import.cmake create mode 100644 releases/62_BioMimicry/profile.h create mode 100644 releases/62_BioMimicry/samples/README.md create mode 100644 releases/62_BioMimicry/samples/cicadas_1.raw create mode 100644 releases/62_BioMimicry/samples/cicadas_2.raw create mode 100644 releases/62_BioMimicry/samples/cicadas_3.raw create mode 100644 releases/62_BioMimicry/samples/cicadas_4.raw create mode 100644 releases/62_BioMimicry/samples/cicadas_5.raw create mode 100644 releases/62_BioMimicry/samples/cicadas_6.raw create mode 100644 releases/62_BioMimicry/samples/cicadas_7.raw create mode 100644 releases/62_BioMimicry/samples/cicadas_8.raw create mode 100644 releases/62_BioMimicry/samples/frogs_1.raw create mode 100644 releases/62_BioMimicry/samples/frogs_2.raw create mode 100644 releases/62_BioMimicry/samples/frogs_3.raw create mode 100644 releases/62_BioMimicry/samples/frogs_4.raw create mode 100644 releases/62_BioMimicry/samples/frogs_5.raw create mode 100644 releases/62_BioMimicry/samples/frogs_6.raw create mode 100644 releases/62_BioMimicry/samples/frogs_7.raw create mode 100644 releases/62_BioMimicry/samples/frogs_8.raw create mode 100644 releases/62_BioMimicry/samples/geese_1.raw create mode 100644 releases/62_BioMimicry/samples/geese_2.raw create mode 100644 releases/62_BioMimicry/samples/geese_3.raw create mode 100644 releases/62_BioMimicry/samples/geese_4.raw create mode 100644 releases/62_BioMimicry/samples/geese_5.raw create mode 100644 releases/62_BioMimicry/samples/geese_6.raw create mode 100644 releases/62_BioMimicry/samples/geese_7.raw create mode 100644 releases/62_BioMimicry/samples/geese_8.raw create mode 100644 releases/62_BioMimicry/samples/horses_1.raw create mode 100644 releases/62_BioMimicry/samples/horses_2.raw create mode 100644 releases/62_BioMimicry/samples/horses_3.raw create mode 100644 releases/62_BioMimicry/samples/horses_4.raw create mode 100644 releases/62_BioMimicry/samples/meteors_1.raw create mode 100644 releases/62_BioMimicry/samples/meteors_2.raw create mode 100644 releases/62_BioMimicry/samples/meteors_3.raw create mode 100644 releases/62_BioMimicry/samples/meteors_4.raw create mode 100644 releases/62_BioMimicry/samples/meteors_5.raw create mode 100644 releases/62_BioMimicry/samples/rain_1.raw create mode 100644 releases/62_BioMimicry/samples/rain_2.raw create mode 100644 releases/62_BioMimicry/samples/rain_3.raw create mode 100644 releases/62_BioMimicry/samples/rain_4.raw create mode 100644 releases/62_BioMimicry/samples/rain_5.raw create mode 100644 releases/62_BioMimicry/samples/rain_6.raw create mode 100644 releases/62_BioMimicry/samples/rain_7.raw create mode 100644 releases/62_BioMimicry/samples/rain_8.raw create mode 100644 releases/62_BioMimicry/samples_default.h create mode 100644 releases/62_BioMimicry/samplestore.h create mode 100644 releases/62_BioMimicry/tools/bin2h.py create mode 100644 releases/62_BioMimicry/tools/checksize.cmake create mode 100644 releases/62_BioMimicry/tools/gensamples.py create mode 100644 releases/62_BioMimicry/tools/importwav.py create mode 100644 releases/62_BioMimicry/tools/mksamples.py create mode 100644 releases/62_BioMimicry/tools/simulate.cpp create mode 100644 releases/62_BioMimicry/tools/simulate.py create mode 100644 releases/62_BioMimicry/tusb_config.h create mode 100644 releases/62_BioMimicry/usb_descriptors.c create mode 100644 releases/62_BioMimicry/voices.cpp create mode 100644 releases/62_BioMimicry/voices.h create mode 100644 releases/62_BioMimicry/web/index.html create mode 100644 releases/62_BioMimicry/webui.cpp create mode 100644 releases/62_BioMimicry/webui.h diff --git a/releases/62_BioMimicry/.gitignore b/releases/62_BioMimicry/.gitignore new file mode 100644 index 000000000..a8755f8ab --- /dev/null +++ b/releases/62_BioMimicry/.gitignore @@ -0,0 +1,30 @@ +build/ +build-*/ + +# Generated from samples/*.raw by tools/mksamples.py at build time +samples.h + +# The converted one-shots ARE committed: they are the card's voice, and without +# them a fresh clone builds a silent instrument. Sourced from Pixabay and +# redistributable under the Pixabay Content License. +# +# Source WAVs dropped in for tools/importwav.py to convert are not — they are +# large and the converted .raw files are what the build actually uses. +samples/incoming/ + +# Host-side simulation harness binary +tools/simulate.exe +tools/*.o +__pycache__/ +*.pyc + +# The released firmware IS published, so the site can offer a download and +# compute its sha256. Working copies in FLASHME/ are not. +FLASHME/*.uf2 +FLASHME/*.bin +FLASHME/*.elf + +# Editor / OS noise +.vscode/ +.DS_Store +Thumbs.db diff --git a/releases/62_BioMimicry/CMakeLists.txt b/releases/62_BioMimicry/CMakeLists.txt new file mode 100644 index 000000000..ab840fef9 --- /dev/null +++ b/releases/62_BioMimicry/CMakeLists.txt @@ -0,0 +1,93 @@ +if(WIN32) + set(USERHOME $ENV{USERPROFILE}) +else() + set(USERHOME $ENV{HOME}) +endif() +set(sdkVersion 2.2.0) +set(toolchainVersion 14_2_Rel1) +set(picotoolVersion 2.2.0-a4) +set(picoVscode ${USERHOME}/.pico-sdk/cmake/pico-vscode.cmake) +if (EXISTS ${picoVscode}) + include(${picoVscode}) +endif() + +set(PICO_BOARD pico CACHE STRING "Board type") +cmake_minimum_required (VERSION 3.13) +include(pico_sdk_import.cmake) + +set(CARD_NAME "biomimicry") +project(${CARD_NAME} C CXX ASM) +set(CMAKE_CXX_STANDARD 17) +pico_sdk_init() + +# --- Optional baked-in PCM samples --------------------------------------- +# tools/mksamples.py writes samples.h from samples/*.raw (8-bit signed mono +# 48kHz). Neither the .raw files nor the generated header are committed: with no +# samples present the build still succeeds and alt-boot falls back to the +# synthesized voices (see samples_default.h). +find_package(Python3 COMPONENTS Interpreter) +set(SAMPLE_DIR ${CMAKE_CURRENT_LIST_DIR}/samples) +if (Python3_FOUND AND EXISTS ${SAMPLE_DIR}) + file(GLOB SAMPLE_FILES ${SAMPLE_DIR}/*.raw) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_LIST_DIR}/samples.h + COMMAND ${Python3_EXECUTABLE} tools/mksamples.py samples samples.h + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} + DEPENDS tools/mksamples.py ${SAMPLE_FILES} + COMMENT "Generating samples.h from samples/*.raw") + add_custom_target(pcm_samples DEPENDS ${CMAKE_CURRENT_LIST_DIR}/samples.h) + # The generated header is included by voices.cpp (via samples_default.h); + # name it as a source dependency so editing a sample actually relinks. + set_source_files_properties(voices.cpp PROPERTIES + OBJECT_DEPENDS ${CMAKE_CURRENT_LIST_DIR}/samples.h) +endif() + +add_executable(${CARD_NAME} + main.cpp + engines.cpp + voices.cpp + fastmath.cpp + webui.cpp + usb_descriptors.c) + +if (TARGET pcm_samples) + add_dependencies(${CARD_NAME} pcm_samples) +endif() + +# Cycle-count ProcessSample and show the worst case on the LEDs. Build into a +# SEPARATE directory so the released firmware is never a profile build: +# cmake -B build-profile -G Ninja -DBIO_PROFILE=ON +option(BIO_PROFILE "Cycle-count ProcessSample and report on the LEDs" OFF) +if (BIO_PROFILE) + target_compile_definitions(${CARD_NAME} PRIVATE BIO_PROFILE=1) + message(STATUS "BIO_PROFILE on - this build reports timing, do not release it") +endif() + +target_compile_options(${CARD_NAME} PRIVATE -Wdouble-promotion -Wfloat-conversion -Wall -Wextra) +target_link_options(${CARD_NAME} PRIVATE -Wl,--print-memory-usage) +# The Workshop Computer's crystal needs a long startup delay before the PLL locks. +target_compile_definitions(${CARD_NAME} PRIVATE PICO_XOSC_STARTUP_DELAY_MULTIPLIER=64) + +# Project root, so #include "ComputerCard.h" and the card's own headers resolve. +target_include_directories(${CARD_NAME} PUBLIC ${CMAKE_CURRENT_LIST_DIR}) +target_link_libraries(${CARD_NAME} + pico_unique_id pico_stdlib pico_multicore + hardware_dma hardware_i2c hardware_pwm hardware_adc hardware_spi hardware_vreg + hardware_flash tinyusb_device tinyusb_board) + +# The last 1MB of flash is reserved for user samples uploaded over USB (see +# samplestore.h). Keep the firmware image out of it. +target_compile_definitions(${CARD_NAME} PRIVATE PICO_FLASH_SIZE_BYTES=2097152) + +# Guard the boundary. The firmware image (code + baked samples) must not reach +# 0x100000, or flashing it would overwrite uploaded user samples and an upload +# would overwrite the firmware. Baked audio is the thing most likely to push it +# over, so fail the build loudly rather than corrupt a card. +add_custom_command(TARGET ${CARD_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} + -DELF=$ + -DOBJDUMP=${CMAKE_OBJDUMP} + -DLIMIT=1048576 + -P ${CMAKE_CURRENT_LIST_DIR}/tools/checksize.cmake) +pico_add_extra_outputs(${CARD_NAME}) +pico_enable_stdio_usb(${CARD_NAME} 0) diff --git a/releases/62_BioMimicry/ComputerCard.h b/releases/62_BioMimicry/ComputerCard.h new file mode 100644 index 000000000..36f4273a5 --- /dev/null +++ b/releases/62_BioMimicry/ComputerCard.h @@ -0,0 +1,1200 @@ +/* +ComputerCard - by Chris Johnson + +version 0.3.0 - 12 May 2026 + +ComputerCard is a header-only C++ library, providing a class that +manages the hardware aspects of the Music Thing Modular Workshop +System Computer. + +It aims to present a very simple C++ interface for card programmers +to use the jacks, knobs, switch and LEDs, for programs running at +a fixed 48kHz audio sample rate. + +See examples/ directory +*/ + + +#ifndef COMPUTERCARD_H +#define COMPUTERCARD_H + +#include "hardware/gpio.h" +#include "hardware/pwm.h" + +#define PULSE_1_RAW_OUT 8 +#define PULSE_2_RAW_OUT 9 + +#define CV_OUT_1 23 +#define CV_OUT_2 22 + +// USB host status pin +#define USB_HOST_STATUS 20 + +class ComputerCard +{ + constexpr static int numLeds = 6; + constexpr static uint8_t leds[numLeds] = { 10, 11, 12, 13, 14, 15 }; +public: + + /// Knob index, used by KnobVal + enum Knob {Main, X, Y}; + /// Switch position, used by SwitchVal + enum Switch {Down, Middle, Up}; + /// Input jack socket, used by Connected and Disconnected + enum Input {Audio1, Audio2, CV1, CV2, Pulse1, Pulse2}; + /// Hardware version + enum HardwareVersion_t {Proto1=0x2a, Proto2_Rev1=0x30, Rev1_1=0x0C, Unknown=0xFF}; + /// USB Power state + enum USBPowerState_t {DFP, UFP, Unsupported}; + + ComputerCard(); + + /** \brief Start audio processing. + + The Run method starts audio processing, calling ProcessSample using an interrupt. + Run is a blocking function (it never returns) + */ + void Run() + { + ComputerCard::thisptr = this; + AudioWorker(); + } + + /// Use before Run() to enable Connected/Disconnected detection + void EnableNormalisationProbe() {useNormProbe = true;} + + static ComputerCard *ThisPtr() {return thisptr;} + +protected: + + class NotchFilter + { + public: + NotchFilter() + { + mix1 = mix2 = mixf1 = mixf2 = 0; + } + int32_t operator()(int32_t val) + { + int32_t mixf = (ooa0 * (val + mix2) - a2oa0 * mixf2) >> 14; + mix2 = mix1; + mix1 = val; + mixf2 = mixf1; + mixf1 = mixf; + return mixf; + } + private: + // 12kHz notch filter, to remove interference from mux lines + int32_t mix1, mix2, mixf1, mixf2; + static constexpr int32_t ooa0 = 16302, a2oa0 = 16221; // Q = 100, very narrow notch + + }; + + NotchFilter notchLeft, notchRight; + + /// Callback, called once per sample at 48kHz + virtual void ProcessSample() = 0; + + + + + /// Read knob position (returns 0-4095) + int32_t __not_in_flash_func(KnobVal)(Knob ind) {return knobs[ind];} + + /// Read switch position + Switch __not_in_flash_func(SwitchVal)() {return switchVal;} + + /// Read switch position + bool __not_in_flash_func(SwitchChanged)() {return switchVal != lastSwitchVal;} + + + /// Set Audio output (values -2048 to 2047) + void __not_in_flash_func(AudioOut)(int i, int16_t val) + { + dacOut[i] = val; + } + + /// Set Audio 1 output (values -2048 to 2047) + void __not_in_flash_func(AudioOut1)(int16_t val) + { + dacOut[0] = val; + } + + /// Set Audio 2 output (values -2048 to 2047) + void __not_in_flash_func(AudioOut2)(int16_t val) + { + dacOut[1] = val; + } + + + /// Set CV output (values -2048 to 2047) + void __not_in_flash_func(CVOut)(int i, int16_t val) + { + if (val<-2048) val = -2048; + if (val > 2047) val = 2047; + cvValue[i] = (2047-val)*125; + } + + /// Set CV 1 output (values -2048 to 2047) + void __not_in_flash_func(CVOut1)(int16_t val) + { + if (val<-2048) val = -2048; + if (val > 2047) val = 2047; + cvValue[0] = (2047-val)*125; + } + + /// Set CV 2 output (values -2048 to 2047) + void __not_in_flash_func(CVOut2)(int16_t val) + { + if (val<-2048) val = -2048; + if (val > 2047) val = 2047; + cvValue[1] = (2047-val)*125; + } + + + /// Set CV output (values -262144 to 262143) + void __not_in_flash_func(CVOutPrecise)(int i, int32_t val) + { + if (val<-262144) val = -262144; + if (val > 262143) val = 262143; + cvValue[i] = ((262143-val)*125)>>7; + } + + /// Set CV 1 output (values -262144 to 262143) + void __not_in_flash_func(CVOut1Precise)(int32_t val) + { + if (val<-262144) val = -262144; + if (val > 262143) val = 262143; + cvValue[0] = ((262143-val)*125)>>7; + } + + /// Set CV 2 output (values -262144 to 262143) + void __not_in_flash_func(CVOut2Precise)(int32_t val) + { + if (val<-262144) val = -262144; + if (val > 262143) val = 262143; + cvValue[1] = ((262143-val)*125)>>7; + } + + /// Set CV 1 output from calibrated MIDI note number (values 0 to 127) + void __not_in_flash_func(CVOutMIDINote)(int i, uint8_t noteNum) + { + cvValue[i] = MIDIToDAC(noteNum, i); + } + + /// Set CV 1 output from calibrated MIDI note number (values 0 to 127) + void __not_in_flash_func(CVOut1MIDINote)(uint8_t noteNum) + { + cvValue[0] = MIDIToDAC(noteNum, 0); + } + + /// Set CV 2 output from calibrated MIDI note number (values 0 to 127) + void __not_in_flash_func(CVOut2MIDINote)(uint8_t noteNum) + { + cvValue[1] = MIDIToDAC(noteNum, 1); + } + + + /// Set CV 1 output from calibrated MIDI note number (values 0 to 127) + bool __not_in_flash_func(CVOutMillivolts)(int i, int32_t millivolts) + { + bool limited = false; + cvValue[i] = MillivoltsToDAC(millivolts, i, limited); + return limited; + } + + /// Set CV 1 output from calibrated MIDI note number (values 0 to 127) + bool __not_in_flash_func(CVOut1Millivolts)(int32_t millivolts) + { + bool limited = false; + cvValue[0] = MillivoltsToDAC(millivolts, 0, limited); + return limited; + } + + /// Set CV 2 output from calibrated MIDI note number (values 0 to 127) + bool __not_in_flash_func(CVOut2Millivolts)(int32_t millivolts) + { + bool limited = false; + cvValue[1] = MillivoltsToDAC(millivolts, 1, limited); + return limited; + } + + + /// Set Pulse output (true = on) + void __not_in_flash_func(PulseOut)(int i, bool val) + { + gpio_put(PULSE_1_RAW_OUT + i, !val); + } + + /// Set Pulse 1 output (true = on) + void __not_in_flash_func(PulseOut1)(bool val) + { + gpio_put(PULSE_1_RAW_OUT, !val); + } + + /// Set Pulse 2 output (true = on) + void __not_in_flash_func(PulseOut2)(bool val) + { + gpio_put(PULSE_2_RAW_OUT, !val); + } + + /// Return audio in (-2048 to 2047) + int16_t __not_in_flash_func(AudioIn)(int i){return i?adcInR:adcInL;} + + /// Return audio in 1 (-2048 to 2047) + int16_t __not_in_flash_func(AudioIn1)(){return adcInL;} + + /// Return audio in 1 (-2048 to 2047) + int16_t __not_in_flash_func(AudioIn2)(){return adcInR;} + + /// Return CV in (-2048 to 2047) + int16_t __not_in_flash_func(CVIn)(int i){return cv[i];} + + /// Return CV in 1 (-2048 to 2047) + int16_t __not_in_flash_func(CVIn1)(){return cv[0];} + + /// Return CV in 2 (-2048 to 2047) + int16_t __not_in_flash_func(CVIn2)(){return cv[1];} + + /// Read pulse in + bool __not_in_flash_func(PulseIn)(int i){return pulse[i];} + /// Return true for one sample on pulse rising edge + bool __not_in_flash_func(PulseInRisingEdge)(int i){return pulse[i] && !last_pulse[i];} + /// Return true for one sample on pulse falling edge + bool __not_in_flash_func(PulseInFallingEdge)(int i){return !pulse[i] && last_pulse[i];} + + /// Read pulse in 1 + bool __not_in_flash_func(PulseIn1)(){return pulse[0];} + /// Return true for one sample on pulse 1 rising edge + bool __not_in_flash_func(PulseIn1RisingEdge)(){return pulse[0] && !last_pulse[0];} + /// Return true for one sample on pulse 1 falling edge + bool __not_in_flash_func(PulseIn1FallingEdge)(){return !pulse[0] && last_pulse[0];} + + /// Read pulse in 2 + bool __not_in_flash_func(PulseIn2)(){return pulse[1];} + /// Return true for one sample on pulse 2 falling edge + bool __not_in_flash_func(PulseIn2FallingEdge)(){return !pulse[1] && last_pulse[1];} + /// Return true for one sample on pulse 2 rising edge + bool __not_in_flash_func(PulseIn2RisingEdge)(){return pulse[1] && !last_pulse[1];} + + + /// Return true if jack connected to input + bool __not_in_flash_func(Connected)(Input i){return connected[i];} + /// Return true if no jack connected to input + bool __not_in_flash_func(Disconnected)(Input i){return !connected[i];} + + + /// Set LED brightness, values 0-4095 + // Led numbers are: + // 0 1 + // 2 3 + // 4 5 + void __not_in_flash_func(LedBrightness)(uint32_t index, uint16_t value) + { + pwm_set_gpio_level(leds[index], (value*value)>>8); + } + + /// Turn LED on/off + void __not_in_flash_func(LedOn)(uint32_t index, bool value = true) + { + pwm_set_gpio_level(leds[index], value?65535:0); + } + + /// Turn LED off + void __not_in_flash_func(LedOff)(uint32_t index) + { + pwm_set_gpio_level(leds[index], 0); + } + + // Return power state of USB port + USBPowerState_t USBPowerState() + { + if (HardwareVersion() != Rev1_1) + return Unsupported; + else if (gpio_get(USB_HOST_STATUS)) + return UFP; + else + return DFP; + } + + /// Return hardware version + HardwareVersion_t HardwareVersion() const + { + return hw; + } + + /// Return ID number unique to flash card + uint64_t UniqueCardID() const + { + return uniqueID; + } + + /// Return true iff CV outputs are calibrated. + /// Returns false if using default calibration values. + bool CVOutsCalibrated() const + { + return cvOutsCalibrated; + } + + + void Abort(); + + uint16_t CRCencode(const uint8_t *data, int length); + +private: + + typedef struct + { + float m, b; + int32_t mi, bi; + } CalCoeffs; + + typedef struct + { + int32_t dacSetting; + int8_t voltage; + } CalPoint; + + static constexpr int calMaxChannels = 2; + static constexpr int calMaxPoints = 10; + + static volatile uint32_t cvValue[2]; + + uint8_t numCalibrationPoints[calMaxChannels]; + CalPoint calibrationTable[calMaxChannels][calMaxPoints]; + CalCoeffs calCoeffs[calMaxChannels]; + + uint64_t uniqueID; + + uint8_t ReadByteFromEEPROM(unsigned int eeAddress, bool &failed); + int ReadIntFromEEPROM(unsigned int eeAddress, bool &failed); + void CalcCalCoeffs(int channel); + int ReadEEPROM(); + uint32_t MIDIToDAC(int midiNote, int channel); + uint32_t MillivoltsToDAC(int millivolts, int channel, bool &limited); + + HardwareVersion_t hw; + HardwareVersion_t ProbeHardwareVersion(); + + int16_t dacOut[2]; + + volatile int32_t knobs[4] = { 0, 0, 0, 0 }; // 0-4095 + volatile bool pulse[2] = { 0, 0 }; + volatile bool last_pulse[2] = { 0, 0 }; + volatile int32_t cv[2] = { 0, 0 }; // -2047 - 2048 + volatile int16_t adcInL = 0x800, adcInR = 0x800; + + volatile uint8_t mxPos = 0; // external multiplexer value + + volatile int32_t plug_state[6] = {0,0,0,0,0,0}; + volatile bool connected[6] = {0,0,0,0,0,0}; + bool useNormProbe; + + Switch switchVal, lastSwitchVal; + + volatile uint8_t runADCMode; + + bool cvOutsCalibrated; + +// Buffers that DMA reads into / out of + uint16_t ADC_Buffer[2][8]; + uint16_t SPI_Buffer[2][2]; + + uint8_t adc_dma, spi_dma; // DMA ids + + + + uint8_t dmaPhase = 0; + + // Convert signed int16 value into data string for DAC output + uint16_t __not_in_flash_func(dacval)(int16_t value, uint16_t dacChannel) + { + if (value<-2048) value = -2048; + if (value > 2047) value = 2047; + return (dacChannel | 0x3000) | (((uint16_t)((value & 0x0FFF) + 0x800)) & 0x0FFF); + } + uint32_t next_norm_probe(); + + + void CorrectADCDNL(uint16_t &value) const; + + void BufferFull(); + + void AudioWorker(); + + static void AudioCallback() + { + thisptr->BufferFull(); + } + static ComputerCard *thisptr; + + // 19-bit CV outputs + static void OnCVPWMWrap() + { + static int32_t error1 = 0, error2 = 0; + + pwm_clear_irq(pwm_gpio_to_slice_num(CV_OUT_1)); // clear the interrupt flag + uint32_t truncated_cv1_val = (cvValue[0]-error1) & 0xFFFFFF00; + error1 += truncated_cv1_val - cvValue[0]; + pwm_set_gpio_level(CV_OUT_1, (truncated_cv1_val>>8)); + uint32_t truncated_cv2_val = (cvValue[1]-error2) & 0xFFFFFF00; + error2 += truncated_cv2_val - cvValue[1]; + pwm_set_gpio_level(CV_OUT_2, (truncated_cv2_val>>8)); + } + +}; + + +#ifndef COMPUTERCARD_NOIMPL + + +#include "hardware/adc.h" +#include "hardware/clocks.h" +#include "hardware/dma.h" +#include "hardware/flash.h" +#include "hardware/i2c.h" +#include "hardware/irq.h" +#include "hardware/spi.h" + +// Input normalisation probe pin +#define NORMALISATION_PROBE 4 + +// Mux pins +#define MX_A 24 +#define MX_B 25 + +// ADC input pins +#define AUDIO_L_IN_1 27 +#define AUDIO_R_IN_1 26 +#define MUX_IO_1 28 +#define MUX_IO_2 29 + +#define DAC_CHANNEL_A 0x0000 +#define DAC_CHANNEL_B 0x8000 + +#define DAC_CS 21 +#define DAC_SCK 18 +#define DAC_TX 19 + +#define EEPROM_SDA 16 +#define EEPROM_SCL 17 + +#define PULSE_1_INPUT 2 +#define PULSE_2_INPUT 3 + +#define DEBUG_1 0 +#define DEBUG_2 1 + +#define SPI_PORT spi0 +#define SPI_DREQ DREQ_SPI0_TX + + +#define BOARD_ID_0 7 +#define BOARD_ID_1 6 +#define BOARD_ID_2 5 + +// The ADC (/DMA) run mode, used to stop DMA in a known state before writing to flash +#define RUN_ADC_MODE_RUNNING 0 +#define RUN_ADC_MODE_REQUEST_ADC_STOP 1 +#define RUN_ADC_MODE_ADC_STOPPED 2 +#define RUN_ADC_MODE_REQUEST_ADC_RESTART 3 + + +#define EEPROM_ADDR_ID 0 +#define EEPROM_ADDR_VERSION 2 +#define EEPROM_ADDR_CRC_L 87 +#define EEPROM_ADDR_CRC_H 86 +#define EEPROM_VAL_ID 2001 +#define EEPROM_NUM_BYTES 88 + +#define EEPROM_PAGE_ADDRESS 0x50 + + +// Initialise CV output delta-sigma target to half-way (near 0V) +volatile uint32_t ComputerCard::cvValue[2] = {262144,262144}; + + +ComputerCard *ComputerCard::thisptr; + +// Return pseudo-random bit for normalisation probe +uint32_t __not_in_flash_func(ComputerCard::next_norm_probe)() +{ + static uint32_t lcg_seed = 1; + lcg_seed = 1664525 * lcg_seed + 1013904223; + return lcg_seed >> 31; +} + +// Main audio core function +void __not_in_flash_func(ComputerCard::AudioWorker)() +{ + + adc_select_input(0); + adc_set_round_robin(0b0001111U); + + // enabled, with DMA request when FIFO contains data, no erro flag, no byte shift + adc_fifo_setup(true, true, 1, false, false); + + + // ADC clock runs at 48MHz + // 48MHz ÷ (124+1) = 384kHz ADC sample rate + // = 8×48kHz audio sample rate + adc_set_clkdiv(124); + + // claim and setup DMAs for reading to ADC, and writing to SPI DAC + adc_dma = dma_claim_unused_channel(true); + spi_dma = dma_claim_unused_channel(true); + + dma_channel_config adc_dmacfg, spi_dmacfg; + adc_dmacfg = dma_channel_get_default_config(adc_dma); + spi_dmacfg = dma_channel_get_default_config(spi_dma); + + // Reading from ADC into memory buffer, so increment on write, but no increment on read + channel_config_set_transfer_data_size(&adc_dmacfg, DMA_SIZE_16); + channel_config_set_read_increment(&adc_dmacfg, false); + channel_config_set_write_increment(&adc_dmacfg, true); + + // Synchronise ADC DMA the ADC samples + channel_config_set_dreq(&adc_dmacfg, DREQ_ADC); + + // Setup DMA for 8 ADC samples + dma_channel_configure(adc_dma, &adc_dmacfg, ADC_Buffer[dmaPhase], &adc_hw->fifo, 8, true); + + // Turn on IRQ for ADC DMA + dma_channel_set_irq0_enabled(adc_dma, true); + + // Call buffer_full ISR when ADC DMA finished + irq_set_enabled(DMA_IRQ_0, true); + irq_set_exclusive_handler(DMA_IRQ_0, ComputerCard::AudioCallback); + + + // Turn on IRQ for CV output PWM + uint slice_num = pwm_gpio_to_slice_num(CV_OUT_1); + pwm_clear_irq(slice_num); + pwm_set_irq_enabled(slice_num, true); + + irq_set_exclusive_handler(PWM_IRQ_WRAP, ComputerCard::OnCVPWMWrap); + irq_set_priority(PWM_IRQ_WRAP, 255); + irq_set_enabled(PWM_IRQ_WRAP, true); + + + // Set up DMA for SPI + spi_dmacfg = dma_channel_get_default_config(spi_dma); + channel_config_set_transfer_data_size(&spi_dmacfg, DMA_SIZE_16); + + // SPI DMA timed to SPI TX + channel_config_set_dreq(&spi_dmacfg, SPI_DREQ); + + // Set up DMA to transmit 2 samples to SPI + dma_channel_configure(spi_dma, &spi_dmacfg, &spi_get_hw(SPI_PORT)->dr, NULL, 2, false); + + // Pre-fill SPI buffers with 0V DAC words so the first DMA transfer outputs + // silence rather than uninitialised RAM, eliminating the power-on click. + uint16_t silence_a = dacval(0, DAC_CHANNEL_A); + uint16_t silence_b = dacval(0, DAC_CHANNEL_B); + for (int i = 0; i < 2; i++) { + SPI_Buffer[i][0] = silence_a; + SPI_Buffer[i][1] = silence_b; + } + + adc_run(true); + + while (1) + { + // If ready to restart + if (runADCMode == RUN_ADC_MODE_REQUEST_ADC_RESTART) + { + runADCMode = RUN_ADC_MODE_RUNNING; + + dma_hw->ints0 = 1u << adc_dma; // reset adc interrupt flag + dma_channel_set_write_addr(adc_dma, ADC_Buffer[dmaPhase], true); // start writing into new buffer + dma_channel_set_read_addr(spi_dma, SPI_Buffer[dmaPhase], true); // start reading from new buffer + + adc_set_round_robin(0); + adc_select_input(0); + adc_set_round_robin(0b0001111U); + adc_run(true); + } + else if (runADCMode == RUN_ADC_MODE_ADC_STOPPED) + { + // We can't remove the PWM IRQ from within the ADC IRQ callback, so we do it here instead. + irq_set_enabled(PWM_IRQ_WRAP, false); + pwm_clear_irq(pwm_gpio_to_slice_num(CV_OUT_1)); // reset CV PWM interrupt flag + irq_remove_handler(PWM_IRQ_WRAP, ComputerCard::OnCVPWMWrap); + break; + } + + + } +} + +void ComputerCard::Abort() +{ + runADCMode = RUN_ADC_MODE_REQUEST_ADC_STOP; +} + +void __not_in_flash_func(ComputerCard::CorrectADCDNL)(uint16_t &value) const +{ + uint16_t adc512 = value + 512; + value += ((value & 0x3FF) == 0x1FF) << 2; + value += (adc512 >> 10) << 3; + value = uint32_t(value * 520349) >> 19; // Multiply by factor that maps 0-4095 input into 0-4095 output +} + +// Per-audio-sample ISR, called when two sets of ADC samples have been collected from all four inputs +void __not_in_flash_func(ComputerCard::BufferFull)() +{ + static int startupCounter = 8; // Decreases by 1 each sample, can do startup things when nonzero. + static int mux_state = 0; + static int norm_probe_count = 0; + + // Internal variables for IIR filters on knobs/cv + static volatile int32_t knobssm[4] = { 0, 0, 0, 0 }; + static volatile int32_t cvsm[2] = { 0, 0 }; + __attribute__((unused)) static int np = 0, np1 = 0, np2 = 0; + + // Stop ADC before touching AINSEL — guarantees any in-progress conversion + // finishes and lands in the FIFO before we drain it, so DMA re-arm always + // starts on ch0 with an empty FIFO. adc_select_input() mid-conversion is + // not enough: the current conversion completes on the old channel first and + // that sample ends up as ADC_Buffer[n][0], shifting the burst by 1–3 slots. + hw_clear_bits(&adc_hw->cs, ADC_CS_START_MANY_BITS); + while (!(adc_hw->cs & ADC_CS_READY_BITS)) {} // wait for any in-progress conversion to complete + while (!adc_fifo_is_empty()) (void)adc_fifo_get(); + adc_select_input(0); + + // Advance external mux to next state + int next_mux_state = (mux_state + 1) & 0x3; + gpio_put(MX_A, next_mux_state & 1); + gpio_put(MX_B, next_mux_state & 2); + + // Set up new writes into next buffer + uint8_t cpuPhase = dmaPhase; + dmaPhase = 1 - dmaPhase; + + dma_hw->ints0 = 1u << adc_dma; // reset adc interrupt flag + dma_channel_set_write_addr(adc_dma, ADC_Buffer[dmaPhase], true); // start writing into new buffer + dma_channel_set_read_addr(spi_dma, SPI_Buffer[dmaPhase], true); // start reading from new buffer + hw_set_bits(&adc_hw->cs, ADC_CS_START_MANY_BITS); + + //////////////////////////////////////// + // Collect various inputs and put them in variables for the DSP + + // Set CV inputs, with ~240Hz LPF on CV input + int cvi = mux_state % 2; + + // Compensation of ADC DNL errors. + CorrectADCDNL(ADC_Buffer[cpuPhase][7]); // CV inputs + CorrectADCDNL(ADC_Buffer[cpuPhase][0]); // Audio inputs + CorrectADCDNL(ADC_Buffer[cpuPhase][4]); + CorrectADCDNL(ADC_Buffer[cpuPhase][1]); + CorrectADCDNL(ADC_Buffer[cpuPhase][5]); + + cvsm[cvi] = (15 * (cvsm[cvi]) + 16 * ADC_Buffer[cpuPhase][7]) >> 4; + cv[cvi] = 2048 - (cvsm[cvi] >> 4); + + + // Set audio inputs, by averaging the two samples collected. + // Invert to counteract inverting op-amp input configuration + adcInR = -(((ADC_Buffer[cpuPhase][0] + ADC_Buffer[cpuPhase][4]) - 0x1000) >> 1); + adcInL = -(((ADC_Buffer[cpuPhase][1] + ADC_Buffer[cpuPhase][5]) - 0x1000) >> 1); + + // 12kHz notch filters + adcInR = notchRight(adcInR); + adcInL = notchLeft(adcInL); + + // Set pulse inputs + last_pulse[0] = pulse[0]; + last_pulse[1] = pulse[1]; + pulse[0] = !gpio_get(PULSE_1_INPUT); + pulse[1] = !gpio_get(PULSE_2_INPUT); + + // Set knobs, with ~60Hz LPF + int knob = mux_state; + knobssm[knob] = (127 * (knobssm[knob]) + 16 * ADC_Buffer[cpuPhase][6]) >> 7; + knobs[knob] = knobssm[knob] >> 4; + + // Set switch value + switchVal = static_cast((knobs[3]>1000) + (knobs[3]>3000)); + if (startupCounter) + { + // Don't detect switch changes in first few cycles + lastSwitchVal = switchVal; + // Should initialise knob and CV smoothing filters here too + } + + //////////////////////////// + // Normalisation probe + + if (useNormProbe) + { + // Set normalisation probe output value + // and update np to the expected history string + if (norm_probe_count == 0) + { + int32_t normprobe = next_norm_probe(); + gpio_put(NORMALISATION_PROBE, normprobe); + np = (np<<1)+(normprobe&0x1); + } + + // CV sampled at 24kHz comes in over two successive samples + if (norm_probe_count == 14 || norm_probe_count == 15) + { + plug_state[2+cvi] = (plug_state[2+cvi]<<1)+(ADC_Buffer[cpuPhase][7]<1800); + } + + // Audio and pulse measured every sample at 48kHz + if (norm_probe_count == 15) + { + plug_state[Input::Audio1] = (plug_state[Input::Audio1]<<1)+(ADC_Buffer[cpuPhase][5]<1800); + plug_state[Input::Audio2] = (plug_state[Input::Audio2]<<1)+(ADC_Buffer[cpuPhase][4]<1800); + plug_state[Input::Pulse1] = (plug_state[Input::Pulse1]<<1)+(pulse[0]); + plug_state[Input::Pulse2] = (plug_state[Input::Pulse2]<<1)+(pulse[1]); + + for (int i=0; i<6; i++) + { + connected[i] = (np != plug_state[i]); + } + } + + // Force disconnected values to zero, rather than the normalisation probe garbage + if (Disconnected(Input::Audio1)) adcInL = 0; + if (Disconnected(Input::Audio2)) adcInR = 0; + if (Disconnected(Input::CV1)) cv[0] = 0; + if (Disconnected(Input::CV2)) cv[1] = 0; + if (Disconnected(Input::Pulse1)) pulse[0] = 0; + if (Disconnected(Input::Pulse2)) pulse[1] = 0; + } + + //////////////////////////////////////// + // Run the DSP + ProcessSample(); + + //////////////////////////////////////// + // Collect DSP outputs and put them in the DAC SPI buffer + // CV/Pulse outputs are done immediately in ProcessSample + + // Invert dacout to counteract inverting output configuration + SPI_Buffer[cpuPhase][0] = dacval(-dacOut[0], DAC_CHANNEL_A); + SPI_Buffer[cpuPhase][1] = dacval(-dacOut[1], DAC_CHANNEL_B); + + mux_state = next_mux_state; + + // If Abort called, stop ADC and DMA + if (runADCMode == RUN_ADC_MODE_REQUEST_ADC_STOP) + { + adc_run(false); + adc_set_round_robin(0); + adc_select_input(0); + + dma_hw->ints0 = 1u << adc_dma; // reset adc interrupt flag + dma_channel_cleanup(adc_dma); + dma_channel_cleanup(spi_dma); + irq_set_enabled(DMA_IRQ_0, false); + irq_remove_handler(DMA_IRQ_0, ComputerCard::AudioCallback); + + + + runADCMode = RUN_ADC_MODE_ADC_STOPPED; + } + + norm_probe_count = (norm_probe_count + 1) & 0xF; + + lastSwitchVal = switchVal; + + if (startupCounter) startupCounter--; +} + +ComputerCard::HardwareVersion_t ComputerCard::ProbeHardwareVersion() +{ + // Enable pull-downs, and measure + gpio_set_pulls(BOARD_ID_0, false, true); + gpio_set_pulls(BOARD_ID_1, false, true); + gpio_set_pulls(BOARD_ID_2, false, true); + sleep_us(1); + + // Pull-down state in bits 0, 2, 4 + uint8_t pd = gpio_get(BOARD_ID_0) | (gpio_get(BOARD_ID_1) << 2) | (gpio_get(BOARD_ID_2) << 4); + + // Enable pull-ups, and measure + gpio_set_pulls(BOARD_ID_0, true, false); + gpio_set_pulls(BOARD_ID_1, true, false); + gpio_set_pulls(BOARD_ID_2, true, false); + sleep_us(1); + + // Pull-up state in bits 1, 3, 5 + uint8_t pu = (gpio_get(BOARD_ID_0) << 1) | (gpio_get(BOARD_ID_1) << 3) | (gpio_get(BOARD_ID_2) << 5); + + // Combine to give 6-bit ID + uint8_t id = pd | pu; + + // Set pull-downs + gpio_set_pulls(BOARD_ID_0, false, true); + gpio_set_pulls(BOARD_ID_1, false, true); + gpio_set_pulls(BOARD_ID_2, false, true); + + switch (id) + { + case Proto1: + case Proto2_Rev1: + case Rev1_1: + return static_cast(id); + default: + return Unknown; + } +} + +ComputerCard::ComputerCard() +{ + runADCMode = RUN_ADC_MODE_RUNNING; + + adc_run(false); + adc_select_input(0); + + + useNormProbe = false; + for (int i=0; i<6; i++) + { + connected[i] = false; + } + + + //////////////////////////////////////// + // Initialise LEDs (PWM, set up in pairs due pinout and PWM hardware) + for (int i = 0; i < numLeds; i+=2) + { + gpio_set_function(leds[i], GPIO_FUNC_PWM); + gpio_set_function(leds[i]+1, GPIO_FUNC_PWM); + + // now create PWM config struct + pwm_config config = pwm_get_default_config(); + pwm_config_set_wrap(&config, 65535); // 16-bit PWM + + + // now set this PWM config to apply to the two outputs + pwm_init(pwm_gpio_to_slice_num(leds[i]), &config, true); + pwm_init(pwm_gpio_to_slice_num(leds[i]+1), &config, true); + + // set initial level + pwm_set_gpio_level(leds[i], 0); + pwm_set_gpio_level(leds[i]+1, 0); + } + + + //////////////////////////////////////// + // Initialise knobs / audio in / CV in (ADC + Mux) + + adc_init(); // Initialize the ADC + + // Set ADC pins + adc_gpio_init(AUDIO_L_IN_1); + adc_gpio_init(AUDIO_R_IN_1); + adc_gpio_init(MUX_IO_1); + adc_gpio_init(MUX_IO_2); + + // Initialize Mux Control pins + gpio_init(MX_A); + gpio_init(MX_B); + gpio_set_dir(MX_A, GPIO_OUT); + gpio_set_dir(MX_B, GPIO_OUT); + + + //////////////////////////////////////// + + gpio_init(PULSE_1_RAW_OUT); + gpio_set_dir(PULSE_1_RAW_OUT, GPIO_OUT); + gpio_put(PULSE_1_RAW_OUT, true); // set raw value high (output low) + + + gpio_init(PULSE_2_RAW_OUT); + gpio_set_dir(PULSE_2_RAW_OUT, GPIO_OUT); + gpio_put(PULSE_2_RAW_OUT, true); // set raw value high (output low) + + + //////////////////////////////////////// + // Initialise pulse inputs + gpio_init(PULSE_1_INPUT); + gpio_set_dir(PULSE_1_INPUT, GPIO_IN); + gpio_pull_up(PULSE_1_INPUT); // NB Needs pullup to activate transistor on inputs + + gpio_init(PULSE_2_INPUT); + gpio_set_dir(PULSE_2_INPUT, GPIO_IN); + gpio_pull_up(PULSE_2_INPUT); // NB: Needs pullup to activate transistor on inputs + + + //////////////////////////////////////// + // Initialise audio outputs (SPI for external DAC) + spi_init(SPI_PORT, 15625000); + spi_set_format(SPI_PORT, 16, SPI_CPOL_0, SPI_CPHA_0, SPI_MSB_FIRST); + gpio_set_function(DAC_SCK, GPIO_FUNC_SPI); + gpio_set_function(DAC_TX, GPIO_FUNC_SPI); + gpio_set_function(DAC_CS, GPIO_FUNC_SPI); + + + //////////////////////////////////////// + // Initialise CV outputs + // We set up the PWM here, and add the IRQ for sigma-delta later one Run() is called + + // First, tell the CV pins that the PWM is in charge of the value. + gpio_set_function(CV_OUT_1, GPIO_FUNC_PWM); + gpio_set_function(CV_OUT_2, GPIO_FUNC_PWM); + + // now create PWM config struct + { + pwm_config config = pwm_get_default_config(); + pwm_config_set_wrap(&config, 1999); // less than 11-bit PWM + // now set this PWM config to apply to the two outputs + // NB: CV_A and CV_B share the same PWM slice, which means that they share a PWM config + // They have separate 'gpio_level's (output compare unit) though, so they can have different PWM on-times + pwm_init(pwm_gpio_to_slice_num(CV_OUT_1), &config, true); // Slice 1, channel A + pwm_init(pwm_gpio_to_slice_num(CV_OUT_2), &config, true); // slice 1 channel B (redundant to set up again) + + } + // set initial level to half way (0V) + pwm_set_gpio_level(CV_OUT_1, 1000); + pwm_set_gpio_level(CV_OUT_2, 1000); + + + //////////////////////////////////////// + // Miscellaneous pins + + // Initialise board version ID pins + gpio_init(BOARD_ID_0); + gpio_init(BOARD_ID_1); + gpio_init(BOARD_ID_2); + gpio_set_dir(BOARD_ID_0, GPIO_IN); + gpio_set_dir(BOARD_ID_1, GPIO_IN); + gpio_set_dir(BOARD_ID_2, GPIO_IN); + + // Initialise USB host status pin + gpio_init(USB_HOST_STATUS); + gpio_disable_pulls(USB_HOST_STATUS); + + // Initialise normalisation probe pin + gpio_init(NORMALISATION_PROBE); + gpio_set_dir(NORMALISATION_PROBE, GPIO_OUT); + gpio_put(NORMALISATION_PROBE, false); + + // Initialise EEPROM (I2C) + i2c_init(i2c0, 100 * 1000); + gpio_set_function(EEPROM_SDA, GPIO_FUNC_I2C); + gpio_set_function(EEPROM_SCL, GPIO_FUNC_I2C); + + + // If not using UART pins for UART, instead use as debug lines +#ifndef ENABLE_UART_DEBUGGING + // Debug pins + gpio_init(DEBUG_1); + gpio_set_dir(DEBUG_1, GPIO_OUT); + + gpio_init(DEBUG_2); + gpio_set_dir(DEBUG_2, GPIO_OUT); +#endif + + // Read hardware version + hw = ProbeHardwareVersion(); + + // Read EEPROM calibration values + cvOutsCalibrated = (ReadEEPROM() == 0); + + // Read unique card ID + flash_get_unique_id((uint8_t *) &uniqueID); + // Do some mixing up of the bits using full-cycle 64-bit LCG + // Should help ensure most bytes change even if many bits of + // the original flash unique ID are the same between flash chips. + for (int i=0; i<20; i++) + { + uniqueID = uniqueID * 6364136223846793005ULL + 1442695040888963407ULL; + } +} + + + +// Read a byte from EEPROM +uint8_t ComputerCard::ReadByteFromEEPROM(unsigned int eeAddress, bool &failed) +{ + uint8_t deviceAddress = EEPROM_PAGE_ADDRESS | ((eeAddress >> 8) & 0x0F); + uint8_t data = 0xFF; + + uint8_t addr_low_byte = eeAddress & 0xFF; + + if (i2c_write_timeout_us(i2c0, deviceAddress, &addr_low_byte, 1, false, 10000) <= 0) + { + failed = true; + return 0; + } + + if (i2c_read_timeout_us(i2c0, deviceAddress, &data, 1, false, 10000) <= 0) + { + failed = true; + return 0; + } + + return data; +} + +// Read a 16-bit integer from EEPROM +int ComputerCard::ReadIntFromEEPROM(unsigned int eeAddress, bool &failed) +{ + uint8_t highByte = ReadByteFromEEPROM(eeAddress, failed); + uint8_t lowByte = ReadByteFromEEPROM(eeAddress + 1, failed); + + return (highByte << 8) | lowByte; +} + +uint16_t ComputerCard::CRCencode(const uint8_t *data, int length) +{ + uint16_t crc = 0xFFFF; // Initial CRC value + for (int i = 0; i < length; i++) + { + crc ^= ((uint16_t)data[i]) << 8; // Bring in the next byte + for (uint8_t bit = 0; bit < 8; bit++) + { + if (crc & 0x8000) + { + crc = (crc << 1) ^ 0x1021; // CRC-CCITT polynomial + } + else + { + crc = crc << 1; + } + } + } + return crc; +} + + +int ComputerCard::ReadEEPROM() +{ + // Set up default values in the calibration table, + // to be used if we can't read valid calibration from EEPROM + for (unsigned channel = 0; channel < calMaxChannels; channel++) + { + numCalibrationPoints[channel] = 3; + calibrationTable[channel][0].voltage = -20; // -2V + calibrationTable[channel][0].dacSetting = 347700; + calibrationTable[channel][1].voltage = 0; // 0V + calibrationTable[channel][1].dacSetting = 261200; + calibrationTable[channel][2].voltage = 20; // +2V + calibrationTable[channel][2].dacSetting = 174400; + CalcCalCoeffs(channel); // calculate the coefficients + } + + // Read magic number + // Failure here could occur if I2C failed, or if incorrect/no magic number stored in EEPROM + bool i2cFailed = false; + if (ReadIntFromEEPROM(EEPROM_ADDR_ID, i2cFailed) != EEPROM_VAL_ID) + { + return 1; + } + + // Read the EEPROM into RAM + uint8_t buf[EEPROM_NUM_BYTES]; + for (int i = 0; i < EEPROM_NUM_BYTES; i++) + { + buf[i] = ReadByteFromEEPROM(i, i2cFailed); + } + + // Check CRC and fail if incorrect + uint16_t calculatedCRC = CRCencode(buf, 86); + uint16_t foundCRC = ((uint16_t)buf[EEPROM_ADDR_CRC_H] << 8) | buf[EEPROM_ADDR_CRC_L]; + if (calculatedCRC != foundCRC) + { + return 1; + } + + // CRC passed, so now read the calibration information + for (uint8_t channel = 0; channel < calMaxChannels; channel++) + { + int channelOffset = 4 + (41 * channel); // channel 0 = 4, channel 1 = 45 + numCalibrationPoints[channel] = buf[channelOffset++]; + for (uint8_t point = 0; point < numCalibrationPoints[channel]; point++) + { + // Unpack Pack targetVoltage (int8_t) from buf + int8_t targetVoltage = (int8_t)buf[channelOffset++]; + + // Unpack dacSetting (uint32_t) from buf (4 bytes) + uint32_t dacSetting = 0; + dacSetting |= ((uint32_t)buf[channelOffset++]) << 24; // MSB + dacSetting |= ((uint32_t)buf[channelOffset++]) << 16; + dacSetting |= ((uint32_t)buf[channelOffset++]) << 8; + dacSetting |= ((uint32_t)buf[channelOffset++]); // LSB + + // Write settings into calibration table + calibrationTable[channel][point].voltage = targetVoltage; + calibrationTable[channel][point].dacSetting = dacSetting; + } + + // Now calculate the calibration coeffs that are actually used + // by the calibrated CVOut functions + CalcCalCoeffs(channel); + } + + return 0; +} + +void ComputerCard::CalcCalCoeffs(int channel) +{ + float sumV = 0.0; + float sumDAC = 0.0; + float sumV2 = 0.0; + float sumVDAC = 0.0; + int N = numCalibrationPoints[channel]; + + for (int i = 0; i < N; i++) + { + float v = calibrationTable[channel][i].voltage * 0.1f; + float dac = calibrationTable[channel][i].dacSetting; + sumV += v; + sumDAC += dac; + sumV2 += v * v; + sumVDAC += v * dac; + } + + float denominator = N * sumV2 - sumV * sumV; + if (denominator != 0) + { + calCoeffs[channel].m = (N * sumVDAC - sumV * sumDAC) / denominator; + } + else + { + calCoeffs[channel].m = 0.0; + } + calCoeffs[channel].b = (sumDAC - calCoeffs[channel].m * sumV) / N; + + calCoeffs[channel].mi = int32_t(calCoeffs[channel].m * 1.333333333333333f + 0.5f); + calCoeffs[channel].bi = int32_t(calCoeffs[channel].b + 0.5f); +} + + +uint32_t ComputerCard::MIDIToDAC(int midiNote, int channel) +{ + int32_t dacValue = ((calCoeffs[channel].mi * (midiNote - 60)) >> 4) + calCoeffs[channel].bi; + if (dacValue > 524287) dacValue = 524287; + if (dacValue < 0) dacValue = 0; + return (dacValue*125)>>7; +} + +/// Converts voltage in millivolts to corresponding 19-bit sigma-delta PWM DAC value +/// Returns true if requested voltage is outside of full range of DAC values +/// millivolts should be in range -6000 to 6000. +/// Accuracy is dependent, of course, on the calibration coefficients +uint32_t ComputerCard::MillivoltsToDAC(int millivolts, int channel, bool &limited) +{ + limited = false; + int32_t dacValue = ((((calCoeffs[channel].mi * millivolts) >> 9) * 1573) >> 12) + calCoeffs[channel].bi; + if (dacValue > 524287) + { + dacValue = 524287; + limited = true; + } + if (dacValue < 0) + { + dacValue = 0; + limited = true; + } + return (dacValue*125)>>7; +} + +#endif + +#endif diff --git a/releases/62_BioMimicry/LICENSE b/releases/62_BioMimicry/LICENSE new file mode 100644 index 000000000..c3854e5eb --- /dev/null +++ b/releases/62_BioMimicry/LICENSE @@ -0,0 +1,424 @@ +BioMimicry — a program card for the Music Thing Modular Workshop System Computer +Copyright (c) 2026 Andy Jenkinson (uglifruit) + +Licensed under the Creative Commons Attribution 4.0 International License +(CC BY 4.0). You may share and adapt this work, including commercially, so long +as you give appropriate credit. + + https://creativecommons.org/licenses/by/4.0/ + +WHAT THIS COVERS + +This licence applies to the card's own source: the physics engines, the voice +and granular rendering, the USB sample-upload firmware, the web interface and +the build tooling. + +WHAT IT DOES NOT COVER + + * samples/*.raw — the animal recordings are from Pixabay and are used under + the Pixabay Content License. They are not the copyright holder's to + relicense; see samples/README.md. + + * ComputerCard.h — the Music Thing Modular card library by Chris Johnson, + which keeps its own MIT licence. + +The full licence text follows. + +======================================================================= + +Attribution 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution 4.0 International Public License ("Public License"). To the +extent this Public License may be interpreted as a contract, You are +granted the Licensed Rights in consideration of Your acceptance of +these terms and conditions, and the Licensor grants You such rights in +consideration of benefits the Licensor receives from making the +Licensed Material available under these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + d. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + e. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + f. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + g. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + h. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + i. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + j. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + k. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's + License You apply must not prevent recipients of the Adapted + Material from complying with this Public License. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. + diff --git a/releases/62_BioMimicry/README.md b/releases/62_BioMimicry/README.md new file mode 100644 index 000000000..dd10ceb07 --- /dev/null +++ b/releases/62_BioMimicry/README.md @@ -0,0 +1,437 @@ +# BioMimicry — Organic Rhythms for the Workshop Computer + +**A generative stochastic rhythm card born under the dark skies of rural Wales.** + +BioMimicry uses **six distinct mathematical physics engines** to generate triggers, CV and +audio that feel organically alive. + +It was built to capture the semi-random behaviours of the natural world: the polyrhythmic clopping of horses on a road, the cascading panic of a flock of geese, the rushing +accumulator of a waterfall walk, and the sudden silent clustering of a meteor shower overhead. + +*I didn't hear frogs, but the swamp mathematics were too good to leave out.* + +Runs on a Music Thing Modular Workshop System Computer. Built on the RP2040 with +[ComputerCard](https://github.com/TomWhitwell/Workshop_Computer). + +> **v1.1.0** — six ecosystems, two boot modes, a full library of real animal +> recordings, and a browser app for swapping them over USB. +> +> **The card now runs inside its timing budget.** The physics moved to the second +> core, so the engine and the voices no longer land in the same 20.83 µs sample: +> the worst mode went from **334% of budget to 70%, with zero overruns**. The +> clock is 192 MHz. USB is modal — hold the switch to hand the card over, hold +> again to go back to playing — so nothing of TinyUSB runs while you perform. +> +> Audibly: samples no longer truncate when hits overlap (eight voices, and a +> steal is a crossfade rather than a cut), the library is re-baked ~1 bit louder +> with dither, and the round robins finally produce as many distinct sounds as +> they claim — panning no longer collapses eight variants to four, and Meteors +> stops playing its first three swooshes twice as often as the rest. +> +> **v1.2.0** — alt boot is now **TUNED**: the same one-shot voices as Rhythm, but +> played at their recorded pitch with no per-animal or per-hit detuning, so +> uploaded notes gallop or drip instead of being smeared across ±3 semitones. Its +> Summed routing puts **1 V/oct on CV 2** telling you which round-robin slot just +> fired. The granular renderer is gone. +> +> The browser editor now maps a **pool** of uploaded files onto slots, so one +> recording can be reused across ecosystems without being sent twice. +> +> Both audio inputs now work on hardware — and Audio In 1 never had, in any +> firmware: its envelope was computed on one core and read on the other, with +> nothing writing it across. Patch a pad into **Loudness** and the cicadas +> recede while the geese get agitated; patch a drum into **Disturb** and every +> ecosystem flinches on the transient. +> +> **Frogs synchronise again.** The knob mapped almost its whole travel to +> coupling strengths that were already locked, so the chorus sounded the same +> everywhere; the sync/chaos transition now sits in the middle of the sweep where +> it can be played. And a footstep in the grass genuinely silences the cicadas +> rather than thinning them. +> +> Why the card is the way it is — including the things that were wrong first — is +> in [docs/DEVLOG.md](docs/DEVLOG.md). +> +> Questions, bugs and patches: [**the BioMimicry thread**](https://discord.com/channels/1210238368898879569/1533895615442849812) +> on the Music Thing Discord. + +--- + +## The Ecosystems + +Tap the momentary switch (Down) to cycle habitats. Each has its own internal logic. + +| Mode | Model | Behaviour | +|---|---|---| +| **Horses** | Real equine gaits | A **herd**: each horse has its own stride clock driving four hooves at their true footfall offsets, and the animals slide in and out of step the way real horses travelling together never quite match pace. Walk, trot, canter and gallop are the actual biomechanical patterns — including the suspension phase where all four feet leave the ground. | +| **Geese** | Stochastic contagion | A cascading probability network across a **flock of twelve**. One bird honking raises the odds for all the others, creating tight reactive clusters that erupt and fade. | +| **Frogs** | Coupled oscillators | The Kuramoto model. Voices pull on each other's timing, fighting between perfect metronomic synchronisation and chaotic swarms — and they'll entrain to an external clock if you give them one. | +| **Rain** | Leaky integrate-and-fire | Buckets fill with noise and constantly leak. An overflow **splashes downstream** into the next bucket, so drips pull each other along into rushing clusters, then fall apart. | +| **Meteors** | Inhomogeneous Poisson | An invisible slow-moving weather system dictates the density of a **swarm of twelve**. Long eerie silences swell smoothly into heavy overlapping barrages. | +| **Cicadas** | Amplitude feedback | Twelve insects in **four patches**, each hearing mostly its own neighbours. They call faster the louder their patch already is, and tire from being in it. Patches swell out of step with each other, so the field surges and subsides irregularly. Where Frogs couple on *phase* and Geese on *events*, Cicadas couple on *loudness*. | + +### The gaits are real + +Horses mode is clocked with each hoof landing at its correct point in the stride: + +| Gait | Footfall (fraction of stride) | Suspension | +|---|---|---| +| **Walk** | LH 0.00 → LF 0.25 → RH 0.50 → RF 0.75 | — (4-beat lateral, same-side legs consecutive) | +| **Trot** | [LH+RF] 0.00 → [LF+RH] 0.50 | 2-beat diagonal | +| **Canter** | LH 0.00 → [LF+RH] 0.22 → RF 0.44 | 56% float | +| **Gallop** | LH 0.00 → RH 0.10 → LF 0.21 → RF 0.31 | 69% float (rotary — both hinds, then both fores) | + +Because each horse's four hooves share one stride clock, its gait *holds together* +however long it runs; Knob Y jitters each hoof's timing without breaking the pattern. +Knob X adds **whole horses**, never partial ones; a three-legged horse is not a +smaller herd. Each animal runs slightly off its neighbours' pace, so the herd phases +continuously. `python tools/simulate.py gaits` verifies the footfalls biomechanically. + +## Panel + +| Control | Function | +|---------|----------| +| **Knob Main** | **The Physics** — the fundamental law of the current ecosystem (Gait & tempo · Contagion · Decoupling · Downpour · Debris density) | +| **Knob X** | **Population** — how many agents are alive: **horses in the herd**, birds in the flock, frogs in the pond, buckets on the leaf, meteors in the sky, insects in the field | +| **Knob Y** | **Chaos / Humanize** — per-mode randomness and spread (timing jitter, spark rate, frequency spread, threshold variance, LFO wander) | +| **Switch Down** (momentary) | **Tap to cycle** the ecosystem. **Hold** for two seconds to hand the card to USB, hold again to return to playing. **Hold at power-on** to boot **Tuned** mode instead of Rhythm. | +| **Switch Up** | Routing: **Discrete** | +| **Switch Middle** | Routing: **Summed / CV** | + +### Per-mode meaning of Knob Main + +| Mode | Knob Main | +|---|---| +| **Horses** | **Gait and stride rate.** `0.00–0.25` Walk · `0.25–0.50` Trot · `0.50–0.75` Canter · `0.75–1.00` Gallop. Each gait sweeps its own stride-rate band, so a gallop is genuinely faster than a walk rather than the same pattern sped up. | +| **Geese** | **Contagion** — 0.0 birds ignore each other; 1.0 one honk sets off a panicked chain reaction | +| **Frogs** | **Decoupling** — 0.0 is maximum coupling (locked metronomic sync); 1.0 is zero coupling (total chaos) | +| **Rain** | **Downpour** — 0.0 leak exceeds input (silence); 1.0 rapid stuttering torrents | +| **Meteors** | **Debris density** — 0.0 rare isolated hits; 0.5 long silences swelling into dense waves; 1.0 constant barrage | +| **Cicadas** | **Coupling depth** — CCW: independent insects, a steady even drone. CW: the field drives itself into deep surges that collapse into near-silence and swell back. Intensity stays up as you turn clockwise; what changes is how strongly the field pulses. | + +### Per-mode meaning of Knob Y (Chaos) + +| Mode | Knob Y | +|---|---| +| **Horses** | Per-hoof timing jitter — an uneven, real animal rather than a machine | +| **Geese** | Spontaneous spark rate — how readily a bird honks unprompted | +| **Frogs** | Natural-frequency spread — how hard sync is to reach | +| **Rain** | **Leak rate** — slow leak lets buckets accumulate into heavy irregular drips; fast leak keeps only the strongest bursts | +| **Meteors** | Density wander on top of the hidden weather system | +| **Cicadas** | Rate spread across the field, so it never sounds like one insect multiplied | + +## Inputs + +| Jack | Function | +|------|----------| +| **Pulse In 1** | **The Spook** — a hardware interrupt that disrupts the environment. Horses: the herd startles into step, every horse landing together before drifting apart again. Geese: spook the flock into a guaranteed cascade. Frogs: splash — scramble every phase, destroying sync. Rain: wind gust — dump energy into every bucket. Meteors: bolide — spike density to maximum. **Cicadas: a footstep in the grass — the whole field falls silent at once**, then creeps back in. | +| **Pulse In 2** | **The Clock** — an external tempo the ecosystem *entrains to* rather than obeys. Frogs treat it as a phantom frog in the pond and couple to it with whatever strength Knob Main is set to, so you can dial anywhere from locked-to-the-clock to completely indifferent. Horses lock their stride to it. Geese lean their honks toward the beat; Rain tops up every bucket so the nearest tips on the beat; Meteors swell the debris field. Stop the clock and the ecosystem drifts back to its own timing within ~3 seconds. | +| **CV In 1** | Modulates **Knob Main** (the physics variable) | +| **CV In 2** | Modulates **Knob X** (population) | +| **Audio In 1** | **Loudness** — the ecosystem hears the rest of your patch. A loud room agitates the geese into honking and shuts the cicadas up; the shy modes thin out as the patch gets busy and fill back in when it quietens. | +| **Audio In 2** | **Disturbance** — transient-sensitive rather than level-sensitive, because it is sudden movement that alarms an animal, not steady noise. A sharp attack counts as a Spook. | + +Both audio inputs only act when something is patched in. + +## Outputs + +Routing is chosen with the toggle. The Computer has two pulse outs, so in Discrete mode +agents 3 and 4 fire as **calibrated 5 V blips on the CV outs** — every agent gets a +physical trigger. + +**Switch Up — Discrete** + +| Jack | Function | +|------|----------| +| **Pulse Out 1 / 2** | Agent 1 / Agent 2 triggers (5 ms gates) | +| **CV Out 1 / 2** | Agent 3 / Agent 4 triggers, as 5 V blips | + +**Switch Middle — Summed / CV** + +| Jack | Function | +|------|----------| +| **Pulse Out 1** | All active agents logically OR'd | +| **Pulse Out 2** | **Accent** — fires when two or more agents hit at once | +| **CV Out 1** | Continuous internal state of agent 1 (phase ramp, bucket level, excitation…) as 0–5 V | +| **CV Out 2** | Global ecosystem state — debris density, flock agitation, chorus coherence | + +**Audio Out 1 / 2** — all agents rendered and placed in the stereo field (see below). + +**LEDs** — one LED per ecosystem. The active mode's LED sits at a dim "you are here" +glow and flares to full on every trigger, so one light carries both meanings. + +Both tables above describe the **Rhythm** boot. Tuned routes differently — see +[Two instruments](#two-instruments-rhythm-and-tuned). + +## Voices + +**The fallback — synthesized.** Recordings are the normal case; this is what plays if a +card is built with no PCM baked in and nothing uploaded. Each mode has its own DSP +timbre, built around whatever +detail actually identifies the sound: hooves get a pitch-dropping body *plus a sharp +band-passed noise transient* for shoe-on-stone; honks are a saw whose filter opens at the +attack for that nasal kink; ribbits are Karplus-Strong; **drips rise in pitch as they +decay**, which is the acoustic signature of a bubble collapsing in liquid and the reason a +drip sounds like a drip; meteors are noise swept by a closing filter; cicadas are a high +tone ring-modulated by a wing-beat buzz. + +### Round robins + +Every trigger picks a variant, and the variant *means* something: + +| Mode | Variants | What a variant is | +|---|---|---| +| **Horses** | 4 | **One per hoof.** The engine reports which hoof landed and the voice plays *that hoof* — hinds lower and heavier than fores. Every horse in the herd plays all four of its own. This is most of what stops a gait sounding like a drum machine. | +| **Geese** | 8 | Birds of different size | +| **Frogs** | 8 | Species in the chorus | +| **Rain** | 8 | Drip sizes | +| **Meteors** | 5 | Distances — the baked library ships five swooshes, not eight | +| **Cicadas** | 8 | Insects, tightly spread — a real field is fairly uniform | + +Everything except Horses picks at random with a **no-immediate-repeat** rule, so you never +hear the same honk or drip twice running. On top of that each agent has a fixed playback +rate — a body size, so agent 1 is always the largest animal — and the crowd modes jitter +slightly per event, which stops two overlapping calls fusing into one doubled sound. +Horses deliberately does *not* jitter: a horse is one animal, and a clop that changes +pitch hit to hit stops sounding like a horse. + +### Stereo placement + +Panning comes from the ecosystem, not from a knob: + +- **Fixed** (Horses) — each horse holds its own place in the field, its four hooves + sitting just either side of that spot (near side / off side). The animals stay put; + you hear a herd spread in front of you, not four wandering sounds. +- **Spread** (Geese, Frogs, Cicadas) — every swarm member has its own place, so twelve + birds occupy twelve positions and a cascade sweeps across the field. +- **Random** (Rain, Meteors) — each hit lands somewhere new, because each is a new object. + +## Two instruments: Rhythm and Tuned + +Hold the momentary switch **Down at power-on** to boot **TUNED** instead of the normal +**RHYTHM** card. On power-up the LEDs announce which you got: Rhythm lights the left +column, Tuned the right. + +Both play the same engines, the same recordings and the same one-shot voices. The +difference is **pitch**. + +**Rhythm** humanises every hit. Each agent carries a fixed rate offset — four +different-sized bodies — and every trigger adds a random detune on top. That is what +stops four hooves sounding like one sample fired four times, and what stops two +overlapping honks fusing into a single doubled sound. + +**Tuned** switches both off. Samples play at their recorded pitch, every time. On +animal recordings that is a subtle tightening; on *pitched* material it is the whole +point — the detuning that flatters a goose spreads a struck note across ±3 semitones, +randomly, hit to hit. Upload notes, drips or hits and the ecosystems become rhythm +generators for them: a gallop of plucks, rain made of woodblocks, a Kuramoto chorus +that stays in tune. + +**Tuned's outputs** are the same triggers, with the CV outs describing the ecosystem +rather than firing blips: + +| | Switch Up | Switch Middle | +|---|---|---| +| **Pulse Out 1** | Agent 1 | All agents | +| **Pulse Out 2** | Agent 2 | Pulse 1 **÷ 4** | +| **CV Out 1** | Agent 1 density | Overall density | +| **CV Out 2** | Agent 2 density | **1 V/oct — which sample fired** | + +That last one is the useful one. Each round-robin slot maps to a semitone (slot 1 = 0 V, +slot 2 = 1/12 V, and so on), stepped rather than slewed, so patching CV 2 to an +oscillator's pitch input gives you a melody whose notes follow whichever recording the +ecosystem chose. Pair it with Pulse Out 1 as the gate. + +The CV outs are always continuous in Tuned — it never fires CV trigger blips. + +## Replacing samples without a rebuild + +Open [`web/index.html`](web/index.html) in Chrome or Edge, plug the card in over USB and +click **Connect**. Drag WAVs onto the mode slots and press **Upload** — the browser +converts them (any rate, mono or stereo), matches loudness across everything you load, +and streams them into a 1 MB region of the card's flash over WebMIDI SysEx. + +Uploaded samples **override the baked ones per slot**, so you can replace just the geese +and keep everything else. **Revert to built-in** forgets them again. A full library +takes a few seconds. + +> The card is **silent throughout**. Holding the switch stops the ecosystem and hands +> the card to USB; it **reboots** back into playing when you are done. Writing flash +> halts the RP2040 — and takes USB down with it, since the USB stack itself lives in +> flash — so the whole transfer is buffered in RAM and committed in one go at the end. +> That caps a single upload at **160 KB**, about 3.4 seconds of audio, but uploads +> **append**, so the full 1 MB region is reachable over successive passes. Uploading is +> a setup activity, not a performance one. + +Flash layout: firmware and baked samples occupy the first 1 MB, user samples the +second. The build fails loudly if the firmware ever grows into the user region, because +that would make flashing destroy uploads and uploads destroy the firmware. + +## PCM samples (baked at build time) + +Sample playback is a **build-time** choice, not a boot mode: bake recordings into +`samples/` and they replace the synthesized voices in Rhythm boot. With no `samples/` +directory the firmware still builds and uses synthesis. + +Each mode takes up to **eight round-robin recordings**, and the variants are not decoration. + +Drop WAV files into `samples/incoming/` (or any folder) and run the importer: + +```sh +python tools/importwav.py samples/incoming +``` + +The converted `samples/*.raw` are committed here, so this builds as-is — you only need +the importer to replace the recordings. (The original source WAVs live in the +[upstream repo](https://github.com/uglifruit/WorkshopBio); they are not duplicated here.) + +It accepts **any sample rate, mono or stereo, 8/16/24/32-bit or float**, and converts to +the 8-bit signed mono 48 kHz `.raw` the build bakes in — resampling, summing to mono and +trimming silence. Standard library only, no ffmpeg needed. + +**It also matches loudness across the whole library.** Sample packs are typically all +over the place; the importer measures every source and scales each to a common RMS, then +soft-limits the result. RMS rather than peak, because a sample's peak is usually a single +transient — two recordings peak-normalised to the same ceiling can still sound nothing +alike. A real pack needed corrections from **-15 dB to +21 dB**, and came out matched to +1.07x with no clipping. + +Name them `mode_variant.wav`, or use common animal names (`HORSE_1.wav`, `GOOSE_3.wav`, +`WHOOSH_2.wav`, `DRIP_5.wav`, `CICADA_8.wav`) — the importer maps those onto modes: + +``` +horses_1..4 (four: the hooves) +geese_1..8 frogs_1..8 rain_1..8 meteors_1..8 cicadas_1..8 +``` + +**`horses_1..4` are LH, LF, RH, RF** — left hind, left fore, right hind, right fore. The +firmware asks for the hoof that actually landed, and hind hooves strike lower and heavier +than fores on a real animal, so putting them in the right slots is most of what makes a +gait sound like an animal. For the other modes the four are simply different individuals, +picked at random with no immediate repeat. + +Fewer is fine: missing variants reuse whichever you supplied — and the baker points the +repeats at one copy in flash rather than storing it twice. A bare `horses.wav` with no +number covers every slot. + +**What makes a good source:** a single isolated hit, trimmed tight to the transient (the +attack is what identifies the sound), and **dry** — the card has no reverb, so any +recorded ambience is baked in forever. + +The library that ships with the card, for scale: + +| Mode | Variants | Average length | Flash | +|---|---|---|---| +| Horses | 4 (the hooves) | ~147 ms | 27 KB | +| Geese | 8 | ~179 ms | 67 KB | +| Frogs | 8 | ~770 ms | 289 KB | +| Rain | 8 | ~104 ms | 39 KB | +| Meteors | 5 | ~1461 ms | 342 KB | +| Cicadas | 8 | ~148 ms | 55 KB | + +That is **822 KB** in total. Firmware and baked samples share the first 1 MB of flash and +currently end ~95 KB short of the boundary; the build fails with an explanation if they +ever reach it, because past that point flashing would destroy uploaded samples and an +upload would destroy the firmware. The second 1 MB is the user region — about 21 seconds +of audio — which the web uploader writes to. + +`python tools/gensamples.py` writes procedural placeholders in the same layout, so the +whole path works before you have a single recording. + +--- + +## Under the hood + +`ProcessSample()` runs at 48 kHz, but the physics don't need audio rate: engines tick at +**1.5 kHz** (every 32nd sample), which cuts average CPU load 32× and still gives 0.67 ms +timing resolution — far finer than the ear resolves for triggers. Voice rendering, gate +timing and CV output stay at the full 48 kHz. + +That divider buys **throughput, not slack**. `controlTick()` is called inline from +`ProcessSample()`, which runs inside the DMA interrupt, so on the sample where the physics +fire the whole engine must still finish inside that one **20.83 µs** slot. The worst +single sample is what decides whether audio glitches, not the average. + +To measure it, build with the profiler on: + +```sh +cmake -B build-profile -G Ninja -DBIO_PROFILE=ON +cmake --build build-profile +``` + +That build times the whole callback and each phase with the Cortex-M0+ SysTick counter +and shows the worst case on the LEDs — one LED per ~16% of the 4000-cycle budget, all six +flashing if any sample ever overran. A Down tap clears the peaks so each ecosystem can be +measured separately, and Pulse Out 2 mirrors the callback duration for a scope. It +compiles to nothing when off: the normal build is byte-identical either way. + +Everything is **integer fixed-point** — Q16 for levels and probabilities, `uint32_t` +phase accumulators that wrap for free, a 257-entry quarter-wave sine LUT, and xorshift32 +for randomness. There is no `float` in the hot path and no libm; the RP2040 has no FPU. + +| File | Purpose | +|---|---| +| [fastmath.h](fastmath.h) / [fastmath.cpp](fastmath.cpp) | Sine LUT, PRNG, fixed-point helpers | +| [biomimicry.h](biomimicry.h) | Shared types, `Engine` interface, control-rate constants | +| [engines.cpp](engines.cpp) | The six physics models | +| [voices.cpp](voices.cpp) | Synth + PCM voice rendering, panning | +| [main.cpp](main.cpp) | I/O, mode/routing UI, LEDs, boot dispatch | + +### Verifying the physics + +`tools/simulate.py` models the engine math in Python and reports gait correctness, the +Kuramoto sync curve, and triggers/second per agent across the knob range — used to +confirm every mode sweeps a musically useful range before flashing hardware: + +```sh +python tools/simulate.py # everything +python tools/simulate.py gaits # just the biomechanical gait check +``` + +It has caught real defects that compiled perfectly cleanly: Kuramoto coupling too weak +to ever synchronise, contagion saturating into a flat buzz, a gallop table byte-identical +to the walk, and modes topping out at rates that read as hiss rather than rhythm. + +(`tools/simulate.cpp` compiles the *real* engine sources natively if you have a host C++ +compiler; the Python model is the fallback.) + +## Building + +Raspberry Pi Pico SDK 2.2.0, Arm GCC 14.2, Ninja: + +```sh +cmake -B build -G Ninja +cmake --build build +``` + +Produces `build/biomimicry.uf2`. Hold **BOOTSEL** while plugging in USB and drop it on +the mounted drive. On Windows, `cmake`/`ninja` live in `~/.pico-sdk/` and are not on the +default PATH — see [CLAUDE.md](CLAUDE.md) for the exact invocation. + +--- + +## Credits + +- **Music Thing Modular Workshop System Computer** — Tom Whitwell / Music Thing Modular. + **ComputerCard** by **Chris Johnson** (MIT, header-only). +- **Raspberry Pi Pico SDK** / RP2040 — Raspberry Pi Ltd. +- The Kuramoto model — Yoshiki Kuramoto. Leaky integrate-and-fire and inhomogeneous + Poisson processes are standard computational-neuroscience and point-process models. +- **Sample library** — animal and environment recordings from + [**Pixabay**](https://pixabay.com), used under the Pixabay Content License. +- BioMimicry for the Workshop Computer — **Andy Jenkinson** (**uglifruit**), 2026, with + **Claude Code** (Anthropic). + +## Licence + +**[CC-BY-4.0](LICENSE)** — Creative Commons Attribution 4.0 International. +Use it, fork it, sell it, put it in your own card; just credit +**Andy Jenkinson (uglifruit)**. + +Two things in this repository are not mine to relicense and keep their own terms: + +| | | +|---|---| +| [`samples/*.raw`](samples/) | Recordings from [Pixabay](https://pixabay.com), under the Pixabay Content License — see [samples/README.md](samples/README.md) | +| `ComputerCard.h` | The Music Thing card library by Chris Johnson, MIT | + diff --git a/releases/62_BioMimicry/UF2/biomimicry.uf2 b/releases/62_BioMimicry/UF2/biomimicry.uf2 new file mode 100644 index 0000000000000000000000000000000000000000..6ed669db4c1ffd85f28f602b8b741835abebb3ba GIT binary patch literal 1940992 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�`6gE1;&4l)-EF^8~Cr@?bfOjX1%- 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

8{r0vu^t??957h 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 z zo?@XzTJGS_Hu+z2`Ckf=zjZfZbnigLXXz_5MTjRfq*TZs!5~qp^!U&6-L)_ zn}Fz9QnWnALKB;8OhZ3tyi3;9WuS$DabSOf2L|()XEKj{E(g-l%$D|sOF?Hem!+j3 zN{`^^6feZfz#ycr!PR;*mLbi0+Z$-6zq*0FcMu%jp<`g1{4cxwFNexs-KCFu)IP{a zy{)My0n=F=rlb7}aeQ^9^l1;bOB%uT+(L`1{j6ptGxfL8I&p>@aok0*weLLHGDMPwko!Pp#9;YG2y@R*l1{#~( zm}A;OIF9snL?ctbfYyJ__~21$XwRZ;u)67e)l|P2zXKQRmOEJd+v7jiUH;cYk6H%X?hkB3KhyFrXwh z4JfYA8C`*)E-7mn-~v0S@n@pjdV)rvwe}HV(_aUCrQ$Kco6FIo0bz313kJ5IJ4}5XWRV0;qt!`B7doLZ1@6fYnFl7_F3i=5(&_KCS+Dw`d{0+Rsck0b6S&+F=Enk z3D{C$wx8PhYOG_y3a$g{Z!N)GrYkkTBqmKpOw=E zMv&GBZepVcN!v1Grhtgd!BBs(Y8}XZ@I|3LAHD=)*2za7WMtz(*V+Sp?o**pqe+VeH?o<}WsC_O z_Jcm|^fKB@%#*+!Bu~A$4-=E7%zYc8+`usCQfYlX@fGgTI5DUr$Nar_=GSfVzvc43 z6(WC4D!P!F!$%e!;^LU^(!uo6lAzh9wnn1HI-wbeG&QTV83Z$s>*-1tqfKFL5!~2k zwp}kN+HBXz3g)EVz?J}s+>Yv&5-m-6kk4v8-`>C_t}&w*(@0S3puGl-#;}hMzeG3E zs$t86{U-j-Hr98h?Dbo1lmBg(|LqX@Z}s9Msk0GSXQ^{F7)} z&e`0yuGa|QPq0$xerlpyNvIsxg0GK@NrS*2phxPcKh%!8Wy%oJEJm7v6{o@K;^d~L z=y3~`pkZV(TDXDsHSGa*18Zx*Z!HftTBQV_0_e?l>Svq$@3{Q$gvuYe_@Zf(kY2TJ zl^GZm-bH?NthQ&wC>fgMP2wh5+YdAptQ&ni*l>~Hw?3THWqkOK`{}sab3p3^-`D~B z!p|Bcem_p>AktSWI}?1-HJsE>IwwD~8t9n)%oqEsv)n=-o!2{TQ1>Gkt~#_+KilMg z*X4gVME=&d)+x4ts;g`>R%dBhMcnE}pRv~4@~>A?J6)(LAFLBPWNl5neivKJ zP4YU)6Kx#PfS)uTBm@SRFYy|S_VIxtnfZvInYDB|`hvpy>1om~tYPrNy2IA~u(h42 z8nAC0y419Xohp2OuWj;ga``uf$lp5JRINb$-cqV;lh&*^v6xP7D}-$r>T2si8y|Ra zXs4C?kz9ScN`y#;@q=Xa*Mw(3+CiO_kOGnVh@hRWbJ=NF*{HJN!?V%b?3IwT_6Hl8 zYVBfFSfx6E=>JOj7)-!aG{@TYH*<_@p z#K=)=b!9LdOhJ=gueNr*M9V!S4<9C)=-T&9pOmbmn|X7V5t`e3*%R#+95Qjc zz;zFMrmZ?W{Lx$4iv?p%?`951o%LTMcyE7qyM_H0JM+sn`QLN--}`6zZ;4Xf7<9ze z|LP~}E54|iI`P|9*4R#aBmFFa`_($3pMnNDXi`!uJL)&IAA=Kqp|=aZ*As&|Es^`+ z(=}RFe4*f2aQ#+WZ3r4_`lzkHg09&*X1C>w&hFUHHu<->{9FE6{&bQ0$vZsgcJ+z% z)>cPZPkHZs+owU}t!rpwJ&ItsdaG}BG>`z-+w9-!al1M7M!%I1XZ$)^Y6l2zElK&C z*ri*?H3D?NUS9(D_O^cL0#5oXt5I+Z9igfIXi?Cao%-1(|NAcg`yukzl5MN7W{f`S zP`X+N)jQTv)?YfziY=vy`DINt#q6*wDr>7=)jcFE-N5efPeQO82XawMyMdZ--9fj| zK|L;b32tBqx7v!NM$I{{QA$%iPzUuqJ8pO2J8S5T^^-SH6P>aj?fV`1Wt;q4UH+{h z@>f3uzr1Fw`jU?nE0>Y_*LqR$73(maLK=KkOZ%d&T|$$ts6TvM4b#y_lC$v;XaN$u z-$Ej`k><|}gzrN~59bCZQr*;tlwLp&vyrBkvsbap`A$FR)$|tnPe183Xvjakp8neM zr2lvFXPf*Vxcnc4$X^}ff>2L<+gCxq1gp5Or0PfOK=rExrGL8E`rErT z?RN@(+L`}tlYg7bzb#b$-g_=Z^-o!SU{^|r!D2weM>~P*bvE#4>B?jR{k z2If-bP;glHb!AJp4H~QEmISt%>ZD6cx6zaA9(}5iJj5N3R>E2xW<3fo$WinL9j*XmVQPX z1V7j;*U?9Ju^;%!n)$u_7Jg#KecdMihc5qzA@ZjKyt5?Kpo44-SSJSux6W|hMEh+| z*+tgg6asqI`<1)eC4>BytZh>A zo$Mh`J4;D~3{{=JYr>#VPDpsg|GHfMT_N(Vb zMKAR$ajlTajwDN#v$y@h&TxYNrDEw0+`^+XCR0W4HO_QW+cIqpjluLYSCL(z5$GS3 zce^DqXPVi4Z5^>q#Fi1^M)=s^vEdrPOcX+}$FRmI{2+{gu2*}lZVU(pc#uG%x6(k| zxu0$F?{WF}gvkHf4v@Yibxm6>oks6TXeLV+ro_ex*YADf*RRV*our#&de<+DpsXfc)P9a%7V&AtBMe0!Vy$? z85`{F?(U{w%oIdjDNuk`R#m|y1_@~N`U-VFRBtv~q#m$>P*GsGyS=5k34YO`skPYj z!t&bPjg1Y}6bg#lT%6&_qfmv5O0=N3q!3n_wb_xLwtG!?p$9WM6DnFYG}PBt6l74r zhN4!~lNy^|iil6kEiSL9fWRzy2aA7u{J+oT-xnhPsFfLbx!Ufx+;8g~m|Tj2q^CkG zuH}VUDKU_}PmB(asuC3BP^qf5oS!eY)y*X_bUkcu@8}+ym|u%Y7NHK69SSME5(7WW z)WpODC52Zb9-w0E< zQ>_OWQa03QQxlVu@Uy{|=cTjZ_DH6tl2NXc{_S;lpi|4uhPzF7nqWmR&OO!N5^E2v z4$z0d*RjA;RI5kKdnpX3LW=chJc(BfP9IgFm{~Ad5S4E7Dj&Q6wY>Zy)%z|eqOx>8 z#iytMKPOTs)vaF;H3Vs$3GrAnaK~s6%v-GwYze9b8G%V$3>hdYD1owySqM>C5iC zBo>jCh*)@vGqbS$SuUbYN!h6*V4M60UH*e1@<)!8+tKvWHcchhv^40KD6iubinvQu zXvIpY8Al8gp91a1(I(m#Om!!Ya&16otgynGID8UQ7%)jzyB+00Qs!4ktz*Tr!&?Uo{|FF6QzJe=%r#0aE_?hLoCCR6MhMP1kpnq z1DJ@XA&5#eIvJ5wz-tqn5(9Cv_o@d#fn2Ml_p8xbrEG73B; zA6Gz-CrGA_`2eK(qxuIxKmM#--PP6Lgiv>D~q#}!^{6O?D8KDk^i!acJ-o<&#p!%W#$zW zNJBMc1;d!jvd+5-?eRbvesZq<*Bd`GX4^4PAugc1jywu2r;f~wi zeEr3jS8lZpSv`RxCmw(7=-%2QkuHjQxoco-elwAdudb!cXKrfL(ilvh*Qw8T`+oP> zVsvVL`K|_4@GZ_sq5kO97zBaSum+0Xzn}o}*Od53N=KrM4v%O<5D%5H1+h-Bf|*}; z2?AMhk3ln-Lv7N`bX(t9MSQWMP?-4WBN$7lgW{}X&zqeKtNB0T@*fG2KU{ii+7jVa zvu!j(I<(XQK3XnC?4_0|#RI8ptxT-iH_ zbIRGI;3|^0*qv8$ONiozg-H}f?xqx@ol)9}6?g}Kwypo8F8|RG`O|44+me)&E^7{0 zI!r`=kbRl(v|%Gwc3E*QvHa7SNKnEPk%}=h;=)(lKumm`5baumv}>5VAQTI>1#{pt zlx%~6jY)iBY~v~|WLuB(w4o7-Zkj*s;WnxkMrtw;EGl=fYtYFbt5RdWHOnBA*9dr4Qg~%TjT6C+BD#{L* z?M@YK`Eyufsh5JLEGkDc>tvu|pFyOaAj@5qd()FtxfhaGRcuBb7q7Ni;+S;k+*~m_ zVWiM#_EvcX#%(Aa;d&jPKugDJqy7}u8Hzoc9dv>Vv*PWhg0xACPbf~oCrR47rA;Bq(bA{dX8y*y0?Ns@-@?5dLXW7d55J4nlsov$2zRN zgD2>(o@@_)1ZmKr9rxL`{!h64Cqm_~e&aV+zXZa3)I%nMz(wxD^sZx5_5S2CbHjT+ z74ne3Y9m4qEBe+y*<4HV>2t!$vKdQH#F4M zl;)?$ZTOkK!HGFo>9b%5rg-5w`~9Y-miFG!g@}~g^13|-4(#7uU6PX&Nnxph zzW%|HY06SkwLHH-e#Myexv~Dv)@EI@ok3%d5@Sv>ch9S^(vhbI@-*fUfbO2rmX7p=HDj=+sbDr|tl zfc_U)fp~$bw74Kel2VJy9)GhMP|n8fON^}a)HD^L;3DG~mRg{qjmsE@Hl(zc2R8q_ z=_z6!7HO?q0y0T06pi{R>R&!OVAiXMrKMmH_LFWSaDXMQYuvI7FeJlE|C@68Pld=I zCRTl{bgCKAV$M+HT=d(nduwOa^i}ZQ7gAe=g|L7%R(=$Bv8>>*G3H=X-9QTP(e8mZ zY1^%c!zt4$uZ%Q0JT^woj*|gxkIfjHJ;pH^8_*3qgE;OYXhcy01HV)>4t`!tRjGW# zXY(SCyNT+*N}*p<{6%8p;15x}uoBr;pyfspL?eFiaIj2}km<7HzTGzer(OQjA@Vm$ z6%!RR17QVt9y84-scS<+e9S7|wkUWGXH-cMpO2*OlxMt zW0=n-$$iGG7k3BYrhn|oQ-dppxD{dphOEX*U051!O-NmH0G6AUN zxNhau6&pM=J2{C38RsFx#f(aMT!g@r>rl2J<49+uuxnKj0jy)Tw!DN695Job@ke&T z77*$9L?QxjpjIN35`hggzfn`{j0j}|l~o=D^DUaH$7Nc*0+mIcLirEFOa8Mi|Je}v z+ootR8TLeTy3ol+(x?tom$4=YgP{-hk^w^uSHsF`+8_3n`E_l1_5A^b+_ZB2&v>Mp zO_k(}RB+QZeFN5D)z+fZCK!< z)9V?ge)2$F#D_LJ{IhNT&$;~PLgY{Xt4o4jF}bPpO>B0GFX~WQ$*Qx4e%d>a{+B#8 z6x6A@ouy`3@A_@k;kfI#g(Sd#)*8V`plZTVjQ~lNi*;5Xdn;Wa^TFTGF5rajg02@- zu8yM4%y6HI)lmH{GC8NDx}kAzV_juoMjVR%0OjX<`p2mIr@EyD1^L-%vnw-W{oNgH zZ5_Qkc?fKi|Gdk8K1BXQQ(!)*?^Cy%h)8+9>Hp)yLqk-|TaJiJPGfJT*ak(~r2lt! z_u%>W60q1(1-V(NiLu%@wnFVx>9xqJm0+8l8Z#IG8?81JZ5vjSgWbUpy+Zn;7!ZnM z+mIHSAeWAukE{4?qHiGHMPZ zygX=x=8{whO8@}|8BI`e*`0RqXPf*NT>c9o^2eKIu3A|7+31DoAm~ce)&0Tl913hE zpMyU4towxz_N{|`SR4DI9JlU@({vV58(pml%Rfz7b{j#s<)ahyPrzby0d#rDKe<2v zKc>35p%fmleJI9Qh~t5F80=WX!;zelwgQ9F|Ap&NI)EtuE%uin#F>1A_8e_&x}iCW z^bj7yqQscl!Q$T@|6O$XFNVlpu~)&Q6rM2!Nh`5_lqW|=w2;FDWqpqFPh;i>&`GWiU^?`0uiyAF{%t=o>_`BNF2yYNd^imn;TzsCesBvh>NzBL_q}fNmd5M z9Fhnnxsf3^f`Jim@#B>?WuEen%kvlpBr%Xt2k9U@yI zF*bSwTS8D5>JP2reGV)6FS-1eLgY^@OzwBZSJqch<~8?0e9-y8wq#0C#mUe?itQK@ z!vZ*{|AJYmOpAq8u?b^I&F~U3GV7(}%c|FCF=O0BkMV8;NlP`+qeoV{qJlbQjPbGy zG_SGV8GTyWf$0RN(`{ftWHuc@UPk($*ESaek%usUNZtDUixhY`)FHswSTHyy*& zh_I6Xvde!tME;uTHs!Ut)0K3YYjVtcDPPjO?2ndkeY_{NMp$l88mSG0{wbB_p@#PUvc@b{FD5HsUbI+b(mzQp4G6hp0|$Y7`{8aI27|k zy8|`c+wp*+t-a$5QKjbhNg#cJz%cY$jwClvmYM0V#=D9`9+TCivy6 zw;xbgI=P^_@!-*;hxXN$WC2eZ2eQ&PG(Nu`mkN-(Qb6vcD2l#PMY^fE^QD+3 zPC4StRDze3DP#MPi-?eBc5W{2Ccs}RTeowi|9{}WR$cz9A@T=AZPoKwM>W|t1Gk+* z;{XEP3#9#-NGwiUDe$f)vQeNXTJ#zkxO90E@mp!~ zR+P)MHWW^C(krvjkS2l+1et}PKNP%m(;+#L%^R%(&yxJVDn_9VL-ERBE=#>M6^3DJ z3x^!aR(}p0f)It&ijwCMXQkDvvp8~C$$!n|zZN2YRl#BRwO&<3oEW-6G$_6Z*hAnA z)7GTcqdl`PE2|P&qxLEP)^H;Z`$%ta6nl=^5~U{_{g5%x7gf}iyF;Rri)69 zne$pf1~X8F7X>zAUggZpjPw+0jIJ$(7yfJA<-Z;xf57#VlQUFc#Cz@_AD^ts#z5n< zY=9)yWhcKPof7PuD}Xlu>W?cSBf=DGAl~x#8>D6ejT`JWwZU`n59F(MGr1z;BSV9O zBjYoR>#V?+uUr6C zfCpZlVc?Yb7{JOhTPgU?`x2Z8AYsx_14M8DF|tsXhJT-j1yPrMs{y*QXQy1H zm3AmyM}Gpf7JWw-@6^vW{SOGP>BS-PcjeA|#tbM|`;nH-T>kvC&%VCVKC+ftzW3x)&%gBind7^Qlh-D?TW;UD zdAAL%J}IxFVc)^Mb!C~+v%O6hKYst+_dmJZGPsgb#sx3D`0SY@^+idm<6Zaf+`ik| zJ+>5+SyI!uZ~va!(yZ8}vCifjS1w+@ez#+2E+RRvtfszhS9M8lYV0~V@iB6M=2jx& zJjt&(pIk<8iWB3Mk;WVCZfCicqQk5HL!`?;GDQB%fbB9A#^9=r3>gR}XgPW1+DG#;$$<<28sM1%I%TQ?x`Leh zasl#3CW8UIwsN=hVDlr#$*Q!#0{7n_5iK5sK{5uV)v2B*Rec_!8YZ-q*CY#KtgpJ2 zr>f%7BsM4^Buo0{rcfjkphc!Zo}eZskp#dhxN|?-T>v>Fjbjv>JSl7Ipawt2QOb1dX2 zz?-22!z=z1j*us*ez2TWB1qfY<>F z6rmZ)Q7>&@x|UXF^7G`v_vjm*8jJ(k6z0H}#%8LS?IoyZ($G)<`HwkiU;`Ss$|o&O z>b*2UX>U>mg99u&tpB>H#S5fw@){OB3=~f754whj@dl;}`W0*&J9qZ~AO62smw#-C z{N;P0yR^AV6{I62Gc`7l7eFp~n&xUkhm*Ga*Uob6^BP~Yn9dIm47|LmhC9(d5JYCHrI*MPLR zuZ~6wDymd9>{L9Iv5BA+?aCecW!w56=kkvWk$-w>LIj@kjuyc19fLD?+H3Y5J#q5H zq21-#aVryjZTIdr-R~Tpi%c)9ZrEK{ksH4_c<;)mAH4t3=hr(Xqw{y4eD?c4_`!Fd zKE5k2dZrg2|K;mVT@#xb75h(|dg54pe$2%EFW>#$Z-4XlpFe9Fi!D3)+$(SVOk|QPtSky<;{l^5!uxTPd)wYGpCQ#W=D*+eEt3(e)qfoefRUb18W&ohtE9! zofn^ZVt+-(=2Y+fJGXA%<87kS3Tqk;96ZoiQT+%JdMC2zX6~rq|-LifbD7G}c$iLIBJ%joV9+&ea_%di%Au$v@uZA0Hxr(|}oK z(Z2w1$RlP8yQV2KM(%U%qdB?xc{!P>iP0NNb5rDpjSP=Y5FuEGmqCmHa;BnP&017l zIb9I=BX8()ox zOA=K`K|!8|W%S0%ytK=au#$hG%Rezh{y6gKGG>Y~axi<0@`qWaqj5Op3yO-1;b=<1 z2Q)K2G|=BSG%_{60@W9po@Ci_#Ttp8;sBeNSt7{_Ca7{TLFJ^xuFp>lff)?QzLG5i zl!yQdJhVY8|D5_O!EjR zUo5tODX_6LJ0XxE>8dLc(8mA_^2m+`mM2xv# zP~PP9l_ek*QSMm(=!DLgvM*&%+MX`8Z(VuB7(i3BCa&grMOxZ$l`cd{4Kzi>$oKLr zb1cvsbvr*6ypySm_Cksjn^nN$cJ61}{-5mfPY#j46mtm{lg%(x(w)_BQm{?Gmz31m zCOK>bnnCs?uUmlC1?nZ8K~|#C^8&CHv@;-vWv>-1&@#*{NUKP*AfH&A2*><)IPkc? z>;uIKw#JgIL=7jsjg1<40I3eGMvNAjfk>O-VMd%R1sekzGkRm)j}Hxvy$Fa~%-Y;Y z_k-r!x9@cf%xtC=*Bv@}`pKOu{r|)MOL6(9gvkHYiT&0239A!5t#@zTZffhFjYum7 zKVMgo9XH?Cbm`;w-}~_M8=W)pMSD-b@WWSs_`PS2?aGOo>}EgBKp4r&E+Jh$^ zJJwj7INNdM{olX!+qeGwY14Ro`Oz0%`^lSczV_l{HEBz|cfR`gqw`Y9noZ+PsP zmtK1Q)ZXH_iThvt_3i)u^>6>@!)v|kd3&Gy?yEm~?fXw1u1s4Qx_|Yn3txP5uWuo~ zVAtVOXU{%yxUMi^fw#fzIFG$B8JShF_t@i)pEy`woVGa~sQ>qSCf1S*ckMs^_{pPt zc>SgE-nP~UZM`G28wu&+`YX;$k6&LH>+5{b+6FvnW;G@`D?hB{pX%~Y4Us?n0!E5V zI(QS=6VaVgGo@8Q$|u!*bU<{S{UcM$P&sCcmQmDftMfw8!uUxzKO;L=;r#e$Q3y_> zo8gp$WJlT}KoQfsMa8G1F=i|XKPKW(DQ3bDm|g}VOM!nmB1H^AYg7_XK6LyBl;rYB zv&oA)%skJ6j|*Tb(wP+SDnNXU_#MMS+Uz>qGRg)vq$()|h73`FAr8oEhQbsHF;U?a z|4VcEr-jHLrbJkJh{tH#XF1k3Eo;!odxWKN%r78qG-?!jbnw7cFD?#XUY>CsW%RH! zIA5^}*D&ck6I3w*S!zZlChJnBmx#F>TcoIxB1*cE5xNMUVFZpm!*FRtArytgZj^jQ z1j763jMLBHuM|rmpf!>Eo8uSTlN6L(>;mF@QACi$LZozZ-j~55ErsntRAow52rv9c zy30R3RQ}-cViQ2rlTs^AMC0O|mP3AI45eB=e{88#p{3|#BCF)u3a*ouQ&d(_Sy7sw znHaG+HQWO=K+hnEOgMe97>bCv#=*Ed($~}7!|JgVk(gD4V`f)1V9wkvJKO;o`?kW|i zV@>*!{Hdr>XjTIL0Kr%84?4EsJ%OTUupoK;1<*$`^VASQ2Zb206f4W}AUQy>Vu3-W z=LJ|H-1<_?zE#CtT|*4!?&aBfzJAvF$H}ED70@CHtXGfhia;+!0hDg9 zw?>8arXDJ$vF_j*2)Y4kY*@)Z)8(HTB7Xut3Ao2B$f`Ilad}JQ0d5O+DU^WROl(rz5vZFKCTH1l601^-Bv{1a zbOZ|P`w6-5bt)K`TxR#fTrfMpBo;YmS;uJk34L-bNddAj4Sau<+ac;79=hYw_g41!}mY@ zCvX2V$LjK;r}6e*xqPj;dvY_qtnu)P;|FSUqbDC+djEgle(U$|e%Ue}S9bWBAH4p? zkN)-9V^wJ@1I<@H|Mc_A&3*In1$BoXKaJs0nH@FLbNA9`=g)ug^{tL^wD+35hYlaw zQ&U93z<7TbTguSPT0&L{uKPW^Yf5tx)}{wK?%la{_kP#tVsu(Tc`cZq(%j@o;7Q^z zSJuJIdO~J#Rb3;#{-VtIjfKfEBFl5=`s4!?!%vZY-2) zB&&ZyLRiiJ9G8Dii2Oa^uO(XBe~1R)%d$ED5 zd9k>|I>Tn=@`bG&%14XxfaW8VL7tDeV4;u)HZIUQkqLrRvNr*=D_A7QFAxxs77GCq zUiM$E%Re_n{ucbf&XZ|vW`L5TNcfLhTQvGcg>A6Gj3q{xJj)N7Av{3v&%!^-rjq^7 z1(bal1I<5Y8MlZl6^}bbKNRD!n2izf1fYG1L?cCPkH}Z9cwZEl{LU)FJIO;&Y!G;l zo~*oKUjhJ{Iab9-2~!%CUJ8OVIt?m$r(H2s4pE>hnrD+??z$)ATdHSR&Hp@?e_n|E z-DMt3c6!EqzUmaI-~NNF0oSgiU!k7!7p={DZp&*+QyoID3)C=qY*}Poc@F?3!U3^l zD3zBR`ig-7@HQypKx?w(Czp*@c8+60$Wv@IaFVPbNaUQ$8WA)}5JFv%pt27@lVsg# zC}4{~0-yy(%~{*r6)c;<@5V9DZ3v3?(1*9`Qulf zJz9~x&~y9CkN@%U#XCK7@r4b?PM+5K}ckg~%&+znWY#JV>u#$hF%fB#0{uSlL`RNIf zD|1v-8Kan%$eji0P<@^CrCBPlj8D$3Y=Q(}qbHd<0m?n$bp;7tpqNS`u5_XW(8MVL zP?|rvc>>=;ACW3uTrPR-+U9vT#a{|K2c<*^-y!ckszOo%?t5uzaL?d&j892ZmZq`M zFU$zT;S_%sOO!KDJ`3ZY2pB<8APh1tc)uA1K@OYXp(v(N%K0-^Ny|M@Y=B($l<=zm zRpjz73Xy-37fg~S&(6$3%Qj$KJJQQ>_^RifLj^}L^>nsEFRuEptpy-{g;|XA1lfL9qL*tDaz12nflKyiT5<=d4u39n09c5YrC zxuFomQZWW37Z!#zM~fT?q{c=sg#lC0e+@GyA(qJyhlzaG&_q&92yIqi7wBL(4)i@L zy!QWMmw$1H{8xzDO-+edb0an}9kfpg)_s~-fX9dWLE?;xIXN*sD>n}y4u#*AXD3)! zsmHdk9+Q-rU&Jz8n4<-Rs$YQkM<p$t-TkP(AnayTb4CSR|b_W=81=u{o=K5j~Pmlq@KbaK&gz?xy_xMrS7HVh_I`c>z_M_9?f)a73q zB7b#DG)9z3lKzsL-g!67C@|7z?Vj#)my(W@Oh)QsosdW+ee`s}gXm-zpgHOBylV)! zRB6q9WLfGifw7<ythAZ(YA}yS0BhBC}M9rZNE9zxnvDfB3`SKE2tyl2QNo zcU}!E`Iou;%R=P;;~&5NuTLK;OPK4reettTKmVp>U@5s|?_+1qo;p~OGT(9WowtAe zt6%@_gX;rPB}ZR;?aiOP`TBQH)n~2_0LD50>BXkL#iWuwC(b@|?$m**^!1^8m;Uj$ zKmX;u3)eeH0Vr=geEb9kKw(;t`&p9b1%0#NEC)k#wz397EDP;IFd*ooR&?%iwc=pCC| zi%rc5EBTkZ{L4e+Uszni2A-Ax{%1~=`zXFiWzL)&SU;0g|J9HH<5mnHokU8N_(YkS z8do7M%EFRjt#rX0nG34;f+`_B9saoFR2cV29fuf1z#zrwgQQC-ULu=QB`I-D3;&;P zWnH74wof1;LB*wTq9Y33EikXr0#tA?UUdbxwkcpeQaIVDEHeO&p8X3qw16V=DH||R zUL`g#OZ*KOtEpm)b1^w3tmI$e@~;SyzntpHlxW23YBf_)1@O(|9;Y9Tczxc~!+D&* zD&-1{+LJ9sts*GSw*)|7uq+=K@2%Xu0piQDGrfG1Xawbe_kyvRmIMG4jIz%R8*)iC z7$ReIL7ID-t*{%KsaRuFvJ-4Ka3ZB3Na}_vb3IQmQvS%*hx%tOMi51$Ai(;r$D}a4 z7iL6jJ1lD!YI%%HqmXk_E9MT#J~sHC(Av_Dz7)1!j}ef`5@ zGfNw>#8Prd2$q*0us_)x%zZ#WYEMu#Cp{5}4xk|tg=JuA>Pm>@2?umypu!kH$}Rz0 zn33Z3o~iZZ6BqTvJh;x+6ClFa;<4y0P6*qSsh!gF(LLm)L|qAJeu0lUIKj+T`~qMW z0(xO#lF3^^*T*zPbrpzRZf0&_Atu38cJct&=Krg5`B#O=UpQ?8aLf5Fvq+IQV*xUU zfKXCO{#A#YuUE<;eggHZj)ACgo!+7$@K{BxDlk_@E4 z>f_$&9XkZJ$-mm=UmYTUx<_)7_HDfu^ox{j`QD|}o4UWH>`SY+k9DZT8-#pxTzzbZ ztZxwrf9(tZ+XKw|Z{M56$Ib2T3IpgpoF<-u;=-}3B|B^EmWOU=_fowHR189uYqLY0 z_io*|)%NkJ9&@z)+cl!Hp{N&9yUOuz8AbPy*`d6QQe(7%aY;1nrk<-{* zhih}9COWQv_WnEXd~o5~gVD9r;`#%}jvd-lm7laeGt>p!eh;XfjIxG<#~(X(puQwM za)ubqH5|fs?gdoPc13VEV&3sA_9) z2~lhzL+O52qh}J$Ply4zUcI0sP=BXmBKuJE-16>9*9R4#3cqn=5zB;-w-7DV@Ix2? zsG;JkK}CF23mjS^WA?BTG_nljie_g+J2Y4TTNrgL?jzA8tVHh0esRuy)~Xa)4F2Bh_kK#Mba85@Cid0cTU*M``{Bjmwa zG=(@h-7M0Nx?y-8s}_XC;8vNV`jv$ssTe3#U?OF0n3o@T7dj;$uCQ{$Qt{k#2@F7C z3sWc1Q529C3_uto5>6CGQUz0GvxvA-X{w&LVwz}p<$u<>{OdyGPu{+{=rP-Y>?Nh= z0Pmx!A`XGo`N@&Nfq^07eDLp(YYhV^Np!R)E;Bw(?v8kTR0y^p50d4GmHBDqc~6jQ zP1b-?{bdh|(;sut%{~kO75YmjB13$KSf8bxt8ReRhf>H%M->6^gz#i4{3$RfbKa0( z0`eLR*??n~4MN(IsHc>n9#m0jOmZsXWn&|4R2_$ z5Uw{1K_==H?R8xI8j2$9xbD-u2dj6Je zVP|OVR*0#b(r8U_^jDL$!XCh*jI_=bPg|~b?f}>({|1+TLx}t(EnhJWXeIkvU4<1G z0Qap+O?juIG+pR(b(w{HBr`X%$qUfr^O>rs90^(hl+(d@G?fPl2!3k9#=>aV{kxDl zlCqgpP}@E|jF@SSY4-0Z{a`c-!7XPf+YyZm>D z$p6!K|MZ8yeE4><4e{wY;uX_KnlaC$VU7Ef*+1-5o z@>gG9xz!^6PxwXacU$X-h4F!&9umkFHxn`n%BpIraqlNZER6Mbw1PC^*74aTRagk+ z`Ki&16MgNi&G!Hx&2A)SmsHm^)K!&aCv7fH40i2Q+3WY(CjUm4e`ARJJK8(@MrPKG zH)&T*MR9h*=E8V?_rr(XWb;|#w8%WNlcTLXH)Z%7bdTvoM;TO@Wq9u?kI5E4T zj6Hb|^QpzKg0pp?58VM)QL70rh)^5^F|#wmlc3#`AqqYlbheiYwVY0a@e9}+k8W=S zk79?JnWwZct~_wwmI#Wz3T9;s{iE z44KVY$4vDGO91r}ov-rD+F#r!FMR+x7~UV9LjY66itMN+E6t7Fnf*UNa&aLrG4azA zJ2HwVHMH6gm~oz~2B#Fm2y9SJ7RWRsry4aCba_J+OicwPX;=t!qlHv(3m_Zq0ii_F zembn=zt`ozH$?tQpPgp1(36P(ZUp`?;wJ(%ux(*%EAnDIKdP3X_zgKc#+;)nu$qTZ zGHs#qP3kfyLJjM+3*5%f#=o$ zBY{*QJf)nGxDL-rdA1&zfmKL!_rib<~aX!uG~S>xu)A^|Qg?b4tj(j!qWWjXHL z&$jh{pUZz=i2ODC=@xW+`cNS>B}o%15v`BucGBqa1)%epl5R*E#RSw`?H}px+(%2R z8oRGWQ(aoUObEK2)>{R=e9;LsO3R~W@4(jQ(m@#Og|krA3hcvJ^gKxfHqrMY?7FoA_^LqJ;$DHBoSFa2cqC= zxqs{GFjarseL(gj^HG_lb^DK< zkOMz0k|c{e*REc_P0H|cY(`;a9Ytiz(8K3OdpZE{bdOB0#iZsGm6n%*)kzV*o1o)k zvv}SMDpYc|x+o18(8J~%-(XfWb&f2?W|h_NJ9Kal#Ga9J!`X7HD#cHmL~_h+Ne|3 zKf&RGie2@)DvL7W*QSRtaHRT%mHZF7{11l69~LCwQ595aD?)Eyo+8(`tGgcpj;Q3U zLgZGGM@e9!00X`KgQL?+kx7{aC1qu#UJx5lJ9 z!_tXkN9h)V>Ugm=a_>pvQFUFfD5f+ZvNiDjfhQ48&Yrpjwj3Q7Tb@-^b)Mpgo1-!_id3xbPy!=` zOmMxQ23C0G{~vMr9|@6vP_ox*_60mI9*)6UBRb+LHB(wDxJ&`r2j)YU9>@F*IKwz< zYe=Bl$p(nw@+~x;EAVCkaLh8afwV1AS)BY{e9A57lE^8;scZmFe1G8e~!ESkB7*gp#A6wHFf~`s`^(^VO|!o z{H0mI($H$d=p7BkI}Sit)}isixo)&Ninoi@SGje{#MQ!q%SalwEhZ|op}oUE8tm@o zsgtW01~F825l-tOu982=Jy0yoQsdpbw`hKSR#7TAZi$dYU(GU9tN3-W`k;C1DFF zqT&yZ>sQgZAbpsCk9KQDgft6$b=s_D3=&s>?G@Lvh+(BYs(cY!zBYFaA#-3Votc;9 zpba@2L9#~V3FeG8J=6|{RanXYF_-^iA@axDtLP5BYjfA4K+?vTWRen{4(Yof0n*Vl zo$RnY@-~~1sir0q*+3+=0+@XH#_;> z9E-?QCvEC$(XczZFIO*xI%%b)^-?P9VGE41093P3Q{U)?60lDauokSMwe#HbD}-15 zkCQI{lOggK)Xu`ABvb37D2WjNa+BEFZp*lj1ZQ0`t{vszC}JbtC=55TX)(9)(5#}C zGicDO6(f+o&cH#Q@-Ns@FHgQ5Ri?I{X*M3=8a5J}yyhU5|BFBV#lQdi&tHFj zU-ok6H|O8^%e$Z5>R-#Qf8zP?z5JcC2g?$s+P;48_rLwk@BZ@Hoq;v@W}bZZxu+jL zP?;G?g{Rv$?zHwzZDy1;9*0-v||3OZz0Rmo13y?(E4@_)kR|3rxVh29zLdeGY5Grj`wX77<>NB7l2`#JLP?$wJI zFI^*fVj-FlvH$Sl{qdN9A@_X^gceJ&2_KnWrBF-Gh6^~6eg!jS&PmWK7mHbb+{7;3*pX!>cn*e2Sq>2&W>H3Vp6X%!?nW!DrZG$$zouJudN(xOZY)@~_=EYQ*g-K`+C!9O~W9w(iG6!xgl1_V2AN--HZ)(4T|>)*e`{J51R`*z6JQ@h*Wlfau0R_%!4?aQiTlNby!dIOT)Szy*twS=2J5ie^}clOgg4bfc(?ieqC{F-It|U~YYp z@Q5^9q*@ZZIn(DX@)mgNHB8X5$-;0}UXiLMDL;csyukR4pa~S7`QC#fd@|USF)pvZ zHRgdRje4R|c&ucHk@bthUk17uXcS!#MUdWu>YZlu$)J}Df@y6I2u3fe{-S3Bn++g+ zRJy*58)8Ui;-ZX#Q0C5L2FaYnqa0TA|BTE3Oo;r!)P<0#$M)S^5>cG>l*zjsAh9xb-wup#eSFD_(igzXk*YXwkG3Sp7!TtL7IBpQY#Fe@s zmynqc95euzta%Q3ut6J&ECJtY*h*v$Xk(&uuud5MM0=2VB;2bc3srlJ?jp+-YeVji zjqt*Mo^|=34UxZvXPHd4nPMo3M@_~W`!t(+upgT{PhBWS%x1Jpg(H zMH{ZS!h-y)wD`>>QArGq&qpLf&$D;`9-bM!2yIW(-8;<>dWNP}qLQjf|)0XHiiB3^$R>vrc9MCOs}SJFl=XAL5FzlK)dK|EEIa51|L)5)k~x z@k7#XejY5JL;z;SC415QDZ#fCR*(!JKiJk?Bms=hk|ms#UqnHLY`8*n3kxD_vI@Wy zA~d#&_KXjYpcE>75c*Jou0Y|h^T^?^ohQnS1>nD!6D;pa zM$!gjHHs}u6!i{NfI!9U2XYEwfyh}T2cdR-!G?o4aG)a?K1F;$Dj|$kgZ8o(UiF`z zcKJUYB7bFDt4@N@R}^xlOrk5y0Y*aA(ohW5SLAU{Pht*`#BJrB;e1MlrgO!Zcmx8m zja-sj72e*eFBo)(yXp>Xw+Kf88hm)#z2!>QM`3u&B8#CwJMMd#i*h-mD@eRpZRmUi z2IdzRwb97vv&fEFjp%k}ZdwKi!@+PvV9({tM46EmAkBcmBN#Xs6ltH*Yg4S6KzR9o zpK z3MMBS1D8me%rFpHU*JvltR1v(S?{p$X!av81^og&L>i@Q7A9f_i7gD~@HI?{{JW9T z;aw9U>|8262zDTK}JQ`9B*Xe{;s5DKkf; zR%>Q5pX6|-o9(0d!#C!-k(Y)kg(NI^CUqMv9Cck61w=43RQ+{xyAVXAUWklvIb+=R zljL>1NIOk5TBxP%V_%?@E6}TWpZoNA3tJBq719!K?tgnf)A{B8(Mw41W+KSrZ>a-v zHPKkD_?Z<${;CZT7pXL5f@)Y&VW_=5tmOZk%m29$`9JI#5sDgioWlqA?82A3HY25~ zXJBGEE~~hzwz@bI|ND&#AHMg&r`I~BVvF`Z@%(qc|DC5#)EC6e_TImF?OIdUR7}C{ z6HlH!xhHR<_tHDR`Q`un)$cyKJDsuTxz~U8i(mZohfmg}Ot*gh!CytYKNeGR@adOd zedRl+>Qkqh{_*y&{_DSf`MdKii@Aqi`ti?y@v}ExI$9Jlc>BV8@BIDas~t1(r3X$w z|1U2+^H_aurRA4a)Ih|U5=9ZN&i1zU&Yq$1Su*P2hs%)`mmCKT^wi`O=vf@~0E6nPiZf%E z#=7p`xpDJOYtQ%+;2q`UmKS7@P6~LZ$G|(01OZ3`t}L^|+`H`oL4dJ^%|wC&952mF zi&>o=>FbhCFRYIeN=r<4H&X>6ASCHX*tE^m3oix+W%j0`M(e%|Mi)Xo`+;=3{5RZ zCFK;B5J<^OkK0_D8Xp=YWHPrTJhf4%Br;T_*g@rw>pW3@TXX^f220}o7r}>sBnGcH zq%PZkz$Hl{sEAuErB}p_i-Z=0=d@iXSb)u0qdka^@Al@5(5kJ0iC>8fRLe^;Xeb^W zDG09ZJ0QS+PH-Vgb;St0;g1c)0bQS{A;@rFE+mr|47E1_hue$Hvv#$Yt^h3i4RDX-%y; zy}}Y)pkg6~QB<_B;;yIM*YbLFTymPHlT*2B*(;DOSxGB?2TYnxQi%<_wzvw0oy=fa zI!bj7EBU|V@_#8r{vueSDg!o=<=10yQO8r5In`=-gzN{Eui2}3nxU;^>$y%ZeN8w& z6h0_FHi!-i;in*g@b?zL3v_+#bqg$QYM;TeZ@4pq{7XHg@m3l!wgp2EOc;kBu>={0 zA63%Q14!~Wk|2g3IYT6Mq#DmK`N`CUu(V|k2Lz<#45=+V!%?absFZXCD6Eti0im#x z|94#e-wBbw^(!$R*=(kxlZIn7TrpHlHdD?5H1fO1vybvDAdMImRKrEP0byc-Ia*kg zJx&B6GliGs-NDTgbhnW`nGhHs+`!^KqIxr~Cu%ekXkuj+bu$qq;kH;@6rV9TmwX2b z=2Ad}D31y|$oy1MXB7j)iqleL#mEg~sGtKbAY(ORGq6arj7Q7>4;^^qfPKains)3E z*oOc37nlFPgvcLD%z|i8ZxiUS9<^-NbC6kIu3bGPb zC%T)jUHtme&9S$wWM%4UBPy2)R?%}z}4AMjo?16HBqV>`T5N^Kv zdDCcg(f+gFd*!tsJb$ttCx6?`OS;48YD#J2u~SbzafG6>Q*D<&`V0L0pWWwrJ$<-3Cu*iotc^+oPRIwOa^m=*-K7~3(>={sFMf6LT65Rd)wiqE5pj1`uef-4T!@M?rW7*v*`gk%B*r$7?mNp_09R4Y0| zrCD)HOU;+^j}8Gly%n4kDAs zyxc2M2^^)sRXQ%}#hI{@|My(}-wTod__&H9Ep0?6Asw`>?9_Ni{|`|*0r6T7ew!OO zF*ySs| zNh?xq3}vxlCI9cc{J$R}e-Ztgdrq1+DX}(jR6G}Y%uFl3pzT<^EW(1Q`y!cls?0@8 zMuLh0VBCSWl5uDS-G~aBn*fF#RfQS^dZ%O@Dn(>vXOmbILlW=gxKeZg^(ufS=atoDd^=z1Drkq`9Or55S8+DCzZ#{YeJB3WJrQB?`%i6 zOcVAsOB@L+`TwiS|6fDoFX6~yLt+;8p4fW zyG0qKv@0TER0Q(qTY|~A0Sw|77Q&F{KOm(crlHt@g$+!z(H5Z)B!9z7{y%W}{~$#E z^opfL%RHi6%%Mg=hrY7>D^L1Sh(|#l-)608U`VN}MGs*bBQjC=h>#Embz9h)%;Zw! z#cm+sDfXj%o()>zJ;i>72A2H&X&z}(QXrvT8!UmVFNg^#LdYLO{wn-LpvT|Lf>?4P zB5P59Na7j>=2A34>xjjX9*u{vlK&4~{yz+nKb;dy6B8W_x+XfhOfnVh8+ir+J~gG= z87K6wh@3PdB|9C&8!KH*ZEc=%1KANCpOcX6E;d$l3*A~Hh35QKoQ|WW{+aYR${>`q zn6Q$dUPKQJeWH&5hL#4Ly$CPpFRiJqqmsYwD?^{RZsNz9o4OUJn~y`fP;EPy@|Ef z;NW;9+lC#~3B82fn;Y%S&o=qL>hgazME-m4m3v-HHa#@2e;M=WGjlc6k9tUiB;p59~e;#7=1Jh zG%~_#|9{Qp|5~X0=>`^Ao2E=LddOy^_nggAn@-Fo<_o>6fua>u^AQY)rk_q|4WNfP zYI{4~%a(5+rYeW!enmi0wvK3jK*-3`03QNp8Q@sDfTlWUOdFAc5R6O{zF8rX9Ie?N zlyqdX-+YLG0lW(?2s zY|XPRkB6C=nVEUUV_CK(S+-^Eow>4UERf8b(xvz{nv`zw|32$-~0Yf?W%hq zcV=XsSdqCSG9oi+1Zi%vq@rlAg8u)5f&UNY@b^fpaaCiepUCPwvE`S?P!Ga9OZ}8J zb3<0#gFNb*y&BHJL8(xYYAqbp;~?yP{Pjo{ycV6vD1k~y#$%d(8FHq<+^8kVM9PGj zl@2J!a~(m^C?8#!{2@Ia`e})tCTfZ<$)@^#Dj|uD^rFRHKdb=%j|cuA&*SetA^g>4 z;d<&;bU5iv8d4(}u8V{2-s)BajHt80SoLlLA+Dx0JuspZ%O;TYaEu%1d&!=~M0iqO zWQCZZL0st4h6}n@2NFKfO=+TA%Qtml=djc{SJuoRc+k!yNtC2o>ag5eO;!67{o;Hp z!2gE={~yZX4_kDD7%P~E{HPyB-&c171SMIn zJc5v<0auubHZS_lzv$+qB1fbK5fRW(p>~)Eq~n5kbZ6ZQ`f1l4p;>6g8-1anZ@MQi5}4+yx;csiOjf6oL@3)H z13mdwP*;E^88KGml710&1;F|$X;4`SpIShI%zNz>ZHaVwC`j(qeI+;&JXJ;B(B`6g zNk&SxFwqtZY5V|D;7_RQq!?O@0Z`0W0scQ6`2TPY{{)s;a?lsW6XE0w-X*M@tZw5Z zC&J5kcP0zV0YPPlrgFQ4Kd7_-5c$aNZ1JLdO5`s-@+yL?K@h#J+D!}SDNQj~)$!9m@=;QrC0J~9b3t9$Hg@`>6xU*l9HX% zT8Z1}@yc4Q?E(!~n)YA~a1mbx`2ViJ|99o^*N_XQ@l+SYRsl4KGTKUs3R5{*T#;^d zjlAduVHJo#UI+ACA9VF>5CIM3q3J^a1eJ)kC#;}gt4~^_XoR9~!fu&6Dwy-k)|j7x zn91a$f#AL;+}xqF5kg%ufuPL71ql2vK0z`%G>NWT&?qtM z`42S6Ej5Cw#*kuQq|`K&7=MY3I=e@_m7SS6l_D?(Mw z7XK3h2HLoq#pHBuaZY(922of=R91v^>5lIi%#`S4a+rE55cxzdhzn#jNTk%1XiHS9 zHtL37f{b!U*3=T^w~#7TEl)6$tcyf9P&A}PI6;ZUcopFPdjtR9o5LTi-u#9gaEdF~ zB*q7)#B8UDt4ap3`#ED!Wy(ir^Iv^j{P%!uY_rlHQ}oc)AWl6V3rOT61VhGXfW`=q z9I8gjdm`$`Hkpx9hI&P*85wr#Gd$gucbC zC=e8s=8X9d%9--2e3WuM(Kard<%G8UC-z;}Yl);7=`(T=*HI{6%~f;Qt2$|38?+ zAMR(pz`a=9;c{Y(tL8UsG*jKV#6|Jdj1;Rg6qFc@jWh{@I8LHQ2y!aLFt~3zDWxi> z;8U8Kpo~@vl$JG$#JD13Hi%m`)a)p#`62x-UrJPa^=_(euo6;I+$hG^0{s6_;Qxnm z_?uI~EwLb&Z_I)t207R#nehKe<5l2FdX(QB6;irOMk#2%BcV9pc9c*q%_lo&fC5&c zATfz_CyTPmAIP9mQ*}s{D&uk!^dh<*F(9+A5hfa@Jj$wnWOH_>klXi)^rZm*KOFe~ z;XMB4ORx~u7=*;u9IG=1C3cft|Kqai=o{*H_irdeN>)apk>MfO(yeSjF_Iw=j1l^; zp(14@T{Zf0-F~>JDrM5;cU8lsiUo7}OG#Nul$Q(?{Z)Yf9|`>bNDlvuPv&oc0(0Y= z@0pdl5rCP!@HTzZoA~ceC5EPqA`n>w)d8pJf9AX@NCdg7GEShM^U?VYmwL4F#jC3h zQXUZEkrJtv0M$um((UBY9kncIDz_;sHQLO3QC|i4|IxtzkLK|=TMk$*d|;tj6?_+x z{5L)VLw9)>6MZMktlR=uNTfT?tuO{%>BB$F$dllgS#{&O9mdBr8Z;ptodOR9}fJ!XV{~Ut^ zNifkYR&Es+g}5Q+#}#Q=VPm2j%E+G~3KUea(=0$yojbBqDI$uAYRahW%IMTAn-X** z9{jRKv&teb-;=nw8EQjR#@C{}3h@8qf&U-R<8MYDutK1jt#HcB<(ty@CzktOFp+d$ z&H(D_wYqNvlvnJIONqM0B{4Wi<@jl9F6H5cFEoop{z8^~%Qfi+gxxUb zR}-AoWs#0-elz_98!)<8oL52r|C53LpUmMev^*bgy(zFYf=GcM#ucODfQ!Ld6Hr>Z5Dt>mv9lDD zP@Vo~fl3(YP1%%Ng|ZUyA^Xa^8seMTo$Q_(VIoqjJ8O>j*^`&s-11#l<(K$= zKhfwVp>wJ;M1EDEv6kdllgSX9NE~o5SB-4L$^u z^vWOK~H($&aaVsEzVHvl?Lov)Z=x>RE z&Kt=v*PIr6vy7q?+;)<33reoUf0Zx|rSd`5sXYG;cw|LG!1P<~4%C`di|8n5} zm-F}=Lcf?R0i9mOD*Z)D_9k$$J94dt2*6FUr6EAKxwxsEN{@udz-Lo57~F|0k>B~E zKGD^cL@+8!l}8TIp@IiczF#CuR;4Nym1d}uMoOaXLdEz}fd5|!{QpW0e{+VHgRT)Q zzYl`gcYsB35nhq%4rm^VmCAIGQ$&4%$TwMY$) zo3msV(n|4VE^0pCY;~$h7_h|QM3x+e-8E2?lT%MM(X0u&p{Gk!C30?8G|sKk$5g+l zWjLnyR9}`VY5}>L=hUDVpGChIuLAu4THycJa`@|ao0sW>V1PjZqnQ>rGFC=rIuJ}( z2g-^cU||BLA$)Y(dC6)LE&%m}tiGnq{=|z3s|=UR2E6xkagX#6rG&gmM-exW@22c_ zrjM#Wi10y#m7}Py0{s7a;Q!Zi_=_XKs*DwZt&;;X-H1*q(45^j#7`GbJv}23oP7Xw zFc|D-! z6utOCB&=10E4}8*rKFVN`;0b)lw7=6UJCI4TY>-I%He;XN5KuTguh63*E66GaEdR+ zCQHW^5`lT@qLH9P-P5IPK`7S(eN^4L{Mn?^_n?{DCU~=q zM%pzvOO{=<;&XAn7U2K41OLCB!(R*#XUu7{D1GAX0LP5w8M^|O`xy-_;ASF}FcnwH zBq>U70O3#RPIg~k4**vN{4 zAe7x4B{;>e%5Bnqb@lNgV)3WUE|9xhTptVY|9gS|-^<}I4rFl<@i}8l5{AUy#2G^v zpT$P?CiN`+%U=dX_a97FK3$Pt)rD}Gia!gs17uTS6U$X_K=a^(2#JysoG8-1q?Y8f z#oZW^_?*9$6)B$g0{s7e;Q#k?_-CCa>k0hGN*&xx+&tmNQz-W8B<=B$nKL#AJf;2e0-%W9}>}&gS;VP`oLdY`h=uLqqC&@ zw^OcSdn>^I9|ZpYAdmmSk4_BKn>oXW3_ZRdz?eYdZsd}_Z~z=)q4I_|C8lBI0cP_h z`<_8=C{;B2rZR|9x-@S1V`NVfsVBKw896hGEyp39$QE3)?j{QqI# z{}1!{C+@*Ba}5?GzKcf>a#6VYre3n=ddi(xmuZhG7`ZZ@K9G;9R9nK)w-Ovt!9gQj zI^9YnGY~T z2U3_-S%mKe`2Ul@|DXJC_=_d{iD!x9Vg@|TSf;PyS>#F>9&~IoTsL*4BJN_55V!Rj zkBl5qm$3w>3C^e&Q;x!_RJpREktx;X8+tLxgKsM7Hmd!m7b#K7wNN6y=}ysJ1^EBd z!2h4-@HZRaNq{Ow!kSKgdKuWz-b~EC%|<*95QcMaL#n%6@=ih$5+}Jh`0|g%64; zSybJipb;dv5%*F<{l&Lvq%*oqRMJ_Kw793GmW0ZRT@;3p0KdInT{DKF| zIa5aL|Eq8Twf{dR6yX0a0{?%J!{1mM1#_C8=`XyCbHREu3~rfWiEF{v11T|9XXK<EZ}(+IB(gs~2BpY!|7Yb> z6M^D+E5QF>2LAsthd;kopus5dDlVa#Awx<$r!!8OrDmX5N;adC71n#oDfequC@3mB zxh+nqs;E^Y5(SqDv5FLv&+e*}Wenm;auXpJ@h#_YJ5)P=ZiMdpg9JqB(YRD=B2r{; z1^EA~!2e%8fd7LmFgU@e`|t^}EL-+&UZpR*shqxP{?1_XB|5$H_{9MDNkc~6Hw`LF zHD$wrzN&1{QYq)mhP>sL6UsxT-#Ig5ffGA<364md^$F|C_-7-#mza*01>4VoL^` z-V-)vo*8J&#UHUY<&JzxwGh-6|CEl?^+%8X$8n-V0Y zA*jBsOcc#3x?d>DB$;*{QH3&7xyT;0!9S!GebH35$Ql%sQzVs% z7uS^$At?w^;sMO_8I-Bmt^)l3UEu%ka`*=i4mgqeAl=+adNDgQ)|lr9j6djz;;jD+ zfw>>Ua#qgol!G954UpdTA&5w>EC$9_^=7q18(b==I3ssM3et$A>VuMq`kTHhG2Sv6 z$euYOPrhQl3h@8;f&ahH<8MU7h0xanBcqf!b^v6?tn_ZSX6#E~Wm(MG?2F$0XEiM4 zR6!#ZeO6e71O@QU70_m6EI1OFQ1-F`%A}3G?)h@205{38$i>YAYLT_5UkmX64}t%G z$l)IhfGg&B#-}`&+)2cBuMz_;I+Tvz(%E1-uB%jsccoCX4%1UvKvlX}D@YdG$&Mtjj=YNx~8yW$!)4Aed zp!0fldZZo$9(Z+5q)vYn>j6tdprWI{bVFxA`psug#uy@b65SmmFDy%eJ?iA3uaGb@ zAQX}dKVB%QjcV0sU&;rG>}*OJsWvGuxkOFBEKaqAQgI?5zp4QL{}TBBmmL1EK>bh* zjMKh-ASWDC?-##>lOWWyTx3)K)p4AX0Tqr;O{VD9i6UsRrLb@naQs)Fw@SdbBpD$v zz>_tBDwREDbQ}DDi6$Hj<4{t2c+pXCSu1F+TC0n;m=L5SQOf87YD4xrBsFSQ(Ow1k z|JT6(zvl4Qhked)Azg+?b%;>x z-K_1m$&>o6s#kUwKvytv<>qTbF*{vOY1wORSm6Oz5V^Y-EB>^W&2wjYbz`3 zTe~G?5~cm^)rG0C;XAkQj!iFZS2T7G96fdB%*mqzolTXy>nn@%iz}NY5NPjcX{g#+ z8oznrjcc6epX6e`9L1w(ID*C!c%v=|_(DHCJvgO^)6h9-Cg?u59W$bmZvJ zKxbq5#{AgLEAPJZ?!{|&r&jlC+j@tNpFDBwP)|!u+1Bdf!qUp-UU^+pXLnyuXG=rn z?%LeM-5XagUA}tb-sI9&MSWZE;L&482KzdjYRmUH6dZ-Ws-~`?v7x@EqI73tdCnqn z>*k$%ty`2UZ<|9|B0A2@WVuf1+>dF=Yz zuYBz*U;ozmn^T)LUB@1O=7krYd*Wn&OXb%5LEbrE|^&dTT_Uy^Soprm5BUj)2 z*4MuJwQs$BeSD>~vG?fdbLY+;AM9$RhtkUzRyOym8$0?AA3buoucM)Cb8%|;*7a-G zZ_%X}H+IWp$u-o=@Tjb?8dg?ODTA%9wx+5)PI_mMLHVqxKr5BLZ$ocubAxMreSKqN zOZG^4Wi?lgOgvdD8mrJ)t7>cO>g!}BmhW$^uguR*PtVLPEU#^9e8DcPsfOx47KyCI zhYJ564g7yJhkr>$Rb5j{YinC;Q+;*C{>~=W@!H1bwyZrp0QUD_{rdXq%IeyBB$riI z)zC4q#D!Ls?7@nv$|^9x&Sse3TwPgQn4g=Uo1@RKu5WH*P{Q^)5UH=jCa>cYf0V7P zz*5`U5~4ERW%ThRSfwkktgP`gD6g(#NI4i%ZL^ zn>!jUm>sCCt}NR#kyV~2rIob}O)bsM4YgIJyIX6^%Zs#VV|%~6s}YFlsHrH~-QHlvWn*JoolmL&-J4Figm@qy zt2`5`8=BiYySh5tS`fgJ-7WI3Z)_noS@)Cq{X?}KQc6MP|szbf}z@Ig86{Tl=)9vALy%heAzNMXBb1n9lIvp-GO4hpPYo zSm6I-IsDbHcD6S?sBQ|=(ikFRWTy8sN;3D8CWWl&tIujm2riZ&0*t`GN_Q;LERQqq zdoo5tvc?b1x|!n$fR#bgQ5-`*x4Dp%erxsWhmvor&bETIdtXvib&@=n zOc0G%QeacEjT0UVl(CCqTlT2*+ORM*|CDGJrxX7I_iNUs<65GSxhrQ0N2{{vi=ZOsShql53OV1_+4Hw`Rgp4ofW%B@}8bCLP z7u$gXRg(i;28&b`)i*;m{hh&}Kj;M4~s zLJ8)t86;+j$6{c1J;*?@l`NViaE1p6Pz-ruVh4>L4S#17C17!JaS63tkMy?A?yfEj z`fAiSv^o^PjU6c%@n}ISSXn0XGD^x`S!Fc}zO08z=92a`D+yujhniY+`$~C+P$G2k z*x5rO^bpY_fJ;v@Wv;3rdreh!W%f&o@x1{5pA7teGKaq&k92!?1tE(tXrPrBfXn_M zMsVZKGZvKzMIU>s2K_)!PxPsst!*4{6yVV+`1R-i(M$d0@Y6u|RFBw?2>}W01?ocU zM?sL1VQY-SR3DlI9aq50XaHHO6YA$cN>ikH?xD`DW3pgCpp8Ho(v@l%bTycj%CHpF zYH#VjwLkf@)L2R5!*%}mrvm>^3-sBO!N!PC8hP$#w74;Mpd?ErB_OK*@@m8-Iz@XG^#4x>{-4g_Z>GaG*aR@< zbg2A1Q?v0GkENz$9ck~}Qar)Hpq29LI(#_@B z>8YvN#r55?+Q!z7c6@oIn+xN&uU>fP{KaecX4cCZdxlOw`q-mqj}Nrhmu)l8IKQ}t zlcu576L`4(wpM1x?p(Wc;libBcg7bs%j?>@4;>yl)YsKoUsbltd_PlC6*Y~`t?ljY z%@_x}8!PiOQFI8_{l}8ERkYTlPrhv{(IrucMjMaxXr=bC}uL6_9jz4??Of1_e zAj45cK18tnHa%0|;82Dv>^!7bW(UnCpg?8|ZO}|MjpP^dvb~e!zN*L|f8gg7;QzV6 z|8qI~Ur{G)m)tSXXl?=1Q|4quiz*qwtL0m?@o)bEhAK*bJkLYp z)U!(}hs+mi9LQd>2CQ>Pf~6fuWUX{4KP8<10ge^dmje7hANYShhrcFdq((^t@Sna( z6(Csyvc5T8*0}XL4Gij9W@nU3+MuT3m0%T4I%GEcPkx33(z$1_M9O~$l~XcmG%c?y z@CZX+Hdy4Rg!D?P=XO9TUD53ll+yQQO6tFSKAE&Ig87bxLU$x78Xo*BsI^$H0{nkA z@c-Ey{<53HaF(uYRta>Z!K}?dPuvx>vZf>(!9aLtECM}QdixQW*)t>P*V z2$rKv{FF_VxwH}`U?PwR$Bht036h^HBCUq#&E=sHBB=6|Om|eZ|7A(!*1*Epr<#iO zD!~8e0{@@O;ZKxI>9&;c8`rMi9-ZANZ|*&I_KBySeDu_zwwk?_nX%!!qmy&%CDkq6 z{f7p6+v@h0C$67=`m6ED2~11~;(cA&YG2(8<nclk))uBG#>U1crsr2T_bcm~J9_&1dOBKa;s5O9#AMiieM85N z4fS_4ly5K3OpK3@PtOt9S4Kb$VI$>xn=A8EV{El3Dj+S^+R6x>;vnHU)vnV4JMt!!-T?(6SUKxw&LNGt1d6`@5oHa0cX z5eg>Z!1hohwg@f>*OCl@qP+_6|3cvZg&h7we<+xPa2w+02$X3hQbyL8;&2p}<>)PG z&_va&W4+nHB7mx{fk4Y9?5;8*f~45(msQsTY;z-$MBkd9#dKR--Pl#IRfKyHbSIsC zZGBz2t7;msHk%lK6hDN9xu)dON^+wdRuJ4pQ1H^yvRr;R0#kHgD1soyGk_UptbeQ# zbOfyhlktLbFL#nJX^)i{sZEOXqNM~9InV_I!-hmm9TYA4|A+qn3xWSH zkzCWztW?q1T*2VS{wB7J+&}>kM0xE%TXBX&g_RQvs<1$U0TovShFb(5dQQR~Cm!^u z5AsD~nqX{{MGTSbff75C>^GExhe$~CvvMGnLzb&d8FRcT&wpqH%(LI(rJW%*Cp8X z*jIMT5czEhO1PA&$Ya%9v{%9S|33r&|Cz&IGo#^*#Y7W-lYSok$J4>q+oiP|jR4rd z1@5fhl@87&*nEkjDN!Gl7Nza6GyYC9O}<)cYz`Rt$Zn|+S*!LTBMSIZZvI(#QjMxa zmrVv40P!{Se@h!Q(v=7)ll~R+Re=952L8X8!$0E@d{qY)JKUe?;(`nY9dO+ECXNd} zt|(0oN`~<-0w!dX$*ob>IYrt3lqK+pJQ5HM&RnLbVMM~9VoLG|;zU)Ga;r~!#0ksa zZIi1h1kEi{lT6rNpOjf6gQf#?L!z$66zf%h|Njd7|5pxwF)=+3;jEb=`(A@6!vZsH zG1W$#Mey5DO9)^euXd_}jie-@%R3BC#1ekahB1c8-9R{hRmtY!^1hCeC+9G zpLz1kk0x7R; z?C9?8_cElaq8j&nv{+y+xWfYdi?sl5-8G zO-EZ(U1iDEdc@f;NlR4t7aE+Rv54N2+KATP&@6+SwE%ThB{+1J&>Oc)E9>#+X?Z~D z?%Lw))C8vG{4$HTSbfk?kAH?m25ZX;bC`hZm~|cfSe!=(ds=ZWuFTC$lb01lat~m9 z?5r=&OpcF@VVrL4mDPBm0t*9brDDn~VF?IEf2X`m4b>%^tMk*7BNE8)!K+dZAU9T)-aaA(I#9Kv6-s? zCLiGPrW|-It|2E59VY#;Au+eKu10nt2DiL|Salmr<1-%kv5dCC5+AMKvd<>g_uz00 z-5kwk=vYT8<8Fub9$rL-KaV9JX~|D=1rab|0t)c|mB9a3a`|Kau?ETIU0wW#}>K0<62+avmWA1ZQg9nB8-d3_AejxntcH zem*9TBr(Z8Pi{dk542BdW1Tq)d!yz4Lk_S2$c!9?Ac3reCT1AcXa@_}v^FIiN&z<( zq=QVY{wv0jS;2!JP?SPYfd8)s{=b^TADhTl6xy4&WssWWOB~SyUK$c3d!$MKaz|F8 z9{5VIrYOzJSeY*5TPa$bELDFp_mBeV5vqxtCEN&I;Re=Am1^&O5!{1nG95lbI!^6ddgwp~C zA%+&`SrxI8OxB?T$gsIdwq9t1TWFF@nhbX>CefvOgq$cFbIVxN7fmo>L83M|4_Wj- zN>E%BltFcwrhbEn`Y|JsQF^LKHQADokm#4GJTC{7MX5-y0{p)e_O)!m95W>-@S8pbZTjJ*$B*iOtu4~f=CO{M!Swzz>yGCa78bD< z6h|T)j45z>jgRBe6vXG^>bshwWD;Mx21+E>3C-TetFX=t_7VmQ)5$fsms&fzq{XI) zLD_xFRH4WueyG9%6x4zSLSoT^&krl;|GyFV|3(h~ZDQ^e$;U!_6gKUvC;s3c!A+;R z{ifPV83;2d{aSv_+Ig#S1Xza02~IfuX2OWJ(jl*uHvVCmgAoi~W^!&wfp zv4jpkupI{QoyV(WLuM4QgW(TyveMD>y+DtFUirP#ipGDLU1ju8?KNpwgA5v@{SHzW zj2`n&qGf0mzajgSQU}(GpZGFdh4#K3fwD-ItY?@94B7Y)Q4L5N$%p^9m6brIO54kdQMS}XEKP_x0}C0YXL@+=qRx-?4o$t~bW)*b7DepVZk z=!7aIc3TnTC25Z$r=qg{1dU0Co~C47kwn8%cUH5amShJ~QZ1GUK|?A6|3Z4m%kQ9u z)SQ$W!bz=eda=qt!SnyCf&W)?_y^|VptV0C9(|e3GSorBgDR_AIW<=RoUqypFVvq% z))HWz7qOVruGPfv@GOewBCj#pF&FSX1_h$9dCbUY1Sf3_s9G|Wo+1(`kupFM6p0E_ zqC5exONP^51C3Xv`q{-Wpr~Zc@Wnro zJa7oVY&5ZWX$+^^Dl6bPR9k}uf`r6KVElwZF!aE%Qo)p=V#w;N_E%@_Tz>oY*WbEy zZ+^e&(AlS7eBb-t`{c=fOq5wd%ZA5i2@Gq(k926Dr>&M<%Pzn6)i3?(m%j4)wW;0a zp~qhMz=w+#e12F#|Nna6|MeXHAA0f06Fs%~%*Gt%+0c3D*r}68``fCw=Z3Gn`}SMs zFW;J2+^($0hk}(?z9SFH)Xd^~Nli=7&vQiX6c8_3Rqg!V1WOiYZkl8m{2jCOoCYfD6NPS4IS zui;gws&63_@sNT(8>>n-RxlbPIIyRGptq}~u55E@YE*TN&&msA2ZH9FH&++6Z4{f) zmDI9#-Py;Uc>K)K-sXzU`N>g&4rg#1K3w~My&U+zoWsAa5%U~a=O%{l+`gko%AJZj zoIrhj-JPwCRb_hQ#9u^@t{)# zepV2+d1!EOK*5|9B{CDW)`yrs!~p-E{56~G=Qu&6>D=;GX^qwnwl>$XTOU&bD{Cwb zt80olU3L(2#F-q5u}Xv|y+$ldL~KOu;*QlJpJYobk%xp5VmzYB+7rdW#TB@+MK{u{0ASH+ zi4fFeiJUtaXV_-ijzdpRJ)HG;4&4DY(mQN0JEJH*dO8nxp4A@z3DSn3Rv3z?j6oZH z8uFzdaG`hDK-7M2xTA>|Y)Wy25(2rA0$9Z&*2-nb>OLY;+0$=*YrkBc$Cl;>qE8jL z=>22%BpQrH$U%iRh0{DxYzs(J2BpG+4^P$53TY>+#a`Bam4|OZX`+tMG7=E5vE_V zC~Wwt*`|xvFu;a%2q{YE!-fAVf&VKx{9z9LLEILzVb%eUQU`*^N=tw%anHNCsB6n? z!%nbmC@5^HiI(!akBPb-0x<_5*{~Q1k#vhY`Uj-G8>Ll(9OO}Rl*Yv;5*3e}_5ZYZ zS*D8Sm^2+2g66pZO$MlRg@WAY+r#V){AsHIWHNNZd%|LFijMfA@WK8xqX9GCDXKS@2gU1YU zL*+Zf^<8}H_1Di|9bGDGJ^aYCFMZ(s&p&l)pqVJZ(Yv>?9Tql9s+-z-dV5&_v^_t3 z`OR;9rH-PmkQbas9@v zk;%mk79_9;2qi#!0JF6mo6gFf={t02ps%Y~vDfb^!2h+t|FshED8` z1i?!`wDbl&jAyt;R(G%zRF780S}j)LX`7A;)_k!|L+r3kZp6Tw^~tYC5TKTQG`6%6 z1K80w+93cNWo>b0VsvzL9J_S4f^}r&vt3_A>2|&nh-3X=sq|kdX=tkibG&bPZlk zSf?OB*#pvLi63LeDn*-lehcGaUEzh=i5&Aq+eB!<+uM1l@P8xle4o6}P z$9e;HT^h}C(ZV$C+HOaDX<0l~c{FEw6ndA}-^q38O*e5T*48)4^kUY>uGa|36Z^w* zWaq}r1&{Yp`;HR>$kr@!D{CzvLI)8n4?)EWLB*oRECNB~ZVS1empt|@H~vvt0I2kuhYJ5U1OGR3_=o=-y;)PM2m}0(CMf;Q z3LM{oJ8?-$Sc(#~HYOEL7g^OdMD#u@R_QezIBLlU<-T`BFjA%4xP%I88GVR-Pif z3ZDOO1^#d4@DFTdS&99;it$pi&0EC;>4HyUmGpFd^CgC9vKGdM2snYlx`d`D@6*;o zHvHA;q=H*cG~0mYA3Jxfr=etd{MIFHOgB8eR$AM{lxI_2#lwaF z`N02t4u5T@H_dvOUCw4|?_%$^PEF=3I*(`Y9?CSED)jfZHB#h9~CN;Z^S-{j*25_4*=5s}S{PQ%#1v_TJ-w7EW2> zWHt_f@m?TRtm0btgggEmZ4cSmrB!3jyuw!Q_VZvHYI6>3y;%-?lLK!Be{E;);NihT z-R%t(d+YcCXAzk4`nH}!hX?!d7BZTQ+`h@MLAx;Iu^zM-O}j;+^Ffv)WojB)u{hPi zwTfw#V}CTkjsGbv6G6#bqYYYI^ibjdZs7lJ4*&I?z48jy_b`rIMMepbj*hxdf~Mg; zr-MSLSPkB+Z?B?qd+83QeLJQ-i|c&Ck~Z$gfMa_V9@9L`t@_7VJUDVWoUN6Wm)%`$ zO*NR|IwlM;@}?8o7ea>)Ax1OPxP39rD{2qc?b$k&!Ks-Wy9PU28>>rqRu^@U8(!nB z5^r45s{Kgh{=p37&$Z464eqjuV&Iy?V-Z|Lg0TPhd;~lWai1w z0`SCLdM`jt1|9Gj;lhm;?W;E8A>2}qLc@#Z_@s4U`aK1^pzEQDQ}tpRPF;k zAC8-%ax!ZxuTdyJQsji{d*(#u{ zRw#!>zzsfF9kh~58>|V2_FJqnP%!>q4E!(V@HYog*lcz23Xk|RdqSPFI&B79@#l_o zZ2d_z1bb2!85|tGk)qI)_)v0-xYN=fJJZR|A3LP(B*LX#BCs#0Ld)}$ShnPdu3 zmx6+fveImDSP-K{$!4KZ!c<`T_i$4rLINPbrC+B6f)JHazq(kl*Y7I8|5D(8DTjX; zbLNBiF9ZaxxFgVwfz*2OEBrl9P6A?{3pnNlQ26O^hzAs$0&m6qxGZ4;LrDq>K(pIrPGko*<^*a*_ zyEW|t$4;F-*4JFJaO=(A_~Pe3_k}OLc59`6=sh3#o{xRscYokLN1Ar$hOb|~c57m# zw5k8}6VJT&nMaSdmCjuH>d$@plb?L3@V^}RU(VtG6QBLnwVrFTx zw3a>j@TT;1wl<)L5%0sIZEe!l+1rN}SGl`9J$Cmt$NA21_NQD7M1K%gq~$kSk5Svy z*?0KZ@e^zm*H*KS>*pSt=oBaavi~3ENL}g1`~+JC-sQkqZ2;KN(KmGByeW;9dyaQ0o4Aw66EFj#dqH&nr)@Lb?A|2 zUVPsRPoL>;DrWc#`~Q`||4I)3<%v5Ob)z%urSNrdh~s*--Nv1(7cX4A%H|xK6^&h- zoqUY_-nAR#_{iua) z4jL^ZYeK&?Bf|mnzs@0K4ZiM$p^`HgYz8Xxy=D#%p&ymdVQI87v$tHuSLT_ zkhY~`^LNP>fuV|36zL9jePL5eeg>KGK(V8xRa01^(A^ z`0ruGYn>lm5lP^PTp;JJT1PhL}lt z5N)X-)-4E?OA`Q^P_REa9ps_MhL!`+-(&6p=Yvn_lT&xw2ej~v*^{rA5D#{CVRL6K zQ_+63e(u&-+1R5F;|@@o_z6xAAJ9_=LVZgm&R^hxpegw z?wH!n!IS46VK=s#wUKwf_Di4tna}^?S1(NNcb$FdJHGd~fA4R7>5;yg^@;1u+TR#o zE^8S${n(R_oj%f4x4SrYG3j9UeN|-_=yJzp?1Oz8B@Bk&@otf)uQK zc?dhf&$DqFJ3DZ`JLj*n{%T`!dVF+zc6q0!{m{urpLqQ2vF^Ivh0&W=aovovZ9IOS z?ymNxnv!*FI70eHCg;|6E9={P28WIg4feFvSIAr>f`6x^iiohbww8t}_MO0cG(0>q zKE0p_BW5MFCOOuVX}%DJRGUk%w*)i3I%6KKbWyX(n*1luh^!^M>&tV~sCZZv)s5{v zY-HYramtz?#K%!-%y9dlqlXFq+kyY>JpMMdSVXa^B^OrcH3WNuF2cFAT>=q#T8Gh8 z536_RdX5LfwX0*Ih_sQC&aU7@UD+xlWQX+`^^C(j4?Ml2RpqSwkTS_0^F-fGPO^U- zVVP{iU=5QIUwe@2LEsGo(COLPfd@oPLvstzHNJCRuarR>7AxrVAgLq3{NzAEsMJF! zX?apl95tYsW7!;#;Gg2g95KYRMW+sT6fyjT_Wzy0|4t5n2kNooB09cy+|Xu!c*(?l zy48wS;b{TgmP~8!`^e6K>=?+|2}?_k)MM=xd%kPye+iQI*Vi7KHW>-lt1}(;gv1or zP^}dv?D@{l;0hPSTSsO^7s?}JmyE&H$}UX|v5-%@j%y2%9magw1$6HSAR(sMN~V-} z&06XYL%=$UG*fAjBsg8Oz1&CplT;+F6>U*FL_AdZ-wpil=J2;dA1XKOOP4fpxMem* zq62-b!J}89+}n7PdKa_z<~B-UIAfe>gThhyHrqf($c6~0)Swgp==gGCQMJ5Ao}PC5RkiXzT>9U= z!2ezje{42GqCNFM%LAn%subQ6BRGlDt9(!!r>0lgE39GEyZpdh&DYC5Q-CF|I+@)P z4*<8h&(k;t^4M5ri(A~uT+9mQMcwmGj!X=x9@Pw5UK{4hW0FAeg*NT*>bb{DTx3AR zECkijW=$4o{{rtTpb>!|LNTJ66xSr%f*ojltObn_#Z2Uj@x4I*8xH)3bNFLeIff?- z?9xM4TfNAz7EG+cWNxTpdtvPQyKlVu`a3r!)~mZtKJ~%}umc`F++0Rb)#Zzqu8+*K zjWa8(A3JlnwRHB{H-G8#pZ)1C{N~$ZyPaoV{EqMa*#G?Eh*EldG5k z$IqNQdt!iP=JO+0-+t{|-+Jw>EB9tME1FmqespL6MHIE2xx;M^9_l)DK$|5@0&UW~YBzo`KKk-&c>hd-M&`xr*dCKh${9y)UL=um%WbLH;Z!p!8P4tHgS z5M{fKrQFQwrx39DjnbOdu71M34)wIjK{HOE(8%=ietq|`b5FkKiF3!gYS}>G`lSnm z+s&>KmPHs@cN-pn`H8!?Zrr>xHn+A<{1vA}ojP`?qoHh@Mg2bUhm8SxdKLPUmhjxX zJH{RkWjZXTu|dbtqQPlTA~cM~7WOJ;X1|?)H8v*Jku$`IEPKY^~@zT z&F$U2JzX75HRVJKu`XnDr?jH>;oARsH1HqI;g9y_!&BFmwY4_vV+DscNK?#==7Tv> zRiQgX_qBI+cXzX_h9xxXoa!R$nZ+K&;-jF&L926|?8+7n+ofJpjxE=sgO~OcA_!uN z3zM!$xYzayyGTq-OwF>Bw-;xzI?G4?0Ij?QaxM4)K@gIj9-0?s*3XY2W&?R(=|Q7? z;{K1r`nV$j9nDop7ePV|x+W^0$zpb!`~{UB~s zhw#qN>BJwc;P>+TCL~0pwJKj0hLUwql(uizsbCAvU4nen#u5|u2V-%F+{59Bz@t>B zgQj8=0Ix~I>ccq@`kbHtjspT}&Gl(ETbP5XQzQXW3Z$CI7l4K#br7xdA&dVS5B$e- z_@_y7>0O}-sz;!4N356lM{mm}_DPmzB|YEVm1fR2eYJXz(uM-&{zkfpfPr;2(UbYD zSy|_f<^N%$ljfW<-lUCEhSKcUBy)gEn!U9Vz@1E)OW(F5yj|z8By>8Te1;@b|bWCd&%c z3<&ZtBR8%pGJmV8{qU(rA3b}t zqjK@qE5H0RpZ?TOeevb%i}lB!|IYvC2Y=xEKJxUDrtRt5moE@>vsTeQ^yqW%d;jxK z9BJOT{f(dh@lX8dkN)`QzIt=B^YM>-?BhT51K;)1sn(szYj_$i-dim5F`@5&?-NJc z%NFlmc=hG4edDdGV@vzBZCw#hv@$b#PpiYXE1G+UPMl`Hs*ZZjf+P-vFp#a%y0+fK zM~*6*Xm@Gy?zPL8Ic7$S7MPm!BZ_$^tr2Acu;t;J|Ccr83&W4Ju zg^7Cv?F>&X?o>1?e!j74XITfp-W{G~X*K~}Z9RiWPnbee} zJi|UAyE!tmx?j`WJ#gqyZ+q?j%B0raynFTD+-`l}>8GB5>BZ+BJ<^Kh zhzIG)?a7tWhOWWmCy$HjD#2%Oz47L|7!6zH1P+}zedgp~SA%zR8y=fk-K}jubnNsQ zoh)0k%Mn61IJ9Az#xWS%ZJ+d4JyV;*?V~J%h3(H#sfiw}| z!r_EkU_LiJQH=dQ`%MM?e>(7=&fz~c%9dR#+c?`=u<;tIiTfc4gzkZ3h+rUsw1~Vy zGt{bY9By9VO+V6(O48yd##o`hfRClAgM~N!J)O;U6-3vd)ZtJlts%9)zo)ICY!lhK zb^Yd@(U}$Y7t^8v{7UMKEE<=dhZj$WMrtQ9TMQgBsa6ntq}d>5qHF^&*Q2>8MshtF z($j%iCM{Qx&p?~m?#WM#me1;N9!NZEr1)#H3O54EU+fm9h%$D(B0ebNRWZI7;6D@i z&*bnYxMzj^+2Zh3JL~0^=crt?c=puT#PVbFJuL`oB`yzxkbND9u_|G@pb?dypfENK z(~b%(B3q$*akNuMheEIL6-i`}1LkTfYSCYel920w&?9ddrTJQ|HAe~ruOI1}6-;%w#-!HTYvn)Nv!fYG`I5RQ6<$~!OxJts`IsHn zaXzti0Q>wY;?o~X-|07|Sn zBaT$tddMf};{#-iFukiqt6i-%`-`Jj-+uL*ub#g?v02-5^2rxClm3yRb}bXQ#ZzZ) ztGZ+84C{c8bW|+deC^kM?z2Dr`CobE=5qZ|F^>D$Zz>r7=L7%w9R6A*@x9;izQ+mt zpS*eL0)hXVwS8xw`{0Ma?YUF!+jqY4vp?~P|M8-4kV_Tdjc|LCEH&GE~xeeE~C{LQy-&g?Yw96f#J)RC^*9X64@ z@a~m6Q=8SDM<0FaJx`uJ(owxNKYHiJ&D*1M8)c2%LnqIkJ$bmRevg2n%NH(Oy*;78 z|K^q!!hi@3*TzDqo|UMc14oXXIB|5ax3#WpV~MB}hljA;PXnv|%9*a78Xq0y96+xI zY-sN}G<5XH;Xcl(-&vWPw3frpru7^qc=YJuercuC!?%c1$#_+a?*;fT1pW&-{8>=1 z5dFa;M+UkY(7$h9Jpb1DE5nPW?Z@Bq{%`;G4?X`#f8EC9jd$OC^PL;xE2YhS$IhHR zF$jn=x8Hpox6QjagmgB{qfb75mZ+}1W#;$kZ|h~veJ9T04m#RXzq2rM^}^fdFWwki zVkf8G!6Sox_zc!($8O)ad3SVrWv`~ShxH%FkM?7P#0JB&OY1wF=GfZSuC1WZG#52H zJ-w9Zp&ju+-go`qWVtFA$YfjJRjNsQ~}Qz<)7^{}jhz&adrNVXYm;OU4@em6@@- zjG1iQyuyKyOxd@vf>wIo&Nfd9$9B}SXOm8bQ7Ar(!IxGzkh97=_^@5kw|hPD5^b&4@z~=oPSLC z%NL;1Tg+H%GbuC#_K7B-huLYzs1QWTY_oSA#yn845}OF&BZ}>$wm2BJ9q&4*ZvM_@jquX4ey<3bPXjQS6Dd^PI1gIsQwH^Nc^sGd*W+oz9c5R{f;$ zYgH}TG$)Hnh{_0Inb!wd4`z*ZhZ|IiPATON?N4zBT1pgpX7csv$Ox&5iYpxGYEj z8^;JNmS@10nUr+H6chPU-3=2RHaZuf7!ll&Ro|{0aUOz_A209F#0|6cb}~pn zv_M~v2Gduy@;&etq7ovc?7QF(pqlBI7;5CVpizy4L6Jw0@o?d~Y!s>m2v67~;f_eI zLbZ`iq`rt=C^x{(| zx~n&5hi~F<7+u(@?HoFJhQ$L_%XeP?($9Y8)1SrNuvC8xcf-ej@MFK_*<(%HQ|PZ3 zP*lrX2U+R;>{I84+REl{eCt2YdQRHjV^50b{%`#f^c_3*=(!X9EtMP7cz3Q`zdbU$R<2eIuzEyv?_Rrj>FV9d<^9Hiv(LQn;tNlo zJJhtlIDY5))f+e#Dw=x+2`KAns@Rylm+`6?-wW_x5B%42_+NeJ&9^RGyUPlCyk>*A zOE{3Fd>fN_Vv5a|0sQdslP8Z3bT#6G8M|}))}7(;`L$gw$ZbPQBnrekeQ|co@=kTD z{4K|i^s~#>7W=kB!5cJn^>j1Y&svd%snL7)?u|@olPTtHy4e*>hWpGUJO6I!3`tHM zVY!d@_94WGSaPik(Tu%L@+jHD#%G^k&KF(YscdNXmIK|b4Xhwx*C4j@-DV$x-T{`e zbT)Cs%jm6ZSFYV;YXH`Nv~^+?H0x*xG*4Rv_BRmOSkxN;6yU!R_;2L!R}_xt*Tfc< zfN1w8hfirnSNri|k2xeuv*kJ)kR1XYh09PLxMVc4}FVgdFa$u(%B{qJ%X8DX$I2n5Di80ph+l_2vrST&EkU2mlQ>dlC*qjl}?3% zCYI6ltc1w+P_&K`u`EO=LVs+|X=SPGJcX^x{FBN@70fnBqe0apGrFd=Mw3^yLB)1R z#;&4!FTj5*@ZZYeFWpY?W%im7ked~K-`+Lsvdj>))hv4fb>D8EQV!~3mPKdnXc15B zuBTlgiPZD{k#gT^!d^Q&hd)q<@+vS;v$h;DZHZf2V)|xtuT-bHdGCk{mU1e}SH52B zh_q0;Xfh;70xE@-NlFB{^h#hC#?tdGt6?t~Q^}2UhPE23ox?;FiK4v<@ZS#nw{!UW z$I~M-D=fO7>?4ME?bl_-+6J?c;0QkVX7ima>dy+XlE5S^V)+d*y9C%))}q_7=O6JU zvv)7P{>^W^^7f6H-Ik+Iy!4UZ`t9HL^r@bjjhVYwFS4iS>{dCgT8h1u#O@BQu{_@N*A{_lA2vF0rn5}$wf+UQDo+mT0~eetE|9vy00zw_!Z ze)`8g@nfI*;wyJ|x*mQ1cYo|--}9lTh8nh}Ze6-?<<87bUEisvo`3$?$B%VYua94S z>(y_)^5*4xc!ZjnGk&<@e|7@@ogDtn#Q02)L^M?mhveb6IgSEHz|8E_G-|t|ewZ2_ zI@H%*SF$>D@5bdzS8faw-&4iDJZS8!0G^qgh?D;s6mWCm)ajFK3{)>YoQ<6BaReiN z7e$oSlx%vnFg_ZszaVOu4Wb6vt+kW28LM-+bjBui;74=!p`*u!4s|zIb1dQTotrmr zjWBIr)!e}mfZffN+l%A3E}lPs@z%t0S^Kdko`3(hz3-W`{dJp25qlQho8QLAFm&v= z!iJEnEAPDh&c*9@Cs*0uXyC}nQzs91H?f!P^w=odhnCc~7j5U~hZXey-N1i0hyTE_ z)2B}iu?_F`;@F)V*RI{bY}!_YPIq^EQ#FzLvlAm@le2_V)v(FeAgB8EptUpaKhI+P zRaR$f`xxecIfX+agQ19ejxyii(>?IrXo0Yfab$~54)ybzZSOAR9iCW_@8t$Mp>2LjcGWO;a@y4D10g?TYw z1^s_N@ZZnjACsm5m1b>u=u6|%zmP{8k+I@nCJ0cGm4E5}Xp9O%k(uyN;a^hUV%?ct@7`kO zp@M+Ze+xTHRTCm*;s;8N}`NC*?+K@10A%2 z7@Lj}zy?}~l3Wc!R63*bYGzngn`x4$7*83IQJLl28C>lnb99l41dugv({{P~l%1_?PDJ2QSU(>yn8s%=IXM!I9(?K`TFwp^X%> zL?VN{%E?~9yu!|sJ4bFLG6Rk6aYX}0dG)^Nd;(neIZswknws*hh0$y8y!NeE2=!mB z>N)-F2R{1IkG${6W9=0yQ+KXu;&!8=ot=ixp6qYf8hiK4KmVCeefnp9<&Ba3o+m#1 zeLwg^-~WHT?`(JZ(#Z8otTxbAMelj(gCBVBBfVwguYd6;fAmLw54yqU}|25W)Be6UUt7z;S?G{f7_ZZD`>f>P6;*N3{JAVPI&d{WM~CdE(ZE zH{W>k;;pI8x`9Vt`0z(R`oZ^}?XFxIVW#_Sj)~u`?HDBf=V)(J$;#N3Hy$ed%LD)N z9RA;Ynf6X?N2ixI%j(;D`v(U4aUh`Hvq+i6 z1|0IoB6BSruiRbH@sYRhj!w;U9w1>VI!umr1qvjUy1-dsoKe@-rX%VeD*Um-_582M z;jgn52%}@xoT+!6!lo&9`$?FVL)pgv5=xZxH$4KZ=gB>Yj)2HnI6}29N5jkB%qfgcd!&io42w$#OFz{*@Fa$ z!{k`#zo7FQIShhff-MU;eWFQzs92w}igmzvq6uxCV;w<)oKz@FRcF{~iHH^ztYguj z4m@Q0e{x!i@UP6_kA5zIaEio1eZaupdx{AO#hIDdaOzkTcvds6%i3o>H%NOU25$u> z$Bq~J+pA*@TSfzcA`xigumHvQWFq6qT>`TdJL2FI$${Jqn#Pws8jAuXRZ``dUAFT{ zhJ;9xSK3@?D+)(Jh-?Z-J~2-qik2vcf@D@YKUyX-tUv|HYD{mJJzV?$;I$S0RXO~n z>oNJye7ZuW#3}qNDGbLkQzU?g+&R+sP`P)uvx(lo*E8-o3_t^W%f{mY9PHLfz^9DG zSbD=iq0QXDNZSkCmj%F7lpZ!Y`aTsUG?9f+7iE!RGvv_JRK6tyL6Auq^ZPMbt%mxy z;M$NZ$z>#ekTqCY9Qr|4KOZvtkLeWQU!B8We37P4I&6_rFIJg-d=#H_$qqy|lvM%} z4^6QcreZsar;-tDYA)&Z7AM`{;xqpR2`_y1cFi(01djwyemaSn+Qxq;shlvSO<9uj z=(`FkliJDSLpurtq|s1{sxbLD*(eT@sH@mrnZ9$GSci9Sj4hY79rghL&zw8l7C)sp zUkm1cY6Ab79R8IX()R9-FR%k^-%&z6dh2(lE`Q^ffA*(8_r{oMP$>-)a%yFd8k z;f75uCb>F1zt=Q)?wRMGf9A0x?d8iO*UrE8>g(@bC*-K2f!Wy>4in?xuaS{4rf~`D zIm-0>(Sde03tiNqbc;F=piN;Oee4Id$H5Tz0`81VEun4_TZHOo--9Qos~bDC;^Wwn zA{s&KM=9MPjA??s zYqQhi6IutX)88=XdOMn`_t&+&m!;JBWGWk)+c`cvRBO)VyLNkmXuO`2PdxkFvrnEL zXxzi}yMc8uw^h-oV?j7Mc6Xg3nv6sFn!5&$ zuo#E=d;-S^4H_OJVn~O@wY0Q0)>Z6ntSlf0?Ap77riVX)S>tx1c(ln3@#9*eEagQ} zB}6Hp#?H@4k!9tGwwd&f_S)%JQ^uMbcKA6FBrL|x&(S>jyq+Gf@P_jEK?W2sLJ-@D5;Y}#{8 z=YO*|EEs5i9+q8e^Ur!9Y{Kv>-L+aC>&bmsgVteK|JDg|R`oRX$7s&O*%QNH$}GOZ zbO;uT1s|SC*5ipeKU@h*tV3VXA#*w=sG$jA;i#YnygC?ojs>wbq6sKH^X;#ojQ5J> z2naTYCNRj0&)NR%;qw2~2mbXr{54Y^Dzl=xaQ3jmdzQ6UxPBFYsnsBC{if3u)swv6 zww*5=&P1ZzfHSkK6W3a9>O1kuMJ71(`2PQ&9Iw3FC^RgB9Nhu61FLW*ClwKyK zOzTCY<%NPL^^VJ`ofJ8Jks_!MrY=P=Q|PeNqzc-olYTDqO|uGEYqsDVk0O1LI;?gg zF*tH$9Wa0-^HDPtq{@7?U5NV;0yOH;I!azP@Y>UrPc$&nKFnLUuy(qL5xEHFqg+@RFlq1ZPQ%H#<=QU^& z=)lmoZ;=j)*G_|jM+nAqK3cHsYjE6=Z@VQHzhq8G#$?y%l4XMd6Acf`#=`uIR3!nMqCx862zxM82?XefW>jysm1HbJ9k9L>O-@f=3TTRXFH61$h z^z+X@eQvO6clPG_S6+Vk)pu@At(QwLm8!T+?9Rx@#2lxPbsj!>_K`D$D{+4D^f<>& z6PZpl2%F1vc?BbT0g-idVs=Gq8JGjEM)}kMvvVs%m^8L^_YMpevHDjS|I-}!>(sN% z|BG?u12(*mE}X%q!>*omKsIVw;o&~BK-`QpEf#xrboO-njK2~lVTtdb)QW62;;myj zFw^-yLW*#oB`MbXn#pC|FfJf=in@9I*1d_v-I~rLXC8m*smD$qYC$qa@7%hj`23m{ z0?ZEev~s}Q#O*5=E?mBTk9aS3hh0K~i>|n~@=)R568N{| z@aJ$eE!#zXW2Lv3d25GkX79^6QkiLVG;2ar1F*G&#xHk&w-n8uumftpl>CSa|Sgs zVFSK$&>W(~u0kV_Y6akb6iHr@F60}g6EVrLNv4?C8ZO|YgrB2n)T?C+ADiUAhJ=4Z z9{zGR`4D1K9E_*0+px*tZ^JwwGnlp8EvjhdWPPx*Oe{c%X>ZB$Iz(8QMU2=D%JjA3 z7g}VMz6l(=O&S~a7`(NLmJ#U@(up6BVi2aA3BfT+JHg{EJ!D=flRr_qFUrx8Nfv;E z-bdS;9O2OxDF?z~NzZaaQ!ry~VfZ)i z|BVU%#ytF4+{jUeMP=4LWNO!(!xv^UGdHuoSg(>u@5G%1Q<&GAl;I5P!r)~%Q4$S0E|0c z;32~JX>l^IW@JCsxB{B7=N&>@NZ7|H|ODh^V0eA7jN`Wu2pyJKXC?a?vdVR(xwjKS2H}l zN<;uPfm%aEZU-|mW*TzaZjz0O^M?dzVcc0!VT%Tvw?_8@GeUAW zi7iVD!{8kRb=+3?w

q^6+nj(-S9&cLt8!=K3KZv;e*~)OY{x{regP$gs3lWDt)W z0Omc%OMTU{(4=f4h`MN|pX^YtzW(;jp@nk!{i%lz_coQz4O~C}+H2=58`#uqNr*!| zbp?|I0KH7~&Ar*Oj>Bi)^$ap1rlNr>Z_s$Tf3B2t!pDy6>#SLyq$tR%ub;m$IE$@m z|Iwp|_H@=26M%g09^oVfJBTCSwTs-c_@UuP_JHTKQrtRv=kO81B}ljO2uee#r4I_P zG#yCT_Ynq|Igw|`x6`)5zcu0Cnuote_X@o0WoG68S}G{3X=-gHk8ANN3AO@#N;K4A zPeHkhAOKa+GYD6Hs%O;Jy2325XaZ0|Z1F82E+_?FSjBr9wL5|U^_Ud|3WduM56iz5 zSt}aXAZS^7<+DHQ>5(+K5KB%cQ>X>SAb|qGn)e^11^rw0+FA z1UH1je4OmcR^*Hv^Sr}@L8yL)t7V%0C_D~Bb<@@rOfD~a#%=@yfIF(dR;Wz!UlI!? z_`K?UG7M9^0SI6*cEI3e;{@0RB!t^5|9gAFzda9s`H;C;!#^iwPPRU#(<1z>u#-4c z8?IFhUJCo*m1+o(1^F}_z#ToTO)Rkd(njA}P1UbHEOhXy#= za>C`OOr?IZ5W(*=7xQ;Wo`lkS<6)>6QKG<+2qkUWG9>s4A-?a41z?gIo5CfTT{en5 zTi-Uz|J#x9@5sX++~D1+-?fOWlaMXobo6YLOso5sU`PHn@pQ8dV_k?~?7%4WqcK$N z?7&_zQ@>~W|ER|id$rp9%siwuKs%6BKWsuc{GgrFEaaDLbJjPAPW;PuYJT8Ik>R1v zi;l`2N*>WIYl*AI&76BYR!ApWsO%Y&Z|m;+vO0{7vUGi$ql!(aj^o$uJp9&BB~XTZFbSHJof% znz!z;>HXi8@bAjQpTWzm3iD-Pk`sb7EBt@~jDeyTKhhu`u}+oD9e7u|XU6b4q|B%6 zlUQiNN<*%pdAuH74%E5Y%J;wb z@|#x&=1QA;kDNaH$f=`y+N#M0FpP?rA}lq{xE6IZ?O31byZXjU-~QJ3et5BOzM|vM znJ1op^5G*rbtOwA6fpAu?k6S=N~JnNAiZ-JyWi|;X|-hR$rPN(&TrW>#mj8QF5MoA$XXr%#CMO zJ5x~8 zWI;&F)?tWTq`)BRzJ@vq#giJEbW-LkCg2F(iu}2~^glZj{yX#Vw@5eIG;$+{y572) zhU1Z$2TSf`ROZ8yTU(Ed9X@`M@F%1;OFwD=(0rrZH;Gm#vPL0>p-7hHhw3)ouyO|Y z0TdJ3t`?p*h{3t=Zx1AjjOqu`kN1zU`s5i9!UaQmSl^-0+fh-RayQ_NW>raazi>gdMWAlL{>!%ET%L|dk4a6|O*QShb z#aS{aMmy60gbF|}P)tcyn_NaLH%maOJb}7KVI6{q^(N8`C|8>HIU=@z5Cs5;OBzG$ z2tPk864Hn0nyd{OBT4*34hhFVPz)V|{)K!_D-&_+9-Hv*P5Afb;hz(^7=jM;cc#b40yQP5+ZVxGUS0D|X%C`{4LYT0- z+}+hk7nyqQx$GZYKG32UB85CZqwny@V3M*^jvU{QALwgGuj`f)|G24Ly@~%e!~;*> za>pk8cPIRJ=i$#lIzkSdW9}I6eHs@N?Pa4MSV{lw7Y7}4=P{m=`8e70vuk7*vA=?X zlO{kEJ0!Z;=K0J^dq*!FsD$+4V`Q^}%f*45$p6tb1CUGboe!0D<-3iiOIL`8h+8R_ zc(b@Jw?u>BG~2?*Cj9p#{P*PHA4?+}n6zL7Gaz7aM9k&JAkmT8Ad&`AdN8zUB`HMH zW~;;PCD{v-3`ipv5F%!i&8G5;MJx$mp9zH^&1#XdgdlAEY!DjqS?fsw5h^H1g$PDR z6%aP^$2saFK`XcstqPav_VMuXSpG`3a)I=qK0WiBXV|jGCj9p%{P*VJpWJjAqEOzT zzzdXPQHosJI~`^BcH!VP;CmqY(I&o}?OJl!`D@Uvd$h2}L=yCkeh&M_^Z-h(7!%A! z@k!x_A{i4Yri`aMxx7_6KP_BaoLO;6XO_+UY*YN>YdWHvJBNL}Fn{CA_R|0COZe~0 z!=Ev8=gtkB!g|CXG!&J8}~#7P>F@tS24m7cM3?g|^xW=IhNF zu~m;v>wka3e}5kSLB!(q8EcDyg376>4fI{e>UvqoX>~GwvC%VRv5XnPSl(``e8iCk z(_VojnA5>N0WzP`4%|)$|ItsnsP|XAU{vRN?`X|lJhUiAa!sGd>w0gM$4epJ3xRcaUPB1cjv|evULh z`p?E_@Z0FuxSDZqw(Hb?4v~PQmCX=yFdb|arC3w8M3XV68{N)Qh?HoI-qn+B~R4)+S9CIg3x?&(8HlE7iWjNydbkl53IdRgH_%PAY z&e574FdDPx@DB8|YkFiJg$5@`=pfQ*Tkz{9{EsI5kLKZ@2F0}`nvP1^=tV46NNUU8 z*QqVEK-u_Zl7B2bhdI3{+%C9aTsGiLt5HBQIxgh&7L;G87|5zUWX~1He2Mh;L)SL^x zA%mGmt1Bm72jU(?&!riYCN!`Rd%EYE7*_Cz4OmsLB+)CnR~vAQwn$89_cp;0v#rLR z-gkba@r~O!JM0>#dvlSFd(-Az;PqrjzO##;M6*CU$^0>ENpJi(-)R%APN%JUY+C=v z6aL5Z@OOwDsDyotp2KHD8fm_dVNHuFmY#zg1Gq78jx^^)PaD(E@o^euSFT-BQ~EER zlC{Oh30Jp>B(-xRpUdmQ?l#hQ5RRTDcj)NV47^Z||eD$;3@Z~@hlfXux#3*6GaOZlwGq~xq z=$3j4Y4#)Vq%*P`#80-w&-BXv*nMLYh+C)Y+wPGbG``Z5{?Z&5hz`+-AGwHs(oHu$ z*>c}(!vAE#|71S?4!+}@8!-pQAM*z%+5(I;#4&R5b2`xzJZMTMryp})vornJ!%OG7 zM)!19nr+!<(J@^tbxtSeu8=+s#D6;&?Pj}w_{MpbZj{~5)3fQ9yV6$te-r+v68@+1 z@OM4MsANN%eu$+RIAsHuhR2Tni@w9Wo~P8*9qc;W1E{l+WBbHx@FEnE4^Cj3t){7>iMAHV;` zB#0r35lZ9Yh^8@2pQItqmX%04@ac;uWT3~Or=Pt*K$Kp=2@AUApo$C9KLhWb_8f4W zoY3Al!wbi0Jej@xAiJYKbMcKQ_Cs$R&7S5r+$x*0dHwuw%N?8We>ma)a321S+{QTM zhSJ6~rnGE)nl<`iM#OAkh~paBn5Lg>r!}sVyJ%{2s-+JEiXORc0VI8+gP&zEdR+jE zv!XG5AF$^>h#Ps~=<4E*i^oaPn)T-UxI{cd);rf}3;w?e|1$~yGkN%@p>>S}Rp0E1sPKVMFW%A!(XrNwZ&` zQ)aNGe&B8ch#IR?(&NFQ|7TuqsUJ73|Fa4Ivw8TF-))I{EY#>G(H9wA7iPwW2RSIe zM^Z4VD4P2z(t24OI&wd)6H!5Cutu}~Qov<)a%^PC=zppKh1)n~J|f{x1O%FMi*$lf zkAp1SQJ>9719SSS!omGRM`E&a=#U?=x|DkG46+gv)`cqy@Bi3OT<-KHpJya^jl{30 z{`ky2fe11^S5j~|zTh4aluW4i%AzU3tT?Who88fDt`gk3w7v4bKAP}$xh#iy&GJW)%c^aq%O+dfNT8#@ac%S-{#0i+|rPM5S6z(Ch z3pp!@ARy-#X&uZ*M&>XchN2%-A0mMqw_SdwA^s8^fjC5BN!gqG}9hF z!S1VCdcp$FR;}JwYfaeYY4rn4JF)ZP)6L&75*pR*DeUd^*7m5n7UV2)$I?LvVw?^Ram34u6WP zWUbLVy2|{$Qp_&iBBTp4wd2hAP(RfvNc^-`THDgSd;fv`dwSaIE2&C1YL1~H0z%0~ zRM$Xe+Ul}`#i^0|x2|8idV@T)i)OFdclhYh!~1vU?!OiP-?aZfnecxy5C3-RC|bvF zm;l;^wKB^1wY5R}3+6}eUOD%}mtTI3BwQrs+IjfY*~cG!_}HHInxcjAfd_Z*kyUx6 zlu+v4y}NgHG*+xpck#ljFMa>TAHH>cV792f>%fVJ&zwHKudBXvX@YVQcd6UAQc~OA zOUmY>2X}LsxnTIOzj@*M1A?-V6$msY?Gy=vr^(SgIzF>VDfrf&JppWMUHKXXDjry< zeq?5;u%gzw&;|-i`)}R6Wu5ue(%R;(-TMyg+fDI!ek~-C!J$zi$*E^f&1v!+S5Z`i zTmTOcbp}Q#YEf9e6>-n~PMh$5D&hZB9{%z2R#Gwxs3|*nLzh;N^0l?SwYjmnLWy8% zj5J(9r+Dk?94_;kB~R2id7`MzvZIdLEKD0X7MJ0bZYpR?@NfcbHsoW%R56}V(Sma``=6uys{w$$_;V_^Z3?~UfL_9nu3wdDVGF{ zOPZ6^3{z1*Py$M{GI=7*0cX}>UuC@dic522wH5#0g#XhC|EKftFRL^!5;PlXOy+Lm zq#a_gGdLR-mCFx=G{=CMX_@5kH8qt~^jKa9o*m)zka-h`(%Zbu8)VFAa*$R*aly!tT#zZiCSmJwYv=V5XRjn){ z6+mMXrGe^eE6Mg46rY;%)Q5p-nglM&k8+2J2_yfJ3AjZ)GK4YDTM_n+-)R&6?@IW; zD-VB!F4iVO8d-j=;Gzf!0k^1XAmRrmOs!Qv5SZIv3Cbc`F&Ew`7&_$#W_IR-5ZSdlM0_H*A?`Ik2VHt3x2Z+|92<+-<^klaBSIk z5d7fY@_QpNOXTZrmH7-`mItSEw1NT3@1=P`*Ja-jwczn4iGu8l<9jta`{v+M!Wgmw?qvdr;Nd4;itdIY^27ziljqva3HT21oIt$4FQN2I z{wnyR@=OXBnMAM!fzN)WP58ej;s2gI{IikAE6=YCE*~^rkP`3rLe7Xx8t~KftVw)OFz_NtuHYv{2;d4qAsYQ$0Mn7X zX?FGG=N*l4nRxc-9+<~-Ww%S0^)a{bu?he8Cj8%OC?+ms=#52Y9 z6(hX{M>IPBJp9#{GUnqKa+=l4l~WJ*}(pYKnXe-M@YF*6jzwGpiL1-FuIoIC=c&zV4>V_1Q7%vENqkS}Cb&p!~bFBv+>f zZeKq4`s;6AyhZZn`ksR)A9;-Op9i|h6-8EYpJ4jaD z*4fqB$z`ZSu`);fm|;rVO`_kF*^+WFB?X?Ep5BVM=YFS6_`fgV|Gqr@(Va(nr3M7# z_IB0er2n3uCi4@yv(^f!-$yAZh~L`sEJ>a*3|Yh_az9%fhMd7<4T|CsB-)}rPg_S9 z(}0pMs|!=(!z6{qPM1;%Q~seKOh~Xt74~EZu5BQl5VXBIYJkAXlH!U5b~6Bbt5H*b z#$pF3h|`9U8?Y_*|0ew3pYVTw9{$+VFveusSbl%P;{n1jTXiiljkl=42O`XOOUVt8fe@-+8+i8<+aX|$9C)E_esImBlcEa!s_NH`E2p>zt4 z3#qyYz>;&U#=@dzikhC8nL)oFivQsFQ6wDdj}U>?P$43WhNvV<8tFHr(xK}`>r%3zmJww_6x)(!Kc2FD3anIuP8(EB# zIKZ|L$-^Y8TlUz5{|6HOAIQVsjnehu5^?qCw#zW{gpee)l5>UdC7Z@ zXW03K&Y}@7TgKc!HsxUFgamnlJ)w_EAP^M9m;_OV9 zPF>R-Q(RcOPOd$>j`JuzxYv8<0lo2-JvQP0T*CjkJp98QThxV3Ok*@$tr>RlGatn# z8T53GRpeRm0b}mpfF!=gxW@JD;l=EjJIh-||2QW;N}V`2q2&GCbI>7~@g>wqFpk(^ z_$V!4&I$3)ld}G7QZXyj7R9I0{!V|NF^=>&SUb1yu?hbVCHy~>hd)c0Ej@4)3(8TnMY2aIIt6Obe;^;gTs?^ ztE8B2@7dYY(Na^gI*p^^<%<`UE@zfYsvFENY~tv(xk;VYCg!#<{G03leK_I&;XM3T z6uEnL@7cGvx4XTu%KX`wNAHq(ImA4KB?vgyc5HyuZA6wUveaisHv^1IZ6@fAj#4*v zajm$#O3sc|y=lQn6E%kbf>fU*6TSS9O{^T7QTv=d7-13FPdz{=B*KOi zzD*(N^Q&1xC`?Nz6Yvjizy!Fx@_&CM;s235{FSf6vMz{>usQJn4zo{Si!n}dSuu?V7ySb8t<-OW1sI;ZuqZ5crDdr?j6QbikW%d+_UB}rLl_SeW0;hbIg^bsiE2qq z&&+w*ZV{h^K#~b@Yz-L$3}&J&A>G_BG(Tk`8B{C_mz|D$>MyLL8Ea@@0Vamf6H!OXNTe&Sd< z^fdCv-j1&W8Li^Y2XPsjogiTjrjggWz}TD)rcU&asgO0N>&Fwtgo<0xo$JRf)8o+U zpE%+%{o)izbASuSA6o6ge;nLf@Uv%*EAojtudRD*!vEt5|BvV4FOIH74#p~5Sq>Hl z!)bQbI2cFzxihdgM1MB`kC36cggZveiL^C1@b=e_gsnfk3FsU<3F=1Gu=b9tFj3wC zD&fK1#nk^i1TxJr-zOIL+))Xun4^Nv^($Ad-5Ho#-O;l9=;^bMJ#zB!uBM8WiT>Ny zu3fwJU}SEsqQ0$r=T1uwP4{0v_saLa_u{LU?$4Ao?>+hCGtZ{WZ_Tfp@c$hN|KE{^ z|NGzl=&@Z5#dFBXSFhjd8(S=_Y3|y!r?;oIu9V_F*WY^e2S0fE^$WL#7s{G;9ym@R z-(&l`n=01lkhX_LCKvG0ZRw;MZ&yogDF)uV*RNc?yjzm z7TvfB;GDqm&(NL{>iQtz5rekA$o2a|ew>)IY?Rhwi$7b?RCl$x#dR#yZJpg+9nE@( zBW>b4K8S1Z_KN@bM8f|QdH5H=#*x>G3YL-aC#d&J86V2+P_VbHy`!zUp@ym@vqKFVTjn4@NX&4Gyk}o265X1$INC+xe@g=Bb6>w24J!w~p zmya)+U?W(UFbE?qghAMPLlRmAO*Wp`UEI*N=E_gM)u#3T$%OwW^YCX7%eB^qi*-~= z4##U`sqpBn*b#lYQ$rIc|)c}hd0nhM1 zCHm-(3p#>gauv7mtF~){#1Ina=#GCgR>%-5tF0Tjt?>U;!v9lw_$xl^m5s2Ci!O_n zV7{8D|3wtNF4Ov6BeN49iraTs<3l5pIr`cf(E}lzTkbnWZ$@mTlZrPyiX)%{SB(9- z0qD6~!W2=TWC)&8r3GfgV#|C$;s}p~pd7&? z(c5vAz&;)^L)msIrE`LZr?dTIZiL{F{7Svq>h`Mt{pp1Nr}OX+v7ePAW)4zr1xdLB z4ad-rVzq%rTAizuik9B{u8s2qE+$4y6|UpT6dr&Rptw9ey{_aBpl z?M&qnzD41rp*L5&?|HfKh`^@iiG$0;gy14JD`SMrnf)%=bnw@R`w_HWVFW@&@!I@& z|Lv=nE?&7AlWmKB+4TPZv4sDR<>B8qzEYV4r?aOKoXVEQ?%%j_`ReWd$>p+!_MLn7 z>};(rn7V)Qm2Z9Rg>Sv|_PyDPu47L;`{9p#=$S_kcU7&7-Mez(?aMa@=SrG(9XZ$UU}&UuU~#J zSJrmm^y5!I{pj)Drjpr#>*rs8<+XE{?+#O=mfE5_yW1Kn3l}Db?%#>pqO)ri4eh=A z4jn#paBn2~z|=D}K7s=%0)=F?4EsTGA&sL$0|SFw6#DqJHsSx7g#Tyq@YkIaS&9(8 z4vegO_w4E-!wR967SSCbq_UWrtX)ytcWri*2->UHZr;ZeI6`js?A_JXw4-1a58kWS z@AM;rx9&cC^7N_W`@8B&7Dn&iyn6ZSjr${0#ECYxcXmXUmdSzJS1(?;c>VswT21GH zQ;$CJ=&8d!4W*Rly?5u%{lSTaf=V6*X%DO5{Mdt=moHwpeEr_&VsTCDu6+j&?CEZ) zDO#Eu8Nv^BW~HPCX_8vLZI%MI5J+MNCn&9}%?8Q5j&iN|Ygd*O5Ra!EKvZdE@*b=xT3?!-8XqMo&jeY83astg zU@n;uE2l^k0iVwZr}o<{ZZMhdQl1Y4mJ|by4VNguX~g&vn5*_)C_TST`2N8>c})a! z;BA8eQzD8DkXs-H#1qvtY+?8}+y8$&;s4`#`0Ms<EX%UPa zlKa#=yF@(+lzMtPTj~wdo*Eq<8lh14T4_~%GtT3LV;4~+df@(@JNNpArxwG@zpIA? zP&LHgM=;!(JE$z^WaljzNM!_COF!QHBb3h>hXpkH#RRP(zo)stkpA$1QYw`TzVx z!v81o@K=+Pg69%7gFwmHSlcR0$`s1502)-sAqh{5Ub3#BCjFMMh4_X6P$rfmiF_91 zQN6p;M2K}+f3?W`g;*j(yhAkO;)#TEBbj0*Z72xPjSKS6ZzYe=NhlsG*!FlbblFKR zwBI|AoH0$QCYKDJ$+M|R-qHcUoA&?TmGJ*vdH5S!ub*@%+%V?`ng+~<|At#=R!%uf z2cwV<7!IOIoI-~aiT8B(7vpfZ<^zQWAQt3=zEg$erYxZ};iO0sLVVza3oB6q)agZ& zFPLPY@EXnsFA`AOAoR=z{@5+leqPrJ;?&_wTqmw%cUoxUf1fRm?PdS@-3kBSorix2 zPBEsAYm84+b1~vCEJMQN8uMQqG1&a%ij2iX6==p(nT^R5(bpmSA&e=HdC34M5LZg` zZUJG!;GG%5ZjxeA+*X(mYK3BNa#P7}E`I#w4@cY~rz>(FQ=7@ZQ1M30VcgD*2Zdwo zU$NoyOFJnOeaWu81^?T${(n!x|M%qK@3LW)ngA|h_RETvXW;YrOkTY`II~{UzURn8 zr%sg8*92B!mv2`RgOaBOz9 zyuN+cfkTJ(?`p3rS)LfYfA{v?z7evGR@ODOv^LgOkT`UNOg^`6Cn2z*W9MF^(axso zVj>U64BlKWEU#`L(F`WMVx+x+yLWEieK3RxQvcFK5HSz()YA(qMHSc$Nhs9XSZ5Xy zXTUguf~-HXf?yEPh&45_F<4vhn@#xtzJ&kp%fnxU(eH=3C5$b4fpW0Ro8nP<&p55% z*JM>$UWo~kS$IeXiJgdaK}K>a?iq!d5(aAa!4(u^%*s-dxyS;diGiyk2VyM5$bbW& zKACeQ4o$wp^?3gkufzVyEi^t&*e7m>#*mpSaAgtaKl9UI{VS`isl$DfC5&&O!DV3< z)If>hA!Ut3(u?kqPST*W+Pa1?QYuk;4v7b`H*G=KH-4o}`2YTd|L@PkKTLX3FJ9;P zMdD!T0>a~3xxA^hy}jKuTP5pD^9cB4=)o0RM@{8&{K6wu7iM5g^@wkE*o+Y->lNTo zy9|$*QY_`(YGE@Vc6)Mku)lv`aLmNam9@xq%}vO4g{$QAAvuo$-D(4zOVtt5t+5}6 z?r>2y*-WSd*0oHLv&LkVm?AMi5&s*0zq7NN15N!?1Q)^b2OrT=2-yD7dT7>9El@Z% zqVZT-*chxW_{}E#|3Je359HyG#nsGCkUjaEhay}?nDi88kLho<}pSSQDL@QBwI>!-8d}IYR{s!y>84I!>#LOSFBj~?!Vtk# z@G)GVqP@lKTepBP;A(z%oge687cN}AH@;fiedyF9j~w4!yZqp_-~5>`ec_8=dH(eW1zo2<`01bcT|fTG zXHIk!k6wH2d*Axb4=)WY)$M-xJs`~^Pi{ub!oHJ!0vF50!QTmzCfKVh& z4&7btP}7y^Aya?exWgma)hx71%FfcY>xT9s~fg?u` z?QXALC&2ElH{N*r`arViJ#yy6{!Xy!yLSGKH_uH58)>9ulH&IE}y*OZdr zf8fCb70ZQy*uATFr!W>R<3c#lKS1E$3bF+1Z1u{?7}Pg3KDSnEnh~7PU>S>KID|G} zpa}mqguwdk<^S_X68?WA4}TJ(;>w2_pKLEh1m0miDOw}B?g(Q#WHpFNqV#&u`RlG} z>>k?p1!x-PmWb4Wx}lPfZ0qECG2J69tw!fupE@eEe7K!=nTg* zUoa*hH{s_Li69~mp)o0ushjtMetSgj*pmd3P<@OP$_xv^9>@Zx&PbmzLRpjw!tey# zYm4&=0O^{(%-A(7RxmU;I5Ix7%p_{<>gnB9>;I1?{Qqbk{=0fQEUB?LO>&K`!p*m*hlPld2Q|wmA)iR(1?BkK>f>2iOk!OuMMIQUnO`Bp zW^KLEbvw!moFGbV%j*~bqiV#CQkNpwm@U#o{0eQlW}4Xt*S+u+gQ=UT2cjN+AfgP; zp-ohI=K(E%8t_&2Dd!082|0Drz#4*-+Rj;6GoT8I&umbQMo-L8x`(G0l$<|_s%s4hgfooOeAvKI zTr+TOi%uEdfn>}RnZ6b{RrVAZLH5`n_zH2!@W54Eu(?^o|LIn?MRO7>RL_Yp8D%sdNM7g1l@sCjh57(^& z>ed>Nh1u2*(joQ%zb%TCgx}+iQN4o<48!-XU%qhZ+P$%*a?;43e&p<#hsXw4yfE5# z^ZNChP`|?JmYzL(d%GG+XCGX8`L~|`jTgT2=IxpCu47L=`{5sX?mcG@wUx~e-MM<{ z%B_Lvf*KRclUKg2bn3<{_?dn2%Rm2(bAyHLC*J$fPks86&pm#qxnT6>`PW{3^J+hS zWBX4%{`6C4kM68l9l7zwi{JXKZ@=`$)&A+V%7%7?0MZp!Y%l!(WWxVX=HU;eQ)Q-~ zMMHCY7p`6qJt~4hm7#=0X0T+*43FOhIpC4D%*9Pv7Bt3a-q5F_#wAI3c}@ik5g^^- z$WVVj6{OI%``R^}0|yO@_~;&vW_U+KYiCb)c$L9CpbcmW7uUN8>yL(sn7GD0F<^MmG@c&bJ_>&}M zX=3oswJUh=^^MKreb?05+El*-3??w8jZQ7BQ-z^x7ZG0MO({h;PwqY}MP$;nBoHJ4 z&wrAICka5W9EFI88o~FU?S$7g@%}X&M1RNzaT6OuhETUpFaX*crXZ6G?@X1&7@Cy$ z0UWK4X((s#+{2p>l1VDhm;?9kV^C7FT&b$KsXqMt%pq?+afA(0J75}sdm;ivm4e6$ zTCDFc3Ig&~A{X$u;S9RH>OcMIg#Vw;!yivQv-6`rH^c`8-$r_du&a=~UAQ9!MC=8= zOnuiA3WiYU_&3(oAnmO#Ok<@Rf&QCeUt~ktBTkHc19iXgcU?P?+1rpKmuDhZ55Z$# z>l2tW#(iTDp>qUikwM5On|#FFA#fHPoth;JOiev?Kk!y7A;0L@5D{pa7^p{A%Wn~h zCJg#Q>O`)<=7S#?qG%KfGs0!wK%sDLD~J3gmbk6f|DQ?t|Cv1ejnzwGQdH|=*)k8X zmS`C>UWeT~=LZC#PN7*2Agzj5p>_9-FM;P@P_dwIvIup%2nNV#5;O&|;NB7Sl?iT& z9?quVW2t*41%xM&G%;OC(g9odO59a>KWGN}-x3HvQGCJd;C2yTykW11?q)YgcahV? zV+JFXB5tqu|DR3x|JgkJ(*R^3h!}&+r~sFi0C$A7LM3!1LPaY+2uB*IyLuVrL|^Y( zQ^S%JjzC%nLf}f0MJAg?VxSZqs6md4XMRJG`UjJYk)y_mDaz4V*Fw+n*!CQn$NLr(bxw2$=YVh`zx8HjEDlX*Z#5tTf``Du=5ADR^ z9N+S5*KhZ2tM&iq68?WK5C4hfvigo)yQ#TaHs5#Y(77t_1n|sUB{n#?qfgt zBhQ>Y*jhR>aDxe*AB*acqw?zg`8>eZ3;rhRAL^MU7{ed?i}s+n6qeBtL{>c8;yHy^AuAA0QlAO7&O zPaf~CT0&F&*4vlwj4YNl^&UEY@*z~hRcjM{*Dt(v{_>sSg_8RAoxQ!CO_hbSV-N1! zymg0If~CST@{hH5bm-XuPemJu)i?^l65L%|hP?6M7IMYiew3GF4MPf1PZ>T1I0cad zuBCeq`fJ=!$R^i+dt2fE=M(;aJ`ewESFT*YJA?(MxtkntJ6l!BKe&1I%C*~lV^HVr zeMe6mKfJrGa(U$Tg*RS%?d@A5D>dCm9(nTV$4~9YpR4c6o3Fk4#--aMOBKyK_a8ZW zu(zdRW$ey{*Is_*^$WMh*6Ma1JNwkTo_yqRSIyeQ{p%MmUZP^~s&;|>`+7U-i|0r0 zUc2ztTNiKiF%cUe>IV<(Cb#?=+5hnF=^tM#u5If*c;v{z-5qsS47*0`$hG@pR&d+3 zci-Ob=BmP3R`{jM*Y1uils0tkIdJ&Uo=8qVO3|@<1cR)W)Z(PHYgcz`ExW<+-5b{^ z0XMN!QiDFTyQ6Vi;r|yB{(m74|Ei+J3CgP7y+4RtRnT6M=NiS_NFkgLUpN@4X7LcN0w+(OYjN*sW-U*VhD97-ee zH}8&=lFZN%0{V;?P>9ei1i>U;5~&UqIj4&&@HHXMp|zV{;2$ zMi_bZ-*a|Qdm0-80s4e@K-8B>*M@Ls20+A)9bp^NeTQV=5LIhBM9qNY>!YCnVi6h1 z;4F!7m|wuEbm$_(7a=@^C8gVH{r{ze|6j_(AIc16f?C1wa;zSP7d|sEF+PJ52K5eh zueLQFe?JWaZ`bJ81Z-D8vf|F0zc|4JVIK#`W8>)Jug4P$0Kvk;te zcL?x8nT8wG1DwE7(LRt1Fk)xmQvpqqy;l`-jI_cYjov8kE#S_LKrHpkI?)I=c1)PZ zJc^kVa=h(YfccMW>qw}(S+-&6hnCGfb^uDv;QU*=qhxs+L&Dp5r(Az9wN~AE@Z{O8 zi+;go{qJ8*`2W>B{3+^t6wbb?`+o2`#KGRZME&nr9=i6!-}<#*{*~vy_jdnE{r;WJM@_1KBt>baXQ{mM^${&Qda$_sA{mh_x?_LHCa z%qQOe@UE))`+J6k38|j*%N!4il^>f{NeY$^SvLQzcsp4-q_W7W2<=Jxe#*Y6CBLr$xR5GIM3vHv6F3O6Cyw!;6fCH((d9{y#uZ9Dfk zRs_{7;_qQ#$JA2Mj>gWNyL)$19eQncL>J0i3Qfh;O~iW;_EWkvdKW*jbC<}%Uej~* z(RaV^nWrA!-%>g^cmrwf(#^rCwHu0o?EyF z5r#$WF9<*FdiNM*Po>>eEA6uJqL|n9YFbeug7r1g2#n1c<2Ua+aRsrGbvX_aZx&)| z!&c=AN1@se->!W@O2B0|VuB(71F9R4J9 z(2kH$WFjKzn_iW0B724)^D)X{Jy#G_pbL5}1=GmdrI?&2pG6LY+9*R9pR~Q|zyHmI z|KH5RAFxBTQh!fy7n=79t1&YRe4R2{k@+!<072|zf&!pMK8yLq1b`&A4p4%UxrBj~ z*Y!|!Z)t!~=odz|xjFm*@C${Q1<(j=revqMJDnr$S7AfljQmp96Ub?>z~F$uE!fro zKqyR4Zl*tS)J6J86HA&7!dmt^g)x&tBt%dogCOxsYLeI~tOdWV-v56q;s3Yt@K-%T z@r;@AA=33+BGt~&Y(Y)O-eV`vJp9n%-Zp626y-JthNqUvz|(_nu(fJ!{MBFh zghBlS$NMcKnw5U2i!L_0So8ViDxh2c}yBKc)TIj%T2ho zfB$Z5NK4~=*DuNd2WE=uyAM2c>eSIaZIz1ziN8Vw$aRbdU58FT`q;xqcGjeb0UHJ&){fSR1+i#`nMT-Iw3KJ5|^~O0h@I9N*hoHs62s&6i(# z`OT|+GsO)(hfbU#3vp*%(fnxNeKgmEbyU>1_w@Gmv^P~1EldnhIp`)8h%gqB*UD5g z`W#FfdzeKcD<16bY}!#czpe29{}TTHUmpJB#K7FWH-OZIFLz4VOcCFi(Fb>K-9pWe zb+CQc?mfFY8YjIptm$WaE=Mp{^SA^v_4c`YjHTeZ_@l9|v&r>aru z0Cz#EX|WYdjDbP;Us;!hDxT!(rc^U{jn6CuqgNU#%T#$GM{COaeT87HWSR0vq#ZX5ioe*Gs!S8@PJkydcIO+sJ zOJpIjxj`S{E}>rz`m(+BzkfI3|9A87*FqB9ILF;|mp5`&&w5qsOB8B?Md6PTiF=jJ zqCT*;6lX<*ZJ5g!)jGmf2oYFl4Bvrtc@ebscz`gwB#;qhjv}8ZQ}xPWcSwF7%tBv3 zYK}we3tqwYqEYQ(H1Ly(zsw6+EnjfaP%0_|=y(FvH@sI@l9<(Legyxw6s+zjLH@07 z;ssJ?;@o3aCSd0mv1SwG$ zJ9k(0DY}G3-_$v`2BW|28x{j6MzSohL1zko(GC#!*^7#oEzv4~o+3suk@!(w>ZP?5 zDF)J%W*kl2%UvZNS?QBq-4bAw`9r@4Ik|KF(xt1n2By}l+V+s3_Fk`2T}E{Bg0u3%;phdHDJp-~HOJKmS{=TpcNBK5+JZAO6UP-}mUjwz9c_ z8<&u?2IqIfOB)GKnMpAkHBZ^Xpb; zA(pq3T9TUo<#HwyQB)%>kRJPk52T&rxFD30%O4L_B1`q=CEm1jM?KX?cJJN0yGt%Q zIdJC|#D8#Vxui;dSVv;uiJ?B+PzYsRAhHqvmc1s6YF61jc<=V@yIXbb`+IF#|Nk)I z{}1!<4|_{hV@LN+(|YRmGmP5~Q5N&WW8i4l-b}`)g|WU{LZ!*c>n^(b+XEpbSOW%o%d9?H7cX7A6S3P2_uk#;>dOmA{W3B#F}qw;S=Z7*0xlCt zEldpe>7=C{1|R==oq-Jg7#qg(h{Btzdb_DDql?ji5y?vhWz}^J4Jev%>YJgg z$lws^XO;`gs)-Y6s;@3%7R?x2N_rS01WYL^XIxoCNvW=T!3r^IrAa)qw7vBI|0v=A zkMi&*rsjU%z~~HhU?X7yK9q#oL;@zfuHfy>?H!%14LgdKSTDD(-@HxIt`);HT5<2G ztJa$eK`k=$Sa&C)0ni8&FGS`ZgUYebspB*B8%47L;S_H)dH}t?T1GgcibE6omZNwy zd3Sd!P}(V zGBHz} zLL6{Zp^apaxQHR}ZY%u%Ny7i1!>>jEVOXGht(Em+o27AM=B z>rmq7eh#XK`>`xs#vK`?08yyI@|L>D)Z?r~ z_&3C^m|^n$>=J&g>}hC6z?Ykd;KXdI#I94bqoQbKX5;~hNy!T{x>(k@i%{Z6&roWh zwrGCj0V>D`R-A9{+|}FDQnfmE``q`x@ta@!_7ATNuQlvB_4EhOE}uQvQMojF|HieO z_eK^<8hQ?*Mn1e%vG@1dg#SNF`2Vv!{Cn$H2QPg4t6%x@mw)azU%j{3aNzL|e3Y<{ zhj-VR4(j4%6#0d3ysB7)83_VUl1q)^t92iE`s2aPigUp`|)g`NQ zII;IrR(>*y(5qYCK|0Y9l-mS|j4zhd_iQWt|9QgypXcF!@Yum#NV z^)HN12anPMvy4s$?S#dZ6J3nLS|9eP8%bW8V*JlZLEEA{v4-o44rC;tp#VrT(txq# z;}nc!VoYr-{QpJ5|6ktZ!0~LoJkwGi8YPco|>GPoF-lZ$}DZC z`bM(Y<74ehUv;W9Op844WMALr^a*AG1w%LNMfJn+H4+ho@s>}H0eXAr!iT;eg`$-M z$>z!li8O>e2i^g5vvaewF*R^03a_qG%2QC#1GO_el1GRq-~t-|$tH?S5=AH@>8laS zra4BYpjlG_fe3~@Z!7%&Wy1eo=Hbt>GdcFel(|=Z(YlnV&gVp6WYzK;5w5E|ZaR9< z<87}GzN&VaRlM_qiRq{#7cd2T3a>UY02Q(<0=*r&Vtx!2U3lx54id)4%Rbe0B$XpG z#z}-XkP*mO9;_HxvBRn5go~T&rDA$l?#|8Q0x2+APY>pR`6iMq;FMEE2-!;}4j;!^ z<+F#~gHi!o_}KLR|5pkBf0c)SFmA>vqSf0FKS!Ka~OD}{V5nA7I$!JF_p;& zrktL-hCm=O44{K4N&|B=Q!O(`(lSdAWs{Olb-OS^y9Uh+rLZ5`rYCnqb_dhUrG8>E zT3FJDPd7JZRoH!%6%Y2$cs5HPiquXg7LwM+@XA#N8X^9j`0P0qIhzPwB$C>7-kTQncDIoWUrv zuqB&698WI^#tJ@$x|m_NL|`!|m{Q~xJ~plYf0OY4H+lH8?#$1^>lYtiJhch(B_-?7 zLV4@njpZu@RqL8RyRPR4wZW@#-g)zTU;B;czxnc|ft9-5C!c!%2jBm$ z)BBpK&v)zUm79H&YdHEm`~(?6549E!o&Uzqe(`gk|I$}qyfI(5|FI8z?00>)j1XEtpDc1)uPcGnM($+;_0EuEr z2uor?d{Gxo|IyHdGcUX@st}M+w2#VlczdBwCR^bgiAnJPBI9FSYj^M70|)l?b~cBf z5S}Yr82-)j-@i@x|JywLZ{6t|nO?@9h73F57&k#xFS0mdgTY+VwQKMGy}g}{6>Br( z(7i#vgt0lie>!*V-P6-vTe>necn=5gp~=M}$^;?^n2=S&%1z1y-W#4?t7zJ}|M0OR z2YTCTiWYP=A|e}ye;oTeaU7{EnA5OumHf8#SeUG^Q6${LnUNXqNX=khyMz-Ln6yMQQYtZQ=W&emWrji`~tTI+>$7hkKE5sg? zDb$)`+Y0}Gm+=30dH7=&ffjH0*SNDPU?G%8PA8KqU`4SIxADDWL;ZdIL&R)gUjy&1 z_DBax23c#h5%sI!NF6xLJp}XIzI`XkbCg!sHASNT`DXd>PdRUqPpR3NlP5!G3a&M8ucqD;1QRj3y6I}ZT@$wb8^ z#R{+nr^o<$2eH)&T!Io3$(Ef0oA&>IpYZ?pdH6e^uw{)n%0{dgDyQK3iDoC2eb5EW zB);TyGC@#TG0t9C-3A7S*dquEZ=~o$YjZs~5;QPtk&k8K?a8}QUtdkcfU#D?)LzB^ zRzplG;Seu$9EOzfQgUEQi}Q*$6oE7V=z^jIVbpPi;Ujb;qNgmP;YcHqvSyMmAR381 zLMD_Y6fJd8kXFJfEgq1xn7r=QNlQ@7M8rJWX7T_3A>scY^6=NkB9=`M_8@$6xkTJ$ z-x6__34R3ndVbH-K@S%}^$Hi)GWpUB)tB@v>rWdZK^cQYgu2Vb@ zcNlsCe>X-$q7Lh00A(hNdqF0Qioe?dB4wzMa|_v@f<1yS&kVIuB#d$&;pDcQ zT-SIG^w!z|wweFee@yuQ$9()1*gODTX-}a(9O(2469&dM5@@lz8u_o(uhU<`FP3JK zs*+U4q6`55_Rg}@;zn=9vY_=LSGrtXk$wp3M0b_q2{3r~+U3iX9GhONYTJGI#AzJ7 zyKyHc#EiJViG`vX!W4ItbbfXG)>~F@_#V|83L5vFdh)%`yz9}U-8Jiz{X{9=9iA=5 zYy8ZkkDc7#Trl+Zw|?={`b@}uuP*}Y@-!DUG9rF)Y)m~Yw5 zpI>a#{{Np6{{JZt|A)_>J$bORn&doJ-+truH{ZT`$J{RDOX1+Aa4k+?zs-!?sZs0}oxOAl$qA#I3r z>KNCoJqw*DWQU|pjk*Nw>TYjPTW=|9=D_d-1Os=UwvKk#|N7iG$w0|KLe~Es4J|q% zx73%f%?#hUdilzYzRC64?t>?+MBQ1lK84kYtU>o8Yful)>=vz_8N7Ar{P_!4w-x^X zIpP1G^YFhrx>(xOv;X)*4;|gxQCm##!~-01sNse?h=WQo@M+C!HweikB(#D+dZIsg zS6d^F18tnPeQ^GV^qq z$cJ(S#On+Wns~H;8XlNzOgN9aKAeA+3GQxeZEM4|3+lc+9|av$3P3DEo4ZVzD(2yM z==*i>2#scx{6dGodqs*F8UZ5_aW~sm`2UxL|9{ED-@=H9NzyxYzv|#q0!WnVDMnJ~ z3WEC*uS(RL?LRa>Ve4f-mqSRb;oXsr2bKmsS5JqIMJ-%9L2rx&74}#Sk|vIqg^{s5{YHF>a!Ps^7vjNXb;qbGR$6Th>5f)XI8#=PX)vh>V=jO! zdV$PvrYuG`MCAdK6{moLa7l+uB33YO33u35`2W|0|9{QHKcXO63dmrQW`Wvi?CFrE ziqaAY_Tr-U6@n%+dr)la=+TmC0D=~(+;H>PY@{OAh+b57;fA3eRy}fwgdy6j|AC{H zDM#P&DUr3Q9zR_3xL0B#HKixC4?dT)l|l7`_d{Y6 zyOn(Cv=YjHt`>*>(l#UT*3riYhfSaeVbS(U^fI zpBV4Id;QwAoA*cNi)uUe9XomI(%@3fu7{p@=GphZ>&$`n%4JIF-MZ61u~OEw^T4qa$MC#b z8@l}B^S|(wpZTS4zJ719Ztt1*e(1v=eAmg{4O9`kaTOQv*`m76y@!ttBFa*6@;X%h=zq~PVnr%O6rljYELrP$NAcdr&|QnkK%2o< z#69;rZNmS5Cj9?r9{yD5K%X}@Ix>!i4&|TD6)7D%86hL}quF(Wh*QoP-~0h0uKR~) zRx292_8mG*A-LupBv~4Gprh8J^`OYnMDqT{X@bUY-Mv3xf*;hv#20k8HB=OEGwv0V zL~}&CE18JA2WIq<7xVT-1tjzCrU2KX8hF|C7gu9haBM%c8Z4z z8U2kZEhMX`QzlIhvc+(0Z9fbhvkY~5oM{{JiC|G)C^M=u_^_sRN$ zKNLY11?7g!8#8ZQuc5j|Oi+0nW=`_0f(7!rQifw_Y!(YqMz_m#*&w1*PhmK96}~(a zVqC+BfY(l@!q?=^OJ9R8FY~a&yE1)k=a_)6ZK41|WYmj8#k3h8;~gWRgm{|42l|L| zFJw#9M^P%Syp%+S8GG;?2}5WCQDRy9S1*Bhwz`<#W|5^P3CGq&|F?Pn|L=tV|IWi- z`%0)}Vdso5s+|ce=ak|os!$xmf{LMi9nlV{ZE4MvEvW1e>8Z21gx{uqRwR0o%&V2x zc}HP@@rNhM@FSN@mJP_lf8o6Y?6L}ZS-1+wAk{2dzbig5C1A!roCZ4nB)>F8QvHj9 zR0hD%N3A@e<;BQ{&WYQ^Mi1V(oHK+Gc)kzC?jNxM>HaI*3jhC;@c%z~_=kw)!h@{K zmspP~Ycm@Oq?toX1{{9zyWnw=T~qcJ{4EhT`Ct6YSe(o<NG%NiaUUDOxnSUWetV;x4SsF-+vw(xaKN%Kf)AY=q37DPi&ml4v+Z|2sZ zIDpi#z4HJ3WWxU^^Y9mOoW2;85Wr(pnFyH-j+u-J5~MmreT6n7zOzXo`Uy)VaBT(7 zjsV3A_>nUrn>2}}vlNqIfh|0kI(mUzKP5{EyB3IzWW6R22$G*3G$t%F$^Am(4x53c zT(l6Wl}N6Hz^#C(tdwK*I`C>y)5W|*iwOO_}5uAhJX zhp)bQ>F&f@RmYyACr_U`VU4cB#Ysv!kHXwx`S_4qY+_;X>Z{*=;rSQ7{o3`h_4-}M z%neFaw`yEMhUrV;StSBf`ZN&4J3est<_%o-M<_?7i-4(I$VCGECqJE01D%~6*8P~C5z{61XyOSz^2lz!keRoNLxy>Es-6bdTOH+riVAn7MIiXa6ucg~-(j!>q5Oe%!G9GZ{P^ zn~5}~;#1)&VZBuCN=3pG7iwRq_F!=IXNr)~jO$eLT z2*Al9>OVtLtrd>ibE{(S@3jg4FC_fGkcWRn`syl4Rcs=1u%cKg+eDkl&U%E`l30~6 zTTFB*pCe9~8c{T?W7!QBIEg^UU}ITv%{5wjt;h&oco=mXsKtZ0u0%%!_UOoPB$d=O z<1%)uSKT8I(9@LdKi){X@oKNZwj8e?34jV9y~rge5kQC(z?;nGdG_V0=*J&ENQl|$72}~o zXB;zuPtzxU7Du{ab{+N3Y4fnzJIV)h7xL-0>ahv`FDLxJoQHqxzKm3u&tg~@#aKcC z97986KCBDBfYt|y$&x0c0CQ5Dy8&@J zovZLsJQEl4`aBl+I?wz$n+Y*Ryo!zS!thzLH$;S#F{713wkr1iUYqd$sf7Pe<>9YA zFLWxAoi`F^XpuMkVq@I^go2b~%OuF&!;Y-uE$|@XTQ_YAG&P7z^b0ZFOZ!V|OmT`r`Lre*N-; znUY4c5j}DCp#uhhkM-TVM`DuIvbwe&tNK#ac47F|+duq1`9;s&7+I`r?LBcaUhrf<} zh+TEaZHh-CP!!2ksRCVBS-iF|gU`+IsPUn=YRlgumCyVvQKN`>lvpGLT*Di}<9dV= zAblqvD}4Zs-_{LhjQp(12bdeGEXS}I1acLsNOsqHs&W{hi*E=CWUSq5_^>{{W(&t7 zd{P&5e3UHfX&QM#R3Vo71TW(BV*ohT9fb}e5q#Qlqgk;;RAU=3ZZ(`5*pfo|oAX9W z{BT?0|1$~ypUJ~t{hnOS_olCBzizxsRrG1$XUmqgDV;fb!QVn>sN0Upe#p55kqd=& zhs$Yf(Rgc^4hE)m{eHr9W2_%<3M2oB=>yx8JSx-&tt@37`;0zeCXnFG*tE(@EclV4 zNDouPL<}UTxA=Uu(*7zYp2!@JfMKqw@JH1+L6%v?efK1D3>hne;l2u*JaT zFwSwnvPCh2-Ce@~iqNI#eG{QKYy(^*DeE;PX;lan4%xTV;F}fzhRJO6bhm-f+z6|h zXLk`Vs{2mZ0F?X@{T1NjUdpLp6*DsI@C9fnr!^04EuR_1!aQMm-!^7s%;>0R{g%%&e-^LaSqH zXwx>hwk*$kny& z+()?XE)qzh#V3x8oHOYA^#&o@cb#05m(RcX##@vkTc-RlPD#fPX`6s!l0{Vigevp? zL0pSh7a)>-_sJ(jwn;+K!UI!(_G{Q4C{#UB|Yp4hce zzR1cFZ))X?DI^Vh8?dGLpgM6j3JryhkvDbZhp_+=YUO!zmF&gF;Ly@VA+dUVo#v;=Qy&GxY8soU|HMda-D4B}znJj<#XS7W z5Wr2MYUyA6e6XP)kp(GW?@r+zx_)aIK-9CS6KZ|xZ|RQf>mZi5?%PZmh?SC|iM@i+ zYXnHDU)@IBIU=r?vH}tIVbDQ&IE~;cskbRdQ_=@qkbH;v4v~QP>WFi;>I~R~|1Tx{e<=_DG#pZY z#zdVf4Ze=`ua$lU%d%56%JO{|!?4n@`$A8{$IcF6^L3rX0SSU+0%e_t276<%s|+y- zU!&M#aL5cI5rtiiC}P{uz00UzXAx3e>;~a}6hQ-+Br#X;Qo?+XjNmIM{EQ-pD0oUI zZX_QDx!CZRYCho4b(CfG+?aUpe z1#uO6_=$(@{OF@bMk%hrCpOxdGcxigns(!|Np|Ii@#0|~mZz4E{PO2YqF^6*b9-f?EfcWEdNXwyxJH8h&LktXk5c2|SJBi$3LGL{~~ znRGu})q$CmQGSpH-6;hEh6=eY0FH8>5gOsd3BXyiGe8JK8c@$zf-o@LZ;4S;$uxHE zwsh>yR+GWY_{jQRyraIA6!kSF^Fue@dO4~L^v#vG?mzX|(@#D25D81yXGTa(Ix@9V zR@dIU|G@s<)~c0}>#u$LH-7Eczwv`h{Y%vwQ)&x-vuXYRYQq0l^YHIJ^2p;)J#J0C z0t)@&0X|niiQV0M$&u8wV|{M){;g}*uHRDEPS}M3qWJgBO&K*hzfw{~etrt~nyq!k zjPF!#SS>Ciyf!6{B&d)q@KG65HLYPf5WP8*Hd(rXJYH~ca(1aAB;|~8<#-U_6@bTq zOE(-hBHN(*JTnt|kCPAq22_s4>Og$Lh^43u8h~)_(8Yw*UtD8m9^Vy`1l8*RhEEe7 zMSYf#Ab%C*$PVt`)74bIOv&pzceWtx8^6*f{C_Rs|7&^p-|e4RD2%*4B>69nB(8S| z<(QZwY6G)dcP9}VicN;n&XM@P-m-u#6xPsgcmLi4OhyFcSdl@uA2he2(#334U}|`h z!07subo&PW!qy@!pXvrRz^L$N@ytPNz|~0AtsX^0h(^#rF?GOd)Cz>$fVP-K@?4=v z9*O%_5lIKkU73Y_fOgc0^9rGxSi^lOCWht3$Z}~k3uXvoSrtOfH>!{5);%`i|LY0= zU(dte6sp8*>%kwP6j?omq<+^qCjz-aD^WOJ=jrVlbV}kFET8vvm-An5?L9QeQu1L(Lgs)|>9pH?z$ zF)xIQ-hw5YlP`)Dt3Kx?X698ugb~`x|D4JN*TZorc)Kwn?h%RriW%-GzTUl3x*DJJ zFdPB27ZYISXD~?RO1BTgz@2kUun6jODyy1yM++r_yH_-FwzG=|mhvm(TA9#Z+sps= zHxvH9nTP+9TDWA__mvz&>@dYRS;NEVt55{8;f6jXS#hEah{7Pkf%Vp~$>ZZaPK_Wd z?@q5)GZfYtw^w$Rc&+=7Z6>RjNekifq=xP!Hpcp2|t>-qq14(-|Kg z8XnnR`Cnd0_`i^cKQ224{YssnNqBn-|5_gY z;iVsHdjmVkY#ZU{N6WTt6N}L5RI(8p}rDARacOc(BOq&YOpQ99F2s zX$J`di83~I7}GBCJZPSikqti5hQvE6G>F+dPPK%JPCZ$;;#S4p-)j^8Ur+ddJrDon zRN<&HuD;bt(-J0N22Mq}yx9YL3`9{=zntD^T2(_T1Cy#Ya=x(cmC@67LNc!?&|u_6 zSa2X=N)fu5;m|dMLzk;Q+;}R(Fr+`OZ)l+j8v(B#WkD%Cb|pOs$Pgaf0pSAf0j?SS zkOVqEcaThd-WBs{E4PKVJW=W|j9D zv2$2MMVEB8b)c zy0U2~_yzRb-?_v^yqU*VUjCc+|KCdZ|NrE@hhiPcd8Q43L@$l#VqN z>usS%==$u)T^w?*-yNCXu4*}a^4!I9C;Qv$sSU;3d>&8!1FeUs|4TBU`N3-+{N`8h ze0Y6$xuX5}<=5VP{iQQ~4P`6Sq~sr-c)FDw`Fn{2h3_+cb5sI3M*OFVYj-ZiBFmiuDV^B2}@lo*pe<$JpP9FZU zvvB0k5^$?YgG}My;bINVS|o>0bu{$C@u;pQL_iT5$9>WUE+qHta?^dNtc_SvbhuXF zB^wWgSF0(xW%77Rv60oEIt;zNM0Q(l*o^X%IQZkBPl{L)I#%ph@_BeN$sgF`fFtBXC>(=E#$el&7f|fT8~Nr zTa=ESg{hNf$-G<;_{jZ>URkffK!_0K7MeoP zpe5-)4G;~+rqU+8`q{hLuV5h&$E5-Y)}V(eaB5TZ)y2WfASsSa^`OrX(~&lk+4P1g z^4tz{#Ij?f?W`PnKZbu4yb8ZgXu#rlr_W^`Tc)uWyF0Yjy%_ zydf08-*MeRb&%EE@q-8$3YwZ+oD;=9A@Om4Zxy!-NWE?J>{elu zMD@KT7xER;qwFpI|GR|$@AB|>SR9kYt@YSQWSL=?Eyq@Cl3&e1IO)4)Vj;r*#liu1 zL=&Y?=!TH>ED?Qy6#%A(vRG=DW>TzS_kDMM=aN_ZI0$###wiyvhBJ&KrW5QQN)q}W z-%JttCHG4iU62{lY(Qs8#_;h`(#Fp$tW!mZva&rrhbU=6atmb`XE^T)3Xa5NDbgPW z{O|pQ|ND9Pn~Q&tYPjm$CHH+)-#ygYVC7YMc8g^I%WY-6tkYrzOa>g}H4W=ctbZ;Wwh8?p8U|{)^QSFB z7RvsewM*)uN*hT@5KnyHTLDN%0vQ9ZFXj$Ujg8-EL+&lVa4tLh3^c);ov<@hP&$be zDfIER3h@6R;r~G%{#I6Qr7rRTbFQcbB+?rOw^a8O^aV@g zp2Gjbg#U+m_-9)y`#2-vOHnQmIT&Nj;L3~sPNL-do{d{x7Q`&uk>d@(Qf5RwlGsHQ zM{sdirEhhYJ%1&W#uBMJ1{26QJ*iZ7vbnw6E+_`9gGm69(+$Y_u|e&@osWH+WG{4H zJ&;Mo47!Ww%Y9-`_Lcs!*<_kwX@svT*+KfodkX)L68<0kP5c@1(8Yld2&o*)hDiS8 zU;&^b@B7~M5@%_WW{lf(M!V9ei#4a{#P_F$m3;iD|cr471_8pNP*MM z_rF@gjCA_q_B6AU|GWzqhr|%?eW#I=Oy=T!bKwk5QSV{NFQ10{sKd6ck6ye-!Tx_W z;eRy`e-TO;1-K%_FpEfxe{2VgHE&So1}!W40w%5E|v0aUbt%OaHUigs&69-uU61OlO@Qh!@;~-{ZU3Z?xj^ zgxrU>N5#pqy_Ns(FM zp5(MZ*=1a|Flh7-O)w%JFn?zU>t@95*6karRo5oB;*aXx;l58 z%EbWC5EjD~C8xqx-J_mC3jo3>t+8e#%>YhGd(8jm^MwEBdH9F>R>WBA?#1Y82S5=J z>J$|-iq7HSdEfvhLP91WX2h)CgQD#j|SeeT!SpA z&A>}Q%lEa@A|8Q%se?d>jBtS@0&rUu{^24Ljh!A)Jhg?!`|>bats}M|!~;I|EAg(1 zBPgMLpu$W7ZM@RboGZqk1?&Hdg#QM?AhKi zcwIbUTcN% zNuU#A(X+FJ;wGNU&Y2^*dF9;7%s8}7I;8X&&?|h}R;)Q0ZTaD2amu;P5ue#>u^t8Z zf0gk6Dj$CaC&0+iWxV)RNCFYhvUVItjxfZ*PR6f zo{lXe`#6609?lbgd43Q6$rW)?_Cfkzb~?Lnb^~Tsv`#uuLDolZio_j@ z??(at*AxEN^YC}5S(MuQ!#e|0POb!0D!kU#-r3%2x#bArcuHkw{lW0nCp4GjERi5| zVtjmJW`4!;&@EBMue-DPU{%@nI=Md$|Hg~o8sLP5ljf7Ca6)gW+CW8+Rierd5Y5p^ zx>s^J5hS4Bk7c5gVJF;<@FK^iNFX`MA4%t^KN4)eHq~*#M-BT?c%2yT-AJ(l>dBie zGOAExhBR0q84!4*XjqVL;vRw+KvtvTL;dS-RDl1Dg#V2^{E6|w0n2>7Q2sFFGFn)9 z!dIWO1YH{~8xh*c%_fYq@&bfz)x*K(<6RxLRegJ~13|KRA2_@GPbTRr7i~TSUE`3U zzdDVFd&hI@QO=O#s?DeeJ$Pw&{OYjho1S$pVM*TR;b;&Wx{M&+@v-Qg)jl8J1-qhh z2+u4r4E`FLM7OmfJ__)^nee}vhksDA7&nK7;Q%R7iUZ!ppfO5*kdWjz2OgkUMH!)r zQC0+yCD_o{e2{uEWW>FID?m!37}G#fp%0dl81uwAr>uuL(5d7l2&Lga9{ZCMCn?s*hFFY9dH+}2=^uWbIK&j$$Hlj(fJsWC3+Z;Pk@qih`6@&u$$|eQ(Br97SlrvW8hD%XFx}kl z<0E$$pNYAUwxsj{_fFeXnm*aBeO{V_yO-F1_T9X5>M5Np)(KF6|DA;Yojm+wWaP_^ zRve-(TtdPiGg1tGLXm+&xt@WNyTlfvBJgn)zp9T9+~Y&LW26CqYhthii)`2v2I-8S z+8ux63a<;G<7Qm!hjwLi+QhBx=Xq=IVzYD~@0jZ%F3!Fqr!{rvKZd;&*-?Q1-Gu+$ zJp36d_kQ^p9#oraOLL^zrLN!Fc3Cxb^{9}6pPzMqDcnqIeagBmTPE5_U3|gJt2;9} z`s4|DfXEOfzBS-psyIKxbm2R7tmBg&{RZ7tJ0i5w7X%7_zCdbCdCn+&!QmKX( zG75FHQksEW?uL+)5C}beBqouW|Ok; zb0rtZ{%1`=O91gsyv6kT#-q)o4>}bgk64zhzP`vH{~KSY0RMXl|9g4(8-i`lj7Wxo zIfXcipaNO0RdQ?^4TPtDWCBW|G`^QvWxS+i^YOlyoypns)yMxHFG5xN@m|i}&vo%dzEnqSZ9KzvC`Q&+@jrsIJi?x(1_$=p5jR=2bELmChX?UpHMW*CEW>J z>ZE$%&eH$jBRrscO1vOqPq1C|{x^oKsD3HH|9-;%ejfhn=YysBN_8_})U?rrUtWOV z@Wzk^>PhU<=Prk@d@Lwj+H}Rvk>{^oL$nWKuF)lVlgIRuzbV4SS>#B9HNx4Gurknf zA_bS{p)$vCWIo^m^x*$IDIUI%`9%N8TcR-ux57;)fD=t-0CwI5l{5ys^<#fN06yO7kB zqLRZd3)QI;fjgz8k^zXF6aqk)4hnqC2P}9lU4UYRDx4?&pG}5n?iAq@W)MJL zZYN$5AJ9MGDhdL4bQB-34aIprg6OB%7A8XweV!-go0BSbCeIhug8y4zreOU)O!z;{ z!=H`TMH+IER4ZZS_8VZO4;W%8Roa(hA4T>Gf*7v>*E`+Bigq&*^X!A@$U9_5wv%w0 zJIK+}mYlnR&1s#^deVO4#~enJR3P)0C7htE8A*TYGC$9aTCg8#g>SIQV2@c6rB` zqK+<;HIYY5{!VHs@=xA#y7*-5uoW+z6628Sr!wy?fq@)*O7CHz~f772sw zmz39WK^Nr$o9nB{BV-i_s+TQO+JL;YQGJYLprkXUIK;Fis*4qSzgGeNg9-n^Jp4;5 z5WtALC!W5FfhXphplbr9wXxvvlgfeQY(k4Gg!n+cjG?Uz9iMLw7P8g8C;&oT5aYz5 zW0(_&>oOXPBtZ~Ao+cJ)EN%Y9HX&C~B|e|Y z99+Uhs+O`ni$`G}@)zv@I5cGDfb<6OTF6NXpaK?hZ6ondHBZ|$B>0Y zC8P3fsb&^J#b{;pEH-d;_gUH^m%qg-7 z+dj+iux@TIl`(vf*%=f;QixaxAOP+LA%bC;h@@kN{JRCkd2|=CXCN+yVB)L|(_$zI zG$OGLBq|W1MiNQ6MQlsEQl6qc3h*CE_>bh_4|Nau9mbY3*tnsyKPy5TwTa|slwH~x zB1+3ol6RKde`pWb(y<$c2qukGqF~EL21`85dmtmE&fG{&#xh6G=+xT$YEIShG;2Hc%ey8X!9y;%_bC(y} z{|oRRP56)I;h#o14Rbaw028br8~zLe8-^y`JnE%X+MS!Gro!ax0+qDuN$Yj=*io{t z)>oF0lxbp=Pa>xirJTtOMtSDN$>E20Zr^z@GQCn#*WQ2X{N*c`&YtLLuHIdl9UFS| zc!&}c+xri+kf`BMTSN7;<*A{&H>mA*`|;#*NnJ<(>5Eq`Up#%RtD(Xa!PW$!B*i`o zP#o&%?rN*A++Cd;AH09(&b>!ZrdOx~jv=DIzlTh}W!u;rrlQ`o31K^W`j46>_F%=< z()8$~2gQbY{`V=se=OlYmWTg+E3YrCmsHl0F4??lqyaFm+Z^Tlu+G$z?(OiA!@V7; zO8D5w@bK8={0f31<+M%0Rb95dIzK&*1!!V+aigS)qUybUy$IH%SYBb^rzp3$jnr4) zZ1aOA4#to)NjhjscVHN@xSV8<62GPsiyClbhb85IO5>l^BUoM}?G$cE=KD!IkjgwA zLDUKcO@I$zRDiGQ9pJ`+9FR-+r6UP@n7dATGbxhr^4Vkgzs3{(<9Yb&aud>5Xz;S_ z(boW*eklKxyuz2u?UxZ`4;293p1g^JY9S%;yDtefZ8XbLCX-88>kTfdYfqT@%v6qyNf?SLAV>wnK`93lNd+U6>ZdeT zFj2%rHLdPSZ2boA+Fe4`QIiI{u6ol%dErAFEV$NZH<~Ku@hL%g|gk` zN?BS&Y%>41`TZ#M>OfMUn-nT!0Wrm29jUu1As^12IWfz;ap(l<$S7_3Jv0a?Xwc9^ z`4v)xkZ-)U62HSJ-9c3sx~BjMF-C}r)^?91!IlCd)3lzNCXpeRBU^-sEB09$+rh0HlRP57cpP(>F?Xyc6ZxslDYLe>^8ZgJ{3rA9SImk4x{#)@ zkZZyv#dk>PX~ib-E9qt;;4X|X?6kP*sRl3^w5eF=NSzMbNiw&{&V#nIVJKzbgUPm> z_U-gRY~?DRQRBGv$UohB++!s4Y~=1NxvfZDQzir?al$>`?Iqp`HueUw$*bLozS4f> zwv{7=8C`S_<1fvN_9%G&PbK`P^6+O695cr__HG9=4o_zP;-4bo7zPWBaSk~v-Vkp2 zCJqbVFj^=u#Kn$p((K2@$d_@GXm3x^4|{)xjEy391D}a&Ko}^-jiaZmyST!B($mJ5 zi0@&qdJ9ydp4_GG7oH|#<5Q%b-B;Vx*>mLB(IdTG&2{^?SLUb2C=55d$i0g8D8PR@ z;Xj>+Ka>rQt_Ht!eSY-Oog3G0-XES>FK_5Re&L0eU%q^9;85fK4eBi1zyEM#YS{v6 z{YMUWHC1g+Ke~SPy?1{5(Y42O&+2>6zWUAYeE02FFCJ~JSf3fXcav^L<~J*wsmgus z^wG|PB@4qhuD<)LU%vCv^`XVGrv3}Bz4h&HzxmRco`cU8hVNec;)@#(#ug#^M^0b3 zbm8nkcVqeb%%kg{eDL1yu6}uMe5I_R=fwFdS1z79++Ihay3xT$q%51WR$ce8Gv_am zX1J~P+2ZKEuRi(c>ZdmzPOj~%@9aNu^29O91@7NmoE&*{A5+HcYUzQ_W9P2C^wQ!r2LU58mseO*m8rEBwJLl5rXr(`<`dm}YmS4Y!< ziW2H@P_cb}d3_ff12G;Q*ktM|j0#zp=UAiyfK>r`y}$_L#gnN6dA~%;S))A6C(P^G z&;pfzp|*>-0(Te{&AhMFKwEi$*FNsuzQ}@Ny4m;^P&MVtBzZURcB7x1H^JVr|Ia4; zXY=q+ugoC!4m)<8u*am)3I-o9-FOElsS6&JTwrXdk;BbKHlgq(`u9Y%oUxX4l`=G8>HG69P&n5il^6-z!O~iJsEh(%| z&n;qD#f`J8r?ZJS2agF!A>KZsd6nOJP~OK%ayWn7T>`{XKoXT~?6X=ACP7 z*SuvR4>V$0#IqC2;`(9~;F+9VTz^(xqt9nYTXQ|OUTcKT&do2aV!K83Xl!a~JZO{{ z4>U`Grun5c(o)woG@13CvY*eQN+`Bod_;{YV!nu(*;d-aYU`jtj$8_%`L7)zPDDHLF)9=rf>2lVkEAM<_Yhh;y6M%L@RW*d3 z==6!ofb}1`1x*uJI&$+5i-D$MUI<I*nL3`j!@<`Zl!VAfV;y)cqnm^1p?I|3V)A!jvHed`T8#pd2g3G5!%?D2y>; zIaot7PXp;SnOGNGE2Km(;{y)<;T^=!*}w;?2a{|UYts*G&c#ZR2Aow&5*OztaWb-K zU@5iT4j&yDh?3M4?wg_R@Dp5sHi0iwXb5Jp30+ z>bp-~dgb-kUcPX=tG;Y?dgS5#2aiT)R!eJJ4)qTV9O-F0fc*F5{;jXR{Oaa|Cv)p% z2ikg$4xF%tHWgnMCdZyUnZOnU^Vg}4;19}ymu<{X3_rYo|IyII+{(^=Yzr+E0ihP7 zZ}k)sQdU*phSg}`*pc3jhN|6FWV(kB9u1ApuVGJW>Fn&J!XJg+Ed??-^n_}F&#VdK zjg>xkm#0S`KYlzsv9MWwu&o=LPG6^w^K@e5@dHd6QwtlVr2WRRsf})SnN8D^Q?t~n zDL>GR$*8Bhg9sH^%tFzE&lfAee<|U=l!w2hPfLttK08>+`xKlSxzYBEZjSyL=28KtGxf?b?)1vJdE^7CFJ7IUjO^`?$0!aiVIQ$H~q-$ zmG&8SaV*JIe>vg5oQHpf!jj=PChEow2frO;Zmn^fXw)Id3S%Xd zO)(OnDyiVn%`XRU#PjN4V`CFF-YLAZ8@hbWbYxuM3hg(Q#$2J|U({FtGbh{&LmKuUnDoTNq*x@vCpL!? zD$vZ$Oi#@aXr=>eOGigXYr}zxvaMAr(@=C2C(nwSgQPhpeR(wk1d@*4s7N$B`}bD; z@0EoAN*?}oEN?3E9tg>b(belVD)}@tHZ@Wc7B~=~NWL+@u#9a*3CgVcWPR6Jl!<_y z4HvxXK;r<$o>Gl!jIusz3ELdl>N5kWc@&eR8;ZcV52K%nY8-4i@IKutUA^_P; zQ?`#g(2+i6oG)hwNhSx3c-U|`k0gS?p+OKeLAabMiKtl$1p+=k^8TRxy0nMY67G*J zVtZ>(t^d`8|7sro?xFa|u@8sO6_GwU`AM3laYgQ?lNKL@;g*w(WzHWf6BZzL=;-1! zUB!EVVb&1j2T2%n@8%O6!NNixOfaM|KHw(%b=~78aD0k~gd7;c0yj<$U&%#Gp3f^l z=`B4JH-Jw1Kv2}Ub&@Y2o0)8pUKu$eD%*??V6BkUB0dV<|7!{VwLJV~=OI}I)mILS z0r`4dGcPb>y_=tF1_~Fx88c=%E|5ny9;9v@7%icczn6^K*!-@$NJi9wx;fV_U>Q(?B~C} zdUtBKdEn*m{=wh<Qe6u3`QGow?!hbyv{}+!nmp&c5`Ps*xe0gtTy{cp2!iz6m zJke3H^yt%H{`9~9kN@?nPX||O4`2D#@Bi_i{K5BLJ=IaZG;-(jk3Rb3+QX@hs`i14 zFTe8A`6G1k=!^IM`v3gm-B0gLZ`bvldGXD+-+JSPQ#}WFpAO&o{F6^Uzwu~#qq^82&QK<&cFUketmozdlk2$Ed|I~#mSI(d4u7CD)=;p`o zzxTmscSo1^w;Vb5;w!IQIosd7e|6%)wNF00`o*0mPfP22PZcTj@wE!@-$?jx)eFbkD%K_+Ui<9hkH5S#JilGt(nk=` z>0^f)%U7ocZ(sZJ+TCFdM@P zqC1$D*EP3w9_ngup~8?^y6`ZEEg6{{v zo!W^|`T5oedrxv4M?Z$clM zEp3<|tX{QmZ`J?XO89T(;h!mF5VguGLQNBebT{zsot!j72N8Qj)OB>SVrwgQm7QkD z0kX>G9EyP^69aCqA!v~sM3>Rs@|yZ4(Xbxx2DL#=+NVjzD!mkHOM>DGB835d$bDq) zI9MMalvz3{q1X4|@SKZ2@T&*)ORj7nQM7=2FfN=BM z7m;a*v^a!VmR3n)EvLd@lW=ks>rt@(Zzue>^YF(~yB`lrTr9)zl2k7$P2h1lcd2Bt zzG@~PWZs&xyU^OxJ`Pm8@_DIXocDAPK`jD71KF`XCEwH75c*^lz^aRk4N**x^oMaq zcJE1|{FCU$1Na08B4L6^tr0gOU_{$QCL^d9@(3kT>RW+ELxx|F&ck2W_DM1+R_y&= z1^DkI{CD#3myUy&xT7n}BB!1)Rv7M*lSIESWDl!@uWst< zKYsG$@uP=YYWHm{Oc8Q1GCsGutAoD*7yCD62XB3L^`om_-Je{ug!>zBfBWs%FAcO+ zZcGo|zJC4A1U)8TV3zfKkSo|@Ic&wlxn|Mvg?_n-al&Rlu-#kUbX{_uOR9B(O| zdwl(q4?p_s)(}RXj$`Luc!@&Xrl~C_u0J9_#-|t8OR5?> z4-cHs;jVUfY5d{MYu9c)9A7Fq*mdmOh1X_4{qPW32kZ_%MT7F-CeB*%XgMB zP~E$8_tEJ5=Kh95$4;F)cjj1ka~0=Dhleo}tv;(b(5!PwQ*E*yjc6-e+$@2{G`F@8 zi&RO{GWC!M9}lFQAsX{y&F?LsNO zU3%U{IJE^@lc~nHgzsR~sgc&I{*c%w4B#2cl8B;gMb0rjxyN$mgq*Os}D(}AG6x~lB!;P0&y;3OOmsp>?N)kE{BXrs1U+L9mWZ|KvJIVY z^GMd$n);UZc0{jwgi1vZllrYc+s~HL)At&MdaRyxc2Dq@9*qi6JN^=iAB)OMA_F!9;WM<>Bf>bsS*8=8^C}s*QOt2az_Me zeSJP=EBq5LQ#K)asg{S3UqVVr3L!)UIX~`akvSwLui9o>CjkM5$jLp0|GtF(zC8Sc zOuK=rS;+}%u;S3lTS+Yr_f3U2g(h8fB+*I@>fnO5C#J6GhbW;C5QmMk9{iug+*AI{ zPV;%R_ky79pyQ)xnt{uEc$G(@YN7V?mZ=LLCF{yl=?205qub<8mUWy&PHaulFnTR& z`d9e=-=FZ`pND@=zGAq9mp|gbkcuydBk#D1X&SQlNSV1)6_rHpc4@3F!jvo z^e~|Z$ZZO|+oUY)IPOI3D-rbu^KESM`xWa^!2d{&1(@W>`kMbWqo^y}TAU(4#sHtC zXH_lT$4;L;cj{PoQ`L@9`wt!tO)TzI68CfLsN{ZO_~ysId-uJoH-;DYwGLeQ#`nJe z-EX{byscto{Qk8sKD%~zbg`_l@9Yb&zIIB`4}bn=|LsqI`m4`}H|hso`Tmdp zN_c;nSe109vCW4Euq^UJ^f%?H;95%JplPo6n< z>gb`Ss%NWDr!6tEu#WuM-qU}izo#9au?_t`a9NkgCxl5)v!T~VN;|v->90qJjpIkX zbP`8_$RvZ$Qf3vPnn)2J1^DAfFa8yI_^Zl^H!d$+<34q=+SSbi*UAp0r~^39$;hTq zoo|zG0cV`f_J*3WjfH89Zi-gx^w)$>k6EJ08aMuAh+GcK&#If4N9WF-Jkr&$f8*)+ z@FSf2CR8jmw0CuPk{>{4JG*+M{$fE%Pd_G+v*FhPCx z^z9-b+X(Iyk_}hmYLhVF@L~QY{eQF~q27NM`XwED2m=rMe?$quyp8Qj8NR|Rh)8d1 z{*WL_iO_Jcl*TLMLF!N9>xHuyK8T2N?B5W{XSqlKx;3z0GoNwl_z;Efpl(4Vgdj#C zRLQ&;eBH#$C6XD*8Mn9h6#lGg@vq9mpFxO1D@JcuR1sN)GaqhTM#!7COH?9Ng5!uV zuIPsc-twAp{|E39Bjb9+@f)yj%*d_^C4y|~k`PAyr`fruG%qc$p*|CxljWTm!USP@ z5RpSCMEoGKl|9q#4?i=v^D;w$BC>~CPFQM@HjUT9jW5!I)DYL>X_JDiA(%vdvXDz6 z(VH?Y@=C}hnPwm)iikxaRUKO4EbUY=qyPWV|5PXZtMl+r4m?sY4yhFLLslkZR_d(=v zSyLO!{nJlrABPXgE$Jd$k35@|CW%jiB>F6VfXwo>vA_ps-|#EhN&4E}u^5kn_kT^o zza|fVM^Q^i3{}D>bDK*9U)Jvc#=KyVVxEXb%m9XvKN*~nh(YLLbRA%Ndd~2Z1PRP( zYH5e_R64wI?9a|T(Bt<|(?#o~S>zFI>wHOkUyx(IDF=wA*BWcacS#RH%QTY}C=>G0 zu}+4x;nCt-6eINUoeJ=;P59U5;U56eIzSUL5DwK%H3oK~HmApi9z7a-GQIq)s_D?t zQ|Hc~J9UHznyrPYC&R;|Q%hTTVjUviQ~mz+$@^b^`0j7s`{d@x;{Fx{gYSIryKlXC zs`b@t@pmi>!^pTG07pZ?@$?|dw6R)6T&>GS8$4D>dZuT4L`_4y~CUAs5BxLe!SckKA_Bi$_oq%7crWaeOF z)Ejx^-k#28B14K6e7;x#{&flex;*^X!$X7MTl_G{u@kDjD4vLBHYrsh1yV0^cDm!6 zn@dL@JvB+AJWGK8B2rXE?Ll7dc;oM4M9_I3GZN$6-h*3TXJZxaeuEG0YPH#_XzCd_ zgIv(pTC?+X3@5-l4>a*qHFX+1gtc*ZdE(KX>(_5R8eb}F>^XhurB_}!cci6qeVU{M zx9&a~d%9&H5dB8(fw@tVPT#$Uh`L+d(sS(enUhDmNnsG?ppl8WH8U0T_4gBFRI#%% z{p8Vu2aiW4pKk6m6I?I3K=u^=2NM1V^6+P6EFxHqjL(`QrMa`auZQBDL|(1wZHtkV z+;CO(mgpfXU+Ko82EXy?g|%ID3C%5N4{9oqxz~)X(ddGm2Zjd8Gk_ao(!$cZIo`;- zgbSF$xsgS_LM6lAx zR!gv8GW?L#0il3AV3AT9vWk%i8(N|D1TFNf%>csb=8qlU}|E5031>T9Bei*NGsN4^bCgw$JmtNvqs!oNNb|A^d=L>w@H%)2UB6XJ3BVtG2GCCEWAEKkcAgOG&@SR+j0 zbq44KCkvV;BMXui{8EMyl7ZwaJ_?mE@qU_(6aVCcjKItHIb?GCBzSR$(C2E;2|plR z!RSiXm-&IoVzf$gcWz+tdOVKIkyEl8>5hMbw$lIJdjB^h{2TJ{XFy^QEO%S1wLd2&jmjhNX0~Gx7&tE9<0wrYs#*MVJ}(aoLKUQQ#^A{ut*bAnSh3|*Jo2T9Kn2un85}e z;S*ZKM*;t9O!znE;h#dQ(i+N^OU}p6C6~rIEHN424j;DG2*piO1M`E7!3;D@AEjLE z7r7OyM3%M$0kp>$|2UUsm~vl+BOnWI=xuZZ$ANfhW^DNJqoF4=%R9;+Cr_U_b+o&s zW>-D)$mrD5jeT{khkAOYjf?n_eem1ge)Q$TnVkc@=U#d1JKz4s3n#m3wq}R#-MV#e zWOlQ%wg1e;%jXB$E0zX7|Mg$~&;R+C?|fOr@E7v`ri6b}9{wY12l}tP^~2x)y>GvK zs-t2Rk?M0qs;Tv=wxj1?eC6d!#PIA)-}~e@KR0md&csGd*U8JTzW(y%6Ne5wBgX39 z-G@(RH}*Gl9--RHiGC!*^_h|Tw{PB&r7%RyqV7ABrNe)xD~4Dq47zEx4Hr@g*ndwFJTWMpi5VZ&?@M+OFv z!4b-4&D%FPYH|j0Mi~dxSX;J0lJX!?vzI#E?hWGKnV0Gu_C1*}(?%bbcX>gT?@uGniQPB@9Dzm<$PJrtnRB z=bpm9CE?$ahks|A6_*U8z+!{JCPii&-)-isAoZx&4bajw0Gm!^+Qa}6QpNJbgUGx9 z=2q4KLuOuxw?1T)-6G6NSFuH+xl#e9g9PbBK0n^U8Wwc=vEWFSJ-}`$AmTg3n(mmE ztS>#C zO_t-mW&dqW__yZaUs6#WHWe@gLX+kp*kK>7YalT|7TrVj-LT70_*Y9DK{+fXb2mI) zSa8`^fI&}EYr3u)FM1|9d&-+h_AFMQ4Fmi--KU@WOl_X^Z!Q4~pzb)b4 zmWRLWIvBPi=wQgS`7isa0Ol_;>7ddf-em%nWX+M@O%WUnawa~6(3dWyFZv9rE^$eJ z#(lzwAjkK2Zo!@CH}2)<9C3lD+7)|(9|mYXaGZ`?+Rzgj&s54Z!+;M>4_cX`FIz>M zxS_@_1&a8vNPiUY|MrAGDRiIve+MUbn34lkvWx}uPeaNFCTDP{6bBqZrNEE_mG~HJ z#qiv42lDjgY~lzp-_7I13k@E#BdneapV5z!cI+V@4$)UByyF^B)K4{5IMKBq4p2IZ`{5s zOSe~X6`(1?Kxa>19~EQBAT~EX{P^J`Q-bYRk=@hP+E7)BpAvx~gf5Y{to`r+F+kl- z6&tf7_ikRh`Cx2eZ^i$1Cj2||@UJBw_NB`vOekBO9K3t;CWgAX&GH7LzXtj`4wNj9 zKe$O|z58QJr479&FTeECrBl64``2c47>qn|H7$qw`VSv!tt(wK{NDu8v)FU$+q?Vw z4^#fL;u)nxN6EFmv_*ZN?tbz)bT(G*EKMOexRepzYMR=+4uye%93L7Z5cew%ws!X+ zyCKp&TcwOAh9(j=!8HuyA%0*#g5H#6NavQBMpPjsR0-WO_N*B^PF65UQJOTuyz44T ziC>?Kgi^*Q>q|stSXkif)I?D({On5=tpBcre^(y<69jp$?vyith-00k>a`v$bT6v^ zkam}-dh+BE;5}n9UUGS3;=%8S+`1&`g)l0VLl|M#YSm$eDKC^E1IFN({V7HNZ$ZQf zyjX&^V_-JI0Ar(WMk|zjVwYrwG)MN4`o^+)0`Q=2^%7|q@k(Bgo2ok zo)iDIO%(p-f-*A|X$+A4a2YDA#$wRk(MA{>iNbVDL&6|+a4I%p_OK#83h+Oa@IRD? zKLZH1tS-wmWy$_D-w`9HdleF)1zw2dAs3j&U1R~1EN7wssU4~-l@!DKE(v+0WDavN z`N41^Bt{E4&&VRP1?#V(@aN6PW%s4wA^-3g~F=ah+%Q448{p8f-68K885d`J5v*KS9JgHM$o(Ozf?))XD1UG?Dh(jH+AP%imNJ7l zNu(Oi%aQpl&48@K&@&h;6yB+NkERUPh7Inm_1}~5@5#eIlI3q|JhyHu-nRr@;ziG( zn}^>ZO{I98ffzi~YPtjKVQV-=IP|)E>&(Rp^$h6fQ5xlgQWl<6statHQQ!^Qnuu85 zJ5HTg-XY2}bwb8)h5IM75h#Dg5>GYJLbMjaZ z-ae)Z8y%l|x?TnoB$YknWa-JB&)$C*^T6ZzlBOe+A9?%Dm(KPz6!G#e)c^M;{Co58 zFI$-!e)RA$;ndV>fw!X;FPne(*>8US7eD*!k8V#rYdUu2o8SB4ci*_!->^G3c3j6VEhvoL?u`0Z^?p+cS>w~zojSyK7<_JEzi4A`x=%CWIt%F)9~y_Z(_%P&2JsIVGLaMXiqq*k@W|zU}bD(~VMi>yhKf z_Z0qp3ID!4{Ezmw*Oe|$4Qe7AnqDh!?mKny^2Ia#t-9?!xO4mdW7gJwv#lLDtl@2W z^6{M;H*P;1TYOeS$(S=|Pb=tA#B*X4zaWA^CDnwX|m(=Kr;&E#_uacfIrbU?B{(9+r4*VEN< zpz_)J0?d7Sb_qujay)mS!#+^)j8xH2MvM>HAjX7~m=P*=*Pc#Kj*m}EaTN!`xS$6L zp~uvm!0@!E@IRdJKb(iZdi_T7KPV0n<})z?$=`wqK4;A)al+k)l)HvkUjJUO7%ru#+O zu8Zstb&-`BHjk5^HJfNm(N-IWNVSAK5W=1bob}PuLW5m5W%kS5t+X4-DfBP{UA*){ z9)R}6fmcsP1|z0h`ma7WbdO0#8M=R|hV3}unn4WYm~g=)52%P#k0|}*Y8@BgCBZu3 ztC^r6=TM~#_G%rA_9)>0M-u)=^6+PNkWn^uoAusjx*V)6NneJi+BW>5=KB0<5nIxQ(>&NutoanQx1M2K) zqRX75pS2IMK?|Vq-#W_Lee~6b@BHSS559UZy-61*&fuPZsId}_Fd6u98QG7yrY}fc`Lh*Ozqkm^E)!== z3a8Fi!;BYU{9{w|E7T%K?`TOcRDmi0koBLHQBHsgW7HMIVT2fQno{gDT+T^85`G1V ze!vE(4A9(x+fj$k?W@R#Bas-YSh4qe72rRR@E^#-e|@*|psHUeIHh&wC&x#}C+7$S zKvRF1S}rFiK{PsvuK z0OY$Zi~=1P0D3x`4Bm;@Z_EN)`@=YdqgMs8!Nd~+!Y3Ct%j#OmAAPvH4P%4TU}B0g zb5xzA{G3JSsZqZ?KQ%r^R%vVnME`U+xAtu>&rOc+Dg2Ko{Ez41Z-pgmz_uV8;Z#>g zvNuxYQZ*yeFB!5M5xY2EO-+nzD}X|qKR2rPg<)VWRoGBuBMlVNoeuj`~UT z_{o_;LC>ju)rfs<*2yGCUYK^!|Ld?rDqbWptHLnW#Awe^ev#Z?N`5*6VF1X=c5W&7 z883#L75TvQ1tKauio2tzjU>}1bPI4zG)3w7Q1@U;BDCC49jpb&Z3F>n70_5Xd48M*sq|G4?uE%Hm+rxixIP4jj z%zn?vWk&p?m2L9*VKBr1%^WF3I%e30htVI#RF-6oa7wWhv#0)Qi;C?|x_;rvQ{+D<6};m#F~ z1%V^(6X8G#^Je*VewLB?JKBYTCvyKfRh%oB5>+rb9o+!<-8iD%y|w?JPWYeB!#}4T z5l;_y)HF(tT7-IJ!j_5w2GeEdo*WgR@y<5~2s*)%%>{EvJ$OWs_-ECm+dX-TT(GSN z_bF}3yjFHBy(i17*nT>C|N7^jePNyU{mp%6UU>DjmoJ{^I#{|yx+&5DEteeVJaQ7( zu9otp!7twZ-+%t+KmYCZ@vX*VFTDMOAAax6%SReZ7I5IXarg1$>OKn9pSyJF!pZK2 zlBYvoz5mO<`s;T;zB9g2(|P>-rHki}9jf2Aj-Lp&pbcz6hx*WB>ykort9)=~KE8C3 z{wR3=pGo+i$-^I(hAaI+7!v+<2mq32q^+__e64W0H)p0VcQdeJim7jISFx@HH8(jj zobo?CqYg7(9vE$+mX|TRnqrLdIHVWX*C8FMma8TENNkewRN`}Pd8e|06MZi;<-aG(T{A9!~ze7CYHh$L2S^GPJ|Fb zP0R$mMy{~dE=>`2`^if+F*fof1W6o&8i*&rez+gUg(8JMzE%PLXA}Ns^Y9OCIb|Cv zsMiv~ItLM<<|aoGjKc)xyE_d4SznH5e@aDSsB3Iu zT#4b?GJ_Wa{^ACv9E30vyKb*Ootd08s}~g|Xo!6$LcjGnH(uA;awG{pSc{_$)jCKS zJ27d5a1u@0TM-U1J4802&0TsR&ciISc1tiZO*cpjW}pbs=P0Jt?OS2OB(kLWYod$^ zRY1bO-FsQaq)s37J%#_dg#Wob{6krfW?xSov$Ns@ps$YfTh+Wad!7DG#+3E~lQAJJ zUI#DwLW4y9Xe<${l#kg{_@7VspU=ae#EIC`A}a!Z8@SNu;{(Sc5nCpN>Gu=fHenw~ z)LS~OR2K0!mRZCK4_yc@hf+Qx6*z;0TaIKw$z0Veu|AQ3K_?OTT+qCXdr1Cu6pzHO z8hApFEJ+NR0B!=IRI3aV4bsW4p#jdxFyT@Zl1X+gS3YkluYvr@FVhjCpjz&tJqq^! z3km-VdH5@oF#t(WV{k%5em>xd>&uzbutVWve3Q>s^0EUB%x?y6E17W)VS%Xt7^$ry zK+yVp+W}GiiUpa39!(JhZJJF6Zlk~#M<5sGJ3IDv3Yv-s9MN|sbC@)kPI&}C4#Ct9 zQrje(APXpA@+YC5n+!!c2MX}NnDD=thra_X5DALB2gl8>b|jU7F>^w;e!jotm?>iZvldTaP8waZVLAL#tC&Vy)~@%NdSTi-`As59rz z9Br>$8UFI!pZ(;gKmYAlqg(YyuYB|SKlsiY7Y^6&&JEqUe(m-kCW*FV@r{f0M*;qq z68@L+@IU{;OD~-3Zz{#CgU{Dr{_5)8>5}Gw7vB8Vx8Jyoch}O`{hQZsKb%}GZ$5nL z{H60Jdm8pp{O{h4>o@P|8ALF5D?**#S>Y(6*MMroEOsz?T>D;6No14~%peoo4EJo@ zzGWItsAOc0Da6}5MVp%EF*J@Uq$w-F``&=jh~+hz5DI1ZU2UV0%bhKC)TzPg?EXXJ znak?hdygI;=s(n4O{f92=pXR7WRB|SJ$jTZQ#A%F;5zuQNTH9fRe=BHg#YC{{D+XX z4|bB4?d+-kw%VPg$)N`i9wCD7R5Y}8_v&tCuD20lyvg3HJ7rf7Q5~I))g|kg=Bx;_ zVZ{|f@;fNetxPwi!xkB$cEWQ{84|zo6#{N8-mtU3M&B$vzA)f~rGe57h#&Geb^;R0 zqBUNmu^}8}2g1@ofO2ISMgKi>tP)p{XgbNdLhUGdg!%DWz%Qse zn+F&bVE+($(nD}h^^2j$RTmMe2%LbM8Y$&zRDZG(pz`JB{FSSq#*Df#I3_7NSOziz z&vOMQurfeLD=YRC{x2l_U&zBh20wi4qnf6+HJ!UdBru2qnP6Rq`7C5d?=F1z$PBD) z&NNJ!(pN?RpAXijlHFO8Nd?9YNc5c-atF1Fw9|RVtL1R=j~o%TQDUKx2N{GDBQgC5 zJCFzl`-lqy@7&cf0pj|k>7`#ehjb`V#5E$Jp5zmAjFJIsC{+j z5=n(KKnqe&*v3A+hqx2mryc8!l5t6R{b^H(3o+69|B{L zejY%XA&}?FJ%#^E3ICV!@P~JWq~)?m%ZL*p<1v28L=yquX^dU&u?Qp1Bh3;AKg}IC z-}ujtLVN(eSl!R}2H6#wj4i6GNcv9ATc%$|=1?wnmbs&I~`iL)G=6sg=^Yw%&nLr%v=AYOLN}C!%(K3AwCE zw|vSiE>Y6s{olU-$t~)FG#x&B`Q?``pYCfe-<%&Cd^9vRw@$gfBPUJ{^fs5Tjhm_K zcUP|uJ}qhJv*O>Cvxl3?*QnP>GNQ?)-MaRE22=;r~h={u}03s%vOyJZN|)p}!Dnd_i>KXG4}ap)yTgckT))8jM;F zyC~x^7L6HZg}n&xI$TH4$jiV@<_b}-Yi4Hjb$2uv>^=P8&Yk*n^ zhYS%~*epNT-aBxdBvBM{BtOGLEIn8e$?$OW1lgOZL$f5@BNOv0+uTTPK85A95@2PR zphz_igAJ{n-Q6Yt!}?(6S#p39{cBp{Mhb$^c77_%kcc42r;W`mZ7r4+*<1Vns|o*C z^YD)ht=9b1Sk_}s?ETw|B=5q4hWRE+>bVbCY0sodb2@;L{)^f$8g-EQm!2+=d@G3% zp^7&*kg?vV;*H)$uprm!KCFlm|K*4rCP9-%0^&6c6~NcaAP~JcR1Q;k!Z2;xqToko zPw_s2k1aLACz%@uyg-XTJ39nbqEBTxJ3!DNfYCrtUo5=!Q8OFwDOJ^7SR&zRc_2K5 z=0&>o$JZ*@|6fb^zm|u8gyEN=OtEGQCK$$?fyu~w1m~wXTO}wob$}~kY@HPIgSep= zP9%^qb$h5F!l$klQ40ug6$t7tbx6`+G!5U~6sW6Uh|8a;#kDf4MLt%T`##$(i`+mO?%L@bY-w^ zIJ`TooLkZzt1|I*Ze+y{mLnuiwjYXO7AdBMOl05_`;^9cse&U&IzwFkQGqt|M~MZl z4^w71#EA);pXDZFS4m-_F~yj(_?nuiR^w8MhKu4o3h;j;;r~V+{;pA$vD+g<%E%jW zk9jXLZD3w?%^9er3!U+HnO|6v)l}PTG59HOLo)w_xCPnvTo7}-vY21tai!3&NT;O; zt*=`#vYw2cEy73eP@&*lam#QAHyJ^a25rD2+9u{r(gG-Xrfay3?qm^tp81I-;Zp&S z`580T4iE^UXWk3Ni~j$^|NqT||C@REYj3yaR+QpeGtSbS{hL;Rizs_6`M6jc!AaVb zlteMAg>SCl4l?>=bP`UcPktxaW2_0j8=2Ojf5Z+pHe1rSd>4Db8Bw&r@Wzmj8g z=;4D0q!6NhTwTkdUS$}<7$__p{>+4vLu~Qq=qNO*o0TK;4qvxm~?1^mv!onCx+9 z%US|*!d+c1s47y4r`7s0>3;~zHT6zZ0??m?ERtmUG1$~vU^TFH+)ToAJf$P0cylBM z#-Svljx7xh-`|SUmJPF*7>a#kO?UQ15fTEFO%@yxzf>MW;UD)i0)Ut>97-rmXQCQh zRq7k8giyRk0sh}i_KYuGY=&3mR!?{fTKT+c?CUkAyhmzR6Ic7ign$x9e8WYFzCUS(DQjpxl~ za(J~AFZ_l6|8FJy-^#;3kvLz7V!()4?jsdjabSfYM5y5Unc~i6uS<}_3fv^%L0$kG zbZlGt54oABmv=YuWRQX2Y>9pgSM(s6^Sz%biMbd2jtT-cVbT zuBLvA)6{9!(B8aNT$5&&_u+5)fXNVjKJS%}(p_yJ#_=R{2Kp{&!T_6MohGHN$$g32gUXO0{p+5@c-`L#@}H`*f3lUPaLi%50{Z^ zhXt9oeFrj@WxRU5HXZ3IFAo@U_FMjM@0@p1_*v>8>m}X6Yn@N=BmMzU2|Z8x$E(s| z_wkU~lV)e*IrL(1f3kTzy8Xuy*XO{GuD|XvwJ5Tm1^9n2;s3qAg+IgYNcb~WTpE^a z-1r{@=t$BeC{^Jo`BII+w+lh$i1)?wrZLE4*v2U38RfBwXPPQu7}@h0Ko`2pW(k5Tb&mdLVL97x7Vm z{|^%WKgh$M@iK@PHK{opA|JP^7^Hjj>JAu+7&U)khhvC0HWAK^3(qt!$z3djK0Ui4 zxISHzlsa@}pikI$LQs=jBEjini0&q|H=%t9q!rEZC5ruDDyS^T0VibTCgz#EykfWU zb(Fo4q>s#*q%ewVkg*HVfqmGk#skfYnGQ&8g-VPfhQCn%^TUMy5A*O((y;zpY~h;N zH2$a$*2;#?El|>;9y&HxB*PgpJ0Qy1L+caQXqnSdR|Ab!98ruv{s=nHYa-zUIA9vc zhF~8Xf@|JoA2T2!%NqCH;${8-EE|aO&Q{V52D;7-CIj=%KcRF;+ga)_?O195fwFkV zh%;jYLKRWGN5T64y@dbo<>Ak;#h;Ms6u4p;#o~#9iGALs2wowYNw{OW#By}nICsKH zFM$(nZOX6UDs+sqKRMz@bo_kh=Ttf?^s!pwV$Q0$3Frg%xIB<{E;(DniibWY=CBjQ z4S{O{RiO8I(#-N9(leyzNHo;9P%$3``2Q&3|D!zo9ebe38wy7#jS|D2KFEgA^Uuf2 zrNvdkn7~!gcaAty{79%`U1pudNq_K>-DVRYZqBc9nx=uRxACuc@PhQ8_x6PUkEixW z?vbKd_EB~*jS^u^ZE~I3TlD$7tLU%zeiY#UcM|@8Cm;V9=ky~DD#P^kpvIsus%h-} z=<8vM=^%=+6dlp{R(rd5Ij6Aq??W^l|9*-~W*0%MZzVzZt zS1z3FYppF=oh7*jsr*(-sv0|p59_F}+?pG{^X1hKKK%Hr2a{_RZAZ?({07-0&mC#2 zB5TKk+c$4Lcrv$9+1z*f;+0G12S^GzM^eb&{Nk^F^Wn9j1u9FOd+E(LUw`rJ;pU2s z`6mzW-nsX9?5TxE2hLr(a`Ehuj@q54!?!;D;Jx=g{OtDd+;&wH=$+OHxw(4R6o7at z&aILbglz67k00%BC0*eB#K_}EkB6S%8;TPlK0p=36=5K%fyn5wq{~B1t!`?2EC1IY zB>ev%AAb_PMdGzB?5Wass2(nU+R4qIVfj=d=IWcMs!E~;E3nSt1-iKYtfH>D?NE15 zx9%Bb+bb-vVN!*Tk-E`3G7XJ7jfQ<6(=ru)NyAa!LX{^HaFWVnf65y|*_o$HW|Y=w zY{rSL)n)QM==q5il8n@LgONV7?BVp6`S)piHea|-2~_@!5~C^4L`06_MWE9GwN2#s z;r*xKkPtVs)R?t;iQ=+z_z16jy`2@`zY6yMA1C~OoQHqp^Daj!(ht+|R0M!fVSz<1 zG;^XONkI_PHhgYXA0LqOB<{04>=J^YChajZ) zJn#Cn7`Z>5yYT>FFjnX{MVDS$$$?Y5a7Z4$1;DfE{(qQ=4Zwu6HXbC_@e1bwt_hcn zbPFNI0U^EUosKCMRntAfW#|pmNCfCf){lwDGzythWklQ=HwGoqpbHA3;l`jU39*)` z=T`{Nz&#fK^+yT+Kgz?O<;A${;D*7dkVDZm7}zGaOB3laj;!;j+7pqrF3mvJ)eEYL z$w~WNe2Mfwmn3ti!9Yp}+A2e@CR%i%E;9TopQ9S5`2=Z*7e)^L4NF{EcN+gtVD{%*qm@8;pppzHG! z!yaRnjWA;t1Du-~?vx62u6Z>q=?cb~_MB8Q3+jkN=d7s}CuSCO;B6;_>%@s;eO+Yn z-dvm+A0>mFaYYpVX>B86#J){Zc93F(ibA7Lw=F?+frKQN&K~JHSWZSsO1F~9Pj=tc z+usM{-+nrL`;+&6^PAsZy)lgNaOA?PZ-3|8-+1XvPebYQ-t!?P;zh7t5I0_-+7;(>irvm){Uc&$H<>UYO@$lHx!g`AT>ouukbs1Us&7rceN+l@kc2SF=i88P| zQ3jT}PvNd@i6;vKMnVXwqiH`$0Z9JudOWK`0*i#8k>MSIA*p8-C5-P2|8N99<#4it z7z8GhPusf$P@0)iHya_ivPy1nxV)~wS^;$&PUJ(y5Sx;}(SsWqhg%t@0a+;gCONpX zgY667Rvz10Q)IK=+0KnsG5)^*|G%H`|ND9Phm@6SzdL@uQyDl%EJ7`H@{P=W+JQnq zuwP#kmgtp5lH;yd7kicMe&(g{=vo?Uk z0E{4uRfR8k7RwpTAT4EMuEZmtMK-e=@Jrt0oDESU=8Z&94kt{WPOL*_7bkffc?Sz$ zsn1$d!AWVG2%oc3l45h7JQNP;D}~$_=cDuD7XJ$EzyC1d{}1!6)j;4RPzew|VV#MGs0KBse=2;ZnMo|-1l?esbK&AM+yIbl!yQP*n=BieEQi}cLrzHD_Z(alTPua zOQ#RF)|4#IQu}FWbau6*whbI-N4DHiqk^LKy#=Rf_+U(&v$<@if){oqI6|K^pW zO}n!Xzx?QTAAACd-`9NX(wpD<&UfCtJkYj(dHBYMzt%KxV|a-qBBw51I)9?4F-j2K zy?1|bY@SM9&4>C=oIZVeps&55VtZ-Yno(q?BM%AM<*v5+%4f?{BlmCJxN-O4=-e8` ziFz>?oE+$DJFstUZuIf}`wvHER>=_==7rNoa${AD|1ZG*A1D0(aUTBdwYy7`RDZpB zi+qj@Bl#RVySh3^_`SU{J2w3IF*9I!w;BoI%*Bi6Pxn*KX>DeNXwJbWGmBR7ZEdHF zFRhs_gAeZBC;xwB@a#W+>h!6jJ*{y5B}xZHQh9QDH@CI7wlp5BDr22uq=}55^J`@$ zk?HU6CEFk+TPf~3IW?OSO%PYw-PO^;1#r^2nQ0PG5S?noPv|WpC^4m{mljYsCejbU zC{1CV)A8{NaF6nTp?@@af%->TM=|1_`%VS;|C5COKgq*i9vnWE+QcxDF>)Duico4f z9sWT0gKe@m2d$3%84`dC7^57S!gE0EK|^uoP+0wGj6~qBQ7w7{9{gtT!zMu zg+G%8gp$+Re(YN&GhA7s+|b_I|Nm*i|DWdJze765u!W-OHyevJT35`h!Ro+d0$O-c zM&Ya_@@Ja<(P%r3sT%CC@L*>NcR|fRBn{80^MmS%FK=$S1pH75jTBwZl%Q|vRh|?{ zNnDHbzT{yNVd>{hFN2dbI2~33~5~iqAAUc8j2fF*TCe)x11&0rZL@Jqqyu=L!FRo`-)7f2>61rDUHG zgWSQuDk#Su9jJ(b2Vewu50cJx#&|*CmE%IN25vcj_G*Ze?gLCNPsfb$1pqWGc-%!f zos0rX8VCa7ONHT(Hl1N^8zvfX;gW@DbH&Q=p?G{oR_DH>Cr+6${9wfnnI1yRY#Gre z3l%n0J)>&k#jifT|Fpd8%o{)W@gM&FcV9lywr_Fd)@L7o{KehT z#nOhJQn`A z{p$YYX3e3KSKfI0?KfXM-Cesi^YE*yza>-P%^{Qe9Y1^S>_B&Y38}^@3iZ|9k@=nK z_M>O7y!7&m7fd(4Ha&Fv+E+L3jm&M;v>!Qr!TO^IOBP4&d~x-Ik3PFOG`m&Zdid0( zE0@oo>OK-_A;nKMieQmX+t21N6gJf-ax=~`HeloF` zNp8!m{`c=c7<@9lVEHWyy7nIGXsj*UTAriKE6Kw*OUUuvsT)yiLv<-xTCC+089pLS z_ra(v-nMU$j{VRY(`gTYJP5GhmzX0P!~ z4aIgJdSl-#vE{1`;>FF2p8rWQf|Dp_@Ydj^p^iD;Cy6MaZHz-*mR>%%Duu67DX||a zu)RO;o**l7Q+h7qqhS62>xBQm&ck1P;p{12AJVZITaulH!Sz*J9^OIf(vblr&k1+g zf5=_yiT*Ql)E3IxCGGJJPtGGi0s|M3Am)Y^Nx_5RqXLeaqJE-C=Xvg{V%Q6U%7+jk z+M#)thL$Cru~Q*2OQVTImMi2GAuWWLPo@JvQ|*M~&T6U^2}11kF^d@fLjCW*N%;Sp zJp37yG>SUK2Ae0X_7*vzFy%yLP(~{p?exXs13dW{Muk1GHVUuAgmHFb^T_CrWhP8_ zG*8_FtMDPdvA4+m<#(=p&$@uK%pcP7pqi?AUGkm?0xI1M89xSv<*L@Y=zY5m>zfJi6+dTXer*~X99BT!s%(3eEP^TfKfz6EU zjKNkgh(Q!9{_+{udbm4t!qdV3b0 ziH;QULZjeaeMCO_&e8GQVBWMW~XyuRzm>GKyaoH4n&m8r+VuV7jA$2?k|4vtKWU5Fw%Ma;>)kU_QL7jhN8vZFIIs6zfbu8 z`#k&?argO>VpubqRjo(Pz4+SeuUtgvDqBVv`}FG7&u$LR5WCSkaPkBmS-M!=x{gpl ziuT&p!^h8@KY!-L;r0XjHl9ulKYaLTgnaBZEh$BO=YieD(Ys%LtcXVEn3hhQJAeN4 z(Jt%pjy}4J%rP{*y1&WlzpuV>=|pGU4po6~eEH>#d&8!6C!cp$XFH<8=F;@|(BnZe zH?C|~9B9R$cj^>bXK}vc{u4xO4l?gQ3ZVt%^oc&YwQb zvo}=iEX__@@t2hKm?1i7ZT|1QCIA12g#UlY!#}A}o;;yg>ndp#YbcFNW!5?>sBVy& zk@TDvSE{ARR|oETbrq%Ct4LS#6jntR)9PAXh59{`JDTttiOaL$(xWscgOhVnfk*fI ziK@ zfuW%8*Hs-l;%DI>pfXb`8A@u)i(2C}>^|fI)O9IT)y2F46s-UMnDGCPdHAbKkBwVh zo2)w=GLjZA_I<|_9ltpNAn23A*a0YC8w4zP3EFtr%V;~{y{g96fzNoM=#=|0RR7#@c&PF_{XRqa)mob&L{`` z$&TmxaZxcx;8?n6I9HN$w{r!F3)xDc93jF_l7^R=WQayC7DKrpR-+w-_ZXKbxpCU2 z-a8^jlG>Nk*;xg;IOKx%5Y`6HhAG$0AW0mEb17;e^aFMc)TDV-I}jE_bOFehiY-dD znG>25dvE1`_|FOd|D1=va<{hGSip>;CLR`E1Z*jdt2SXE5zs>U!V=CC-oeuyKCEp{ zq|6~J!K^tzSs=)LqWw-IkK}KdXnc@IsU$7aP9()lf8&4B(fC!m8H`=_>Ez=yuY#{r zL()q1m1ahC0o;nYSu`!vDYI;m@GBx?`{eD;A}L zh^)@I_^NdfbDwb5%~KpbuPmm(~&5@nfSnXcQC*fT$B9!Wz4of{E_)a+OxLEf+xK+~{(n5-|HpIickAw# zV;H07oQV?wlcyQd06RE!pdGWxvETe4KnXIS56^l88xNY1QAAH^?4>0qpActfU=q8E6Gb?{S$-gDt15pZVQK{S){R?|t+*#QN8Bs?AO7}g*n&uzjGIM6f$PQ;w< zHWuX65|lIIiF4}plsJ**SgL90m$X2q0j!Hu<~0y5{jNy%5X+IzmFR`eQny_0liDk? z2_5gS_`g4y@c)xJ_@kBAfW}&%uu21{xGpXXG?}&#%US3*%`Xfq)Do*i;scC$Ajo)z zI3Ow+sDTxD3ECzYkvvLqEaDE6URQxkIZc>+mDR+o7bN{ml7mR>6O=0hE^dan} zhxxb*`r7Oyh%g>nfkm>7U5A^%?K=1UzqZW(Kb7$RQ#ts@rjE%RW8z$LQ5P`BUtY<3 zXd=yZ1$!BQ7B=^9kc5`Eu*or``sD82{b+f956>p}o7mOx)T_Vv$A0aP{nDqNYS=T|bK&hDzWM%*k(ILc z(=WdA%Ckpm9*bHDrbx9`jsbv*ymfB4sa?N>hg?7{sHhpv6_7Ii24rXQ8I z9659DnX|`s6#joY;s2*|@NX@9G}CwG?blI_U+SC7ujxAb;wN8u>FLAhV;6|by?wj8 ze{|+yUQwjiIfm1H>7ErTdfvT#r)Pk?JJf!!X>2{v+Jtk+!dM?_-R|M}$7Kxev(G>C zR9913{)6eE-rKis8I`%br>vp<(4mgz^85$mJvTnOdi&n=Y5@vk()o0>;QLLD!Rd*S zp`np+JVSOBme)2k>li}h;qv0_%oGV*?ys0Eh7dzaQsS3t9w^h)m@sBvNo9RwOLKF5 z_5QsZRwtd9oLPuUFKQ{tKSA0T>l@9?EKmkMZ}0vJoYCud6#joE;s0lH@NcN2X6L?L z4Dig%)YSCced2G+iOsI1y5q*fIYMSYV{-oCqrD~O?;$?4ym&W0c9V=Qs`R1?JnZUg ziKZnubZ%+_zkTxXJlcc4SA}m8Za3%ym%t}%#=3B8+>iBMHo`(~0@6}b#+aCglJDq+ zaYo^S&?V`9pvp)cgW5+Pj?$6kC6)uStSiN;QXP3}e?-l9t_&l;dJCPyLleMyZ_I%D zYD*ZVTK2>djH)IJ>KL6#bp&$6!$bSJS7-#r2=%+Ypd&_S%!T ziu0cJ)%r28Z4^}CVte>-S4S&GHqw1j3U+!P081(`7vbnP7w(wvU%Y9Z=GLQ6zwn8d zpFexFm3qDlQ+VT!v4j+3qid?$pEo~n_1*7(>pMRC`Ja0ERO|lr zslIC$Ke%wMZ(_B$i5^~f=0tPxQs0N)`|{^M|K-;&4z5%ldGTj{<&XTz&wcW#)}rMx zT}yFA9h`r(zp?A&nX}}ltKPdjNf_FN%Qt$*wL~_zb>Oy01?Y_jRF&)L?xU*Q>hAJ} zgGX>VJwo;Z929rd{QvU_|39CDzj+Y{?u|??$jfV+nsnP-#X!r7JutqQx4*89KrX`P z8Y&9&mPyEgDRyua!+jBk`?dp3)e+w{HewNIYBQHI^{cBZ%cugqvWWSAp#R>;)YAH1 z@_=+4I@EO_dLiN97zqc-6St2NfiUx;-5Zqs8|?2TsBCg^oodi+T}O@_K8Q#_l7_`u zoH?;KZshMZu{UYG_fp4g5l_((m7WtD5w+%$fr zle4CaOljaK7^~mn&cgpMB>ewE4*t5;k|J>rDgKzrm89mggcivhBGQNDmH~HIm9%8W z^9FMfYRBeEmJ#1>8sr|uWtEk{$*RBckV@jfM&`dr{Gcr;*m9;(uyv7H+VK*#0G)1! zE3WUcpK!rvkEg?)EL*Ekgbt+4&TLD(ovTso;*t_UML>#1vgBO&B)UILfx#>Su2I+& zeHwj1y;$qg&hr2JiwXa~n1g>TitCJN=6Iq!CDiw_OR0%j1cf+r_Y`~(p<7K^3fY#|Gm%u-fM5)p51rg+)w@Tul~_r{>f+B z*+XBCJ#_!Po5hzu{VIXmHM^#6zx(Yke*SmA`u$6T%cTdOe)Xq+?q@!A?ojRS#i3i5 zi7t<2x}o#rnWxVjJ4nd!(!@YFHyjw9Wn;0wvX(tWb!p+Q<+<_j7@GjhacDAv? z?0K}jG*4OD$O>A>wymbNwvs*G($sM89n!^)lJ2LZrlF;|v978V50!^h8m0ApB-DMy z>>*oPS_mxO`-nBhWUzrM6JFu|@y$mlOVfIR}6IHNtzJ2nz;yJ-?u= zwz>5nE_wJ~G4P87UB|Y2gY6T$r(!nU%L@d1^!4j_m6tLss23^sdjmyqV*`HIS_YFO&a_ZPTqu={7b$!4CYkje`9QWOd%{9|U;BCosl zswrRrg9(MJ$%5Ht$!SzoS6>GW73A%#_@BR$@c%10_>(Q$G}I3oQA^WklMWRvoQ`0cNv*f?On(+UtIruYs$nQ+V4x@t8uDg4LKgKZm zei(9(K!9H!qb=+y50t`FL|+*Rth)}801^YlBZP)>Af$zD2ksgwcVx9qN1uqp4hh3N z&H>(TZbAsZnS#yN>ps*7bNBWrYfKd7`EVV>^^BM!A1S${>Fp(@X~J;xkF*G_DJ5oF zZEqW7N?xn@IMmr%0WcP9TjtL{wuS%ywS@m)%fX)^TQ{Ks8Xku$iPfmhlA>QfE2DLU zl2K%c9osOoX%TSPjmCG}J?plBiLdh)=fX1xa!|)dzs^$Td1M-PnuaT8av{~_4@A{O z;M9ezk5$1;v=P#yG`cDFX&&-!n3H&$64nAQb!&`RajOuf46Ro#?a22=B&!zU!FV(v z=W&yXN$jDLZG3FO|F0+f|9TGo%!!z?jGTUx`fIWZ?8!&9{s50z_l9`yMqUu~vwDKU zb(x{87V1*r4pHV?hOvho9if@Udr`NH^>^Rx?qkj0UD0v~?aY}IoegA;Ax8}Q1Bx&p zur;@Lv^UollimON`8R*~#ygkpPOX==o_y|=S3mXQ*{+7dHQc*N<~TgFR#1fz>D<$& zy6Ow=4_y5I*M9f&U;6g@-3x`SXJ7q8zxWG3_2Th{y^Di4E}p;eQP0FmQGM5`XP!NG zs;i-ReR|-=#SbrBzIBg2DjVB6Iu11ABECFF(SRsou)eo+8^gbK{{M}H|KG^LAL~sU zdYrm)q&@cdAP$sFB9>(iy#6Q-KRX>-T()!s(;{UV*ooy-Z9IE;J+~uiywe=*KFVa| zH4Y>&lYFx{L`-JpMF?G)D3YojY#Qrpkuo^uOf^s94XAk}?6LDJd!3owtStd2(W$@L_hJdqNjgrA%l&1H##&kUiSX{dyQ@ z+sT!krT_h#3ID&DgTDzFSQH8E%tSAt2Zdmkl7J#yI)d4=G$_%z{#tjB1dav`2eE|O zMj0+x330$BAyy!S!8jtal*UMuI$gN!V5cAY7}gO@$gVH0KPaJ%M-4iNrHN;I;us9e zmSY*6D8JJ4UrqjA7kC%{jNONRh|{>Uu4h!eyrPmjt#5iB1oPiv>;K6CJ^c&iMm{M*I9i z8|>^fg0{Of&SnclX)y*T&f@m3mQh8Ip%}UzuSKp{3lM-54*Zev3B;kQaP8r2P^6w4 zf*sC5x}WH_hzz0+$m31TWJq^$K4iiq-h@RkZ$mj%ABLT^{{QWS|KHBRUzQt3=5oU* zdMG~gNf>LL?`d*54`Xth8WJfF#MILww#fuk$wjb-r==Uzc#*Kh3C*4j`jTh3z97ld zHi}EYoaOVf1~W@#;sX{tCs0^-El}1E1|9OgoyG}H#r4_kL{Wj>&w{7> zq0}3l@XM3_AD|u|Y*IrI_0IDD{<{hPzng=9;+bj09q`T3N_cJp888I0;g6pH<`r)` zAq+rb*fZ<`{;V(02W=#xNbm`V#3FcFkyvf$Br%^fIVFK0&dgs^zN2VjV;?8jl)dQD zCka5du?l3fTlkeJykBAk;vYBUe9(}Rk59i{k1hMZznAd;dq0MMOcqxGhuewb!pg6N zjVHl3kO^RzJ~o!a#;%{1;f(9~Kr9$d{uph(v5c!)c)u$jvEB zYhm^L6Oe3!qhe5(`}>&J&Uc>4XXQ~PfkZChHyZyJy2+%=kl-?<#ZJTj?gp~cr@vZDj-#Y29icVv6ZXx zu<@%t^fV$v&}{@Jz>q?ec|uj&@y(X`{|^%W{~!l{Rq|wPDl025#SL(EacX#=H`VPx zV{-7&k;7fBnrrUQjE_=4BkFJ*XeSp~!OCR!m3MzgU6t!24~v>kzVH*D{p_b-JlV2; zZL0tJl`Gf#rq)UioP6fR7tVB4tdCs!{+B-Y+rRUTx9=|Q?|k8B|LCv(+8_SuXWI%F zdoKLwd#}HFxqqps^~@`u{n^ic;#A|V@vEFXgD7m|M;(K%Y=wUsFag!sP{x8Z+7eGqtfk zX*i{6BBBOlQZ^!s>MFR6k1hEB!-W4o%)y^@P9(%#doYK&e0X$nVKu)Pm(E7)v6}9q zf}iU5m5oR2>C6XB6!$_=7I2u?g?2f(^RM^U&hZ+-c`WgEFQUV^)&TFzU~ z5%+|}MNE72Qc5p&f>+7r#-FMra0-?ucoPYr&2MW8X>t-^*V@MLZ`J?(qlEuI%E2FN zilUd2KB>JDJB?j8`O_Gw@Wf4`0MZqZu`dfp%U${S`$VOe^8F@AV$W+7dduA9! zg2Rw*AFFuss-+_jpE!mEKxI9OWi-b4bA`1V9w&`f$Jqj^9pD+T3?0W^et9FVFn0Rh;4jq zng9Pd;s1|w@Q>tuDEc2p?H;F;?p}CETXKgP1wskmf?b&k>Nlluh-I~hDcm##;lJzBm50Lg|wo|O661$ z9^?<_CblvBTj&2jN%;Sh9Q>);J2*OZ|4|{Sa*mxib-c5=s&Hco&)@!gAUZJ z`zv4k%6HzoGgs7h?k9ioSAO{qeez^1;P1Zm&c(YEYo!OzeBv`d@rkn?We@t!f9H#z z`}~)_cX4>5=IF~m^Gm<qQu+M?9}A+ z>=JQ3xB}p8Xx>h^bei~~c4nd1iw7Yj@YFY%D&^@ zLrFM1%JNngW~dpl@bHn|M3oh#1^F8*OAAyVv#zx&<{gFqKTG)kvmE@by5+*Ii9OQ$ z;05FvL@+RvS+o4gQ}waXOH)3qVP0K<+F#vtvASqPmJ72OU<$?`3m2=#27Ih68)xz* z1{@co@Y!4j^9lU97MHQ>xoALX_{yT_%co; z&kVuHm&FCxpotsObZLU%5IZ&dSs6TYYt!=wsUQr0Dxon3u?!TKm2K+;a9h^@f1dFF z=Q;S}t?hhvNFP}9ujgl9T9gJU(0dYbwdylcQJcpr5JQQpN-M>emmmXJm|ge0^^o&$Fajw=b@mRLhVccagED>gAFoqxUJ^n2OU9r*8VlSn zxbh?aNA56UkGPu2i>Wvf1X~X`1)P(-k{^?NpHMKE2<}0g3$MlGyY@gkb0+C1CTg_W zQS<*_B>ewH4*s!mbMcgumX{U`N?U{>n| zQ-Wp(F2Jsk>;~)+x9_oK{r}eq|9_o>f2hWi{VWVUs@XNnF-Q)qzxV^8EDSektT?Nc zHXV+n_7~qXR(aw&CCrJ=n3|>15au zv`=Xq@T@8UEe2YbcyKI1$?V6uj7E};kPGNI{>`vF=l&a;|IT*$y#@b&lkopHIrs;T zV#`kgIbJh(HPUHn+id0Ja@5jD#;B`0^b`O&2}L8DTuGF7#@Ru#=!B6kdbOFDC0Y~9 zxYkgCP0Mg#4j=&|w{~X`#FXyh^yi$HvO!7I;g%#Q$&(zi59v#z5iQd$CXr&0*Upmv z{%ykl-{#=YsAv~6U1u67w7W`ZrcibG9DGiNkxxeLgcC~yDfu*G%HW#lStgiL7O z9amktLQAW2AhKCf-r{-{IsgRqC*vvvsjLR0?e%B{GHip4oR}QR0Gu#HMUUTbP=^*8 zsZeGvS8$bxrQNd}a+Tl=T+ft;zTh_*D|fkv6L8Ygo(yi4_)D-gSd7r| z{xRE5e{aG6-zWV4eGdK(R~j*Xr3HW?a0LBf*s`&*6@NO`4iQW@j%EcW`aFyUV}a#6wpP`gLjX&VuH(!SX$2pR)YqnUbi&Yn3-$L{g5p zxH_#Y-i00$U#RJuB1qZe2S6{`rr($CnEzG5y?2FFyBFXMOSd{MfzT zzIzjtB&a`l^u+P5=KbsAH{bpCSHASM?|slSUv%K?r~l9||I*LC@>EOV{lOa_zW3h6 znCHr=*k)y-f%wair zw7US^FCGL9H5e6eEkI%5rk-^=?bT87V6>STCkAJDia_uERrSqHO=yZ!>Ip(VFdyhz zZU~3E$jBg|Hrl`=*umxkgFp~`DD2WKVw4`EYycL>Wc^>k9YMe3SUy;)u>2bs9wuq* znq;o2t*fiqQTYGIg#Ulc#h>h7M#B(}fjY$Ucq(d8sGv_F^ingKz8(*Vs6h{leK!JX zaIK))8yfvWYU!cajreLS2U}p_aXxwicln5Jk!cI)OdU~NiaW@DBgi9#6!|2uE$BoL z+TCO#3caIg|6Ms)ZrsefrH4h)EjkGvg8W37D9HAuHc&;r(jV3XYYC`uR<|5hXY9@> zdy)`~{1F70G=wS>DQSROX-DDzpA!E6DF=V%r9+^Yo+(~*tVilYv1dfD5;<^KoguEfIM@*#>?!9zG_J|hPx zn}>hs6BS)-^T6LjVM`HCatKWi^O)1wAo~%$1Vc`uM%FAz35o|&BJ_~gx_hL7*Iyay>~h|Exv})$Jx-Vfl{dJ8G3gL z&U^_X!6ETT41ggXoD3$wY3@X)aZ-x%+k?{_JV3CM1Qf4+z^AEA)=GTin)DKvMI#W- z*ogu}MqXa+<3!t#+)#=N z9>oLGB{W9AJg>LoRB#xGAf1f+rCZuN>OPzT^dCS>AOIcz1&W<*7p(uF|6>dO|2^UV z-*fOc7aNWl`T*e@jku)Kul1mpl#w2jY`M6EJbk)_;+=({7t_$OevB11GBDwGMbh7h z?6u8{#Ew8Kttwi#eqa~j8CVzbDcXoUGKS)l&b3IBFu+9{PxzgNlUX=)QbJBqGI|Q86yzC?3sHrX5Dw1ax*)O0dUja+*Ka2L ze=`Svxi8bo38!qAjT1Yqh^|!(6dDb{9ysJMIb#m0vkxUuNK(mA0Lp2iqEd<#J?3Jp z!C@xQs2^z{VrSsiKxbgnMtB4jgotMHUew9j`hzeHCbnf{3b2?o&yeX5<|v}gIpH2}{5SAsa35mI8mPB*zS2WtS=gSIVc zYKqSg>$zcU9Q`1zB|a4o;;MnXW)EB-HbJdCZ+40mz%?rt5`INHnnp{m=KA_CMm*t{j6k%9%s5~%HVs%gX|HhzoM3w=Dbhy>dd%?m-%6w; z-FPK0o`fdihMUB}2|l&w?1cv0GZXr=N6)T|%eUdn7X1Hr!vBBg;O`8~Mn1+pn|%o* zK>`|Kc7Q!;TZfi*kPg#_zfjIV+;QOC*l8pa`2By z1dcAS0K=FFiIBw%4n#QZC~-E!i8g^zfW(FVokmg^{lmR|yy4eo2!CAf$ALc|M`KBg z#y01&L<*dW&!SK7#An_l4%^3xyu2^x<^ASwxymYhJMruu;uVI>rcwC*C1Y=IUWe=_E6(%7d%t8Kt=y?#kPFeGXH-& z;s4t?_{(111H=X|f_V_=k?5VHR`^Ru`kNyojld<*h-Xz0as(=nNTxVeauXx4;V0mc z0Jv-uqr}S-9)Sp*@Nv3EVClgJNmLSSo|^@tu}`skdyfufSb(ehNyr{jNc7>3RGl%; z5PeCY9uS4Uwk7b{KeYw_|C{jtzd87CvQ@_dm0S3GB-f7c?{K)qB(Ri9@an}*$Y{o} ztIB1_bp&yy3xfA{R7FLsT(+0MB%U z$Ij;T6tVS5-_X$pTm1H#xGo?`{iZV-S4_Py-IIKy`#m z2Gh*R#!u+>o#xUAaiVJIk~%TcI;xdRYjZSBozhp3f(Y@Gs7TD4*sr;3>%Xw*ezq@yp9PX4q}iw{xO)r zMb)b6>npYG;umz6r$4HPLgF~PMy`g9y|r=W<8(Xa^cOx`=k_>`PnGOiG81@!q2IKKh|>QY64zRwX}e!3j{!9v(N=Jh$Kx!Cmple2242S8lQm^&;k~- zEm%nEN<<|R+d?29=wwXuGI(?RiRnS|fs+hdJ5gw^(*2H)5A*^l9bdz zkBK%UU8#dFzhwi^AOD0j6Wj*l;aNyw3fWRRNnsd_pO!7rgM_PnIJaBTMW}>E9kIBXq1Q1#f zhrM~ESLKd91`XRgM?ejY$bMwxVMWk`iIl>G4O^is$jhaOTgBaY>S!F;^AeO0Pq;Z; z+wS)k{J)U!|3VJ_XlEQ-hf$*%7{GKB60s;CB@1}41O_P0rfgZoA`lCO#N*(`%Iuc8d^j?6=^>GSvDgZUU$wuP^70+xyO~?v3J;G#SY4W!eAA&bqR=xx`}1T1cD5da`^(X zL1gJ5d>Ycu!2~oxD?xxJ=s{~zocqVM`Jo*=C7 zduPf2UrzXcIR}3SP2SCsu~p?Urz;Wso{teG&NJkES}Rn`EkIQ$!h9b~_AYX*$Q6PM z$8ViCWCS!;q~`+tzTqEqX5t5kMfM@Ut{NGe*SixcFp(D^lA_V1Pmy{;vNJq{01=au z;FcbfKio$kP>59O3?c}gkO)c6B9DR&xRZQIqJ($o@U*k)zkMa)|CJp4-LJ7oBL|CW z()l`)3SW`bS1%tZfvGI1AZoEEQ)O&8MYdWnvJAfyEqq2?3}UEROK9gP$9~^6oI7!y zj8~Q|*N{iY1~O5SzU5G&>>TWg^#Fepc_^Zgr$qNO)^iTyfn)_dx!px?K6N~KtU2jF zaHqma7#E^NFeMikt=k+MJ1hRV#ahx+O38A}j zrjmIj1~sKrF+EHH^G!!RSwG~Gvbg}*q6s2({EMX`CEkhEUVpvVu2}DkQT4&`6eg*}kw@Q_gv5$r_f%AOs zLbhtd?Rsok|G$>-|5`5oBCn90R$vzaAlVxeSsB?3JTX(`^nnr6KUgf%UlfZce2Y{} zvS}Se2^az<5^a%rjdIbrhR%~N%tTVK^hh*Ks_8OPxeBXUf2#*&@Q4Yffi+59(NUoS$Xy2DR`KJXE^Tqh6M{GZpPV+U zE87)&|F13he?8&<^&I>Yq(U36n6gPZCI=JC=_0dK984=Y;X!Kd=#wN z?0-gB&dQwu3HcvpvM&mKlR6sAUGMR`O#Y-v5LcE9eh-$BQA|3{kRwbysD~>q%MjbcCFi4*Ck<~*|}W_9+FKmR&8rOQ8&u0%(7!Scew4+=DuQ`Bt#lVeSM>T zI8ResOK%>v)x@e=U2ciW<5QF4<0HevBV&^@^W-Zf^D}+1Vw95-(tO26k1t9`u6;ySvuC5`PARBzv_DBXBiUU@I>4~vX;hLJAUtBb?yNLyDl07)nz`*(6|acO}f7RsZpu3IA{A;9pT)*Vx>8pry%h{USoMNzOVpaOe7! zOCNsl?z`__y4f=@G&Z}ky9kJDn-3m7cIvtf3 z$QVr27uCU#CRq8Sa2V9aU8);e+Byy%px%4Aq2MO@TbdlYd*j-*>o;%r4Np-Z0Lt7` zTG!gq(b3k{(pW=Xcr(XNj1CUm8y=h9OcPw+vZLnzw-Wx}%E7DXZHVc_p&2KO> ztE$H&CSgqUkZh>wY)E985!)ob@iibckYc&P0v$No?-(PwJisa968k9TwhaByl0Ih z;M3zneLcNU^W^OPH4@d6u==>5q@t#wi7XvW%`MGM4RtkUT{bc&w)Zh_iRz+iq$NTs zs%hIIMwMpbrGV_*)aY>ko$HrA{P5DXTixA#gOf`nnA}@Z(|+vqnWs*kit@lM^|e*| z_pB|>OpcEZ_H}pn4h*wcEUo2pZ&=iUgB>01t+1)uvVzAei*r+BgZ;fd-M5+ZH}3Wi z1M0)a`=~!$(|Dls=&>VRod?@m>#ItksJyi$NMv|qXmD_FbYf=V0a=czanjh*cChQn zu^ol~cM|^J$-&<#(oj=gyqjzbvojMzOr*;fFK}GG**iQrYv%N_`U9OuPM$t<=BZc z{KfKb9+=&aRu;wwx^LdRee33po40!I4ULXYEp8N5QNy_N$O*e*%6GK4)K`#|W_4+9 zdUE7mU(emUcf0xS9UPl^u+BnO-EiPw*P%m)4j=03XxmZve>dU(-5mUz>#Fwe%imaD zoS7OQ85-!ld+XXqAH|HCTG}XJ>eW*h;`Gy}k9D;lXs#>GU!I?u7-BMCy>{zv-w?we z1%p}-J@w3sFTecK^DHDsfRnlb3*+6F-+KMq-}>fj-}uJ2-@JIU=icbtMoDAmiPKL% z`@%~vzi{s4(a!dk+Wmk^N^sK$O-)a;CtF;3tRzuUrObygNz#7P_)oEN_ujd6=WcI* ze_!9=$kfv6E_WOC&8=%M&x{&4e7FDt{sN?t)( zZ4=lZK6d=rv7^W_E%lW<3jgmV{J)ojfAQYOtM_Nehx_i{x^exZ%NH--=ouUtpLwv$ z${+1rM^8QV)UnP3P4!j9yB<;_Y7hdsb+`B42RG1)z(;3 zUif%n=;noY-+JTw-~Hxy-gxiQM^|rB3v7RV>%p#LXP$ZX%<)5AU7f9UEZ;~7mT1D4 zgH0b5om@Of@={e@Q;9|ib%9hgJvlan%r-PKI%2}8@u?ZgcCg!Xk6&6<+W`D+2M@yR zTbdhL>aFdu4l%Pg92y$DH#jslHScC(*S-?!gEcj`ax~Z1TEu+!24y6scNG4wC;VT} z!GCgWkV$f@yANhMk*%Rsbq5X~Kf&~DYi+Kj#0q=!d6sZ?Zxd4#2U*{>M<&{G@X(>I zgDpse?90)~Bkfd#73bAbJVL?qx`@w^UjvhbS*<2e1IH(>5;7Igp z1=(We?O_(z)HfhoG&k0gyo+t#?zQ`~lVii+H#j`ZyzlMj;il)1ARmz2DauGww;pk{ zzOJ6jQmwLlqz>R>tY|RYK@`| zR0vr>{WChu{A7ZTLK?JV*h}_T)KN9)Kx+$gvZ0ph9;KA{B5f0>qY`FAFk`|1Yjv={ zudJ$dgI|YsXTRbiBK_k0{0u91Z+B0B|GmMH$$1LBu<_975>QKj@Eh#izMwSvW)863V`m*EGs&I;c*`{}P3Ms7o^3f9u-iE7xw^x_!5QbPg@$Mt*TkOXm@4 zU7b96{BXyP!vBW}{~zYy-%?-AV41>ke%iUjfR0Zhey>{jP4TL&qvK$E+kxf=c4vxe zG3W2~-a!IKtWx-=!pp|40(J>qM-Fow>I8slq_+H3gi5k|-s|h_V|f{wm|0reRajPC z-`vjlA4dY~IM7s6R*<*Kc5Y&HsE@73r7PEOb@vR6Org_#w5O!HrQ_&{6DN+dp=)>3 zUsjaA@n9iDRfK}U!I9DN>BZ&8dyCKvG`6;Pb{*6#RrGmnjHU4X{G6 zM5qB|`Br#nqb({t>WNWohzdYZ*38%-JNlkpmU{%fNlFi`=NDHsG_y}9`>4_g+yAQl zu>F+>$Rlw5d-v!Vb>0HWXUHSk(9+(~b%+I`v%M8Xg`3eW_ zYEO9WT7Rf0)q9tX_|02zYxV;(OUq2yO4NiMoo=n!j5XC&Q#W$g+VUdOTo6HjNSO<1 zZ(q|WbLr%0KY(5byl9KiF+M!l*W23zAw<8l&SP1xsb@bT&9JmkSIov6)PoK38oW0& zJc58I(;%a0d6n`OrDwq2_s9u#(LdV-g;L9=Zi-jMF0s(~}mNIKuT58?R0pn(yMk#K2}DIf8~y zhh}M=%i_Q~%?9ku?ymGFNn2Y-F$ zFrVR_%RuS?CKNi!a2NytIvRMu2}>Imcm_`+upYnq252V?%c_7<-5FaPCi-N`$8ihf zZJ4aEv=oN~L(=^N10QoUTnsXIZ_x(k017bu=I|l)+tN4?uHxa*qc5q4Ey8C2f{>hW z{g4#6HX;RhWE_a}_R`PAub?LXo1HcP-%j|yor8ZGB4&fbsP$JmaEdZk_~K=A(^=(| z(Z?@_TI2yL#xi;MgAjznuqQwyAE0n{(pzMV1(h(n+rVC=v+%{iO$TWC6hwmh_#J=v zx46egcAl(Fak-BniTWhmBgjVdv%4hp5PB!xh(=f2R4O;iduZz3!n2zb_CEr{@!jlylc9tuW>!U zv(BRj=5^{T4+k{g+9(dMhhsnr<_XW9DeEyBNNRj#GzXb`H?P{(#}@yucN6~a=HUNh z11VE=s1o~kbYpzP%fU}CX~>*>(KN<4LFUjq0r`~;uY(@cB|FY~&IUeVX=h?#t2k0a z+HyAa^f7G(+_d!IiVS{OmOS5YA5hYW$B75D<7k}jy7@oE6Q+M;8^3PB|Gk9&d%5@v zq(c>732;UyfOJ6pW>g(wSu4krS(j0V=bUnJQM^XGL=yDu=N`1Nr;iV2aU8Vxu}AQa zj7Z|Lc#O?Uwdb?c`pNy%r!K>Xae|koH167}yF5|%EIPtQeKOVqN{E2S8dGskE z`?Tqz?fJR||MLm|^Evo~Y&sZ_Y-AiE$3BTtF{fk?9BH;b87%jQF}m4^2L4&Y)Y`!h z06c5k_%!zy9h)L39q}x@a4sftY96U0=4~|6#)a!yNoGOr8u7gO!Fc#`5El$-s-TjKO{K5rer&1`cVA@aBgOyR$Js z5CXrl@6Fr96>$NAn;m5D1Elyndq&Q?w2P-bKAGmh7P5a}lP9S|K-2VOX<+eye}oV! zw+nugJyg2ic6{A}|AmDAg&h24rP;*E#yb8=W1Y+*u!xMj{bm<~tEiG=TIusLL3JEgdBmWDc>D=h_mc!xTo&^_u(Tt4OB53dqqrq^Q|B1br4g0t(oXNrT$GNa z2guSAq}cJmF*HBCsGd|pM5V{GquNzb#q;x6J~A>&CMD86?|79`w)e3G|4Rw~OF8%p z10oXx7n3c)$jCU^7$goxH3jS%5oVHx_(5;0$`uv60U^Zh7?q2UH$fMX4PF(nkylYZ zR_We37rKArN+PW^cif~k;1?;H8EO{OQ>~(Je2{n+9w*+p5lFnBNHq}-KI1Cm+4wJL z;?pO{l{^s^f=s0(`2i%7k;itXfGzl6PWWHW!QUZgI&Y2@@0=Ed$U6O8}ci$>S&P6E|`O$3xWh9E{{lof&gAWz!Wh$qrVXzewGm=4T&MZ zcmf)_W4I_}gw`2mg=Siwg(X2I;*{qR<7sWf!$@yX8x$i6$r{2I?WFujIwUL3BciXJW!yY^>eMa52y_VXOemfAh4kZ;N@&JR?5Lbwp^m5bW92 zg^4XJ2GKK9(_R5X1I(t$NPCcB<)Q(UZuQb^b{b1WeiI!^j7TH|F(e#nz&Dg&;|L4i zz;Osa?}_nIjxoFj7Q(TNxG`M+YWczwg;)h^RbZ!tQxRi?*^xWaHMXi9HUB?K_ZnAX0Ei;;Gsrz6Z48ag`9Ss< z;A51{(`0mhS~S9>r~z2JEWu+bY8SJi)?(KTB2i;~frqeYNQ2mlA1>oKs>wJ=O9n)_Kd&bIujb%yX;&)e zQdc#qJVkL;%eXLE8Tudt!z|4bhJ|SNox+gRTOyij>_2Xh`%yOz1<5`e9-X z?yNaj!y-AQ5|JpO$*)C>S9_%kd4get3ZnRWMobt^14-IQY2FYFVHUxVNc{p&ip*sY zjY5V(i7bi7u~5D7;8{`uo(85b15+*y2IB)@qb@9D9okXz|60QTS`PlPz_Q4uDG~{w z7(?7}jL6_?l8Bs{`JfS;Hp{E3s>+F@m1!`Sg5!gP0+z!ouVxuBpO1eT!4K)cG+aVr zn;_=NkgPS?{6JnUWB}`{&5#G8Mwp%kEH_T!66*No>4;8V2^@$gBc^b9?a>pLln4@r z*YA(`LskVMiH#baH{zVQLu3MPoOzfi*yJ0TzO(YbTu=C4&%xixVsw5=sw9K8+OG^g zh0|A1(XFbwuC}(ex{6S3gFA_&eK0qL|E(+T*u*5!w9Ak34FV@t+bH6g@OWq8DoVIF z!dzs33D+#w?{doSu{c*(SK{%F7Z=_@hJeVGaUqA>Fv*GjhK*~eO)6Ridv}Iv9FkDS z+t{uulqB)b7SK}AqavRxgS%Lu&K3!2)P;gcFR^a-V~hNMBjJA|2mjb7F`{zu@aBkF zsN&2KOzUZ4o4m(Ki_{-V<*Wi`S|~RhfPjsHNa}%G<_uvQLj!%iy~YKO;}p2MtFSae z_#2v9T3aad9$7%lGbfrH;kdyut;AQHtQ2MoAXX4@ zE;gRDj^sl3tyj1LlZShdaHIqhGwdUH6j45SANKd?sXB|VGKI{E5jfD%+1W{y=ys-o zE%@I|_}|RIU(asBxp9?UH}GPXc|EL)(lQZ`8{C%9v@$cUZ7skC9 zM@_>-Ec=Zdzn(|PNm(VqLCr0#Z3kK!>ne=;cx1rZ5W#@>o)S!KRMPy)u97OkyG%UN zXrw|}5uqezs|qob)B97ERS+O#^Q+SDhA%wVM{KxC+0i~h7 zp`j^afy&vx5f-l7=zYBNM}`Lb@7}t8{U*NI{ez>^OY6G}%WH@_XvgQ6NCLu68i-IW zgkS7py*BmB)MUgQ-6I?jZ{q3u8+(h15h3=2D-IuOCq9{i@CKBSGYVf+@<||G#$JQ$ zpZD)C%uJ3Bk4)X)$lpsy*v`uTcRS&KI|u*ug6h`xR-*hEr8V|Ogn|+TOumk>g^j}U z+WMvghfcll$Np_N6a>^X;1xYsC#6 zC(bDLOg&Nou^#YyW&IJEg;;jN^_bYuqJsQK52l8C?soSL-0Sb_ADLS#tZ6-T z;`F&^UwrwKpM3e*)5i~Ywl`H3Jz}p%>Y0(AYZpKK@WT1GfAF2}zH$EgojbSh4lV3! zIDDGi2Rmy1-%0r2$-)2JGta&FiI<-}-deG5eQ|oEALa~89Vfc?(Z15Umd;~OJ$3Tv zp~FXxpE}XiShi>F!Q6QNjSt`Y!S}xVt=C@r)(_shIxxMmyQHeI{m7XYUV8D|siU23 zO*O^&=I-4fLhu33`)>2n#*BzTWb)bRNg_t>uWY#OBn~XH!8A4!=5;x$*RNi`*-fH~rALJo^=*ewJ`KHo z_NPAm^4Y_!CJrjkUmUz~<{y)F|>p%ZoM_pz4zK3Hy-9s}=i-ZBqt`^lawHU)^C|7Yo!S0Qv@qXg($>1(yMNd6N?u7#Lt{-Dxn77!C@oZZ_;B>r z#SgFc4EA05;WxkgLC@TyLO4MKNS`@#qKg2wvVH3d6JtbzCDq>JJ;(xtg|{@;vnmh@ zR9=WMurzw>!*||!|HJd|yz$1nSMSX~Ho(2Pc}L;jo$&9@!T&(l$qxRxURhnk7r}vf=Hi(h>$~~URT4w6>JE<0uN77|lM1A!x~_p}dNcyX#M7^? zJtjf~ZA=l`g#EJXx>~Zz#7aCpbm!WY%a<;Fbff#;-7u(6rNEM>Lt1HV&s9(OH%_HZmsf21y=~j7uu(n+f5nM5RIkrTNj`+t)w3L|&MyH@ivT^SA)P zonT*L_7x8+OZVlW^h-fFdr`YW0|bw@G(sHvi}yXgKQY+f*K_;w`|rGe`R>rn{f#~Q zN!8QZap>?t_JqU$7m$1iO@Vr20>jbF!2s$Sn@H(Em{C#w%Iw%6Oa0yJmoHttJuo`+ zU~P9q1~>BPNECHsu-S`pkCle4{$5N>JOaWeI~x>7MER^OP7L3>*WYvd`qdkE`Ul4i zMK%50&dUGMoAB?=!JjE!RaL|0nlL%`L#R>Fx~X>V2+@A_K$*uQ6WVS>0-sQBW=DSXkY)Z%57l zzJz~Y4*sOLvAm+ELyeD85DXRg(FUOVDa>D6ni?4(*UUAJn>|D1 z58AbFe|a^z08j~wLut8v7^uIO^+3IEWc_=zi);dh@V1bDhZP60l5`V~9umeqbg$1aVxSzIA>f^eiu(FB3_5H}41T7E4+3()Ieb-!t%Wf-5=)=qs z@HC>uLo305V%pJ26v4vM(sH1^gP`&qh5tape;@~c^M8^4;XWCY2K$*305LE|Mh)FB zijm;lktH=MdG|@isDZ%snY^s*=UbUo2M!Qrjik;ZOIZH+$i04oxBE%kLh?9Gi>w5y zh*9}s2QpTed`zZp&o_M+$z1`IZpbJK;)Q!i@4G;>IC`ObgCqb%!-OjclvPYRXOj7m z>J!ZlsvUGp>@BhXxX!Rl1eYTFSC!U&6M~W$a&mlZY-Gf2a*HYvSn$nN&IXgZHtQrh zndjJ1_}@$T-^;-tU5hB~HM?dd$~u-?7Gu=5rI>daY-0CkrbxCthHu5pVx;;oL%T8E zr1HjJPpy%rR_&}feuxw~eN-4S1L5cRUXZ#UhAjPTi* zhZI6Qj9nOI9;qf#;i(zIo=2eh0^1awbe@T{l5Y288S!Ba9h?xTE1KlOo zfMSiCnulpd{fIgC8_>{>!hbN~KbV6*(h@_7DqLH;(bz^xvwzpL>q@?9w#CGTSQp+x zn9u#gNO0}=*oAZgKyWYyJPf(YUDgL83JUJkvWxw(-I0yy;M+R$Ew4VAdfyyeg>+bH2j5w zFqG#TBoyCm-(!pYXDH!6l!L!+dX5FgJ#Y#GIgSx}UI2ye_z(j_nx$us#oYYq%4P=F zgX|`xK?lb1he3!7?O8jkMqEEk1I`Dw@CWF#*Er!z+Cb`$M!&k5g$JU@1(D&%p}i1N z(8?P>5EhRq*q!%oY|#8JU&pmCWy}W*^j+>b@ur2Se&zSZoRYO|3(x3 zqd$&+47cOs5llEC;|Pn6hocxXD@KwRN01?mi7Wx6R*5{)hrXr;ak*WHV4#up5_qOd z1C7*WH1x$k1E}n+r#RAI(dlN>bkYwwqS?nSgCM+X{CEWi{raz^Kep@Zmia%H@E^;; zpV1Mtz&^eB7w2M>VmKYA7}PkI-f}8P!-3>0n_R&p=*7X#uD5xNvuC_h`a}Hn|j_m`4ymf-j1@~ybWsglXPshOn3BLG>;FtKV8LxrN-OwbqoIE z3IFjN{22ni(&0Q7FOS@zu}z##{M+&LPsexjeHz;YcEt1AN5U$B6<~NOMxFa*ZKVKC zXLrr$NbIwf-fsAm_TJ6g(Su*S_ci{=E{{$=exhjW<(^8Hr0cR%cCoFGE%;9){3mko zcL35jWMknuR`LmNip)I+)xujyPc z1wPL>baruS>g&gklD+eZJp+w_d-l5P3A1^>x}|K#t(|Mw41 z3=}6h9G4Uf=<=V4f|H&P3=6yUUt8AJ5if(KS2!6+WPq4)$ToZTkw>L}RMbl_) zimy$eqCvVK-7fCvt?8B{{jzy*i*#$c%^t_ciz79qk#Dx~u?7FBg#T0y{xMj;Zy-cO z>7B!O*{B769}jiNPWib`A`DLxnkSB-Gcvg!hbp!{}_b~5J8Dq!LJbh z)z5myp;5IHssgv?{3Jl5J%U$!`x1RTc?q0j`xngI^LE9>N!WD1vB@sdlh8srB=tbs zxFpV{ZerK(eYlxd1jal|92wwojhBjXG|JxbL3T#6fhPW7+VS7r2FDisXA=H1Irzs2 zF&0jbn5(`%8BX3jfk&8PK4)VlMvifIn8PW3c|r*7Rg}>!h1MK*aJ6eD!Qam*MY@pHCE1YMAVceAY;_4x6E1h&KO==&nC5RmBI zVa`T6-7SE&UHbNO@X@TGsergm1NzWGhqb@}L0tJU=|7s9Q*^P3??VU=JXf-n3geJ z0&_=7pqxdCIwFQAtp*Gzr>(6Wigp6*l6lBcw|S67Xm*o^(B?rv5u(L4{1Ghy27mx3 zTV{9{q@;Q>ZY{mVmHy(KPc5PO@bpRTYK&QtXP~6W^1sBX5^0E4Yb^|f*bk=(G>aSq z>l-^u|2LoTpU=Tx7i>Mec-fCh*9h7O=f{v1k+V(^Z9S3uBPOJ?DU$bu%}-0=#{vPk zB@+UsIL(aP+=^jDUj0##E@)~sdp&>lEFa4 z{AcF-T=W}lnb(<#2!k}1qGT(I84vYJq3Mt%*!wmoN@`Kj9nTJfIkByi3LfjaKK_sJ@W`A2;IRP`lM!pJ z$v!mZndn8EVis)}5NULZZ`T>61o39R^E_O@fiI%bXHt)8#|{4DJ}F)a#{;epw*jMj zT@8{M8^WPo_!j6-rq2QROJ9b5r=;`+JInuXG2y?MgFi-I@BomooMYw<_^g+mrcMZL ztkSZ9v_yyPKW2~bG}Ut8?^zOgU2xMWf#nhnM*Ux^0?bgrZDg2gK9jT52#+%3R1~7B zU$}M@6~arxEok{cM4y2sK6}wC1z*h*W90y;#snT528t5F=hNw*z~8uz2ri_9dq4{E zHu(cC0(uNVGCZpx

a2e5vK7^?K0Dc^gmvye;#8DdE4AgTJwRu9BN|*coJaLHB4*(F8qsu7t^GbOJ&0y8>%oHw?0lABpcpuSjw0Y;;vXknyxN!U z8)gKNBRrxu8-e{)h?*QTD+fhdnbkP*QEwvhQiS){Uh@TLsMZB6AWX~6Zc{+G4DgUH zVTyVL81hf(uBPkJl1^s`jrt7)6Nr_=XW3Es-%t48&%s|$50baI7RoQ>y^(XpFwjU1 zzyLB?NVj4=kMO(+ih*EEz_W{DAs3Fr+a>={S-^%~GEV-(WI$Q22=|;ziIA z5&*@94H<+zNQgd+vOI50_n$A&Ncte3l#SMc{u_|8}q`>t@l`={c(DSh!uEdx8OU`6r@?Kuull2nQ2= zz$cm$=s`wF52he<_A96_BoSpjj*O;~Hy0GhRgWM*-2IFTGpqn7<9fWkBV5oF689J9 zW~lN!Gz9yYws4I(DZ)LFJRk4dN^ev8jn@3~PV8)n@PKTHy)|JBHDcpUH)QEDVgUX#ipl z%a9QT?$6DTqibv|axUpzoWF+}zdGjQ``g-T5Jw%Az=$CsxyT|}2u7&xXMPcCw&A=> zHn@D5kE{oO&!AR#yjugf4+}!b0y+ss@RB(Qa0=EZxRH=!>d6wj9wnfN0_wv(xzA|x zk%{>SJ1hUoa>9Q(2Y)6>aak3P`TFErgR_ug(A3JBoS;?~bBU^&YmawRwXd%EKzm1L zC-wCx+J@&nPUB`?Bd3D}w(s2OCKbatsr!}*0wnZ{upZ<78yae<$tw?c(KaG~kuO-Z zGdeJZ<(DB2!tQ1EdmxrrxM^ihNnXR}Fm?lx4-k*uXl^19IDYV!`}5YUWLs}-(YXa; z7F>$*oc}nV%aNdQ4r2n!-Rp8IlUzYSJ8J%~B>Y!$@MrBN_0BXk@^0V0(?2lKd;8Yy zzKI8U1;A2OPp~z$+^O+PUZ0XZWK{w;^aA14A0YtpV7&Gpugs72QxfvVjjI>WpTBf_ zaBhY5xun9HkQU}XNJ+?Y3U|h41Bu;wk;IH~B^mfv7b(m(K00{!>ZPlFvunGF|K7+e zs%hkQ#(6tty6nfah#QpA$5PF2XEyO ztD9jM9hBia(Aq>y5vb}RZfQ7!flSy{V<|bpw+SX18|=ID(FgB+aQXV3+gC4Myfw9_ z`RMV^hRVvOBWKT@Y}@~c#pV9&2*o`6MrW7c+l5uFho5@-x#wSa;f3d)dHUqxgUyu% zYt#MLFMaUdJ8!=Jt*?Fc8?V26ZD49SZ(mt$bI0*B&p!L~sl!pfu#gZk%Gyzn7G|-d z@Lx;#ujSxR4jy)3Xhn>QY(zmSi3U)Og0`B#7HGcTVzN!Ev^vRzA4hy~Pw z@9!U+SU@x($h47COaHT;@L$itKii+XO;QebEyL;o|{4^hrQ(&02Lj3%~QZ-}~12zWEIb{ML6o{i&b+nVuf09wQLHyAu5Fq5cEeZG6^gz>zdjq0o>6>m}g}f^@o?NJKBHe#G-|1y% zFf~oEXhA6|OGN^+jW811_t>KU*+}?r${^qI3ypFP>tT2s1bb#Cb9#dqHL{`bE9jjw#=>#v``J3&^O z{Z-9}Pe1$O^XE>Vpb&iR{@s+1HlOQw6oV$57~#L7s=kHVvh9>LN2W#i=WeK$h6q@t zT>0>r1o&{>1k>9W{k*OEzefrGN4fZ`Yhi=zt}3iQVFplNg4SMWEzS%}SR(SyG|N+S zB<@jhLz+G8Mr`jwM;}}OL17;{z9iAB-!;~fXzT~`PQ$*QZgvU1gQN~1XIQayz^T#O zOp$m(w%3-_{7DWI+<~a_^7;dv$4;J>F`PMl@<>Nhb#dO(Snst<=RbJ=oj1Pw?eD#L z;m#-+?kcQk>^yejBW$Lq-?#a)zu1El6aAo9W%fxJ__g2%64y>jL1o&J%i z3}0T?L`IknHVZAJBia2Z%0>?lQIdYdD({c>5av&l&cjDp>yI2cbdW;t5of+cF0fnd zJ+5E7a^<7z-9wYJONbf86(p8wXlx?XyOH!D&?!m_{Rq@RX@1(k8nmsKHD(;@c2*jqqag>F*X?n4Yf&8{VnfLaPVC#9|WbCUX@q$RZvxpm045GgrP z^O5>*jm9Vgp(Iqa3#8pk8XGeOWBEh1_}EPC_m@z=J!DrwG`7LJ>@kf1H%%9LNJt46 zq2|k|6{pZY$PdQGAWhQ=hA|)%kY*f3Ox-{|ZN4}&45-!*WiP6sl=K@-QJ5GY%J_F^ ziTZ(mXJLN9e@O~e5xJxI|E`4pu3Y@Xiq7n19f#dx#0!CdiNRzKW3Gr%(Ho6969!Xk z2>%9VLM7T_Vq`-x5IT2E?0d-fuD!?}QMH8CC)Dq{7Lbi$X@S(t;(&B1zkvW*a3nt| zMPq~}Nu4^h^P*tXq@=xou3<_(t9?sZNfQ}4=QZ?%22x~kC%|%rmKn(g^)|Z~<=dob zR?!?}NvdD)rJ_alNaKckSlZ{3_ZD`pSW2+KB zY)BG?X4yExu>&COR7T8dPBGOvf8mKhy`C8fQ(6VUbSu zXRQdNi&mqj!+87$Is|cqdqX^T`je~DzZhh&v+&=Y@ZX(-e`aq<5Ig5Q81)!?Ucy<% zZC=0&gfV)~O`4{w(nbCq{&t|umuP2=ML^e^82D7pkzN4SuA)C1>zWg1=_bR>kF#rS z=6C8`BKr7=>?)px2Z?)e5BlQUZqs3dc-(m7AL;z&=UKDu^=r%iZ%@L1PY(VuNZFJ` zJL|z92!VqdPy|gR!tgcT1sdYvrJJC{r2&ShdGO2bHb*&njF+qv;TKHkB@XYW@h>XE z&_=QetbvjzzQnoB8>L?P++Nb7riYPUyf}N#tlc*IwFUpZ3IDx0 z_yY_lzgdWjr0xCNR$Whz{ZjIlBXnE%@(C`0vZX-^r7) z$^cbdH%A#z16{#*GNhYB9^>c7n^1Wonr|W-E#hP}$z~`g82mK;0fQ?;_IKPz_pe~? z-g2{Pk~sAENV+DKO)2XS8#+7-%mx*ES541qE|O1cXt%;&Nntj!10qi*M=>SCeLGA4 zi|W(CF37<@);juN140Z(0<#&1 zR1olPPDDAc0)&Endgq@sC)ZDi``&(Y4Oh-bw&M=UAT(1q>5X{f#z0!(h(&^z#1e9d zn9JfTRu!emaBguAq9b9xHEEXFfUpN#lxB8T{ZH~HGdiS8{CNLQ&MwsSY^kiOwjc8j zM)=V5n6nFy9c=YstT&@0a7Yu$YX>X?wD8r{Lny%(;P6NI@JKEC14=O&oPoIXlvoISO2amzqr|bLOi43j(d_1Ff5?n>!^f%% znCMG^(*T0)du-wVMG60+9Q*;1?`+s-%ZC2^!6U-kT4f@L;E1by$M%p6VY+ppaSWYf21-Qigg}`11q7juQTH)< zd=z^@4HYh&Zb12>Q~3^LCp~4(tD2eZ5~>P{37X-5^xm7BQ$CNvbK4jGt@?kQ^PE}5 zIru-Bc#bvMdgQJ#VRW5G>+)o>Fnkd^5%V($Cb%>FRmBag)sh}~1X8|162J!sC13Kf z)~z!m7Tg60#F4dZrUPWzw%C&e*^&+_oIdFek0ILWGK9ajb!FApdOIZmeiQ*z?#W7G zZMSXs7^+`Hsf6yiv^+Ce65K-35xs>TpwzU)goT5k=WPuCR{TlHF8(Ds_><~4B&IOx zSi?S*YF1rTS;~qoXLa8B<&vC~F0m-f^MheW?3OEZ@*IUL!?txH*RdCO zZZe8O2dIq0!Z=OM*O|F_@=$_s^or_!jsQanmQhEs?M8hSdNF`BL zEtfc4m?DX^jEl`@&`ti%s{dV{@GsB7pRE#$c-n!pLYftO8h2cL?6SGCm;CvSEo}!o zsFv8?)}qOsx@pPZvzsLR)NZ@eWA&xA{G!T+wnN8GJ$>#ON`;*`a8In>6psj|(d(-g4s1)6YiBLkF8`$OgYWKRMh-fd|SnT)cekR?p!0{PN>{ zrPWk}>F7E{t;ROoc`Q|!4@I#O5G^*tGN8M++YrgYBk`r-^fI-uAn{}bsJf8o#+$e`0e4FlO{WL zUW^;JU;vdLEb|CsD7SJKoMCZhlDb{pcW&RlO-R7#^y126e6}d**V%RWD1IA>G zWWso({$>a^8R+Y|d;13Efi7Q>KIT?;m(?FUe)jp7Kk>@TFFt$r#G$r^D!k7h(s+a_ zFf_h-{iDklFI=D&49(Z}mN#{sqWIjWKmF<_UwZ!R@vi3T;$15XlOz2-x2X1U`SM5C zDHJ(8Ig8I>0bbz*owVa;(oQ5pv3pZ-de^<>swzHt6LrIqgBdB0J>>^^kjsk2X?d;08Ys>dB{ zvB&^%CHM8mBwpm!wJR6if9IWd&tJUWGcvonx2pBX(=WaHlRx>BKk+L5oyTzYD#2Ty z@{ofAJ>AgJtvi%}8^8@{YDQ;4oCzx%S~`!MJpIhG&p-Ff)2EIcY}UbiZDFGS&eaPa zy!+OhKYH_>4=&#vn0oNIu&U|cvD44K^vb6`^{G$1^z2zG)E$7F61(ZWv7_*>O88gh z;Q!&9-~HMbzwm`Gz4rb0uiab7uRQqFOF!{5zwnE{`13#WnNPj=^oh=~EJ@eA1KK<$|FF$wY*umDiilW{4^N-WMzmICK zcYAsVMkes-i)9~oFyjNOVKfvJIndThg(%BFhLz8Z! zL=jLrgnCnib48t*<++i&m*4*0H@^1u*S_<{``7ws9+$NqJ^SJ-pMnj13ZRceMpUKR zcqrBBFy7Zkt;l;r!-Ip?mY@XG^7`(b75`hE@UPCnzr60ip_6BydG_hk$GX}r*F~wP zMZ`e({pj!z<1{uk&-%bNE$M4f*IAFFxUvq0e&p!U!<}u7wN%?(zdtqHd+YkO>o;$A z_YN?+3(M;iY{5Ohv9-O+aGhgE5967QyJyiJs(0SIasEf&{pM@m`p)Zboxj#UyPTCCrL~0CmKPA+$8iLkH0^|SL8$<%Bxw?gWvYk~WYTr`@S#J8 zy1EV?Xsn`&8S6X2pwkmvWUdNAe&!Jc7u`9+J(f4}i*P${JAC}qQ>Ts}Zr@S!zb4^d zlY_sEbIEYhnH*Vaz(@R(+ezQ!CJgfIoU#s=N!7hgv>C3vxRB)Of?Y?^coi~5< z_PZZkymn`3Zmj?od-&*yQ>V|KJ$>qEM{`X%9)Wlbr+|PdwL4UjcBe^fCncuwHYHGS z6+2WlOEFxajlOHC@@w!Pie%ysI6{qx?r$l;BpQ_Udv#Yqd2LJQ@l$6`KXt6@KofVe zq7)KDFRteIV&5{ixJ(%#Du%;2TH8An9B~Y$z8E#g7AEf9xpw&y0s-s`uhaFNrT?i- z_}Av(UtC$+00xNnM0Vnuk9)3B(%=LHOgLm~-R_9XTsO#TbYvL%fSczV5(;`$Vu}Ld z3V&4Hi5SnY$D*xc*6DT6zI$SJF+6hXTf2@PKXLRhA%*NCg6WUKj)z7KI%9EPjEX^& zdnc@4(rC4BJ%(2or$?#SMTsYPOZcFp_))!EQK{kw*U=Ib1}ZI)?%5^cuow}b8V~p6 zQ80Xh6@Z%bKKsV*qH=4Fb2RTP`L8bFUzdYFkx&Fj8?+I+b|3>blQd8y2f2T8iZbmF z*B`SBtR(=rooew^ZYGxJF_Gda=oSVGhb2D5EjeoZA_|ESX+#=l-7qD_+{J>w%t+6SzV@Bw|fs0tX69sTUk^-9&c89tE8u zj78(VG3cnOSMUgc-OtU=!}uX63QggyOl5ekfKW<{qKjlgi8v|So&_!i$6|zZ@hp8YEfn?Xhx8*J%ehs1qV<1@R}E3(fSEj&J}8GZ7a{1rV*)kpGXov+&dVy6*G{Mhqiq zB#nl|OlHS+5<5-OByH2QyKT0+ZMSKgE;BPTGjA!yZM#rN(=_auWy`Xdr4chT?el!k z@0H(t#(%-g9qGmUgZF;VIrrQ{cjUHV_%A5@7qsE8V@C;k8#B3M=irH5@ttnCE(C%; z!5HpSkp=7uJTTEHtD{9@E6^EB5{_fjU{i*OuYf>=4rijSe$2aJySN1LHP|I2;ii6Z z?ZsY;!U422w+$m0A+|j!On(tGgoo=Y(x;m;G#4;r=@Gj7pj?QMYxX9`?@Ix@Tq4G0 zPQV#JK5+#%M%Vsty@h{o8~)hJMNR{t{_@5FgIPYl8l9?UA`HUwP&c^~P)z%|b4WKVnu-tzJQW z_G46l! zAUTUjk!nN$3WqfTUj;EY&aoaHDPP)36HBBM$r3aPBpOxt_ZR;CZTJ(?r}JNrZVD+k ztP_z9-!ubgq@1E$mvB77`qbH5@!|Z+(O`#QAoMd@mhjy-$^wSf>+b|_1P45OgB@Ly z8;Z0LbPh$;m)Ri@c-Gm%OB<&fNiSK#&Q3O{_*VYIozDb-yIN_JqvH#PIwdjb#p|+c zP5eRRNa-fVkl_?WH$dD?nL5hy{|5^Hfj0bgp5iPw>JyP%;vU|MxMT!X_cK)*ij_P- z)U&MeO0g~%Zd|m^2SCJxkSRU^BbmZm3cI_+8pf3q2#f@m7y{;sCNvOX?>qx|3Y&^W zNP(H_qzoqI_(l{&-2D3ZY0{4XKh!h~LAiT3_(M_NzKexK5a1V-YRPxS9gJoO&5kPm zA1wR_+weDrr?e|MubS@n1Z_DJlyY`Gk#)?MI9grf+al=|*O@00dI{G$SqPpo1;JeP zfo`Cf8|+a+7y3z%2Gd3G(*nSyJPq=OrlNsbs-nTi!l!bW3Z6|4DA+}AKt(07!u3VA z(NQ?IR)mHds#_8n2;+x(As!=BkUbMe7yb(i|AlS%yOxW5cE+rsuNkvtrV(Ezd`3{g zFMxcX;Eae~({?2xpyD(^!7#j<@0oVtKs7k+GjKoj1NR$6p13e@Q0!n-aEV6)K!m>2 zed3W6@0l1P{3H6yv!B?IL?Ic7mVl0^EnF&8oHc@co>(R2gJgj2V4+&3kC-bU(NV_# ziwgfmZTL5XNc5i|mb?V7W`V36?i_FKg)4zt#0jF>pwhXSUP-bGPZa4DRbzVZmAS2_o;AH+p+9K{TC_#y=^qmPhOgc!!p{x#_uvFDjaLuH2kYtvZ zoS*_I0di@?fxkgL0yV;uXbSLVxdsGH(b|N9qMVK@`M;1uzuDnVJMLmD=iMZ?8vBKN+cQ82-x&|7C6XI|2@Z zgU(Z{CI=t+o`0?37fTwS+1;)@`!W!{`(ApIK(Mld zz4;| zOa5o*91uq=yq_WS6)*fOA2%Z>sDUdFuE6Y9(8}a3p3R{RCiH1U2WO+JCv0v44ZySK zy3HNbx6py#w1CYOik%B@?}Dov$d2l%9+IUD(*s(Fjwh9svQ4OEnB7jxYQYPP)HaO& zR~G&&+wgCcw#=x-jg9p$I-3KfLeH2+xf2^e1vOYLc!UBnjXV14cjyf)=Oe;vidKL_ z40IQ!coDSKM;CP2uO`TP&!t+_ymB&mNm}_MB&zgtMHl;??qBI4r!0XX?Wu@B6PYzM zKyzKChIDDC{HI%y+(Yslp#(4t|5b(msy6(K^$NuRSR53%86^fC7GkR(d8lC_h7%Zz zha?TvHvp=xSngS;fuv&H=n98kxo#`r5LyH9w9v-4kcNv#!%R3dU~15Dl^}hv+NcG; zD?8WxUSG>0h_}}JWk4=slh0lE$F$((i`pJq8B6?(Q22-E|E@0lSGVCWLSb4NS0j3m zlz~*h6tZ$ji~|m)mL54A(vY(d@p6~&N)QBN7;k~$mnCJBn_a6#9sjHq?^!oQdyeK~ z9ERx|3!j&zfuizGaVlY^i#7kW)w*K`2c-bLbO>Y$Ow@t95Ic9qQtoVC1%8@_%jNzqSqk(uFkog|~qt zAT~xGM7csASstgKrB(HtXtuYI1HII)7<)}>ak|CgYd?do^vuORhiop>8!5bHS7NKa zA|0oXkjA^T69Eu?flm24GY2A`xxc0YXBP!e1Vq{Supq}kY$dKUuKGXg3jcL&_~RMH+}ASrVSq(qhO4#B!1xi72#HAN5))w`01zf%sApMS zv7lfmrgpmLXqBy!)XHV24Q$FyU*GecSD_R$P{Xp&gCyahp$Mn-v?vtbol+;Wklkt` z@_Y)F(qLunh<-1ZJLlWhy>Ts83eHtZoY7VPYklFrz77B4&m`nuA{2{1V!7kxOMW$M zOju|*xn*c)6K*s2jpS%mh6*bOH-Tfs0nP0LTjHYzA6Qh!n~7e$z*Vh|{X1z5&Mlbb z{Ln!VtVk}E2#-)lZ~}s8R6A5mT6(DQrOF9+Fr{;>3r+{zUAn!iMsNbu#*r)i-(&vY zQ21|X!(aY&B;XjuDSz-6+*5qb^c{AFVHBTc+gp4GUmesyfd~?*FJHW5EqH1L8aiZw5O& zgP24u%L*#GREhM5qZzWvgwf(KbP4}?6!{&@w^LNrh$3ioI;96X9U4RGJ~d@Oh}I3g z5F)O#-+-M2i=|4FUM7{l#EWr8CcWTS0Ug`)D?*Y?kZ&J$TX74DBYF7VHorh`Pk7F%qojWPsJce zNiEY5VwROz`?K;dC6l;41AQq4p?I|EOr z5X>0T0k1VhbJ+Zc#9#x!8Ci9>EUH^;eeFbAWTLA_RS$VNhcF`$WFmo~>z9VEC6-RE z2xAP&dLHEgjG1O)+)3oIF=IxJ8LT8VR$^bP%G4w+L0mYIVF&;^8*Hf7V6dSR3;(o8 zLSBspimSTn7*+T`QTRX6hQ9z5KqY#K_X3fmO)xJYJDEhCZr%AW_4OvP*$;Jl*!h?G z5LD72ADjeFQpUzjaJR+<{R3>`v~X~M4V_5=hH`2nxwEG!A#|F=|7_1|0ijGJsD11M zJIkVPL~=9fAjp9+$vy56bICfLiRv=W2u4n=;%x4N5h}t$-VeDc%Hl~XqLQp=XnBY> z(;PCzk)dLais?-`dQ{>6Wa0m08~&K(tc^huR?1|kWm$@k)OvNSE_O&{wdd|l8r9Io z+&Gnb4uo=>7_3lMfiuouonMoR0iEUoRmnfMenxhDyIM^Bxxhbuk-SJSUwfT+$nAk6MOIn?suE$t*IuFRn`G*8B-vlEr3caNT ztn)dIEPlj`jqTzsFhJQLH=j*;pP|EthmNvK^yM4uE;!AN;ubAku`;_)5BAQTIc5C) zTUV)Kboc-iNHr-6lU=@ff0Wh#dAjg_x()vsb9&e*bJ=oA=qz14&^MpDY!vFceD3ry z3ML&oco>$l8VozYPG_fGHq>KR_qo*nn#rn4bc_WW}0w z8#b(8w`S#1HgadP@G>(;DZ zv1G7s?ksqZ?x(2ywr}t5-EbcTzK&U86t#is0x2*_p`KN%*w%5`VmAw)I-%nZr{m;Mfq37REEx~oEN;#q9_T_U&5ANQ&>7`MH z|1*XEGi~^1qvbDr@hdOAwfoq`yA!Fz_sIL6|H#L_<2%3e6CeBV3(q~ZarKe~T@&wL zJ9q5hu5AqOOAhbLue|!&8=JT9KYHfM-OjGQi_wTFMQ?YxAz{ue1Gzs{uLXZeCC56`tXN8`r!|K@Y$yx zU9)sx{%i_`QmyLX-tC)T{rVR_|C_)0+h6?B*IwPS|J1by9I$M|6VJT=10Ve02cCQS zv5jl2O*V&0f70sFLwk4a*t%`o_8n*n`>ZgBT%!clsKWo*!vEPe{HJ$QKyB6fN1uG^ z$tNFUXYIlHU6WO-P9CQi-|k&IcOwX#1FqeAFn;n3YOyX}YNf9Y>r#Gedgq->r-t?; z2Htw(&9}GjK7g)feWmGL){J!-Ky|N0i$jb ztyxd~x+kA_Y{RO>J+s(r-i@WL_jl;f;UkuOK6{?xQ&t4yrUocxw#)*gbEi+Zf9=Al zqoWG{=L-Ml+VDSgfC8I)_8mHQD*JF#?Q;r67t!a~-IXe^RfS(SJ`NuYw;K85;JbD8 z92DYYu@ljJlG1D)6Wz{z>GBn;s0z4@@~R6dCpdEoiZ?}tFPuGj^azL?U<%l?7xnAd zDGPB;on>9vm8;jRS+i={LTb@Xr%b3Nqt39pJa+Ub#puw~uTkQG@eMKl%kFY4<9|wYoz4EfK6lHW(`6l}d$(_1&DP(iPMkP?{OFOR zM`bFu)~-5g{R?5K6%=3Woj-eq#sPiFqM{q9%$wUyg}Lz$Ze2wH zoH@hdfHID(!>r)JLd0bwu0xH>mTT6u8*8nmAv#RRg5PSSrzqw|J97NY#p}1RC2;d7 zr<4WjO?4>?!p(G#V2eTCa20`T06!%qpV`9v^rR>9rF8o2QHB2p3jYtZ;onVl z)qeC~tTkO2`Y?)scU*6J_zeYMm5h~-MPj@ysNvLoqwc#KhTptHwVl|AL`x$8HUO7& ztP0{uH16U-%0yt?H5DB25YESr3=JUx&Z+N98>|Vb3}%J4ZukAL;*fTOyB4J@a~^hm z?uOEzp_z+UuHU{tE{ePxeD{GmgvF91C5QAJv3xX1R9BETK%EP2P(zU;;}$eNyP(9d zHLCFcVB!D4HvG%)%2JM{KP!Euyuq|Of;G62sSi(DAA*u_mg|nW7=e54GA6&KXm}R? z-QBa9;NY}^id!5!A~SWW+g18R^3H@z|17qi(no5J58LseO;`9U(N#mG_}!qX>* zV>X^fg2!y;VE3o%c56$@-wOH%hQCU?>B3j=uL!9x(I9*+}AEbz|nWrn9K<|EDa71pH% ziG!m@Q1yjPe26WAog<9c9SYw+?nQJv6wJj?rkY$bG!5e3+puu{L_m;~R(Va(8bEgTbNJffh zXCS63L5K1ti(O_Ii8bl`-h-Z?g#PLQBp&&G2ZBQXvY`szJXbaJw_L|YJ7KaM!EIRl z&$ku+-`0k|0s6E!XA!klW4K0imc??6&!X6muGT>BPF%X_#m<5shH5Z|{Fi?X@r#3q zI*hu9tg^xc%)zPBEXyJ^h`qLkhsuG#B`fca)nRxm_6GZ-axzg=SvW5UcF>H`8!)?K zUURd}r~ofcs0i+Z#PzUIAdw%aca)@aMUl`CV_Fi|;*x?4mgqPfMl34yI&#}E{6Ady zf4B|*Z~*|oc~OmJdWR3_QWTa@A0vH?^>Lmx<3fACtQH7>4)I~k4Kx#cT?Z6nViJoFsx8uc0Hf145Ub zC$6C!whC0W^aH0F;|0}hL#F75b?0h|H%2b{?-Bp|k;4BYZTMR%Tji?i;-xSWsXtlm zp*u%lmhlH3hiemnE%M;TJW*8R(ay7I)#z=8^$HoFiCeR(fNg|kBvSX#d+|{J07_qL@;9&0pSEgZQN~q8s zr>LuQ_bfChmdpst~K)mMwR^kSmFP%HvDg*EU5*{f2Mb+>dAifXv#TYbWvq3?qS{ zB*TII#|!XYRKVJBMybXUBehHN> z7IpxmFTp=9lq}6?K7~ou%>J1CLM=ye&#sMi1i{QR{jK)0V=fj&x<11Xw$ z%mf=rt!kG+mK+klFa6kf@3?39b8InVjlC3ROAlW(Lc_~9w*dX1e5n3M39zr~CJ|^l zjv~2A=|glN`5`%V1@z76jlAS~{&62tB&X$QFEvuzF#Nxx@c)iB{Hg0lgHcP|g1JBe zQg98v&G1D2GiFVz5hUEpkDB3x$-=0j>rCx>0h+=R%!CnoX;Fe@WB^1YRS%fLT@;3J zz^4$BWtBeMiZJFceLS$C9nkc3^PU5}Kcv1tipHzV9-hEvl$ylje5Zk6!sv?s_|C%r zJKOL#>nAPBK9Y9KSjRh~<%k2Jt7TinLoljgW}It`fuA|uA$Cfj(OF2rX^ea?}S;3N>LOP&JZ1n;@ZI0(jM_xl>vUW=jL7{wV$DkhI8_C62lCm^nFFMhU z2Tml>s*8-+HjMwjtMLD>HvAca8f!<}0cpn9F$PRbu1J$Uga||)aD)R_-Y1733RyzpdA!Tw)4bOXx z`UxQz9{dILcJeBi#hcG00Qxp}#06A#{A{GQVfcTt@c(2R{wD9lL{^g~T&y02HC?^D zQK#g;hSOz00d+_NV|b14!)~S5O9{#ftNn}{=c?XCg%(6E6c?i|0`5Chql58mMoJfyQQ1g;LbH zv;KCZIf&JsRFyeFz_J(z*pkc$atMuPcAwTK=rOLEG9TdP$x2UaK}aQJ0*!DGf7P6+ z)FRS&p~T9Ubg&PfH%ko-7XDb*3Pm|1mHXer{`;xI|5I)F^Xmaf!Ai@l&to&1j8awc z$Qn-ur4?rfF^_GvoCXkEkTj=i>nG7DGvriBstteO3eQ6)4LgVU5Go2D)^8ys=?EBI zx5wuP323v##S}k-Rws9hi)T;+lR*O(r%1*Udlg+k6lif0{y6@eHbyS`?}7jK6#n1S zhJP3sP6T{aG5{{me*!Mz7lmJ7lnXf)8jHk#a6igBaJzEXU#B5*vUVU2%c`VQeV8`VB2vF@CuBv*0o8rm zxbev|<@DT}W?tQy$PP?}#2~abC7e5NKH)2)3jgmd{J*yie}Z@1(b2q1f@KmmQ9&OB zPmp|>oLe{3iC0eD&+trae6bJ0nXIo+;6gbN04+AbIQ-pUNsA!#9Q>b@3S5Ya2W(fDv>WsnP zb)|C+XU#c1B^sYrp#+}fI-?5z-&6Sio;Lg)iVO&&rd$Thu(gstEF2k&h@IIrCn2^5 z29v;*Xwgcta%c53XU?2GbM`C&dY9ley>U(IH5-dsu7fn+iW-`lTy5~g_m{xjMnS8M zKgW(m+=G)!0E$0QhL!K%D|@~3zdN{K^)KNf(YSn3*Dv;0A62*GXEfZ8htW`0cmHv_ z5Mo)(Xr4uk`)sx)9aZ@M-opR)w&9=sTqm$2N`=ZXSDrI+JE7aSWSdw#t@CmXUUY({ z48TCJ;`X=P29i}j9*#s?Wou_gKobe(5S2~R;QYDl_&bH|obOz}a*+^hwh?b7<+=Cc zz59e4fC{1e^X4z;P4IaFdf7*wSbah_&zvT7^W>>h$q^);YvPpYU6d&3?du=lua}fU zf)Lr*nHW`a{z&pYLO}y}vd?DlQ``)m^Y-`kE?7XQa3k`JEF4w%e_!GMeQo$xsJ@sJ zu7A;ed+!qNJ!P86^$#vwykrTP90R><6F%MSo$Rn18mWYFnCkYudo0*HH4IEQySJN0 zj3B{2M3WO8m>58~95=sv|CO^QzG6ayNZTX^xMw~jGS6BQBzlrBa)k^YwvHCT(}WA( zbob~fGrJ&;-rl~xgnQ4PIgOp_JMKaqmo6C9fAZ9cA`jCICeN5XuW#X!6(p9dUa@ph z-+XqPPu9WN$_zSq=+Mv+cZ0t$s__5*!vFi*@J|fC8>EvOwS3juHLF)GU%F_px0^)# z+gHi6IJ9^7p51%*?A^QX;L(!=eH(yF)epicXU^*G?pZLfaLJOTOO`+)-7`rXGdJVd z(7s(ecI?`Bi0mDLt&RF6fdKMA?9L|8ze2t#D?()$QjOW)oiv{Pd%XlXr@(!8EXh7S zeS?b@FIgz*bLQO*N5i*ZRkpyF-q~RKvCrqTs!3 z`SRt*EN;I-ixOW@7=ojjW;%J-nw)5fumKPE%+1HwFYlWk;{EIAk00E#b@N+qZr-++ zTPNcC`W<3G6B6Q&@+#$80elh{?662#}Dn_wQJ|jJqIZ*bW*mXOq80%)f+JQ%=rV$);{{a_rLJM z3lN|1O}KOE_<^l&z5e>^Z@%@`+uQdZJxeK%u}t)&gRy+j)I5GXMIcBc1HYc0d2?q^ zpD^Y&MLo`(I8IU;35=wx&z#rW*Td4TZ=jz{Rx**W2(q@-$Z_A*Ah`tRPaQc(9^$_J zhmW1RI;!~p2MYfmXv6=`*vT_{7Q=iWeBnbMeBWcM7x$8{Kknv*q7LqmwmlP6BV zbAV3X*3gmTXD{FEm^gh--_kXYJ@bJVKK$Vqo_S<>->gaZub$k$bHg`iwwB)B(*3PCO+diw_llpYhu-oJg7RL@hV&r%oY+TF1evEjI2m^mHA zkCkFI%{=Dzuy(w8<-A}Yq1MNVvzKq&>41&~m#!oM_=!i?EM72o_N*C`kOJrq)RUl2 z1YzVxl9R$<;?k+Jmu`~GHfj32!4+#CdE)73-~ZgxqYD4uU-c+nHCES;2EJyfS^hhd9{6g0|WgFn3ShY8gn;!1BP)q$Cvxf zHG-LTG0|DBE4d(4=OcrQbt2Wqj;lx9zCUL2jQImpeOSNok&UaD_RX6^A&PN#(EM0S zTI1s!0llPfkimgj0-J@p& zg>$^SVkID+-13u(PqXLs_AgwzYR$T}tCufC&79a_F|jkJjvb}Sz$NHN1B8}FmWt2| zCIx`6+@r2JJq!9+!%-2&A}>=X8?u14SF0r!B+M4NgBs&CMt!j!E6e_up+#4L3U-OZ4MCpj@y+r9LXH4`8f8rqGZZU zYB#w6?_>RKzUNeIJ7YSM;cE;Z7C{Y8IH4+mQzwnqVNg@=&{l+*pkv&`iBqZV#clLa zy@#pFH74aHtuKbCV2#P$WBAXL9)K&CI1V~~Fy5*^J$+Ct>g%#a1M{p(LtU~_h5ru~ z{y)@)|0O2W6KKjTvgIEfsTOZ?=n|E0nMbTGBusYCThN1@CHeI;spMhuToM2<0Nun2 zpe4VU4`E_7`2(_v^djrBX&K(9k+chX)R5AiFdi$N)di?4iLtq^XK4_`1yGW;dG0JP zDgR)u_w=sWn0pp3WJQSTkiuWAC5{|EG<1~8Q88ABjx_h1{HL?$`VD7{$rzSUJLaJ= zVuea6Dbo@)Tb?~Xs__5e!vBZc@V|h)_L^B!`fQST?Xba*A`hSC)GYK&4kWl7%*z_DEcr5B8@>1SLLD58&9dT5PD!Vxk{6 zksKmV2rKgu6NYxasZt(wDKPTQ>sDoaP_^Z-IG>}2AGT%-6Km>MR8T51)<}Fke5TjJ z^#ke6WPZ+~v;bmp7>+5=e}H@e7~OXJ3?T~jc-X=hDc z5D}QoWHBD?j*2cceQN3mNNr}__*<0U@vdS+q^twe?7%|n0QL2B&zv?9NqyUtpR0gt z*f{{va0kYLq_&@fF(=~Gh2fDDxEr(|v)JpJftzZqzWm!r6tsz4R=2-OW=-|FpX01b z-k}By=A8bf2;{WMRg5yO4SuV4I=bRNex&gKkv9C1&ly62Qx`;M8dt^odisG5am#Xg z*0jmvf$paK-mtnJ9^L%}ZgHeklj)lh?U;5c5pJS5R$!LynE50b>W7we(19c2;KWC< z$7K-rfqn#S!=~@05{$)~VOWkQWXL%wlhReB6T}LghF0zx*-@)R;DnwmO@OqgP$6W4 zrok$u(@KEWE>^0dU*zSkvE`%U~FoHTfv7^-;@ZLL@iLNd4rr7gSbi_bSCS`z49@j z^O~bO5!E=1bkyjinKKgw0re8-syMCl6v75_YortxmX&WoiCUzYqL}7ssR79x1@6xC zPEVF0%9SCPoPjtqZ)BA5|Bn{_KiYOnlPO=SpOIaGL}Xc$aOu^$h|N66v<#&$k7$fN{~n5$fb<`nh#1>{*P0Ac-^ z0O6(J@Ku-p5?G-{g?GV^TA5|Oj!6|0mk;CwwZIzw$CM`sCgl zqi+zE^EWadL*RvT6;WeIjlLk3?3(4_C73kJxa8sKVa4B*y%q2QSd2{s@x8Fpr<`Ys ze6!%kuwU!;=4b=|Qtm6YVzO~uas}}C>AW*85rZBzyjb#|gM?C366&$Qn97{X7OWI* z4PhN{Wl{GWR9Hh$AZXSOn3#+aVF!v+r>k(dQ7cR(x;95{8#e#{p~C+Uwd0@AUt@b^ zCd8@L*(m-xmmr?mZvUW20D|x^5q>Zcd%xfgf_Ez;hj}?Fxuk$hpMZtdV(cgc6o*3@ zRGk~oIsy>kWGuxN{nVMmHBBK%W)3JD;fbce98YOR;tf>^DdVc2H+CB~aJYdqz^Nep zxqSmZr_N5RhLUPdmanzzwEl-2j5y&O+yrxjYUS)M0*1yB<*I4h^$hmG8>4LhuRmP) z|KT?L35awEt@4gsvHYeIzvRH8teH|R9)ew-l^;p>DGY`9 zMt67ORnS5ydJ>uBA&Gf3>vZZ928m2F%}k)F&fE{;K27}xN-cVxMPZGgR@p1+d}voN z`AqqsZfZPeVuBMun$i_UjT>nWP4J}~!4P1K(x}o=k-+4sj9l)25C6{}Dg6IP8~#Si zRzyB3wn5lPW8<*H+JM;Nk}#JYHYp@(KKhtKqk{t zTs<)O`Xr*?de%a=V90BF&>d5*Ev8(}x_-);JY6+E@rKgNJN0&hZ;Nc|C=O{_?jxru z%1aVbUbcFS#OGo7|FOdVkG0{?NWe9Yha;R3l?WVs^Tbh}A3~5Cay70ya@#Qc|779+C)@Dn*SAnDhID*0N)B&E zDo93d0tK9FOJCf#P1k~pcMboAwE}M;0x}uq=20Akv1uWleAayA2c9yQ=aj9Y1e%mQ zt4O!lyC}^2$Vr>~^cG9XNCo~T4!v9aT;a@CM+*l0h z&=y=7qZ;3c2H)Gip@BlfgVNpc4fpcsKw98Oe^0uBTMRD2L1c5nhmZwP9!emDW;D&Y zV2k_~T|4^_@~kHj50ri*y&_{cF(eK6ar9vh$gkp*A()&)DyY+WpCh*o!~ahg{(rg+ z|5Vh)Ymk~IE$c|0V=2rNmCAkza z{MCb#(dfee&ldiFwhe!+xEU_-3TPH|E8rY9hTd^<3>`!xHj6<;CUY!kfrPenpi8$_ zU%Gp&UrH;mssA#ABaZ1WRMlGRIX)Ht&|}0!5t%3O>LoGA^yUv@kbOO4h#=m8I=T1D zud!Degg{TI97|w)2L6Q5ZGMwy9*J!j|Nptd|IfAI9}HwGo51sdsFi$mn1De*M4;hA zyEXkK8XIy#t`0~HrGz7p(g;KnA;HHE`IzYX4!30D_!otFO;mBa*%Wf6dNAKcP-f)wDzBrIK%(hPT1ROQW##5N57KVSI&`8NFd-NQTjq42yIz5bmpWI?)P}Xb;6Io zI9w^xP8`jDPh%&VNC#{Qkwv2?5x9I7N|RRU=&wpsd*p@JlOR2ZBoLa;t$O%KZNu>Y z3x)q*Xv06FCGZo7k-6274@Ncc7nXJ`S`j~Ig|Jn4odGQxQ8d7L zl9cCkhG?jT)7#b4(pqpuns6sjqg8*U7LOEY?}%d>XOG$>#|B#JhH*o zeZYkPlvMd)exRVKYv=0``Y;UtzgYPH#Wws~gI^LoY#naF@}lvj@M*ymu}Z1;P>QsI z15Q|FD!st+uxuFi%o*t`q0mH94orPPs73tKPnrs~gid%R+)zZJD2R5ITDTi0p<->| zlx8!<`$~b7yK%EmeVDp1ja&0N60ZGA$U#+HgInRAM=139S;O%EONIYmYQrDIY#H8g zA){!)Zh1w#9Q|hSLkq>JHP(^g!cVuL)nElu@T&u!@m5f{Zu4YO>bOV&OHTDBm^h(+eRN~ktVk$l<#(JW`*?jgaU4ZC^APy*h3~9qlDrc zI;2-9U4nghmm`)0hVlPjDg6IR8~%}uj8^e#bma(k(PeZicpn-u*vs?`qB#uKvPzfr zph)(vm6eDgY!SF{Hi1Bynq@pr4X_zw^aNQHd}UBtQHk*IUt)n_vlF$e-L$i4Gx>ul=*dLF9YxJCo2uG0%xqUsX1X!F>$k;_hh_|4J?{ zDshfn^xq@?=dTt1f9+fFm!XQIWVzP7nSoYkZrVdJTG~J{6C=y`$wtE1XoX4!ckZB} zAG$p#QCtM_8b5x6L}4Po4c4^GpTVNpB?d8K&@W;7gl(g?Rb*&F3_Z81f%lO+%{m}T zi+W2Yl18RO4hsL=Pr7pedPj&`ob#m}6g5zTq~YfywGHF{zh3zN^)~zwhT)I4X9lXl zRM`-|WDFgzkcSV#p5bgL1deo+!*eCJqfy!wjuQ*^2Aeo(0%3Pnca%0Dk}4EJY5;-# zY(m$H>qRg`d{72j0wD~Tj!jaBDqE@biV&4T(UzULhVVy>sb*^E%i6WHP3Ro;UTW3BN<8! zm#s3)4F!oz^#9EMtP`~r7@Q}eMRK&rf*He&=a3zV0d-$W3rQe7NJtQwag~n0A?AXy_?w0~nPN@tLoxh_ttx-{vgma`n#WTL1mc!vAl!;h#ZZREs&} zB_+86*9MEIZSfCEkQmxz1#gRcWPGJT=*CyPpvhmhkQB622TMlj?U!<3E>S8S3LTJu zp7-NK6g?s{i9~@YkTeYSMzhPl(6ya8~NN^$^Qe%p)bX>`YH6wF@ zh|0Ov@s`cGDgAo?y&Y}%>vYwae!gr?e*7nQEzN88Rbr{Gdn>5i~ z7!>lETr@0&`@(*a4@T;XYvvId)32gssDp}DfI@TkpA@Rv$2sue}{@mu_|{tCnf_k z^Dx8d5}e7{Em)a8)fM1%#udSk6hU-#IT3buwl#fEgHB932#8E0SxO2r@)?l9Talsf zMKPZipnwTZ4GkzfB)&SG$^h%Z{LkJ{h#xD<-@SR2l7(y~aP;WV(2--usV_{qXKT({ zIf{w~^GIPObCmqmY;Hgfu{8kD2g&-h#*wMQ-6I(O;rZYHpz!|(ZTNRncw;ts^HgaX zlL}9lNVGnC<}_*A)JwW@?dBb_JCk}@+jz``dDtF$QXtS|M=3RpdsuI@@0m5qx(yCS z)K;FQmL8Z_K~C@w7Pn~b*+`I#bLxFqLo)f zrR(>`PwVa(T)brIk|m25E$pWV-Q-RRT5+;bh5tV+{QqGa{uii>Kxu{xm#?MVp2e3* z-ZsV7?0G70!Sa^hw1kE=AY5uwEQ(y)6ki}w+qwZtRAhc9Rl;0+Ne=2|mVYse80Eo& zY*8FcGKSFDwt>=tBw@4Tgq5MEuwz62qGc;rt#-$TfgUPK-?(`C*ulNqx4gCKwO3z# z{jGO)?Wel@9qN-WT(RzvM<09q@kchUS~f6m#)P{RF{e`e_HEm?ZQr@)z|qqeuiu|I zbKc;xHIF>;%(L%*|FiFVY~9k{S(ENvJ9~8hj?J%q^Xp&v@>jq9A_eYu4~;7P|54%p zkJ|7*P4)d5^9GizT(f?|#*G`+uU@fupoc<>oe%C%n)@VGmG>VwaB%48sk3a%08W!B zz)p$vK1w-Kkda(&s(9YJb?x$nvlQu|ncRQn`mK9o#*;a2%}8nrSq{oNy{RQZ33w_9 zP{D)hLE|9`Hk)TMrkbxif80W*Q(d0MMlV-xP%wDX^x1QJ7cO17cHM>z>(;DXIxv6c z#0S^U9Y45t$2)Jn{>n?={N~G>w(L51?Cdol?^(Qh<71CM@zm2#J-%_xvVpmXgIkwQ zAKkxu+dFS>e*5jMJN6tre&!0BMa-H{je9nWc>0-9h5tV;{Qq$q{_lI=laH>qjP~>i z4{lsIb!6|(Eez``FTV`OZQZ&5$eAm**;}J$aM>z~tUvkG6OTQzcIA@(dF=H8*Regw zzCAm(Z{M+V*Pa7I$En|Zf83Or^A-#&TC!}#%2g}b{h`mAk&1YC4mf-I)alcyA%R^+ z6*5YM)&X`1L6l6NVI?8bTr`;U7+96t#eBB&4-GuhvT;^Ax7u3xu) z-P%>l7WU4aIcdzT%cqC-Zrl9Et1o@y>tFxIH(%Mb?EsW6k;2c=CX5-^e zKlj{o?|T|PS~@Tfmb-EB5VsDd*e-bX)oQcvJb~Bs<^LO{|NHe#+>H=DFh@_FyL98;xJfg+dj^=}*RET)ZuLrPH}}k$K56W|8<)?W zJa+iNo?Sb3?AW=RePB*sU<-jMv)FuO?Z(HSd>W_`18bKL_H<1~44gW=XX{&t{;z)J zD_{NkORvAZ>)^@DcPGpoRrvqY!vCMP;oq}p^&?L`_xuYlJpX}bpL}%fa^-8s%}ZyF z9@xG0?YB0)@%roT#c`OOLGE`>@9tl`8Zq$H(@#J3#3SogEg694#@@Mh{xk~Lt{q$7 zdFSmdTefcBwfEq$(-*Ga9Xq*;iDkvw4Uatb*rOZQty!_Ce_q#=ac=o@@+cbGuAKn4 zhi!t`%Hihyv6E)Z>B$~M>(;GZ%l0D_7@s%G3gg!S+6zFbZ@u|uNY6bAYR{i#Yc@Oz z)vop8Qq1@87*+>z23Q+Whu5_923-?{!Y=?q7lod#a&}HPFTEDPwMp zD*XRh;s4Lt@CWIAJKx##>Ps&wFkgOs^Y(p5YA#*0a{c2^Kl2>g6EnoBC4Jp9COo)x z`OLAyY~8bE^XAQOzq5V!{-IMBZZNi)Al7Ys^s&bt*+60cMSXK;Od1ysJ$iWG9)M|Wj4G8b$iwEX|v@Cu0_WkwQ~M!|GZ(L+ z15BBv3V;Auzg`KztkO&Q_Rfx5S0SWB`*v>KB4KRa0@jC5USxX`MA(v*8sBut?43Qe^Zu6y{fCdAy>fe0;s4JI|9{?w|JX@gbNd&g{XGH` zJth||Trg)EBH;3wYY1x?m`DYeC*7H>$k^DoIZPg|6;`bnzd`$SuDU=|NEx8B}nhzw|CF3 z-MiWOYv|aib5O>(Ni({8`WG!(zH;S?70Z_{>|ZbkU9^LJ#V(vaKE$?PdudR{@zWQs z-n>74GBTr|O(m-tT{dcBD-btOS+;EH(!~o?86Li4&o-<2)B6yMMz#k#=3aYjzB7(} zyC??VKQOp(aDYt!s5Huw5EGtS-|3Sl*ssa@j%*Wi&86eSsWVatdI4L3rWQ0Cc21f= zU0Jsy!Te(-zmxp2N~92>h2X67&rSiU_C^U}3dvgS9YceazgbaoKulV!O(|D4p5pZE zNHBlFg5FVu|Gz5y|5Y3Q*4JlW43_BFdN8S8rdT6uts^w5J)Syq?h@;*4i@t>DBsp& zIsTMYcMk}b>y*+v&)%%=zRB=X){m8cGrAP=cAvI+-E*)mx|DPM?_NNF!7`94fM8c8 z_)@D6qpgcSR(=?sEd5CRNSw7--FArTt!&m{j0YQuSYKW<6-8q)Eu?6ufrcqpsTupK zj{nsB<^bFic$qi^*T1eS%?<1&N2mbCX&jQHYyYQzUHJd&HvI9d3iQp%v~8uXVtX^TwQ45QwBy>fWz zjQnUl8Z;X>UizAk-#LB)BaRbD2VD*-zg`nA(D;5562LLWe;Ax!4&UjG>9yV+ z_8jJy9^7gL86P!AwLa%Ly}Sim&eM9+eDLrz!I=;Jz>Xb>aL@~tAQJ_LdkNegUF-jU zSNQ+CHvE&XgBWau;^3`I%!d3HR%=E67_kB0WuSG_BOk!N;j#u{M6BP3&tOuWy>ck6 zXb3vtDDzDsT#6VZ2hLL`<^=V}TfeRY-o0KZ&GUOwn!GRb8xE5D@%)~>E&%Y}kylTX zLKSDcX>QWXj?^}c|NnjA|L@!I*C$VNEHgHamjllTBBm3GkNkhCC{W$Wo znMOhf1)+j669-`29i73Tx*AU^5h+3v8ODU+AB~x#rUNICG*RQ9Hx^+}&X~Y~6?fK( zE8|5oU-6l5I4>t?0QCh|s^5`&&+Vt5T|9NubwoZ5!~Z`N{{Nv3|JLvtjpNWdTB=WJ zVw0#WB!Saz(2%83p7KuWVdz3a!As#?+Gp2Up?2pwp) zWiZlAO%Gi!!QM)2E@|jV;>?iSgo-3}r=e1@msGiR=|K_zddWIBYwBu3zpIu36ewLl z;`|?xz&Af?82KlI5G5=aL~Ig+r@xN~J}VOhdfP7h~<>Vj*i6W5E&u zYC&_tgxrcC^2hz!v802fRFQi_m8B?|dd=9hM4X(LCWAo)^h4c-$fd^F-( zs+4*{Y(;8`124MaW;lPO5Yvnl6awO=Btb+8Co@JAt;Q&D<{7Am3iX7kWZ65a@c+++ z|9@`7pS>6x-XWr=;;a*B%~GC#9#iyWv4;yAIhoh4QT+N!kTg<|B5Z^0t#xPQ8@tf z4;M&4YBu}f?hGB3!uxX|fCDf?G|GyRf|E&#whCpp7poGKFypwos;J1Oh z@TI}@&H%JBvSJ~Y7frMgcH_MnT;M}SG)f^VAwWcwCu1)hX+EdQJ=&RJqr&dNhzsWc z57quFwGd{Sq|U?%a#-i2$=H>N-IrD*78aID_RKO5BmElTQ5+VIIHgm%B#7;wO|LZ0}><8&)s}V^CvMA+zFF6>Dkuy2MN=V`cNv_Vkd?V`^lTS+?RzNmMh< zA~RNHCXW~eTnKXhP-{&yAyr6|lV^TGZZVtaDzIs$;DW9WRAELH{y$at|5O|P?w%N1 zS(NvznjJbZzO?0G%C{R0aZ4h{|uB*1U7yEA7}W*bj7@;rN<{X}V!iQ1x;S!QT? zQ@wJUIfq2}urIKa)C2CX03~${1H`+fJzP|<#Uxsvdl373#@xSsjli$d=8YUZdhEo> zvlp(AI5K_;`9wWLt}P}La3N8LqYD3@Dg1w?4ga~|$Y9;Nc8Lrw1M$eRIezN2v0OLq zfIQ5eJlXEKbLPmiY@#~0L*wZ+Hc@5rkPF>cnYo-Oyh+mt+?!|4CZG@W_x8-4MHJy! zPk-*z@uPU)=P|5L{jZ%9n=`AgTy8ku5H z@F1~+gE{4l$>Ry}CF=9!(IbZqOdQJjuHQEKmpfqZStV1pldd#$<|A}bmn5y&qH;Km zvi)Cww($SiHvFSPTgD?R04L3GM6HX^+RG5H%GY@0ViJz-bb)-G69i$Bh-wc;bTx_V3$AHshh8V<%3ZzhrvhxY4!$`{xS(&$Zz{eRg+G zFJZZ~{srA#@}r-W@7a*Z1k+2eUnVzvCnvvoW=g&V({ zKpJa8fX3fgM?kVHoV%BR{E}lAe?BwZl=Ly0k zoS#hJQ_ieM2?#%T?GAaoQ)kZU=^I?QcwyiC?7dF-byn^ul9~*t(7~z#_rTOiYhzfoP3~H-WX%SWy!zQE9R+>n zl(FpK9ZUUvc4a4-Vk+4bs@AinQDFhTKfG`I8!x~3(kq*G9J#<^{`Q2~3r)Csbls}u zD^{*qvubhAOy&R-1!6C*SvKJMtp}Z*V{Ts+j#DR(9@w?*op*NZKYoc)0%Io4m_N8| z^_mq+(a9DsBDt#zwr5#??;?fcuNKXl##)=Spc}Vt;OHX~8y&2ZmD=@7tkTY$IJAE+ z8F~j!Tzi0aV8ZRH4Ueo{+TYvT+t=UU(>1B%!8puAh>n{#?_%-CC>v*T=lvUKfyWN* z-46C!-r05Z(j5xTcFvf;WDS$blEHp*dzLI3=$<-$JaIqcFzDQd23fj~BT{_w`1{u> z_i~yH^{sEcvFXjXcOAV<$*(aJX3Sr_cH@SXl=T=K7#tYr>6!?gByk+MrQ`YD*hyG? z#+ej`!g6FElAm0`9f!`{#3(Sj>i_&=;s1+m_)qB`T(Op9*j}?3Z+( zdGhKltSV#1f!@?9u>IAG=gH~b^UkK%-+1et-N&zBmb=&4)w^`f`ZX(;IQk10E$r=@ z#L|s~J#sy8;NU5^hrN}><=q?BZ8`knT<0jAUTfTn7>ZMHgy?q0u zX-dl`Y}Rp^O4&Rz} zYnCkXTh8IvCA}K7ef*{wtoE^f?Q$4@ zVQzlLMC>{fppp^he>ERNBHnr(uk;AFlS&nbUUi>|K-B} zm)r1XE!M}PX;IIN3CQV*NPTj35|KrgAO2mY+#9U)89vGv(z|Ks!rT zP)LOAv-wQf^QVv3EQgT3%DN1AZr>d{VJg~UC$rF1z#H1Tee+vyZGLChk@KhX9gKqXyzALlOZ{o!71@IVf>i8=*#CRp|gDp z#k6)DJbmTb<*T=m`b(BA>FdE9NJ4HOGq&J^6%x_29gZ{29`DgE$N`L&&E^2G-+r;Ggy5?t<1mXtp&vuMs($Oa&fF0brNrIr!3m&g+2=4*@0P9HIyuu_BC&ht7+{4v755`ZL-qk&KRN?ZzQ72IZPU5gUt>W%6w`}Q9^Otp?HH}9d}O`Fv{ zZ$1g+xZI{b#1OA-RR<&lKoH2&HXna{2kHT~*kh^fKyd(lGHQ8Ub08!93s`tq`Ri~_ z3<2(7PJ>ywQoW_MuIbqRp{PsNio&9MAU=X?H}8#|ICW+ho<;qU=zOMw6L&@+3YzA) zPI8T zk}Qb-rjNA*E~Un#r9@F6b=4XG9+{9$gSG3rcaVVssvC(^G-gC};~+F*={`jzC{2v# zfl7n;pN&(-j9>@?wj!HREkpnq2w;fI$Zf;ozy43*|9{%>uZ#;l;sTa=e1e|*^8Y7L z2Yp)Ctns*-V<^I5kPk5xWYET+u4NADK!y_;fZ7KOlMqfUZ(=S8&_F3Lm{{$=WCHwf zXc>tSys4*OL=%685@^IJranl*SPi~$Mi6bLC~gvxqYQ}gK$xaL_#!1IxHE19%Ft9` z$SS>^OGH^Azzbd(M4I3ww2EUEA<1DF=Iy3R30Dr5+=yI#N;HNQ%aFQ5^y7wf@r)LKtLVF332M0vi(Se zn}|O{4h`B#z@}@#5Dwv{Fs~8+97Sv&aX(zqTg8XziJZS&2S9$ZIi@|ho9^nQ^11}Y ze}tKy0ZuDfj$H14kNCg;SNQ+GHv9?D*HXin-~>)AC8NjqGMKOsqo_=k1R{wuj1FJ8 znGF4Ac#-T$8BlplSKmSo;$W75+xsN~+jrq@FWS*zL|?96XU}Q89JjzH9App|!o(yY z5%#^Yid+_I;67+vFIVvn^DQs91ZPPAn55AVgeUU{Ne&+4c}5lfzh3zNdK>*8Uv(GS|v2?J#yygqQ@F6dKrl%v!$;B)$~(t?hT!9^V%C$akd z+F(b=&#t!9$Zf;s|KBM5f1?fm+l%V=J4P2i*3t2wf3&0HxBhNN$N&7fj*jnmv7_Vc z*#^}NK7E6OP&mS2TW5)gXl(DMc2IPgTEEo&Lii&m?pwKS+N3eJZ{Q7L+Ewm%653@w zsrlU$?bTdNm>D7CM1MhV(HEnwq0H5ZB`O6G#mHN6;)(iZDqZ2 z!)*8TaW^lVre5EbD_DRN=%p+7hKsEkMpLswWTk-GNPLjt-fXHdL8;1SVdel3Ozbk8 zvVi@#6;~|onci_}=$%)-`o+(G{_|h>!k51M<*$70n=ik)VuHzx35_ zytd`Qg)!YrHazw02R`uZQ;)4*xpWa>LR2Zdf8+d7O2=cf+_~@Q`P-A`E?NKN2S4^b z-~Z{~_v!EZo=<$}$(22mZk^u0`5V7o)ITyGhw=Y!75=}~hX1eq^3VVL=RWsyKmUur z^eg}S|9$>-~$JZ|D zoiznJ?}ZZwwr_szWs1gr?HgZz@tZHb^6KkvZrMqFS1SKr#`!}?2&;O623e2Knct72 zhbq92Kk*p8zJ7d+!~tj$qNcA!da2&}`l~O$^4cc+vRijhu=nKUdy{7`7#LiHN0IFs zEIQYVt+!|HOv<=kXIp^72lwsXPQ76Yy0dh>M5LmcgbPp008&LxTLRJkntzC5ckxd( z$blsk3}3fl<0BNQrTFK6ZHVpsY zF8qJH4Sz&7aXKvJuP0NAnCzxjCh%Oje)A5FAWTAT!$OqqlBG+RET;4-e1pv|wl*gL z#xYUkSOBB|bE`-Wm`B69>{cQedW_MdD<V6a!2i zVOD`^1*V>wxJSlemZ5Gdqj!Rt<}Ulgk}s;6;uNOLDj|w*7z)a z)mWqIbKkfATUjEnc~n95Us}E5P5zB4{J&WEf3Xe!W=t3(C;b}D82GXna0t`r)*8QX zr=!Oq$@|A_XZo+knxp|IS2Tw=5NOn`TwZJmG%*$9fZiAZwB4lnT;?Bo6*{&1uQov# z8iSEGqcSaHO3{ljbpH57J7HI9e!Iq30zGu^+B%0 zw*fhjR~-pfl#vyI6d*M;X&110j3?yk(gvi@UB_1O zVd)=V`I_%g@#=dYtt67>7dh5GitBvJ)K2LK?to(itT?~KO(a28hA!YDXj&4Y#16B~ zyDjvBITE62K4c20R}z;_!japC;s4db|Eq2IM+_Ek$*J|f;WeJ%_AqZFJHzdMphPIa zplFEe79XEdz(MsvVa_KOU$U^6`g$};bxaSXv#gwdaw+|rgClyB8o7-|^yCOX<5S&v z9_M2OMIL+>_ zhv{49VtG>)A);6AeE4niLdJ!makG>xDM28Mmu6Wa+0#Ua$oc%%erY*Onc!(64f4cU zS-<-c&#mqeGq|!NLvqP<@aiR1n%zRH>U8vM`sGy}SBK{4klw@h zb;6=X=Xfcw)jW?M@#jGWZ1FgsrPclChxoF(jLgSj_$A01eoGahw zz0-x?ra4p9p-TQzC#!=!n(r#WCEprb;)?{WRy| z`fWZHxFAyxKGN(~gWU{yhBWYqY9U=LCV)@?6Ew%<@Yb2CUqg4&7*OOG$*KN(Ch0_w zAi)TdJo{3bY!1t}9-WouyQG_L3Z0TSzLlEkSU2Z+M_?O<|2GT&Z?@sz8l(&(4;kBL zOlxctB^6Mbhs5$^(23;8A->VF=5V$;`O@Y-O`huVoh zr2zlxg-jllLi3&u1*%7Rd~UQ)5QP@+fXuzI%F2yVmhf4T5~xefpDY1mP1%Q?AEk&$$Jl~?>#O(A|&kS+0*h(&QtGs^c#e-k|&ZR0y@{>tDLzJ^$$;> z>Yl@S@`N_~`YQkHA>S#bBH8NKH9b6HB)4Jszf$N+a0czCXs3&V}PtC#tr`L;M%QPC0?VeRr85waU`^LpHx%dcu7>56=h5xH<_@6#UJkH5W z4~&VN*0W^g@}+}=i&v~#zHIrr$De+D?TVG_9@(&F86})1-@P!jYwKIDeC4-({Wrh# z(wkeh?c8_h=!w&3iT=6lrmx429HGn}!GgEOusiHr<9>|kpllpv1N#OSFJG~0-Nr{A z-NJYj3={W&3V6A3lGTjiU(&=)7~~!s)|1 zUi<2ozxK-Oo3`vbKXKvXAO6%2{^(~v``MrP>}P-M$A07oKDuJezAyi;pZ%$y{K=pC z+;6^d=;FO`53XN0cm8U}R8j{g-Mx77$g#_l`ZqrR$xr{#k9_7cpZVb*`ho9yX5pBj zSAYHIf99t==x2ZNw?-)R`B}s8f35I;tquPd-`sZK^sPzr2M6Z4$!^EFJ#W3SdGCeJ z-t{kh_osjGGe7>>AOEq>{J|go;Xm-bAAa_UjmzgvymoBIE5Gw=zxcVI`RSke+0T9M z7k>Fye)a!;@#XCn0b-lq2{U^wBsQ>c*{Y=j3wj5ZtV+n(jLv)b{BM%Ud&=0Y1b$s+ z+gQs;ox5^({N!m}^A=HeX6fQZr1DRublm;BH!hw&vVZrEcc{|Ew(bWK_eBA)6V!6b z#uLT@VM@dqJ!LAfebCu#@<=C+A#;%3i3t(mIP^pgo96Q_2~?WvSi(g5eN zIkge1qYD4m3;);K@F%v0U@D#aCftv?L-A)qHSRo^IK8WD>bP5%38qRY74cH++C6dl zTsCK4x@tWEl*^a8bvN~zDET#gBFW>4v7#oYd$wZdQ8FWQi59W4ccpfloM(Uuz05M7 zM#K=2LuB&y^!E4lAuY)1P0Uyqdx2YKlENXDemi;mD0@l|vBmdciaoM1F`Gr7J4f=D zWkcO2q6~(}d+s9fegygu@J&Pt0W5@iA?zt+l^7Jh!7G8gf#9HN{C0LI=J9@r_N5sqt({@KI_cau%(F3tpi88t@wpoOOi9y6{y%$@KsKAK6a zd4kS~Eu;Fdk-Zf7rx|}}3>uMz7AhiQj9Vb$q-D^^G6lng1}K#o)sONl(4)~aMy3=P zCjU1T{+rtHN54{yQh`!O#`&Kj>Y)iEC=LEfESJO~sTdq4wIn9fEY6Ax)6)kR#&m4d zok4cC7~HkIl+yR^G7TlISrTe!!k=WTS9u4?5CT{+gUBaCh=~58vVcW~n&3bp0~5DY zuI9LiJXLk%bjc~?nTf)dfJK524LF2UJom(riG2O4VfepU_`lhPe;7qZs3td?{0GM} zUg2Fp;nOVKqjM|PXZMKjPMmYFB385L#_2c#i= zAnlF)l~UyOeB&4SG*S8q^(DVwHidhOS9vu2*YD6R6aC9;URVU6ISk>DKNvZY!amra ztF_ceubcbGF?Aj?*Eyee!_BaDlqXex;hsDc7T3Eefj69=Cw>!MJoPB6|NVC1|8^Vx z3{DV~^&=$X(2au@Egp@41Z((()XPlj3@IOSkV6{@O5FwLS88oJ%aej-jJ8dd@BIJd zy$O6()ww>r_Q?ndWK=>9YLde|2|*ME^^k-u$q@`m(2xW@5(qNUT+yFc({_w#8c8IyPZYAcP_x``{|NVX^D_MJu zd#!!mXRY^r*R(f}XlTa5a%nMZgKkIZE}Vj#Lp}k^(+5$Ka64fiMMbKcNyDgA}|UKyN_d+Ewq`|I?`PZ*<_# zJ$f|M;i;*U^~-*4&>OE*v%wNbRa)3+}Tmy%4g!0HmErEvF?Ri3(Gh`8n zC#-f+lJPXFK?1dL*)NP+qy8MG4d*N*X(oj}x_I0;D4eulps* zDhLTEOwnm1D&l3IHJb|irH!^EaY|P2z!6p>%ou}AxgU4YXvxeTPfmb#g+ht1=Hler z!gY9)3?I-2Y1o9NC0p95`~*VHW}q7c+lqxVM?7f8tj~%GOD6>X9UA`~4*c2WEF!Q+ zaO#FGXhk6LPXp>Wc!1!ISV`o?ZUF4TQWi494Suzm-WM^44WY=T{z7IYaD@7nO+R7J}P6+-x zHU2vt_zTkqtC#r_zEXvK9MqFdl6+?ib$`yKppVILKzBEGO-)4HKvFWGi3&;w_k#1i zE$Gsc7jhkCLFyrgpk^W5LjYqr?8|~NOT(>lGoC>HEp3$(#MI%i-w)##uo3Da zxM1i)(JoJmidh|6o;*LcgJW_-k3qGL$k{E;xWW>A{HPH8cWL~0Iq;V)9P9~v=@*E| ze$QS?hD&NeqlPjMii!RXS04`L7r@0}E{(5UM*HD-N}$EP;JheCrjq0p?nKMd$YUjl6a#rH6=TvAO5Z#m+f|0NW;71pni1W>8ba)V}-3bF> zPJk-nOQaHi0gHe^G)J>kAMnc{A@I|B8UF8U{NH!tFP+tz1d{$Ql3&;Wxhnw{sVP`% z;mqd19xdNp#^|11jZ=Y~`9nJabszdx5j_B1Aiil{uC3-RTZqL;O!k)kHLZr7K8b+MKVct9{jWSfJyA z1(g#{Aj-5LTMvX9ySX-O#ll{Yg5o$)crxrdz2gUk^#8pY|Gf_U*&jJSif#>hLe~=l z>giXIhfJCRJccj#;*>fd7Y>1yd%kKJ=wqc8oI-0;5U(uEqBun^1unWM88CYsX6UV{ zJ1ziVz8@h@`;lAAr~v(%e1pw_(#H?I@q2bDq(=dkr?5FIq?5t83LafpbGJ|zH9Qdi@>yD0V(8#k32aqUvaQQJT z2l4oER-F9QUiSWn4>bNCIPfRnH0%(XvBP0Jy9sizeZa-P=J52>a0-o`iY(lk zPZM4)YB$OfzAhz5W?i~S0Ny}}A`W^dWWESxM)F@T+}Npl6hhsAqY9BnxX4YGE4Pbe z4`!l=1>sk<5@pi5g*v9jn8HnG@3g_i6n1Iq)YvKn@E*Er|t4K#GvY4^5(nd;vy= z-!jXJ??ImU?C2+W2mj|^^+feez}q4-hv2izg9aqvV}YN4jL*e2wX`4jsQWW~D5Ot9 z3ifvLGrV}&pWE#oI6&SEn4Az7gKvg$&yLp>vY`;Au-n&0z-l89yfk|5lBEs{?&+R?frzhX{!B-_9uOa012VKEJ zxG;k$JQOPHK9tIAgxId#KRG$>n@^8m!}rmTI`;hiudlxRn=LPFe*XE*FFgOuGtd9_ zwTAX%5y_cjuPC^7F1D#JxZy^az=A6O+|rW#$s+5a0Vjdq-xNs@P*Lx@kZK__zL;(i~;7(Qm) zMHgRsxi{yEOD`HbjGrM-igSH=^l-=CUAx}fy|;NE-X#0+=Vx@7FbjnA|8|Xky958P zBl}|ZCV9}1;lsydPrPLEm6uPRJY~w{OE0--{D=$AO^6104|a4O*uSs2?ch;v`o#y{ zQwMoQOqe|73U6-Cm6uP-zHsbVeC9nX<9vK(9Sj~HWb4~E;hdCyv9WP|BTpVX{Ndq` zKRMimH~F@;w(QxtW7lqA`T^e4+x)=?5D@!2JK9_J>}hJ**V^9o;Q{RIKLT$52@Y-G zYf)dG>OreGdZ=?>bIS+KtzFple+cgc-nX}D@B6!U{QaGGad7CZzwg|$cTdy44je{; zppfs%V^0_sgK&00-co${!vhD7;B&IaKl|)tL>yY28)q1@vIaw1;jQ=KYeMkv(D-*a z@EcDrQKE`I;<6rf-V)~^F%p5v;?3hub zFC0I9+!%bVJ2T_FLHP1&CSK4z2=D67I1e9y#-T6wph5TscX}FM{f+5C81D0wO`H5g z9CZeKm_vx;!1EsX_$$N@z6#2B z(L+ms=729e@jF62JpOU?@Bx0LY&TvHzGF8&7l$vEbu$@D85rBhUT_XZA|b5sX4$y# zMgLpY|2j4Poeuot@rk`?*VkWu`tjip_jh!*x4gfjamTLr-+yn{d++UTYUStEj(zz} zM4x`(s6&U37%?0#PRGZh@x3>k)8bqT2ax>MD!=Q6=7Yf;Ug?bUJn~ssd=&cp^9G)q zien!51RPFgV4m$G#@? z^2P>ywzqNT&K*1V?CUym^w;1hgkj)1U zN?Qv#|tBTNWdlmj&8viZ_{<5|!`*E=#PsWIO z5gA@dzm`dRK{^hfgJcUy!ePC0Qd8vU7970>Kt-P~ZRg++;sZQ^cw@52gt^=Xhj#2XYcK zY+&WsovqJWVH^h!_g`~3$Aut_@h~WqaUoCc>19B85G^Sf1cION)1P?vKhF4Jy+}+7 z+78+cVkL)lc8^U<48Ij1e=MAB1%?%(R#}Ra*U6)?aaxgv^NI*qbBJtEnB$Wlfq^Y2 zEFkpx+co-^=j7V0=0*65#2B9trcez{5i$bZ`yZ&W|4!(*Hly_ePDzerxr zDLIk1dg9ocah6pW${KJUs1|xkpOf{Nywlwpa)OeHJsh20Iy!t@ZV&^mL_MAiLURf7 z3HzTetn68U$l-c3bCIdgz|*VnKcw+LC<$OdccHxI zzre^^qY=cYAHo9+MHPUa2uJ~{mMh@H8fVRnW$q6=TF>UvgPA|hMQW8y1T}><|0(vh zP9QUrY)`PFAn3+MmM-jE8l1#&jo=&T3}~5D3wWVEfIq9*etnX=-g*`Ohc*6(9r%mN zBxGTaW@l%2*Cxmg5YJJ$kWtosPZJa$-a|IcDQvlct`EZy|KVDW9mgmbS@OYEWHJ$j zXclAE%klpsrg0caUohpR6L-YIMUQuVBmS zW&1xr()fSmz#nuV=M*{3PAPqs9oF*b-pgJLBW%>}`{Wk%Ydt{N11{Pi9)C#G8;hAK zn80#a5XuynImvIVdytP+!AK@K-l4ctQp8s?)qNS;I1K{i68SvDCK)5!}ErMZu0Nuqw}O(fQS z6V5r&OJ*gSiRDVM@Z-V4)`aN)pJ@C)ao{gpT8IbQ3G=qNJ;^PMSS~yT24nGbEd$8S zNmIE%Unku`Xi{5LcTw1>E^6JKE|qqM5$NssBN@bA|6cRTRc9n~VnH?qq{cSq@# z?3bJxu=uBgl?qE0rb-{Ok-w8?3!mqqe;N)OW#}m5ZENJsp*)A)ymI7@2?0F~fGvLf zv&Zr>G?m*a380v=8k!(zIC#W|MV;6*eo}`2a<&Zf2$)XzTu)P2`;W2Gq?;dJEutr~ zFskWg@BcZf@jvRopHx8);|G!SK@PylNdRsJmksiioEG8HO0bnu;|&L*f^(~EA^a1U z$HBx1_Yl@h76Be1Y(W??v^oHXYS09LJU9NJ8K6?2h^o+AZT>HOhAf3#g~gBuP%4n` zlO4g8yn2H%Wdb6}g?NM9#}`MCL6J|fIO>}$Mt(CQ!nX6{hlTY2V;cWs4*W?Ap(ZH{ z`f%QtqkkB75Bb2K=KUbF))BO#z)na7+v2$Z-NNKFnx)S3#HVEg;0^hp)5|=Ib1M)!l@C)RT_#68}MYvgbGEul<7dUXW=@0 z?+ZRo4k6IX)_*?L_2|A#brZAu#=C$;3 zhp=uaI-~W%7ENoGrZJ_Dk$xM<- zFTzy=O!Po+kXEo@tQhnZp(hfp&MFwNqY-h^R*Pz&F1iJPU@`oXpGb>fzY`BT z3e`38YXMri96J^}6GSg*3N-;;oMM>SdH7Ra8zkZ$5+0hn?xkeKY(BcFp)xiM4$#$#{UZk{vaV%=4@W9X~(V%8rjq$#Yimz2h>Sx;>Nt7ngtNWeUO~+5J-!G z5H`V0Hy;5-i*gG9omYd*D-6Mr+jy%LVvRwV*b?LkB%AC8VQZs0sT(NoM{YD8wjUWF zuv`{RhskFY7%Vw_JR$g>(DndwJCb2@qDSK5PV}q}@oFQkm4uJH!Z*d=7aCx~!gXN{k&XZIbK@ z*po@Y$7V~z>VgKzL4O!}Lh%1m+?_;P?qPCel69Aj!J0J8n~T|n-n1YWzdINBnH@=rBSje;Z8mrpEwL*5B{VO{J+xp zf91emx`y;q&{+DsO!0`kN8cA}laUL}r7`fr9*_LCkkuh%27e}z1uIKt$Wj1hj13}- z=8eLp>DsSjmRSH!J;{^+rwGW(r8JTC#FxK~yupqhh-V77D*SOz_Ewv^<|Y zqMd=R^|ZVz{7eY`r!@Yj9QcEtq=WQyQc*AzatS>^N+A)Gf(BHSLxNUzi5J`iaYAna z4G1kznTMdseXN5<*QSfo)oA>Yl?C8#8oS-tIrO~(DIbkZ!cNi+L)wmYvosbIBH8G| z!y9bl_*HgP__!hXf35NV`V9Q>dqER1cDK`=m4pXHi9#@kML$GH3OhB7ouBtJK>4m6 zD@m6w-xp+d{!8h>8c-hnQkrB&jR>$hwi=BI9nHBBBaQV8tRx0)lWo~Hx?M{s$OI^n zD2!~Oaz-KH6bQlp8;$=r4*Z4ZiyQ?xC`~ORAyNool8-*2na-s{)*Va~OGkHW1}%cy zEG76EK%2X0?kfNTXB%Y6F1WKKCeXE70K=!fOd5GYO^SvWcfDFCj^wPk4a5rcu`5 zFhC%4ARl0fY*thSp`Ej(>DI=(_!t(iAS;lp+@%5|$|H3>+=#5G2`!JeK&_Vp!x4q zNmQS9?tSn5y?b`N_3GB=pL*i)x{VtiePsQkk8XHuIku>8v- z9Uts{f5+e7`r98~e0CGduB+Sl*an!oUqAnw*LHNBh)GT#n(g(?F28=>ym=L6bLNzl z&8fKFUpaS9VeaJ1rd%<3TvlrIm!EXD?0J7r6HXboz%=jMkMA6QeE6eJa2)JIct1LV z!(~T5`^wcPT(Rfx3c=sd_!|!VY~|K83W@4orwTkmYg3DBm_k3K&c z+5g38%)!Hk4;wLJWUs>CrSW$; z@Err!@CAp*?i&-`|PP z_jMgO_#sNd0Z$s7*JX#4cf5Sk{mCcz;-Ku`k%L6sA@n(4{w3RcxK)HPI07Wch|pN@ zdO>0SXa;z>6L&9Q=K`7uR*raJ;q+t`eb!7ATz(=HN7Q;1{t+7g2nYVM-lmW7;h+qu z#>;8Cang>5KKS}=7##28NgHJ2mJFN^WPV2Qu!v>BP(Wrb{mC35)`ckYflVY1-N*73 zki40HvUgB6cwn0jzcwbDv}DJQ%-KSEQ*>kY2osWUDEhg!hlxE-^z-|W$B*NMA=o^0 z;!Bl0^0Lda$6q=*dqn1WX~}WwGd9VN)_tve-u=s8-+K4mH~;$jo4Z;Mbf3ga0%PJ5 zQqnKT8a%vL;UB5-k96QaHv5vvS4_EN+{mo-B%J8y=Xx-E_BEKQ!pBjdgGEXYitU%0 zHt?L(LBq!mA9U_H$?z^N)ao96EFexj54Y!4MhU7vFruyM_2IKfXtftp{B=O5v3b z{GJd#7>U;oMabJ>K0Ed)zeWma!B+%But5KV1W*w?kj|EhwuW}bl}xCFm|FZ2?-a&c zKt4Kj03Q(D*VeWV%!y3tz1_|G_Tl9a2YMC$Q5yd!2mXgY!HZF_844uC5&)N5sgZw; zFQbC7hv+Qy>^Ix9q_|4&00P!{V%WLJH(-x_eMMKCzpe5FhPA zQj4pX0=qZ-oH4-bBt*OCxou1dbEg*BJR}f5_=~+;GTBQ_ zf~yI@Il_?f0^VKEY&6V<#tYnKA&`q%Yz3V8=RiXy8DvDjXTTro>s9ziYy6`f_;ct* zw#w;tJz0*)5t*T(Fa>`XsUR#LU(6IoZEOfOpD-mLbw{l6(D34!=)tVM&sb#J#Og0PCZ(Hs#hZMwlLm-O}sqK$+wL0 zj5vjpd_9mtNV5VK%KBL(3YASMxN<`w*P^)FojPO~n-Kj!M&lpjz#k;wNSmD=orL{_ z296}i8XXZ4TySA5aFdR!Z$wUXXW+_cBwH(qvLh3W9Et$QEp0@v@DX4^1+gqw%I2mp zU6){mXq3cez^B9Gk)2DA#S=<|^kO_E0+<*;4$%SiJOI4t_53xQpW;Pk7bKdo%q3U2 z*6-E7I^3=y_{VDeV;%UDIx?$5mwXZ~38oFG$6iP3T3%+8Gu*g%; z7CIXPkfi)rknm+nWy%iTicj`186^-72yBoW3A%jvP#ThHY}}+~=0~B(CV7y`=V3#` z4Qwbdyj23yMCoG|_F$b(JrF*&3EijB??DS#ZV3<$N76`#Co`d!hLPcFLh$da@$c)v zpBxgu-$4kQqlzmG7A#hzf#$>#FLcGl%B&f&(3$*LI5I*sxQc+V0ureu26;QIFnTzm z6rdgnTarNw1;&UF5-~)94x@z4DOra2>_|d7o?EFWZ z#y`%1KWRlZ>9mBF5F$7n5Go0+Krzr98A*37!9}G4LO?(yKXZe&0F`-=Q}AUj`VdPU zP+AAj=I5RymIVsx`aUi6Spt2Mg=-KnyqU5dTLO^6F0Gpit}G7ah>uH;mRFa{TKFbw zrpi?oCs8u;>Bs3c{XbsgAMe25q6#T3mPwV0tdke;UtYL+ zL!LlJEzDY!2=Zb}T@Z#XS%veG;pjVM^~Wv`)xyhL$kt({eEl$dD5-)^0n0=w99Kvb zN*wD-iG@FkD^3Xbr2n=qvXZk8g1Ocbll0T)^Enpl2010CPe<@>t2MVzXN}&$kg7@ zFGx?JBZ!NDkXR^fBP9^9QRoQWg{4nRhYWU8(36ZBf9$WPsjIz$YjD$#C zJEE-YXO@bqr<*|?=s(?HjpUi%8d0+(OlT)lQEKLahi5mYz z2mTr@kW8o}SD{NVh!m2TkwQy)wV@s+|4^eCLqIGj=-~vP9j&tp^>w5aCKXAkqP?*+ ze$JCI{F73}1D}rKwrwetIjxL39J~f&<*DS6kY=?L*^UZ7+7H_&ePL`u@K4hCCpqvJ z5(p*aq7k(FoJBYStNS5o27)oG<%pNbq%>mTC2$Oi(I{#(tq2P$X%qBYh_W)mDvpk| zQlwQ`#c2muPEzxsh##xx)iO4hkWF49CnyKt5m_bTfVv|ide{7avc^Bzfxjr(LJbIY zITH_;+7{<^ghCYdj3OZ|eT)K?_t0ovOq2!Q#0Y8+qD)X1gGb`zqSKHl{|v#1-p*IZ ziL%a@hVY;JKxlY=18?`0Lmc9#k7*LnS+t+Ar&G?jK^LkEWZ`0@Lc7g`qZ`uyQ#Af5 z4*WSrA_CC=I7+hpPzz> zx{+9oN?M;ZIyO8G9CY(z8x$kmnHTBJxLSN5=mJlRD`?&ihNPJi*$e+DKfr6k5qJAH zh2Wp6@lSQ&4@!^$Q)-GxB|p|iFU@d1jni!~oPE>NX8P=xJ%`5mG#$eoAB@$Dd5Ghm z4q5X|GDXB}h(^JDJBwtq%4Jo^$rR2dNj{zAys|>xi%hIeiqKgtF9KNn(~F9H1~I`$ zk+nuE)VtpQa*oFT90&fIVx*p6q5&iA8Po>kW(14|N9JCkv9UqmpV3s>VEK>cBR-}{ zLy`t1-Hm&Cn68a{suP(dmoCdrk~@)6H%2?dY26U<(rD!hKl`(#Z%{w5y%sazXo6D@ z!a~SBEU^V9gDoy$Y(o0~xf=g-9r#l?3n6UgOhzu^K!gIO1~kWq6yR(cjGjyrVPQq+ z$u)ULECeg1IP+RL&dkVI$--M%l`J(`<-pN(@JcDe&-qd!>DXX0JtCDHmFP^&D4DGn zkXa!u)sQBJ^=l83!x;Y1{l5b={sSENYf6yVz(S^h=+*0agh$Ksvn05*8Lj@|sy*yf z+Gq)_#k8e2isq;%Yb@nlE9Akf9O+w1IwxxouVW;)omWR&IW6Es$a6FxmNMT)lpY-` zsl1SH&{!U_4Lf%@x*`2PP2->Dz~82a47KE9QAcQGacU|El2J&fwI`vY48kQ1IpN|a zJEN6fm^gVdnX=r29HMD}tqY6CRT9p=S(v(%!cwJt{Wz>atdwmPr^~b|*N)_-@Sr5J z?ve6%JL_grIO1;qrV#uGYWxQ}@Yi%8JxNV&;t?N6!w3r)LZQ8+pN?l3h{|3utDC`* z(LWvANSx%eI;jlR*~OVjx;L`QnJfwFjxU{`MKGTP7|(z58$^>qFj-f`AjhMUgJRwu zo?-!tJPE5)BK0 znXNSpLsrHK!ojAX@v?4|LdcO>3d@n=q(}+tXlXlA6!HnuQW~pa$PVcHS!9s=qq*9R zkdJE>N9n+5>+qkhiPtbSA^5vB{%!~ULPnu2iJFkg+6SjpQ`pjhYI^A^8 z!O*P;2=hoO^dgR3FW9`;iLGeqpW@ed*=6e|V1g7TSC(i+@X1&^4WG}dkzPBCPP8)U zrAj7A7P&|JrHJsngy26&<3GrWztF^9n$=X5C=!ailLXZyCZ&bi42z$A({4NHRJwCX zzqI=%T}H#OOVZC?h;kSOkEjLo!$_o^O)CtdGw9SauhPMFfk@CHxdszZ0Q~Z=UDjYn zXwe2)7oN!LUloG?c^d!o9Qc!5kl_Lc2}X3ZVTxsRBrs>Pg|qZNwu4~n&^?b$L^lvR zu(n~y_A?Wkj)gg@;WlDjvsFJFX##c&p}Ij$(L$7ph-LIU;)pRHS!du?egG~~Ad9nq zjXZ^JZH@;DKW_;B=WG1Wci>MDG!n!>j1F4~8YAYh41E$3(8RA3g}Rc2urACAxD~1M z3jESKgx8=*$OeX~l;O`34>}<2h>_YLi@e&0yh-w%PLc?HVG;b-iP|saqZ-L!Rbv0F zaCAfPzd+-EfdhY`49PAu4_-MZM7Rhdg?T6wMCLOeS~D0MdJO8blk4#EI?@# zaEo0jT<`(ZF4VUi*&1Ru6X6O-wL34nv-D@Xr(4~cTq2mjrmK6s)#Ih9N)(Hde3FOv zgs}<1KSSf6;lMvg0wD!My2pzL*pNKjK@G!;m4VUlp3W+M>u82`mqu1@#htvv#+fO& zS8&&TQeT-t8VY%VdDU4y}&=+R4sx^APm&&y8H6i$C zY5cPs_&+p2smn5yTAQU5>ER5MGK`BFt<;rQYdSf@yRTCjH+Goo$UV&Tt>s z0_p}e*?m|R`*)wg=-YkZ<%j7plc`h;W2UO;!Bh@##b~e3U~Ef+GC_|EM-^~i_?i&> z2W$KXJMdS1q70XpG>94ka`cJ1`*etiCxe!7ybp|h6>WzjFi;vK7pC6Rb62z~D%{ci z?>TEG8;SI{{b>1J8!Z3R|K%^wGf{zDx2 z+qAg)EV?-3U1ciqIpFdCmt6|%8er-EpFTr!#hGPVo?KYyfsQ;_rc73hVu@N*oG%?!T);)q zmr6{kQHfJw7r_4HZk4zamT7&!!{N9VPcaf>;ZIIC)_Rw=Ssu z_gimUc*lZy3vXF?`@99W-uj(erzzEn=kmiYACBjPxd;BJ`&HsV*x&y|CC(f_ZXOG$ ztXg=-_-y!ZTR5+Japi5d&Aa`3OIX$o-$5z5oX2sm*DB|2_@|Z_?eS`83cz3iegRq0R+Ms~0S}ec^X*vFluldy8)$KcT8}{yb+Q>sWy_wvRKP zY2v(jH+<*T>IL)X{rfH7U3kmUwa4kb=XZSRN@n`8(|MxF5_ssVVQPz*v`*%T05^DW?4U71^(=?Ti|CL z?Q+XH)BmUbv&;Wi_lGO?{9PgVkL)k~f20HdEe`|Zv+P!c8ULJR&rbiJguku)|F7=1 zpLt!aO1yfVN-TxF9hUxwVXLfohHcxc@E@h|ALYQGbVyyV>G4C*XM;tXS1flo+-%Yf zd5*08pWEO4FYf8I>iQkrZI7zNRj^YY(RKHSJ0Ib*pXFjJ?tDjDH}bOnKfzrDyJ7>} zvuv-zf3(Jbv;+UM>G8h}e;aMTt*rSL{h6QsaZf;2{7NN`hPxE*aJYjRw*~F)pV)W* zNt%7%Ppv#@{F_c zmBBUt8}~TNS@JFUzj^VWWA41)>3*=Cp&pdexeIlo%(wrn@7evD zN-TnZ1=>Mh_H==N2@^FbXeke z3);sb(EJeSy!1_#xc(#16!sq2rLa%JK64CX_wN7qZ5hgZ6L!i`;Oy`xA6JPvs51v~ zRd64IeGYkk19$kRDse09+0WCf@E@n~ALqb-^kuD_>&y&5`^Os4rdcG{u{6H zAMe2bHV~i&w1|WI5L^?kO`C=A@3iRD33oigX*otBmi^RsV28s`8cu@Cw8d81eE7d_ z`5%ItjqoDG5kwlnMQj%{7(FrBK&>W7%TlA z_?N@l^*sdt3RvFDxQF3i;|Q;ZKM&T_eNa#nboBTO3q`K<8Y5PlohrhfzcyTP*=Ce3#;3~SSW1L|sa8bFiIl?F+Y)uIM7is)2 za^OD*w8((9=`|SsC7`Jt9**#6SR21_@LvQQ1*#FFDe!x(bmqx}-!6}3Oh@=?So&!T z;V*%;+gB<46|gq{4#2+{mSxc{f&X?#cq#nfhqa%t2L5{->C54N$dSGR{)b`h_Ou56 z^|1EuK^0+ZLhzrc@t^3xe*eQiur^+;@OQ#8jrJh?M__GvapJ7-DTLKD-QSsi1$2XWgzfqg;ZKFN z<;9@0!Wjq;hGl!D84dq9SjsCtQ#hLt{4dt{U+lpD?B72Lv>|V`U8d(Dj=QX`hD$or zmRNBWmWwDgAAZu+cG;&FBaY?SF5{LWj(FHE<7yB`oy>L__YmT!YuYZnYCYnJz3mdi z4Tz(Du^BG!V>|ga^9s`WJ8YNbgtH03{}PS=B@X=m44RO}woCf#wCHHNq){v4IDWES z#{Hj|&rlxQfbFuZQ;5T(1zpB{n~8_c&*!vV@{Ux*Iol=g8-zHf*?63$I#& zIHuVy+aLh!##s>5&6ZQ`q>L~o( zHRl?ek=TFyd z7%tjV&Er;hixqCQ!h?&MzNw~A+$U?c!hIO`Z!6LFPj5JO*H(m8qYnQK?iPeE+OEre z1upCPGhD!1vu%ftKLMA|eb3HgcdbBv{~n!hC)_7lUKpDY{HJLAr#SH6w%4NXmB$h` zKNVTClP+)??md=3dX9rjT;{{wKzdI-mhkkIm(|q3Wxj{R-Bk0o6>f#g`vE0%OmbTv(EGt!`vRaJE%L>&f z)o@??e@)+#?+PSG;`5JwSD=1+a(r?meVg;`xaWg$&j#aku1)z>rAGDzBZsx9tg6B( zSv}bsE1sC~>**u^EwfaOR1FWevyS8Kb-s=YH7d4oqi=1F(QJ&*EPM<;^!oM>6Gr(Xo?c^qCvURKF~>vykL*tRI@e5Je$3NeblGy(g!Uru z1mdL{kG4JFDOc@f$@M!1Y)>ome%H6EzN2)O@kaVOw5Idh-$;BbttP9;wK_+&q^N=F zrpk*ww-oeDc&xCaVsAZ5*w*%-=cas?QC*5s(yI#h4ya8l_TE_FHdg0EwHR3oeC;Kp z7UHQY??GLxw{OFbEniflk##-NpAHxkp7!_k^vHAdZHTvgOur84hmn5Re{KG?zN*p= zw!APlA^2aZ@xRi6ziPR!ts$!>GdVh6&8h?r&2P2kr>(46?RAald*i?ehGlq&PpyZ#=JUv}ba`;fjr=wK0)9FZFelZck56 z+Mafauf1@*uQ=D8IUSG-JZD!gmW+=VUid8PYQ`XYSiG zi*w4RzU|vy|EH3-d}ZIgd+yrrzL`I@Vh^s~ij2(Ck~e&V{BQW$(%$e5^c$If^9@`= zdC-~`+g*9GZtm;(#)O^;wJL2+M4&dX=BnzsWjV!DUoEIBdDZu7L3?4;=54RMWNtRQ zfB(mVFz)`L`@g4Z{HHqb-&op^s2UQ}Un$s7SYPl2dbY3ecj#+sglbve_L9#{ncL9S z_G{h$8^^c5=zFoi9dJjw<5T<_5o>^V_iKONx0$i=?#LAXdc?XA``z|ue9r{){sOTP zh%Ih^!uRW7-j#@rMC^r-{B^;+4`WJSs^|h5M51z8&wXS8z z&8KYc`gy+cRFSJUcXb(;t@2eBws(#8tjs@LQCZpq&awiW<&E?{NpGb6#Mf5%fX|oP ztMJd!_~$tAzc1gNT1kzs;g?-6b=?nsTiDf*Q8QFU-=XfUG%i!4Vw!6_wJNu=s_?sA zDpPqfyM8n9UW9J$`XTzPYFN3yvS7)~yDOH=FfQ$@3eW%1)Nz5LoK^LOUKOe0hx@1J zOhrt7PM^r>UKM}iOcgoYKQ3^?3_E>Xfbop2nlU_(<4umNgcj-Yj|>!esXMy-{{8vM zZ>8?k#Yxie(KCb9h_~&Z;a~=3k^c}D7Dm-*oHguzzzL7Vzl|GP@ z-q2n+#xpkSaK)yIJ@wn`n_^tMx-+KvS_|)|FLNsT&W@mO6@6J3qvb4GM0vew(dD>a z?pq{fsm8$v+6!y42K$O!?S*##y=MOa=nA9gF!FK@8NLA!BXzu z1^Q9WQ{Gd?Hz1BOeJ5P%3bE?`g3reFjQdf}s;T!~^S1$)2Nt1c-#a5Yex(1atW|1d zPVUqz17$hMk^dpRyv8@uUo#^;V0fOwctLr}bBew0$R89?%6!kKhMgDqiX*<9rBicr z+>tkVwWPUY`W-&rbGPH3+vJ{Gr!P4p#T|+A;ujZCK9zM<=T{fR1)6f*T&4(H6N3LV zjsG+U{-keQpfVq{5ZN6U@E4FSI)0ubey$_l&ONb9d5&h+6}ey=Jn`A?Xv`&K_hgq< zLQ-U@jM(nSPIx*CeX|N$A+28>5ZitKiEDhA+KrFReJ#x$;f^oQ^%l63lc7%#pDP5P z5B4ihUIBC8dLs9%+!qzNUC15J){!kpzp{Ul@6urTb52}x)*WM|{2v~;(05@lmw950 zl`Cw)#}5m^-_-b<4*YEt20Q4QWzjXu=Lu45%!$mi=$h)lEk$r!v;SP*xxqV9Po$o8 zM~tJ6XsP4&{asjuck-SlEYfl;@){Oy?ePf5ALP~VysgxP2}-qQo_O&C^Ez{;In7*L z@P?5RXnirxdsBX-it~4S5(DmtTw3WK z>n+c}LnY;IoLe?MH9Og;HLCMALaQqC$7Zeb@9`U+m1fmkBXhO4xF9Yg#UI;!>4~_E zS^2Tu(@x}@k9!IWA~PBbufZq{R;@9a-jf-b5z{@p$ABB#oq3|j?3la9mE@gXP;2zf z-H`c4)I+Aqtj-(g&&!|VcV({ir&n&y%JCJcy28lpy21j}>r3~mtSdaLOe1@x*)yTN zB4T7}Lwkj5&Tm#N$~=*=ac#!cQoCoKp=C;u_spliBLa zS9=5N0)2B%Hne87__iDFK#I4yca8t^HU9Yy{8Ri9Sxvt40}-ol8heMt#GGr$rzxjOT5Zc@k{SkbAxA^`NlO( zQ7yAJ4EZSP8MC?~qat;J+o&=8c^zr5RaI9k%9PfG*%`K`j5s6`@@WZ{!bH* zruFr1Pgk|im;;TN^@_#t7bz+jmN77sK`})%l_Ft1t#y=8{apq7l1W|V^)vxNi9d1ojO~2B-C>6*FOr2rYsKm6I`ate%b6foInrY^<>Pd5Hfje!bc@EYf zissB1e~z&!{c>XyR`h0=MS00d|1s-7=F|*HP8x&w4SDwtxyrm*{l_e0-QpQldC!;+ z4ynp3N-WB`StZw36+e(womZY%o>QdU^>sy2zo;(nRs7$l@%K6KUumY-uP`^6l`}Rj z9HpLyMwOFSoSU_1y}3HFHoeIJia^p0w;XP|s$RIDa<*BOS68_zrDI`xWpcfzs;aoa ztSd8yrPn`fmYWOAje(x=RV-!UntxPEV1a)IYO3?2lt8;5rBqfG-;)IyU$Me$s>gVu zq;FRIke=+iik^v0_0_W*hKz~6Dew%QuRNwH;Z85(7MM2$+*YWrB->Z79yYg^UUBgX zv+we$$oYnm?@l&~(kjjENpBXuRr(v{PMR?5N1m^;%2iwGD%DjA9u~$Xr2k*7@xR)M zzl@v*=Nnl+r7x>CZAw<=%${t{k!1(eNLRz7M5W{rYn@Fs+|`=yTVr|x8On{h^<$oz zjE*w3wmheFeEJ}F{r!;V%W{mSWMBHAWM5+anjFvG^g)@esv9yNa-DL2(1j5hl--o! z23`#NNOz2iM4amG>3I%s7K?|Ua|na5PH+lyH&`;j008@lJZ@vXxy@6RS8Jr?#ucmD zN7QGYjd)zgfoTGUt?^amrR0vPxnhW`Hey}R#1wz^ z+`aXfyAER$g8vMS{|pEIs_~Ontmp<3JVthkH^)rzPr-_5dxbHfy<|c_jWQaH$rJoB zn@{V{-M_yV_`8v&8eeHmSN$(DM&7==ZCHx(`u)BRaPl^^Y*m=^kfy@ zgI>DMEK(h%8!O0rip;vgHJ-kRU2pbe+p$%Mt;S4`4<+tMpL_n(Q`Ze?s=rxP&-Nf( zdj7Jh7iTop_l)zDR3kj+{0FDjW;WGBhbeiOExI&};SbgSXKMUsI`G#tnFN~jjIS;! z7AlfT>n$o(Bc?W;^X8XjArJWSI^hIdvv)O~14P@4E|xWR9Wy{;Y8`p{F{W^mBTtgV ztas$;!5f_L4WdY~6ERrFXxrm#(bL-ao8hm@g^d%N>^gkXfCV;@^{? zMonmH@FZei&$`O<3sM5*syr>l|HOgV%nN)MOdse!kr@%lkBIZ0mmlYk2()HwGccA2 zV-wQC7_t{- zg^Bg6Fg79h7i#zxy8%t=|NJesd+YArvDT3DaQ&KpTB8p@{H~EH_lpM{%Y22GjV3p zHNTpbG~AII;QkHv&#At zFVvj4=aW`XUUFyUo&J~oC;gKvBLZWL@#-?w6o~%$nyU=YKozs@ilr;PeX*O%xa?f- zc(1W?Le7N^+X_+^uQ&Z>@#5Fg6Go{$``QwQRGKgQmIgX1`gzxyPnwf|sD`V(S?x8M z`L5+TYDZH0Hly5FXZk&}%s6kpdB1wV9F#fR?B|_oj>?V5U9M6J|M=;=pH-X2gp~R9 zF*_1mtJTPHdw+$R3KyrPCk$76o@}d|o>{RqaKHJzA3k6vWcE|%d7m^{Pj{PLPiNb! z#zW>T)1Q%V#Cj{u*xYscsyIdGi@TwPKZkv?5lc1%Np8aZX} z64W$%@mzPp7`10&+s*lv6%U$U{_r95(uMa+T`Kbd%-;&SBVw9}?fui#j(=;*$9V4n zv(n5r?l=9JGf>Mj=4^!f<<3Dp51P-Q?zxD43M15f#71QH!>{dC_!n#Zi_gG+b`b62 zg1XXMW7n95XT6#3HEI`_Yt8?P9px>^+n)9*+-c_awAB&i?wTP@Nx6A9yPn2~v8HvD znl?kNt)BH@^%EXrZLO=Lv|r>$=^rIMW7Z6*mRyTkMyV%;sI||!s%O1bJsEp&)&m1q ztvgberE?V{*F`hp=2y>}VC9H7E5{YcF?xm%IY#?bWJl??^leGo(rP^At~EKMThi1} z-}3pbg}y~=%m*=l@z!0_?`o=lz1|p})1WZ=_^+7AT`oM~z}&a$jn%itY)_aFqjvQw z{7W?cB@XnX_m=yl<*u~cI}cC}QzmnNAZ7L`*ht9jSlD=2HEM37G0vs3z2mT7^w+KZlq<_v zd+?^dxg!<_s-CJEojF|HRI@EjP|&))Y@yR zmRG%5GGemIGFERs;PRy8=AhN7jDo5v^MR_-S<6dso+}&I><1l)Ejysr6;`dT!dkpQ`^^WsE}mZ4HF0_xcB4IH&gfDZt^4Uq?)uwJaf{gkj9T}BQNEwu#3$o( z4R5laYM4CLU5=;fRrp`4@xRuA|C=SZAE+zLa8PSNkXmk`R=`26H%mqdhBFTk*K4YN z3RFuDD9<&(@WCoq=G{Q>$0Zq(dR5ikRewSsG_rYp)zO;=V9ZE;-X0$&!oLnHef~q- zAIvqq_snZd)7Ad4e5ant`La>pv%g`?)nl&72*hALc(iZKjCJN1 zU$4UdI*tEz4*V(Y*P0oD$nK#%qd?a$8#wEC9M>GP7?e&56hId!%E4Ytocp=VpJOHk z*2QcekQ~X~ndeVWj=aoo1j-P@9PWIc4N8wu0p`G7&iDby!81a8qTd)W%iAY1wV+RY zlD{_E2s90FNBXRNT&%zA8`l3)!ygWCuO7#J+`q@YY23fZy=k-I=RSV!7dd;+diRUh zVK#wt3d+;^;)9!At5TNqy)#l_ZFyu|L#}_B|22O^rGZml1nH&I<0R*4t7UqO4Z%iaiiXKaamxh+3dSty;Iuk zTNU}Y(&Turn>)IqyEA(3yi@P!8k43*ozrmXLNy|}WykdBZeLHvaMgTohXU23RJFg( z-{JRE;#^6v)PuR(1`PKq&l}k772SREn?8{d@o~A)tCxFf&BDoR&8ZXCn~&#Jo31s+ z>WK3qS0_R<&5@X7<6$#$NR1h-erLw4{+;ioK%FXheTIl{<|L+-EmG_H&o6SqS|LM9oevA3@gd!EYi|4@p)4j#~ zPn7BE$Tj!5|3m%gdgGE6CS4P|NLIP8%XMX4nR->;NbC=;X*Wiw#*~hYn0H#0u)?gu z^Yvt5Mc7+q-e9hBCCA^PVs>#Hu#TtA8avy4=3MtJ%9waFo^{&17x0vea!ov8a%w@| zM3h*RQ!}Jz=toft@_H5iWg7o72mY(`HYGf4ZURQiFKpjF&;^`UweAn}41LCYHsMK(@}BMYf;rK9 zgZW$6l^P|qrZ3#TMalp9Ehv3QP`Wbp8Y%HEphS$GOW1;z^m5+wDC-jMb7)DM@ih7= zpL1_EpF?T4qqKeQAK=N1OP+!pxJ$i0&o%5>w`tyzJ2CYJb4K1Jz+JT$4U8BuwIOri zPZH2Nhy0AMz6o0sGXGny@h^Aa|D<`L_b09~@jj~u&2>KlYL)`^eeNGB?kmTUvB??bqDx!_mKLd8Dms(Xw=RQf-=RU3FD)W!xDn zmNB)_>q_Tnc{Tm(*xIOdH_oXorPK;r@bSY!@UPJLS2*yG&Al?s9eLxdp7dg~9GYKd zi_d%}(;euuy1KM1qRd;2o!0LaltS7TnWbKTVNt*v@6X#Yfb!b&b)Q<&5Rx@_Te{Em zCi(Ny{57sC)2>WVjWKQICiW9tpQUckzHYV})xV|8G$z;9r_}I#w~^^uw-W2k$xHiU z7OwA-33o))-Z-Zm`@qk9lJYa2WXnHzk`GRWK1r$dB$1664??rV>GIZc(}gE8)(u#q zMkUDe^eX)4YW(Lq@W(zl;L!)Cqmz`YcCD8qr8poGw+2{I7T5uX}3*`baGhxu&t)j21k80X(K!J$6S8`zd>^YppTiL2r6)uDQKFeMtlm zan+_zH9RRfagAAOaQ3V@z9iM~R(kO)>fFWV+CUCY?PY;S56=GV069VNTs11GA=ekR zw!Bo0ifEW)y6fX=KJEfPIHUDlatF9aX8HAPUD%zn^sNJT<$QmCQO-O2qt;#Idl>8e zP2g3z4Q04{N6oJfM6DYuv9-b2)iouE9U-ygYgv*PZT-N_Ij8VU<*v2vwK?+|dKLcj zH2(7(_~$}X9?_Mi=5?iD)-JmH=*gf=ZJynA?7%rHD3P1;x{e(9Ha@YV%g8#jud-## zLEbZC*@L4G3|Dt_g8phQ#*goJs%mk!?vJ}?p*PHLVPjq5@pjJcYR9U(E>7VUZ zSp)Xh47*GHz^#TY*k3b5d2YsOf=}G{?#KF%n&DQNe?{!g>JzsbQn$Y*!|VED|2C6z z0(zGL=LD8*PFeC`AQF3u=Bl_m?>7gi*?Eu(VQfO=zhC3;ci^uY_O$x$q;!0^&1Xhs z&4LzCl@dD560zcwa+|1aCAVnic{lM zba(nmJri(o+HHxorW&J~pY5poDN1jginm47-P}*7W&Ts`l21_2#XZGg9%?LSl2TH)@iu_xkg?=1+*H&i7_V1Zv1{ua;7B zf~90Ev`g9kuS@Ao_*ZKDE1mea{I(+!R24ttz70XO^>-H^$?ha@TtW)&7UE z8@;Y~&Hq(t{Hq-J7rCnQIP&_ay|JK9Xwng|Vk1;9d(t0e&gS}wia}pQO3ZIEd?Et-?PXrV_?Vg1)eG? zHy9Vwfe{^MDOKaMUB516jfJHC;2;q`BT)R1sxLSxydd!MR}@!+T{;?I-txX ze|h~&RojJqDq-CHL&tyB8vkks{+C{<>8-KtoQu%~3W4Im*4D{=eYv&BNO>grn>QN9njP8YS-Q z@@CbQu@?`)v(y#k=upFh!5T6a*_?m&f1`$fYp>~D`~T-_{O3FHC(mACewB5_P|Jd3LJ?fxJ&$No2{Sqf_AnB_{B_X^7EgYtgdWm@H}Y~K(pFZ#bx-W5__tySL3 zlY3BNUzAwUHQg%lruNogi7hAob&HxJB{oTk({T!uj>B`H2w=5_^alNx(Y0M zn(Y}k+5P85(36_pZ4tM5%i>jh8T7B3q++8O`d7z%H}tQ5EyUYx5bpw^W;eUh1{{{#Cq+EMTb)Ym^HKe6)4EX)U$wtGD z^lfSFfx4hy>j9G+vKHE@RSP|pwtwTo>Y!gs`=Jf(!JJu(I)bTHi#%2KU0S9mHEdjD z$Fwi13#Mk>)DiT1sz+dKG5EyN%7`;&b#u+~=!jjB!S>R+(Cr9&q`fquz1TUb7qPuW z;gk{E-;Emo8y)yZ>~aO^m$9%ZI&o+9LiV%T=+s~esa3a7)2^*& z?g9G_JLjRD%<&Ni@)>jF1xRzmpA{tt1jRVY)j*~vLm3M_JJM) zI*EIKib~keaR{}D7c4E}2F!JJEe>1o@xwy!4`}=Y4*X@*ZRurE-Ix7KjApcW1taPV z?L{%5=fj$nmW=q>B=!}*0V@R*Qk7LiE@K?r*C&vs8#*i;e;)sBnR`X~3ZB65&{WcCL52+m8 zz1-OI#V02j`m@||P_8{+>_5p;&cU9s)9-rVeBRGC$E=LRE}uB;@=>E^H~i>3#Sz8O zRj_6SEu}0X*Y6B1J0tX3Fcik{hxY$P8vjKO{7I>ZN++dq&j>9$BlOxCp@^z8?mHv2 z?2OQBj!;DPvKwP+-3y~vW8JA`p!#5XRQJW-xKxWT^D^w-*gd|Z$+ymI^6fC!U~Cyv zTjX*FFhkMYuRTTWRVk@4qf|?bXJ`HzWtNr>s!`rjcjWf;8aLM@qq_Het!E%7r1e`J zQ@al1(_;1il=tRgOAk<-U*GqA zAkVYd`|PvNK8N+$!`f@Fy>_WSuv%mn!27_Xv`PT!#g=%~8a)=l8pAOD4Qc<&S^Ss# z;a^%Ra>A(Ewh*NAMnfvP4GFye1Ru{V7YlT0finVvb?E`sF>hvu2kr!m4is6Smj;a2 z?JpGv*d&FSyfAFdA55rqB!P2DksVURXbH6gmS{Gio6|NyYPIy?%odarb`FVj$WBzD zTEY>@4+_C6OGUasXGCO?{!%H{JO#pcIl1pzeqGCb*PFtVfjPQhUA+*OzH8vSYK7x< z^0F#ngv6MMstG$$gK9UE+d_kNsCGMv^VXuOFgv`JwDYRSTApJV!#}kBuVC?C;fFuw zdM4-q3_8s7)nUCTSXWZ^D}!42D2z84_2|ST=4d#Qp>5KKGH*P?B6Xk)dwYG=jZ|wm zq{eWqFq6vC5qrVXJJJ~TEkb(>^zJgL?i*y2uFrfdjH@3|7pf)2nPS*ShSO(-eF}%P zLmdIM`s+wPS~uQ|zgD@V9afESovnsi+jfnuv-q8XPFzb(OL*#X8aW6jE}y9>Vfa6) zMdNi<%)5B_xS(PC8`Az)viPs`!{4v%0uF@)Ju090t2T-GjZ_Dgq@w8t+(#U~cB7A2 z9oQ=j*8R$~#oU3m*aB_Qy@VFxK4LS|NBnhv!1NLD?jijKq>00%#Ax^)9zTWa8yMV| z3Z3AW_G0OM`T9~AOBl^QeW+dFP{mavhlH#~N;`$B#RdriA7NlA2&;%B_z_b2#_fhZ zVL|p_d&utjZfsLDoPR^`U&Z3T$`Aj4jm2kn>Vf#E0M=o#-wo{RbD9L^53siu+gjNGgA>!5z;iqrV`c8p|(@i`aIyhP1z)nmUEoa*#s?>&PB<&+t!IgpOlWkTYaY z@Luc%`loiVXuWS2ShGGGM!+}Rh3#3#Rg%53H(}K&=TfF@MB#rQi~oIo_}@ikp=pcn zqA;rK7YE9WI#K~xNHC(sT2$+k@1*uHE4?;Vt6&d!{<*=;Jj_jKS?6RRpSdOhH*+Wh zSn%dBrDZPO2BpPBfkmD&9ZG9*hdP{kfiq7`WZ)LMn<|PIRTD}$wJjYb?SfWW0y_?b z)%8^H?szoQjaTtc%QkD5&_4MdiXUS_#FR3Wx_HVxrBs5f6iSYfWKkmSJ0~pPDl4Q4 zbf3zKbT*l&wlPxR-O)?dDp97cBl=9_S&$8l-0F0Kv=`F3G32N#v{tapWRu+G& zAO1SZt`Rz9I$<^5^(k;(0-N~!SyO4BQbSF)ycrs)c|Gh6u&@?sg)~NFlWdb#35cAQ z6(Ay`81VRQaSZU>i2DIaFrWdp)heI7RnRNh6Ux_UDBS*I;Q41=d#F83i;V@#k3H10 zOiMloExE-bbO!I)1MN1@fl_qfg@|8kFqJGt%I&5D@b?qbCHNa;R^E#ouIN08K~qSb zi4K%Rp-jzoSi1~CCWOFh6yg_xkWC^*8W^EMz>~ zSps+QYfF|IOo0v}W!J?LDgw%uGi9F@hBIY9?tTHvj)t;FyMro3h*Yp;%c1PE!gc3K zzmnIu{L4MCbUTzwLXUs1r-aHAhJ0m%lJiiICXgvR$JGucOQ7U2Ov!wvWSnP2;lGB( ze~lmhERSZM=lk(?#vtBaTKWm_mIu7O9e7(UketWZhz2+qK?G^C1?a28ZjoOZVkjez z$e`1@*#~=_*}|6kn$9hg7@~~JWoIh z*rj`LF0esk(sDhajyy40ErJ^LP@7M_#BwzB82K`c^bsNVAptYezae`=JCDwk-8{}2 zV4TA})`-G?EsOtJKm1wA&8F~;J1bZvISKQly3mv4G)*Av)&LH|ZjIHlliGB88gP(8 z@7x2DLMk|5U2KcV(xE7ulvFIGa2XnH{Bq>1l@(K&I*ClHBc0o1XCsZebkrQ#68#(W zv^#s)`Po#-1Jb3Ym$k2DuGPYBEY+6Ieu?gc2V3)rWJqxaqfM{yEMmrsLXhx|UBR** zj(v7Tai1X^q&LrY**uTH*>VN%3&6I1*q_imSpUQO|5&|X7#a<_!BkpX?ynn!Q-a9d zRAGqLVjfxhf9_}Tzuyo4Jc-s+9bVq&qT)__z?&HP<>^nbs5M795QEdJ~K z@MqiP?(C@{J1LW%sA>dTPNd>hAw??4Q1#uxV11d6B)Y&Tq!M_KG1poOU-O*;?*ZnT zaNuhmTsyki@=*9`#%DySMc`JbJHOX?1S)vij-UUxOW+O}xN3GS zH5sW@Caf{s++I?S6#nhK)EpDypkycq`UZhFi}~g}=6?Vygkk&}BL6?Y;{Sjj{sOP& zCQPT@glXzcm>y&>4FpU>)NvO>R3wsRM#hh&H_P;3L1@>;TqOO_JP2rlTy}AM`|Spy z6Srj0`>T$dzBhg57O3491l;rgb{#Nbi2-Jk;AQMj$#K9FYZb@*S2X$Fb|0>x{b=&N zEzEU)4dr`X%yoYa<$KTi2G`JG4F6F1|3Mc22mSExV9*R^(3~)U<|IHf!q5R|rd;Iv zq1gdwVoC6nTa;Zy?W78+Cd>Dx68$HpSlFxA4AwNs(4vl|AhdKTLJMK=U6Mo~svW$z zt6c+F)2>UVKPBG-!q}$ssQbUQSH9PJ6T+685H{U}aKTLotIA2}gLo)1Q%=t`oR+D~ zc5UoMQU8B6j4Qy9_Fuu`U*U&8?r~M-T@)YY-M9L+P_@|zW9c}s3=%q=l2X8mP|N8c zx5~`6(v-G8C2Dj3-6HCsCC}oN9AsK;2<)}#uvEi!2ZJ#mu2tntaIG@GCSG;Z-c0C& zla`xskDxaH46FN1p8j%+s8Um&yXrk6eVnG2o4TrI4&9EV!C z-SkZ-QsHtA!VLBwKy0adVD0#&0D`HH-UjShbW#8jI7oAOoS>QBJ@@cK* z0!pet??v;yd%<@Dmfxm=t;RHT$j}36_P&E4+3leMLc(i>xDjdoD!@RIScSA_4~ z!ab2sO=n7Yq|XSedxDT+OQ>#Q1X9ObRKYmjFS!*E1sWqIHy2q@$T=u`NgwX_CA#S- zp8{FLdpB2FW5h)GTG$7sgcn_0ClH7JXBhv6wEu@# z{2%he|Bf~twb(2(yWe_)ItjiRy>Hv(4`ge|4Uz|tEoK*q@SOL6 zO`+fXLl*K3NC5lX{&NyGZTFxw707h3Q~lz0cRJeZQIs2a22E~AuEszZG~ppnYS*;o z-jq^4C`D&mi_0$EdCGs;h&BMT1eZfzu@DvL0rR}ojfRouq7N;7yQQO3ZG0Pp)XLZ9KZe95HpZ%U0}Qi+>VpYf=m1kpfh zItuahpB;s4KHqNaGZvQquszW*ZvI32|3_H-AMwMV-64r}CeMS;WDMGF*-WuEGZEDR z_TY!NGj`k`wqMRTT_B6(!(r<0bX-;yQT$q04tNZJUSSGtQ_#v{@V>c|vMHPe*|4Js zJnvk573Oa{a=udTD6lEmd!_np65lz@+-d%cJI^wA+Wz9s6U-fWV>zDT%P!fJ#bUhj zG|HY&Ni8nJXVFL{LV>%sQ3@2ao9{h;?OFKByD2B^DcuHp2bv1_89#!@hjEA>5~7Pl zqpQa})2u8TS^A$xS^OXM!~X>E=vYCiKDv50)uzO;DvGDn>06?MG;rpQ80%MLM?`kM zcjvVLC+7Xa4g;kkg6*x*A@&|#euz|ej%QPf?W3IGyO{Z#EA19 z=c)NF9>jQ18fh=0c+M$sdJuT;a1^4m5|I;+E_A5_5M9 zA5a!uOhMmAN7h8u^1Z3oLP63J==P|(3v}Rps}=0*_})a|9`@B$1J@}?U>{ZUeRLS) zmO?ri5~Mp9t)T>P9exe_6=6$2>e!3l$cw3%0nZ|ZM4_gblID~cv%!lI$ z8e{o8vs(MTSfne^HAYU9%&;WGo^SC)bU`dfsyjh<$oF32R&+J`X(r9Au}wUu?5G3D zjyns&_kyPaI4h1&*)@ctdzDN_REr&I@L?y@y%((piSYwi9|W0o82^UIf0Zo$m45hR znLR-QZ3Ft{Sa8aX?Wu&dc_5#^%JOH>eFGKhbS_eY#s|@f9=6T4>!-6VmQM0WoYH+Y zR0QrP=+E3pRY=iFB;NtP_HK|H`eho%4v^91SVrIFw&LA6>Sb+pcyEqc*XD(grykQ* zM7dR|=5qyW&0`0x-Aasn`|X{Cblvo|OMclPvD{#`(t3%Q@{@=@Q>L~)6dc76~Mhg zDKQL3TY;l|Wq+>Xm28P~dNIZ|9(V?9#L0pC5-6n=O1Y6zyaMCm9F*oN#TSgJct79CS z!43pnSlGUsiis%If2Ay>E=zX66If@P+8$eTl6xYPdE%q1(cBX{?uq7sC$J9ij`p~k z!`u^-nI~Sls-sTJY_rgXN$oKaI(;EXC-@C~ICmhz9@0+03DH<05ODGZ-+?8J$#JCJ z2{K`8G)fEu=_2acBUGflU%Gfr=GM=IzDkGBoN#k8#W3ywhV=iNSo}Bn;g6*&0Z3P1 z9S^cv5m*5IXX#4K*@}D*(p5?bjHUlYx*836QOL~YSiY#GUKNwhDKW8}Y@tLQ(W7dx zv_M{k^I$^wjBH_~44iDy#jO-~L@OE1(9b2sx^y z#1mKVFFou6<|G$~Vf3qL{d~YMi?JSU?vOtCs+>oL6U>Qn#lMJQeWGEHLPzShY zN#|6_J}q$(+Y4YBBAJsRs{i7?mXRUS85ts-lOf!U3<2$u&hSJ!qd-w8cac$xlWr&Gqa|LrnT(u#3yc32Km6b5jDfQpzU*vMft_7WMD4#l&5EKN ze7Z}7y#@5GM; zf$elTO1^wi#oa~Y*!w@bPAKmN>%b!2v5{r}^*D?F<9_%rO!uXSTVfIR|NNW#gfb76 z=#ENw)j?pTF&FMdS`()GrjN0fGJ7c4)%jr439!W~)%`4)fz}(6Gpg@SMlvhbusm!= zDkDBG$~>dw;S$i|I*>gB`MNIk%|Iy`F%`ceC#*EBG#2Tr(Yb9hnc6702%#)1eL(quFFU`EkY?XT;wDXEf_Rw6j>~ujX^|OP8QF*&xh+rwOgD#d|Urt?Eij(#s3LE{87`B zZkCtd!|A?AF%dB5?Q5(TTXU@wraH@Cmd=`A#Cwan(N7eGl<0}HCh^(&bQ?K!tM;d6 zw$>bz*v%h$v{an}qkBveNaPeq(QRqIG?D2oMIez|AVYt{wat`E<-&Q7xu#vFU1q6i zlJWaRNUd>AG?I>ZdNfHwk24zeg}QOZ?5I4+dj)8G7@aup zNTH6W(-edhXmo^56O(m3cMDYv=b07iwngTF#;=u-B8PT#YojV0Ibpp?47*K7x$mZe zv7I3qZVFHkQ$`g2TUq?K`r&^mIxp;yBt&yah8V8&*M)3ANNT#)qfI8oY{cajVKr z<$EZYr8aMH2j6+19Blny#-fYeGmB{X^iCd>$E*ER)?S{k%aeqM1WL?in*yI%aljlC zwajAF#}L`%c5T3gJE0EZT>~Gq=j)c4Mil=?Pjdbd9J=sGQP9<*jO?B%pOMaAy zCO;1|N#v-dYK;!9s1={P3~Rit7uw}8S6{A=tmiu-ZPiBSEFp8xISaLZ0^SB=>J3z+ zEpSj@oxxagioqjLOoaf>5VW?F4kwHl&jaSiO+FR26znh^_oOlLQ=VTfR?90Ev7{-m zNwPUiX!of$hDtS1TS%*^-o)D#6QV(Z=ds+6cN8JlYwaRrrUGTWT_Xzr?JWM={qPU4 z-;BP*RN@ zcJ}0fzxTDEH!?6g12-+kCEVEgC9Gw4^_?u|IbtGg*sCbds3{C7)EEh)CO7*P^G>GE zj)-uA@AlcSTOAc~swzgl>9n4_zB-XE{8wXmaojKn8*gbAx1p<5_YQ$wyb zp^#$uhMDaFRkvs5GW!Yx7e_1x&jGTXR6d*|A*{tGRIuN{tGUGx6P_7f1-d_BdtLd6 z!hZ*g{|-O=wLGmRCnQIsCA6A}S@q^ER341)d4L7akt@D=T#I?& zgCPobi{c7|&5+{oE6pwbrtQ`qlDFxl^*He61-av{X+=7R!iK zUS_c*ZP{<;Vp*}cSdvi^9??MO%3gtaMJyh3;7oYDKNah&b50|)w)|Ji9*So#Kv;S( z!C5aR*t3i!%6b2>_KYa}ce42J^uwQRJps(=DH0h-+pag=rIbS!P<2mMK8jgPr0;>5 zQUtW=Cg>G}wYWX`x28LxHEo2}WV%>a?q8Sc&3Pfh>Kua=ymbm4CHe?io;X6{Enicz zg%Zmep>0RVn#4|t*UWPmJV9t$XMOoEewIK*noMK88P5xFeT1Bmc`_nHmYK0EPx7m| z37$PCu|n^VQSuvjo$2rMai4_yeB9s5zY4HVg1!y@hqOIZHVWi=Hen6hx0UJ%*tasG z@PCrU|4BdmL5uEihGV$~J?B4YxS~BRvMoc4)=48S-wIo$7>E$n4m81FyTFVj0%g^J)X^vzR-0-*$lg z@IbD+{Zcg^+^#iy03B%C%=zNzEI9N4Kk~dEd9U#+1zE!IfR=y*qGf>@LA^mA1n&%4 z5E?tGW7P4mHR9>vM8uhhrz00e#g4u-`pB47(HW8+$ve_bve_}gv0uj8;$`@7lCL||*lXxWQ-f>CESCS8oH>ZqMx2bC9a{s zOwLU0O>Ib9m7bLG?~G?bV&_kNW9ogkCQNIYw(~a4^k1hRo^j{x0e?I7H_OcEJ3hQ) ztwxdgMdm}=L>;YrNS`q4^I7Yt*x9FNmuH1#znWcO=r!y$-Z95LXX9M?ym#l_J->JU zb2%BgU*v-0;e2O)`hv3yObh>5xc$z!yXx-J7Mv?6EBvi+Q&Cv)p5o+1uPmB*_s4h7 zU;ICd@4lzw9t&6vuQGeht4n?UiZd~o@LuRM75!81rKFD^vFZ6J@nHe1UCEqQd? zqjis-fAs33aT{iCxM#zL4SP1czTy0apEm?nDk^WSoLgzGyub4C%I7LytbDcdy~@uk zn=9KZzpeCE{!!UedA+i)(pQP~h38|1C<^VW(@YF+zK;qto{F7e<9P$Fb*XNbE~5@w zkpc{Qs>~5sgUB_TCmDE_VWy$_c(BsG+tT| zQ73-8pQqgok0*XX&4%;1_()S|Ye2~|Itk>jt>cPO$W$5Zat;m^N` zx2<_iOQj*g+u6JAH}TevLY=-N7pY2f}TqDwh2;t)LV z=U2a0M!|JE$do+qQ@v2qmNl>06gD`^UBe^15B6?>(!!0l1n@mIzl^t34>=x#97;J# zljgzuUhaJia)6F_%3E5mtMRSZsXD6r?Gc6lE*Ae?e)uoiNTRg)+1ljEJh=(tmp5S} z5U&r3#f*NQJwIcW(cSQ2!Aj$*IeVy8#w8$GPYj;OI{|({goPHv=DL#-vpz6501@^; z9?SuncDR=qL7Qk7s3NVtNvQc5cUXp#G6Onr`i8L#)?nY%AHxVezUH-J&@4-(`5d9b=pc+qwtpN=rHH+o_=d^K*}RZbvp{$P}cIBi!mg?YRx< zsL`NNmZM)~nb1dVzsiVSIwRy!m{V z6P*VA8~Af=UUKQlicc$E;Lx1a#WhLU*#m>E1Hov)%S{# zJQii|Qhjh+o+Q%x>x`&lNP#7Tvpt0JB^bkyN@aaURa>D(C zd`^hrIMj$ds1q`)NHHDMwZ5)5t~J705ht$0nxPWD2?k~?gJM|}kJoryUI2v0ZDzd2 zvgo5@2t0?w^A2Y0hH(pz>9Ig^Ahw>?xQU6#^^BWEcs86zM1aRf{FP&^?-*ARUWpv~ z61jx*9`?Nn_0T)A>_47k@qf-Ae})_Te5Z`xaP5%g&ojOTW0rys8awh>-w=bl6iL|EtnYIvb{n8b^7$BFDn8jqn39sZ82`iinBZh zqen3(j|}7HKh*xShQ+_e5C501Z!|{P=P>G?-V?|Z%*Juj{mcswD!Px%OCDU2ticeM|x?loYauxLDafsilB)@Vn8 z?x1Y$@@4z9sO76m$Ce$?l1&hIeQ^mvYsJs^^&PpASOKR_xjwm6TJb_fk)ahGE+~>@ zGyT-)oV&7S&y^Q+NOE#11Ch9!DwdS$_U+>y5{8m#M{sCgWJRS!&MZQgh9P=4>v$ z%Uo;D?9Xj(G0QXL>0lcGC%Q|)@}sNmZVQ_DdmEm`|I+qv%Ucwh{A1hLay0q7w#DW3 z6q?l8wy*pogqPa>RbB_-zuM6F2K+vg)O6B=$C3W=0*@=B13|mN=>tcD4dQVA4H^F( zEdCBZ{QJjV7+-n$FgG3z`=T|WJh0{gjjKkW=^tN5gQYCi4Y92-;8Iomj#yMhGUI;8 zH8Kgj254<)wG1V02EQ=8>Cy`D;0AvF?uL2%0r#rdI;uK}JhG8$oBtYmSvpVuI(1LQ zN&OeZOx=8HrWO1>x!OCL0rilM>T&O)+4_xeKBQ~@8OS$ZJ)yrK2d zY(36-ih4ck%*fjR>tykF`r*HkIwNWX{%!=$O4d(`V|mL5ZaEp=esIYWcZ0Vtal9>9 ze^Ngxu%EXu#=15!ynShaw+Dc?8>y_o{<3S{mWDubMnqSSZ~Eb_PxDJB-UHKFskW z*Zn$!f6Ui4>Kc~*e&^)-Gwv^E+0WX3In97{4Is{QX_@!#Wz|CP%~ zvBAhc7HL~=MAZ^Y1!!BUv;r(2akFa}A&%EjtBpZQl;oi9pRWb2FW%qjaDynXA{5)G zt>C3$h9$=uXDP4{iXGGuSXY0--J;K?wjxOZmbYMCxjmb@+d_{2iH5tbKKEV=Z~Qk* zyxV=z!XJN$iT~=3D;JD!W8y!!?=BA*59bqK0(p&gmN&|D@imz?y^bQL+O7OsdFjGQ zue-7o^9E@fq8M!h>3#J2;(-~Udxo#;xVyX1+3&&cKxp; zx3ueo@-{|ti@FY;ef%W1sUW#cojVFGU&crKw8CaAx1n=~uYlx6AGkuukwT*-z3tbq zT<2~1)6=Y9=TRH8uBeSx;-fyWEL;3EV%3pnZSeIoi_- zlKQ2B3&yHoEU!yIw?hX?G-s@l8m!?7UVWaE*0Ho|(hHQN_sMI2Ra=YTZ67nW^>5dZ z>WqOo2SyF^4CP10JndNU2K(W>wacE@MmN_lJEkR?p4W~j{GVs>f8G!O2>ShjIp67C ztefHY1SsDD4ZX|?{X1~FvDeqN>}o&OJ-z?(6j_KAg7$U2bagA(QacNL$_O6p3~7l( zm5I*>|0{5k##bMw@pbLL`jRo{vK)<0^`)kuMoARR57Vw4C_IvVOmZN%w4f@uSX!DR zR2(o$t%r;x%+;O)Pc8lE@1)Mas&u3#c=a(1&E95Gk>m&O5l_v)N(|NsLgVuRlwtHmhfA+KZ@AtzWG~!-Q?^feV z(9y~{-B>hm59?@IO^}$W6~Wyb{l?GL1LNn7@#BNuziN@Yz-FMth!XMKe{FBsoCL|- zOqefTAQDREmT61oO-8sqil99n&=Ti-UBYY6YjNEoul3hBO)t*z6O16X#Fx+`SMs>p z_d!pg;Y`wQ@bJ@!;v_GjCHj{O!IpgzxjOHZuQ{Wg)J@s^OwB{7`W#DK{v<7^?Q)u7GHN>-N=uYYj za4jFYHk0~wZMtFg+TGMY*Pcn*8#{3jI@M5Sll!mH89xXe5qujjBYNGP>&6;lB)h3I zawpgk#}_yN<$GF@>xjEjRTV7JoDbYW{WI7b7ze8YV>J>@h6c0``%bR=V_o_K4?a-$ zz;6%ux~BACJD@QGma7swx!`0SyRt?3FpLPbN%-cD_!(lr@> z@%&?c&l4V`j7C+|h-&`_S^N+B;XfKq$l6840yoCM4$D8mnpc9xA{mN<)qr9yb-D+y z<1Hr~)B{;*C`T`sj7=xKTYA>AS4zB|@@UU$3XEu8VhNAC&BbRVQi1Hp+#zQdr+8aS;lsH6Q*H zU6x##0}|+n!v7G9{~>= zAN$p>b;BBCca|cK(+$WGsf;?>*R}ZiIBQ?mW?v)4&IgAx`hQ{nahS#bupj=of5+W< zfB&8U*COceLx99UQ9u%)SRgzOBmm(#A=azoIUt@3;yEFn8{#=4o-2+4U9lH@MFyqAoL3}=~s>smrXSCMy)IT_)V#V3StZloM;onG5p?>=`=JN=&BdgOGnA zO)>dRkY51#^<4fb=g7(L(jAba6nuf>5{GjQ7&8BVk;VT-Km3;hhh75?&EPmx$8hvE zj-wc3@F01 z8Ot`q_csLpzq9!N-4B1(E?zVTuh$2;Y${<^Kz6Y}W_dq{pRq%G)kVM@S`0Sy#UK}c zK=H(gfCk<`7;9#W-~N!|$%V!u3u$s#w5AJ|O(t16oDfq^nw{l3vvoE?q=vLW4wKg6 zFm1A2FuiY)naT1Zv$ov9-RBu)mPW9{v+GDhq{%uv#71aBstAn$(ru8QuW3|Pqeu;V zw~^|xkwoy1u2-=R}i~e8q|3_H-kNDxg(PyE2U3+}=>@%}%%4XGgQ2OMNjkD`!`?_{8 z_xAaObvL|&6JCw)bFiz$lGCgLgz{z~MCovU&svJ#1&FvCMx#xD$u{Z<29t>cn2cdC z*-VY*kk~{;aV{RTgTlTC2-x;evwc=}%#J8jGdrK!Na?a`wvQT_!^7pTt5KOJ zs9v@Uym!y1rfc2}n0P)^9n*qRV8_NycYcMFHL-~XrI(QXvdxlko zh^cDbuO8xg;%_r5h+Bh~63=-&DDjF1e`O4lhnQN6pBcu#A^ra`7XM>@_@k76yW0HP zGj7YYDzyP6#t2cu-FFGx@BVhr)3K(FVEZF~m$ZOY(8e{dMOu*h8jbIe>v@*Slpk6I ztML_5%9xy~Z)5onj(=(3qj)s*DZZ-XP9>C~Ze^a5ib|SWVGRFJ`>*3H{>T0B7a}mS1b=-<0shgvZ(N@$nV$*vIv0qf==l$5SuUc) z8Y+mX2cubZ;ly>q8w)5%{woSMbDu>M$*)3v!)r`K>xECnTg|ih*CfrmAV(-i8^sL{ z(*={vTx52bFPLQ|MJ0}s3njABqEbicg;H5rQJJIcLYZty(Gtg!3rl26i6Yu?SB$5l+Z6^@G5?ZlDICZswGZU6}d zxmvdxfp75wcy531WvC|zh3CLQbvVI*Aju)WvJ!wD;4e zjUUW$Ec?KSl4PbCst)k{hg|d9ALe4ex!>esSKYl_jA*}I<;xhp=>LWM_Y#Z$OMdvX zoSNAF2=Ic9k7|EwAbv;twSo8_?w5>gj{DnBa4|vqF)p^Q{U{epZ~r?N+u!~o7hBza zh>N|@evpe*wxdZR*M4SAj_>B!US~4K zntWY{`)p8ZF_ap$hAnS8l(*Cv!NcX@a#{g9oCm*|%`v`Lti0QZ@8j~ng!}sk-IqcM z3yl$kY{`2bU)PboB=oRnfl+UWU7Ej2r8%hWb#3ufWOx>#$;c)2kQtXiTY>1%_L<1n zd5TN-b@r$CxM!m7&Jl(GKUn<#;fH@W$CvH_zGMQwe(CIi{d+7Yc>|nO!<}oL>j&<9 zH}K48xYN;@Ze*YMeIT8H^dCEK8+hW=fji#=_dn>ImeIKgR%~6z`qN#9JLL!|<*Bek z&pY?(zRuSNo_)PP5B&i=Ti+?+-uCf8dL5)Uc5-6|*skI+qkA?_J_FP|4+Fgk)C)8N z^pg(*y$Lj&e?!LqIu`#rKm2=v2Zb>H<1to@fH_zul85I!1ktNN%Q-GT#&P)p*GyE| zc`ui`g-b1k)D4{_TVL=L(aGrfJP>uw0)JVDnYw)dxZbk0OYOd4`M)ae6F57Sy* zm7Pd=X+i7^u*~p&-c!+;$CX*gl{p69l;3IKo-FA6nR{}bi{eUN+^Og87Irp)HnG37 z7kg%+sZ8zK54CG1j0k&sy045V{7i2?0Z;_-rv)C1(&E8NLk+F@+-3pp1H#0Fc0J?>iLLCX&*?*?K#V&xVciZ zdye{*q3v1Vhw6-;O`bFqlvS=FyvD1I)O4t`ZvZ{SweL3|#C7~C&~za2?Sz<}1CnU- zcC=$e;a|_{k`GL^-13>oT|1|A<0$8eX!FNL-;QmVISiP~oh% zZ$cB&TxHaG%OPT3{6uLT6;+PLt7ze*^cJjzaRy9smBxNABh@J_NcFVnUDR3d6KIj2 z2Q9LW`cc{%b6NVjHjqxLm}Et20lli3Wc+aTpim_OFA~Gc5KFb z#8n43dEf4^Y$FoO7fWWxqhuv5oSf7`q!ml>w~i?MUt#fo#Sec4V3z^d#o;xUQPt>| zf^Pvc2XOdZ*-MhwBvpV|dPRyAO%~8=Dwe?t8$s7s9J3~tcWj?1!F*0MpN01L%A(^7 zi1aFWF0uRo`G~n-nuNhC!u@;2}r9{xSgv%&gr__!p{9k49 zf7K8FP+DeDYC~KiLy$&h5*Z>^U?f6RycySW!d3#lt~Y(w zw_5|f^ug^&{UgoRgMaqzSMd$4f^>~Q7pVh1ExZHtL;nE!x3%H14bZ|TMuAP>LLYvL za3v$_+qnL$gZjXu!QVup>cQVVIOSCzO8nWgv4Vgv{-9gW^!3;~k*z^jAwZ+hV|7Bc zsChY9Ghkn`%M6hfBMScp7XJo6{E3X#`bcZJG1gL2ezR`(1+yHwR>B+5Q&N7goYBg` zuDZ>j2}a3qYD^vLLkZ4kK;;$56`)V;`Q1Y(?lQ_Mw(De8Sp|`XL!>N%ILX96@#GkD z=hsrXpk1n=rdNpF;NjO|CW<9UEu>rFY)2klZb`1FnLWLNm~y#(H&|*P(EiYTP*zMB z^*?zuPRsiZdyLG@H=S{e$xq2&F z1JGBMp5+wm2vXF4#YQge~ibHaihdVc#Z<=%|~YO^5nR0=UIvn|2)VJ!bn}C z#5x;%O^UFNx%N_|~OlQpsY!=;;4BnJ{T}?h>TGlL4)4j2sp1*5@>C$)y)$Ylf)!m$mZupG> zFKS7D0>62PNEXp#GM|P;WYE8oS=QNP)-?~Ab=5O>6Ou0hDg;Ue?Xm#+;+^qGokYtK z?NCHqvdf(t!(vmZHL|C>LonOH)Tj22G^T> zAkxd#WSA{TpLtY15w+g?7>lWtv*=rq4y}*01KvxKD6Sr3@ zyeSl_$oLh$uJtg6hr84(Qcx-Gb>yn@n%SacFCCC9g!Mn1qtllReT?xM_Co?T+;C>| zJXl$t1?~B?C2dYEby&Z-T!6+Pews$fI|6OnTM4ywCIS=7g zh1I?yYCKYxYp9yp#gudTaIOJE@PD1f|8+n71JJ>;d@2Pz_oYFTCFE%Lnb|0Lg6nrU zpAUOoL*4=(N)k<0fYhY`G!(wTslU|+#Me+w^ugs~#lbQi6|9pYwhTfJ6Dp>JVAnL% z1-hBR{-pw7_7FJk7f&iv)_NZg^vwV2O#qqQ+wke~-Z}vaE(=2%B|i;opksXal)qJQ zW`xk44w8r(>INT)U^NNWf#F+PVFmJ6I#B*Fc=^QrSDa5cq04m}R5f4MT&OGJhE3)R z%ilA}%A}x^@O7De;)`sA+(=clcMMxd#8d3Pa!Q%ghAO1mzS56>OUNbuYdjL!h zb72c0U)Mw*+xo^at#2pn;_-E5`d|&F4|$*KYoty?e}QN5pDstr;4)uV2JjZ!5e35P zE^gzSEnp}HIS877vc+%n$BUZD@v>$#KA6sm$2)n6RO@WP_%N4l1#*Cup{dJ*=k8%C z!scpZljtmL>JJ`L{+)-Ae*^spf>WY+$H8fX9RvxLuj{;zS0kuH|D|l?jIrp-ko-p3 z$XShIEKt4)$#K~u3ja4*{NMD$e=u)()yNL~1+TBZuCIKUx2&!#X3n|ghxGv{vTPKJ zJ`x_MQ6ldg@bp)#T}h3xk2w+P4pFf4yH;Ns)Spw(hlIJ5Oq&&@)__%!AUTi@gc`>7 zB7N6U@)bG|{5;~imf5GFs+hil)$=rhUnpIu!Raw>u-4!yeps;sP6*?F7VwYV z;JJa&h;}2jf{qT+Qg^K>p(6MJ)js8PO*J|sA(gYK>1#;vWqx9L%F3pI$n%+0D)eIy z^x`q-Yqv-q>}NkVqVRu<#s4io{Jn2SkO9>Xui+^>JW7ilc71thk&@IvO;8f!j!`Em z*xj>>uoG~yYZk5Ax@4=9;!nw^VD)`Pm?DdMNB5`1*Od+dYl9>wCMWN_N# z#^;b9p~DooXD5B56ePkiHHaBuij@XmSCTJ4Uh7$65l#80C(*JD<%#V0ys?yQ7w(sM z@N@}X3?<)#-+F;RrI;e%-1y6qk32Y+6mpHG6X9gK;rkmh{=d!Q|F$3grIsJV9I-~Q z-Y7^HRudV><#5a6VEy(w$OK4uJO^Z^e}e_bgD%mOqn>;!6flol=IeUB?=kHkE;!+N z*&gjLu7%K2aZ7&VS{R4Z|MaDTz6bXsO??6KS=^KH@Z_Gp$F&XIlP4i8q8uf8aIVj} z5`IQxsVXkNR0Wn{=2k+*w;%EZ%Ex&MRQY;=y_iahJ4m6#SUAH=;Dl4k?Y^$O>rhL% zuiSZ!0KfDo`4-nQ_0u+Vf(ff6R@d3?;jN4E#XzgO8Vl`^6caw6h zpI!3i?f zG3hWZnDlqoSgCySq2@5aZl@bfI6?E_9S10xmQUMtJQJQx_H=(sS)exl(S3AzK4@(h zA@O9?BpyfHt^}Dxe1{Ls*PkiqhV=utM?6}J%l^AN3rc9} zMsRK&SQgOBJ!0?xXz_@d|L9&9`~Q5_O(fk0WgZ(@^S?$G|3*LjQ=wh({n`Z|+Ql?< z3{X4;Je=#%QPA34SstDxUMr+|%4FE7p*CSnfTNq`<+Femnovd~u>96hC8!PM$JbIa z;O_0xGX-uAEhEKGbD}~?KJ_h($xpk8Nk*E(tR=~V>)8G9zR|FoCmiuCQjK`>SePpW zK;0nWosrx-%eZ%%y3vHo^wH%XcyQfebqyumRm>HuiMXp<0q5DU&qqQY{Kd1n)u7Rk zeI*9D)j_?XXTEdHaDYNoB((%zbxD1;ipYQN1+Cc14KUS zl*3FssXO1p=di~uHK7~ZjC*$=If166O*_kzyhWw1l6PJV4b7l7>G z8=RS~e%Z_F0`NNVFQAL?f}GJmgRFr$q!9EyVdEaF!@8l5eS8EFS8_W~IHK@B&EkLB z5C2=w^U#~R*82U>%RlLkXtt@#=_+-CD^$hPgn~csFeQ0{)L;qT|} zZurVZ`0@+xGjM&;eKz@H&<*;!?(}(;JYEDZQUl))U-hboPvUd~oGi`P!Fki#SLg%* z{;x(9{vWXTf8d9IDpH2{x+p;E7+C3C4pZrBs1+U_nh)#3eDKe_!(Gm;mirU|sz4$L zZPv*$gER>NiITfX1Np2{+zh_9&btQ%p%T`BaT20DMX$NRkn` z`x2~JwLng!_O{|X8$qXpPY^8ABPm&h>~}F=ai&if-&#+iQR)|3QavLI{|{OGKlH<& zcO2QFjWO-p*LC9RPo0?Guk{UXKQbLp!DEm*2{T3HYVC~lT!XgvDzv>(o&c3i$`Y>xO#=U$2iJe0}rt z;K_MV`5VFUg#Y_KoI3b=@2!Kc;~pJ+z4E5_{Sr(JDsM#L|1pdI$A0)rZ^BOyH<*7n z-w$0g_S&{LirXpYg;0NA+NSoeUwwuY!%n)Xhl#EQFVUPC@(-gr96h@)baOpj4nXAQA2# z7$$<19_*@}k}yilp8`F zGDoQpVw%R020~0(9OXcWsemIBgqSQGSs}z!!I2F@Oj|jsf)G;;NBbefbcCZi2r-@F zs1ZU;XE>rE9FDm6|4&2k|D47DbASAS2hAM0A;k0zM_vdqiFWz%DU&C+0MS7G@A)+?)c*tTAA +#include "fastmath.h" + +namespace bio { + +/// Number of agents exposed to the outside world: four trigger outputs, four +/// voices, four state CVs. +constexpr int kNumAgents = 4; + +/// The flock modes (Geese, Meteors) run more birds internally than they have +/// outputs. Four agents cannot sound like a flock; twelve can. Each internal +/// member is only a probability roll, so the cost is trivial, and members fold +/// down onto the four output channels — a channel fires if ANY of its members +/// fires. Density and overlap read as a swarm rather than as four things. +constexpr int kSwarmSize = 12; +constexpr int kSwarmPerAgent = kSwarmSize / kNumAgents; // 3 + +/// ProcessSample() runs at 48kHz; the physics run every kCtrlDiv samples. +/// 48000/32 = 1500Hz control rate — 0.67ms timing granularity, far finer than +/// the ear resolves for triggers, and 32x cheaper than running physics at +/// audio rate. +constexpr int kCtrlDiv = 32; +constexpr int kSampleRate = 48000; +constexpr int kCtrlRate = kSampleRate / kCtrlDiv; // 1500 Hz + +/// The six ecosystems, in cycling order. +enum class Mode : uint8_t +{ + Horses = 0, + Geese, + Frogs, + Rain, + Meteors, + Cicadas, + Count +}; +constexpr int kNumModes = static_cast(Mode::Count); + +/// Gate routing, selected by the toggle position. +enum class Routing : uint8_t +{ + Discrete, // Switch Up: agents -> individual outputs + Summed // Switch Middle: agents OR'd -> Pulse 1, CV outs carry state +}; + +/// Chosen by holding the momentary switch at power-on. Same six engines, two +/// completely different instruments made out of them. +enum class BootMode : uint8_t +{ + Rhythm, // normal: the physics fire discrete triggers and one-shot voices + Drone // alt: the physics drive continuous tone, an ambient counterpart +}; + +/// Control state, resampled once per control tick and handed to the engine. +/// All the Q16 fields are 0..65536. +struct Ctrl +{ + int32_t physics; // Knob Main (+ CV In 1): the per-mode physics variable + int32_t chaos; // Knob Y: global randomness / spread + int population; // Knob X (+ CV In 2): 1..kNumAgents active agents + bool spook; // Pulse In 1 rising edge this tick + bool clock; // Pulse In 2 rising edge this tick + int32_t clockPeriod; // control ticks between the last two Pulse In 2 edges, + // 0 if no clock is running. Lets an engine entrain to + // an external tempo rather than just being nudged. + int32_t loudness; // Q16 envelope of Audio In 1: how loud the room is. + // A disturbed environment - it quietens the shy modes + // and agitates the reactive ones. 0 when unpatched. +}; + +/// What an engine produces each control tick. +struct EngineOut +{ + uint8_t triggers; // bit i set = agent i fired this tick + int32_t state[kNumAgents]; // Q16 0..65536, continuous internal state, + // exposed on the CV outs in Summed routing + int32_t global; // Q16, a whole-ecosystem value (density, + // sync coherence, ...) for CV Out 2 + + /// Which sub-member of each agent fired, when the mode has a meaningful one: + /// in Horses this is WHICH HOOF (0=LH 1=LF 2=RH 3=RF), so the voice can play + /// that hoof's own sound. Engines that have no such distinction leave it 0 + /// and the voice falls back to its own round robin. + uint8_t member[kNumAgents]; +}; + +/// Common base for the five engines. Virtual dispatch happens once per control +/// tick (1500Hz), not per sample, so the indirect call is irrelevant. +class Engine +{ +public: + virtual ~Engine() {} + + /// Re-seed / reset to a sane starting state. Called on mode change. + virtual void reset(uint32_t seed) = 0; + + /// Advance one control tick. + virtual void tick(const Ctrl &c, EngineOut &out) = 0; +}; + +} // namespace bio diff --git a/releases/62_BioMimicry/crosscore.h b/releases/62_BioMimicry/crosscore.h new file mode 100644 index 000000000..ebd4b387e --- /dev/null +++ b/releases/62_BioMimicry/crosscore.h @@ -0,0 +1,171 @@ +// crosscore.h — the ONLY state shared between the two cores. +// +// v1.1.0 moves the physics onto core 1 so the engine and the voices stop landing +// in the same 20.83us sample. Everything that has to cross between them lives +// here, following the same discipline WorkshopZX uses for its CrossCore (see +// ../WorkshopZX/spectrum.h): every field volatile, ONE WRITER PER FIELD, no +// locks, no SDK FIFO, no barriers on plain scalars. +// +// That works because every field below is a single naturally-aligned word or +// byte, so each core sees either the old value or the new one and never a +// mixture. It is a real constraint, not a style preference: +// +// THE RULE. Word-tearing is acceptable for smoothed continuous values — a +// one-tick mismatch between densityAgent[0] and densityAgent[2] is a control +// voltage a fraction of a millisecond stale, and inaudible. It is NEVER +// acceptable for pointers, lengths or counts, where a torn read is an +// out-of-bounds access. Anything with that shape crosses through TrigRing +// below, packed into one word, never as a struct. +// +// This is why note-on data crosses as a packed word rather than by calling +// VoiceBank::note() from core 1: note() writes ~20 fields of Voice, including a +// 128-entry ks[] buffer, while render() reads and mutates the same struct every +// sample. No amount of volatile makes that safe. + +#pragma once +#include +#include "biomimicry.h" + +namespace bio { + +// --------------------------------------------------------------------------- +// Trigger ring: core 1 (physics) -> core 0 (voices) +// --------------------------------------------------------------------------- +// +// A note-on carries agent, mode, member and a variation value. accent is always +// kQ16One today, and variation only ever feeds `variation >> 3` in note(), so +// the whole payload packs into ONE 32-bit word — a single aligned store, which +// cannot tear. +// +// bits 0..1 agent 0..3 +// bits 2..4 mode 0..5 +// bits 5..6 member 0..3 +// bits 7..22 variation Q16, truncated to 16 bits +// bits 23..31 spare (if accent ever varies, take 8 bits here as Q8) +typedef uint32_t TrigWord; + +static inline TrigWord PackTrig(int agent, int mode, int member, int32_t variation) +{ + uint32_t v = static_cast(variation); + if (variation < 0) v = 0; + else if (v > 0xFFFFu) v = 0xFFFFu; + return static_cast(agent & 3) + | (static_cast(mode & 7) << 2) + | (static_cast(member & 3) << 5) + | (v << 7); +} + +static inline int TrigAgent(TrigWord w) { return w & 3; } +static inline int TrigMode(TrigWord w) { return (w >> 2) & 7; } +static inline int TrigMember(TrigWord w) { return (w >> 5) & 3; } +static inline int32_t TrigVariation(TrigWord w) { return static_cast((w >> 7) & 0xFFFF); } + +// Power of two so head/tail wrap with a mask — the M0+ has no divider. +constexpr int kTrigRingBits = 4; +constexpr int kTrigRingSize = 1 << kTrigRingBits; + +/// Single-producer (core 1), single-consumer (core 0) ring. +/// +/// Safe without a lock because `head` is written only by core 1 and `tail` only +/// by core 0, both single words. The payload is stored BEFORE head is bumped and +/// read AFTER tail is compared against head, so the consumer can never see a +/// slot the producer has not finished filling. +/// +/// Sized 16 against a worst case of 4 (one note per agent per control tick), +/// drained once per control tick — four ticks of slack, 64 bytes. +struct TrigRing +{ + volatile TrigWord slot[kTrigRingSize]; + volatile uint32_t head; // WRITER: core 1 + volatile uint32_t tail; // WRITER: core 0 + volatile uint32_t dropped; // WRITER: core 1 — see below +}; + +// --------------------------------------------------------------------------- + +struct CrossCore +{ + // --- written by CORE 0, read by core 1 --------------------------------- + + /// ++ every ProcessSample. This is core 1's only clock: it derives how many + /// physics ticks it owes from the elapsed count, so the 1.5kHz control rate + /// stays anchored to audio time however fast core 1 actually runs. + volatile uint32_t sampleCount; + + /// ComputerCard::SwitchVal() returns a member that is NOT declared volatile, + /// so core 1 could cache it forever. Core 0 republishes it here instead. + /// CORE 1 MUST NEVER CALL SwitchVal() — it will appear to work and then stop. + volatile uint8_t switchMirror; + + /// Edge counters, not flags. The old bools were set at 48kHz by core 0 and + /// cleared at 1.5kHz by the consumer; with the consumer on the other core + /// that is a lost-update race, and two edges inside one tick already + /// collapsed into one. Core 1 compares these against its own private + /// last-seen values and never writes them. + volatile uint32_t spookSeq; + volatile uint32_t clockSeq; + volatile uint32_t startleSeq; + + /// Q16 envelope of Audio In 1, from listen(). + volatile int32_t loudness; + + /// ++ when a short tap is released. Core 1 owns mode_ (it selects the engine + /// and calls reset()), so core 0 requests a change rather than making one. + volatile uint32_t modeCycleReq; + + /// Core 0 has finished its boot window and published the globals. + volatile bool bootReady; + volatile uint8_t bootMode; // BootMode, latched once at boot + + // --- written by CORE 1, read by core 0 --------------------------------- + + /// Single bytes: cannot tear, so core 0 can read them at 48kHz safely. + volatile uint8_t mode; + volatile uint8_t routing; + volatile uint8_t population; + + /// Continuous CV, Q16 (Summed routing and Drone). + volatile int32_t cvTarget[2]; + + /// Bitmask of CV outs carrying a STEPPED value that must not be slewed: + /// bit0 = CV 1, bit1 = CV 2. Alt boot's pitch CV sets bit1, because + /// gliding between semitones would turn a sequence into a portamento + /// smear rather than notes. + volatile uint8_t cvStep; + + /// Gate arming. Core 0 notices pulseSeq change and starts its timers. + volatile uint8_t pulseArm; // bit0/bit1 -> Pulse Out 1/2 + volatile uint8_t cvTrigArm; // bit0/bit1 -> CV Out 1/2 blips + volatile uint32_t pulseSeq; + + /// ++ on any trigger. uiTick() on core 0 owns the decay of its own activity + /// level; nothing shares a mutable brightness. + volatile uint32_t activitySeq; + + /// Smoothed trigger density, Q16 — how BUSY the ecosystem is, independent of + /// what it is doing. Goes to CV 1 in alt boot. Decays far more slowly than + /// the LED activity glow, which is tuned to flash per hit; this has to read + /// as a continuous control voltage over seconds. + volatile int32_t density; + + /// Per-agent smoothed density, Q16. Alt boot's Discrete routing puts agents 1 + /// and 2 on the pulse outs and THEIR OWN densities on the CV outs, so each + /// half of the patch is a trigger and a matching control voltage. + volatile int32_t densityAgent[kNumAgents]; + + /// Perf meters, both read out over SysEx with the profile buckets. + /// maxBacklog is the worst number of ticks core 1 ever owed at once: 1 is + /// healthy, a steady 2+ means the engine is taking longer than one control + /// period and the physics are running in slow motion. + volatile uint32_t maxBacklog; + + // --- USB mode ---------------------------------------------------------- + + /// Core 1 has stopped the physics and handed itself to TinyUSB. + volatile bool usbActive; +}; + +inline CrossCore gXC = {}; +inline TrigRing gTrig = {}; + +} // namespace bio diff --git a/releases/62_BioMimicry/docs/.gitkeep b/releases/62_BioMimicry/docs/.gitkeep new file mode 100644 index 000000000..27f97a886 --- /dev/null +++ b/releases/62_BioMimicry/docs/.gitkeep @@ -0,0 +1 @@ +# placeholder — remove when this folder has real content diff --git a/releases/62_BioMimicry/docs/DEVLOG.md b/releases/62_BioMimicry/docs/DEVLOG.md new file mode 100644 index 000000000..03b537a78 --- /dev/null +++ b/releases/62_BioMimicry/docs/DEVLOG.md @@ -0,0 +1,1170 @@ +# BioMimicry — development log + +Why the card is built the way it is, and what listening to it changed. Written +as we went, newest last. + +--- + +## 0.1.0 — the five engines + +Built the scaffold into a working card: five physics engines driving four agents, +synthesized voices, an alt-boot PCM path, and the CV/gate routing the Workshop +Computer's real I/O allows. + +Three hardware constraints shaped the whole design and are worth restating, +because they look like arbitrary choices otherwise: + +- **There are two pulse outs, not four.** Agents 3 and 4 fire as calibrated 5 V + blips on the CV outs, so every agent still gets a physical trigger. +- **There is one switch, not two.** A Down tap cycles the mode; the Up/Middle + position selects routing. Holding Down at power-on picks the boot mode. +- **There are six LEDs.** With five modes the sixth showed activity; at six modes + they share (see 0.2.0). + +Physics run at a **1.5 kHz control rate** (every 32nd sample) while voices, gates +and CV run at the full 48 kHz. That split is what makes four agents of Kuramoto +coupling affordable, and 0.67 ms of timing granularity is far finer than the ear +resolves for triggers. + +### What simulation caught before any hardware trip + +`tools/simulate.py` models the engine maths and reports trigger rates. Four real +defects, none of which a compiler would have found: + +| Defect | Symptom | +|---|---| +| Kuramoto coupling ~2% authority | Frogs could **never** synchronise — the model was decorative | +| Geese excitation saturating | Knob was a switch: silence, or a flat 16 Hz buzz | +| Rain topping out at 100 Hz | Hiss, not rhythm | +| Meteors topping out at 47 Hz | Same | + +A useful lesson from this round: **flat trigger rates do not mean coupling is +broken.** Synchronised oscillators fire at the same rate, they just align in +time. Measuring the Kuramoto order parameter showed the coupling working when +the rate table suggested it wasn't. + +--- + +## Reality check — the gaits were wrong + +Asked directly whether the horse gaits were actually correct. They were not. +Three separate errors: + +- **The gallop was byte-identical to the walk.** A `kGaitSteps` table meant to + compress it into a burst-plus-suspension was `{4,4,4,4}` and silenced behind a + `(void)` cast. The knob's entire top quadrant was a faster walk. +- **The walk wasn't a walk.** It fired both forelegs consecutively. A real walk + is 4-beat *lateral* — same-side legs follow each other. +- **The canter had no suspension.** Evenly spaced 90° beats read as a waltz. + +Underneath was a structural flaw: **four free-running clocks at 0.95–1.03× +cannot hold a gait.** A trot's diagonal pair separated within seconds. The drift +was the mode's poetry, but only the walk survived it. + +Rebuilt around **one stride clock** with per-hoof landing offsets from real +equine footfall timing. Chaos jitters each hoof's *timing* rather than its rate, +so gaits stay locked however long they run. `python tools/simulate.py gaits` +asserts all four biomechanically. + +Also this round: Rain got downstream splash coupling (it was statistically close +to Meteors — Poisson with a refractory period), Geese and Meteors went to +12-member swarms, and Pulse In 2 became an entrainment clock rather than a second +spook. + +--- + +## 0.2.0 — Cicadas, round robins, stereo + +Added a sixth ecosystem coupling on **amplitude**, where Frogs couple on phase +and Geese on events. It took two attempts, both caught in simulation: + +1. With insects tiring only when *calling*, the swarm self-organised into an even + spread and never surged — defeating the entire point of the mode. Ambient + fatigue (being in a loud field is itself tiring) more than doubled the swing. +2. The knob still did nothing, because feedback speeds calls while fatigue is + call-driven — they cancelled. Scaling **both halves** of the loop by the knob + fixed it. + +Round robins were wired for meaning rather than variety: in Horses the variant +**is the hoof**, hinds pitched lower and heavier than fores. Stereo placement +comes from the ecosystem — fixed for the horse, spread for flocks, random per hit +for rain and meteors. + +Six modes filled all six LEDs, so mode and activity now share one light: the +active mode glows dim and flares to full on each trigger. + +--- + +## Hardware: "the horse sounds like one horse" + +Correct, and a real bug rather than a tuning problem — one I introduced when +consolidating to a single stride clock. + +`HorsesEngine::tick()` **never read `c.population`**. Knob X only reached the mode +through the generic agent mask, which here removed *legs from one animal*. +Turning it up added nothing; turning it down made a lame horse. + +Population is now a **herd**: one stride clock per horse, all four hooves intact, +with per-animal speed offsets so the animals slide in and out of step. That is +the phasing the old per-leg drift was reaching for, at the level where it doesn't +destroy the gaits. `EngineOut::member` carries which hoof landed so each animal +plays all four of its own. + +--- + +## Hardware: trot and canter sound like a density drop + +Also correct, with an acoustic explanation. Trot and canter were the **only** +gaits with mathematically coincident landings — and two identical clops fired on +the same sample don't sound like two hooves, they **sum into one louder clop**. +So a trot genuinely was half the density of a walk, not just perceptually. + +Real diagonal pairs land 10–30 ms apart. The second foot of each pair now holds +back by a fixed delay (trot 12/18 ms, canter 15 ms), given in absolute time +rather than as a fraction of the stride — a real animal's flam doesn't stretch +with tempo. Walk and gallop already had four distinct landings and are untouched. + +Frogs also went to a pond of twelve. That needed the Kuramoto sum rewritten +mean-field (O(n) instead of O(n²)) — **and the first attempt had the angle +identity's terms swapped and was 100% wrong.** Checking against a direct O(n²) +sum over 300 random ponds caught it; the corrected form agrees to 0.006%. Worth +recording because it compiled and ran silently. + +--- + +## Alt-boot became Drone + +Alt-boot was spending a whole boot mode on a sample toggle. Sample playback is +now a **build-time** choice (bake `samples/` or don't), which freed it for +**Drone**: the same six engines driving sustained tone instead of triggers. + +Both Audio In jacks were also completely unused. Audio In 1 is now loudness (a +loud room agitates geese, silences cicadas), Audio In 2 transient-sensitive — +sudden movement alarms animals, steady noise doesn't. + +--- + +## Hardware: "samples playing far far too slow — like racing cars" + +They were not playing at all. **Every boot was entering Drone mode**, whose old +Meteors root was a 40 Hz saw pair through a sweeping filter — which is exactly +what a passing vehicle sounds like. + +`ComputerCard` derives the switch from `knobs[3]`, which comes off a ~60 Hz +smoothing filter **initialised to zero — and zero decodes as `Switch::Down`**. +For roughly the first 5 ms of every boot the card reports Down wherever the +switch actually is. The boot window latched on "Down seen at any point", so it +latched on *every* boot. + +Two follow-ups from the bench settled it: *"both boot modes seem to be doing the +same"* pointed at the latch, and *"four sounds, rising in pitch"* was the synth +hoof pitches (153/202/164/216 Hz), proving the PCM path was never reached. The +fix is a single reading after settling — what WorkshopZX's `BootSelector` does, +and what is proven on this hardware. I had claimed to be following that pattern +and was not. + +There is now a **boot splash** — Rhythm lights the left LED column, Drone the +right — because the whole diagnosis was slow for want of any way to tell the +modes apart. + +Found while tracing it: the PCM end-of-sample test used `pcmLen << 16`, which +wraps above 65536 bytes. It was silently truncating the two longest meteor +swooshes to under half their length. + +--- + +## Drone was useless, and rightly called out + +The first Drone mapped engine `state[]` to oscillator pitch. Most engines put a +**phase ramp** in `state[]`, so the pitch swept upward and snapped back forever, +in half the modes — and it ignored the entire sample library in favour of saw +oscillators. + +Rebuilt with **no oscillators**: Drone now granulates the same recordings, up to +eight overlapping grains per voice started at random points and played stretched. +The engines drive grain *density* and *spread*, never pitch. Grain periods were +sized against the real sample lengths so overlap lands at 2–4×; the first pass +asked for 16× overlap against four grain slots, which would have stolen grains +mid-playback and chopped. + +--- + +## Hardware: cicadas galloping + +Reported as clusters then silence, *"almost like galloping horses"* at CW. That +detail was the diagnosis — it said the clusters were **periodic**. Measured: +every 0.32 s, standard deviation 0.01 s. A metronome. + +**My first guess was wrong.** I assumed the twelve insects shared one fatigue +time constant, gave each its own recovery rate and stamina, and it stayed +rhythmic in every configuration. Measuring phase clustering instead found the +real problem: phases converged from R=0.24 to **R=0.88 within five seconds** and +froze, because every insect ran off one shared rate law with no natural frequency +of its own. Detuning them dropped clustering to R=0.26. + +That stopped the unison but the field still pulsed, for a reason no amount of +tuning fixes: + +> One shared field, plus "everyone speeds up when it's loud and tires when they +> call", **is a relaxation oscillator**. Charge, discharge, repeat. It has exactly +> one period. + +So the field became **four patches** that mostly hear themselves. Patches charge +and discharge independently — measured correlation **0.01** — and cluster spacing +went from a fixed 0.32 s to an irregular 0.4–8.6 s (cv 0.06 → 0.44–0.78). + +*Note for anyone reading `simulate.py`:* `cicadas_swing` reports **one patch**, +not the mean. The mean is deliberately flat because independent patches cancel, +and that cancellation is the point. + +--- + +## Real samples, and a way to change them + +42 Pixabay recordings, already 48 kHz 16-bit mono, with levels spanning ~36 dB. +All of them fit (834 KB of 1943 KB free), so rather than discarding +three-quarters of the round robins the firmware went to **eight variants** — +except Horses, whose variants are the hooves. + +Levels are matched by **RMS, not peak**. A peak is usually one transient: the +quietest goose had a body at RMS 0.004 against another at 0.059, yet both peaked +near 1.0, so peak-normalising would have left the quiet one still sounding quiet. +Corrections ran −15.5 dB to +20.6 dB; the library came out matched to 1.07×. + +The web editor then removes the toolchain from the loop entirely: drag WAVs +into a browser, they are converted and loudness-matched there and streamed over +WebMIDI SysEx into a reserved 1 MB flash region, overriding the baked recordings +per slot. The card mutes during the write because flash writes halt execution — +honest about the constraint rather than glitching through it. + +The firmware image now sits only ~95 KB below that region, and adding baked audio +would silently push it over, making flashing destroy uploads and uploads destroy +firmware. `tools/checksize.cmake` reads the real image end from the ELF and fails +the build if it ever reaches the boundary. + +--- + +## A developer's correction: /32 does not buy you time + +A Workshop Computer developer read the code and pointed out: + +> *"Unless I misunderstand, calling the physics once per 32 samples doesn't help +> with performance — because the physics still needs to finish within that ~20us +> sample in which it is run?"* + +He is right, and it invalidated a claim we had been repeating. + +`controlTick()` is called **inline** from `ProcessSample()`, which runs inside +the DMA interrupt handler (`ComputerCard::AudioCallback`). So on the one sample +in 32 where the physics run, the whole engine still has to finish inside that +single **20.83 µs** slot. Dividing by `kCtrlDiv` lowers the *average* load. It +does not move the deadline. + +The figure in this log — "~55 cycles/sample amortised against a 2604-cycle +budget" — was therefore measuring **throughput**, not the thing that decides +whether audio glitches. What matters is the **worst single sample**, and that had +never been measured. Static instruction counts could not settle it either: the +Geese tick is 1233 instructions but contains 243 branches, so the count is a very +loose upper bound rather than a real path. + +The honest response was to measure rather than argue, so `profile.h` was added: +a SysTick-based cycle counter around the whole callback and each of its phases, +reporting the worst case on the LEDs (one LED per ~16% of budget, all six +flashing on an overrun). It compiles to nothing unless `-DBIO_PROFILE=ON`, and +this was verified by checking that the normal build is byte-for-byte identical to +the released firmware. + +Geese is the mode to watch: its excitation spread is the only O(n²) path left, and +a full cascade is 12×11 = 132 inner iterations in one tick. Frogs was already made +O(n) by the mean-field rewrite. + +> **Both halves of that paragraph turned out to be wrong.** Geese measured +> *fourth* of six, and Frogs' O(n) rewrite is still second worst. See "The +> measurements, and two wrong predictions" below. Left here unedited because the +> reasoning looked sound right up until it was checked. + +His second point stands too: if the measurement shows headroom, the control rate +can go *up* for finer trigger timing. That is a one-line change to `kCtrlDiv` — +but worth making only once the headroom is a number rather than an assumption. + +**Status: measured — see below.** + +--- + +## The measurements, and two wrong predictions + +Three rounds of hardware readings settled it. The first two rounds each fixed a +real problem and each ended with a guess about what would matter next. **Both +guesses were wrong**, and the sweep that proved it took ten minutes. + +### Round 1 — the overruns were XIP flash misses + +Moving the hot path into RAM: Engine 3.5× faster, Voices 3×, Outputs 4×, +overruns down ~92%. Everything the card computes itself came inside budget. + +### Round 2 — USB was the entire remaining problem + +`tud_task()` measured **29895–35850 cycles**, up to 14× the whole 20.83 µs +sample. TinyUSB's device stack is unbounded by design and was being called from +inside the audio interrupt. It moved to core 1. + +**That worked completely.** USB now measures **0 cycles** on core 0 in every mode. +It is the one unambiguous success in this log. + +The same round split `uiTick()` (LED rendering) half a divider away from the +engine so the two costs never land in the same slot. That worked too: Outputs +peaks at 336–526 cycles across all six modes. + +### Round 3 — the full sweep + +| Mode | Engine | Total | Overruns | +|------|-------:|------:|---------:| +| **Cicadas** | **7830** (300.7%) | 8708 (334.4%) | 1225 | +| **Frogs** | **5606** (215.3%) | 6509 (250.0%) | 1640 | +| Horses (pop 4) | 3847 (147.7%) | 4581 (175.9%) | **11030** | +| Geese | 3118 (119.7%) | 3900 (149.8%) | 249 | +| Drips | 2648 (101.7%) | 3530 (135.6%) | 3 | +| Meteors | 2139 (82.1%) | 2915 (111.9%) | 3 | + +Budget is 2604 cycles. **Every mode is over on Total. Four of six are over on +Engine alone.** + +### The two wrong predictions + +**"Geese is the mode to watch."** It is *fourth*. The reasoning was that its +excitation spread is the only O(n²) path left, 12×11 = 132 inner iterations. But +Cicadas is **2× worse** than Horses and 3× over budget with no O(n²) path at all +— it walks its swarm up to four separate times per tick (spook, loudness, main +loop, patch reduction), and each iteration is heavy. **Iteration count did not +predict cost; per-iteration weight did.** Same class of error as the "/32 buys +you time" claim: reasoning about the code instead of measuring it. + +**"Frogs was already made O(n) by the mean-field rewrite."** True, and it is +still second worst at 5606 cycles. O(n) is not the same as cheap. + +### Peak and frequency are different faults + +The overrun counts do not track the peaks. Horses has **11030** overruns at 3847 +cycles; Cicadas has **1225** at 7830. Peak says *how far* over, overrun count says +*how often*. Horses overruns constantly by a little, Cicadas rarely but +massively. Both are audible, differently — and a fix that only chases the peak +would leave Horses' 11030 in place. + +### Horses: the cost is mostly fixed, not per-agent + +Sweeping population on Horses: + +| Population | Engine | Overruns | +|-----------:|-------:|---------:| +| 1 | 2065 (79.3%) | 3 | +| 4 | 3847 (147.7%) | 11030 | + +Three extra horses cost 1782 cycles — **~594 per horse**, leaving a fixed floor +around **1470 cycles**, roughly 70% of the population-1 cost. The `Engine` scope +wraps all of `controlTick()`, so knob reads, CV reads, clock tracking and voice +dispatch are inside that floor. Two loops in the Horses tick also run +`kNumAgents²` = 16 iterations regardless of population (`c.spook` reset and the +`gait != lastGait_` reset), ignoring the early-out at `engines.cpp:143`. + +A prediction that per-agent splitting would quarter the cost was therefore also +wrong: it caps the variable part but leaves the floor untouched. + +### What the numbers rule out + +The developer's second point — that headroom could buy a *higher* control rate — +is dead. There is no headroom. `kCtrlDiv` cannot go below 32 until Engine fits. + +Per-mode micro-optimisation is the wrong strategy: the two modes worth starting +on by intuition (Horses, Geese) are third and fourth. The costs share one shape +— **every engine does its whole swarm in one tick, inside one 20.83 µs slot** — +and `kCtrlDiv` cannot help, because it lowers average load and not the deadline. + +**Caveat on this data:** one reading per mode, and peaks reset on each read. The +Horses sweep showed the range *within* one mode is wider than the gap between +modes, so Drips and Meteors sitting at 3 overruns is provisional — it may only +mean that knob position was never swept. + +**Status: measured. Fix not yet attempted.** + +--- + +## Drone was the real glitch, and the uploader never worked at all + +The measured sweep above was **Rhythm mode only**, and that turned out to matter. + +### The ear found what the sweep missed + +Asked whether the overruns were actually audible, the answer was that they were +mostly masked — chirps and hooves are broadband and transient-dense, so a +one-sample discontinuity hides in material that already sounds like noise. Fair, +and it nearly stopped the work. + +But then: discontinuity **in Drone**, on Geese, Frogs and Meteors, with a guess +that it was "the longer samples". Meteors measures 2139 cycles — the one mode +never over on Engine — so Engine could not be the cause. Reading timing in Drone: + +| bucket | Rhythm (Geese) | Drone (Geese) | +|--------|---------------:|--------------:| +| Engine | 3118 | 3145 | +| **Voices** | **800** | **17546** | +| Total | 3900 | 18230 | +| overruns | 249 | **373862** | + +**674% of budget, and 1500x the overruns.** The engines were never the problem in +Drone. `droneRender()` is, and unlike the physics it runs on *every* sample. + +The cause was one line: a triangular grain window computing `(dist << 16) / half` +per grain per sample — 8 grains x 4 voices = **32 hardware divides at 48kHz** on a +core with no divider. `g.len` never changes once a grain launches, so the whole +thing was recomputing a constant 48000 times a second. The reciprocal is now +taken once at launch and the render loop multiplies. + +The "longer samples" hunch was right, and better than my reasoning: longer grains +stay active longer, so more of the 32 divides are live at once. + +### Getting the reciprocal right took three attempts + +Worth recording, because the first two would have shipped audible bugs and a +Python check caught both before flashing: + +1. **Q16 reciprocal** — `(0xFFFFFFFF/half)>>16`. Fine for short grains; on + `meteors_5` (118596 bytes) it truncates to 1 against a true 1.105, a **10% + window error**, and an uploaded 1MB sample truncates it to **0** — silence. +2. **Q48 reciprocal** — fixes the long grains, **overflows 32 bits** on short ones. +3. **Q32 with a clamped `dist`** — the range of `half` (8 to ~500000) is too wide + for any single fixed scale. The survivor also needs `dist < half`, because an + odd `len` lets `dist == half`, and `half * (2^32/half)` is exactly 2^32, which + wraps to zero and turns the window's **peak** into silence. + +Verified exhaustively against the original across every real sample length: +zero overflows, max error 0.19% of full scale on the shortest baked recording. + +### The uploader deadlocked the card, every time + +Reported as: web UI says it will go silent, then no sound, no LEDs, no control, +until a power cycle. Three separate defects, all in a path that had **never once +run on hardware**: + +1. **The park loop was inside the DMA interrupt handler.** Core 0 spun in + `ProcessSample()` waiting for core 1 to finish writing flash. Spinning for the + seconds an erase takes starves the audio DMA, and it never restarts. +2. **`ProcessSample()` is `virtual`.** Merely *dispatching* to it reads a vtable + that lives in flash — so with XIP down, core 0 faults before reaching any + guard. The RAM-residency of the function body cannot help you get to it. +3. **Every upload erased the whole 1MB region** and `memset` the slot table, so + replacing one 6KB recording destroyed the entire library, after a multi-second + stall the browser read as a hang. + +Fixed by giving up on the pretence. `EnterUploadMode()` disables `DMA_IRQ_0` +outright, the whole USB path is now RAM-resident, core 1 drives the progress +LEDs (core 0 is not running at all), and the card **reboots** when the upload +finishes. The web UI already said "the card mutes while uploading"; this makes +that true instead of aspirational. + +Uploads are now incremental: the header is seeded from what is already on the +card and new audio is appended, so untouched slots survive. The append point is +rounded **up** to a sector boundary — erase works a sector at a time, and +starting mid-sector would have wiped the tail of the previous recording, which is +the exact corruption the change existed to prevent. Space is reclaimed with +"revert to built-in", which empties the region. + +### Drips: the first 40% of the knob did nothing + +Reported as basically never firing until ~40%, then firing often. Measured, and +exactly right: **0.00 triggers/sec everywhere below 45%**, then straight to 3.3. + +This was not a knob-taper problem, so remapping the curve would only have moved +the cliff. Below a certain inflow the buckets leak as fast as they fill, so the +level sits at an equilibrium under the threshold and *nothing ever fires* — a +uniform random drop cannot cross it, no matter how the knob is scaled. + +Two changes. The inflow law is square-rooted (`fast_sqrt_q16`, a new bitwise +integer sqrt — no libm, no float, no divide) so the bottom of the travel moves +fastest, with a small floor. And the drop is now **heavy-tailed**: cubing the +random keeps the mean low but lengthens the tail, so a weak downpour still tips a +bucket occasionally. That tail is what removes the dead zone, and it is closer to +real dripping, where water gathers and then lets go. + +Result: drips from 2% of travel, rising smoothly to ~19/sec, under the ~25/sec +ceiling at which a rhythm stops reading as one. + +The obvious `* 4 / 5` gain trim compiled to an `__aeabi_idiv` call **inside the +inner loop**, checked in the disassembly and replaced with a Q16 multiply. The +same M0+-has-no-divider lesson the Cicadas patch walk already learned. + +**Status: all three built and staged, none heard on hardware yet.** + +--- + +## Round two on all three, from hardware + +### Drone: the divide was half of it + +`droneRender()` went **17546 -> 9608** cycles. Real, and not enough — still 369% +of budget, and Geese still audibly glitched. + +The other half was in the same loop and the same shape: `mul_q16()` widens to +`int64_t`, which on the M0+ is an **`__aeabi_lmul` library call**. Two of them per +grain per sample, up to 32 grains, at 48kHz. Confirmed in the disassembly rather +than guessed. Neither needed 64 bits: `|s| <= 2048` and `win <= 65536`, so the +product peaks at 1.3e8 and the accumulator at 5.4e8, both comfortably inside +int32. They are now plain 32-bit multiplies, and `droneRender()` contains **no +library calls at all**. + +`droneUpdate()` had three more (`* 2 / 5`, `% 32`, `% kNumGrains`) — the first +became a Q16 multiply, the other two masks, since both divisors are powers of +two. It runs at control rate so it matters ~32x less, but it sits in the same +Engine bucket that measured 4676 in Drone. + +The one remaining 64-bit divide is the window reciprocal at grain launch, which +is the whole point: one divide per grain instead of one per grain per sample. + +### The uploader: the ack never left the device + +"Upload did nothing, revert reset to stock samples" — so the header never +committed, and the browser saw nothing. + +`tud_midi_stream_write()` only fills a FIFO. **`tud_task()` is what puts bytes on +the wire**, and this TinyUSB has no MIDI flush call. Every reply was queued and +then immediately followed by an erase, a page program, or a `busy_wait` before +the reboot — all of which block without servicing USB. So: + +- chunk acks sat in the buffer while the browser waited for one before sending + the next chunk, and +- the final ack died with the `watchdog_reboot()` 120ms later. + +`Send()` now pumps `tud_task()` itself (guarded against unbounded recursion, +since it is called from inside `tud_task()`), and the reboot paths spin on +`FlushUsb()` instead of a blind `busy_wait`. + +Worth noting this bug was invisible to the profiler reads, which worked fine: +those reply once and then return to the normal `Task()` loop, which flushes them +on the next iteration. Only the upload path blocks immediately after replying. + +### Drips: right shape, wrong speed + +The dead zone was gone but the first drips arrived faster than one a second, +where the ask was nearer one every four. Lowering the floor barely moved it and +lowering the gain capped the torrent at the top. + +The fix was to stop treating gain as a constant: it now **ramps 0.4 -> 0.8 across +the sweep**, so the bottom is sparse without flattening the top. With the floor +raised to 9000, drips start at ~4% of travel at 0.41/s (one every 2.4s), pass 1/s +around 10%, and reach ~18/s at full. + +**Status: built and staged; not yet heard.** + +--- + +## The uploader, third attempt: masking an interrupt is not stopping a core + +Two rewrites in, upload still hung the card. The mistake was the same both times, +just better hidden: **`irq_set_enabled(DMA_IRQ_0, false)` stops the interrupt from +firing again. It does not stop core 0 from executing flash.** + +Three things were still live when `flash_range_erase` dropped XIP: + +- `ComputerCard::AudioCallback` and `BufferFull` are **in flash**. Core 0 can be + inside them at the moment of the erase — masking the IRQ does not evict it. +- `AudioWorker`'s outer `while(1)` is RAM-resident, but it returns into and calls + flash-resident code. +- The CV outputs run a **second flash-resident ISR**, `PWM_IRQ_WRAP -> + OnCVPWMWrap`, which was never masked at all and kept firing throughout. + +Any one of them faults the chip. `ProcessSample` being `__not_in_flash_func` was +never the point: what matters is everything *around* it. + +Core 0 now parks inside `ProcessSample` itself — which is RAM-resident — mutes +its outputs, sets `core0Parked`, and **spins forever**. It never returns, so the +flash-resident caller never runs again. Core 1 raises `uploadMode`, waits for the +acknowledgement (the next callback is 21us away), and only *then* masks both +IRQs and touches flash. Order matters: masking first would mean `ProcessSample` +never runs again, never sees the flag, and never parks — a deadlock built out of +the fix for a deadlock. + +This is safe now in a way it was not in the first attempt, and the reason is +worth stating: USB moved to core 1, so spinning core 0 no longer stalls the very +transfer it is waiting on. + +### Two browser bugs, both reported rather than found + +- **The file picker opened twice per sample.** Each slot was a `

`. +- **"Erasing… the card is muted while this runs"** described the old behaviour, + where every upload wiped the whole 1MB region. It erases only the sectors it + needs now and reboots at the end, so the message says that instead. + +### Drone has plateaued + +Two reads of the identical build: Voices 3398 then 3499, overruns 3688 then 7321. +That spread is run-to-run variance, not a regression — the mode sits at ~130% of +budget and there is nothing left in the loop to remove. Further gains need fewer +grains or fewer voices, which is an audible change to the texture and therefore a +decision to make by ear rather than an optimisation to slip in. + +**Status: built and staged. The uploader has still never completed.** + +--- + +## The uploader works — and the LEDs are what found it + +Six attempts. The one that mattered was not a fix at all: it was giving up on +guessing and making the card **say where it stopped**. + +`WebUI::stage` counts the steps and core 1 renders it on the LEDs as a binary +number. First run reported **LEDs 0 and 2 — stage 5**, and that single reading +ended the guessing. Everything hard had *already worked*: core 0 parked in RAM, +boot2 primed, the header read, and the **erase completed without faulting**. It +hung on the very next line — sending the ack. + +Which meant the flash hazard, the thing three rounds of work had been aimed at, +was never the problem after the park went in. + +### The real constraint + +**TinyUSB's device stack is entirely in flash**, including its `USBCTRL_IRQ` +handler `dcd_rp2040_irq`. So core 1 cannot service USB and write flash: *the +stack it needs lives in the memory it is erasing.* Masking `DMA_IRQ_0` and +`PWM_IRQ_WRAP` was never sufficient — the moment interrupts came back, a pending +USB interrupt vectored into dead flash and the stack never recovered. The ack was +queued and could never leave. + +That is why patching details kept failing. The design could not work, so the +design changed: + +> Receive the **whole** upload into a 128KB RAM buffer with everything running +> normally — audio, USB, LEDs — then ack, flush, and touch flash exactly **once**, +> after the last byte has already arrived. + +The card stops being a synth only for the final commit, not for the transfer. + +*(Later correction: it stops well before that. USB is modal — holding the switch +ends the ecosystem and hands the card over, so it is silent for the whole +session, not just the commit. The claim above described the transfer mechanism +and quietly became a claim about what you hear, which is not the same thing.)* + +### What it cost + +One upload is now capped at **128KB by RAM**, not by the 1MB flash region. +`MSG_INFO` reports the staging size so the browser rejects on the true limit. The +largest baked recording is meteors_5 at 116KB, so one big sample or several small +ones fit per pass; a whole library does not. RAM sits at 69%. + +Slot offsets are staged as buffer offsets and rewritten to flash offsets at +commit once the append base is known, with a `touched_` table so untouched slots +keep their existing offsets instead of being shifted. + +**Confirmed on hardware: uploads complete, and the samples survive the reboot.** + +### The lesson, which is the same one as last time + +Every real advance this session came from a measurement, not from reasoning about +the code. The profiler found the Drone divide. The Drone *listening* found what +the Rhythm-only sweep missed. The stage LEDs found that the flash write was +already fine and USB was the casualty. Three times running, the confident +diagnosis was wrong and the instrument was right. + +When a fix fails twice, the third attempt should probably be a measurement. + +--- + +## v1.0.1, and what v1.1.0 is for + +**v1.0.1 is corrective.** Everything in it fixes something that was wrong in +1.0.0 and was found by playing the card, not by reading it: + +- Drone's audible glitch — `droneRender()` **17546 -> 3398** cycles, overruns + down 99.2%, by removing a per-sample divide and two `__aeabi_lmul` calls. +- Drips' dead first 40% of travel — the buckets leaked as fast as they filled, so + no knob taper could have fixed it; the inflow needed a heavy tail. +- Meteors' too-busy CCW end — **0.53/s -> 0.06/s**, an empty sky you wait on. +- An uploader that hung the card, now working, incremental, and RAM-staged. + +### v1.1.0: decouple what the two cores do + +The remaining problems are all the same problem. Core 0 does **everything** +audio — physics, voices, outputs, LEDs — inside one 20.83 µs interrupt, while +core 1 does nothing but poll USB. In Drone that leaves core 0 carrying ~7000 +cycles against a 2604 budget while core 1 idles. + +The plan, in the order the constraints force: + +1. **USB becomes modal.** Hold the momentary switch to enter an explicit upload + mode; normal operation never calls TinyUSB at all. This is the user's + suggestion and it is the right one: sample management is a setup activity, so + the card should not carry the USB stack, its flash-resident ISR, or the + enumeration risk while performing. +2. **That frees core 1**, which is the only reason step 3 is possible. +3. **Split engine and voices across the cores** — the `second_core` pattern from + `../WorkshopZX`: one core free-runs the physics at control rate, the other + handles 48kHz I/O and rendering, communicating through a lock-free struct with + a single writer per field. Drone's Engine (4924) and Voices (3499) would stop + stacking in the same slot; the worst core carries ~4900 instead of ~7000. + +**What this does not fix:** Voices alone is 3499, still 134% of budget. Splitting +stops the costs stacking; it does not make the granular renderer cheap. Getting +Drone fully clean still means fewer grains or fewer voices, which thins the +texture — an audible trade, and one to make by ear. + +**The known cost:** the profiler is read over USB, so in a modal design timing +can only be read after playing, by entering upload mode. Peaks are already sticky +until read, so this is survivable, but it is a real loss — every fix in this log +came from reading those numbers. + +--- + +## v1.1.0 Stage 0 — does a busy core 1 starve core 0? + +The whole v1.1.0 design rests on one assumption: that core 1 can run the physics +without hurting core 0. That is not obvious, because **PCM playback reads flash on +every sample** — `droneRender()` reads `g.pcm[idx]` from XIP-mapped flash at +`voices.cpp:446`, and today that is free only because core 1 is idle. + +So before writing any of the split: a throwaway build where core 1 hammers flash +in a 4096-byte read loop, which is far harsher than the real physics (those idle +~90% of each tick). Checked in the disassembly that the loop survived +optimisation, because a probe that compiled away would have given a falsely +reassuring answer. + +Drone Geese, against the same mode's baseline: + +| bucket | baseline | busy core 1 | delta | +|--------|--------:|-----------:|------:| +| Voices | 3499 | **3092** | **−12%** | +| Engine | 4924 | 5419 | +10% | +| Outputs | 528 | 839 | +59% | +| Total | 6976 | 7894 | +13% | + +**The assumption holds.** Voices — the PCM path, the thing at risk — went *down*, +not up. Core 1 activity does not starve core 0's sample reads, so the split is +sound and the physics can move. + +The cost landed somewhere else entirely: **Outputs +59%**, Engine +10%. Contention +hits register work and non-PCM flash access, not the audio data. Worth watching at +Stage 3 rather than assuming it is free, but bounded, and from a probe far worse +than the real thing. + +--- + +## v1.1.0 Stage 1 — USB becomes modal + +Sample management is a setup activity, so the card should not carry USB while it +is being played. It now doesn't: **`tusb_init()` is never called until the +momentary switch is held for two seconds.** Until then the card does not enumerate, +`USBCTRL_IRQ` (whose handler lives in flash) is never armed, and core 1 sits in a +`tight_loop_contents()` doing nothing. + +That idle wait is the point. It is the space v1.1.0 puts the physics into, and it +is why USB had to become modal first. + +**The switch had to be rebuilt to allow it.** The old handler fired the mode +change on the *first* control tick Down was seen (`main.cpp:316-332`), which cannot +coexist with a hold — starting the hold would cycle the ecosystem out from under +you. The mode change now fires on **release**, and a hold past `kHoldTicks` +consumes the tap. The LEDs fill left to right as the hold counts, so the gesture is +watched rather than guessed at; all six stay lit in USB mode, which is the +"power-cycle to play again" indicator. + +Two smaller corrections fell out of it: + +- **The profiler's Down-tap reset is gone.** It conflicted with mode cycling — one + tap both changed the ecosystem and threw away its numbers. +- **Entering USB mode deliberately does *not* reset the peaks.** That is the exact + moment you stop playing in order to go and read them, so wiping them on entry + would guarantee a reading of zero. The web UI now says so next to the button: + play the mode, *then* hold, connect, read. + +The browser also watches `onstatechange`, so a card that enumerates while the page +is open is picked up without pressing Connect again — "card not found" now much +more often means "not in USB mode yet" than "unplugged". + +**Status: built, not yet flashed. Expected: every mode identical to the tables +above — anything that moved means the switch rework broke something.** + +--- + +## v1.1.0 Stage 3 — the physics leave the audio interrupt + +**Zero overruns.** First time in this whole investigation that a mode has been +inside budget. + +| mode | before | after | | +|------|-------:|------:|---| +| Geese | 3900 (150%) | **2209 (85%)** | overruns 249 → **0** | +| Frogs | 6509 (250%) | **2291 (88%)** | overruns 1640 → **0** | + +Frogs is 2.8× faster — from second worst to comfortably inside. And the rhythms +sound right, which was the real risk: the trigger ring is neither dropping nor +reordering. + +### The split itself + +`controlTick()` keeps only what genuinely needs core 0 — the switch, draining +note-ons, applying gate/CV targets — and everything else is `physicsTick()` on +core 1. **Core 0's control work went 2411 → 185 cycles.** + +Note-ons cross as **packed 32-bit words through a ring**, not as calls, and that +is not a stylistic choice: `note()` writes ~20 fields of `Voice` including a +128-entry `ks[]` buffer, while `render()` mutates the same struct every sample. +Calling it from core 1 would tear the struct, and a half-applied note-on means a +new `pcm` pointer with an old `pcmLen` — an out-of-bounds flash read, not a +glitch. The whole payload fits in one word, so the store cannot tear. + +### Two things the numbers corrected + +**"Engine 2411" was measuring the wrong thing.** After the split that scope wraps +`controlTick()` — which no longer contains the engine. A stale label, and exactly +the class of mistake that had me misreading this profiler before. The buckets are +now named for what they measure: `Ctrl`, `Voices`, `Outputs`, `Notes`. There is +no Engine row on core 0 because there is no engine on core 0. + +**The residual was my own.** With the labels fixed, `Notes` read 2040 — the whole +remaining problem. `selectVariantAndPan` had **three software divides**, added +during the round-robin work, one of them **inside a do-while retry loop that can +spin**; plus `VariantCount()` and `PickUserVariant()` each walked eight slots +through XIP flash *per note-on*, for an answer that only changes when samples are +uploaded (which reboots the card). Fixed by advance-and-wrap instead of +retry-until-different, tables resolved once in `init()`, and a mask-and-fold +instead of `% 17` in the Random pan case. 430 instructions → 166, three divides → +none. + +Note-ons are also **drained one per sample** now, on the samples that have neither +the control tick nor the UI tick. A full Geese tick fires four at once, so taking +them together put ~1200 instructions on a single sample — the very cost the split +removes, just relocated. The ring already decouples consumption from production, +so there was never a reason to take them all in one slot. + +### A measurement that said "stop" + +Frogs' `Notes` is **1332** against Geese's **1356** — identical within noise. +Frogs is the mode with the Karplus-Strong length calculation: two chained divides +plus a 128-entry noise fill, and the obvious next thing to cache. The numbers say +it costs nothing measurable. Left alone. + +**Status: Rhythm fixed and confirmed on hardware. Drone still runs the old path +on core 0 — Stage 4.** + +--- + +## Voice truncation: what a fix can and cannot be + +Reported as samples audibly cut off when hits overlap. Two causes, one of them +invisible from outside: there was **one voice per agent, hard-retriggered**, and +**the PCM path had no envelope at all** — `v.env` was written by `note()` and only +ever read inside the synth branch, so a recording played flat to its end and a +retrigger jumped straight to the new sample's first byte. + +Now a pool of 8 with an allocator that steals the voice *furthest through its +recording* — the least audible thing to interrupt — and a 2 ms fade-in on every +note so a steal is a crossfade rather than a step. + +### It cannot be "fixed", and that is not a cop-out + +Voices needed for **zero** steals, being sample length × trigger rate × agents: + +| mode | sample | voices for zero steals | +|------|-------:|----------------------:| +| Drips | 0.10 s | ~8 | +| Cicadas | 0.15 s | ~10 | +| Geese | 0.18 s | ~12 | +| **Meteors** | **2.47 s** | **~168** | + +`meteors_5` alone would want 168 voices. Any sampler with finite polyphony steals +eventually, and a user uploading a five-second pad into Drips will steal +constantly whatever the pool size. **The goal was never zero steals — it is that a +steal does not sound like a fault.** Confirmed by ear: at X≈50%, full Geese is a +big gaggle with no audible clipping. + +### The costs were flash, not arithmetic + +Three rounds of measurement, and the pattern repeated: + +- **`mul_q16` widens to `int64_t`** → an `__aeabi_lmul` call, one per voice per + sample. This is the *same* mistake fixed in `droneRender` two rounds earlier, + re-introduced in new code. The lesson had not become a habit. +- **`ResolveSample()` read the user header through XIP on every trigger** — magic, + version, size, offset: four flash reads while core 1 contends for the same bus. + Cached at init, and Note-ons fell 1492 → 1099. +- **`CVOutMillivolts` calls `MillivoltsToDAC`, which is flash-resident** in the + vendored ComputerCard — twice per sample at 48 kHz, nearly always re-sending a + value the DAC already had. Now guarded by a change check. + +**Voices is simply linear**: 835/4 = 209 cycles per voice before the pool, +1591/8 = 199 after. The pool added voices, not overhead — that is what eight +concurrent interpolating PCM readers cost, and no micro-optimisation changes it. + +### Where it stopped + +Full Geese, the worst case on the card: **Total 2652 of 2604 — 1.8% over, one +overrun in ~1.4 million samples.** Down from 3071 and 251 overruns. + +Stopping here deliberately. Chasing the last 48 cycles would be optimising a +number rather than a sound, and the planned 192 MHz bump makes 2652 into 66% of +budget. The remaining item is `Voices`, which means fewer voices — a musical +trade, not a bug. + +--- + +## The remaining noise is the recordings, not the format + +Reported as the samples still sounding "a bit noisy (8 bit, or source, who +knows)". Worth settling, because it decides whether there is anything left to +fix. + +8-bit's theoretical floor is **49.9 dB**. Measured peak-to-tail on the baked +library: + +| mode | peak | tail RMS | peak-to-tail | +|------|-----:|---------:|-------------:| +| Frogs | 94 | 8.04 | **21.4 dB** | +| Cicadas | 75 | 1.83 | 32.2 dB | +| Meteors | 97 | 2.17 | 33.0 dB | +| Geese | 75 | 1.40 | 34.6 dB | + +All far above the format's floor, so **the noise is in the source recordings** — +room tone and mic hiss in the Pixabay originals. More bits would faithfully +reproduce more noise. (Frogs' 21.4 dB is partly a false alarm: segmenting the +file shows real call structure through to the last eighth, so what looked like a +noisy tail is mostly the ribbit still going.) + +The +0.8 bits recovered by the louder re-bake were real and worth having; there +is simply nothing further to win in the format. Reverb is the practical answer, +and it belongs outside the card. + +--- + +## v1.2.0 — the alt boot stops being a different synth + +Drone was proposed twice and rejected twice. The plan going in was a bank of four +oscillators whose pitch and level followed each agent's engine state. What came +back was a much better brief: + +> *I think I just want them as they are in the rhythm side, but without the pitch +> modulation from the actual rr samples. I can see an instance where I might want +> to upload (say) notes, and have them 'gallop' like hooves. Or drip like rain.* + +That is a smaller change and a stronger idea. The engines are already good at +generating organic rhythm; the thing stopping them being *usable* on pitched +material was never the voices, it was two deliberate detunings: + +- **`kPcmAgentSpread`** — a fixed per-agent rate offset. On animals that is four + different-sized bodies. On a tuned sample it is four permanently out-of-tune + copies. +- **`kPcmPerHit`** — random detune per event. On honks it stops two overlapping + calls fusing into one doubled sound. On a struck note it is just wobble. + +Measured worst case: Meteors **±2.9 semitones**, Frogs ±2.2, Geese ±1.6 — audibly +out of tune, and randomly so from hit to hit. Both are gated off by a `tuned_` +flag, and the alt boot becomes the same instrument playing honestly. + +So the boot switch now means something coherent: **Rhythm is an ecosystem, Tuned +is an instrument.** + +### The routing, and the one output worth patching first + +Specified directly rather than designed by me: + +| | Switch Up | Switch Middle | +|---|---|---| +| **Pulse 1** | Agent 1 | Any agent fired | +| **Pulse 2** | Agent 2 | Pulse 1 ÷ 4 | +| **CV 1** | Agent 1 density | Overall density | +| **CV 2** | Agent 2 density | **1 V/oct — which sample fired** | + +CV 2 is the interesting one: each round-robin slot maps to a semitone, so an +external oscillator plays a melody chosen by whichever recording the ecosystem +picked. It needed a new path — the CV outs are slewed, and **a pitch CV must step, +not glide**, or a sequence becomes portamento smear. One bit in `gXC.cvStep` +bypasses the smoother for that output only. + +Verified the mapping arithmetic against the DAC calibration rather than trusting +it: within 0.1 mV of a true semitone across all eight slots. + +### What deleting Drone bought + +The granular renderer went: `droneUpdate`, `droneRender`, `Grain`, `DroneVoice` +and `droneControlTick()` — **308 lines**, and with them the last engine still +running its physics inline on core 0. The mode that was 130% over budget stopped +existing rather than being optimised. + +--- + +## The editor round trip: three bugs that all looked like display faults + +Uploading worked. Reading back what had been uploaded did not, and it took four +rounds of hardware reports to see why, because every symptom pointed at the page +while two of the three causes were elsewhere. + +**Cicadas played hooves.** Samples uploaded to Horses and Rain also came out of +Cicadas, which had never been touched. My first instinct was a display shift — +the panel said "Cicadas 3 = built-in Horses 3" and Cicadas is mode 5, Horses 0. +Wrong: *"No — they sound like horses too."* The card really was holding it. + +A **baked reference** points a slot at a built-in recording. In a mode with no +uploads it buys nothing, since an empty slot already plays its own built-in — so +the editor skipped sending them. But the test only caught a reference pointing at +its **own** mode and variant, and a cross-mode one went straight through. Then it +became self-sustaining: the page seeds its mapping from the card, so the bad +reference came back on every reload and was re-sent by the next sync. **It +outlived the firmware that created it**, which is exactly why it kept looking +like a display bug I had already fixed. + +Fixed on both sides, and enforced on the card at `UP_END` rather than per message +— only the finished header shows whether a mode has real audio, since references +can arrive before the uploads they sit beside. That makes the next sync *repair* a +card already carrying them. + +**A sample in a high slot vanished but still played.** Slots 1–4 and 5–8 come +back as two separate replies, because all eight never fitted the USB transmit +buffer. The request loop read one reply per request and skipped anything that was +not a `SLOTDET` — so a stray message was consumed **in place of** a real reply, +shifting every later reply by one and leaving the last request with nothing. + +The tell was mine to miss and someone else's to spot: *"Might not have been 5. +Have just re-tried with slot 2 in geese, that DID work."* Slot 2 is the first +reply, the high slot the second. + +Worth recording that my previous fix caused this. Keying replies on the mode the +*card* reports (rather than the one requested) stopped data being **mis-filed** — +but it could not conjure back a reply that was never read. **It converted a wrong +answer into a missing one.** I fixed the labelling without checking that the loop +consumed replies correctly, and the symptom moved instead of going away. + +And once Geese's second reply was lost, Geese looked upload-free, so every slot +fell back to its built-in. **The page was faithful to what it had been told; it +had been told wrong.** A display that derives everything from one query is only +ever as honest as that query. + +**"Update mapping" was greyed out until you had done an upload** — which is +precisely the case where you have not. `connect()` enabled every other button but +that one; the sole place it was enabled was the `finally` of `sync()`. The button +whose whole purpose is to avoid an upload required one first. + +--- + +## Playing it: Frogs, the cicada footstep, and an input that never worked + +Four things came back from an hour with the card, and three were real defects. + +**Frogs felt uniform across Knob Main** — with population high and Main hard +CCW the pond should lock into phase, and the knob felt much the same +everywhere. Also remembered as having coupled properly once, which made it a +regression to find rather than a design to invent. + +The model was fine. I checked the mean-field factorisation first, since it was +the obvious suspect: identical to the direct O(n²) sum to three decimal places. +Clock entrainment on Pulse In 2 also worked on hardware, and that needs the same +coupling term. + +The knob-to-K mapping was the fault. Simulating the order parameter against K +shows the pond is locked above K≈0.25 and scattered below K≈0.03 — **the entire +audible transition is less than one octave of K.** Against that, the cube spent +half the travel above K=0.125, all of it locked. + +The comment claimed cubing "pushes the transition into the middle of the sweep". +It does the opposite: it compresses exactly the low-K region where all the +behaviour lives. Reasoned backwards, and never checked against a sweep. Replaced +with a geometric table so equal knob travel gives equal *ratios* of K. + +**The cicada footstep was a dip, not a hush.** It slammed `fatigue_` to maximum, +which sounds like silence and is not — `tired` bottoms out at 0.25, so twelve +insects kept calling at a quarter rate. That floor is right for fatigue, which +has to *thin* the field during a swell rather than switch it off. A startle was +simply never the same quantity, so it became its own state that multiplies to a +true zero. + +**Audio In 1 did nothing at all, and never had in any firmware.** `listen()` +computes the envelope on core 0; the engines read `gXC.loudness`. One read, zero +writes anywhere in the tree. A casualty of Stage 3, where the physics moved to +core 1 and `listen()` stayed behind — `crosscore.h` even names core 0 as the +field's writer, and the writer was never written. Audio In 2 survived the same +split only because it publishes an edge counter inline, which is exactly why +Disturb worked and Loudness did not. + +### Two wrong tunings in a row, on a control that was a cliff + +Publishing the envelope exposed constants that had never once run against a +non-zero input. Geese was fine. Cicadas took three attempts, and the first two +were mine to have caught: + +| attempt | loudness → fatigue | result | +|---|---|---| +| original | `/40` | pins fatigue in 0.25 s — would have **muted** the field | +| second | `/4000` | an order of magnitude below ambient drive — **inaudible** | +| third | direct rate scale | proportional, and works | + +The lesson is not "pick a better constant". **No constant would have worked**, +because fatigue is driven far harder by calling (0.25 per call) and ambient +drive (~0.0017/tick), *and* it caps at ×0.25. Every value is either swamped or +pinned. Scaling the call rate directly — beside the startle, where it is +proportional and unbounded below — is the mechanism the feature always needed. + +I jumped from one end of that range to the other and called the second value a +fix without checking it against the terms it was competing against. The +arithmetic that showed the problem was three lines long, and I only ran it after +hardware reported the effect was inaudible. **When a value has never run, the +first thing to check is not the value but whether the path exists** — and the +second is what else is writing the same variable. + +--- + +## Standing notes + +- **`tools/simulate.py` duplicates the C++ constants.** It will drift if + `engines.cpp` changes without it. Update it or delete it — a model that lies is + worse than none. +- **No host C++ compiler on this machine**, which is why the harness is a Python + model rather than `tools/simulate.cpp` compiling the real sources. +- **CPU timing is measured, and the card now runs inside its budget** — worst mode + 70% with zero overruns, after the physics moved to core 1 and the clock went to + 192 MHz. The old claim here ("~55 cycles/sample amortised") measured the wrong + quantity and has been removed. **Never quote an amortised figure as headroom:** + `controlTick()` runs inline in the audio interrupt, so the sample where the + physics fire must still complete in one 20.83 µs slot. +- **Drone is gone.** It was the worst thing on the card at 674% of budget, and + rather than optimise it the alt boot became Tuned — the same voices, undetuned. + 308 lines deleted. +- **Both audio inputs are now confirmed on hardware.** Disturb spooks every + ecosystem; Loudness agitates the geese and thins the cicadas. Audio In 1 had + never worked in any released firmware — see above. +- **A constant that has never run is not a tuning, it is a guess.** Anything + gated behind a value that was always zero has never been heard, however + carefully it was reasoned about when written. +- **Measure the mode you are asking about.** The six-mode sweep was Rhythm-only + and said nothing about Drone, where the real defect was — and the tell came + from someone listening, not from the numbers. +- **The USB path partly runs on hardware.** Enumeration, SysEx round-trip and the + browser's `MSG_PROF_GET` query are proven — that is how the timing above was + read. **Sample upload now works on hardware** — transfers complete, commit, and + the samples survive the reboot. It took six attempts; the constraint that + finally explained it is that TinyUSB lives in flash, so USB and flash writes + cannot coexist. Uploads are RAM-staged and capped at 160KB per pass, and they + APPEND, so the full region is reachable over several passes. +- **When a fix fails twice, make the third attempt a measurement.** The uploader + took six tries; the one that solved it added a stage counter on the LEDs rather + than changing any logic. One reading (stage 5) proved the flash write was + already working and USB was the casualty, which no amount of re-reading the + code had suggested. +- **The card can only report what is still alive.** USB cannot describe a failure + that stops USB, and the LEDs cannot describe one that stops `ProcessSample()`. + Pick the out-of-band channel that survives the thing being diagnosed. +- **A wrong display and a missing one are different bugs.** Twice now a fix to + how data was *labelled* left a hole in how it was *read*, and the symptom moved + rather than going away. When a report changes shape after a fix, suspect the + fix. +- **State that round-trips through storage outlives the code that wrote it.** A + bad baked reference survived the firmware that created it, because the editor + seeds itself from the card and re-sends what it finds. Anything persisted needs + validating on the way *in*, not only on the way out — which is why that check + now runs on the card at commit, where a buggy client cannot skip it. +- **A display derived from one query is only as honest as that query.** Losing + half of one reply made a mode look upload-free, and the page then confidently + showed built-ins for slots the card was playing samples from. It was not + guessing; it had been told wrong. +- **Listening beats simulation, and simulation beats reading the code.** Every + fix in this log after the first release came from someone playing the card, and + more than one of my confident first guesses was wrong until I measured + something instead of reasoning about it. This round the decisive corrections + were all one-line hardware reports — *"they sound like horses too"*, *"slot 2 + did work"* — each of which killed a theory I had spent a tool call defending. diff --git a/releases/62_BioMimicry/engines.cpp b/releases/62_BioMimicry/engines.cpp new file mode 100644 index 000000000..d5ed6fbe5 --- /dev/null +++ b/releases/62_BioMimicry/engines.cpp @@ -0,0 +1,1056 @@ +// engines.cpp — the five physics models. +// +// All five run at kCtrlRate (1500Hz). Integer-only; see fastmath.h for the +// Q15/Q16/phase conventions. Every engine fills EngineOut::state[] with a +// continuous 0..65536 view of its internals, which the Summed routing mode +// puts out as CV. + +#include "engines.h" +#include "pico.h" // __not_in_flash_func + +namespace bio { + +// hz_to_inc()'s constant is precomputed for this control rate. If kCtrlDiv +// changes, kHzToIncQ16 in fastmath.h must be recomputed as +// round(2^32 / (256 * kCtrlRate) * 65536). +static_assert(kCtrlRate == 1500, + "kHzToIncQ16 in fastmath.h is precomputed for kCtrlRate == 1500"); + +// =========================================================================== +// Mode 1 — Horses: phase-drifting clocks + gaits +// =========================================================================== + +// Leg-length offsets. Deliberately close to 1.0 and mutually irrational-ish so +// the four clocks take a long time to realign — that slow drift is the sound. +// Real gaits are PHASE-LOCKED: a trotting horse's diagonal pair stays a pair, +// and that lock is what makes it a trot. So ONE master clock per stride drives +// all four hooves, each landing at a fixed offset within the stride. Leg +// asymmetry becomes small per-hoof jitter on top — not four free-running clocks, +// which pulled every gait apart within seconds. +// +// Agent order is the standard equine convention: +// 0 = LH (left hind) 1 = LF (left fore) +// 2 = RH (right hind) 3 = RF (right fore) +// +// Each entry is the fraction of the stride at which that hoof LANDS, Q16 +// (65536 = one full stride). A hoof fires when (stride - offset) wraps, so the +// numbers below read directly as footfall times — 0 is the start of the stride. +static const int32_t kGaitOffset[4][kNumAgents] = { + // LH LF RH RF + // WALK — 4-beat lateral, evenly spaced. The two legs of ONE SIDE follow each + // other: LH, LF, RH, RF. (The original table fired both forelegs back to + // back, which no horse does.) + // LH 0 · LF 0.25 · RH 0.50 · RF 0.75 + { 0, 16384, 32768, 49152 }, + + // TROT — 2-beat diagonal, LH+RF then LF+RH half a stride apart. The two feet + // of a pair are offset by a small FLAM (see kFlam below) rather than landing + // on the same sample: a real diagonal pair is not perfectly simultaneous, + // and two identical clops at the same instant sum into one louder clop + // instead of two events — which made a trot read as half-density. + { 0, 32768, 32768, 0 }, + + // CANTER — 3-beat with suspension, on the right lead: leading hind, then the + // diagonal pair, then the leading fore, then all four airborne. The beats + // CLUSTER into the first ~45% and leave a real float; even spacing is what + // made an earlier version sound like a waltz instead of a canter. + // LH 0 · RH+LF 0.22 · RF 0.44 · float 0.44-1.0 + { 0, 14418, 14418, 28836 }, + + // GALLOP — 4-beat rotary with a long suspension. The two HINDS drive first, + // then the forelegs catch the fall, then all four are airborne. Hinds before + // fores is exactly what separates a gallop from a fast walk. + // LH 0 · RH 0.10 · LF 0.21 · RF 0.31 · float 0.31-1.0 + { 0, 13763, 6554, 20315 } +}; + +// FLAM between the feet of a "simultaneous" pair, in control ticks (1.5kHz, so +// one tick is 0.67ms). Only trot and canter have coincident landings, and the +// second foot of each pair is nudged late by these amounts. +// +// Two identical clops fired on the same sample do not sound like two hooves — +// they sum into one louder clop, so a trot audibly halved in density compared +// with a walk. Real diagonal pairs land 10-30ms apart, and restoring that gap +// puts the missing events back. Given as a FIXED time rather than a fraction of +// the stride, because the flam of a real animal does not stretch with tempo. +static const int32_t kFlamTicks[4][kNumAgents] = { + // LH LF RH RF + { 0, 0, 0, 0 }, // Walk — already four distinct landings + { 0, 27, 0, 18 }, // Trot — LF 18ms after RH, RF 12ms after LH + { 0, 24, 0, 0 }, // Canter — LF lands just after RH in the pair + { 0, 0, 0, 0 } // Gallop — already four distinct landings +}; + +// Stride rate range per gait, Q8 Hz. A real horse doesn't just do the same +// tempo faster — each gait occupies its own band, and a gallop stride is only +// ~2.5x a walk stride even though it covers far more ground. +static const int32_t kGaitHzMin[4] = { 115, 205, 300, 380 }; // 0.45..1.5 Hz +static const int32_t kGaitHzMax[4] = { 205, 330, 420, 640 }; // 0.8 ..2.5 Hz + +// Per-horse speed offsets. Real animals travelling together never quite match +// pace, so the herd continuously slides in and out of step — that slow phasing +// between whole gaits is the sound the mode is after, and it is what the old +// per-LEG drift was trying (and failing) to do. +static const int32_t kHorseSpeed[kNumAgents] = { + 65536, // 1.000x + 63700, // 0.972x + 67600, // 1.031x + 62000 // 0.946x +}; + +void HorsesEngine::reset(uint32_t seed) +{ + rng_ = seed | 1u; + lastGait_ = 0xFF; + herdSync_ = 0; + for (int h = 0; h < kNumAgents; h++) hoofEnv_[h] = 0; + for (int h = 0; h < kNumAgents; h++) + { + // Stagger the herd's starting positions so they don't begin in unison. + stride_[h] = static_cast(h) * 0x30000000u; + speed_[h] = kHorseSpeed[h]; + for (int i = 0; i < kNumAgents; i++) + { + lastStep_[h][i] = 0xFF; + jitter_[h][i] = 0; + pending_[h][i] = 0; + } + } +} + +void __not_in_flash_func(HorsesEngine::tick)(const Ctrl &c, EngineOut &out) +{ + out.triggers = 0; + + // Pulse In = the herd startles into step: every horse resets to the top of + // its stride at once, so they land together and then drift apart again. + if (c.spook) + for (int h = 0; h < kNumAgents; h++) + { + stride_[h] = 0; + for (int i = 0; i < kNumAgents; i++) lastStep_[h][i] = 0xFF; + } + + // Knob Main picks the gait (quadrant) and the stride rate within it. + int gait = c.physics >> 14; // 0..3 + if (gait > 3) gait = 3; + + // Changing gait re-rolls the step tracking so the new gait starts clean. + if (gait != lastGait_) + { + lastGait_ = static_cast(gait); + for (int h = 0; h < kNumAgents; h++) + for (int i = 0; i < kNumAgents; i++) lastStep_[h][i] = 0xFF; + } + + // Each gait has its own stride-rate band; the knob sweeps within it. + int32_t within = (c.physics & 0x3FFF) << 2; // 0..65535 in-band + int32_t hz_q8 = kGaitHzMin[gait] + + mul_q16(within, kGaitHzMax[gait] - kGaitHzMin[gait]); + + // Pulse In 2 entrains the herd: every horse falls in step with the clock. + if (c.clock && c.clockPeriod > 0) + { + int32_t clockHz_q8 = (256 * kCtrlRate) / c.clockPeriod; + if (clockHz_q8 > 32) hz_q8 = clockHz_q8; + for (int h = 0; h < kNumAgents; h++) + { + stride_[h] = 0; + for (int i = 0; i < kNumAgents; i++) lastStep_[h][i] = 0xFF; + } + } + + uint32_t baseInc = hz_to_inc(hz_q8); + + // One horse per output channel. Each keeps ALL FOUR hooves — a horse with + // three legs is not a smaller herd — and runs its own stride clock, so the + // animals phase against each other while every individual gait stays intact. + for (int h = 0; h < kNumAgents; h++) + { + if (h >= c.population) { out.state[h] = 0; continue; } + + uint32_t inc = static_cast( + (static_cast(baseInc) * speed_[h]) >> 16); + stride_[h] += inc; + + for (int i = 0; i < kNumAgents; i++) + { + // Where this hoof sits within its horse's stride. Subtracting the + // offset means a hoof with offset 0.25 wraps a quarter of a stride + // AFTER the stride start — so the table reads as landing times. + uint32_t hoofPhase = stride_[h] - + (static_cast(kGaitOffset[gait][i]) << 16); + + // Chaos = per-hoof timing jitter, a real animal's unevenness. + // Applied as a phase offset rather than a rate change, so legs keep + // their gait relationship instead of drifting out of it. + if (c.chaos > 0) + { + jitter_[h][i] = slew(jitter_[h][i], + mul_q16(rand_bipolar(rng_), c.chaos), 5); + hoofPhase += static_cast(jitter_[h][i] << 10); + } + + // A hoof lands when its phase wraps past the top of the stride. + // Tracked in 16ths so the fine canter/gallop offsets resolve. + uint8_t step = static_cast(hoofPhase >> 28); // 0..15 + if (step == 0 && lastStep_[h][i] != 0) + { + int32_t flam = kFlamTicks[gait][i]; + if (flam == 0) + { + out.triggers |= (1 << h); + // Tell the voice WHICH hoof this was, so it plays that + // hoof's own sound — hinds lower and heavier than fores. + out.member[h] = static_cast(i); + } + else + { + // Second foot of a pair: hold it back a few ticks so the + // two land as two audible events rather than one loud one. + pending_[h][i] = static_cast(flam); + } + } + lastStep_[h][i] = step; + + // Release any hoof whose flam delay has run out. + if (pending_[h][i] > 0 && --pending_[h][i] == 0) + { + out.triggers |= (1 << h); + out.member[h] = static_cast(i); + } + } + + // State CV: this horse's FOOTFALL ACTIVITY, up on each hoof landing and + // decaying between. + // + // It used to be the raw stride phase, a sawtooth — every other engine + // puts a level here, so a patch reading CV 1 as modulation depth got an + // LFO from this one mode. The stride ramp is genuinely useful, but it is + // not the same KIND of signal, and consistency across the six modes is + // worth more than one mode's extra trick. + if (out.triggers & (1 << h)) hoofEnv_[h] = kQ16One; + else hoofEnv_[h] = fast_exp_decay(hoofEnv_[h], 5); + out.state[h] = hoofEnv_[h]; + } + + // Global: HERD SYNC — how closely the animals are in step, 65536 = moving as + // one, 0 = evenly scattered around the stride. + // + // This used to be the lead horse's raw stride phase, which is a sawtooth: a + // ramp on a CV out that carries a LEVEL in every other mode, and the reason + // CV 2 was seen ramping. The stride LFO is still available per-animal on + // state[], where it is deliberate and useful. + // + // Same order-parameter idea Frogs uses, on the same fast_sin LUT: sum the + // unit vectors of each stride phase and take the length of the mean. Four + // agents at the control rate, so the cost is negligible. + { + int32_t sumSin = 0, sumCos = 0; + int n = 0; + for (int h = 0; h < c.population && h < kNumAgents; h++) + { + sumSin += fast_sin(stride_[h]); + sumCos += fast_sin(stride_[h] + 0x40000000u); // +90 degrees + n++; + } + int32_t sync = kQ16One; + if (n > 1) + { + int32_t as = (sumSin > 0) ? sumSin : -sumSin; + int32_t ac = (sumCos > 0) ? sumCos : -sumCos; + int32_t hi = (as > ac) ? as : ac; + int32_t lo = (as > ac) ? ac : as; + // Octagonal |v| ~ max + 3/8*min, avoiding a sqrt. fast_sin is Q15 + // (+/-32767), so the mean is Q15 and one shift takes it to Q16. + int32_t mag = hi + ((lo * 3) >> 3); + sync = (mag / n) << 1; + if (sync > kQ16One) sync = kQ16One; + } + // Smoothed: the raw figure jitters as individual hooves land, and this is + // a CV describing the herd rather than a per-step readout. + herdSync_ = slew(herdSync_, sync, 4); + out.global = herdSync_; + } +} + +// =========================================================================== +// Mode 2 — Geese: stochastic contagion +// =========================================================================== + +// Refractory period after a honk: no re-fire for ~170ms. Without this the mutual +// excitation would latch into a continuous tone instead of a cascade. It also +// sets the hard ceiling on how fast one bird can honk — and since three birds +// share each output channel, that ceiling matters three times over. +static constexpr uint16_t kGooseRefractory = kCtrlRate / 6; // ~250 ticks + +void GeeseEngine::reset(uint32_t seed) +{ + rng_ = seed | 1u; + for (int i = 0; i < kSwarmSize; i++) { excite_[i] = 0; refractory_[i] = 0; } +} + +void __not_in_flash_func(GeeseEngine::tick)(const Ctrl &c, EngineOut &out) +{ + out.triggers = 0; + + // The flock is kSwarmSize birds folded onto kNumAgents outputs: with the + // population knob at 4, all 12 are awake and each output channel carries 3 + // of them. Four birds never sounded like a flock; twelve do. + int flock = c.population * kSwarmPerAgent; + + // Pulse In = spook the flock: a huge excitation spike into every bird at + // once, guaranteeing a cascade. + if (c.spook) + for (int i = 0; i < flock; i++) excite_[i] = kQ16One; + + // Pulse In 2 = the clock nudges the whole flock, so honks lean toward the + // beat without being locked to it. + if (c.clock) + for (int i = 0; i < flock; i++) + { + excite_[i] += kQ16One / 3; + if (excite_[i] > kQ16One) excite_[i] = kQ16One; + } + + // Baseline spontaneous spark chance per tick, scaled up as the flock shrinks. + // A cascade needs someone to honk first; with a full flock a spark somewhere + // is quick, but with three birds the wait for ignition would stretch to tens + // of seconds and the mode would read as broken. Chaos raises it further. + int32_t spark = (2 + (c.chaos >> 12)) * (kNumAgents + 1 - c.population); + + // Geese are the opposite of shy: a loud room agitates them, raising the + // chance any bird sets the flock off. The card answers back to the patch. + // + // 48 against a baseline of 2-18 at full population: a loud patch multiplies + // the spontaneous rate several times over, and since every spark can ignite + // a cascade the audible effect is larger than the number suggests. Like the + // Cicadas figure this had never actually been heard - nothing published the + // envelope across the cores until now - so it is a first tuning, not a + // retune. + if (c.loudness > 0) spark += mul_q16(c.loudness, 48); + + // Contagion strength from Knob Main. Mildly shaped (x^1.5-ish via a blend of + // linear and squared) so the knob keeps resolution down low without going + // dead across the middle of its travel. + int32_t contagion = (c.physics + mul_q16(c.physics, c.physics)) >> 1; + + // How much one honk raises every other bird's excitement. Small, because in + // a flock of twelve each honk lands on eleven neighbours — the cascade comes + // from many birds accumulating, not from any single honk being decisive. + constexpr int32_t nudge = kQ16One / 16; + + uint32_t fired = 0; + for (int i = 0; i < flock; i++) + { + if (refractory_[i] > 0) + { + refractory_[i]--; + } + else + { + // Probability = baseline spark + whatever excitation the flock has + // pushed into this bird. The >>6 is what keeps the contagion knob + // GRADUAL: at a smaller shift, any working contagion drove every + // bird straight to its refractory ceiling and the knob became a + // switch between silence and a solid 16Hz buzz. + int32_t p = spark + (mul_q16(excite_[i], contagion) >> 6); + if (rand_q16(rng_) < p) + { + fired |= (1u << i); + refractory_[i] = kGooseRefractory; + } + } + } + + // A bird that honked excites all the *others* — never itself, or it would + // just retrigger the moment its refractory period ended. + if (fired) + { + for (int i = 0; i < flock; i++) + { + if (!(fired & (1u << i))) continue; + for (int j = 0; j < flock; j++) + { + if (j == i) continue; + // A partial nudge, not a slam to full scale: excitement has to + // ACCUMULATE across several honks to tip the flock over. That + // build-up is what makes the cascade audible as a cascade. + excite_[j] += nudge; + if (excite_[j] > kQ16One) excite_[j] = kQ16One; + } + } + } + + // Fold the flock down onto the output channels: a channel fires if any of + // its birds did, and carries the mean excitation of its group as state CV. + out.triggers = 0; + for (int a = 0; a < kNumAgents; a++) + { + if (a >= c.population) { out.state[a] = 0; continue; } + int32_t groupExcite = 0; + for (int k = 0; k < kSwarmPerAgent; k++) + { + int i = a * kSwarmPerAgent + k; + if (fired & (1u << i)) out.triggers |= (1 << a); + groupExcite += excite_[i]; + } + // Left as a real divide: it runs 4 times per tick, not 12, and the + // exact reciprocal for this range needs a 64-bit intermediate, which + // would cost more than the divide it replaces. + out.state[a] = groupExcite / kSwarmPerAgent; + } + + // Excitation decays over roughly a second — slow enough that honks from + // several birds ACCUMULATE into a cascade, fast enough that the flock + // settles back to quiet between outbursts. (At the old faster decay the + // excitation drained before it could ever build, so the contagion knob had + // almost no effect across its range.) + int32_t sum = 0; + for (int i = 0; i < flock; i++) + { + excite_[i] = fast_exp_decay(excite_[i], 9); + sum += excite_[i]; + } + out.global = (flock > 0) ? (sum / flock) : 0; // mean flock agitation +} + +// =========================================================================== +// Mode 3 — Frogs: Kuramoto coupled oscillators +// =========================================================================== +// +// dTheta_i/dt = omega_i + (K/N) * sum_j sin(Theta_j - Theta_i) +// +// Phases live in uint32_t so the wrap is free and sin() is a table lookup. + +void FrogsEngine::reset(uint32_t seed) +{ + rng_ = seed | 1u; + clockPhase_ = 0; + for (int i = 0; i < kNumAgents; i++) croak_[i] = 0; + for (int i = 0; i < kSwarmSize; i++) + { + phase_[i] = xorshift32(rng_); + natural_[i] = 0; + } +} + +void __not_in_flash_func(FrogsEngine::tick)(const Ctrl &c, EngineOut &out) +{ + out.triggers = 0; + + // Pulse In = splash: scramble every phase. Sync shatters, then rebuilds at + // whatever rate K allows — the most satisfying gesture on the card. + if (c.spook) + for (int i = 0; i < kSwarmSize; i++) phase_[i] = xorshift32(rng_); + + // Base chorus rate. The knob here is coupling, so tempo comes from a fixed + // base plus the chaos spread. + constexpr int32_t kBaseHz_q8 = 400; // ~1.56 Hz + int32_t baseHz_q8 = kBaseHz_q8; + + // Pulse In 2 entrains the chorus to an external clock. This is the most + // musically useful thing on the card: the frogs pull toward YOUR tempo with + // exactly the coupling strength Knob Main is set to, so you can dial + // anywhere from locked-to-the-clock to completely indifferent to it. + if (c.clockPeriod > 0) + { + int32_t clockHz_q8 = (256 * kCtrlRate) / c.clockPeriod; + if (clockHz_q8 > 32 && clockHz_q8 < 8192) baseHz_q8 = clockHz_q8; + } + + int32_t baseInc = static_cast(hz_to_inc(baseHz_q8)); + + int32_t K; + // Knob Main INVERSELY controls coupling: CCW = strong K (locked chorus), + // CW = weak K (every frog for itself). + // + // GEOMETRIC, not cubed. Simulating the order parameter against K shows the + // pond is fully locked above K~0.25 and fully scattered below K~0.03: the + // entire audible transition lives in less than one octave of K, and + // everything outside it sounds the same. + // + // The cube that used to be here was reasoned backwards. It claimed to push + // the transition into the middle of the sweep; it actually spent HALF the + // travel above K=0.125 - all of it locked - and crammed the interesting part + // between 0.5 and 0.75. That is why the knob felt uniform: most of it was. + // + // A geometric sweep from 0.40 down to 0.004 puts equal knob travel into equal + // RATIOS of K, so the knee lands mid-sweep and stays playable: + // + // knob 0.0 0.2 0.4 0.6 0.8 1.0 + // K 0.400 0.159 0.063 0.025 0.010 0.004 + // order 1.00 0.99 0.54 0.26 0.18 0.15 + // + // Done as a 9-entry table with linear interpolation between points: this is + // the 1.5kHz control tick, and an exp() here would be both a float and a libm + // call. The table is Q16 K values on a geometric grid. + static const int32_t kCouple[9] = { + 26214, 14741, 8290, 4662, 2621, 1474, 829, 466, 262 + }; + { + int32_t x = c.physics; + if (x < 0) x = 0; + if (x > kQ16One) x = kQ16One; + int32_t idx = (x * 8) >> 16; // which segment, 0..8 + if (idx > 7) idx = 7; + int32_t frac = (x * 8) - (idx << 16); // Q16 position within it + K = kCouple[idx] + mul_q16(kCouple[idx + 1] - kCouple[idx], frac); + } + + int n = c.population * kSwarmPerAgent; + if (n < 1) n = 1; + + // Chaos spreads the natural frequencies apart, making sync harder to reach. + // Twelve fixed detunes, deliberately uneven so the pond has no symmetry. + static const int32_t kDetune[kSwarmSize] = { + 0, 3000, -2200, 5000, -4100, 1800, + 6200, -3400, 900, -5600, 4400, -1200 + }; + for (int i = 0; i < n; i++) + natural_[i] = baseInc + ((baseInc >> 4) * mul_q16(kDetune[i], c.chaos) >> 12); + + // The external clock joins the pond as a phantom frog that never listens to + // anyone. Matching its RATE alone would leave the chorus running at the right + // tempo but landing anywhere in the bar; coupling to its PHASE is what makes + // the frogs actually arrive on the beat. Its pull is the same K as everyone + // else's, so Knob Main dials the whole range from locked-to-clock to + // completely indifferent. + bool haveClock = (c.clockPeriod > 0); + if (haveClock) + { + clockPhase_ += static_cast(baseInc); + if (c.clock) clockPhase_ = 0; // a pulse re-anchors the downbeat + } + + // MEAN FIELD. The textbook Kuramoto sum is O(n^2) — 132 sine lookups for a + // pond of twelve — but the angle-difference identity + // sin(Oj - Oi) = sin(Oj)cos(Oi) - cos(Oj)sin(Oi) + // lets the sum over j factor into two running totals computed ONCE: + // sum_j sin(Oj - Oi) = cos(Oi)*sum(sin Oj) - sin(Oi)*sum(cos Oj) + // That makes the whole thing O(n) and numerically identical (verified to + // 0.006% against the direct sum), which is what lets the pond hold twelve. + int32_t sumSin = 0, sumCos = 0; + for (int i = 0; i < n; i++) + { + sumSin += fast_sin(phase_[i]); + sumCos += fast_sin(phase_[i] + 0x40000000u); // cos = sin(x + 90deg) + } + int partners = n; + if (haveClock) + { + sumSin += fast_sin(clockPhase_); + sumCos += fast_sin(clockPhase_ + 0x40000000u); + partners++; + } + + uint32_t fired = 0; + for (int i = 0; i < n; i++) + { + // Coupling term: pull toward the pond's mean phase. + // sin(theta_j - theta_i) is positive when j is ahead, so a lagging frog + // speeds up and a leading one slows down — that is the whole model. + int32_t si = fast_sin(phase_[i]); + int32_t ci = fast_sin(phase_[i] + 0x40000000u); + // The sums include this frog; subtract its own terms so it does not + // couple to itself. + int32_t coupling = + (((sumSin - si) * ci) - ((sumCos - ci) * si)) >> 15; + if (partners > 1) coupling /= (partners - 1); + + // Modulate this frog's RATE by up to +/-100% at full K. That much + // authority is what actually drags the chorus into lock; the old + // version could only bend the rate ~2% and never synchronised. + int32_t adjust = static_cast( + (static_cast(natural_[i]) * mul_q15(coupling, K >> 1)) >> 16); + + uint32_t before = phase_[i]; + phase_[i] += static_cast(natural_[i] + adjust); + + // Wrap = one full croak cycle completed. + if (phase_[i] < before) fired |= (1u << i); + } + + // Fold the pond onto the outputs: a channel croaks if any of its frogs did, + // and carries that group's lead frog's phase as state CV. + for (int a = 0; a < kNumAgents; a++) + { + if (a >= c.population) { out.state[a] = 0; croak_[a] = 0; continue; } + bool any = false; + for (int k = 0; k < kSwarmPerAgent; k++) + if (fired & (1u << (a * kSwarmPerAgent + k))) + { out.triggers |= (1 << a); any = true; } + + // CROAK envelope, not the lead frog's phase. The phase was a sawtooth + // that told you nothing about the pond; this rises when the group calls + // and falls between, so the CV describes how vocal that group is - the + // same KIND of quantity every other engine puts in state[]. + if (any) croak_[a] = kQ16One; + else croak_[a] = fast_exp_decay(croak_[a], 5); + out.state[a] = croak_[a]; + } + + // Global = the Kuramoto order parameter, which the mean-field sums give us + // for free: the length of the mean phase vector, 65536 = perfectly locked, + // 0 = evenly scattered. Uses the octagonal |v| ~ max + 3/8*min approximation + // rather than a sqrt. This is the most informative CV on the card. + int32_t as = (sumSin > 0) ? sumSin : -sumSin; + int32_t ac = (sumCos > 0) ? sumCos : -sumCos; + int32_t hi = (as > ac) ? as : ac; + int32_t lo = (as > ac) ? ac : as; + int32_t mag = hi + ((lo * 3) >> 3); + int32_t coh = (partners > 0) ? (mag * 2 / partners) : 0; + out.global = (coh > kQ16One) ? kQ16One : coh; +} + +// =========================================================================== +// Mode 4 — Rain: leaky integrate-and-fire +// =========================================================================== + +// Staggered thresholds. If all four matched, identical noise statistics would +// make them fire in lockstep; the spread is what makes it a drum circle. +static const int32_t kRainThreshold[kNumAgents] = { + kQ16One, (kQ16One * 115) / 100, (kQ16One * 88) / 100, (kQ16One * 103) / 100 +}; +// ...and staggered leak offsets, added to the Knob Y leak rate (higher shift = +// slower drain, so a bucket that leaks less fills sooner). +static const int8_t kRainLeakBias[kNumAgents] = { 0, -1, 1, 0 }; + +// When a bucket overflows it SPLASHES into its neighbours. This is what makes +// Rain more than a Poisson process with extra steps: one drip loads the buckets +// either side, so overflows pull each other along into the rushing-and-dragging +// clusters you hear off a real gutter, then fall apart again. +// +// The splash runs DOWNSTREAM only (i -> i+1), like water finding its way down a +// leaf. A symmetric splash locked all four buckets into firing together within +// seconds, which flattened the mode into a single voice; a one-way cascade +// keeps them staggered while still passing energy along. +static constexpr int32_t kRainSplash = kQ16One / 12; + +// Smallest downpour a barely-open knob still admits, Q16. Deliberately tiny: at +// knob zero the mode is silent (no rain is the right answer for no knob), and +// this only stops the first few percent of travel from being a dead band. +static constexpr int32_t kRainFloor = 9000; + +// Inflow gain, Q16, ramped across the sweep rather than fixed. A fixed 0.8 made +// the first audible drips arrive faster than one a second, which is not what the +// bottom of a rain knob should do -- you want to hear individual drips land and +// count them. Ramping 0.4 -> 0.8 keeps the onset sparse (~1 drip every 2.5s when +// they first appear) without capping the torrent at the top, which simply +// lowering the gain would have done. +static constexpr int32_t kRainGainMin = (kQ16One * 40) / 100; +static constexpr int32_t kRainGainSpan = (kQ16One * 40) / 100; + +void RainEngine::reset(uint32_t seed) +{ + rng_ = seed | 1u; + for (int i = 0; i < kNumAgents; i++) level_[i] = 0; +} + +void __not_in_flash_func(RainEngine::tick)(const Ctrl &c, EngineOut &out) +{ + out.triggers = 0; + + // Pulse In = wind gust: dump a big random slug into every bucket, tipping + // several over the edge at once. + if (c.spook) + for (int i = 0; i < kNumAgents; i++) + level_[i] += (kQ16One >> 1) + (rand_q16(rng_) >> 1); + + // Downpour: how hard it's raining into the buckets. + // + // This used to be quadratic-ish, which left the first 40% of the knob + // completely silent: below a certain inflow the buckets leak as fast as they + // fill, so nothing ever reaches threshold, and then the mode snapped straight + // to ~3 drips/sec the moment it crossed. Half the travel did nothing and the + // onset was a step rather than a fade. + // + // Square-rooted instead, so the bottom of the knob moves fastest, with a + // small floor so a barely-open knob still admits some water. + int32_t x = c.physics; + int32_t downpour = kRainFloor + mul_q16(kQ16One - kRainFloor, fast_sqrt_q16(x)); + if (downpour > kQ16One) downpour = kQ16One; + + // Gain rises with the knob so the bottom stays sparse and the top stays full. + int32_t rainGain = kRainGainMin + mul_q16(kRainGainSpan, x); + + // Pulse In 2 entrains the rain: each clock pulse tops every bucket up a + // little, so buckets nearest their threshold tip on the beat while the rest + // keep running free. The rhythm leans on the clock without being quantised + // to it — the "dragging" stays. + if (c.clock) + for (int i = 0; i < kNumAgents; i++) + level_[i] += kQ16One / 6; + + // Knob Y sets the LEAK rate rather than noise variance. That is the control + // that actually shapes this model: a slow leak lets buckets accumulate into + // heavy irregular drips, a fast leak keeps only the strongest bursts alive. + // (Chaos 0 = shift 10, slow drain; chaos 1 = shift 7, fast drain.) + int32_t leakBase = 10 - ((c.chaos * 3) >> 16); // /kQ16One + + int32_t splash[kNumAgents] = { 0, 0, 0, 0 }; + int32_t sum = 0; + + for (int i = 0; i < kNumAgents; i++) + { + if (i >= c.population) { out.state[i] = 0; continue; } + + // Noisy inflow, heavy-tailed: cubing the random makes most drops tiny and + // a few of them large. That tail is what lets a weak downpour still tip a + // bucket occasionally instead of settling at an equilibrium below the + // threshold and firing literally never — a uniform drop cannot do it, + // which is what made the bottom of the knob silent. It is also closer to + // real dripping, where water gathers for a while and then lets go. + // + // rainGain and the >>4 set the ceiling: full downpour lands around 18 + // drips/sec per bucket, a dense torrent that is still a rhythm rather than + // a wash. Written as Q16 multiplies, not `* 4 / 5` -- the M0+ has no + // divider and the literal division compiled to an __aeabi_idiv call in + // the inner loop, four times per control tick. + int32_t r = rand_q16(rng_); + int32_t drop = mul_q16(mul_q16(mul_q16(mul_q16(r, r), r), downpour), + rainGain) >> 4; + if (drop < 0) drop = 0; + + level_[i] += drop; + + int32_t shift = leakBase + kRainLeakBias[i]; + if (shift < 5) shift = 5; + if (shift > 12) shift = 12; + level_[i] = fast_exp_decay(level_[i], static_cast(shift)); + + if (level_[i] >= kRainThreshold[i]) + { + out.triggers |= (1 << i); + level_[i] = 0; + + // Splash downstream into the next bucket, collected and applied after + // the loop so every bucket sees the same instant rather than the + // low-numbered ones getting a head start. The last bucket spills + // back to the first, so the cascade wraps around the leaf. + int next = (i + 1 < c.population) ? (i + 1) : 0; + if (next != i) splash[next] += kRainSplash; + } + + // State CV = the bucket filling and emptying: a natural ramp LFO. + out.state[i] = (level_[i] > kQ16One) ? kQ16One : level_[i]; + sum += out.state[i]; + } + + for (int i = 0; i < c.population; i++) level_[i] += splash[i]; + + out.global = sum >> 2; +} + +// =========================================================================== +// Mode 5 — Meteors: inhomogeneous Poisson process +// =========================================================================== + +// Firing-probability gain, Q16, ramped 0.2 -> 1.0 across Knob Main. The CCW end +// should be a nearly empty sky you wait on, not a patter. +static constexpr int32_t kMeteorGainMin = kQ16One / 5; +static constexpr int32_t kMeteorGainSpan = kQ16One - kQ16One / 5; + +void MeteorsEngine::reset(uint32_t seed) +{ + rng_ = seed | 1u; + density_ = 0; + target_ = 0; + untilNewTarget_ = 1; +} + +void __not_in_flash_func(MeteorsEngine::tick)(const Ctrl &c, EngineOut &out) +{ + out.triggers = 0; + + // The hidden debris field: a slow random walk, re-aimed every 1-4 seconds + // and slewed toward smoothly. This is what makes activity arrive in waves + // rather than at a constant rate. + if (--untilNewTarget_ == 0) + { + target_ = rand_q16(rng_); + untilNewTarget_ = static_cast( + kCtrlRate + (xorshift32(rng_) % (3u * kCtrlRate))); + } + density_ = slew(density_, target_, 9); + + // Pulse In = bolide: slam the density to maximum for an immediate burst. + // It then slews back down to the underlying walk on its own. + if (c.spook) density_ = kQ16One; + + // Pulse In 2 = a smaller swell on each clock pulse, so the debris field + // breathes with an external tempo instead of wandering entirely free. + if (c.clock) + { + density_ += kQ16One / 4; + if (density_ > kQ16One) density_ = kQ16One; + } + + // Knob Main sets both the floor and how much the walk is allowed to swing. + // Low: rare isolated hits. Mid: long silences swelling into dense waves. + // High: locked-high barrage. + int32_t depth, floorLevel; + if (c.physics < kQ16One / 2) + { + // Lower half: swing grows from nothing, floor stays at zero. + depth = c.physics * 2; + floorLevel = 0; + } + else + { + // Upper half: swing shrinks as the floor rises to a constant barrage. + int32_t t = (c.physics - kQ16One / 2) * 2; + depth = kQ16One - t; + floorLevel = t; + } + + int32_t effective = floorLevel + mul_q16(density_, depth); + + // Convert the 0..1 density into a per-tick firing probability. Squared for + // a natural swell, then shifted so even a locked-high field tops out around + // 12 strikes/sec per voice — a heavy barrage that still reads as discrete + // meteors rather than a continuous hiss. + // The extra >>1 accounts for the swarm: kSwarmPerAgent members now roll + // against this probability for every output channel, so without it the + // perceived rate would triple against the tuning done at 4 agents. + // Gain ramps across the knob rather than being constant, so the CCW end can + // be genuinely sparse -- isolated strikes you wait for -- without capping the + // barrage at the CW end. A fixed gain gave ~0.5 strikes/sec at zero, which is + // a steady patter rather than the empty sky the bottom of the knob implies. + // mul_q16 (64-bit intermediate) is required here, not an optimisation target: + // these are full-scale Q16 values, and 65536*65536 is exactly 2^31, which + // overflows a signed 32-bit multiply. Unlike droneRender -- where the inputs + // are 12-bit audio and 32 bits is provably enough -- the library call stays. + // It costs six __aeabi_lmul per control tick, not per sample. + int32_t meteorGain = kMeteorGainMin + mul_q16(kMeteorGainSpan, c.physics); + int32_t p = mul_q16(mul_q16(effective, effective), meteorGain) >> 8; + if (c.chaos > 0) p += mul_q16(mul_q16(rand_q16(rng_), c.chaos), meteorGain) >> 11; + + // Like Geese, Meteors runs a swarm folded onto the four outputs. Individual + // meteors are independent, so a channel strikes if any of its members does — + // which is what gives a dense field its overlapping, uncountable texture. + for (int a = 0; a < kNumAgents; a++) + { + if (a >= c.population) { out.state[a] = 0; continue; } + for (int k = 0; k < kSwarmPerAgent; k++) + if (rand_q16(rng_) < p) { out.triggers |= (1 << a); break; } + out.state[a] = effective; + } + out.global = effective; +} + +// =========================================================================== +// Mode 6 — Cicadas: density-dependent chorus +// =========================================================================== +// +// The other modes couple on phase (Frogs) or on excitation events (Geese). +// Cicadas couple on AMPLITUDE: each insect calls faster when the field around +// it is already loud, and the field is just the sum of everyone calling. That +// is a positive feedback loop, so on its own it would saturate — fatigue is +// what turns it into a wave. Insects that have been calling hard get tired, +// drop out, the field quietens, they recover, and it swells again. + +void CicadasEngine::reset(uint32_t seed) +{ + rng_ = seed | 1u; + field_ = 0; + startle_ = 0; // or the field opens silent after a mode change + for (int p = 0; p < kPatches; p++) patchField_[p] = 0; + for (int i = 0; i < kSwarmSize; i++) + { + phase_[i] = xorshift32(rng_); + fatigue_[i] = 0; + // Every insect gets its own constitution: how quickly it tires and how + // long it needs to recover. Fixed per insect rather than re-rolled, so + // the field has a stable cast of individuals — some that keep going and + // some that drop out early — instead of twelve identical machines. + recover_[i] = static_cast(11 + (xorshift32(rng_) % 3)); // 11..13 + stamina_[i] = static_cast(kQ16One / 2 + + (xorshift32(rng_) % kQ16One)); // 0.5..1.5x + // Spread the natural rates over roughly 0.65x..1.55x. Wide, because a + // narrow spread still entrains: the shared field steers everyone the + // same way, and only a real difference in rate keeps them apart. + tempo_[i] = static_cast((kQ16One * 42) / 64 + + (xorshift32(rng_) % ((kQ16One * 58) / 64))); + } +} + +void __not_in_flash_func(CicadasEngine::tick)(const Ctrl &c, EngineOut &out) +{ + out.triggers = 0; + + int swarm = c.population * kSwarmPerAgent; + + // Pulse In = a footstep in the grass: the whole field falls silent at once, + // then creeps back in as the insects regain their nerve. The inverse of the + // other modes' spooks, and the thing every cicada field actually does. + // + // This used to slam fatigue_ to maximum, which was not nearly quiet enough: + // a fully fatigued insect still calls at a QUARTER rate, because fatigue is + // meant to thin the field during a swell rather than switch it off. Twelve + // insects at a quarter rate is still a chorus, so the footstep read as a dip. + // + // A startle is its own state, and it silences outright. + if (c.spook) startle_ = kQ16One; + + // Nerve returns. Slower than the fatigue recovery so the hush is clearly a + // separate gesture from a swell trough, and slow enough to hear the field + // creep back in rather than snap on. + startle_ = fast_exp_decay(startle_, 12); + + // Pulse In 2 nudges the field louder on each beat, so the swells lean + // toward an external tempo. + if (c.clock) + for (int p = 0; p < kPatches; p++) + { + patchField_[p] += kQ16One / 4; + if (patchField_[p] > kQ16One) patchField_[p] = kQ16One; + } + + // Cicadas are the shyest thing on the card: a loud room shuts them up. + // Audio In 1's envelope goes straight into fatigue, so the field thins as + // the rest of the patch gets busy and fills back in when it quietens. + // A loud room shuts the cicadas up. This scales the call rate DIRECTLY rather + // than feeding fatigue_, which is where two earlier attempts went wrong. + // + // Fatigue is the wrong lever for it. It is driven far harder by calling + // (0.25 per call) and by ambient field drive (~0.0017/tick) than any loudness + // term can be without dominating, AND it caps out: `tired` bottoms at 0.25, + // so even a saturated fatigue only quarters the rate. Every divisor is + // therefore either inaudible or pinned - /40 pinned it within a quarter + // second, /4000 sat an order of magnitude below the ambient drive and was + // inaudible. There was no good value between, because the mechanism is a + // cliff rather than a control. + // + // Scaled here instead, alongside the startle, where it is proportional and + // can take the field all the way down. Half authority: a full-scale input + // halves the call rate, which recedes clearly without silencing a mode whose + // whole character is the drone. + int32_t hush = kQ16One; + if (c.loudness > 0) hush = kQ16One - (c.loudness >> 1); + + // Knob Main = COUPLING DEPTH, and it scales both halves of the feedback loop + // at once: how much the field speeds insects up, and how much being in a + // loud field tires them out. Scaling both is what makes the knob mean + // something — with fatigue fixed, the field surged just as hard at zero + // coupling and the control did nothing. + // 0.0 = independent insects, a steady even drone + // 1.0 = the field drives itself into surges that collapse into silence + int32_t coupling = c.physics; + + // Base call rate, sped up by however loud the field already is. This is the + // positive half of the loop. + // + // The base rate RISES with coupling to compensate for the fatigue that the + // same knob introduces. Without this the mode simply got quieter as it was + // turned up: peak activity fell from 7 calls/sec to 2, so a surging field + // sounded weaker than a steady one. Coupling should redistribute energy + // into waves, not remove it — the peaks stay loud, the troughs go quiet. + constexpr int32_t kBaseHz_q8 = 600; // ~2.3 Hz + int32_t base = kBaseHz_q8 + mul_q16(kBaseHz_q8 * 5 / 4, coupling); + // Mean across patches, used only where the whole field matters. + int32_t globalField = 0; + for (int p = 0; p < kPatches; p++) globalField += patchField_[p]; + globalField /= kPatches; + + int32_t called[kPatches] = { 0, 0, 0, 0 }; + uint32_t fired = 0; + int patch = 0, patchCount = -1; + for (int i = 0; i < swarm; i++) + { + // An insect mostly hears its own patch, and only faintly the rest of + // the field. That weak coupling is what lets patches swell out of step + // instead of the whole population charging and discharging as one. + // + // Walked rather than divided: the M0+ has no divider, and `i / kPerPatch` + // here cost a libgcc call on every one of the twelve iterations. + if (++patchCount >= kPerPatch) { patchCount = 0; patch++; } + int32_t drive = (patchField_[patch] * 3 + globalField) >> 2; + + int32_t rateScale = kQ16One + mul_q16(mul_q16(drive, coupling), kQ16One) * 6; + int32_t hz_q8 = mul_q16(base << 4, rateScale) >> 4; + + // Fatigue slows an insect right down rather than silencing it outright, + // so the field thins out gradually instead of switching off. + int32_t tired = kQ16One - (fatigue_[i] - (fatigue_[i] >> 2)); // *3/4 + // A startle multiplies on top, and unlike fatigue it goes all the way to + // zero - a footstep stops the field, it does not merely tire it. + if (startle_ > 0) tired = mul_q16(tired, kQ16One - startle_); + // Audio In 1's loudness does the same, gently and continuously. + if (hush < kQ16One) tired = mul_q16(tired, hush); + // Its own natural rate, then scaled by how tired it is. The per-insect + // tempo is what stops the twelve locking into unison. + int32_t myHz = mul_q16(mul_q16(hz_q8, tempo_[i]), tired); + + // Chaos spreads the natural rates so the swarm never sounds like one + // insect multiplied. + if (c.chaos > 0) + { + int32_t spread = mul_q16(rand_bipolar(rng_) << 1, c.chaos); + myHz += (myHz >> 3) * spread >> 15; + } + if (myHz < 16) myHz = 16; + + uint32_t inc = hz_to_inc(myHz); + + uint32_t before = phase_[i]; + phase_[i] += inc; + + if (phase_[i] < before) // wrapped: this insect called + { + called[patch]++; + fired |= (1u << i); + // Calling is work — and some insects tire faster than others. + fatigue_[i] += mul_q16(mul_q16(kQ16One / 2, coupling), stamina_[i]); + if (fatigue_[i] > kQ16One) fatigue_[i] = kQ16One; + } + + // The negative half of the loop: simply BEING in a loud patch is + // tiring, whether or not this insect called. Without this the swarm + // spread itself evenly and never surged — collective exhaustion is what + // turns feedback into a wave rather than a runaway. + fatigue_[i] += mul_q16(mul_q16(drive, coupling), kQ16One / 150); + if (fatigue_[i] > kQ16One) fatigue_[i] = kQ16One; + + // Recovery is slow — slower than the build-up, which is what sets the + // period of the swell. Per-insect, so they do not all come back at once. + fatigue_[i] = fast_exp_decay(fatigue_[i], recover_[i]); + } + + // Each patch's field is the perceived loudness of ITS insects: it rises + // quickly as they join and falls away slowly, so a patch hears its own + // recent past rather than only the current instant. + int32_t sumField = 0; + int activePatches = 0; + for (int p = 0; p < kPatches; p++) + { + if (p * kPerPatch >= swarm) { patchField_[p] = 0; continue; } + int32_t instant = called[p] * kQ16One * 8 / kPerPatch; + if (instant > kQ16One) instant = kQ16One; + patchField_[p] = (instant > patchField_[p]) + ? slew(patchField_[p], instant, 4) + : slew(patchField_[p], instant, 8); + sumField += patchField_[p]; + activePatches++; + } + field_ = activePatches ? (sumField / activePatches) : 0; + + // Fold the swarm onto the outputs: a channel fires if any of its insects + // called, and carries its group's mean fatigue as state CV. + for (int a = 0; a < kNumAgents; a++) + { + if (a >= c.population) { out.state[a] = 0; continue; } + int32_t groupFatigue = 0; + for (int k = 0; k < kSwarmPerAgent; k++) + { + int i = a * kSwarmPerAgent + k; + if (fired & (1u << i)) out.triggers |= (1 << a); + groupFatigue += fatigue_[i]; + } + out.state[a] = groupFatigue / kSwarmPerAgent; + } + + out.global = field_; +} + +} // namespace bio diff --git a/releases/62_BioMimicry/engines.h b/releases/62_BioMimicry/engines.h new file mode 100644 index 000000000..10f5d15b9 --- /dev/null +++ b/releases/62_BioMimicry/engines.h @@ -0,0 +1,154 @@ +// engines.h — the five BioMimicry physics engines. +// +// Each is a self-contained model with no allocation and no shared state; the +// card owns one instance of each and points at the active one. + +#pragma once +#include "biomimicry.h" + +namespace bio { + +/// Mode 1 — one stride clock driving four hooves at real equine phase offsets. +/// Knob Main picks the gait (walk / trot / canter / gallop) and the stride rate +/// within that gait's own band. Chaos jitters each hoof's timing without +/// breaking the gait's phase relationships. +class HorsesEngine : public Engine +{ +public: + void reset(uint32_t seed) override; + void tick(const Ctrl &c, EngineOut &out) override; +private: + // Population is a HERD, not a leg count: each horse keeps all four hooves and + // gets its own stride clock, drifting slightly against the others the way + // animals travelling together never quite match step. Amputating hooves as + // the knob came down was the old behaviour and it only ever made one lame + // horse — turning the knob up added nothing at all. + uint32_t stride_[kNumAgents]; // one stride clock per horse + int32_t speed_[kNumAgents]; // per-horse rate offset, Q16 around 1.0 + // How closely the herd is in step, Q16, smoothed. global used to be the lead + // horse's raw stride phase - a ramp on a CV out that every other mode uses + // for a level. + int32_t herdSync_; + // Per-horse footfall envelope, Q16: up when that animal plants a hoof, down + // between. state[] used to be the raw stride PHASE, a sawtooth on a CV out + // that carries a level in every other mode. + int32_t hoofEnv_[kNumAgents]; + int32_t jitter_[kNumAgents][kNumAgents]; // [horse][hoof] timing offset + uint8_t lastStep_[kNumAgents][kNumAgents]; + // Countdown for the second foot of a "simultaneous" pair, so trot and + // canter flam instead of summing two clops into one. + int16_t pending_[kNumAgents][kNumAgents]; + uint8_t lastGait_; + uint32_t rng_; +}; + +/// Mode 2 — cascading probability network. A node firing raises every other +/// node's probability via a decaying excitation, so one honk sets off the flock. +/// A refractory period after each fire keeps the cascade from self-sustaining. +class GeeseEngine : public Engine +{ +public: + void reset(uint32_t seed) override; + void tick(const Ctrl &c, EngineOut &out) override; +private: + // Runs kSwarmSize birds folded onto kNumAgents outputs — four geese never + // sounded like a flock. + int32_t excite_[kSwarmSize]; // Q16 incoming excitation + uint16_t refractory_[kSwarmSize]; // control ticks remaining + uint32_t rng_; +}; + +/// Mode 3 — Kuramoto coupled oscillators. Each agent pulls the others toward +/// its phase with strength K; Knob Main inversely sets K, sweeping from locked +/// metronomic sync to fully independent chaos. +class FrogsEngine : public Engine +{ +public: + void reset(uint32_t seed) override; + void tick(const Ctrl &c, EngineOut &out) override; +private: + // A pond of kSwarmSize frogs folded onto the four outputs. Four voices could + // lock or scatter but never sounded like a chorus; twelve do, and the + // Kuramoto order parameter is far more legible with a real population. + uint32_t phase_[kSwarmSize]; + int32_t natural_[kSwarmSize]; // per-frog natural frequency increment + // Per-agent croak envelope, Q16: rises when that group calls and decays + // between. state[] used to carry the lead frog's raw PHASE, which is a + // sawtooth rather than anything about the pond, and every other engine puts + // a level there. + int32_t croak_[kNumAgents]; + uint32_t clockPhase_; // phantom oscillator tracking Pulse In 2 + uint32_t rng_; +}; + +/// Mode 4 — leaky integrate-and-fire buckets. Noise fills each bucket, a fixed +/// leak drains it, and crossing the threshold fires and empties it. Staggered +/// thresholds and leak rates stop the four from locking together. +class RainEngine : public Engine +{ +public: + void reset(uint32_t seed) override; + void tick(const Ctrl &c, EngineOut &out) override; +private: + int32_t level_[kNumAgents]; // Q16 accumulator + uint32_t rng_; +}; + +/// Mode 5 — inhomogeneous Poisson process. A single hidden random-walk LFO sets +/// a shared firing density, so all agents cluster and fall silent together. +class MeteorsEngine : public Engine +{ +public: + void reset(uint32_t seed) override; + void tick(const Ctrl &c, EngineOut &out) override; +private: + int32_t density_; // Q16, the slewed "debris field" level + int32_t target_; // Q16, current random-walk target + uint16_t untilNewTarget_; + uint32_t rng_; +}; + +/// Mode 6 — density-dependent chorus. Where Geese couple on excitation and Frogs +/// couple on phase, cicadas couple on AMPLITUDE: how loud the field already is +/// drives how fast each insect calls, and that feedback loop is what produces +/// the slow pulsing waves of loudness a real cicada field makes. Positive +/// feedback swells the chorus, fatigue drags it back down, and it breathes. +class CicadasEngine : public Engine +{ +public: + void reset(uint32_t seed) override; + void tick(const Ctrl &c, EngineOut &out) override; +private: + uint32_t phase_[kSwarmSize]; // each insect's call cycle + int32_t fatigue_[kSwarmSize]; // Q16, rises with calling, forces a rest + // Per-insect constitution. Without these every insect tired and recovered at + // exactly the same rate, so the field locked into a metronomic pulse — + // clusters every 0.32s with 0.01s of variance, which reads as a gallop + // rather than a cicada field. Real insects differ, and that spread is what + // keeps the swelling irregular. + uint8_t recover_[kSwarmSize]; // fatigue decay shift, 11..13 + int32_t stamina_[kSwarmSize]; // Q16 scale on how fast fatigue accrues + // Per-insect NATURAL RATE. This is the one that matters: with a single + // shared rate law the twelve phases converged to R=0.88 within five seconds + // and stayed there, so every insect called at the same instant and the + // field pulsed like a gallop. Detuning them is what keeps a chorus a chorus. + int32_t tempo_[kSwarmSize]; // Q16 multiplier on the base call rate + + // PATCHES. One shared field made the whole model a relaxation oscillator: + // everyone recovers, everyone calls, everyone tires, repeat — one period, + // which is why it read as a gallop. Splitting the field into patches that + // hear mostly themselves lets them swell out of step with each other, and + // that is what makes the swelling irregular rather than metronomic. + static constexpr int kPatches = 4; + static constexpr int kPerPatch = kSwarmSize / kPatches; + int32_t patchField_[kPatches]; // Q16 local loudness + int32_t field_; // Q16 mean across patches, for the CV out + // A footstep in the grass, Q16, decaying. SEPARATE from fatigue_ because the + // two are different things: fatigue slows a tired insect to a quarter rate + // and must stay that way, or the swells stop breathing. A startle stops the + // field dead. Overloading fatigue_ for both could only ever give one depth. + int32_t startle_; + uint32_t rng_; +}; + +} // namespace bio diff --git a/releases/62_BioMimicry/fastmath.cpp b/releases/62_BioMimicry/fastmath.cpp new file mode 100644 index 000000000..a1d605806 --- /dev/null +++ b/releases/62_BioMimicry/fastmath.cpp @@ -0,0 +1,50 @@ +// fastmath.cpp - generated tables for fastmath.h. +// +// kSinTable: quarter-wave sine, Q15. 257 entries (the extra one lets the +// interpolator read idx+1 unconditionally). Generated as: +// round(32767 * sin((i/256) * (pi/2))) for i in 0..256 + +#include "fastmath.h" +#include "pico.h" // __not_in_flash + +namespace bio { + +// In RAM: read on every fast_sin() call from the 48kHz path, where an XIP +// miss costs ~100 cycles. +const int16_t __not_in_flash("sintab") kSinTable[257] = { + 0, 201, 402, 603, 804, 1005, 1206, 1407, + 1608, 1809, 2009, 2210, 2410, 2611, 2811, 3012, + 3212, 3412, 3612, 3811, 4011, 4210, 4410, 4609, + 4808, 5007, 5205, 5404, 5602, 5800, 5998, 6195, + 6393, 6590, 6786, 6983, 7179, 7375, 7571, 7767, + 7962, 8157, 8351, 8545, 8739, 8933, 9126, 9319, + 9512, 9704, 9896, 10087, 10278, 10469, 10659, 10849, + 11039, 11228, 11417, 11605, 11793, 11980, 12167, 12353, + 12539, 12725, 12910, 13094, 13279, 13462, 13645, 13828, + 14010, 14191, 14372, 14553, 14732, 14912, 15090, 15269, + 15446, 15623, 15800, 15976, 16151, 16325, 16499, 16673, + 16846, 17018, 17189, 17360, 17530, 17700, 17869, 18037, + 18204, 18371, 18537, 18703, 18868, 19032, 19195, 19357, + 19519, 19680, 19841, 20000, 20159, 20317, 20475, 20631, + 20787, 20942, 21096, 21250, 21403, 21554, 21705, 21856, + 22005, 22154, 22301, 22448, 22594, 22739, 22884, 23027, + 23170, 23311, 23452, 23592, 23731, 23870, 24007, 24143, + 24279, 24413, 24547, 24680, 24811, 24942, 25072, 25201, + 25329, 25456, 25582, 25708, 25832, 25955, 26077, 26198, + 26319, 26438, 26556, 26674, 26790, 26905, 27019, 27133, + 27245, 27356, 27466, 27575, 27683, 27790, 27896, 28001, + 28105, 28208, 28310, 28411, 28510, 28609, 28706, 28803, + 28898, 28992, 29085, 29177, 29268, 29358, 29447, 29534, + 29621, 29706, 29791, 29874, 29956, 30037, 30117, 30195, + 30273, 30349, 30424, 30498, 30571, 30643, 30714, 30783, + 30852, 30919, 30985, 31050, 31113, 31176, 31237, 31297, + 31356, 31414, 31470, 31526, 31580, 31633, 31685, 31736, + 31785, 31833, 31880, 31926, 31971, 32014, 32057, 32098, + 32137, 32176, 32213, 32250, 32285, 32318, 32351, 32382, + 32412, 32441, 32469, 32495, 32521, 32545, 32567, 32589, + 32609, 32628, 32646, 32663, 32678, 32692, 32705, 32717, + 32728, 32737, 32745, 32752, 32757, 32761, 32765, 32766, + 32767, +}; + +} // namespace bio diff --git a/releases/62_BioMimicry/fastmath.h b/releases/62_BioMimicry/fastmath.h new file mode 100644 index 000000000..6c699b219 --- /dev/null +++ b/releases/62_BioMimicry/fastmath.h @@ -0,0 +1,188 @@ +// fastmath.h — fixed-point primitives for the 48kHz audio path. +// +// Everything here is integer-only. No libm, no float: the build runs with +// -Wdouble-promotion -Wfloat-conversion and the RP2040 has no FPU, so a stray +// double would cost hundreds of cycles inside ProcessSample(). +// +// Conventions: +// Q15 — int32_t, 32768 == 1.0. Used for signed unit values (sine, pan). +// Q16 — int32_t, 65536 == 1.0. Used for levels, probabilities, envelopes. +// phase— uint32_t, the full 32-bit range == one cycle. Wraps for free. + +#pragma once +#include + +namespace bio { + +constexpr int32_t kQ15One = 32768; +constexpr int32_t kQ16One = 65536; + +// --------------------------------------------------------------------------- +// Sine +// --------------------------------------------------------------------------- + +// Quarter-wave sine table, Q15. 257 entries so the interpolator can always read +// kSinTable[i+1] without a bounds check. Index i corresponds to angle +// (i/256)*(pi/2), value = round(32767 * sin(angle)). +extern const int16_t kSinTable[257]; + +/// Sine of a 32-bit phase (full range = one cycle). Returns Q15, -32767..32767. +/// +/// Reconstructs the full wave from the quarter table by folding the top two +/// phase bits: quadrant 1/2 mirror the index, quadrant 2/3 negate the result. +/// Linearly interpolates between table entries, so error is well under 1 LSB +/// at 12-bit audio depth. +static inline int32_t __attribute__((always_inline)) fast_sin(uint32_t phase) +{ + uint32_t quadrant = phase >> 30; // 0..3 + uint32_t frac = (phase >> 6) & 0xFFFFFF; // 24 bits within the quadrant + uint32_t idx = frac >> 16; // 0..255 + uint32_t mu = frac & 0xFFFF; // interpolation weight, Q16 + + // Quadrants 1 and 3 traverse the quarter-wave backwards. + if (quadrant & 1) + { + idx = 255 - idx; + mu = 65536 - mu; + if (mu == 65536) { mu = 0; idx++; } + } + + int32_t a = kSinTable[idx]; + int32_t b = kSinTable[idx + 1]; + int32_t v = a + (((b - a) * static_cast(mu)) >> 16); + + // Quadrants 2 and 3 are the negative half of the cycle. + return (quadrant & 2) ? -v : v; +} + +// --------------------------------------------------------------------------- +// Randomness +// --------------------------------------------------------------------------- + +/// Marsaglia xorshift32. One multiply-free step, ~5 cycles. Never returns 0 +/// once seeded non-zero, which is exactly what the shift chain requires. +static inline uint32_t __attribute__((always_inline)) xorshift32(uint32_t &s) +{ + s ^= s << 13; + s ^= s >> 17; + s ^= s << 5; + return s; +} + +/// Uniform random in Q16 [0, 65536). +static inline int32_t __attribute__((always_inline)) rand_q16(uint32_t &s) +{ + return static_cast(xorshift32(s) >> 16); +} + +/// Uniform random in Q15 [-32768, 32767] — a bipolar unit value. +static inline int32_t __attribute__((always_inline)) rand_bipolar(uint32_t &s) +{ + return static_cast(xorshift32(s) >> 17) - 16384; +} + +// --------------------------------------------------------------------------- +// Envelopes / smoothing +// --------------------------------------------------------------------------- + +/// One-pole exponential decay: v -= v >> shift. Larger shift = slower decay. +/// The `v > 0` floor stops the shift from stalling at a small non-zero value +/// (v >> shift rounds to 0 once v < 2^shift, which would leave a DC tail). +static inline int32_t __attribute__((always_inline)) fast_exp_decay(int32_t v, uint8_t shift) +{ + int32_t d = v >> shift; + if (d == 0) return 0; + return v - d; +} + +/// One-pole slew toward a target: v += (target - v) >> shift. +static inline int32_t __attribute__((always_inline)) slew(int32_t v, int32_t target, uint8_t shift) +{ + return v + ((target - v) >> shift); +} + +// --------------------------------------------------------------------------- +// Scaling helpers +// --------------------------------------------------------------------------- + +/// Multiply two Q16 values, result Q16. Uses a 64-bit intermediate: Q16 levels +/// can reach 65536, and 65536*65536 overflows 32 bits. +static inline int32_t __attribute__((always_inline)) mul_q16(int32_t a, int32_t b) +{ + return static_cast((static_cast(a) * b) >> 16); +} + +/// Multiply a signal by a Q15 gain. Inputs stay well inside 32 bits here +/// (audio is +/-2048), so no 64-bit widening is needed. +static inline int32_t __attribute__((always_inline)) mul_q15(int32_t a, int32_t g) +{ + return (a * g) >> 15; +} + +/// Square root of a Q16 value in 0..65536, result Q16 in 0..65536. +/// +/// Restoring bitwise integer sqrt: no libm, no float, no divide, and bounded at +/// 16 iterations. Used to bend knob laws so the bottom of the travel moves +/// fastest -- sqrt(x) rises steeply from zero, which is exactly the shape a +/// control needs when its underlying model has a threshold near the bottom. +static inline int32_t __attribute__((always_inline)) fast_sqrt_q16(int32_t x) +{ + if (x <= 0) return 0; + // sqrt(x/65536)*65536 == sqrt(x*65536), so widen before rooting. + uint32_t v = static_cast(x) << 16; + uint32_t res = 0; + uint32_t bit = 1u << 30; + while (bit > v) bit >>= 2; + while (bit) + { + if (v >= res + bit) { v -= res + bit; res = (res >> 1) + bit; } + else { res >>= 1; } + bit >>= 2; + } + return static_cast(res); +} + +/// Clamp to the DAC's signed 12-bit range. +static inline int16_t __attribute__((always_inline)) clamp12(int32_t v) +{ + if (v < -2048) return -2048; + if (v > 2047) return 2047; + return static_cast(v); +} + +/// Linear map of a 12-bit knob (0..4095) to Q16 (0..65536). +static inline int32_t __attribute__((always_inline)) knob_to_q16(int32_t knob) +{ + return knob << 4; +} + +// --------------------------------------------------------------------------- +// Rate -> phase increment +// --------------------------------------------------------------------------- + +/// Convert a Q8 frequency (Hz * 256) into a phase increment at the control rate. +/// +/// The obvious form is +/// (int64_t)hz_q8 * 4294967296LL / (256LL * kCtrlRate) +/// and it is what this code used to do — in three places, one of them inside a +/// twelve-iteration loop. **That was the single biggest cause of the card +/// overrunning its 20.8us sample budget by 4-8x.** The Cortex-M0+ has no +/// hardware divider at all, so a 64-bit divide is a libgcc call costing several +/// hundred cycles, and the compiler cannot strength-reduce it because the +/// numerator is 64-bit. +/// +/// Dividing by the compile-time constant 256*1500 = 384000 is the same as +/// multiplying by 2^32/384000, which is precomputed here as a Q16 constant. +/// The result is EXACT over the whole useful range (verified against the +/// integer division for 115..20000 Q8 Hz), and costs one 64-bit multiply +/// instead of a divide. +constexpr uint32_t kHzToIncQ16 = 733007752u; // round(2^32 / 384000 * 65536) + +static inline uint32_t __attribute__((always_inline)) hz_to_inc(int32_t hz_q8) +{ + if (hz_q8 < 0) hz_q8 = 0; + return static_cast( + (static_cast(static_cast(hz_q8)) * kHzToIncQ16) >> 16); +} + +} // namespace bio diff --git a/releases/62_BioMimicry/info.yaml b/releases/62_BioMimicry/info.yaml new file mode 100644 index 000000000..d8cf63e3d --- /dev/null +++ b/releases/62_BioMimicry/info.yaml @@ -0,0 +1,195 @@ +draft: false +Name: BioMimicry +short-description: Six physics engines generating organic, semi-random triggers, CV and audio +Language: C++ (ComputerCard) +Creator: Andy Jenkinson (uglifruit) +Version: "1.2.0" +Status: Released +License: CC-BY-4.0 +repository: https://github.com/uglifruit/WorkshopBio +discussion: https://discord.com/channels/1210238368898879569/1533895615442849812 +Editor: web +date-created: 2026-08-02 +date-updated: 2026-08-06 + +contact: + social: + github: https://github.com/uglifruit + +# The build computes the sha256 for repo-hosted firmware, so none is given here. +uf2: + - path: UF2/biomimicry.uf2 + name: BioMimicry 1.2.0 + +tags: + - generative + - rhythm + - stochastic + - triggers + - drums + - swarm + - organic + - sample-player + +summary: | + BioMimicry uses six mathematical physics engines to generate triggers, CV and + audio that feel organically alive.

+ + Tap the momentary switch to cycle six ecosystems.
HORSES: a herd, each animal + running its own stride clock driving four hooves at their real equine footfall + offsets - walk, trot, canter and gallop as biomechanical patterns, + suspension phases and all.
GEESE: a cascading probability network across a + flock of twelve, where one honk spikes the odds for the rest.
FROGS: the + Kuramoto model of coupled oscillators, fighting between metronomic sync and + chaotic swarms.
RAIN: leaky integrate-and-fire buckets that fill with noise and + splash downstream into each other when they overflow.
METEORS: an + inhomogeneous Poisson process where a hidden weather system swells a swarm from + eerie silence into dense overlapping barrages.
CICADAS: four patches of insects + coupled on loudness rather than on phase or events, swelling out of step.

+ + Voices are animal recordings with up to eight round robins each. In Horses + the round robins are the four hooves, so a gait sounds like an animal rather + than a drum machine.

+ + Hold the momentary switch at power-on to boot TUNED, which plays the same + recordings at their recorded pitch with no per-animal or per-hit detuning - so + uploaded notes, drips or hits can be galloped, dripped or swarmed in tune. Its + Summed routing puts 1V/oct on CV 2 saying which round robin just fired, so the + ecosystem can play a melody on an external oscillator.

+ + Samples can be replaced from a browser over USB. + +panel: + inputs: + - id: AudioIn1 + name: Loudness + type: audio + description: An envelope follower on whatever you patch in, so the ecosystem hears the rest of your rack. A loud room agitates the geese into honking and shuts the cicadas up. Inactive when nothing is patched. + - id: AudioIn2 + name: Disturb + type: audio + description: Transient-sensitive rather than level-sensitive, because sudden movement is what alarms an animal rather than steady noise. A sharp attack counts as a Spook. Inactive when nothing is patched. + - id: CVIn1 + name: Physics Mod + type: cv + description: Summed with Knob Main to modulate the current ecosystem's physics variable + - id: CVIn2 + name: Population Mod + type: cv + description: Summed with Knob X to modulate how many agents are active + - id: PulseIn1 + name: Spook + type: pulse + description: Disrupts the environment. Horses - the herd startles into step. Geese - a guaranteed cascade. Frogs - a splash that scrambles every phase and destroys sync. Rain - a wind gust dumping energy into all the buckets. Meteors - a bolide spiking density to maximum. Cicadas - a footstep in the grass, silencing the field before it creeps back in. + - id: PulseIn2 + name: Clock + type: pulse + description: An external tempo the ecosystem entrains to rather than obeys. Frogs treat it as a phantom oscillator and couple to its phase at whatever strength Knob Main sets, so the chorus dials from locked-to-clock to completely indifferent. Horses lock their stride, Geese lean honks toward the beat, Rain tops up the buckets, Meteors swell the debris field. Stops mattering about 3 seconds after the clock stops. + outputs: + - id: AudioOut1 + name: Audio L + type: audio + description: Agents rendered and placed in the stereo field by the mode's own logic - a stable image for Horses, fixed spots for the flock modes, a new position per hit for Rain and Meteors + - id: AudioOut2 + name: Audio R + type: audio + description: The right channel of the same stereo image + - id: CVOut1 + name: Trig3 / State + type: cv + description: A trigger or a continuous control voltage depending on the switch position - see the switch sections + - id: CVOut2 + name: Trig4 / State + type: cv + description: A trigger or a continuous control voltage depending on the switch position - see the switch sections + - id: PulseOut1 + name: Trig1 / All Trigs + type: pulse + description: Individual or summed agent triggers depending on the switch position + - id: PulseOut2 + name: Trig2 / Accent + type: pulse + description: Individual agent triggers or an accent gate depending on the switch position + +controls: + switch: + up: + name: Discrete Routing + description: The four agents route individually - agents 1 and 2 to the pulse outs, agents 3 and 4 as calibrated 5V trigger blips on the CV outs, since they have no pulse out of their own + middle: + name: Summed Routing + description: All active agents OR'd onto Pulse Out 1, an accent on Pulse Out 2 when two or more fire at once, and continuous CV on both CV outs - agent 1's own state on CV 1, and the whole ecosystem's on CV 2. Both are LEVELS in every mode, never ramps - CV 1 is that agent's own activity (Horses footfalls, Frogs croaks, Rain bucket fill), CV 2 the whole ecosystem (Horses herd sync, Geese flock agitation, Frogs chorus coherence, Rain total water, Meteors debris density, Cicadas field loudness) + down: + name: WebUI mode/Alt Boot + description: HOLD for WebUI mode. HOLD at power-on to boot TUNED mode instead of Rhythm - the LEDs announce which you got, Rhythm lighting the left column and Tuned the right. Tuned plays samples at their recorded pitch with no per-animal or per-hit detuning, so uploaded notes can be galloped or dripped, and both CV outs stay continuous. Switch Up gives agents 1 and 2 a trigger each with their own density on the CVs; Switch Middle gives all triggers on Pulse 1, Pulse 1 divided by four on Pulse 2, overall density on CV 1 and WHICH SAMPLE just fired on CV 2 as 1V/oct, one semitone per round-robin slot + tap: + name: Ecosystem + description: Briefly press and release to move to the next ecosystem - Horses, Geese, Frogs, Rain, Meteors, Cicadas + knobs: + - + main: + name: Physics + description: The fundamental law of the current ecosystem. Horses - gait and stride rate, sweeping walk, trot, canter and gallop with each gait in its own tempo band. Geese - contagion, from birds ignoring each other to one honk setting off the flock. Frogs - decoupling, from locked metronomic sync to total chaos. Rain - downpour, from silence to stuttering torrents. Meteors - debris density. Cicadas - coupling depth, from a steady drone to deep irregular surges. + x: + name: Population + description: How many agents are alive, 1 to 4. Horses always keep all four hooves - the knob adds whole animals to the herd. In the swarm modes each output channel carries three members, so a full population is twelve birds, frogs, meteors or insects. + y: + name: Chaos + description: Per-mode randomness and spread - per-hoof timing jitter (Horses), spontaneous spark rate (Geese), natural-frequency spread (Frogs), leak rate (Rain), density wander (Meteors), rate spread across the field (Cicadas). + leds: + - + display: list + items: + - id: LED0-5 + name: Ecosystem and Activity + description: One LED per ecosystem, in order - Horses, Geese, Frogs, Rain, Meteors, Cicadas. The active mode's LED sits at a dim glow and flares to full on every trigger, so one light shows both which ecosystem is running and how busy it is. During the final write of a sample upload they show a stage count instead, so a failure reports where it stopped. + +host: + notes: | + OUTPUTS BY SWITCH POSITION + + Switch Up (Discrete): Pulse Out 1 and 2 carry agents 1 and 2; CV Out 1 and 2 + fire agents 3 and 4 as calibrated 5V blips, because the Computer has only two + pulse outs and every agent should get a physical trigger. + + Switch Middle (Summed): all agents OR'd onto Pulse Out 1, an accent on Pulse + Out 2 when two or more agents hit at once, agent 1's continuous internal state + on CV Out 1, and the whole-ecosystem state on CV Out 2. + + In TUNED boot the CV outs are always continuous - it never fires CV trigger + blips. Switch Up gives agents 1 and 2 a pulse out each with their own smoothed + densities on the CV outs. Switch Middle puts every trigger on Pulse Out 1, + that divided by four on Pulse Out 2, overall density on CV Out 1, and on CV + Out 2 a 1V/oct pitch saying WHICH round-robin slot just fired - one semitone + per slot, stepped rather than slewed, so it drives an external oscillator as a + melody with Pulse Out 1 as the gate. + + UNDER THE HOOD + + The physics engines run at a 1.5kHz control rate while voices, gates and CV + run at the full 48kHz. Everything is integer fixed-point with no float in the + hot path. + + SAMPLES + + Samples can be replaced over USB-MIDI from the web editor in Chrome or Edge: + drag in WAVs, they are converted and loudness-matched in the browser and + written to a reserved 1MB flash region. Uploads override the built-in + recordings per slot, so one ecosystem can be replaced while the rest stay. + + The card is SILENT throughout: holding the switch stops the ecosystem and + hands the card to USB, and it reboots back into playing when you are done. + Writing flash halts execution and takes USB with it - the USB stack lives in + flash - so a transfer is buffered in RAM and committed in one go. That caps a + single upload at 160KB - about 3.4 seconds of audio - but uploads APPEND, so + the full 1MB region is reachable in successive passes. + + LICENCE - CC-BY-4.0 covers the card's own source: use, fork or sell it, just + credit Andy Jenkinson (uglifruit). Two things are not mine to relicense and + keep their own terms - the sample library is from Pixabay under the Pixabay + Content License, and ComputerCard.h is Chris Johnson's, MIT. + + CREDITS - ComputerCard by Chris Johnson (Music Thing Modular). The Kuramoto + model of coupled oscillators (Yoshiki Kuramoto); leaky integrate-and-fire and + inhomogeneous Poisson processes are standard point-process models. Built with + Claude Code. diff --git a/releases/62_BioMimicry/main.cpp b/releases/62_BioMimicry/main.cpp new file mode 100644 index 000000000..dea38a300 --- /dev/null +++ b/releases/62_BioMimicry/main.cpp @@ -0,0 +1,1057 @@ +// BioMimicry — organic rhythms for the Music Thing Workshop Computer. +// +// Five physics engines (Horses, Geese, Frogs, Rain, Meteors) drive four agents. +// The engines run at 1.5kHz; voices and outputs run at the full 48kHz. +// +// Hardware realities that shape the mapping (the Computer has 2 pulse outs, 2 CV +// outs and ONE three-position switch): +// * Discrete routing puts agents 1-2 on the pulse outs and fires agents 3-4 as +// 5V blips on the CV outs, so all four get a physical trigger. +// * The single switch does double duty: a Down tap cycles the mode, while the +// Up/Middle position selects the routing. +// * Holding Down at power-on selects the PCM voice bank instead of the synth. + +#include "ComputerCard.h" +#include "biomimicry.h" +#include "engines.h" +#include "voices.h" +#include "samples_default.h" // kHaveSamples +#include "samplestore.h" // user flash region +#include "webui.h" // USB-MIDI sample upload +#include "profile.h" // -DBIO_PROFILE=ON: cycle-count ProcessSample +#include "crosscore.h" // the only state shared between the cores +#include "pico/multicore.h" +#include "hardware/watchdog.h" // leaving USB mode reboots +#include "hardware/vreg.h" // overvolt for the 192MHz clock +#include "pico/stdlib.h" // set_sys_clock_khz + +using namespace bio; + +// Shared with core 1, which does nothing but service USB. Single writer per +// field (core 0 sets them once at the end of boot, core 1 only reads), so no +// lock is needed — the same discipline WorkshopZX uses for its CrossCore. +static volatile bool gUsbReady = false; +static WebUI * volatile gWebUI = nullptr; +// Core 1 drives the progress LEDs during an upload, when core 0's audio +// interrupt is switched off and nothing else is left running. +class BioMimicryCard; +static BioMimicryCard * volatile gCard = nullptr; + +// Gate width for the pulse outs and the CV-out trigger blips: 5ms at 48kHz is +// comfortably long enough for any drum module or envelope to register. +static constexpr int kGateSamples = 240; + +// How long to sample the switch at startup before deciding the boot mode. The +// switch only becomes readable once the audio worker is running, so this window +// also covers the release of the hold. +static constexpr int kBootWindowSamples = 48000 / 2; // ~0.5s + +// After booting, announce the mode on the LEDs for a moment: Rhythm lights the +// left column, Tuned the right. Without this the only way to tell them apart is +// by ear, and the difference is subtle until you hear a pitched sample held. +static constexpr int kSplashSamples = 48000; // ~1s + +// How long the momentary switch must be held to hand the card over to USB. +// Two seconds is long enough that no tap reaches it by accident, and the LEDs +// fill as it counts so the gesture is visible rather than guessed at. +// Measured in control ticks, because that is where the switch is sampled. +static constexpr int32_t kHoldTicks = 2 * kCtrlRate; // ~2s at 1.5kHz + +class BioMimicryCard : public ComputerCard +{ +public: + /// Progress bar during an upload, called from core 1 because core 0's audio + /// interrupt is switched off by then. RAM-resident: this runs while flash is + /// being erased, and LedOn() only pokes a PWM register, so it is safe there. + void __not_in_flash_func(showUploadProgress)() + { + // The LEDs show WebUI::stage as a binary count, not a progress bar. + // A hang in the upload path also stops USB, so the card cannot report it + // over the wire -- whatever number is frozen here is the last step that + // completed, which is the only diagnostic available from outside. + uint8_t st = WebUI::stage; + for (int i = 0; i < 6; i++) + LedOn(static_cast(i), (st >> i) & 1); + } + + BioMimicryCard() + { + engines_[0] = &horses_; + engines_[1] = &geese_; + engines_[2] = &frogs_; + engines_[3] = &rain_; + engines_[4] = &meteors_; + engines_[5] = &cicadas_; + // USB runs on core 1. tud_task() is TinyUSB's whole device stack and is + // unbounded by design — measured at up to 36000 cycles, i.e. 14x the + // entire 20.8us audio budget. Calling that from inside the audio + // interrupt was always wrong; it only looked survivable because it is + // intermittent, and every occurrence drops samples. + multicore_launch_core1(core1Entry); + } + + /// Core 1: idle until the switch is held, then nothing but USB. It must not + /// touch anything core 0 owns. + /// + /// v1.1.0 will put the physics here — the idle wait below is the space that + /// makes that possible, and the reason USB had to become modal first. + static void __not_in_flash_func(core1Entry)() + { + // Wait for core 0 to finish booting and publish the globals. + while (!gUsbReady) tight_loop_contents(); + + // USB does not exist until the switch is held. Idle here until it is. + // + // This is the point of the modal design: with TinyUSB uninitialised the + // card does not enumerate, USBCTRL_IRQ (whose handler lives in flash) is + // never armed, and nothing on this core competes with the audio path + // while the card is being played. + // + // The loop also exercises the pacing the physics will use, so the + // mechanism is proven before anything depends on it. maxBacklog is how + // many control ticks core 1 owed at once: 1 is healthy, a steady 2+ means + // it cannot keep up and the physics would be running in slow motion. + { + uint32_t lastSample = gXC.sampleCount; + while (!WebUI::usbMode) + { + uint32_t elapsed = gXC.sampleCount - lastSample; + if (elapsed < static_cast(kCtrlDiv)) { tight_loop_contents(); continue; } + uint32_t owed = elapsed >> 5; // kCtrlDiv is 32: a shift + if (owed > gXC.maxBacklog) gXC.maxBacklog = owed; + if (owed > 4) owed = 4; // slow motion, not a burst + // Anchored, NOT `= gXC.sampleCount`: keeps the tick grid on the + // 1.5kHz phase instead of letting it drift after a stall. + lastSample += owed * kCtrlDiv; + + // The physics, for BOTH boot modes. Alt boot used to run its + // whole tick inline on core 0 because it needed a different + // renderer; now it is the same ecosystem with different output + // routing, so it takes the same path. + for (uint32_t n = 0; n < owed; n++) gCard->physicsTick(); + } + } + + // Held: bring USB up, on this core, and stay here. + gWebUI->Init(); + for (;;) + { + gWebUI->Task(); + + // Once an upload starts, core 0's audio interrupt is off and this is + // the only core still running — so the progress LEDs have to be + // driven from here. LedOn() is RAM-resident and only writes a PWM + // register, so it stays safe even mid-erase. + if (WebUI::uploadMode && gCard) gCard->showUploadProgress(); + } + } + + virtual void __not_in_flash_func(ProcessSample)() + { + // An upload is starting: park HERE, in RAM, and never return to flash. + // + // Masking DMA_IRQ_0 from core 1 is not sufficient on its own, which is + // what the first two attempts got wrong. ComputerCard::AudioCallback, + // BufferFull and AudioWorker's outer loop all live in flash, and the CV + // output runs a second flash-resident ISR (PWM_IRQ_WRAP -> OnCVPWMWrap). + // Any of them executing when flash_range_erase drops XIP is a hard fault. + // + // So core 0 stops inside this function, which IS RAM-resident, mutes the + // outputs, tells core 1 it has arrived, and spins until the reboot. It + // never returns, so the flash-resident caller never runs again. + // + // This is safe now in a way it was not before: USB lives on core 1, so + // spinning core 0 no longer stalls the upload it is waiting for. + if (WebUI::uploadMode) + { + AudioOut1(0); + AudioOut2(0); + PulseOut1(false); + PulseOut2(false); + WebUI::core0Parked = true; + for (;;) tight_loop_contents(); + } + + // Times the WHOLE callback, which is the number that decides whether + // audio glitches — not the per-sample average. + BIO_PROFILE_SCOPE(Total); + + // ---- Boot window ------------------------------------------------ + // Decide the voice backend before any normal switch handling, so the + // power-on hold is never mistaken for a mode-cycle tap. + if (bootPhase_ < kBootWindowSamples) + { + // The switch is NOT readable straight away, and reads as Down until + // it settles. ComputerCard derives it from knobs[3], which comes off + // a ~60Hz smoothing filter starting at zero — and zero decodes as + // Down. So for the first few milliseconds of every boot the card + // reports Down wherever the switch actually is. + // + // The old code latched on "Down seen at any point in the window", + // which therefore latched on EVERY boot: both modes came up as + // Drone. Take a single reading once settled instead, which is what + // WorkshopZX's BootSelector does (see its main.cpp) and what is + // proven on this hardware. + if (++bootPhase_ == kBootWindowSamples) + { + // Holding the switch at power-on picks DRONE, a different + // instrument built from the same six engines. PCM sample + // playback is a build-time choice now (bake samples/ or don't), + // not something worth spending a whole boot mode on. + boot_ = (SwitchVal() == Switch::Down) ? BootMode::Drone + : BootMode::Rhythm; + // NOT webui_.Init() here any more — TinyUSB is not started + // until the switch is held. See core1Entry. + gXC.bootMode = static_cast(boot_); + gXC.mode = mode_; + gXC.routing = static_cast(routing_); + gXC.population = static_cast(population_); + gCard = this; + gWebUI = &webui_; + gUsbReady = true; // releases core 1 + // Alt boot plays samples at their recorded pitch: no per-agent + // body size, no per-hit wobble. Rhythm is an ecosystem and wants + // the humanisation; alt mode is an instrument and does not. + voices_.init(AnySamples(), boot_ == BootMode::Drone); + engines_[mode_]->reset(0xB10Du); + // Swallow the release of the boot hold, so booting into Drone + // does not also read as a tap and cycle straight off Horses. + // downTicks_ is additionally gated on splash_ in controlTick. + holdFired_ = (SwitchVal() == Switch::Down); + // Announce what booted, because otherwise the only way to know + // is by ear — and a Drone patch can be mistaken for broken + // samples. See the splash pattern in ProcessSample. + splash_ = kSplashSamples; + } + return; + } + + // USB is serviced on core 1; nothing to do here. See core1Entry. + // + // Uploads are NOT handled here any more. This handler stops being called + // at all once an upload starts (DMA_IRQ_0 is disabled), so the progress + // LEDs are driven from core 1 — see core1Entry. A progress bar rendered + // here would simply freeze on the first frame. + + // ---- Boot splash ------------------------------------------------- + // LEDs are 0 1 / 2 3 / 4 5. Rhythm lights the left column, Drone the + // right, so which instrument you are in is visible on power-up. + if (splash_ > 0) + { + if (--splash_ == 0) + { + for (int i = 0; i < 6; i++) LedOff(i); + // Start measuring only now: the boot-time voices_.init() memset + // is a one-off spike and would otherwise latch the overrun + // indicator permanently. + BIO_PROFILE_ARM(); + } + else if (splash_ == kSplashSamples - 1) + { + bool drone = (boot_ == BootMode::Drone); + for (int i = 0; i < 6; i++) + LedOn(i, ((i & 1) == 1) == drone); + } + } + + // ---- Control tick (1.5kHz) -------------------------------------- + // NOTE: this runs INLINE, inside the DMA interrupt. Dividing by + // kCtrlDiv lowers the average load but does NOT relax the deadline — + // on the sample where it fires, the whole engine must still finish + // within this one 20.83us slot. Build with -DBIO_PROFILE=ON to see + // what that actually costs. + // The engine and the LED/UI housekeeping used to run on the SAME sample, + // stacking their costs into one peak. They are now offset by half the + // divider, so each gets its own sample. Same rates, lower worst case. + if (++ctrlDiv_ >= kCtrlDiv) ctrlDiv_ = 0; + if (ctrlDiv_ == 0) + { + BIO_PROFILE_SCOPE(Ctrl); + controlTick(); + } + else if (ctrlDiv_ == kCtrlDiv / 2) + { + BIO_PROFILE_SCOPE(Outputs); + uiTick(); + } + else + { + // ONE queued note-on per sample, on the samples that have nothing + // else to do. note() is ~300 instructions and a full Geese tick fires + // four at once, so draining them together put ~1200 instructions on a + // single sample — the whole cost the split was meant to remove, just + // moved rather than spread. The ring already decouples when a note is + // consumed from when it was produced, so there is no reason to take + // them all in one slot. 30 free samples per control period against a + // worst case of 4 notes is ample. + BIO_PROFILE_SCOPE(Notes); + drainOneTrigger(); + } + + // Core 1's clock. Everything it does is paced off this rather than + // free-running, so the 1.5kHz control rate stays anchored to audio time. + // Published now, unused until the physics move across. + // + // This is the ONLY thing published at 48kHz. switchMirror started here + // too and cost real cycles for nothing: core 1 reads it at the control + // rate, so publishing it 32x more often than it can be consumed is pure + // waste in the hottest loop on the card. It lives in controlTick now. + gXC.sampleCount++; + + // ---- Audio (48kHz) ---------------------------------------------- + int16_t l, r; + { + BIO_PROFILE_SCOPE(Voices); + voices_.render(population_, l, r); + } + AudioOut1(l); + AudioOut2(r); + + { + BIO_PROFILE_SCOPE(Outputs); + // ---- Listening (48kHz) -------------------------------------- + listen(); + + // ---- Gate/blip timers (48kHz) ------------------------------- + serviceOutputs(); + } + +#ifdef BIO_PROFILE + profileReadout(); +#endif + } + +private: +#ifdef BIO_PROFILE + // ------------------------------------------------------------------- + // The first hardware run flashed all six LEDs in every mode, i.e. something + // overruns everywhere. "Everywhere" points at shared cost rather than any + // one engine, so the readout now CYCLES through the buckets and names the + // culprit instead of only saying that one exists. + // + // Each bucket gets ~1.5s. Its identity is shown on the LEFT column + // (LEDs 0/2/4) as a 3-bit number, and its peak as a fraction of budget on + // the RIGHT column (LEDs 1/3/5), one LED per third. A bucket that alone + // exceeds budget flashes its right column. + // + // left 000 = Total 001 = Engine 010 = Voices + // 011 = Outputs 100 = Usb + void profileReadout() + { + if (++profDiv_ < 700) return; // ~68Hz update + profDiv_ = 0; + + if (++profPhase_ >= 100) // ~1.5s per bucket + { + profPhase_ = 0; + profBucket_ = (profBucket_ + 1) % kNumProf; + } + profFlash_ = !profFlash_; + + const ProfStat &s = gProf[profBucket_]; + uint32_t frac = static_cast( + static_cast(s.peak) * 65536u / kCycleBudget); + + // Left column: which bucket, in binary. + LedOn(0, (profBucket_ & 1) != 0); + LedOn(2, (profBucket_ & 2) != 0); + LedOn(4, (profBucket_ & 4) != 0); + + // Right column: that bucket's peak, a third of the budget per LED. + if (frac >= 65536) + { + // Over budget on its own — flash so it is unmistakable. + LedOn(1, profFlash_); LedOn(3, profFlash_); LedOn(5, profFlash_); + } + else + { + int lit = static_cast((frac * 3) >> 16); + LedOn(1, lit > 0); + LedOn(3, lit > 1); + LedOn(5, lit > 2); + } + + // The peaks used to be cleared by a Down tap, which now cycles the mode — + // the two conflicted, so a tap both changed the ecosystem and threw away + // the numbers for it. Entering USB mode resets them instead + // (see enterUsbMode), which is the moment you stop playing and go to read + // them anyway. + } + + int profDiv_ = 0; + int profPhase_ = 0; + int profBucket_ = 0; + bool profFlash_ = false; + + // PulseOut2 is protected, so the gate hook goes through a static trampoline + // holding the one card instance. Only compiled in profile builds, and it + // takes over Pulse Out 2 — do not release a build with this on. + static BioMimicryCard *profCard_; + static void ProfGate(bool on) { if (profCard_) profCard_->PulseOut2(on); } +public: + void EnableProfileGate() { profCard_ = this; bio::gProfGate = &ProfGate; } +private: +#endif + + // ------------------------------------------------------------------- + void __not_in_flash_func(controlTick)() + { + // --- Switch: tap cycles the mode, HOLD enters USB mode. --- + // + // The mode change fires on RELEASE, not on press. It used to fire on the + // first tick Down was seen, which cannot coexist with a hold: beginning + // the hold would also cycle the ecosystem out from under you. Releasing + // before the hold completes is a tap; holding past it is consumed. + Switch sw = SwitchVal(); + // Republished for core 1, which must never call SwitchVal() itself: + // ComputerCard returns a member that is not declared volatile, so core 1 + // would cache it forever and the switch would appear to stop working. + gXC.switchMirror = static_cast(sw); + + if (sw == Switch::Down) + { + // Do not start counting until the boot splash has finished AND the + // switch has been released at least once. Without the second + // condition, holding at power-on to pick Drone and simply not letting + // go fast enough would drop you straight into USB mode ~3.5s later — + // booting an instrument should never hand the card to the uploader. + if (splash_ == 0 && !holdFired_ && downTicks_ < kHoldTicks) downTicks_++; + + if (downTicks_ == kHoldTicks && !holdFired_) + { + holdFired_ = true; + if (WebUI::usbMode) + { + // Already in USB mode: hold again to leave. Entering by + // accident mid-set and being told to power-cycle is not an + // acceptable answer, and a reboot is the honest way out — + // TinyUSB cannot be cleanly unwound, and the card reboots + // after a successful upload anyway, so the path is proven. + // Any uploaded samples are already committed to flash. + leaveUsbMode(); + } + else + { + // Hand the card over to USB, and consume the tap. + enterUsbMode(); + } + } + } + else + { + if (downTicks_ > 0 && !holdFired_) + { + // A short tap, now released: next ecosystem. Core 1 owns mode_ + // and the engine instances, so this is a REQUEST rather than the + // change itself — same monotonic-counter discipline as the edges. + gXC.modeCycleReq = gXC.modeCycleReq + 1; + clearOutputs(); + + // Clear the peaks with the mode change, so a reading always + // describes the ecosystem you actually played rather than the + // worst of every mode you passed through on the way to it. + // The old Down-tap reset did this, and dropping it in the switch + // rework left no way to measure one mode without a power cycle. + BIO_PROFILE_RESET(); + } + downTicks_ = 0; + holdFired_ = false; + routing_ = (sw == Switch::Up) ? Routing::Discrete : Routing::Summed; + gXC.routing = static_cast(routing_); + } + + // In USB mode the ecosystem is stopped: no physics, no new notes, no + // gates. The switch above is still read (that is the whole reason this + // function keeps running) and the voices are left to decay on their own. + if (WebUI::usbMode) return; + + // The physics used to run here, inline, inside the DMA interrupt. They + // are on core 1 now — see physicsTick(). Core 0 keeps only what needs the + // 48kHz deadline or the hardware core 0 owns: + // - the switch, above (ComputerCard's switchVal is not volatile) + // - draining the trigger ring into voices_.note(), below + // - applying the gate/CV targets core 1 published + // Everything else crosses through gXC and gTrig. + // + // Note-ons are drained one per sample elsewhere, so this tick only + // applies the gate and CV decisions core 1 made. + applyOutputTargets(); + } + +private: + // ------------------------------------------------------------------- + /// Turn queued note-ons into voices. Runs on core 0 at the control rate. + /// + /// note() writes ~20 fields of Voice including a 128-entry ks[] buffer, and + /// render() reads and mutates the same struct every sample — so this cannot + /// move to core 1 whatever the timing says. The ring is what crosses instead. + void __not_in_flash_func(drainOneTrigger)() + { + if (gTrig.tail == gTrig.head) return; + + TrigWord w = gTrig.slot[gTrig.tail & (kTrigRingSize - 1)]; + gTrig.tail = gTrig.tail + 1; + voices_.note(TrigAgent(w), static_cast(TrigMode(w)), kQ16One, + TrigVariation(w), static_cast(TrigMember(w))); + } + + // ------------------------------------------------------------------- + /// Copy the gate and CV decisions core 1 made onto core 0's own timers. + void __not_in_flash_func(applyOutputTargets)() + { + population_ = gXC.population; + routing_ = static_cast(gXC.routing); + + uint32_t seq = gXC.pulseSeq; + if (seq != lastPulseSeq_) + { + lastPulseSeq_ = seq; + uint8_t pa = gXC.pulseArm, ca = gXC.cvTrigArm; + if (pa & 1) pulseTimer_[0] = kGateSamples; + if (pa & 2) pulseTimer_[1] = kGateSamples; + if (ca & 1) cvTimer_[0] = kGateSamples; + if (ca & 2) cvTimer_[1] = kGateSamples; + } + cvLevel_[0] = gXC.cvTarget[0]; + cvLevel_[1] = gXC.cvTarget[1]; + + uint32_t act = gXC.activitySeq; + if (act != lastActivitySeq_) { lastActivitySeq_ = act; activity_ = kQ16One; } + } + + // ------------------------------------------------------------------- + /// One physics tick. Runs on CORE 1, paced off core 0's sample counter. + /// + /// Core 1 must never call any ComputerCard accessor except the volatile ones + /// (KnobVal, CVIn1/2, Connected). SwitchVal() in particular returns a member + /// that is NOT declared volatile, so core 1 would cache it forever and the + /// switch would appear to stop working — read gXC.switchMirror instead. +public: + void __not_in_flash_func(physicsTick)() + { + // Mode changes are requested by core 0 (it owns the switch) and performed + // here, because this core owns mode_ and the engine instances. + uint32_t mc = gXC.modeCycleReq; + if (mc != lastModeReq_) + { + lastModeReq_ = mc; + mode_ = static_cast((mode_ + 1) % kNumModes); + engines_[mode_]->reset(seed_ ^ (mode_ * 2654435761u)); + gXC.mode = mode_; + } + + // --- Knobs, with CV modulating Main and X. --- + int32_t physics = knob_to_q16(KnobVal(Knob::Main)); + if (Connected(Input::CV1)) physics += CVIn1() << 4; + physics = clampQ16(physics); + + int32_t popRaw = knob_to_q16(KnobVal(Knob::X)); + if (Connected(Input::CV2)) popRaw += CVIn2() << 4; + popRaw = clampQ16(popRaw); + + // Edges arrive as monotonic counters that only core 0 writes, compared + // against core-1-private last-seen values. A bool set at 48kHz and + // cleared at 1.5kHz would be a lost-update race across cores — and it + // already collapsed two edges inside one tick into one. + uint32_t sSeq = gXC.spookSeq, cSeq = gXC.clockSeq, tSeq = gXC.startleSeq; + bool spookEdge = (sSeq != lastSpookSeq_) || (tSeq != lastStartleSeq_); + bool clockEdge = (cSeq != lastClockSeq_); + lastSpookSeq_ = sSeq; lastClockSeq_ = cSeq; lastStartleSeq_ = tSeq; + + // Clock tracking for Pulse In 2. The period between edges lets the + // engines entrain to an external tempo rather than merely be nudged by + // it. It ages out after ~3s of silence so a stopped clock releases the + // ecosystem back to its own timing instead of freezing it. + if (clockAge_ < 3 * kCtrlRate) clockAge_++; + else clockPeriod_ = 0; + + if (clockEdge) + { + if (clockAge_ >= 2 && clockAge_ < 3 * kCtrlRate) clockPeriod_ = clockAge_; + clockAge_ = 0; + } + + Ctrl c; + c.physics = physics; + c.chaos = knob_to_q16(KnobVal(Knob::Y)); + c.population = 1 + (popRaw * kNumAgents - 1) / kQ16One; + if (c.population < 1) c.population = 1; + if (c.population > kNumAgents) c.population = kNumAgents; + // A sharp transient on Audio In 2 counts as a spook, so the ecosystem + // reacts to the rest of the patch and not only to a patched gate. + c.spook = spookEdge; + c.clock = clockEdge; + c.clockPeriod = clockPeriod_; + c.loudness = gXC.loudness; + gXC.population = static_cast(c.population); + + // --- Physics. --- + EngineOut out; + out.triggers = 0; + out.global = 0; + for (int i = 0; i < kNumAgents; i++) { out.state[i] = 0; out.member[i] = 0; } + engines_[mode_]->tick(c, out); + + // Agents beyond the population never sound or fire. + uint8_t mask = out.triggers & static_cast((1 << c.population) - 1); + + // --- Voices. --- + // + // Note-ons cross to core 0 as packed words rather than as calls. note() + // writes ~20 fields of Voice including a 128-entry ks[] buffer while + // render() mutates the same struct every sample, so calling it from here + // would tear the struct — a half-applied note-on gives a new pcm pointer + // with an old length, which is an out-of-bounds read, not a glitch. + for (int i = 0; i < kNumAgents; i++) + { + if (!(mask & (1 << i))) continue; + + uint32_t h = gTrig.head; + uint32_t n = h - gTrig.tail; + if (n >= kTrigRingSize) + { + // Ring full means core 0 is not draining, i.e. still overrunning. + // Drop the NEWEST: the ones already queued are committed to + // sound, and truncating a hit mid-attack is worse than losing + // the latest. A non-zero count here says the split is not working. + gTrig.dropped++; + continue; + } + gTrig.slot[h & (kTrigRingSize - 1)] = + PackTrig(i, mode_, out.member[i], out.state[i]); + // Payload stored before head moves, so core 0 can never see a slot + // that is not finished. The barrier makes that ordering explicit + // rather than relying on the M0+ not reordering it. + __dmb(); + gTrig.head = h + 1; + } + + // Smoothed trigger density for CV 1. Computed BEFORE the routing below, + // which reads it — it used to be updated forty lines later, so CV 1 + // carried the PREVIOUS tick's value and read zero on the first one. Each firing agent pushes it up; + // it leaks away continuously, so a busy patch sits high and a sparse one + // hovers near zero. Shift 7 at the 1.5kHz control rate is a time constant + // of about 85ms — fast enough to follow a cascade, slow enough that it + // reads as a control voltage rather than a stream of blips. + int32_t d = density_; + d += (popcount4(mask) * (kQ16One / 4) - d) >> 7; + if (d < 0) d = 0; + if (d > kQ16One) d = kQ16One; + density_ = d; + gXC.density = d; + + // The same envelope per agent, for alt boot's Discrete routing: each + // pulse out gets a CV describing how busy THAT voice is. + for (int a = 0; a < kNumAgents; a++) + { + int32_t da = densityAgent_[a]; + da += (((mask >> a) & 1) * kQ16One - da) >> 7; + if (da < 0) da = 0; + if (da > kQ16One) da = kQ16One; + densityAgent_[a] = da; + gXC.densityAgent[a] = da; + } + + // --- Trigger outputs. --- + // + // Decided here, applied by core 0: this core does not own the gate + // timers, which are serviced at 48kHz. pulseSeq is what tells core 0 + // there is something new to arm. + uint8_t pulseArm = 0, cvArm = 0; + // CV 2 carries a pitch in alt boot Summed, and a pitch CV must STEP + // between values rather than glide, so the usual slew is bypassed. + bool stepCv1 = false; + // Seeded from what was last published, not from core 0's cvLevel_ — this + // core does not own that. Discrete routing leaves them alone, so they + // keep whatever the last Summed pass set. + int32_t cv0 = gXC.cvTarget[0], cv1 = gXC.cvTarget[1]; + + Routing routing = static_cast(gXC.routing); + + if (gXC.bootMode == static_cast(BootMode::Drone)) + { + // ALT BOOT: the same ecosystems, but as an INSTRUMENT rather than a + // menagerie. Samples play at their recorded pitch (see VoiceBank's + // `tuned`), so uploading four notes lets Horses gallop them and Rain + // drip them — and the control outputs describe the SEQUENCE rather + // than the ecology. + // + // Both CV outs are continuous in both switch positions. A mode meant + // for pitched material should not turn half its control outputs into + // 5V blips. + if (routing == Routing::Discrete) + { + // Two independent voices, each with its own trigger and its own + // density: agent 1 on Pulse 1 with its density on CV 1, agent 2 + // on Pulse 2 with its density on CV 2. + if (mask & 0b0001) pulseArm |= 1; + if (mask & 0b0010) pulseArm |= 2; + cv0 = gXC.densityAgent[0]; + cv1 = gXC.densityAgent[1]; + } + else + { + // Everything on Pulse 1, and Pulse 2 is that DIVIDED BY FOUR — a + // bar line against the beat, rather than the cluster accent + // Rhythm uses. Free downbeat for anything that wants one. + if (mask) + { + pulseArm |= 1; + if (++pulseDiv_ >= 4) { pulseDiv_ = 0; pulseArm |= 2; } + } + cv0 = gXC.density; + + // CV 2 = WHICH SAMPLE just fired, as 1V/oct: one semitone per + // round-robin slot, so slot 0 is 0V and slot 7 is 583mV. An + // external oscillator tracks the sequence the ecosystem is + // playing. + int slot = voices_.lastSlot(); + cv1 = (slot >= 0) + ? static_cast((slot * 1000 * kQ16One) / (12 * 5000)) + : 0; + stepCv1 = true; // no slew: a pitch CV must step + } + } + else if (routing == Routing::Discrete) + { + if (mask & 0b0001) pulseArm |= 1; + if (mask & 0b0010) pulseArm |= 2; + if (mask & 0b0100) cvArm |= 1; + if (mask & 0b1000) cvArm |= 2; + } + else + { + // Summed: everything OR'd onto Pulse 1; Pulse 2 marks a "cluster" + // (two or more agents firing at once) as an accent. + if (mask) pulseArm |= 1; + if (popcount4(mask) >= 2) pulseArm |= 2; + + // CV outs carry continuous state instead of triggers. + cv0 = out.state[0]; + cv1 = out.global; + } + + gXC.cvTarget[0] = cv0; + gXC.cvTarget[1] = cv1; + gXC.cvStep = stepCv1 ? 2 : 0; // bit1: CV 2 is a stepped pitch + if (pulseArm || cvArm) + { + gXC.pulseArm = pulseArm; + gXC.cvTrigArm = cvArm; + __dmb(); // arms visible before the sequence bumps + gXC.pulseSeq = gXC.pulseSeq + 1; + } + + // Triggers feed the activity glow. Published as a counter rather than a + // level: core 0's uiTick owns the decay, so nothing shares a mutable + // brightness between the cores. + if (mask) gXC.activitySeq = gXC.activitySeq + 1; + + seed_ = seed_ * 1664525u + 1013904223u; + } + + // ------------------------------------------------------------------- + // LED housekeeping, run on a different sample from the engine so their + // costs never land in the same 20.8us slot. + void __not_in_flash_func(uiTick)() + { + activity_ = fast_exp_decay(activity_, 3); + + // Leave the LEDs alone while the boot splash is still showing. + if (splash_ != 0) return; + + // Holding the switch fills the LEDs left to right, so the two-second + // hold is something you watch arrive rather than count in your head. + // Releasing before the fill completes is a tap and cycles the mode. + // + // This is checked BEFORE the usbMode branch below, so the same fill also + // shows the hold that LEAVES usb mode — the way out looks like the way in. + if (downTicks_ > 0) + { + int lit = static_cast((downTicks_ * 6) / kHoldTicks); + for (int i = 0; i < 6; i++) LedOn(i, i < lit); + return; + } + + // In USB mode all six stay lit: the card is not performing. Hold again + // to leave. An upload overrides this with its own stage count, driven + // from core 1. + if (WebUI::usbMode) + { + for (int i = 0; i < 6; i++) LedOn(i, true); + return; + } + + // Six modes on six LEDs leaves none spare for an activity indicator, so + // the two jobs share: the mode's own LED sits at a dim "you are here" + // glow and flares to full on every trigger. One light, both meanings. + for (int i = 0; i < kNumModes; i++) + { + if (i == mode_) + { + constexpr int32_t kIdleGlow = kQ16One / 5; + int32_t level = kIdleGlow + + mul_q16(activity_, kQ16One - kIdleGlow); + LedBrightness(i, static_cast(level >> 4)); + } + else + { + LedOff(i); + } + } + } + + // ------------------------------------------------------------------- + // 48kHz: the ecosystem listens to the rest of the patch. + // + // Audio In 1 is LOUDNESS — a fast envelope follower. A loud room is a + // disturbed one: it spooks the geese, silences the cicadas and startles the + // herd. Audio In 2 is DISTURBANCE — the same signal differentiated, so it + // responds to transients rather than level, which is what actually alarms an + // animal. Both only act when something is patched in. + void __not_in_flash_func(listen)() + { + if (Connected(Input::Audio1)) + { + int32_t a = AudioIn1(); + if (a < 0) a = -a; + // Fast attack, slow release: an envelope that tracks how alive the + // room is rather than the waveform itself. + // << 5, not << 4. Audio in is signed 12-bit, so |a| tops out at 2048 + // and a << 4 could only ever reach half of Q16 - a full-scale signal + // read as "half loud" and nothing could reach the top of the range. + if (a > loudness_) loudness_ = slew(loudness_, a << 5, 3); + else loudness_ = slew(loudness_, a << 5, 9); + if (loudness_ > kQ16One) loudness_ = kQ16One; + } + else loudness_ = 0; + + // PUBLISH IT. The engines read gXC.loudness, and until this line nothing + // ever wrote it - so Audio In 1 did nothing at all in every mode, however + // hot the signal. listen() stayed on core 0 when the physics moved to + // core 1 (Stage 3), and the value was simply never carried across; the + // field was declared in crosscore.h with core 0 named as its writer, and + // the writer was never written. + // + // Audio In 2 survived the same split because it publishes an edge counter + // inline below, which is why Disturb worked and Loudness did not. + gXC.loudness = loudness_; + + if (Connected(Input::Audio2)) + { + int32_t a = AudioIn2(); + int32_t d = a - lastAudio2_; + lastAudio2_ = a; + if (d < 0) d = -d; + // A sharp transient arms a startle that the control tick consumes. + if ((d << 4) > kQ16One / 3) { startle_ = true; gXC.startleSeq++; } + } + else lastAudio2_ = 0; + } + + // ------------------------------------------------------------------- + // 48kHz: run down the gate widths and hold the CV outs. + void __not_in_flash_func(serviceOutputs)() + { + // Pulse ins are edge-detected at audio rate so a short trigger is never + // missed between control ticks. + // + // The seq counters are the cross-core form of the same thing, published + // alongside the flags until the physics actually move to core 1. A + // counter cannot lose an edge the way a bool can, so two pulses inside + // one control tick stop collapsing into one. + if (PulseIn1RisingEdge()) { spookPending_ = true; gXC.spookSeq++; } + if (PulseIn2RisingEdge()) { clockPending_ = true; gXC.clockSeq++; } + + PulseOut1(pulseTimer_[0] > 0); + PulseOut2(pulseTimer_[1] > 0); + if (pulseTimer_[0] > 0) pulseTimer_[0]--; + if (pulseTimer_[1] > 0) pulseTimer_[1]--; + + for (int i = 0; i < 2; i++) + { + // Only Rhythm's Discrete routing uses the CV outs as triggers + // (agents 3 and 4, which have no pulse out of their own). Drone + // always carries continuous density instead, in both positions. + bool cvAsTrigger = (boot_ == BootMode::Rhythm) + && (routing_ == Routing::Discrete); + // CVOutMillivolts calls MillivoltsToDAC, which is FLASH-RESIDENT in + // the vendored ComputerCard. Calling it twice per sample at 48kHz + // meant two XIP reads in the hot loop while core 1 contends for the + // same bus. It is only called now when the value actually changes — + // the CV outs move at control rate, so the vast majority of samples + // were re-sending a number the DAC already had. + int32_t mv; + if (cvAsTrigger) + { + // CV out as a trigger: a calibrated 5V blip. + mv = cvTimer_[i] > 0 ? 5000 : 0; + if (cvTimer_[i] > 0) cvTimer_[i]--; + } + else + { + // CV out as continuous state, 0-5V. Slewed a little so stepped + // control-rate updates don't click. + // Stepped outputs bypass the slew entirely: gliding between + // semitones turns a sequence into portamento. + if (gXC.cvStep & (1u << i)) cvSmooth_[i] = cvLevel_[i]; + else cvSmooth_[i] = slew(cvSmooth_[i], cvLevel_[i], 4); + mv = (cvSmooth_[i] * 5000) >> 16; + } + if (mv != cvLastMv_[i]) + { + cvLastMv_[i] = mv; + CVOutMillivolts(i, mv); + } + } + } + + void clearOutputs() + { + pulseTimer_[0] = pulseTimer_[1] = 0; + cvTimer_[0] = cvTimer_[1] = 0; + cvLevel_[0] = cvLevel_[1] = 0; + } + + /// Hand the card over to USB, for sample management. One-way: leaving costs + /// a power cycle, which is the honest trade for not running TinyUSB at all + /// while the card is being played. + /// + /// The ecosystem stops here, but the VOICES are deliberately left alone so + /// whatever is sounding decays naturally instead of being cut off. Rhythm + /// voices fall away on their own envelopes and Drone grains run off the end + /// of their samples, so the card goes quiet by itself within a second or two. + void __not_in_flash_func(enterUsbMode)() + { + clearOutputs(); + + // Deliberately NOT resetting the profiler here. Entering USB mode is + // exactly the moment you stop playing in order to go and read the + // numbers, so wiping them on entry would guarantee a reading of zero. + // They stay sticky until MSG_PROF_GET replies, which is what the web UI + // tells the user: play the mode, then hold, connect and read. + WebUI::usbMode = true; // core 1 picks this up and calls tusb_init() + } + + /// Leave USB mode, by rebooting. + /// + /// Reached by holding the switch again, so entering by accident costs two + /// seconds rather than a trip to the power switch. A reboot rather than an + /// unwind: TinyUSB has no reliable teardown, the sample pointers the engine + /// cached may be stale after an upload, and a restart resolves everything + /// cleanly at boot — which is what an upload already does. + void __not_in_flash_func(leaveUsbMode)() + { + AudioOut1(0); + AudioOut2(0); + PulseOut1(false); + PulseOut2(false); + watchdog_reboot(0, 0, 0); + } + + static int32_t clampQ16(int32_t v) + { + if (v < 0) return 0; + if (v > kQ16One) return kQ16One; + return v; + } + + static int popcount4(uint8_t m) + { + return ((m >> 0) & 1) + ((m >> 1) & 1) + ((m >> 2) & 1) + ((m >> 3) & 1); + } + + // ------------------------------------------------------------------- + HorsesEngine horses_; + GeeseEngine geese_; + FrogsEngine frogs_; + RainEngine rain_; + MeteorsEngine meteors_; + CicadasEngine cicadas_; + Engine *engines_[kNumModes]; + + VoiceBank voices_; + WebUI webui_; + + uint8_t mode_ = 0; + Routing routing_ = Routing::Discrete; + int population_ = 1; + + int ctrlDiv_ = 0; + // Switch hold tracking. downTicks_ counts control ticks the switch has been + // held Down; holdFired_ marks that the hold already did its job, so the + // release is not also read as a tap. + int32_t downTicks_ = 0; + bool holdFired_ = false; + + // Core-1-private last-seen values for the monotonic counters core 0 writes. + // Never shared: only this core reads or writes them, which is what makes the + // counter scheme a strictly single-writer arrangement. + uint32_t lastSpookSeq_ = 0, lastClockSeq_ = 0, lastStartleSeq_ = 0; + uint32_t lastModeReq_ = 0; + // Core-0-private, for the counters core 1 writes. + uint32_t lastPulseSeq_ = 0, lastActivitySeq_ = 0; + bool spookPending_ = false; + bool clockPending_ = false; + int32_t clockPeriod_ = 0; // control ticks between Pulse In 2 edges + int32_t clockAge_ = 0; // ticks since the last edge + int32_t loudness_ = 0; // Q16 envelope of Audio In 1 + // Last value actually written to each CV out, so the flash-resident + // MillivoltsToDAC is only called when it changes. Seeded to an impossible + // value so the first real write always goes through. + int32_t cvLastMv_[2] = { -1, -1 }; + int32_t lastAudio2_ = 0; + bool startle_ = false; + BootMode boot_ = BootMode::Rhythm; + int32_t activity_ = 0; + // Smoothed trigger density, core-1 private; published as gXC.density. + int32_t density_ = 0; + int32_t densityAgent_[kNumAgents] = {}; + // Alt boot Summed: Pulse 2 is Pulse 1 divided by four, a bar line. + int pulseDiv_ = 0; + uint32_t seed_ = 0xC0FFEEu; + + int pulseTimer_[2] = { 0, 0 }; + int cvTimer_[2] = { 0, 0 }; + int32_t cvLevel_[2] = { 0, 0 }; + int32_t cvSmooth_[2] = { 0, 0 }; + + int bootPhase_ = 0; + int splash_ = 0; // boot-mode announcement countdown +}; + +#ifdef BIO_PROFILE +BioMimicryCard *BioMimicryCard::profCard_ = nullptr; +#endif + +int main() +{ + // 192MHz, up from the stock 125. This is the honest fix for the last of the + // timing: the budget is clock/48000, so it goes 2604 -> 4000 cycles per + // sample, and full Geese at 2652 stops being 102% of budget and becomes 66%. + // + // Done here, FIRST, because BioMimicryCard's constructor launches core 1 and + // the SDK requires the clock to be settled before that. + // + // The overvolt is what makes 192 safe rather than hopeful, and it is proven + // on this exact hardware: ../WorkshopZX runs 200MHz at 1.15V. 192 is a + // deliberate step below that — it clears the budget with room to spare, so + // there is no reason to spend the extra margin. + // + // NOTE: flash access does NOT scale with the core clock. XIP reads cost more + // core cycles at 192MHz than at 125, so the flash-bound paths (PCM playback) + // will not drop by the full 1.54x. The budget still grows by it, so this is + // a win either way — but expect the measured improvement to be less than the + // clock ratio, and do not read that as a fault. + vreg_set_voltage(VREG_VOLTAGE_1_15); + sleep_ms(2); // let the regulator settle before the PLL + set_sys_clock_khz(192000, true); + + BIO_PROFILE_INIT(); + static BioMimicryCard card; + card.EnableNormalisationProbe(); +#ifdef BIO_PROFILE + card.EnableProfileGate(); // Pulse Out 2 mirrors the callback duration +#endif + card.Run(); +} diff --git a/releases/62_BioMimicry/pico_sdk_import.cmake b/releases/62_BioMimicry/pico_sdk_import.cmake new file mode 100644 index 000000000..d493cc23a --- /dev/null +++ b/releases/62_BioMimicry/pico_sdk_import.cmake @@ -0,0 +1,121 @@ +# This is a copy of /external/pico_sdk_import.cmake + +# This can be dropped into an external project to help locate this SDK +# It should be include()ed prior to project() + +# Copyright 2020 (c) 2020 Raspberry Pi (Trading) Ltd. +# +# 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 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. +# +# 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. + +if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH)) + set(PICO_SDK_PATH $ENV{PICO_SDK_PATH}) + message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')") +endif () + +if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT)) + set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT}) + message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')") +endif () + +if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH)) + set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH}) + message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')") +endif () + +if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_TAG} AND (NOT PICO_SDK_FETCH_FROM_GIT_TAG)) + set(PICO_SDK_FETCH_FROM_GIT_TAG $ENV{PICO_SDK_FETCH_FROM_GIT_TAG}) + message("Using PICO_SDK_FETCH_FROM_GIT_TAG from environment ('${PICO_SDK_FETCH_FROM_GIT_TAG}')") +endif () + +if (PICO_SDK_FETCH_FROM_GIT AND NOT PICO_SDK_FETCH_FROM_GIT_TAG) + set(PICO_SDK_FETCH_FROM_GIT_TAG "master") + message("Using master as default value for PICO_SDK_FETCH_FROM_GIT_TAG") +endif() + +set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK") +set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable") +set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK") +set(PICO_SDK_FETCH_FROM_GIT_TAG "${PICO_SDK_FETCH_FROM_GIT_TAG}" CACHE FILEPATH "release tag for SDK") + +if (NOT PICO_SDK_PATH) + if (PICO_SDK_FETCH_FROM_GIT) + include(FetchContent) + set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR}) + if (PICO_SDK_FETCH_FROM_GIT_PATH) + get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}") + endif () + FetchContent_Declare( + pico_sdk + GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk + GIT_TAG ${PICO_SDK_FETCH_FROM_GIT_TAG} + ) + + if (NOT pico_sdk) + message("Downloading Raspberry Pi Pico SDK") + # GIT_SUBMODULES_RECURSE was added in 3.17 + if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.17.0") + FetchContent_Populate( + pico_sdk + QUIET + GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk + GIT_TAG ${PICO_SDK_FETCH_FROM_GIT_TAG} + GIT_SUBMODULES_RECURSE FALSE + + SOURCE_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-src + BINARY_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-build + SUBBUILD_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-subbuild + ) + else () + FetchContent_Populate( + pico_sdk + QUIET + GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk + GIT_TAG ${PICO_SDK_FETCH_FROM_GIT_TAG} + + SOURCE_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-src + BINARY_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-build + SUBBUILD_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-subbuild + ) + endif () + + set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR}) + endif () + set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE}) + else () + message(FATAL_ERROR + "SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git." + ) + endif () +endif () + +get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}") +if (NOT EXISTS ${PICO_SDK_PATH}) + message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found") +endif () + +set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake) +if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE}) + message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK") +endif () + +set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE) + +include(${PICO_SDK_INIT_CMAKE_FILE}) diff --git a/releases/62_BioMimicry/profile.h b/releases/62_BioMimicry/profile.h new file mode 100644 index 000000000..385e7e166 --- /dev/null +++ b/releases/62_BioMimicry/profile.h @@ -0,0 +1,158 @@ +// profile.h — cycle-accurate timing for ProcessSample. +// +// WHY THIS EXISTS +// +// ProcessSample() runs inside the DMA interrupt handler (ComputerCard:: +// AudioCallback), and controlTick() is called INLINE from it. So on the one +// sample in kCtrlDiv where the physics run, the whole engine still has to finish +// inside that single 20.83us slot. Dividing the physics by 32 lowers the AVERAGE +// load; it does not relax the deadline. +// +// This matters because the card's own docs previously quoted "~55 cycles/sample +// amortised", which is throughput — the wrong quantity. What decides whether +// audio glitches is the WORST SINGLE SAMPLE, and that had never been measured. +// +// HOW +// +// The Cortex-M0+ SysTick counter counts CPU cycles directly, so this gives exact +// numbers with no external equipment and no scope. It is a 24-bit DOWN counter, +// which is ample: the whole budget is 4000 cycles at 192MHz. +// +// Everything here compiles to nothing unless BIO_PROFILE is defined, so the +// released firmware is byte-identical to a build without it. + +#pragma once +#include + +#ifdef BIO_PROFILE +#include "hardware/structs/systick.h" +#endif + +namespace bio { + +/// Cycles available per sample. Overrun this and the next DMA interrupt arrives +/// while we are still in the handler. +/// +/// Derived from the clock rather than hard-coded, so the overclock in main() +/// cannot silently leave the profiler reporting percentages of the wrong number. +constexpr uint32_t kClockHz = 192000000u; // see main(): 192MHz +constexpr uint32_t kCycleBudget = kClockHz / 48000u; // 4000 + +#ifdef BIO_PROFILE + +/// What we time. Total is the whole callback; the rest are its phases. +// Named for what they now measure. "Engine" no longer means the physics: after +// v1.1.0 those run on core 1, and this is core 0's remaining control work. +enum class Prof : uint8_t { Total = 0, Ctrl, Voices, Outputs, Notes, Count }; +constexpr int kNumProf = static_cast(Prof::Count); + +struct ProfStat +{ + uint32_t last; // most recent measurement, cycles + uint32_t peak; // worst ever seen + uint32_t overruns; // samples where Total exceeded the budget +}; + +/// One global block — this is a single-threaded interrupt context, so no +/// synchronisation is needed. `inline` gives it a definition here without +/// needing a .cpp (C++17). +inline ProfStat gProf[kNumProf] = {}; + +/// Set true once the card has finished booting. Until then measurements are +/// discarded: voices_.init() clears four 128-sample Karplus-Strong buffers and +/// 32 grain slots on a SINGLE sample at the end of the boot window, which +/// certainly overruns — and since `overruns` is cumulative, that one spike would +/// otherwise latch the overrun indicator on forever and look like a steady-state +/// fault in every mode. +inline bool gProfArmed = false; + +/// Set `gProfGate` to a function that drives a pulse out, and the Total scope +/// will raise it for the duration of the callback — a scope then shows the duty +/// cycle directly, confirming the SysTick numbers with independent hardware. +inline void (*gProfGate)(bool) = nullptr; + +/// Start SysTick free-running at the core clock. Call once before Run(). +inline void ProfileInit() +{ + systick_hw->csr = 0; // disable while reconfiguring + systick_hw->rvr = 0x00FFFFFF; // full 24-bit reload + systick_hw->cvr = 0; // clear (writing any value clears) + // ENABLE | CLKSOURCE=core clock. No TICKINT: we never want an interrupt, + // only a counter to read. + systick_hw->csr = 0x5; + for (int i = 0; i < kNumProf; i++) gProf[i] = { 0, 0, 0 }; +} + +/// RAII scope: reads the counter at entry and exit and records the delta. +class ProfileScope +{ +public: + explicit ProfileScope(Prof which) + : which_(which), start_(systick_hw->cvr) + { + if (which_ == Prof::Total && gProfGate) gProfGate(true); + } + + ~ProfileScope() + { + if (!gProfArmed) + { + if (which_ == Prof::Total && gProfGate) gProfGate(false); + return; + } + uint32_t now = systick_hw->cvr; + // SysTick counts DOWN, so elapsed = start - now, and a single wrap + // past zero is corrected by the 24-bit mask. A scope longer than + // 2^24 cycles (134ms) would alias, which cannot happen inside a + // 20.83us callback. + uint32_t elapsed = (start_ - now) & 0x00FFFFFF; + + ProfStat &s = gProf[static_cast(which_)]; + s.last = elapsed; + if (elapsed > s.peak) s.peak = elapsed; + if (which_ == Prof::Total) + { + if (elapsed > kCycleBudget) s.overruns++; + if (gProfGate) gProfGate(false); + } + } + +private: + Prof which_; + uint32_t start_; +}; + +/// Worst-case Total as a fraction of the budget, Q16. >65536 means it overran. +inline uint32_t ProfilePeakFrac() +{ + uint64_t p = static_cast(gProf[0].peak) * 65536u / kCycleBudget; + return static_cast(p > 0xFFFFFFFFu ? 0xFFFFFFFFu : p); +} + +inline bool ProfileOverran() { return gProf[0].overruns > 0; } + +/// Forget the peaks — lets you measure one mode at a time without a reboot. +inline void ProfileReset() +{ + for (int i = 0; i < kNumProf; i++) { gProf[i].peak = 0; gProf[i].overruns = 0; } +} + +/// Begin recording. Called once the boot-time allocation spike is behind us. +inline void ProfileArm() { ProfileReset(); gProfArmed = true; } + +#define BIO_PROFILE_INIT() ::bio::ProfileInit() +#define BIO_PROFILE_ARM() ::bio::ProfileArm() +#define BIO_PROFILE_SCOPE(w) ::bio::ProfileScope _bioProf##__LINE__(::bio::Prof::w) +#define BIO_PROFILE_RESET() ::bio::ProfileReset() + +#else // --------------------------------------------------------------- + +// Not profiling: every macro vanishes, so the normal build is unaffected. +#define BIO_PROFILE_INIT() ((void)0) +#define BIO_PROFILE_ARM() ((void)0) +#define BIO_PROFILE_SCOPE(w) ((void)0) +#define BIO_PROFILE_RESET() ((void)0) + +#endif + +} // namespace bio diff --git a/releases/62_BioMimicry/samples/README.md b/releases/62_BioMimicry/samples/README.md new file mode 100644 index 000000000..883cc7ee4 --- /dev/null +++ b/releases/62_BioMimicry/samples/README.md @@ -0,0 +1,50 @@ +# Samples + +The card's voice: 8-bit signed mono 48 kHz one-shots, baked into the firmware at +build time by `tools/mksamples.py`. + +## Provenance + +Sourced from [**Pixabay**](https://pixabay.com) and redistributed here under the +[Pixabay Content License](https://pixabay.com/service/license-summary/), which +permits use and redistribution without attribution. They are committed to the +repository because without them a fresh clone builds a silent instrument. + +**These recordings are not covered by the card's CC BY 4.0 licence** — they are +not the card author's to relicense. The [LICENSE](../LICENSE) at the repository +root covers the source code only. + +Levels were matched across the whole library by `tools/importwav.py` — RMS rather +than peak, because a peak is usually a single transient and peak-normalising +leaves quiet-bodied recordings still sounding quiet. Corrections ranged from +−15.5 dB to +20.6 dB; the result sits within 1.07× across all 41 files. + +## Naming + +`_.raw`, where the variant is the round robin: + +| Mode | Variants | What a variant is | +|---|---|---| +| `horses` | 1–4 | **The hooves** — 1 left hind, 2 left fore, 3 right hind, 4 right fore | +| `geese` | 1–8 | Birds of different size | +| `frogs` | 1–8 | Species in the chorus | +| `rain` | 1–8 | Drip sizes | +| `meteors` | 1–5 | Distances | +| `cicadas` | 1–8 | Insects | + +**Horses is the one that matters.** The firmware asks for the hoof that actually +landed, and hind hooves strike lower and heavier than fores on a real animal, so +those four slots are not interchangeable — getting them in the right order is +most of what makes a gait sound like an animal rather than a drum machine. + +## Replacing them + +Three ways, easiest first: + +1. **In a browser, no rebuild** — open `web/index.html`, drag WAVs onto the mode + slots, upload over USB. See the README. +2. **Rebuild with your own** — drop WAVs into `samples/incoming/` and run + `python tools/importwav.py`, then rebuild. Accepts any sample rate, mono or + stereo, 8/16/24/32-bit or float. +3. **Placeholders** — `python tools/gensamples.py` writes procedural stand-ins in + the right layout, so the build works with no recordings at all. diff --git a/releases/62_BioMimicry/samples/cicadas_1.raw b/releases/62_BioMimicry/samples/cicadas_1.raw new file mode 100644 index 0000000000000000000000000000000000000000..276da2a676f72a10c4040e9c429d579b15479a3d GIT binary patch literal 7842 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 OmI#d6DX_e|QvU~yY~1Mp literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/cicadas_3.raw b/releases/62_BioMimicry/samples/cicadas_3.raw new file mode 100644 index 0000000000000000000000000000000000000000..8d62a82d92bb6b072f674dccad125cdade697bb0 GIT binary patch literal 8252 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 x_5;rVx@|Ivj0y@#u{{e}_fUy7o literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/cicadas_4.raw b/releases/62_BioMimicry/samples/cicadas_4.raw new file mode 100644 index 0000000000000000000000000000000000000000..d573d4c130bbf56474711d40602703f1a5453415 GIT binary patch literal 7379 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 literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/cicadas_5.raw b/releases/62_BioMimicry/samples/cicadas_5.raw new file mode 100644 index 0000000000000000000000000000000000000000..6025323960a62394c45fa95a52197b622e730af6 GIT binary patch literal 6321 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 literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/cicadas_6.raw b/releases/62_BioMimicry/samples/cicadas_6.raw new file mode 100644 index 0000000000000000000000000000000000000000..70af8b681103beabaf46e31f5422609e7e06a1ef GIT binary patch literal 5856 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 literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/cicadas_7.raw b/releases/62_BioMimicry/samples/cicadas_7.raw new file mode 100644 index 0000000000000000000000000000000000000000..96dd04ee8f8ff4928cb258e6a06c6f16cbc1b8a3 GIT binary patch literal 6794 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 U_j>&D|AV0P*Opd8^n!^01HpOzasU7T literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/frogs_1.raw b/releases/62_BioMimicry/samples/frogs_1.raw new file mode 100644 index 0000000000000000000000000000000000000000..efc84ae195c97a0f1c6b97e7285069d1599c6a1b GIT binary patch literal 45056 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 literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/frogs_2.raw b/releases/62_BioMimicry/samples/frogs_2.raw new file mode 100644 index 0000000000000000000000000000000000000000..1f84bf5800fe00c936e99d444e6691009c3e5ef9 GIT binary patch literal 38559 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%0Dr(7_L94?6d_5nf0h8jSt$P{Hn!vJ2!9KxPyi( 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 W^lrOJPJjk8p1|(nk;m(QfBt{7D&{W$ literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/frogs_5.raw b/releases/62_BioMimicry/samples/frogs_5.raw new file mode 100644 index 0000000000000000000000000000000000000000..0dee692631da78ffdf58d3296402684e366fbcf3 GIT binary patch literal 39303 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 literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/frogs_6.raw b/releases/62_BioMimicry/samples/frogs_6.raw new file mode 100644 index 0000000000000000000000000000000000000000..d177705518ba5fe1feedcfd1c5ff4bb25ac128e6 GIT binary patch literal 40940 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
>x>WlZ&n2uD71 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 literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/geese_3.raw b/releases/62_BioMimicry/samples/geese_3.raw new file mode 100644 index 0000000000000000000000000000000000000000..e4e91496cb0afa6102f533ff1df4ac8627b832f5 GIT binary patch literal 6568 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 f`tg<7tqvUG*p4uz?q%$WT)Ij;W$&HF9Y literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/geese_4.raw b/releases/62_BioMimicry/samples/geese_4.raw new file mode 100644 index 0000000000000000000000000000000000000000..fdffb55738ae49f4e8bd31d27fc7aa32d5e0b254 GIT binary patch literal 8222 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 literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/geese_5.raw b/releases/62_BioMimicry/samples/geese_5.raw new file mode 100644 index 0000000000000000000000000000000000000000..22f14491983d215a33d3d0eff2ea274aa65f6d17 GIT binary patch literal 8936 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 L3>ybuC}{gHB|1hS literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/geese_8.raw b/releases/62_BioMimicry/samples/geese_8.raw new file mode 100644 index 0000000000000000000000000000000000000000..74e77f38077fd0e55deda62443dbebba1f1ebc6a GIT binary patch literal 8442 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 literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/meteors_2.raw b/releases/62_BioMimicry/samples/meteors_2.raw new file mode 100644 index 0000000000000000000000000000000000000000..40b53d1ce4d260d7159cc96d0258a76ae47c0ad8 GIT binary patch literal 59739 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%0A`k}@jzU>eEssp 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 DAf`dR literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/meteors_3.raw b/releases/62_BioMimicry/samples/meteors_3.raw new file mode 100644 index 0000000000000000000000000000000000000000..d2b0aa9d6f7a5aba614bc87d00f83e3750cc27b3 GIT binary patch literal 35389 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 QQ<>7~R7#f)s!Q|!A0M^gvj6}9 literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/meteors_4.raw b/releases/62_BioMimicry/samples/meteors_4.raw new file mode 100644 index 0000000000000000000000000000000000000000..aae40cddd8e30834a77724664ae80655a6390c9e GIT binary patch literal 97493 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

WhYP{8m`3>HuTb!ZwQd! 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 literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/rain_1.raw b/releases/62_BioMimicry/samples/rain_1.raw new file mode 100644 index 0000000000000000000000000000000000000000..a6d101524f4ee630923ec71c3de66f6de959c7d4 GIT binary patch literal 3543 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 MW;pFgK5abrUmG`bVE_OC literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/rain_3.raw b/releases/62_BioMimicry/samples/rain_3.raw new file mode 100644 index 0000000000000000000000000000000000000000..58efea4421b7dba442a1a44111ba13c5eaae4a15 GIT binary patch literal 5243 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 Su)*!0I!y0s$PhY_k?#NH2{uXq literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/rain_4.raw b/releases/62_BioMimicry/samples/rain_4.raw new file mode 100644 index 0000000000000000000000000000000000000000..d0c28c15cbf509dcbd3ff91b94603d5674cbb084 GIT binary patch literal 7090 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 KsiyS=wf_Or0LW|r literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/rain_7.raw b/releases/62_BioMimicry/samples/rain_7.raw new file mode 100644 index 0000000000000000000000000000000000000000..812852da5d8480e5b8ac05125411ec2def97521b GIT binary patch literal 6301 zcmYkA>2F+D8OCSd7mq!T<1MyB-H@e8oGx-{X)Do!5T)<|R3t=^5dT%_f{IijKJbN4 zPzj-aX_GclXwukm;&r@lGoF3t_q^xY<;=_-&%NiK^PJ~--uFG%&1SpX?e%+|PN&=L z_Itfvx7+FZ`hB0y_4+=)-=|+be=z8`76^tyL0;hyEf@?(!jWh+!jTq@#(2?U@mS3L zp_95q3+tY6IIIDJ{y;#(X(FG`$E-}-?FmP_MQgX3UTd|Q4O*+&Zn|^2$fwh$FO563 z0E6mh)LNkXBhFhzj@lz2RzNbvR=zmoh+o}G&);vg3CFbh%((gM5#1{4ZJjj*-( zG#d4~KDAnnL$zEk7E7h$Qt6~pt<-cutx`VWG_T_E(b3WINu^eAg1Oi2`x!VC^s`#l z)TY@A+r7R&6p1F1sdPG(h(T8XW&*(|xM38uF}EIg1Q)Ui#55elmaS(#Y^cJ`wh}8j*9Olb5euzVXT{ zZ@m5XTd%(S>TB~a%v~JLXA`NouT?+VTv@z-`^(Qi`|R^C?mk#p-fKm(o=i|dcR`q$q+`SZsge(=GEAAS6nPyhb!y9=9@PAEG*eR=N1mw))${M^;= zjpmZ!ey4G~y~(mx*Ecpc3i~IuZY-TjW(NoJBj-jYFJ8Ji|H|uczWLTq-}&V`Kl}0P zFI}IV$frZCTD8&XqX&KrCQ}HI%?}R_4rY_FL?%0s&*z5nxq*R9Iu(!j+qL5M@}q|j zzq$AIS9fmTxpVvW-EWsxHg^w;l}ZhhHtMzV(c$6V?#|9uVST-@y}iA)vAp!?!Grr> zeeva;ukSy6ytZ4cGy{yCADNh%7#SJPW#ge>AJ5lY7`o>RM&ikIb|{z2rQ+#iES^l| zhR3F7FI~HN>&5x`AH4kHjmytWj}H$duxP;7$41p!vw^$%zFwyv#2S%AN)C@QY_HcU z?(b}G71oxYEPiwU-o5_<{r$O|iw9flPnRC4Ei64*S>M_@JT6yTeWewezt?HjD<$w2 zR-Z0CUZgE7K7PEo^mKW3eSKqdd+*@5RB3d3{zwdpvbn)r4x!LE5e*0ZK0>tJ7KMJm zB+|M3$oS;c#b;(OUA}t#29~;U{o2*<&rVN{o*PUfX0L16hHTRF1;V7QWGXwrfP+Ir zIfYd`8t8YM2)e&rfRmNw<;P2)SzID&);6~G4vOV^)21Vr!987%k$!7)V{Hu+u5CcD zoYCm`La|gfmp?Z;abbF9W@h@ro{HxLRb#|C}a6)nM=uj*dOMoU4401#3Vf&%#uZ@THDim^D4@?P3JvTto(ZNZj zRY(w&7Yz~>5h?Sl+Z@@(#I`2vJ+%8^iE@P?8acKHYS>1DJq7O?N05L+TOl?@P*)eh zRj{9;l{4V4+b5~ZVL(GR_8az>oF0j4qsErV11t6ns=`W9W#MI^6;o)5c!bxULmv$p zG-_@4rqlsaXO1y*? zxK#@o;sbecy4T=STRTdd*5$f^wNjvhIW2AW5VOvazO`aNGu=u zhMtxS6wHcbOI^wdVpVqVBnkLTa7&f;tfhLPiLrs$aR$Q>T^?$XT7V5U2=$ml4*;rM zFb!YQNzL)gZ@sPd%5_qmW;{{&#HI&R>5CsaVF$}aHju4b0y#1`3RPc~9SENH^welC z^Mb=Bz^Z)eY1A8aRt>%1ER+N){LYj@V}P^@w|2S3qK;jUWQI09UcPFn^M@MrYMCf)kT_CE z^B`iy!ed1p47`jX9pyvoc}k#y!k~yq(Wid`c+Hk#>(>P}^>i4{LFwIHL4w41&>PwIF#iWI_C2>hO(@hq_RuQ??JGD z5@yGqNEBFkOma$44mLLPJHsiYwIQ;mYvPr2QdAZ&2N2;bLwCz7hCuuQLd`L5H(H8^ z31x9bf~TQEMPLk@?UleK9mwL6-!7_yB?3;^(u7(_L@q1!X455O+*o(yxb6vkzAYY;nrL6WaYSfy5iA9CwE7)TNGHSOqQT zJQj^ku<8y2?nFdyS;SdcBm-JRNu4r0leQWSHuZn57iSaX=s zh({)7UJU1*<$`0*N+WTuP`5QW)0*NSvthW6{u+$o#3W-Q5r}Ap#SRi2200pKx@xIN zYXOtIEquC3tm-36n8=C*@gt?ZKQy6(VPv}wa4k#n)^Z#yH-NYk6;@yzDBw8l&UoRX zB~s6NW>O$KERIPHVdKa{G%fe6$&q{{l+JpXEKCfNSW+JmWZ#^yjymcOU2vC}#bz+w XY)TtdC*51utqG30o?d6KZRh_7r6w_8 literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/rain_8.raw b/releases/62_BioMimicry/samples/rain_8.raw new file mode 100644 index 0000000000000000000000000000000000000000..91592946ec7e9233eea266172062c37a284c717f GIT binary patch literal 5725 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 +#include "biomimicry.h" + +namespace bio { + +#if defined(__has_include) +# if __has_include("samples.h") +# define BIO_HAVE_SAMPLES 1 +# endif +#endif + +#ifdef BIO_HAVE_SAMPLES + +// samples.h defines, for each mode, an int8_t array + length: +// horses_pcm[]/horses_pcm_len, geese_pcm[], frogs_pcm[], rain_pcm[], meteors_pcm[] +#include "samples.h" + +constexpr bool kHaveSamples = true; + +static const int8_t *const kModeSample[kNumModes] = { + reinterpret_cast(horses_pcm), + reinterpret_cast(geese_pcm), + reinterpret_cast(frogs_pcm), + reinterpret_cast(rain_pcm), + reinterpret_cast(meteors_pcm), + reinterpret_cast(cicadas_pcm) +}; +static const uint32_t kModeSampleLen[kNumModes] = { + horses_pcm_len, geese_pcm_len, frogs_pcm_len, rain_pcm_len, + meteors_pcm_len, cicadas_pcm_len +}; + +// Round-robin variants live end to end inside each mode's array; these say +// where each one starts and how long it is. In Horses the variant is the hoof. +static const uint32_t *const kModeSampleOff[kNumModes] = { + horses_pcm_off, geese_pcm_off, frogs_pcm_off, + rain_pcm_off, meteors_pcm_off, cicadas_pcm_off +}; +static const uint32_t *const kModeSampleSize[kNumModes] = { + horses_pcm_size, geese_pcm_size, frogs_pcm_size, + rain_pcm_size, meteors_pcm_size, cicadas_pcm_size +}; + +#else + +constexpr bool kHaveSamples = false; + +// Stubs so voices.cpp compiles unchanged; usePcm_ is forced false when +// kHaveSamples is false, so these are never dereferenced. +static const int8_t *const kModeSample[kNumModes] = { + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr +}; +static const uint32_t kModeSampleLen[kNumModes] = { 0, 0, 0, 0, 0, 0 }; +static const uint32_t kZeroOff[4] = { 0, 0, 0, 0 }; +static const uint32_t *const kModeSampleOff[kNumModes] = { + kZeroOff, kZeroOff, kZeroOff, kZeroOff, kZeroOff, kZeroOff +}; +static const uint32_t *const kModeSampleSize[kNumModes] = { + kZeroOff, kZeroOff, kZeroOff, kZeroOff, kZeroOff, kZeroOff +}; + +#endif + +} // namespace bio diff --git a/releases/62_BioMimicry/samplestore.h b/releases/62_BioMimicry/samplestore.h new file mode 100644 index 000000000..a20b4954c --- /dev/null +++ b/releases/62_BioMimicry/samplestore.h @@ -0,0 +1,186 @@ +// samplestore.h — where the card gets its recordings from. +// +// Two sources, in priority order: +// +// 1. USER FLASH — a 1MB region at a fixed address, written over USB by the +// web app (interface.html). Overrides per mode, so you can +// replace just the geese and keep everything else. +// 2. BAKED — compiled into the firmware from samples/*.raw. The factory +// default, so a fresh card works with no upload. +// +// The user region sits at a FIXED offset rather than after the code, so +// reflashing the firmware does not move or wipe it. + +#pragma once +#include +#include "biomimicry.h" +#include "voices.h" // kNumVariants +#include "samples_default.h" // baked fallback + +namespace bio { + +// --- Flash layout ---------------------------------------------------------- +// RP2040 XIP window. The user region is the last 1MB of a 2MB part. +constexpr uint32_t kFlashBase = 0x10000000u; +constexpr uint32_t kFlashSize = 2u * 1024 * 1024; +constexpr uint32_t kUserRegionOff = 1u * 1024 * 1024; // offset within flash +constexpr uint32_t kUserRegionLen = 1u * 1024 * 1024; + +/// Directory written at the start of the user region. Fixed size so it can be +/// erased and rewritten as one 4KB sector. +struct UserSampleHeader +{ + uint32_t magic; // kUserMagic when a valid upload is present + uint32_t version; // layout version, for future changes + // Byte offsets are relative to the START of the user region's data area, + // and a size of 0 means "this slot is empty, fall back to baked". + uint32_t offset[kNumModes][kNumVariants]; + uint32_t size[kNumModes][kNumVariants]; + uint32_t totalBytes; + uint32_t reserved[8]; +}; + +constexpr uint32_t kUserMagic = 0x42494F31u; // "BIO1" +constexpr uint32_t kUserVersion = 1; + +/// Set in a slot's size[] to mean "play a BAKED recording, not uploaded audio": +/// offset[] then holds the mode and the low bits of size[] the variant. Sizes +/// never approach this, so the bit was always spare — and firmware that predates +/// it simply fails the bounds check and falls back to baked, which is exactly +/// what such a slot is asking for anyway. +constexpr uint32_t kBakedFlag = 0x80000000u; + +// The header occupies the first flash sector of the region; audio follows. +// RP2040 flash erases a sector at a time; every erase must be sector-aligned. +constexpr uint32_t kFlashSector = 4096; + +constexpr uint32_t kUserHeaderLen = 4096; +constexpr uint32_t kUserDataOff = kUserRegionOff + kUserHeaderLen; +constexpr uint32_t kUserDataLen = kUserRegionLen - kUserHeaderLen; + +/// Read-only view of the user region as mapped through XIP. +static inline const UserSampleHeader *UserHeader() +{ + return reinterpret_cast(kFlashBase + kUserRegionOff); +} + +static inline const int8_t *UserData() +{ + return reinterpret_cast(kFlashBase + kUserDataOff); +} + +static inline bool HaveUserSamples() +{ + const UserSampleHeader *h = UserHeader(); + return h->magic == kUserMagic && h->version == kUserVersion; +} + +/// Where a given mode+variant's audio actually lives, whichever source wins. +struct SampleRef +{ + const int8_t *data; + uint32_t len; +}; + +/// Resolve one slot. A user upload for that exact mode+variant wins; otherwise +/// the baked recording is used. This is what lets you replace one mode without +/// losing the rest. +static inline SampleRef ResolveSample(int mode, int variant) +{ + if (HaveUserSamples()) + { + const UserSampleHeader *h = UserHeader(); + uint32_t sz = h->size[mode][variant]; + + // Bit 31 set means "this slot plays a BAKED recording", with the mode in + // offset[] and the variant in the low bits of size[]. + // + // A slot's offset is relative to the user region, so before this there + // was no way for the header to name a built-in recording at all — you + // could not put the stock horse hoof on Geese 1 without re-uploading it. + // A flag bit rather than a version bump because sizes are at most 128KB, + // so the top bits were always free, and because older firmware reads the + // huge size, fails its bounds check below, and falls back to baked — + // which is the right answer rather than a crash. + if (sz & kBakedFlag) + { + int bm = static_cast(h->offset[mode][variant]); + int bv = static_cast(sz & ~kBakedFlag); + if (kHaveSamples && bm >= 0 && bm < kNumModes && + bv >= 0 && bv < kNumVariants) + return { kModeSample[bm] + kModeSampleOff[bm][bv], + kModeSampleSize[bm][bv] }; + return { nullptr, 0 }; + } + + if (sz > 0 && h->offset[mode][variant] + sz <= kUserDataLen) + return { UserData() + h->offset[mode][variant], sz }; + } + + if (kHaveSamples) + return { kModeSample[mode] + kModeSampleOff[mode][variant], + kModeSampleSize[mode][variant] }; + + return { nullptr, 0 }; +} + +/// True if a mode has ANY uploaded audio, so it should ignore its baked set. +static inline bool ModeIsUserLoaded(int mode) +{ + if (!HaveUserSamples()) return false; + const UserSampleHeader *h = UserHeader(); + for (int v = 0; v < kNumVariants; v++) + if (h->size[mode][v] > 0) return true; + return false; +} + +/// How many round-robin variants a mode should actually use. +/// +/// If ANY slot of a mode has been uploaded, only the uploaded ones count. Upload +/// two geese and you get two geese — not your two mixed with six of the card's +/// own, which is what a blind round robin over all eight slots would give you and +/// is never what someone replacing a mode wants. +/// +/// Counts the TOTAL, not the leading run. An earlier version counted the run and +/// so silently ignored everything after a gap, which made "add a sample to slot +/// 5" behave as if nothing had been uploaded. Gaps are handled by +/// PickUserVariant() instead, which walks past empty slots — so any combination +/// of filled slots works and the browser does not have to police the order. +static inline int VariantCount(int mode) +{ + if (HaveUserSamples()) + { + const UserSampleHeader *h = UserHeader(); + int n = 0; + for (int v = 0; v < kNumVariants; v++) + if (h->size[mode][v] > 0) n++; + if (n > 0) return n; + } + return kHaveSamples ? kNumVariants : 0; +} + +/// Map a 0..VariantCount-1 pick onto an actual filled slot, skipping gaps. +/// +/// For a mode with no uploads this is the identity, so baked sets are unchanged. +static inline int PickUserVariant(int mode, int pick) +{ + if (!ModeIsUserLoaded(mode)) return pick; + + const UserSampleHeader *h = UserHeader(); + int seen = 0; + for (int v = 0; v < kNumVariants; v++) + { + if (h->size[mode][v] == 0) continue; + if (seen == pick) return v; + seen++; + } + return 0; // pick out of range: fall back to the first filled slot +} + +/// True if there is anything at all to play — either source. +static inline bool AnySamples() +{ + return kHaveSamples || HaveUserSamples(); +} + +} // namespace bio diff --git a/releases/62_BioMimicry/tools/bin2h.py b/releases/62_BioMimicry/tools/bin2h.py new file mode 100644 index 000000000..a1a6df40d --- /dev/null +++ b/releases/62_BioMimicry/tools/bin2h.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 +"""bin2h.py — embed a binary file as a C array header. + +Usage: + python bin2h.py [--slice START LEN] + +Emits a `const unsigned char [] = {...};` plus a +`const unsigned _len = N;`. With --slice, embeds only LEN bytes +starting at offset START (used to split the 32KB 128K ROM into its two 16KB +banks). Keeps the repo free of committed binaries: run this at need / in a +build step. See reference/ROMS.md for provenance. +""" +import sys + +def main(): + args = sys.argv[1:] + start, length = 0, None + if "--slice" in args: + i = args.index("--slice") + start = int(args[i + 1], 0) + length = int(args[i + 2], 0) + del args[i:i + 3] + if len(args) != 3: + print(__doc__) + sys.exit(1) + inp, sym, out = args + + with open(inp, "rb") as f: + data = f.read() + if length is not None: + data = data[start:start + length] + + lines = [ + f"// Auto-generated by tools/bin2h.py from {inp}", + f"// {len(data)} bytes. Do not edit by hand.", + "#pragma once", + f"const unsigned {sym}_len = {len(data)};", + f"const unsigned char {sym}[] = {{", + ] + for i in range(0, len(data), 16): + chunk = data[i:i + 16] + lines.append(" " + "".join(f"0x{b:02x}," for b in chunk)) + lines.append("};") + with open(out, "w") as f: + f.write("\n".join(lines) + "\n") + print(f"wrote {out}: {len(data)} bytes as {sym}[]") + +if __name__ == "__main__": + main() diff --git a/releases/62_BioMimicry/tools/checksize.cmake b/releases/62_BioMimicry/tools/checksize.cmake new file mode 100644 index 000000000..b7693ccaa --- /dev/null +++ b/releases/62_BioMimicry/tools/checksize.cmake @@ -0,0 +1,46 @@ +# Fail the build if the firmware image would run into the user sample region. +# +# See samplestore.h: user samples live in the last 1MB of a 2MB flash, at a +# FIXED address so reflashing the firmware does not wipe them. If code + baked +# samples reach that address the two overwrite each other — flashing would +# destroy uploaded samples, and an upload would destroy the firmware. +# +# Reads the highest flash address actually used from the ELF's section headers, +# which is the real end of the image (the .bin is not always generated). +if (NOT EXISTS ${ELF}) + message(FATAL_ERROR "checksize: ${ELF} not found") +endif() + +execute_process(COMMAND ${OBJDUMP} -h ${ELF} OUTPUT_VARIABLE _hdrs) + +set(_end 0) +# Section header lines look like: Idx Name Size VMA LMA File-off Algn +string(REGEX MATCHALL "[0-9a-f]+ 10[0-9a-f]+ 10[0-9a-f]+" _rows "${_hdrs}") +foreach (_row IN LISTS _rows) + string(REGEX MATCH "^([0-9a-f]+) 10([0-9a-f]+)" _m "${_row}") + if (_m) + math(EXPR _sz "0x${CMAKE_MATCH_1}") + math(EXPR _lma "0x${CMAKE_MATCH_2}") + math(EXPR _top "${_lma} + ${_sz}") + if (_top GREATER ${_end}) + set(_end ${_top}) + endif() + endif() +endforeach() + +if (_end EQUAL 0) + message(WARNING "checksize: could not read section headers; boundary unchecked") + return() +endif() + +if (_end GREATER_EQUAL ${LIMIT}) + math(EXPR _over "${_end} - ${LIMIT}") + message(FATAL_ERROR + "Firmware reaches ${_end} bytes and overruns the user sample region at " + "${LIMIT} by ${_over} bytes.\n" + "Shorten or drop some samples/*.raw, or move kUserRegionOff in " + "samplestore.h (which invalidates samples already uploaded to a card).") +endif() + +math(EXPR _kb "(${LIMIT} - ${_end}) / 1024") +message(STATUS "Firmware ends at ${_end}; ${_kb} KB clear of the user region") diff --git a/releases/62_BioMimicry/tools/gensamples.py b/releases/62_BioMimicry/tools/gensamples.py new file mode 100644 index 000000000..c82f29991 --- /dev/null +++ b/releases/62_BioMimicry/tools/gensamples.py @@ -0,0 +1,166 @@ +#!/usr/bin/env python3 +"""gensamples.py — synthesise placeholder PCM one-shots into samples/. + +These are procedural stand-ins so the alt-boot PCM path can be built and tested +end to end before real field recordings exist. Replace samples/*.raw with actual +recordings (see tools/mksamples.py for the ffmpeg conversion) and rebuild — +no code changes needed. + + python tools/gensamples.py + +Writes 8-bit signed mono 48kHz .raw files, one per mode. +""" +import math +import os +import random +import struct + +SR = 48000 +OUT = "samples" + + +def write_raw(name, samples): + path = os.path.join(OUT, f"{name}.raw") + data = bytearray() + for s in samples: + v = max(-128, min(127, int(s * 127))) + data += struct.pack("b", v) + with open(path, "wb") as f: + f.write(data) + print(f" {name}.raw: {len(data)} bytes ({len(data)/SR*1000:.0f}ms)") + + +def env(i, n, decay): + return math.exp(-decay * i / n) + + +def horses(dur=0.18): + """Hoof clop: pitch-dropping thump with a wooden click.""" + n = int(SR * dur) + out = [] + for i in range(n): + e = env(i, n, 9) + f = 190 * math.exp(-7.0 * i / n) + 55 + body = math.sin(2 * math.pi * f * i / SR) + click = (random.uniform(-1, 1) * math.exp(-70.0 * i / n)) * 0.6 + out.append((body * 0.8 + click) * e) + return out + + +def geese(dur=0.30): + """Honk: buzzy saw with vibrato and a nasal formant.""" + n = int(SR * dur) + out = [] + ph = 0.0 + lp = 0.0 + for i in range(n): + e = env(i, n, 4) + f = 420 + 45 * math.sin(2 * math.pi * 11 * i / SR) + ph = (ph + f / SR) % 1.0 + saw = 2 * ph - 1 + lp += (saw - lp) * 0.30 + out.append(lp * e) + return out + + +def frogs(dur=0.22): + """Ribbit: two-pulse croak with a resonant body.""" + n = int(SR * dur) + out = [] + for i in range(n): + t = i / n + # Two bursts, the classic ribb-it + g = math.exp(-30 * t) + 0.8 * math.exp(-30 * abs(t - 0.45)) + f = 300 + 120 * math.sin(2 * math.pi * 24 * i / SR) + buzz = math.sin(2 * math.pi * f * i / SR) + buzz += 0.5 * math.sin(2 * math.pi * f * 2.02 * i / SR) + out.append(buzz * g * 0.55) + return out + + +def rain(dur=0.09): + """Water drip: high ping with a fast pitch drop.""" + n = int(SR * dur) + out = [] + for i in range(n): + e = env(i, n, 14) + f = 2100 * math.exp(-11.0 * i / n) + 700 + out.append(math.sin(2 * math.pi * f * i / SR) * e) + return out + + +def meteors(dur=0.55): + """Swoosh: filtered noise sweeping down, with a low rumble.""" + n = int(SR * dur) + out = [] + lp = 0.0 + lp2 = 0.0 + for i in range(n): + t = i / n + e = math.sin(math.pi * min(t * 1.15, 1.0)) ** 1.5 + k = 0.45 * math.exp(-2.6 * t) + 0.012 + lp += (random.uniform(-1, 1) - lp) * k + lp2 += (lp - lp2) * 0.5 + rumble = math.sin(2 * math.pi * 65 * i / SR) * 0.25 * math.exp(-3 * t) + out.append((lp2 * 1.7 + rumble) * e) + return out + + +def cicadas(dur=0.16): + """Stridulation: a high tone ring-modulated by a fast wing-beat buzz.""" + n = int(SR * dur) + out = [] + for i in range(n): + e = env(i, n, 5) + tone = math.sin(2 * math.pi * 3800 * i / SR) + buzz = 0.5 + 0.5 * math.sin(2 * math.pi * 190 * i / SR) + hiss = random.uniform(-1, 1) * 0.12 + out.append((tone * buzz + hiss) * e * 0.7) + return out + + +# Per-variant character. In Horses the variant IS THE HOOF (1=LH 2=LF 3=RH +# 4=RF), and a real animal's hind hooves strike lower and heavier than its +# fores — so these are not arbitrary detunes, they carry the front/back shape +# of the gait. Elsewhere the variants are simply different individuals. +VARIANT_PITCH = { + "horses": [0.82, 1.12, 0.88, 1.20], # LH, LF, RH, RF + "geese": [1.00, 0.83, 1.19, 0.71], + "frogs": [1.00, 0.78, 1.32, 0.93], + "rain": [1.00, 1.24, 0.84, 1.41], + "meteors": [1.00, 0.76, 1.30, 0.88], + "cicadas": [1.00, 1.05, 0.95, 1.10], +} + + +def resample(data, ratio): + """Crude linear resample — adequate for placeholder one-shots.""" + n = int(len(data) / ratio) + out = [] + for i in range(n): + x = i * ratio + j = int(x) + f = x - j + a = data[j] if j < len(data) else 0.0 + b = data[j + 1] if j + 1 < len(data) else 0.0 + out.append(a + (b - a) * f) + return out + + +def main(): + random.seed(1) + os.makedirs(OUT, exist_ok=True) + print(f"Writing placeholder samples to {OUT}/ (8-bit signed mono {SR}Hz)") + gens = {"horses": horses, "geese": geese, "frogs": frogs, + "rain": rain, "meteors": meteors, "cicadas": cicadas} + for mode, fn in gens.items(): + base = fn() + for v, ratio in enumerate(VARIANT_PITCH[mode], start=1): + write_raw(f"{mode}_{v}", resample(base, ratio)) + print("\nPlaceholders with four round-robin variants each. Swap in real " + "recordings\nusing the same _1.._4 naming and rebuild — no code " + "changes needed.") + + +if __name__ == "__main__": + main() diff --git a/releases/62_BioMimicry/tools/importwav.py b/releases/62_BioMimicry/tools/importwav.py new file mode 100644 index 000000000..1b50a94b9 --- /dev/null +++ b/releases/62_BioMimicry/tools/importwav.py @@ -0,0 +1,343 @@ +#!/usr/bin/env python3 +"""importwav.py — turn recordings into the .raw one-shots the card bakes in. + +Drop WAV files into samples/incoming/ named for their mode and variant, then: + + python tools/importwav.py + +It reads samples/incoming/*.wav, converts each to 8-bit signed mono 48kHz, +trims silence, normalises, applies a short fade-out, and writes samples/*.raw +ready for the build. Uses only the Python standard library — no ffmpeg needed. + +NAMING + horses_1.wav horses_2.wav horses_3.wav horses_4.wav + geese_1.wav frogs_1.wav rain_1.wav meteors_1.wav cicadas_1.wav + +The number is the round-robin variant, and in HORSES it is the hoof: + 1 = left hind 2 = left fore 3 = right hind 4 = right fore +Hind hooves strike lower and heavier than fores on a real animal, so putting +them in the right slots is most of what makes a gait sound like an animal. +Elsewhere the four are just different individuals. + +Fewer than four is fine — missing variants reuse the ones you did supply, and a +bare `horses.wav` with no number is used for all four. + +WHAT MAKES A GOOD SOURCE + * A single isolated hit. No reverb tail you cannot trim, no other animals. + * Trimmed tight to the transient; the attack is what identifies the sound. + * Dry. The card has no reverb, so recorded ambience is baked in forever. + * Mono or stereo (stereo is summed), any sample rate, 8/16/24/32-bit or float. + +LENGTH GUIDE (the card holds ~41 seconds of audio in total) + horses ~180ms rain ~120ms + geese ~400ms meteors ~700ms + frogs ~300ms cicadas ~200ms +Longer is allowed; you just spend more flash. The script warns past 1 second. + +Options: + --keep-level skip normalisation (use if you tuned relative levels yourself) + --no-trim skip silence trimming +""" +import array +import math +import os +import random +import struct +import sys +import wave +import zlib + +SR = 48000 +IN_DIR = os.path.join("samples", "incoming") +OUT_DIR = "samples" +MODES = ["horses", "geese", "frogs", "rain", "meteors", "cicadas"] +NUM_VARIANTS = 8 # must match kNumVariants in voices.h +WARN_MS = 1000 + +# Sample libraries are named after the animal, not the mode. Accept both. +ALIASES = { + "horse": "horses", "hoof": "horses", "clop": "horses", + "goose": "geese", "honk": "geese", + "frog": "frogs", "ribbit": "frogs", "toad": "frogs", + "drip": "rain", "water": "rain", "droplet": "rain", + "whoosh": "meteors", "swoosh": "meteors", "meteor": "meteors", + "cicada": "cicadas", "cricket": "cicadas", "insect": "cicadas", +} + + +def decode(raw, width, nch): + """Bytes -> list of float -1..1, summed to mono. Handles 8/16/24/32-bit + PCM and 32-bit float. Written out longhand because the stdlib `audioop` + module was removed in Python 3.13.""" + if width == 1: + # WAV 8-bit is UNSIGNED, unlike every other depth. + chans = [(b - 128) / 128.0 for b in raw] + elif width == 3: + n = len(raw) // 3 + chans = [] + for i in range(n): + b0, b1, b2 = raw[3 * i], raw[3 * i + 1], raw[3 * i + 2] + v = b0 | (b1 << 8) | (b2 << 16) + if v & 0x800000: + v -= 0x1000000 + chans.append(v / 8388608.0) + elif width == 2: + a = array.array("h") + a.frombytes(raw[:len(raw) // 2 * 2]) + chans = [v / 32768.0 for v in a] + elif width == 4: + a = array.array("i") + a.frombytes(raw[:len(raw) // 4 * 4]) + chans = [v / 2147483648.0 for v in a] + else: + raise ValueError(f"unsupported sample width {width}") + + if nch <= 1: + return chans + # Sum channels to mono. + return [sum(chans[i:i + nch]) / nch for i in range(0, len(chans) - nch + 1, nch)] + + +def decode_float32(raw, nch): + n = len(raw) // 4 + chans = list(struct.unpack("<%df" % n, raw[:n * 4])) + if nch <= 1: + return chans + return [sum(chans[i:i + nch]) / nch for i in range(0, len(chans) - nch + 1, nch)] + + +def resample(data, src_rate): + """Linear resample to SR. Fine for one-shots; these are short and we are + heading for 8-bit anyway.""" + if src_rate == SR or not data: + return data + ratio = src_rate / float(SR) + n = int(len(data) / ratio) + out = [] + for i in range(n): + x = i * ratio + j = int(x) + f = x - j + a = data[j] + b = data[j + 1] if j + 1 < len(data) else 0.0 + out.append(a + (b - a) * f) + return out + + +def read_wav(path): + """Return (samples as list of float -1..1 at SR, source description).""" + with wave.open(path, "rb") as w: + nch, width, rate, nframes = (w.getnchannels(), w.getsampwidth(), + w.getframerate(), w.getnframes()) + comp = w.getcomptype() + raw = w.readframes(nframes) + + kind = "float" if comp == "FLOA" else f"{width * 8}-bit" + desc = f"{rate}Hz {kind} {'stereo' if nch == 2 else 'mono'}" + + if comp == "FLOA" or (comp not in ("NONE", "PCM ") and width == 4): + data = decode_float32(raw, nch) + else: + data = decode(raw, width, nch) + + return resample(data, rate), desc + + +def trim(data, floor=0.004): + """Drop leading and trailing near-silence, keeping a tiny pre-roll.""" + start = 0 + while start < len(data) and abs(data[start]) < floor: + start += 1 + end = len(data) + while end > start and abs(data[end - 1]) < floor: + end -= 1 + start = max(0, start - 48) # 1ms of pre-roll so attacks stay intact + return data[start:end] if end > start else data + + +def rms(data): + if not data: + return 0.0 + return (sum(v * v for v in data) / len(data)) ** 0.5 + + +def loudness_match(data, target_rms, ceiling=0.94): + """Match PERCEIVED loudness, then tame whatever peaks that produces. + + Peak normalisation is the obvious thing and it does not work here: a sample's + peak is usually a single transient, so two recordings normalised to the same + peak can still differ hugely in how loud they sound. A honk whose body sits + at RMS 0.004 and one at 0.059 both peak near 1.0 and sound nothing alike. + + So: scale by RMS to equalise the bodies, then soft-limit the result. The + limiter is a smooth tanh-ish curve rather than a hard clip, applied only to + the part above the knee, so transients round over instead of squaring off. + """ + r = rms(data) + if r < 1e-9: + return data + g = target_rms / r + out = [v * g for v in data] + + knee = ceiling * 0.7 + limited = [] + for v in out: + a = abs(v) + if a > knee: + over = (a - knee) / (1.0 - knee) if knee < 1.0 else 0.0 + # x/(1+x) compresses [0,inf) into [0,1) smoothly. + a = knee + (ceiling - knee) * (over / (1.0 + over)) + v = a if v >= 0 else -a + limited.append(v) + return limited + + +def normalise(data, target=0.92): + peak = max((abs(v) for v in data), default=0.0) + if peak < 1e-6: + return data + g = target / peak + return [v * g for v in data] + + +def fade_out(data, ms=4): + n = min(int(SR * ms / 1000), len(data)) + for i in range(n): + data[len(data) - n + i] *= 1.0 - (i / n) + return data + + +def write_raw(name, data): + """Quantise to 8-bit signed, with TPDF dither. + + Without dither, quantisation error CORRELATES with the signal, which is why + 8-bit reads as grit riding on a decaying tail rather than as hiss. A + triangular dither (the sum of two uniform randoms, +/-1 LSB peak) decorrelates + it: technically more noise, audibly much less objectionable, and it costs + nothing at runtime because it is baked in here. + + Seeded per file so a rebuild is reproducible - a sample library that changes + byte-for-byte on every bake would make it impossible to tell a real change + from dither noise in a diff. + """ + rng = random.Random(zlib.crc32(name.encode())) + out = bytearray() + for v in data: + d = rng.random() + rng.random() - 1.0 # TPDF, +/-1 LSB + s = int(math.floor(v * 127 + d + 0.5)) + out.append((max(-128, min(127, s))) & 0xFF) + path = os.path.join(OUT_DIR, f"{name}.raw") + with open(path, "wb") as f: + f.write(out) + return path, len(out) + + +def resolve_mode(stem): + """Map a source filename onto one of the card's mode names. + + Sample libraries are named after the animal, not after the mode, so + HORSE_3.wav and WHOOSH_2.wav need to land in horses_ and meteors_. + """ + head = stem.split("_")[0].lower() + if head in MODES: + return head + return ALIASES.get(head) + + +def main(): + keep_level = "--keep-level" in sys.argv + no_trim = "--no-trim" in sys.argv + + # Source directory: samples/incoming by default, or any folder given as a + # bare argument (e.g. AnimalSFX). + src = IN_DIR + for a in sys.argv[1:]: + if not a.startswith("--"): + src = a + break + + if not os.path.isdir(src): + os.makedirs(IN_DIR, exist_ok=True) + print(f"No such directory: {src}") + print(f"Put .wav files in {IN_DIR}/ (or pass a folder) and re-run.") + return + + wavs = sorted(f for f in os.listdir(src) if f.lower().endswith(".wav")) + if not wavs: + print(f"No .wav files in {src}/") + print(__doc__) + return + + # --- Pass 1: read everything and measure it. --- + loaded = {} # mode -> list of (filename, samples, desc) + unknown = [] + for fn in wavs: + stem = os.path.splitext(fn)[0] + mode = resolve_mode(stem) + if mode is None: + unknown.append(fn) + continue + data, desc = read_wav(os.path.join(src, fn)) + if not no_trim: + data = trim(data) + loaded.setdefault(mode, []).append((fn, data, desc)) + + if not loaded: + print("Nothing recognised. Names must start with a mode or animal:") + print(f" modes: {', '.join(MODES)}") + print(f" aliases: {', '.join(sorted(ALIASES))}") + return + + # A single loudness target across the whole library, so switching modes on + # the card does not jump in level. The median of all sources keeps that + # target near the material rather than pinned to the loudest outlier. + all_rms = sorted(rms(d) for lst in loaded.values() for _, d, _ in lst) + target = all_rms[len(all_rms) // 2] if all_rms else 0.1 + # Lift quiet libraries so the card is not needlessly timid, but never so far + # that the limiter is doing all the work. + # + # 0.12, not 0.06. Normalisation happens BEFORE quantisation, so this figure + # directly sets how many of the eight bits get used — and 0.06 was throwing + # away about 1.5 of them before the file was even written. Measured across + # the whole library: peaks went from a mean of 50/127 to 86/127, worth +0.8 + # effective bits, with the loudest still at 111 so the limiter is barely + # engaging. That is audible as less quantisation grit on quiet tails, which + # is where 8-bit shows up worst. + target = max(target, 0.12) + if not keep_level: + print(f"Loudness target: RMS {target:.4f} " + f"(median of {len(all_rms)} sources)\n") + + # --- Pass 2: level, fade, write. --- + os.makedirs(OUT_DIR, exist_ok=True) + total = 0 + for mode in MODES: + if mode not in loaded: + continue + items = loaded[mode] + if len(items) > NUM_VARIANTS: + print(f" {mode}: {len(items)} sources, using the first " + f"{NUM_VARIANTS}") + items = items[:NUM_VARIANTS] + for v, (fn, data, desc) in enumerate(items, start=1): + before = rms(data) + out = data if keep_level else loudness_match(data, target) + out = fade_out(list(out)) + path, n = write_raw(f"{mode}_{v}", out) + total += n + ms = n / 48.0 + gain_db = 20 * math.log10(max(rms(out), 1e-9) / max(before, 1e-9)) + flag = " <-- long" if ms > WARN_MS else "" + print(f" {fn:<18} -> {mode}_{v:<10} {ms:5.0f}ms " + f"{gain_db:+6.1f}dB{flag}") + + for fn in unknown: + print(f" {fn}: SKIPPED — unrecognised name") + + print(f"\nWrote {total} bytes ({total / 48000.0:.2f}s) into {OUT_DIR}/. " + f"Flash holds about 41s.") + print("Now rebuild: cmake --build build") + + +if __name__ == "__main__": + main() diff --git a/releases/62_BioMimicry/tools/mksamples.py b/releases/62_BioMimicry/tools/mksamples.py new file mode 100644 index 000000000..55078f678 --- /dev/null +++ b/releases/62_BioMimicry/tools/mksamples.py @@ -0,0 +1,154 @@ +#!/usr/bin/env python3 +"""mksamples.py — bake samples/*.raw into a single samples.h. + +Usage: + python tools/mksamples.py + +Expects 8-bit SIGNED mono raw at 48kHz, named per mode with an optional variant +number for round robins: + + horses_1.raw .. horses_4.raw (four: one per hoof) + geese_1.raw .. geese_8.raw (up to eight round robins) + frogs_N.raw rain_N.raw meteors_N.raw cicadas_N.raw + +A bare `horses.raw` (no number) is accepted and used for all four variants, so +a single recording per mode still works. + +VARIANTS ARE NOT DECORATION. The firmware asks for a specific variant and in +Horses that variant IS THE HOOF: 1=left hind, 2=left fore, 3=right hind, +4=right fore (Horses uses only the first four slots). Hind hooves on a real animal strike lower and heavier than fores, +so record or order them accordingly — that front/back difference is most of what +makes a gait sound like an animal rather than a drum machine. In the other modes +the variants are simply different individuals (birds, species, drip sizes, +distances, insects) and the firmware picks between them at random, never +repeating the same one twice running. + +Emits, for each mode, a flat concatenated array plus per-variant offsets: + const signed char horses_pcm[]; + const uint32_t horses_pcm_len; // total + const uint32_t horses_pcm_off[4]; // start of each variant + const uint32_t horses_pcm_size[4]; // length of each variant + +Converting a wav with ffmpeg: + ffmpeg -i clop_lh.wav -ac 1 -ar 48000 -f s8 samples/horses_1.raw + +Flash budget: 2MB total, ~107KB used by code, so roughly 41 seconds of 48kHz +8-bit mono fits. A full eight-variant library of one-shots comes to well under +half of that. These are one-shots; keep them short. +""" +import os +import sys + +MODES = ["horses", "geese", "frogs", "rain", "meteors", "cicadas"] +NUM_VARIANTS = 8 # must match kNumVariants in voices.h +HOOF_VARIANTS = 4 # must match kHoofVariants: Horses = one per hoof + + +def load_variants(sample_dir, mode): + """Return NUM_VARIANTS byte strings for a mode, padding by reuse. + + Padding reuses the SAME object rather than a copy, so emit() can spot the + repeat and point both slots at one copy in flash. + """ + # Horses' variants are the four hooves, not alternates; it never asks for + # a slot above the fourth. + limit = HOOF_VARIANTS if mode == "horses" else NUM_VARIANTS + + found = [] + for v in range(1, limit + 1): + path = os.path.join(sample_dir, f"{mode}_{v}.raw") + if os.path.isfile(path): + with open(path, "rb") as f: + found.append(f.read()) + else: + found.append(None) + found += [None] * (NUM_VARIANTS - limit) + + # Fall back to an unnumbered file for any variant with no recording. + plain_path = os.path.join(sample_dir, f"{mode}.raw") + plain = None + if os.path.isfile(plain_path): + with open(plain_path, "rb") as f: + plain = f.read() + + have = [d for d in found if d is not None] + if not have and plain is None: + return None + + out = [] + for i, d in enumerate(found): + if d is not None: + out.append(d) + elif plain is not None: + out.append(plain) + else: + # Cycle whatever real variants exist rather than emitting silence. + out.append(have[i % len(have)]) + return out + + +def emit(name, variants): + """Concatenate the distinct recordings once, and point repeated variants at + the copy already in flash. Horses only ever uses four slots (its variants + are the hooves) and a mode with five recordings pads to eight, so storing + the padding again would waste a quarter of a megabyte for nothing.""" + blob = bytearray() + seen = {} # id of the bytes object -> (offset, size) + offsets, sizes = [], [] + for v in variants: + key = id(v) + if key not in seen: + seen[key] = (len(blob), len(v)) + blob += v + off, size = seen[key] + offsets.append(off) + sizes.append(size) + blob = bytes(blob) + + # Explicitly uint32_t: on the arm-none-eabi ABI uint32_t is `unsigned long`, + # so arrays declared `unsigned` produce pointers that will not convert. + lines = [f"const uint32_t {name}_pcm_len = {len(blob)};", + f"const uint32_t {name}_pcm_off[{NUM_VARIANTS}] = {{" + + ", ".join(str(o) for o in offsets) + "};", + f"const uint32_t {name}_pcm_size[{NUM_VARIANTS}] = {{" + + ", ".join(str(s) for s in sizes) + "};", + f"const signed char {name}_pcm[] = {{"] + for i in range(0, len(blob), 16): + chunk = blob[i:i + 16] + # Raw bytes are unsigned; reinterpret as signed two's complement. + lines.append(" " + "".join( + f"{b - 256 if b > 127 else b}," for b in chunk)) + lines.append("};") + return lines, len(blob) + + +def main(): + if len(sys.argv) != 3: + print(__doc__) + sys.exit(1) + sample_dir, out_path = sys.argv[1], sys.argv[2] + + out = ["// Auto-generated by tools/mksamples.py. Do not edit by hand.", + "#pragma once", "#include ", ""] + total = 0 + for mode in MODES: + variants = load_variants(sample_dir, mode) + if variants is None: + variants = [b"\x00"] * NUM_VARIANTS + print(f" {mode}: missing, emitting silent stubs") + else: + sizes = "/".join(str(len(v)) for v in variants) + print(f" {mode}: {sizes} bytes") + lines, n = emit(mode, variants) + total += n + out += lines + out.append("") + + with open(out_path, "w") as f: + f.write("\n".join(out) + "\n") + print(f"wrote {out_path}: {total} bytes of PCM " + f"({total / 48000.0:.2f}s at 48kHz)") + + +if __name__ == "__main__": + main() diff --git a/releases/62_BioMimicry/tools/simulate.cpp b/releases/62_BioMimicry/tools/simulate.cpp new file mode 100644 index 000000000..b8e333e3c --- /dev/null +++ b/releases/62_BioMimicry/tools/simulate.cpp @@ -0,0 +1,101 @@ +// simulate.cpp — host-side harness for the physics engines. +// +// Compiles the REAL engines.cpp/fastmath.cpp natively and runs each mode across +// the knob range, reporting triggers/second per agent. This is how we check the +// models behave musically before burning a hardware trip: rates in the right +// ballpark, no mode silent, no mode machine-gunning, spook doing something. +// +// g++ -O2 -I.. -o simulate simulate.cpp ../engines.cpp ../fastmath.cpp +// +// Not part of the firmware build. + +#include +#include +#include "biomimicry.h" +#include "engines.h" + +using namespace bio; + +static const char *kModeName[kNumModes] = { + "Horses", "Geese", "Frogs", "Rain", "Meteors" +}; + +// Run one engine for `seconds` at the real control rate and report. +static void run(Engine &e, const char *label, int32_t physics, int32_t chaos, + int population, double seconds, bool spookEvery = false) +{ + e.reset(0x1234u); + + Ctrl c; + c.physics = physics; + c.chaos = chaos; + c.population = population; + c.spook = false; + c.clock = false; + + EngineOut out; + int ticks = static_cast(seconds * kCtrlRate); + int fires[kNumAgents] = {0, 0, 0, 0}; + int simultaneous = 0; + int64_t stateSum[kNumAgents] = {0, 0, 0, 0}; + + for (int t = 0; t < ticks; t++) + { + // Optionally fire the spook input once per second. + c.spook = spookEvery && (t % kCtrlRate == 0) && t > 0; + + memset(&out, 0, sizeof(out)); + e.tick(c, out); + + int n = 0; + for (int i = 0; i < kNumAgents; i++) + { + if (out.triggers & (1 << i)) { fires[i]++; n++; } + stateSum[i] += out.state[i]; + } + if (n >= 2) simultaneous++; + } + + printf(" %-28s ", label); + for (int i = 0; i < kNumAgents; i++) + printf("%6.2f ", fires[i] / seconds); + printf(" | clusters/s %5.2f | state avg %5.2f\n", + simultaneous / seconds, + static_cast(stateSum[0]) / ticks / 65536.0); +} + +int main() +{ + HorsesEngine horses; + GeeseEngine geese; + FrogsEngine frogs; + RainEngine rain; + MeteorsEngine meteors; + Engine *engines[kNumModes] = {&horses, &geese, &frogs, &rain, &meteors}; + + const int32_t Q = kQ16One; + + printf("Trigger rates (per second, per agent), 4 agents, 30s runs\n"); + printf("%-30s %6s %6s %6s %6s\n", "", "ag0", "ag1", "ag2", "ag3"); + + for (int m = 0; m < kNumModes; m++) + { + printf("\n%s\n", kModeName[m]); + char buf[64]; + // Sweep the physics knob across its range. + const int32_t pts[5] = {0, Q / 4, Q / 2, (3 * Q) / 4, Q - 1}; + const char *names[5] = {"physics 0.00", "physics 0.25", "physics 0.50", + "physics 0.75", "physics 1.00"}; + for (int p = 0; p < 5; p++) + { + snprintf(buf, sizeof(buf), "%s", names[p]); + run(*engines[m], buf, pts[p], 0, 4, 30.0); + } + // Chaos and spook checks at mid physics. + run(*engines[m], "physics 0.50 chaos 1.00", Q / 2, Q - 1, 4, 30.0); + run(*engines[m], "physics 0.50 + spook/sec", Q / 2, 0, 4, 30.0, true); + // Population must gate agents off. + run(*engines[m], "physics 0.50 population 2", Q / 2, 0, 2, 30.0); + } + return 0; +} diff --git a/releases/62_BioMimicry/tools/simulate.py b/releases/62_BioMimicry/tools/simulate.py new file mode 100644 index 000000000..087371e6a --- /dev/null +++ b/releases/62_BioMimicry/tools/simulate.py @@ -0,0 +1,617 @@ +#!/usr/bin/env python3 +"""simulate.py — sanity-check the physics engines' behaviour off-hardware. + +A Python port of the integer math in engines.cpp (same Q16 fixed point, same +xorshift, same constants), used to confirm each mode behaves musically across +the knob range before committing to a hardware trip. + +This is a MODEL of engines.cpp, not the code itself — if you change the C++, +change this too, or delete it. It exists because there is no host C++ compiler +on this machine (tools/simulate.cpp is the real harness if you get one). + + python tools/simulate.py # gaits + sync curve + trigger rates + python tools/simulate.py gaits # gait footfall check only +""" + +import math +import sys + +Q = 65536 +CTRL = 1500 +MASK32 = 0xFFFFFFFF +NUM_AGENTS = 4 +SWARM_SIZE = 12 +SWARM_PER_AGENT = SWARM_SIZE // NUM_AGENTS + + +def xorshift(s): + s ^= (s << 13) & MASK32 + s ^= s >> 17 + s ^= (s << 5) & MASK32 + return s & MASK32 + + +def rand_q16(s): + s = xorshift(s) + return s, s >> 16 + + +def rand_bipolar(s): + s = xorshift(s) + return s, (s >> 17) - 16384 + + +def mul_q16(a, b): + return (a * b) >> 16 + + +def decay(v, shift): + d = v >> shift + return 0 if d == 0 else v - d + + +def fast_sqrt_q16(x): + """Mirror of fast_sqrt_q16 in fastmath.h -- restoring bitwise integer sqrt. + + Deliberately transcribed rather than using math.sqrt, so this model fails the + same way the firmware would if the algorithm is ever wrong.""" + if x <= 0: + return 0 + v = x << 16 + res = 0 + bit = 1 << 30 + while bit > v: + bit >>= 2 + while bit: + if v >= res + bit: + v -= res + bit + res = (res >> 1) + bit + else: + res >>= 1 + bit >>= 2 + return res + + +def slew(v, target, shift): + return v + ((target - v) >> shift) + + +SIN = [round(32767 * math.sin((i / 256) * (math.pi / 2))) for i in range(257)] + + +def fast_sin(phase): + phase &= MASK32 + quad = phase >> 30 + frac = (phase >> 6) & 0xFFFFFF + idx = frac >> 16 + mu = frac & 0xFFFF + if quad & 1: + idx = 255 - idx + mu = 65536 - mu + if mu == 65536: + mu = 0 + idx += 1 + a, b = SIN[idx], SIN[idx + 1] + v = a + (((b - a) * mu) >> 16) + return -v if quad & 2 else v + + +# =========================================================================== +# Mode 1: Horses — one stride clock, real footfall offsets +# =========================================================================== +# Landing time within the stride, Q16. hoofPhase = stride - offset. +# LH LF RH RF +GAIT_OFFSET = [ + [0, 16384, 32768, 49152], # walk 4-beat lateral + [0, 32768, 32768, 0], # trot 2-beat diagonal + [0, 14418, 14418, 28836], # canter 3-beat + suspension + [0, 13763, 6554, 20315], # gallop 4-beat rotary + float +] +HORSE_SPEED = [65536, 63700, 67600, 62000] +# Flam in control ticks for the second foot of a "simultaneous" pair. Two +# identical clops on the same sample sum into one louder clop, so trot and +# canter audibly halved in density until these were added. +FLAM_TICKS = [ + [0, 0, 0, 0], # walk - already four distinct landings + [0, 27, 0, 18], # trot + [0, 24, 0, 0], # canter + [0, 0, 0, 0], # gallop - already four distinct landings +] +GAIT_HZ_MIN = [115, 205, 300, 380] +GAIT_HZ_MAX = [205, 330, 420, 640] +GAIT_NAME = ["Walk", "Trot", "Canter", "Gallop"] +LEG_NAME = ["LH", "LF", "RH", "RF"] + + +def horses(physics, chaos, pop, ticks, spook_every=0, clock_period=0): + """A HERD: one stride clock per horse, each keeping all four hooves.""" + rng = 0x1234 + gait = min(physics >> 14, 3) + within = (physics & 0x3FFF) << 2 + hz = GAIT_HZ_MIN[gait] + mul_q16(within, GAIT_HZ_MAX[gait] - GAIT_HZ_MIN[gait]) + if clock_period: + ch = (256 * CTRL) // clock_period + if ch > 32: + hz = ch + base = (hz * (1 << 32)) // (256 * CTRL) + stride = [h * 0x30000000 for h in range(4)] + last = [[0xFF] * 4 for _ in range(4)] + jit = [[0] * 4 for _ in range(4)] + pend = [[0] * 4 for _ in range(4)] + fires = [0] * 4 + for t in range(ticks): + if spook_every and t % spook_every == 0 and t: + stride = [0] * 4 + last = [[0xFF] * 4 for _ in range(4)] + for h in range(pop): + inc = (base * HORSE_SPEED[h]) >> 16 + stride[h] = (stride[h] + inc) & MASK32 + for i in range(4): + hp = (stride[h] - (GAIT_OFFSET[gait][i] << 16)) & MASK32 + if chaos: + rng, rb = rand_bipolar(rng) + jit[h][i] = slew(jit[h][i], mul_q16(rb, chaos), 5) + hp = (hp + (jit[h][i] << 10)) & MASK32 + step = hp >> 28 + if step == 0 and last[h][i] != 0: + if FLAM_TICKS[gait][i] == 0: + fires[h] += 1 + else: + pend[h][i] = FLAM_TICKS[gait][i] + last[h][i] = step + if pend[h][i] > 0: + pend[h][i] -= 1 + if pend[h][i] == 0: + fires[h] += 1 + return fires + + +def check_gaits(): + """Print each gait's footfall order and verify it biomechanically.""" + print("Gait footfall order within one stride") + print("(landing time as a fraction of the stride)\n") + ok = True + for g in range(4): + lands = sorted((GAIT_OFFSET[g][i] / Q, LEG_NAME[i]) for i in range(4)) + seq = " ".join(f"{leg}@{p:.2f}" for p, leg in lands) + ps = [p for p, _ in lands] + [lands[0][0] + 1.0] + float_pct = max(ps[i + 1] - ps[i] for i in range(4)) * 100 + print(f" {GAIT_NAME[g]:<7} {seq} float {float_pct:.0f}%") + + order = [leg for _, leg in lands] + if g == 0: # walk: 4-beat lateral, same-side legs consecutive + if order != ["LH", "LF", "RH", "RF"]: + print(" FAIL: walk must be lateral LH-LF-RH-RF") + ok = False + elif g == 1: # trot: diagonal pairs together, half a stride apart + pairs = {} + for p, leg in lands: + pairs.setdefault(p, []).append(leg) + if sorted(map(sorted, pairs.values())) != [["LF", "RH"], ["LH", "RF"]]: + print(" FAIL: trot pairs must be diagonals") + ok = False + elif g == 2: # canter: 3 beats (one simultaneous pair) + suspension + if len({p for p, _ in lands}) != 3: + print(" FAIL: canter must have exactly 3 beats") + ok = False + if float_pct < 40: + print(" FAIL: canter needs a real suspension phase") + ok = False + elif g == 3: # gallop: both hinds before both fores, long float + hinds = [i for i, leg in enumerate(order) if leg in ("LH", "RH")] + fores = [i for i, leg in enumerate(order) if leg in ("LF", "RF")] + if not max(hinds) < min(fores): + print(" FAIL: gallop is rotary - both hinds precede fores") + ok = False + if float_pct < 50: + print(" FAIL: gallop needs a long suspension") + ok = False + print("\n " + ("All gaits biomechanically correct." + if ok else "SOME GAITS ARE WRONG - see FAIL lines above.")) + return ok + + +# =========================================================================== +# Mode 2: Geese — contagion across a swarm folded onto 4 outputs +# =========================================================================== +def geese(physics, chaos, pop, ticks, spook_every=0, clock_period=0): + excite = [0] * SWARM_SIZE + refr = [0] * SWARM_SIZE + rng = 0x1234 + fires = [0] * 4 + REFRACTORY = CTRL // 6 + flock = pop * SWARM_PER_AGENT + spark = (2 + (chaos >> 12)) * (NUM_AGENTS + 1 - pop) + contagion = (physics + mul_q16(physics, physics)) >> 1 + nudge = Q // 16 + for t in range(ticks): + if spook_every and t % spook_every == 0 and t: + for i in range(flock): + excite[i] = Q + if clock_period and t % clock_period == 0 and t: + for i in range(flock): + excite[i] = min(excite[i] + Q // 3, Q) + fired = 0 + for i in range(flock): + if refr[i] > 0: + refr[i] -= 1 + else: + p = spark + (mul_q16(excite[i], contagion) >> 6) + rng, r = rand_q16(rng) + if r < p: + fired |= 1 << i + refr[i] = REFRACTORY + if fired: + for i in range(flock): + if not (fired & (1 << i)): + continue + for j in range(flock): + if j != i: + excite[j] = min(excite[j] + nudge, Q) + for a in range(pop): + for k in range(SWARM_PER_AGENT): + if fired & (1 << (a * SWARM_PER_AGENT + k)): + fires[a] += 1 + break + for i in range(flock): + excite[i] = decay(excite[i], 9) + return fires + + +# =========================================================================== +# Mode 3: Frogs — Kuramoto, optionally entrained to an external clock +# =========================================================================== +DETUNE = [0, 3000, -2200, 5000] + + +# Frogs coupling curve. MIRRORS kCouple[] in engines.cpp - a geometric sweep of +# K from 0.40 down to 0.004, because the pond is locked above K~0.25 and +# scattered below K~0.03, so the whole audible transition is under one octave of +# K. The cube this replaced spent half the knob above K=0.125 (all locked). +FROG_COUPLE = [26214, 14741, 8290, 4662, 2621, 1474, 829, 466, 262] + + +def frog_k(physics): + """Knob Main -> Kuramoto coupling K, Q16. Linear interp on a Q16 table.""" + x = max(0, min(Q, physics)) + idx = (x * 8) >> 16 + if idx > 7: + idx = 7 + frac = (x * 8) - (idx << 16) + return FROG_COUPLE[idx] + mul_q16(FROG_COUPLE[idx + 1] - FROG_COUPLE[idx], frac) + + +def frogs(physics, chaos, pop, ticks, spook_every=0, clock_period=0): + rng = 0x1234 + phase = [] + for _ in range(4): + rng = xorshift(rng) + phase.append(rng) + fires = [0] * 4 + base_hz = 400 + if clock_period: + ch = (256 * CTRL) // clock_period + if 32 < ch < 8192: + base_hz = ch + base_inc = (base_hz * (1 << 32)) // (256 * CTRL) + K = frog_k(physics) + nat = [base_inc + ((base_inc >> 4) * mul_q16(d, chaos) >> 12) for d in DETUNE] + n = max(pop, 1) + clock_phase = 0 + for t in range(ticks): + if spook_every and t % spook_every == 0 and t: + for i in range(4): + rng = xorshift(rng) + phase[i] = rng + if clock_period: + clock_phase = (clock_phase + base_inc) & MASK32 + if t % clock_period == 0: + clock_phase = 0 + for i in range(n): + coup = 0 + partners = 0 + for j in range(n): + if j != i: + coup += fast_sin((phase[j] - phase[i]) & MASK32) + partners += 1 + if clock_period: + coup += fast_sin((clock_phase - phase[i]) & MASK32) + partners += 1 + if partners > 1: + coup = int(coup / partners) + adjust = (nat[i] * ((coup * (K >> 1)) >> 15)) >> 16 + before = phase[i] + phase[i] = (phase[i] + nat[i] + adjust) & MASK32 + if phase[i] < before: + fires[i] += 1 + return fires + + +def frogs_order(physics, chaos=Q // 2, ticks=CTRL * 15): + """Kuramoto order parameter R: 1.0 = locked, 0 = scattered.""" + rng = 0x1234 + phase = [] + for _ in range(4): + rng = xorshift(rng) + phase.append(rng) + base_inc = (400 * (1 << 32)) // (256 * CTRL) + K = frog_k(physics) + nat = [base_inc + ((base_inc >> 4) * mul_q16(d, chaos) >> 12) for d in DETUNE] + acc = [] + for t in range(ticks): + for i in range(4): + coup = 0 + for j in range(4): + if j != i: + coup += fast_sin((phase[j] - phase[i]) & MASK32) + coup = int(coup / 3) + phase[i] = (phase[i] + nat[i] + + ((nat[i] * ((coup * (K >> 1)) >> 15)) >> 16)) & MASK32 + if t > ticks // 2: + xs = sum(math.cos(2 * math.pi * p / 2 ** 32) for p in phase) + ys = sum(math.sin(2 * math.pi * p / 2 ** 32) for p in phase) + acc.append(math.hypot(xs, ys) / 4) + return sum(acc) / len(acc) + + +# =========================================================================== +# Mode 4: Rain — leaky integrate-and-fire with cross-feeding splash +# =========================================================================== +THRESH = [Q, (Q * 115) // 100, (Q * 88) // 100, (Q * 103) // 100] +LEAK_BIAS = [0, -1, 1, 0] +SPLASH = Q // 12 +METEOR_GAIN_MIN = Q // 5 +METEOR_GAIN_SPAN = Q - Q // 5 + +RAIN_FLOOR = 9000 +RAIN_GAIN_MIN = (Q * 40) // 100 +RAIN_GAIN_SPAN = (Q * 40) // 100 + + +def rain(physics, chaos, pop, ticks, spook_every=0, clock_period=0): + level = [0] * 4 + rng = 0x1234 + fires = [0] * 4 + x = physics + downpour = min(RAIN_FLOOR + mul_q16(Q - RAIN_FLOOR, fast_sqrt_q16(x)), Q) + rain_gain = RAIN_GAIN_MIN + mul_q16(RAIN_GAIN_SPAN, x) + leak_base = 10 - (chaos * 3 // Q) + for t in range(ticks): + if spook_every and t % spook_every == 0 and t: + for i in range(4): + rng, r = rand_q16(rng) + level[i] += (Q >> 1) + (r >> 1) + if clock_period and t % clock_period == 0 and t: + for i in range(4): + level[i] += Q // 6 + splash = [0] * 4 + for i in range(pop): + rng, r = rand_q16(rng) + drop = max(mul_q16(mul_q16(mul_q16(mul_q16(r, r), r), downpour), + rain_gain) >> 4, 0) + level[i] += drop + shift = max(5, min(12, leak_base + LEAK_BIAS[i])) + level[i] = decay(level[i], shift) + if level[i] >= THRESH[i]: + fires[i] += 1 + level[i] = 0 + nxt = i + 1 if i + 1 < pop else 0 + if nxt != i: + splash[nxt] += SPLASH + for i in range(pop): + level[i] += splash[i] + return fires + + +# =========================================================================== +# Mode 5: Meteors — inhomogeneous Poisson over a swarm +# =========================================================================== +def meteors(physics, chaos, pop, ticks, spook_every=0, clock_period=0): + rng = 0x1234 + density = 0 + target = 0 + until = 1 + fires = [0] * 4 + for t in range(ticks): + until -= 1 + if until == 0: + rng, target = rand_q16(rng) + rng = xorshift(rng) + until = CTRL + (rng % (3 * CTRL)) + density = slew(density, target, 9) + if spook_every and t % spook_every == 0 and t: + density = Q + if clock_period and t % clock_period == 0 and t: + density = min(density + Q // 4, Q) + if physics < Q // 2: + depth, floor = physics * 2, 0 + else: + tt = (physics - Q // 2) * 2 + depth, floor = Q - tt, tt + eff = floor + mul_q16(density, depth) + meteor_gain = METEOR_GAIN_MIN + mul_q16(METEOR_GAIN_SPAN, physics) + p = mul_q16(mul_q16(eff, eff), meteor_gain) >> 8 + if chaos: + rng, r = rand_q16(rng) + p += mul_q16(mul_q16(r, chaos), meteor_gain) >> 11 + for a in range(pop): + for k in range(SWARM_PER_AGENT): + rng, r = rand_q16(rng) + if r < p: + fires[a] += 1 + break + return fires + + +# =========================================================================== +# Mode 6: Cicadas - density-dependent chorus (amplitude coupling) +# =========================================================================== +def cicadas(physics, chaos, pop, ticks, spook_every=0, clock_period=0): + """Patched chorus: 4 patches of 3, each hearing mostly itself. + + One shared field made this a relaxation oscillator - everyone recovers, + everyone calls, everyone tires, repeat - which sounded like a gallop. + Patches swell out of step, so the whole field is irregular. + """ + PATCHES, PER = 4, 3 + rng = 0x1234 | 1 + phase, rec, sta, tem = [], [], [], [] + for _ in range(SWARM_SIZE): + rng = xorshift(rng) + phase.append(rng) + for _ in range(SWARM_SIZE): + rng = xorshift(rng); rec.append(11 + (rng % 3)) + rng = xorshift(rng); sta.append(Q // 2 + (rng % Q)) + rng = xorshift(rng); tem.append(Q * 42 // 64 + (rng % (Q * 58 // 64))) + fat = [0] * SWARM_SIZE + pf = [0] * PATCHES + fires = [0] * 4 + swarm = pop * SWARM_PER_AGENT + # A footstep is its OWN state, not a slam of fatigue: a fully fatigued + # insect still calls at a quarter rate, so the old spook read as a dip + # rather than a hush. Mirrors startle_ in engines.cpp. + startle = 0 + for t in range(ticks): + if spook_every and t % spook_every == 0 and t: + startle = Q + startle = decay(startle, 12) + if clock_period and t % clock_period == 0 and t: + for p in range(PATCHES): + pf[p] = min(pf[p] + Q // 4, Q) + base = 600 + mul_q16(600 * 5 // 4, physics) + glob = sum(pf) // PATCHES + called = [0] * PATCHES + fired = 0 + for i in range(swarm): + p = i // PER + drive = (pf[p] * 3 + glob) >> 2 + rs = Q + mul_q16(mul_q16(drive, physics), Q) * 6 + hz = mul_q16(base << 4, rs) >> 4 + tired = Q - (fat[i] * 3 // 4) + if startle > 0: + tired = mul_q16(tired, Q - startle) + my = mul_q16(mul_q16(hz, tem[i]), tired) + if chaos: + rng, rb = rand_bipolar(rng) + my += (my >> 3) * mul_q16(rb << 1, chaos) >> 15 + my = max(my, 16) + inc = (my * (1 << 32)) // (256 * CTRL) + b = phase[i] + phase[i] = (phase[i] + inc) & MASK32 + if phase[i] < b: + called[p] += 1 + fired |= 1 << i + fat[i] = min(fat[i] + mul_q16(mul_q16(Q // 2, physics), sta[i]), Q) + fat[i] = min(fat[i] + mul_q16(mul_q16(drive, physics), Q // 150), Q) + fat[i] = decay(fat[i], rec[i]) + for p in range(PATCHES): + if p * PER >= swarm: + pf[p] = 0 + continue + inst = min(called[p] * Q * 8 // PER, Q) + pf[p] = slew(pf[p], inst, 4) if inst > pf[p] else slew(pf[p], inst, 8) + for a in range(pop): + for k in range(SWARM_PER_AGENT): + if fired & (1 << (a * SWARM_PER_AGENT + k)): + fires[a] += 1 + break + return fires + + +def cicadas_swing(physics, secs=30): + """Swing of ONE patch. The mean across patches is deliberately flat: the + patches swell independently (correlation ~0.01), and that cancellation is + exactly what stops the field pulsing like a gallop.""" + PATCHES, PER = 4, 3 + rng = 0x1234 | 1 + phase, rec, sta, tem = [], [], [], [] + for _ in range(SWARM_SIZE): + rng = xorshift(rng) + phase.append(rng) + for _ in range(SWARM_SIZE): + rng = xorshift(rng); rec.append(11 + (rng % 3)) + rng = xorshift(rng); sta.append(Q // 2 + (rng % Q)) + rng = xorshift(rng); tem.append(Q * 42 // 64 + (rng % (Q * 58 // 64))) + fat = [0] * SWARM_SIZE + pf = [0] * PATCHES + hist = [] + for t in range(secs * CTRL): + base = 600 + mul_q16(600 * 5 // 4, physics) + glob = sum(pf) // PATCHES + called = [0] * PATCHES + for i in range(SWARM_SIZE): + p = i // PER + drive = (pf[p] * 3 + glob) >> 2 + rs = Q + mul_q16(mul_q16(drive, physics), Q) * 6 + hz = mul_q16(base << 4, rs) >> 4 + tired = Q - (fat[i] * 3 // 4) + my = max(mul_q16(mul_q16(hz, tem[i]), tired), 16) + inc = (my * (1 << 32)) // (256 * CTRL) + b = phase[i] + phase[i] = (phase[i] + inc) & MASK32 + if phase[i] < b: + called[p] += 1 + fat[i] = min(fat[i] + mul_q16(mul_q16(Q // 2, physics), sta[i]), Q) + fat[i] = min(fat[i] + mul_q16(mul_q16(drive, physics), Q // 150), Q) + fat[i] = decay(fat[i], rec[i]) + for p in range(PATCHES): + inst = min(called[p] * Q * 8 // PER, Q) + pf[p] = slew(pf[p], inst, 4) if inst > pf[p] else slew(pf[p], inst, 8) + hist.append(pf[0]) + seg = hist[CTRL * 5:] + return min(seg) / Q, max(seg) / Q + + +ENGINES = [("Horses", horses), ("Geese", geese), ("Frogs", frogs), + ("Rain", rain), ("Meteors", meteors), ("Cicadas", cicadas)] + + +def rates(): + secs = 20 + ticks = secs * CTRL + print(f"\nTrigger rates per agent (per second), {secs}s runs\n") + warn = [] + for name, fn in ENGINES: + print(f"{name}") + for label, phys, chaos, pop, spook, clk in [ + ("physics 0.00", 0, 0, 4, 0, 0), + ("physics 0.25", Q // 4, 0, 4, 0, 0), + ("physics 0.50", Q // 2, 0, 4, 0, 0), + ("physics 0.75", (3 * Q) // 4, 0, 4, 0, 0), + ("physics 1.00", Q - 1, 0, 4, 0, 0), + ("phys 0.5 chaos 1.0", Q // 2, Q - 1, 4, 0, 0), + ("phys 0.5 +spook/s", Q // 2, 0, 4, CTRL, 0), + ("phys 0.5 +clock 2Hz", Q // 2, 0, 4, 0, CTRL // 2), + ("phys 0.5 pop=2", Q // 2, 0, 2, 0, 0), + ]: + f = fn(phys, chaos, pop, ticks, spook, clk) + r = " ".join(f"{x / secs:6.2f}" for x in f) + print(f" {label:<21} {r}") + if max(f) / secs > 30: + warn.append(f"{name} {label}: {max(f)/secs:.0f}/s reads as a buzz") + print() + if warn: + print("Warnings:") + for w in warn: + print(" " + w) + + +def main(): + if len(sys.argv) > 1 and sys.argv[1] == "gaits": + check_gaits() + return + check_gaits() + print("\nFrogs sync curve (Kuramoto order parameter)") + for f in [0.0, 0.25, 0.5, 0.75, 1.0]: + R = frogs_order(min(int(f * Q), Q - 1)) + print(f" physics {f:.2f} R={R:.3f} {'#' * int(R * 40)}") + print("\nCicadas field swell (coupling depth)") + for f in [0.0, 0.25, 0.5, 0.75, 1.0]: + lo, hi = cicadas_swing(min(int(f * Q), Q - 1)) + print(f" physics {f:.2f} field {lo:.2f}..{hi:.2f} " + f"swing {hi-lo:.2f} {'#' * int((hi-lo) * 50)}") + rates() + + +if __name__ == "__main__": + main() diff --git a/releases/62_BioMimicry/tusb_config.h b/releases/62_BioMimicry/tusb_config.h new file mode 100644 index 000000000..713379d7c --- /dev/null +++ b/releases/62_BioMimicry/tusb_config.h @@ -0,0 +1,119 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2019 Ha Thach (tinyusb.org) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ + +#ifndef _TUSB_CONFIG_H_ +#define _TUSB_CONFIG_H_ + +#ifdef __cplusplus + extern "C" { +#endif + +//-------------------------------------------------------------------- +// COMMON CONFIGURATION +//-------------------------------------------------------------------- + +// defined by board.mk +#ifndef CFG_TUSB_MCU + #error CFG_TUSB_MCU must be defined +#endif + +// RHPort number used for device can be defined by board.mk, default to port 0 +#ifndef BOARD_DEVICE_RHPORT_NUM + #define BOARD_DEVICE_RHPORT_NUM 0 +#endif + +// RHPort max operational speed can defined by board.mk +// Default to Highspeed for MCU with internal HighSpeed PHY (can be port specific), otherwise FullSpeed +#ifndef BOARD_DEVICE_RHPORT_SPEED + #if (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \ + CFG_TUSB_MCU == OPT_MCU_NUC505 || CFG_TUSB_MCU == OPT_MCU_CXD56 || CFG_TUSB_MCU == OPT_MCU_SAMX7X) + #define BOARD_DEVICE_RHPORT_SPEED OPT_MODE_HIGH_SPEED + #else + #define BOARD_DEVICE_RHPORT_SPEED OPT_MODE_FULL_SPEED + #endif +#endif + +// Device mode with rhport and speed defined by board.mk +#if BOARD_DEVICE_RHPORT_NUM == 0 + #define CFG_TUSB_RHPORT0_MODE (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) +#elif BOARD_DEVICE_RHPORT_NUM == 1 + #define CFG_TUSB_RHPORT1_MODE (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) +#else + #error "Incorrect RHPort configuration" +#endif + +#ifndef CFG_TUSB_OS +#define CFG_TUSB_OS OPT_OS_NONE +#endif + +// CFG_TUSB_DEBUG is defined by compiler in DEBUG build +// #define CFG_TUSB_DEBUG 0 + +/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. + * Tinyusb use follows macros to declare transferring memory so that they can be put + * into those specific section. + * e.g + * - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") )) + * - CFG_TUSB_MEM_ALIGN : __attribute__ ((aligned(4))) + */ +#ifndef CFG_TUSB_MEM_SECTION +#define CFG_TUSB_MEM_SECTION +#endif + +#ifndef CFG_TUSB_MEM_ALIGN +#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4))) +#endif + +//-------------------------------------------------------------------- +// DEVICE CONFIGURATION +//-------------------------------------------------------------------- + +#ifndef CFG_TUD_ENDPOINT0_SIZE +#define CFG_TUD_ENDPOINT0_SIZE 64 +#endif + +//------------- CLASS -------------// +#define CFG_TUD_HID 0 +#define CFG_TUD_CDC 0 +#define CFG_TUD_MSC 0 +#define CFG_TUD_MIDI 1 +#define CFG_TUD_VENDOR 0 + +// MIDI FIFO size of TX and RX +// 256, not 64. SysEx goes out as USB-MIDI packets of 4 bytes carrying 3 data +// bytes each, so a 54-byte reply needs 72 bytes of FIFO -- more than the default +// 64 could ever hold, whatever the timing. That made the longest replies +// impossible to send intact rather than merely tight, and the symptoms were +// wonderful: "the card did not identify itself", a sync failing at random, and +// "user samples loaded" reported on a card with none, all from truncated or +// half-read replies. +#define CFG_TUD_MIDI_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 256) +#define CFG_TUD_MIDI_TX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 256) + +#ifdef __cplusplus + } +#endif + +#endif /* _TUSB_CONFIG_H_ */ diff --git a/releases/62_BioMimicry/usb_descriptors.c b/releases/62_BioMimicry/usb_descriptors.c new file mode 100644 index 000000000..f6d60a945 --- /dev/null +++ b/releases/62_BioMimicry/usb_descriptors.c @@ -0,0 +1,165 @@ +#include "tusb.h" +#include + + +/* + USB MIDI device descriptors, using serial number from RP2040 flash + */ + + +#define USB_PID 0x10C1 // Music Thing Modular Workshop System Computer +#define USB_VID 0x2E8A // Raspberry Pi +#define USB_BCD 0x0200 + +// String Descriptor Index +enum { + STRING_LANGID = 0, + STRING_MANUFACTURER, + STRING_PRODUCT, + STRING_SERIAL, + STRING_LAST, +}; + +// array of pointer to string descriptors +char const *string_desc_arr[] = { + (const char[]){ 0x09, 0x04 }, // 0: is supported language is English (0x0409) + "Music Thing", // 1: Manufacturer + "BioMimicry (Workshop)", // 2: Product + NULL, // 3: Serial number, using flash chip ID +}; + + + +// Device Descriptor +tusb_desc_device_t const desc_device = { + .bLength = sizeof(tusb_desc_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = USB_BCD, + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, + .bMaxPacketSize0 = CFG_TUD_ENDPOINT0_SIZE, + + .idVendor = USB_VID, + .idProduct = USB_PID, + .bcdDevice = 0x0100, + + .iManufacturer = STRING_MANUFACTURER, + .iProduct = STRING_PRODUCT, + .iSerialNumber = STRING_SERIAL, + + .bNumConfigurations = 0x01 +}; + +uint8_t const *tud_descriptor_device_cb(void) +{ + return (uint8_t const *)&desc_device; +} + +// Configuration descriptor +enum +{ + ITF_NUM_MIDI = 0, + ITF_NUM_MIDI_STREAMING, + ITF_NUM_TOTAL +}; + +#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_MIDI_DESC_LEN) + +// Endpoint number +#define EPNUM_MIDI 0x01 + +uint8_t const desc_fs_configuration[] = { + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), + + // Interface number, string index, EP Out & EP In address, EP size + TUD_MIDI_DESCRIPTOR(ITF_NUM_MIDI, 0, EPNUM_MIDI, 0x80 | EPNUM_MIDI, 64) +}; + +#if TUD_OPT_HIGH_SPEED +uint8_t const desc_hs_configuration[] = { + // Config number, interface count, string index, total length, attribute, power in mA + TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 100), + + // Interface number, string index, EP Out & EP In address, EP size + TUD_MIDI_DESCRIPTOR(ITF_NUM_MIDI, 0, EPNUM_MIDI, 0x80 | EPNUM_MIDI, 512) +}; +#endif + +// Invoked when received GET CONFIGURATION DESCRIPTOR +// Application return pointer to descriptor +// Descriptor contents must exist long enough for transfer to complete +uint8_t const *tud_descriptor_configuration_cb(uint8_t index) +{ + (void)index; // for multiple configurations + +#if TUD_OPT_HIGH_SPEED + // Although we are highspeed, host may be fullspeed. + return (tud_speed_get() == TUSB_SPEED_HIGH) ? desc_hs_configuration : desc_fs_configuration; +#else + return desc_fs_configuration; +#endif +} + +static uint16_t _desc_str[32]; + +// Invoked when received GET STRING DESCRIPTOR request +// Application return pointer to descriptor, whose contents must exist long enough for transfer to complete +uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) +{ + (void)langid; + + uint8_t chr_count; + + if (index == 0) + { + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; + } + else if (index == STRING_SERIAL) + { + pico_unique_board_id_t id; + pico_get_unique_board_id(&id); + uint64_t idx = *(uint64_t *)&id.id; + int serialnum = ((idx + 1) % 10000000ull); + if (serialnum < 1000000) + serialnum += 1000000; // 7 digits + char temp[16]; + chr_count = sprintf(temp, "%07d", serialnum); + for (uint8_t i = 0; i < chr_count; i++) + { + _desc_str[1 + i] = temp[i]; + } + } + else if (index < STRING_LAST) + { + // Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors. + // https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors + + if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0]))) return NULL; + + const char *str = string_desc_arr[index]; + + // Cap at max char + chr_count = strlen(str); + if (chr_count > 31) + { + chr_count = 31; + } + // Convert ASCII string into UTF-16 + for (uint8_t i = 0; i < chr_count; i++) + { + _desc_str[1 + i] = str[i]; + } + } + else + { + return NULL; + } + + // first byte is length (including header), second byte is string type + _desc_str[0] = (TUSB_DESC_STRING << 8) | (2 * chr_count + 2); + + return _desc_str; +} diff --git a/releases/62_BioMimicry/voices.cpp b/releases/62_BioMimicry/voices.cpp new file mode 100644 index 000000000..c33e81073 --- /dev/null +++ b/releases/62_BioMimicry/voices.cpp @@ -0,0 +1,654 @@ +// voices.cpp — voice rendering at 48kHz. +// +// Each mode gets a timbre that suggests its creature without pretending to be a +// recording, plus a round-robin variant system and a stereo strategy that comes +// from the ecosystem rather than from a knob. + +#include "voices.h" +#include "pico.h" // __not_in_flash_func +#include "samplestore.h" // user flash region, with baked fallback + +namespace bio { + +// Per-mode envelope decay shifts (larger = longer tail at 48kHz). +static const uint8_t kDecay[kNumModes] = { + 9, // Horses — tight clop + 11, // Geese — honk with some length + 11, // Frogs — ribbit body + 8, // Rain — very short drip + 13, // Meteors — long swoosh + 10 // Cicadas — short buzzing chirp +}; + +// Per-mode base pitch as a 48kHz phase increment (~ Hz * 89478). +static const uint32_t kBaseInc[kNumModes] = { + 16000000u, // Horses ~180Hz thump + 39000000u, // Geese ~440Hz honk + 27000000u, // Frogs ~300Hz ribbit + 124000000u, // Rain ~1.4kHz drip + 9000000u, // Meteors ~100Hz rumble under the noise + 340000000u // Cicadas ~3.8kHz stridulation +}; + +// Round-robin pitch offsets, Q16, used by the SYNTH voices — real recordings +// already differ from each other and are played at pitch. In Horses the first +// four are the hooves (hinds heavier and lower than fores); elsewhere they are +// simply individuals. +static const int32_t kVariantPitch[kNumModes][kNumVariants] = { + // Horses: LH, LF, RH, RF, then repeats — only the first four are ever used. + { 56000, 74000, 60000, 79000, 56000, 74000, 60000, 79000 }, + // Geese: birds of different size. + { 65536, 52000, 78000, 44000, 71000, 48000, 85000, 58000 }, + // Frogs: species in the chorus. + { 65536, 49000, 88000, 61000, 55000, 75000, 42000, 95000 }, + // Rain: drip sizes. + { 65536, 81000, 53000, 92000, 70000, 59000, 104000, 47000 }, + // Meteors: distances. + { 65536, 48000, 86000, 57000, 72000, 41000, 95000, 63000 }, + // Cicadas: a tight spread — a real field is fairly uniform. + { 65536, 69000, 62000, 72000, 67000, 59000, 75000, 64000 } +}; + +// --- PCM playback-rate variation ------------------------------------------- +// +// Per-agent body size: a signed position in the spread, -1.0..+1.0 in Q15. +// Fixed per agent so an animal keeps its identity — agent 0 is always the +// biggest and deepest, agent 3 the smallest. +static const int32_t kPcmAgentOffset[kNumAgents] = { -32768, 16384, -12000, 32767 }; + +// Full pitch spread per mode, Q16, applied as +/- this much of the playback +// rate. 3800 is about 1 semitone. A herd varies audibly; a field of cicadas +// barely at all, because they are the same insect many times over. +static const int32_t kPcmAgentSpread[kNumModes] = { + 2600, // Horses — ~0.7 semitones, distinct animals but still all horses + 4400, // Geese — birds differ noticeably in size + 6600, // Frogs — different species in one pond + 5100, // Rain — drip size varies with where it fell + 8800, // Meteors — distance, so the widest spread of all + 1500 // Cicadas — near-uniform +}; + +// Extra per-EVENT jitter, Q16 peak deviation. Zero for Horses: a horse is one +// animal and its clop must not change pitch hit to hit. For the crowd modes +// this is what stops two overlapping calls fusing into one doubled sound. +static const int32_t kPcmPerHit[kNumModes] = { + 0, // Horses — MUST stay fixed; see above + 1800, // Geese + 2400, // Frogs + 2000, // Rain + 3200, // Meteors + 1200 // Cicadas +}; + +// Stereo strategy per mode. The pan of a hit says something about the ecosystem: +// FIXED — the agent always sits in the same place (a stable image; you are +// standing beside the animal and its legs do not move around you). +// SPREAD — each swarm member has its own fixed spot, so a cascade sweeps +// across the field. +// RANDOM — every hit lands somewhere new, because every hit is a new object. +enum class PanMode : uint8_t { Fixed, Spread, Random }; +static const PanMode kPanMode[kNumModes] = { + PanMode::Fixed, // Horses — a stable animal in front of you + PanMode::Spread, // Geese — birds placed around you + PanMode::Spread, // Frogs — a pond, voices at fixed spots + PanMode::Random, // Rain — drips land wherever they land + PanMode::Random, // Meteors — each strike is a new object crossing the sky + PanMode::Spread // Cicadas — a dense field all around +}; + +/// Place a voice in the stereo field. `pos17` is 0 (hard left) to 16 (hard +/// right), 8 = centre. Both gains keep a floor so a hard-panned hit still has +/// presence in the other ear rather than vanishing — with only two outputs, +/// fully-dead channels make a patch feel broken on a mono system. +static inline void setPan(Voice &v, int pos17) +{ + if (pos17 < 0) pos17 = 0; + if (pos17 > 16) pos17 = 16; + int32_t r = pos17 * 2048; // 0..32768 + int32_t l = 32768 - r; + constexpr int32_t kFloor = 6000; + v.panL = kFloor + ((l * (32767 - kFloor)) >> 15); + v.panR = kFloor + ((r * (32767 - kFloor)) >> 15); +} + +void VoiceBank::init(bool usePcm, bool tuned) +{ + tuned_ = tuned; + // AnySamples() covers both sources: a user upload alone is enough, even in + // a build with nothing baked in. + usePcm_ = usePcm && AnySamples(); + + // Resolve the variant tables once, here, instead of walking the user header + // in flash on every note-on. Uploading samples reboots the card, so this can + // never go stale while the card is playing. + for (int m = 0; m < kNumModes; m++) + { + // Resolve every slot's pointer and length FIRST, so note() never touches + // the flash header again — and so the duplicate test below can compare + // pointers rather than re-reading flash. + for (int v = 0; v < kNumVariants; v++) + { + SampleRef sr = ResolveSample(m, v); + sampleData_[m][v] = sr.data; + sampleLen_[m][v] = sr.len; + } + + int n = 0; + if (ModeIsUserLoaded(m)) + { + // Every filled slot counts, INCLUDING two that point at the same + // audio. The web UI lets one uploaded recording be mapped to several + // slots — and if you put one file on both Horses 1 and Horses 3 you + // meant two hooves, not one. Deliberate reuse is not padding, so the + // duplicate test below deliberately does not apply here. + const UserSampleHeader *h = UserHeader(); + for (int v = 0; v < kNumVariants; v++) + if (h->size[m][v] > 0) variantSlot_[m][n++] = static_cast(v); + } + else if (kHaveSamples) + { + // Only count slots holding DISTINCT audio. mksamples.py pads a mode + // with fewer recordings than slots by repeating earlier ones, so + // Meteors' five swooshes fill eight slots as 1,2,3,4,5,1,2,3 — and a + // blind round robin over all eight then played 1-3 twice as often as + // 4-5. An unintended weighting, invisible because the padding is + // deliberate and commented. Duplicates share a flash pointer, so + // identity is the test. + for (int v = 0; v < kNumVariants; v++) + { + bool dup = false; + for (int k = 0; k < n; k++) + if (sampleData_[m][variantSlot_[m][k]] == sampleData_[m][v]) + { dup = true; break; } + if (!dup) variantSlot_[m][n++] = static_cast(v); + } + } + variantCount_[m] = static_cast(n); + } + + // The voice POOL is larger than the agent count, so it gets its own loop. + for (int i = 0; i < kNumVoices; i++) + { + Voice &v = v_[i]; + v.env = 0; v.phase = 0; v.phase2 = 0; v.inc = 0; v.inc2 = 0; + v.pitchEnv = 0; + v.noiseRng = 0x1234567u + static_cast(i) * 2654435761u; + v.filt = 0; v.filt2 = 0; v.bp = 0; + v.decayShift = 10; v.mode = 0; v.variant = 0; + v.ksLen = 64; v.ksPos = 0; + for (int k = 0; k < 128; k++) v.ks[k] = 0; + v.pcm = nullptr; v.pcmLen = 0; v.pcmIdx = 0; v.pcmFrac = 0; v.pcmInc = 65536; + v.agent = -1; // free + v.release = kQ16One; + v.fadeOut = 0; + setPan(v, 2 + (i % kNumAgents) * 4); + } + + for (int i = 0; i < kNumAgents; i++) lastVariant_[i] = 0xFF; +} + +void __not_in_flash_func(VoiceBank::selectVariantAndPan)(Voice &v, int agent, Mode m, uint8_t member) +{ + int mi = static_cast(m); + + if (m == Mode::Horses) + { + // The variant IS the hoof that landed, reported by the engine. A gait + // only sounds like an animal when each leg has its own voice — and with + // a herd, each horse plays all four of its own hooves. + v.variant = static_cast(member % kHoofVariants); + lastSlot_ = static_cast(v.variant); // the hoof, for the pitch CV + } + else + { + // Round robin with no immediate repeat, so you never hear the same + // honk or drip twice running. + // + // Bounded by what this mode actually HAS, not by the eight slots it could + // have. Uploading two geese used to leave the other six baked recordings + // in the rotation, so you heard your two mixed with six of the card's — + // never what replacing a mode is meant to do. + // No divide, and no retry loop. `% n` compiled to an __aeabi_uidivmod + // call — a software divide on a core with no divider — INSIDE a loop + // that can spin, and this runs per note-on. Together with the two + // flash-walking helpers it made a single note() cost ~2148 cycles, + // 82% of the whole sample budget. + // + // Advance-and-wrap instead: it gives the same "never twice running" + // guarantee by construction rather than by rejection, and costs an add + // and a compare. + int n = variantCount_[mi]; + if (n < 1) n = 1; + uint8_t pick; + if (n == 1) + { + pick = 0; + } + else + { + // Step 1..n-1 places on from the last one, so it always differs. + uint32_t adv = 1u + (xorshift32(rng_) & 7u); + while (adv >= static_cast(n)) adv -= static_cast(n); + if (adv == 0) adv = 1; + int next = lastVariant_[agent] + static_cast(adv); + while (next >= n) next -= n; + pick = static_cast(next); + } + lastVariant_[agent] = pick; + // Map onto a slot that actually holds audio, so uploading to slots 1 and + // 5 works as well as 1 and 2 — the browser does not have to police order. + v.variant = variantSlot_[mi][pick]; + lastSlot_ = static_cast(pick); // for the alt-boot pitch CV + } + + switch (kPanMode[mi]) + { + case PanMode::Fixed: + // Each horse holds its own place in the field, and its four hooves sit + // just around that spot — near/off side. The animal stays put; you hear + // its legs, not four wandering sounds. + setPan(v, 2 + agent * 4 + ((v.variant & 1) ? 1 : -1)); + break; + case PanMode::Spread: + // Agent's spot, nudged by which individual this is, so the members of a + // flock occupy their own places rather than stacking up. + // + // `& 3` used to mask this to four positions, so variants 4-7 landed on + // exactly the same spots as 0-3 — eight round robins produced four + // placements. That is most of why Cicadas, whose variants differ little + // in timbre by design, sounded like four insects rather than eight. + // Halved and offset so eight variants still fit the agent's own region + // of the field rather than sprawling across it. + setPan(v, 1 + agent * 4 + (v.variant >> 1)); + break; + case PanMode::Random: + { + // Anywhere — every drip and every meteor is a new object. + // + // `% 17` is a software divide on this core, per note-on. Masking to 0..31 + // and folding the top half back gives 0..16 with only a compare and a + // subtract; the slight bias toward the middle positions is inaudible in a + // pan position that is meant to be arbitrary anyway. + uint32_t p = xorshift32(rng_) & 31u; + if (p > 16u) p -= 17u; + setPan(v, static_cast(p)); + break; + } + } +} + +void __not_in_flash_func(VoiceBank::note)(int i, Mode m, int32_t accent, int32_t variation, + uint8_t member) +{ + // Pick a voice from the pool rather than using the agent index directly. + // + // Order of preference: a free voice, then the quietest sounding one. Taking + // the quietest means a steal lands on whatever is closest to finished, which + // is the least audible thing to interrupt — and the release ramp below hides + // what is left of it. + int slot = -1; + uint32_t leastLeft = 0xFFFFFFFFu; + int oldestSlot = 0; + for (int k = 0; k < kNumVoices; k++) + { + if (v_[k].agent < 0) { slot = k; break; } + // A voice already fading out is the best thing to take: it is on its way + // to silence anyway, so cutting it short costs nothing audible. Without + // this the fades would occupy slots and shrink the effective pool. + if (v_[k].fadeOut > 0) { leastLeft = 0; oldestSlot = k; continue; } + // Which sounding voice has the LEAST LEFT to play? + // + // This used to compare how far each voice had got, which is wrong when + // samples differ in length: a 770ms frog 300ms in looked "more played" + // than a 179ms goose 150ms in, even though the goose is nearly finished + // and the frog is a third of the way through. Frogs are the longest + // recordings on the card (770ms mean against Geese's 179ms), so they + // were the ones being cut — which is exactly what was reported. + // + // Remaining, not progress. Still a subtraction, no divide. + uint32_t left = v_[k].pcm + ? (v_[k].pcmLen > v_[k].pcmIdx ? v_[k].pcmLen - v_[k].pcmIdx : 0) + : static_cast(v_[k].env); + if (left <= leastLeft) { leastLeft = left; oldestSlot = k; } + } + if (slot < 0) + { + // Nothing free. Hand the chosen victim a 4ms fade-out and let it keep + // sounding into the new note, rather than cutting it dead — the outgoing + // discontinuity is the click, and a fade-in on the new voice cannot hide + // it. It frees itself once the fade completes. + // + // The new note takes the same slot only if the victim is ALREADY fading + // (nothing left to lose); otherwise it takes the next slot along, so the + // two genuinely overlap for those 4ms. + if (v_[oldestSlot].fadeOut > 0) + { + slot = oldestSlot; + } + else + { + v_[oldestSlot].fadeOut = kQ16One; + slot = (oldestSlot + 1) % kNumVoices; + // If that one is live too, it is the least-bad remaining choice; take + // it outright rather than cascading fades through the whole pool. + } + } + + Voice &v = v_[slot]; + v.agent = static_cast(i); + int mi = static_cast(m); + + v.mode = static_cast(mi); + v.env = (accent > kQ16One) ? kQ16One : accent; + v.decayShift = kDecay[mi]; + v.pitchEnv = kQ16One; + v.phase = 0; + v.phase2 = 0; + v.filt = 0; + v.filt2 = 0; + v.bp = 0; + + selectVariantAndPan(v, i, m, member); + + // Pitch: mode base, shifted by the round-robin variant, then nudged by the + // engine's state so repeated hits are never quite identical. + int32_t pitchScale = kVariantPitch[mi][v.variant]; + pitchScale = mul_q16(pitchScale, kQ16One + (variation >> 3) - 4096); + if (pitchScale < 8192) pitchScale = 8192; + + v.inc = static_cast( + (static_cast(kBaseInc[mi]) * pitchScale) >> 16); + // Second oscillator, slightly detuned, for the modes that use it. + v.inc2 = v.inc + (v.inc >> 6); + + if (usePcm_) + { + // Play this variant's slice of the mode's blob — in Horses, the sample + // for the hoof that actually landed. + // Cached at init — see sampleData_. This used to call ResolveSample(), + // which reads the user header through XIP on every single trigger. + v.pcm = sampleData_[mi][v.variant]; + v.pcmLen = sampleLen_[mi][v.variant]; + v.pcmIdx = 0; + v.pcmFrac = 0; + v.fadeOut = 0; // this voice is starting, not ending + + // Start the fade-in from silence. Recordings are trimmed to their attack + // so they begin at a non-zero amplitude, and starting one abruptly in a + // voice that was just cut off is a step discontinuity — a click. Two + // milliseconds is short enough to leave a hoof or a drip sounding sharp, + // and long enough to remove the edge. + v.release = 0; + + // Playback rate. Everything used to play at exactly 1:1, so four horses + // were byte-identical and a flock of geese was one goose repeated. + // + // The distinction that matters: an ANIMAL has a fixed size, so its rate + // must be constant every time it sounds — a horse whose clop changes + // pitch hit to hit is not one horse. A CROWD is many individuals, so + // there the variation is per-event. + int32_t rate = kQ16One; + + // TUNED (alt boot): play the recording at its own pitch, full stop. + // + // Everything below assumes the sample is a creature — a per-agent body + // size, a per-hit wobble, a per-variant individual. All three are right + // for a flock and wrong for anything pitched, where they read as four + // permanently out-of-tune copies that also wobble. A static tone or a + // chord stab wants none of it, and that is exactly the material someone + // uploads. Rhythm keeps the humanisation; alt mode is an instrument. + if (!tuned_) + { + // Per-agent body size: a fixed offset, so agent 2 is always the same + // animal. kPcmAgentOffset is +/-1.0 in Q15, so >>15 scales the mode's + // spread onto it. + rate += (kPcmAgentOffset[i] * kPcmAgentSpread[mi]) >> 15; + + // Per-VARIANT pitch, which the PCM path never had. kVariantPitch was + // computed above into v.inc and then only ever read by the synth + // branch, so with samples baked in the round robin differed in timbre + // but never in pitch — eight geese at exactly one pitch. + // + // NOT for Horses: its four variants are the four hooves of ONE animal, + // and the rule the mode is built on is that a horse's pitch cannot + // change hit to hit. Applying it there would undo kPcmPerHit being 0. + // + // Scaled by the mode's own spread rather than used raw, so a mode meant + // to be uniform stays uniform: Cicadas moves a few cents, Frogs a few + // tenths of a semitone. These are real recordings that already differ, + // so this only has to break the sense of one sound repeating. + if (mi != static_cast(Mode::Horses)) + { + int32_t dev = kVariantPitch[mi][v.variant] - kQ16One; + rate += (dev * kPcmAgentSpread[mi]) >> 17; + } + + if (kPcmPerHit[mi]) + { + // Crowd modes: an extra small random nudge per event, so two + // overlapping honks never fuse into one doubled sound. + int32_t j = rand_bipolar(rng_); // +/-16384 + rate += (j * kPcmPerHit[mi]) >> 14; + } + } + + if (rate < kQ16One / 4) rate = kQ16One / 4; // never below 0.25x + if (rate > kQ16One * 3) rate = kQ16One * 3; // never above 3x + v.pcmInc = static_cast(rate); + return; + } + + // Frogs use Karplus-Strong: excite the delay line with noise, then let the + // averaging low-pass in render() turn it into a pitched pluck. + if (m == Mode::Frogs) + { + uint32_t len = 48000u * 65536u / (v.inc / 1024u + 1u) / 1024u; + if (len < 16) len = 16; + if (len > 127) len = 127; + v.ksLen = static_cast(len); + v.ksPos = 0; + for (uint8_t k = 0; k < v.ksLen; k++) + v.ks[k] = static_cast(rand_bipolar(v.noiseRng) >> 3); + } +} + +void __not_in_flash_func(VoiceBank::render)(int active, int16_t &l, int16_t &r) +{ + int32_t accL = 0, accR = 0; + + for (int i = 0; i < kNumVoices; i++) + { + Voice &v = v_[i]; + int32_t s = 0; + + // Free voices cost one compare, which is what makes a pool affordable. + if (v.agent < 0) continue; + + if (usePcm_) + { + // Compare in SAMPLE space, not in Q16 position space: pcmLen << 16 + // overflows 32 bits for anything longer than 65536 bytes (1.37s), + // which silently truncated the two longest meteor swooshes to under + // half their length. + uint32_t idx = v.pcmIdx; + if (v.pcm && idx < v.pcmLen) + { + // 8-bit PCM, linear-interpolated so pitch-shifted playback + // doesn't alias badly. + int32_t mu = static_cast(v.pcmFrac); + int32_t a = v.pcm[idx]; + int32_t b = (idx + 1 < v.pcmLen) ? v.pcm[idx + 1] : 0; + s = (a + (((b - a) * mu) >> 16)) << 4; // 8-bit -> 12-bit + + // Advance: carry the Q16 fraction into whole samples, so the + // index has the full 32-bit range instead of the 16 bits a + // combined Q16 position would leave it. + v.pcmFrac += v.pcmInc; + v.pcmIdx += v.pcmFrac >> 16; + v.pcmFrac &= 0xFFFF; + + // Fade in over ~2ms. The PCM path had NO envelope at all: v.env + // was set by note() and never read here, so a sample played flat + // and a retrigger jumped straight to the new recording's first + // byte. That step is what was heard as truncation. + if (v.release < kQ16One) + { + // 4ms, up from 2. Matches the fade-OUT below so a steal is a + // symmetrical crossfade rather than a dip or a bump. + v.release += kQ16One / 192; // 192 samples = 4ms at 48kHz + if (v.release > kQ16One) v.release = kQ16One; + // Plain 32-bit multiply, NOT mul_q16: that widens to int64 + // and becomes an __aeabi_lmul call, which at one per voice + // per sample across eight voices cost ~700 cycles. |s| <= + // 2048 and release <= 65536, so the product peaks at 1.3e8 + // with 16x headroom inside int32. + s = (s * v.release) >> 16; + } + + // Stolen: ramp to silence over 4ms and then free the slot. Long + // enough to remove the step without smearing the new note that + // is already sounding alongside it. + if (v.fadeOut > 0) + { + v.fadeOut -= kQ16One / 192; // 192 samples = 4ms at 48kHz + if (v.fadeOut <= 0) + { + v.fadeOut = 0; + v.agent = -1; + v.pcm = nullptr; + s = 0; + } + else s = (s * v.fadeOut) >> 16; + } + } + else + { + // Finished: hand the voice back to the pool. + v.agent = -1; + v.pcm = nullptr; + } + } + else if (v.env > 0) + { + switch (static_cast(v.mode)) + { + case Mode::Horses: + { + // Hoof on a hard road: a pitch-dropping sine body for the mass + // of the animal, plus a sharp noise transient for the shoe + // striking stone. The transient is most of what makes it read + // as a hoof rather than a kick drum. + uint32_t inc = static_cast( + (static_cast(v.inc) * (kQ16One + v.pitchEnv * 3)) >> 16); + v.phase += inc; + int32_t body = fast_sin(v.phase) >> 4; + + int32_t click = 0; + if (v.pitchEnv > 40000) + { + // Band-passed noise for the stony "tk" of the impact. + int32_t n = rand_bipolar(v.noiseRng); + v.bp += (n - v.bp) >> 1; + v.filt += (v.bp - v.filt) >> 3; + click = (v.bp - v.filt) >> 3; + } + s = body + click; + v.pitchEnv = fast_exp_decay(v.pitchEnv, 6); + break; + } + case Mode::Geese: + { + // Honk: a buzzy saw through two poles, with the cutoff opening + // at the attack so it starts hard and softens — the nasal + // "kink" of the call. + v.phase += v.inc; + int32_t saw = static_cast(v.phase >> 20) - 2048; + int32_t k = 1 + (v.pitchEnv >> 15); + v.filt += (saw - v.filt) >> k; + v.filt2 += (v.filt - v.filt2) >> 1; + s = v.filt2; + v.pitchEnv = fast_exp_decay(v.pitchEnv, 8); + break; + } + case Mode::Frogs: + { + // Karplus-Strong: average adjacent taps (the low-pass) and feed + // it back around the delay line. + // Increment and wrap, not `% v.ksLen`: ksLen is not a power of + // two, so the modulo compiled to an __aeabi_idivmod call — in + // the 48kHz render loop, for every sounding Frogs voice. + uint8_t nxt = static_cast(v.ksPos + 1); + if (nxt >= v.ksLen) nxt = 0; + int32_t avg = (v.ks[v.ksPos] + v.ks[nxt]) >> 1; + avg -= avg >> 6; // damping + v.ks[v.ksPos] = static_cast(avg); + v.ksPos = nxt; + s = avg; + break; + } + case Mode::Rain: + { + // Water drip: a sine whose pitch RISES as it decays, which is + // the acoustic signature of a bubble collapsing in liquid and + // the reason a drip sounds like a drip. + uint32_t inc = static_cast( + (static_cast(v.inc) * + (kQ16One + ((kQ16One - v.pitchEnv) >> 1))) >> 16); + v.phase += inc; + s = fast_sin(v.phase) >> 4; + if (v.pitchEnv > 50000) + s += rand_bipolar(v.noiseRng) >> 5; + v.pitchEnv = fast_exp_decay(v.pitchEnv, 5); + break; + } + case Mode::Cicadas: + { + // Stridulation: a high tone chopped by a fast amplitude buzz. + // Two oscillators, one audio-rate and one at the wing-beat + // rate, multiplied — that ring-mod is the insect quality. + v.phase += v.inc; + v.phase2 += v.inc >> 7; + int32_t tone = fast_sin(v.phase) >> 4; + int32_t buzz = (fast_sin(v.phase2) >> 8) + 128; // 0..256 + s = (tone * buzz) >> 8; + s += rand_bipolar(v.noiseRng) >> 6; // a little chitin hiss + break; + } + case Mode::Meteors: + default: + { + // Filtered noise swoosh: the cutoff opens as the envelope + // decays, giving the sound its passing-overhead sweep. + int32_t n = rand_bipolar(v.noiseRng) >> 3; + int32_t k = 1 + (v.env >> 14); // 1..4 + v.filt += (n - v.filt) >> k; + v.filt2 += (v.filt - v.filt2) >> 3; + v.phase += v.inc; + s = v.filt2 + (fast_sin(v.phase) >> 6); + break; + } + } + + // Apply and advance the amplitude envelope. 32-bit multiply for the + // same reason as the PCM fade above: synth output is 12-bit too. + s = (s * v.env) >> 16; + v.env = fast_exp_decay(v.env, v.decayShift); + } + + // Below audibility (or a synth voice whose envelope already reached + // zero, which skips the branch above): return it to the pool so the next + // note can have it without a steal. + if (!usePcm_ && v.env < 64) { v.agent = -1; continue; } + + // Silence agents outside the current population. + if (v.agent >= active) continue; + + accL += mul_q15(s, v.panL); + accR += mul_q15(s, v.panR); + } + + l = clamp12(accL); + r = clamp12(accR); +} + +} // namespace bio diff --git a/releases/62_BioMimicry/voices.h b/releases/62_BioMimicry/voices.h new file mode 100644 index 000000000..05e4a8919 --- /dev/null +++ b/releases/62_BioMimicry/voices.h @@ -0,0 +1,156 @@ +// voices.h — the audio side: a pool of voices rendered and placed at 48kHz. +// +// Two backends. The synthesized one is always available; the PCM one plays +// baked-in or uploaded samples. +// +// Holding the momentary switch at power-on selects TUNED mode, which plays those +// recordings at their own pitch: no per-agent body size, no per-hit wobble. The +// card otherwise assumes every sample is a creature and detunes accordingly, +// which is right for a flock and wrong for anything pitched. +// +// Both back-ends use ROUND ROBINS: every trigger picks a variant, and the +// variant means something per mode — which hoof, which bird, which species — +// rather than being decorative randomisation. + +#pragma once +#include "biomimicry.h" + +namespace bio { + +/// Round-robin variants per mode. Eight, because with a flock of twelve geese +/// four recordings repeat audibly — and flash is not the constraint (the full +/// sample set is ~834KB of ~1.9MB free). +/// +/// HORSES is the exception: its variants are the four HOOVES, not arbitrary +/// alternates, so it only ever uses the first four slots. See kHoofVariants. +constexpr int kNumVariants = 8; + +/// Horses uses exactly one variant per hoof (LH, LF, RH, RF). +constexpr int kHoofVariants = 4; + +/// One polyphonic slot, owned by one agent. +struct Voice +{ + // Envelope + tone state (synth backend) + int32_t env; // Q16 amplitude envelope + uint32_t phase; // oscillator phase + uint32_t phase2; // second oscillator / formant + uint32_t inc; // phase increment + uint32_t inc2; + int32_t pitchEnv; // Q16 pitch-drop envelope (the "clop") + uint32_t noiseRng; // per-voice noise source + int32_t filt; // one-pole filter memory for noise colouring + int32_t filt2; // second pole, for the swoosh/honk shapes + int32_t bp; // band-pass state, for resonant chirps + uint8_t decayShift; // envelope decay rate + uint8_t mode; // which timbre to render + uint8_t variant; // which round-robin variant this hit is + + // Karplus-Strong delay line (Frogs). 128 samples covers down to ~375Hz, + // which is the bottom of the ribbit range. + int16_t ks[128]; + uint8_t ksLen; + uint8_t ksPos; + + // Stereo placement for THIS hit, Q15 gains. Set at note-on so a mode can + // place each trigger where its ecosystem would put it. + int32_t panL, panR; + + // PCM backend state. + // + // Position is split into WHOLE SAMPLES and a Q16 fraction rather than being + // one Q16 number. A single uint32 Q16 position tops out at 2^32/65536 = + // 65536 samples, i.e. 1.37 seconds — and meteors_4 (97493) and meteors_5 + // (118596) are longer than that, so the position wrapped back to zero before + // it ever reached pcmLen. `idx < pcmLen` was then never false, the voice was + // never freed, and the swoosh looped forever, straight through mode changes. + const int8_t *pcm; + uint32_t pcmLen; + uint32_t pcmIdx; // whole samples played + uint32_t pcmFrac; // Q16 fraction within the current sample + uint32_t pcmInc; // Q16 rate + + // Which agent this voice is currently sounding for, or -1 when free. Voices + // are a POOL now rather than one-per-agent: a flock of twelve folded onto + // four outputs retriggers the same agent long before its last sample has + // finished, and with one voice each that cut the sound off mid-body. + int8_t agent; + + // Fade-in ramp, Q16, climbing to unity over a couple of ms at note-on. + int32_t release; + + // Fade-OUT, for a voice that has been stolen. Counts down from kQ16One; the + // voice keeps playing its old sample, quieter each sample, and only frees + // itself when it reaches zero. + // + // A fade-in alone cannot fix a steal: the discontinuity is on the OUTGOING + // voice, which was stopping dead mid-waveform. That is inaudible when the + // stolen voice was nearly finished and obvious when it was not — and + // stealing "least left" makes the second case the normal one for modes whose + // samples are all a similar length, like Geese. + int32_t fadeOut; +}; + +/// Voices in the pool. Two per agent: the swarm modes fold twelve members onto +/// four outputs, so one agent is routinely retriggered while its previous hit is +/// still sounding — Geese can retrigger at ~56ms against samples of 137-222ms. +constexpr int kNumVoices = kNumAgents * 2; + +class VoiceBank +{ +public: + /// `tuned` = play samples at their recorded pitch, with no per-agent body + /// size and no per-hit jitter. The card otherwise assumes every recording is + /// an animal and detunes accordingly — which is right for a flock and wrong + /// for anything pitched, where it reads as four out-of-tune copies wobbling. + void init(bool usePcm, bool tuned = false); + + /// Trigger agent `i`'s voice with the timbre for `m`. + /// `accent` (Q16) scales level; `variation` (Q16) nudges pitch per hit. + /// `member` names the sub-member that fired where the mode has one (in + /// Horses, which hoof); modes without one pass 0 and get a round robin. + void note(int i, Mode m, int32_t accent, int32_t variation, uint8_t member); + + /// Render one sample of all voices, summed and panned into L/R. + void render(int active, int16_t &l, int16_t &r); + + /// Which round-robin slot the most recent note used, 0-based, or -1 before + /// anything has sounded. Alt boot puts this on a CV as 1V/oct, so an external + /// oscillator or filter can follow WHICH sample the ecosystem just fired. + int lastSlot() const { return lastSlot_; } + + bool usingPcm() const { return usePcm_; } + +private: + /// Pick the round-robin variant for this hit and place it in the stereo + /// field, both according to the mode's own logic. + void selectVariantAndPan(Voice &v, int agent, Mode m, uint8_t member); + + // Twice as many voices as agents, so an overlapping hit usually finds a free + // one rather than cutting a live one short. ~332 bytes each against ~80KB + // free, so the cost is RAM we have; the constraint was always CPU, and the + // core-1 split left core 0 with headroom (Total 2209 of 2604). + Voice v_[kNumVoices]; + uint8_t lastVariant_[kNumAgents]; // for no-immediate-repeat + uint32_t rng_ = 0x9E3779B9u; + + // Which slots actually hold audio, resolved ONCE in init() rather than per + // note-on. VariantCount() and PickUserVariant() each walk all eight slots + // through the user header in XIP flash, and calling them per trigger cost + // real cycles in the hot path for an answer that only changes when samples + // are uploaded — which reboots the card anyway. + uint8_t variantCount_[kNumModes] = {}; + uint8_t variantSlot_[kNumModes][kNumVariants] = {}; + + // Resolved sample pointers, also cached at init. ResolveSample() reads the + // user header through XIP — magic, version, size, offset — and note() called + // it per trigger. Four flash reads while core 1 is contending for the same + // bus is not cheap, and the answer only changes on upload, which reboots. + const int8_t *sampleData_[kNumModes][kNumVariants] = {}; + uint32_t sampleLen_[kNumModes][kNumVariants] = {}; + bool usePcm_ = false; + bool tuned_ = false; + int8_t lastSlot_ = -1; +}; + +} // namespace bio diff --git a/releases/62_BioMimicry/web/index.html b/releases/62_BioMimicry/web/index.html new file mode 100644 index 000000000..e974b1752 --- /dev/null +++ b/releases/62_BioMimicry/web/index.html @@ -0,0 +1,1201 @@ + + + + + +BioMimicry — sample uploader + + + +

+

BioMimicry — sample uploader

+

+ Drop your own recordings onto the card over USB. Chrome or Edge (WebMIDI). +

+

+ Hold the card's momentary switch down for two seconds — the LEDs fill and + stay lit. Then Connect. +

+

+ To go back to playing, restart the card by holding the switch, or press + Back to playing. +

+ +
+ + + + + + Not connected. +
+ + + + + +
+

Your samples

+

+ Load recordings here, then pick them in the slots below. One file can be + used as many times as you like — the card stores it once, so reuse is free. +

+
+ + +
+ + +
+

On the card

+
+
+ +
+ + +

+ Any WAV works, mono or stereo. Browser converts to the card's format (8-bit + mono 48 kHz), trims silence and matches loudness. +

+

+ Setting a slot to none removes it, so a mode with three slots filled + plays a three-way round robin. +

+

+ Each slot can be: 1. a recording the card already holds + (USER 1, USER 2…) 2. one of its built-in + recordings, 3. a file you have just loaded (NEW 1…), which + will upload 4. None (unused) +

+

+ Upload samples sends any NEW files and applies the mapping. +

+

+ Update mapping only rewrites which slot plays what. +

+

+ Revert to built-in above clears everything and reclaims the + space. +

+

+ Sample changes/mapping survive power off! +

+
+ + + + diff --git a/releases/62_BioMimicry/webui.cpp b/releases/62_BioMimicry/webui.cpp new file mode 100644 index 000000000..4ae0bedad --- /dev/null +++ b/releases/62_BioMimicry/webui.cpp @@ -0,0 +1,899 @@ +// webui.cpp — USB-MIDI SysEx sample upload. + +#include "webui.h" +#include "crosscore.h" +#include +#include "tusb.h" +#include "profile.h" +#include "pico/multicore.h" +#include "hardware/flash.h" +#include "hardware/sync.h" +#include "hardware/irq.h" +#include "hardware/watchdog.h" +#include "hardware/dma.h" + +namespace bio { + +volatile bool WebUI::usbMode = false; +volatile bool WebUI::uploadMode = false; +volatile bool WebUI::core0Parked = false; +volatile uint8_t WebUI::stage = 0; + +// --------------------------------------------------------------------------- +// 7-bit encoding +// --------------------------------------------------------------------------- + +uint32_t Encode7bit(const uint8_t *src, uint32_t srcLen, uint8_t *dst, + uint32_t dstMax) +{ + uint32_t o = 0; + for (uint32_t i = 0; i < srcLen; i += 7) + { + uint32_t n = (srcLen - i < 7) ? (srcLen - i) : 7; + if (o + n + 1 > dstMax) break; + uint8_t high = 0; + for (uint32_t k = 0; k < n; k++) + if (src[i + k] & 0x80) high |= static_cast(1u << k); + dst[o++] = high; + for (uint32_t k = 0; k < n; k++) + dst[o++] = src[i + k] & 0x7F; + } + return o; +} + +uint32_t Decode7bit(const uint8_t *src, uint32_t srcLen, uint8_t *dst, + uint32_t dstMax) +{ + uint32_t o = 0; + for (uint32_t i = 0; i < srcLen; i += 8) + { + uint8_t high = src[i]; + uint32_t n = (srcLen - i - 1 < 7) ? (srcLen - i - 1) : 7; + for (uint32_t k = 0; k < n; k++) + { + if (o >= dstMax) return o; + dst[o++] = static_cast(src[i + 1 + k] + | ((high & (1u << k)) ? 0x80 : 0x00)); + } + } + return o; +} + +// --------------------------------------------------------------------------- +// Flash writing +// --------------------------------------------------------------------------- +// +// Erase and program stall XIP, so the caller must already have stopped audio +// (see WebUI::Uploading). Both cores must be quiet: core 1 is not running any +// BioMimicry code, but interrupts are disabled anyway because a flash-resident +// ISR firing mid-erase would hard-fault. + +/// Stop the audio engine for the duration of an upload. +/// +/// Writing flash means XIP goes down, and core 0 cannot survive that: its DMA +/// interrupt handler dispatches through a vtable in flash, so it faults before +/// any software guard could run. The previous attempt tried to park core 0 in a +/// RAM-resident spin and deadlocked the card every time. +/// +/// So the card stops pretending to be a synth: the audio interrupt is switched +/// off, the outputs are zeroed, and the card reboots when the upload finishes. +/// The web UI already warns that the card goes silent -- this makes that true +/// rather than aspirational. +static void EnterUploadMode() +{ + if (WebUI::uploadMode) return; + + // Raise the flag FIRST, then wait for core 0 to acknowledge that it has + // reached its RAM-resident park. Disabling the interrupt alone was not + // enough and this is why the second attempt still hung: + // + // - ComputerCard::AudioCallback and BufferFull live in FLASH, so core 0 + // can be executing them at the moment XIP drops, and + // - the CV output runs a SECOND interrupt, PWM_IRQ_WRAP -> OnCVPWMWrap, + // also in flash, which kept firing after DMA_IRQ_0 was masked. + // + // Either one faults the instant flash_range_erase kills XIP. So core 0 now + // parks itself in RAM and says so, and only then is it safe to write. + WebUI::uploadMode = true; + WebUI::stage = 1; + + // Wait for the park BEFORE masking anything. ProcessSample only runs when + // DMA_IRQ_0 fires, so masking first would guarantee it never sees the flag + // and never parks. At 48kHz the next callback is 21us away. + absolute_time_t deadline = make_timeout_time_ms(250); + while (!WebUI::core0Parked && !time_reached(deadline)) tight_loop_contents(); + + WebUI::stage = 2; + + // Silence every flash-resident interrupt handler. DMA_IRQ_0 and PWM_IRQ_WRAP + // are the audio path; USBCTRL_IRQ is TinyUSB's own, and dcd_rp2040_irq lives + // in flash like the rest of the stack. THIS is why upload hung at stage 5 + // with the erase already done: the erase itself was fine, but the moment + // interrupts came back a pending USB interrupt vectored into flash and the + // stack never recovered, so the ack was queued and never sent. + // + // Nothing can talk to the host after this point, which is why the whole + // upload is buffered in RAM first and only committed here. + irq_set_enabled(DMA_IRQ_0, false); + irq_set_enabled(PWM_IRQ_WRAP, false); + irq_set_enabled(USBCTRL_IRQ, false); + + // Prime the SDK's boot2 copy while XIP is definitely still up. + // + // flash_range_erase/program restore XIP afterwards by calling a RAM copy of + // the boot2 stage, and flash_init_boot2_copyout() lazily populates that copy + // by reading FROM XIP the first time any flash function runs. A zero-length + // erase reaches that initialiser (it runs before the "no flash accesses" + // barrier) and does nothing else, so the copy is taken here, unhurried, + // rather than during the first real write. + flash_range_erase(kUserRegionOff, 0); + WebUI::stage = 3; +} + +/// Keep servicing USB for `ms` so queued replies actually reach the host. +/// +/// tud_midi_stream_write only fills a buffer; tud_task() moves it onto the wire. +/// Anything that replies and then immediately reboots must pump the stack in +/// between, or the reply dies with the reboot. +static void __not_in_flash_func(FlushUsb)(uint32_t ms) +{ + absolute_time_t until = make_timeout_time_ms(ms); + while (!time_reached(until)) tud_task(); +} + +static void __not_in_flash_func(EraseRegion)(uint32_t off, uint32_t len) +{ + uint32_t ints = save_and_disable_interrupts(); + flash_range_erase(off, len); + restore_interrupts(ints); +} + +static void __not_in_flash_func(ProgramPage)(uint32_t off, const uint8_t *data) +{ + uint32_t ints = save_and_disable_interrupts(); + flash_range_program(off, data, 256); + restore_interrupts(ints); +} + +// --------------------------------------------------------------------------- + +void WebUI::Init() +{ + tusb_init(); + memset(&hdr_, 0, sizeof(hdr_)); +} + +int32_t __not_in_flash_func(WebUI::Progress)() const +{ + if (!uploading_ || expected_ == 0) return 0; + uint64_t p = static_cast(writeOff_) * kQ16One / expected_; + return (p > kQ16One) ? kQ16One : static_cast(p); +} + +void __not_in_flash_func(WebUI::Task)() +{ + tud_task(); + + uint8_t packet[4]; + while (tud_midi_available()) + { + if (!tud_midi_packet_read(packet)) break; + + // Reassemble SysEx from USB-MIDI 4-byte packets. The code-index number + // in the low nibble tells us how many of the three data bytes are real. + uint8_t cin = packet[0] & 0x0F; + uint32_t n = 0; + switch (cin) + { + case 0x4: n = 3; break; // sysex continues + case 0x5: n = 1; break; // ends with 1 byte + case 0x6: n = 2; break; // ends with 2 bytes + case 0x7: n = 3; break; // ends with 3 bytes + default: n = 0; break; + } + + for (uint32_t i = 0; i < n; i++) + { + uint8_t b = packet[1 + i]; + if (b == 0xF0) { inSysex_ = true; rxLen_ = 0; continue; } + if (b == 0xF7) + { + if (inSysex_) HandleSysex(rx_, rxLen_); + inSysex_ = false; + rxLen_ = 0; + continue; + } + if (inSysex_ && rxLen_ < sizeof(rx_)) rx_[rxLen_++] = b; + } + } + + // Anything queued by a reply above is pushed here, outside the packet loop, + // where re-entering tud_task() is safe. During an upload the next thing the + // caller does is an erase or a page program with interrupts off, so without + // this the ack would sit in the FIFO while the browser -- which waits for one + // before sending the next chunk -- timed out. + if (txPending_) + { + txPending_ = false; + tud_task(); + } +} + +void __not_in_flash_func(WebUI::Send)(const uint8_t *payload, uint32_t len) +{ + uint8_t buf[64]; + if (len + 3 > sizeof(buf)) return; + uint32_t o = 0; + buf[o++] = 0xF0; + buf[o++] = kManufacturerId; + memcpy(buf + o, payload, len); + o += len; + buf[o++] = 0xF7; + tud_midi_stream_write(0, buf, o); + + // Do NOT call tud_task() here to push it out. That was tried, and it is a + // reentrancy bug: Send() is reached from inside Task()'s packet loop via + // HandleSysex(), so a nested tud_task() re-enters that loop and corrupts + // rx_/rxLen_ half way through parsing the message being replied to. + // + // Task() flushes on the way out instead -- see the pump at the end of it. + txPending_ = true; +} + +void __not_in_flash_func(WebUI::SendAck)(uint8_t code, uint32_t value) +{ + uint8_t p[6] = { MSG_UP_ACK, code, + static_cast((value >> 14) & 0x7F), + static_cast((value >> 7) & 0x7F), + static_cast( value & 0x7F), 0 }; + Send(p, 5); +} + +void __not_in_flash_func(WebUI::SendErr)(uint8_t code) +{ + uint8_t p[2] = { MSG_UP_ERR, code }; + Send(p, 2); + uploading_ = false; +} + +void __not_in_flash_func(WebUI::FlushPage)() +{ + if (pageFill_ == 0) return; + // Pad the tail so a partial page still programs cleanly. + memset(page_ + pageFill_, 0, 256 - pageFill_); + ProgramPage(pageAddr_, page_); + pageAddr_ += 256; + pageFill_ = 0; +} + +/// Commit the RAM-staged upload to flash. Runs only after EnterUploadMode(), +/// with audio stopped and USB already dead — nothing here can report progress, +/// so the LED stage counter is the only visible signal. +void __not_in_flash_func(WebUI::WriteStagedBuffer)() +{ + // Where the new audio lands, appended after whatever is already stored and + // rounded up to a sector so the erase cannot clip the previous recording. + uint32_t base = (baseOff_ + kFlashSector - 1u) & ~(kFlashSector - 1u); + uint32_t dst = kUserDataOff + base; + + uint32_t end = (dst + bufLen_ + kFlashSector - 1u) & ~(kFlashSector - 1u); + if (end > dst) EraseRegion(dst, end - dst); + WebUI::stage = 5; + + // Whole 256-byte pages, then a padded tail. + uint32_t off = 0; + while (off + 256 <= bufLen_) + { + ProgramPage(dst + off, buf_ + off); + off += 256; + } + if (off < bufLen_) + { + memset(page_, 0, sizeof(page_)); + memcpy(page_, buf_ + off, bufLen_ - off); + ProgramPage(dst + off, page_); + } + WebUI::stage = 6; + + // Staging-buffer offsets become flash offsets now that the base is known. + for (int m = 0; m < kNumModes; m++) + for (int v = 0; v < kNumVariants; v++) + if (hdr_.size[m][v] > 0 && touched_[m][v]) + hdr_.offset[m][v] += base; + + writeOff_ = base + bufLen_; + CommitHeader(); +} + +void __not_in_flash_func(WebUI::CommitHeader)() +{ + FlushPage(); + hdr_.magic = kUserMagic; + hdr_.version = kUserVersion; + hdr_.totalBytes = writeOff_; + + // The header lives in its own sector, written last: until this lands the + // magic is absent, so an interrupted upload falls back to baked samples + // rather than pointing at half-written audio. + static uint8_t sector[4096]; + memset(sector, 0xFF, sizeof(sector)); + memcpy(sector, &hdr_, sizeof(hdr_)); + EraseRegion(kUserRegionOff, 4096); + for (uint32_t i = 0; i < 4096; i += 256) + ProgramPage(kUserRegionOff + i, sector + i); +} + +void __not_in_flash_func(WebUI::HandleSysex)(const uint8_t *msg, uint32_t len) +{ + if (len < 2 || msg[0] != kManufacturerId) return; + const uint8_t *p = msg + 1; + uint32_t n = len - 1; + + switch (p[0]) + { + case MSG_HELLO: + { + // Report version, capacity and whether user samples are loaded, so the + // browser can show what is actually on the card. + // Bytes already committed, so the browser can say how much room is left. + uint32_t used = 0; + if (HaveUserSamples()) + { + const UserSampleHeader *uh = UserHeader(); + used = uh->totalBytes; + if (used > kUserDataLen) used = kUserDataLen; + } + + uint8_t info[14] = { + MSG_INFO, kUserVersion, + static_cast(HaveUserSamples() ? 1 : 0), + static_cast(kHaveSamples ? 1 : 0), + // Report the STAGING BUFFER size, not the flash region. One upload + // is now limited by the RAM it is buffered in, not by the 1MB it + // eventually lands in -- the browser must reject on the real limit. + static_cast((kUploadMax >> 14) & 0x7F), + static_cast((kUploadMax >> 7) & 0x7F), + static_cast( kUploadMax & 0x7F), + static_cast(kNumModes), + // How much of the 1MB region is spoken for, and how big it is. The + // per-upload cap above is a TRANSFER limit set by the RAM buffer, not + // a storage limit -- uploads append, so several passes fill the card. + // Without these the browser can only report the transfer cap, and + // "too big" reads as "the card is full" when it usually is not. + static_cast((used >> 14) & 0x7F), + static_cast((used >> 7) & 0x7F), + static_cast( used & 0x7F), + static_cast((kUserDataLen >> 14) & 0x7F), + static_cast((kUserDataLen >> 7) & 0x7F), + static_cast( kUserDataLen & 0x7F) }; + Send(info, 14); + break; + } + + case MSG_UP_BEGIN: + { + // payload: 3 septets of total byte count + if (n < 4) { SendErr(ERR_PROTOCOL); break; } + expected_ = (static_cast(p[1]) << 14) + | (static_cast(p[2]) << 7) + | static_cast(p[3]); + if (expected_ > kUserDataLen) { SendErr(ERR_TOO_BIG); break; } + + // NOTE: the card keeps playing through the whole transfer now. Flash is + // not touched until MSG_UP_END, because writing it means killing USB -- + // TinyUSB's device stack and its USBCTRL_IRQ handler are all in flash, so + // the card cannot receive the next chunk and write the last one at the + // same time. Everything is buffered in RAM and committed in one go. + uploading_ = true; + pageFill_ = 0; + + // Start from what is already on the card rather than a blank table, so + // uploading one slot leaves the other 47 alone. Previously every upload + // memset the header and erased all 1MB, which meant replacing a single + // 6KB recording destroyed the whole library -- and the erase itself was + // a multi-second stall the browser read as a hang. + const UserSampleHeader *cur = UserHeader(); + if (cur->magic == kUserMagic && cur->version == kUserVersion) + { + memcpy(&hdr_, cur, sizeof(hdr_)); + baseOff_ = cur->totalBytes; + } + else + { + memset(&hdr_, 0, sizeof(hdr_)); + baseOff_ = 0; + } + memset(touched_, 0, sizeof(touched_)); + memset(modeCleared_, 0, sizeof(modeCleared_)); + + WebUI::stage = 4; + + // New audio is appended after whatever is already stored, and the append + // point is rounded UP to a sector boundary. Erase works a whole sector at + // a time, so starting mid-sector would erase the tail of the recording + // already sitting there -- silently corrupting a slot this upload never + // touched, which is the exact failure this change exists to prevent. + writeOff_ = (writeOff_ + kFlashSector - 1u) & ~(kFlashSector - 1u); + if (writeOff_ + expected_ > kUserDataLen) { SendErr(ERR_TOO_BIG); break; } + pageAddr_ = kUserDataOff + writeOff_; + + // No erase here any more -- see above. Just check it will fit the RAM + // staging buffer, which is the real limit on one upload now. + if (expected_ > sizeof(buf_)) { SendErr(ERR_TOO_BIG); break; } + bufLen_ = 0; + + WebUI::stage = 5; + SendAck(0, 0); + break; + } + + case MSG_UP_SLOT: + { + if (!uploading_ || n < 3) { SendErr(ERR_PROTOCOL); break; } + slotMode_ = p[1]; + slotVariant_ = p[2]; + if (slotMode_ >= kNumModes || slotVariant_ >= kNumVariants) + { + SendErr(ERR_BAD_SLOT); + break; + } + // Optional 4th byte: 1 = this upload REPLACES the mode, 0/absent = ADDS + // to it. The stock web UI always sends 0 — clearing a mode is done with + // MSG_CLEARMODE, an explicit button, rather than a flag on an upload + // whose effect only becomes visible after the card reboots. + // + // The flag stays in the protocol because it is free and because a + // different client may want a one-shot replace. Clearing unconditionally + // on the first slot was the bug it replaced: uploading just slot 2 to sit + // alongside an existing slot 1 wiped slot 1. + bool replaceMode = (n >= 4) && (p[3] != 0); + if (replaceMode && !modeCleared_[slotMode_]) + { + modeCleared_[slotMode_] = true; + for (int v = 0; v < kNumVariants; v++) + { + hdr_.offset[slotMode_][v] = 0; + hdr_.size[slotMode_][v] = 0; + touched_[slotMode_][v] = false; + } + } + + // Slots are staged in RAM, each starting page-aligned so it can still be + // programmed independently when the whole lot is committed at UP_END. + bufLen_ = (bufLen_ + 255u) & ~255u; + slotStart_ = bufLen_; + slotLen_ = 0; + SendAck(1, bufLen_); + break; + } + + case MSG_UP_ALIAS: + { + // Point this slot at audio that has ALREADY been sent, instead of + // sending it again. payload: mode, variant, srcMode, srcVariant. + // + // The header is a plain (offset, size) pair per slot, so nothing stops + // two slots naming the same bytes — the firmware plays it in both places + // without knowing they are shared. That makes reuse free: map one + // recording onto four hooves and it costs the flash of one recording. + if (!uploading_ || n < 5) { SendErr(ERR_PROTOCOL); break; } + uint8_t dm = p[1], dv = p[2], sm = p[3], sv = p[4]; + if (dm >= kNumModes || dv >= kNumVariants || + sm >= kNumModes || sv >= kNumVariants) { SendErr(ERR_BAD_SLOT); break; } + if (hdr_.size[sm][sv] == 0) { SendErr(ERR_PROTOCOL); break; } + + // Read the source BEFORE any clearing. When the alias points at a slot in + // the SAME mode — one recording mapped onto two hooves, the obvious case — + // clearing the destination's mode would wipe the source first and the + // copy would then write zeros. Silently, because nothing checks a slot + // against itself. + uint32_t srcOff = hdr_.offset[sm][sv]; + uint32_t srcSz = hdr_.size[sm][sv]; + bool srcTouched = touched_[sm][sv]; + + if (!modeCleared_[dm]) + { + modeCleared_[dm] = true; + for (int v = 0; v < kNumVariants; v++) + { + hdr_.offset[dm][v] = 0; + hdr_.size[dm][v] = 0; + touched_[dm][v] = false; + } + } + hdr_.offset[dm][dv] = srcOff; + hdr_.size[dm][dv] = srcSz; + touched_[dm][dv] = srcTouched; + SendAck(8, hdr_.size[dm][dv]); + break; + } + + case MSG_UP_DROP: + { + // Empty a mode as part of the CURRENT session, staged like every other + // change and committed at UP_END. MSG_CLEARMODE does the same thing but + // commits and reboots immediately, which would abort a sync half way + // through - so this exists for "the page emptied a mode the card holds". + if (!uploading_ || n < 2) { SendErr(ERR_PROTOCOL); break; } + uint8_t m = p[1]; + if (m >= kNumModes) { SendErr(ERR_BAD_SLOT); break; } + modeCleared_[m] = true; + for (int v = 0; v < kNumVariants; v++) + { + hdr_.offset[m][v] = 0; + hdr_.size[m][v] = 0; + touched_[m][v] = false; + } + SendAck(9, 0); + break; + } + + case MSG_UP_BAKED: + { + // Point a slot at a BUILT-IN recording: payload mode, variant, srcMode, + // srcVariant. Costs no flash and needs no audio sent, so the stock horse + // hoof can be Geese 1 without re-uploading it. + if (!uploading_ || n < 5) { SendErr(ERR_PROTOCOL); break; } + uint8_t dm = p[1], dv = p[2], sm = p[3], sv = p[4]; + if (dm >= kNumModes || dv >= kNumVariants || + sm >= kNumModes || sv >= kNumVariants) { SendErr(ERR_BAD_SLOT); break; } + + if (!modeCleared_[dm]) + { + modeCleared_[dm] = true; + for (int v = 0; v < kNumVariants; v++) + { + hdr_.offset[dm][v] = 0; + hdr_.size[dm][v] = 0; + touched_[dm][v] = false; + } + } + hdr_.offset[dm][dv] = sm; // the baked MODE + hdr_.size[dm][dv] = kBakedFlag | sv; // flag + the baked VARIANT + // NOT touched_: the commit pass rebases staging offsets into flash + // offsets, and this offset is a mode index, not an offset at all. + touched_[dm][dv] = false; + SendAck(10, 0); + break; + } + + case MSG_UP_KEEP: + { + // Keep audio that is ALREADY in the user region: payload mode, variant, + // then 3 septets of its offset. + // + // A sync is authoritative per mode, so it clears each mode it touches - + // which would delete audio the page is not re-sending simply because the + // page was reloaded and no longer has the file. This re-points the slot + // at bytes that are already there, so reloading the editor and adding one + // more sample does not destroy the previous four. + if (!uploading_ || n < 6) { SendErr(ERR_PROTOCOL); break; } + uint8_t dm = p[1], dv = p[2]; + if (dm >= kNumModes || dv >= kNumVariants) { SendErr(ERR_BAD_SLOT); break; } + uint32_t off = (static_cast(p[3]) << 14) + | (static_cast(p[4]) << 7) + | static_cast(p[5]); + + // Find that offset in the CURRENT on-flash header to recover its size — + // the page knows where the audio is, not how long it is. + uint32_t sz = 0; + const UserSampleHeader *cur = UserHeader(); + if (cur->magic == kUserMagic && cur->version == kUserVersion) + for (int m = 0; m < kNumModes && !sz; m++) + for (int v = 0; v < kNumVariants; v++) + if (cur->offset[m][v] == off && cur->size[m][v] > 0 && + !(cur->size[m][v] & kBakedFlag)) + { sz = cur->size[m][v]; break; } + if (!sz) { SendErr(ERR_PROTOCOL); break; } + + if (!modeCleared_[dm]) + { + modeCleared_[dm] = true; + for (int v = 0; v < kNumVariants; v++) + { + hdr_.offset[dm][v] = 0; + hdr_.size[dm][v] = 0; + touched_[dm][v] = false; + } + } + hdr_.offset[dm][dv] = off; // already a flash offset + hdr_.size[dm][dv] = sz; + touched_[dm][dv] = false; // so the commit rebase leaves it alone + SendAck(11, sz); + break; + } + + case MSG_UP_CHUNK: + { + if (!uploading_) { SendErr(ERR_PROTOCOL); break; } + uint8_t dec[512]; + uint32_t got = Decode7bit(p + 1, n - 1, dec, sizeof(dec)); + if (bufLen_ + got > sizeof(buf_)) { SendErr(ERR_TOO_BIG); break; } + + // Straight into RAM. Flash is untouched until UP_END, because writing it + // takes USB down with it. + memcpy(buf_ + bufLen_, dec, got); + bufLen_ += got; + slotLen_ += got; + WebUI::stage = 6; + SendAck(2, bufLen_); + break; + } + + case MSG_UP_SLOTEND: + if (!uploading_) { SendErr(ERR_PROTOCOL); break; } + // Record where this slot landed in the staging buffer; the offsets are + // rewritten to flash offsets when the buffer is committed. + hdr_.offset[slotMode_][slotVariant_] = slotStart_; + hdr_.size[slotMode_][slotVariant_] = slotLen_; + touched_[slotMode_][slotVariant_] = true; + SendAck(3, slotLen_); + break; + + case MSG_UP_END: + { + if (!uploading_) { SendErr(ERR_PROTOCOL); break; } + uploading_ = false; + + // Drop baked references in modes that ended up with no uploaded audio. + // + // Such a slot is asking to play a built-in recording, which is exactly + // what an EMPTY slot already does - so the reference buys nothing, and a + // wrong one is worse than nothing: a cross-mode reference makes a mode + // nobody touched play another mode's recordings, and because the editor + // seeds its mapping from the card, it survives every reload. That is how + // Cicadas came to play hooves. + // + // Checked here rather than per message because only the finished header + // shows whether a mode has real audio: the references can arrive before + // the uploads they sit alongside. + for (int m = 0; m < kNumModes; m++) + { + bool haveAudio = false; + for (int v = 0; v < kNumVariants; v++) + if (hdr_.size[m][v] != 0 && !(hdr_.size[m][v] & kBakedFlag)) + { haveAudio = true; break; } + if (haveAudio) continue; + for (int v = 0; v < kNumVariants; v++) + if (hdr_.size[m][v] & kBakedFlag) + { + hdr_.offset[m][v] = 0; + hdr_.size[m][v] = 0; + } + } + + // Ack and push it out BEFORE any of this touches flash. Once the write + // starts, USB is gone -- TinyUSB's stack and its USBCTRL_IRQ handler live + // in flash -- so this is the last chance to say anything to the browser. + // It is an "about to commit" ack, not a "committed" one, and the browser + // treats the disconnect that follows as success. + SendAck(4, bufLen_); + FlushUsb(150); + + // Everything below runs with the card silent and USB dead. + EnterUploadMode(); + WriteStagedBuffer(); + WebUI::stage = 7; + + watchdog_reboot(0, 0, 0); + break; + } + +#ifdef BIO_PROFILE + // Only exists in profile builds, so the released firmware is byte-identical + // to one built without the profiler at all. The browser treats no reply as + // "this card has no profiler". + case MSG_PROF_GET: + { + // Exact cycle counts beat asking someone to decode blinking LEDs. + // Each value is 3 septets (21 bits), plenty for a 4000-cycle budget. + uint8_t p2[2 + kNumProf * 3 + 6]; + uint32_t o = 0; + p2[o++] = MSG_PROF; + p2[o++] = static_cast(kNumProf); + for (int i = 0; i < kNumProf; i++) + { + uint32_t v = gProf[i].peak; + p2[o++] = static_cast((v >> 14) & 0x7F); + p2[o++] = static_cast((v >> 7) & 0x7F); + p2[o++] = static_cast( v & 0x7F); + } + uint32_t ov = gProf[0].overruns; + p2[o++] = static_cast((ov >> 14) & 0x7F); + p2[o++] = static_cast((ov >> 7) & 0x7F); + p2[o++] = static_cast( ov & 0x7F); + + // Core 1's worst backlog: how many control ticks it owed at once. 1 is + // healthy; a steady 2+ means it cannot keep up with the 1.5kHz grid and + // the physics are running in slow motion. + uint32_t bl = gXC.maxBacklog; + p2[o++] = static_cast((bl >> 14) & 0x7F); + p2[o++] = static_cast((bl >> 7) & 0x7F); + p2[o++] = static_cast( bl & 0x7F); + Send(p2, o); + gXC.maxBacklog = 0; + ProfileReset(); // so each query reports a fresh window + break; + } +#endif + + case MSG_ERASE: + // Wipe just the header sector: the audio stays but is unreferenced, so + // the card falls straight back to its baked samples. This is also how + // space is reclaimed -- uploads append, so re-uploading the same slot + // repeatedly eventually fills the region, and this resets it to empty. + // + // Stops audio and reboots exactly like an upload: this erases flash, so + // it cannot run while the engine is live. + EnterUploadMode(); + EraseRegion(kUserRegionOff, kFlashSector); + SendAck(5, 0); + FlushUsb(200); + watchdog_reboot(0, 0, 0); + break; + + case MSG_SLOTS: + { + // One septet per mode: bit v set means slot v holds user audio. Lets the + // browser show what is actually ON THE CARD rather than only what is + // staged in the page, which is the difference between "these two geese + // are loaded" and "these two geese are what the card will play". + // TWO septets per mode, not one: SysEx data bytes carry 7 bits and there + // are 8 variants, so a single byte would silently drop slot 8. + static_assert(kNumVariants <= 14, "two septets per mode covers 14 slots"); + uint8_t sl[2 + kNumModes * 3]; + uint32_t o = 0; + sl[o++] = MSG_SLOTS; + sl[o++] = static_cast(kNumModes); + const UserSampleHeader *h = UserHeader(); + bool have = HaveUserSamples(); + for (int m = 0; m < kNumModes; m++) + { + uint32_t bits = 0; + if (have) + for (int v = 0; v < kNumVariants; v++) + if (h->size[m][v] > 0) bits |= (1u << v); + sl[o++] = static_cast( bits & 0x7F); + sl[o++] = static_cast((bits >> 7) & 0x7F); + + // How many DISTINCT baked recordings this mode actually has. Slots + // are padded by repetition when a mode ships fewer than eight - + // Meteors has five - so "8 variants" was a lie the page had no way + // of knowing about. + // Compared by OFFSET rather than by resolving each slot: the + // resolver is an inline in a header, and 64 instantiations of it + // here grew the image past the user region and tripped checksize. + int distinct = 0; + if (kHaveSamples) + for (int v = 0; v < kNumVariants; v++) + { + bool dup = false; + for (int k = 0; k < v && !dup; k++) + if (kModeSampleOff[m][k] == kModeSampleOff[m][v]) dup = true; + if (!dup) distinct++; + } + sl[o++] = static_cast(distinct); + } + Send(sl, o); + break; + } + + case MSG_SLOTINFO: + { + // Per-slot OFFSET and SIZE for one mode, so the browser can show what is + // on the card after a reboot rather than only what this page session + // happened to load. + // + // Offset is the useful part: two slots sharing one offset are sharing one + // recording, which is how the mapping UI can redraw "file 2 is used by + // Horses 1 and Horses 3" without the page having to remember it. + // + // One mode per request: eight slots x two 3-septet fields is 48 bytes, + // and Send() has a 64-byte buffer. + // payload: mode, then which HALF of the slots (0 or 1). + // + // Four slots per reply, not eight. USB-MIDI carries 3 data bytes per + // 4-byte packet, so all eight needed 72 FIFO bytes against a TX buffer + // that was 64 - the reply could never be sent whole. Splitting it keeps + // each message comfortably inside even the default buffer. + if (n < 3) { SendErr(ERR_PROTOCOL); break; } + uint8_t m = p[1]; + uint8_t half = p[2] ? 1 : 0; + if (m >= kNumModes) { SendErr(ERR_BAD_SLOT); break; } + constexpr int kPerMsg = kNumVariants / 2; + static_assert(kPerMsg * 2 == kNumVariants, + "kNumVariants must be even to split the reply in half"); + const int v0 = half * kPerMsg; + + uint8_t sd[4 + kPerMsg * 6]; + sd[0] = MSG_SLOTDET; + sd[1] = m; + sd[2] = half; + sd[3] = static_cast(kPerMsg); + const UserSampleHeader *h = UserHeader(); + bool have = HaveUserSamples(); + // Indexed rather than run through a counter, so the bound is obvious to + // the compiler as well as to the reader — with a running uint32_t it + // could not prove the writes stayed inside sd[] and warned on every one. + for (int i = 0; i < kPerMsg; i++) + { + int v = v0 + i; + uint32_t off = have ? h->offset[m][v] : 0; + uint32_t sz = have ? h->size[m][v] : 0; + + // A BAKED slot carries the flag in bit 31 and a mode/variant rather + // than an offset and a length. Reporting it raw truncated to 21 + // septets, so the flag vanished and the browser saw a 0 KB + // "recording" whose offset was really a mode index - five phantom + // USER entries, and then a keep request for an offset that does not + // exist, which is the error 3. + // + // Reported as offset 0x1FFFFF (unreachable: the region is 0xFF000) + // with the mode and variant in the size field, so the browser can + // tell the two apart. + if (sz & kBakedFlag) + { + off = 0x1FFFFFu; + sz = (static_cast(h->offset[m][v]) << 8) + | (sz & 0xFFu); + } + else if (sz == 0) off = 0; + uint8_t *q = &sd[4 + i * 6]; + q[0] = static_cast((off >> 14) & 0x7F); + q[1] = static_cast((off >> 7) & 0x7F); + q[2] = static_cast( off & 0x7F); + q[3] = static_cast((sz >> 14) & 0x7F); + q[4] = static_cast((sz >> 7) & 0x7F); + q[5] = static_cast( sz & 0x7F); + } + Send(sd, sizeof(sd)); + break; + } + + case MSG_CLEARMODE: + { + // Revert ONE mode to its baked recordings, leaving every other mode's + // uploads alone. Only the header changes: the audio stays in flash but + // becomes unreferenced, and ResolveSample falls back per-slot, so this + // costs one sector write rather than a rewrite of the whole region. + if (n < 2) { SendErr(ERR_PROTOCOL); break; } + uint8_t m = p[1]; + if (m >= kNumModes) { SendErr(ERR_BAD_SLOT); break; } + if (!HaveUserSamples()) { SendAck(7, 0); break; } + + EnterUploadMode(); + + memcpy(&hdr_, UserHeader(), sizeof(hdr_)); + for (int v = 0; v < kNumVariants; v++) + { + hdr_.offset[m][v] = 0; + hdr_.size[m][v] = 0; + } + // totalBytes is the append high-water mark, deliberately NOT reduced: + // the freed audio sits in the middle of the region, so pulling the mark + // back would let the next upload overwrite a mode that is still in use. + // "Revert to built-in" is what reclaims the space. + CommitHeader(); + + SendAck(7, 0); + FlushUsb(150); + watchdog_reboot(0, 0, 0); + break; + } + + case MSG_PLAY: + // Leave USB mode and go back to being an instrument. No flash is touched + // here, so there is nothing to park for -- just ack, get the reply out + // while USB still exists, and reboot. Holding the switch again does the + // same thing from the card itself. + SendAck(6, 0); + FlushUsb(150); + watchdog_reboot(0, 0, 0); + break; + + default: + break; + } +} + +} // namespace bio diff --git a/releases/62_BioMimicry/webui.h b/releases/62_BioMimicry/webui.h new file mode 100644 index 000000000..685126b83 --- /dev/null +++ b/releases/62_BioMimicry/webui.h @@ -0,0 +1,174 @@ +// webui.h — USB-MIDI/SysEx sample upload for BioMimicry. +// +// The card enumerates as a USB-MIDI device; interface.html talks to it over +// WebMIDI SysEx. Drop WAVs in the browser, they arrive as 8-bit mono 48kHz and +// are written into the user flash region — no toolchain, no reflash. +// +// SysEx payloads must be 7-bit (every byte 0-127), so audio is 7-bit encoded: +// 7 source bytes become 8 septets, the 8th carrying the high bits. Same scheme +// WorkshopZX uses for snapshots. +// +// IMPORTANT: writing flash on the RP2040 stalls XIP, so any code still running +// from flash halts mid-erase. Rather than make the whole audio path +// RAM-resident, the card enters an UPLOAD MODE for the duration: the ecosystem +// stops, audio is muted and the LEDs show progress. Uploading is a setup +// activity, not a performance one. + +#pragma once +#include +#include "biomimicry.h" +#include "samplestore.h" + +namespace bio { + +// SysEx message IDs (first payload byte). fw = firmware, ui = browser. +enum : uint8_t { + MSG_HELLO = 0x01, // ui->fw: announce presence; fw replies MSG_INFO + MSG_INFO = 0x02, // fw->ui: version, capacity, what is loaded + MSG_UP_BEGIN = 0x10, // ui->fw: start upload session (stops audio; appends) + MSG_UP_SLOT = 0x11, // ui->fw: begin a mode+variant; payload mode,variant,len + MSG_UP_CHUNK = 0x12, // ui->fw: 7-bit-encoded audio for the current slot + MSG_UP_SLOTEND = 0x13, // ui->fw: this slot is complete + MSG_UP_ALIAS = 0x17, // ui->fw: point a slot at audio already sent + MSG_UP_DROP = 0x18, // ui->fw: empty a mode, staged (no reboot) + MSG_UP_BAKED = 0x19, // ui->fw: point a slot at a BUILT-IN recording + MSG_UP_KEEP = 0x1A, // ui->fw: keep audio already in the user region + MSG_UP_END = 0x14, // ui->fw: whole upload done -> commit header, resume + MSG_UP_ACK = 0x15, // fw->ui: ready for more / progress + MSG_UP_ERR = 0x16, // fw->ui: something went wrong; payload = code + MSG_ERASE = 0x20, // ui->fw: forget user samples, revert to baked + MSG_PLAY = 0x21, // ui->fw: leave USB mode and reboot into playing + MSG_CLEARMODE = 0x22, // ui->fw: revert ONE mode to its baked recordings + MSG_SLOTS = 0x23, // fw->ui: which slots currently hold user audio + MSG_SLOTINFO = 0x24, // ui->fw: detail for one mode; fw replies MSG_SLOTDET + MSG_SLOTDET = 0x25, // fw->ui: per-slot offset+size for one mode + MSG_PROF_GET = 0x30, // ui->fw: send the timing peaks (profile builds) + MSG_PROF = 0x31, // fw->ui: peak cycles per bucket + overrun count +}; + +// Manufacturer ID 0x7D = "prototyping / private use". +constexpr uint8_t kManufacturerId = 0x7D; + +/// Largest single upload, set by the RAM staging buffer rather than by the 1MB +/// flash region. Writing flash takes USB down with it — TinyUSB's stack and its +/// interrupt handler both live there — so a transfer has to be received in FULL +/// before any of it is committed. +/// +/// 160KB of the RP2040's 264KB. This buffer alone is ~74% of the card's total +/// RAM use; everything else fits in 54KB. The practical ceiling is around 192KB, +/// which would leave under 11KB spare, so this keeps ~43KB of margin for stack +/// and any future growth. +/// +/// It caps one PASS, not the card: uploads append (see baseOff_), so the full +/// 1020KB region is reachable in successive passes. Removing the cap properly +/// means committing per SLOT at MSG_UP_SLOTEND and letting USB drop and return +/// between slots — a protocol change, not a constant. +constexpr uint32_t kUploadMax = 160u * 1024u; + +// Error codes carried by MSG_UP_ERR. +enum : uint8_t { + ERR_NONE = 0, ERR_TOO_BIG = 1, ERR_BAD_SLOT = 2, ERR_PROTOCOL = 3, +}; + +/// 7-bit encode/decode. Returns bytes written. +/// Encoded length = ceil(srcLen/7)*8; decoded length <= (srcLen/8)*7. +uint32_t Encode7bit(const uint8_t *src, uint32_t srcLen, uint8_t *dst, uint32_t dstMax); +uint32_t Decode7bit(const uint8_t *src, uint32_t srcLen, uint8_t *dst, uint32_t dstMax); + +/// USB-MIDI transport + upload state machine. +class WebUI +{ +public: + void Init(); + /// Poll USB. Cheap when idle; call from the audio callback. + void Task(); + + /// True while an upload is in progress — the card mutes and stops running + /// the ecosystem, because flash writes stall execution anyway. + bool Uploading() const { return uploading_; } + + /// Set by core 0 when the momentary switch has been held long enough to hand + /// the card over to USB. Core 1 watches it, initialises TinyUSB the first + /// time it goes true, and then services USB forever. + /// + /// Leaving reboots the card — hold the switch again, or press "Back to + /// playing" in the web UI. USB is not running at all until this is set: no + /// enumeration, no flash-resident USBCTRL_IRQ, and no USB stack competing + /// with the audio path while the card is being played. + static volatile bool usbMode; + + /// True once an upload has begun. The audio interrupt is disabled for the + /// whole upload and the card reboots when it ends, so this is a one-way + /// latch: the card is an upload appliance until it restarts. + /// + /// This replaces a `flashBusy` flag that core 0 spun on from inside its DMA + /// interrupt handler. That deadlocked every time — see EnterUploadMode(). + static volatile bool uploadMode; + + /// Set by core 0 once it has stopped inside its RAM-resident handler and is + /// spinning. Core 1 waits for this before touching flash — without it, core 0 + /// may still be executing ComputerCard's flash-resident callback when XIP + /// drops, which hard-faults the chip. + static volatile bool core0Parked; + + /// How far the upload got, shown on the LEDs as a binary count while + /// uploadMode is set. USB cannot report a hang that stops USB, so the card + /// has to signal out of band: 1 entered upload mode, 2 core 0 parked, + /// 3 boot2 primed, 4 header read, 5 erase done, 6 first chunk written, + /// 7 header committed. Whatever number is frozen on the LEDs is the last + /// step that completed. + static volatile uint8_t stage; + + /// 0..kQ16One, for the LED progress display. + int32_t Progress() const; + +private: + void HandleSysex(const uint8_t *msg, uint32_t len); + void Send(const uint8_t *payload, uint32_t len); + void SendAck(uint8_t code, uint32_t value); + void SendErr(uint8_t code); + void FlushPage(); // commit the 256-byte staging page to flash + void CommitHeader(); + void WriteStagedBuffer(); // erase+program the RAM buffer, then the header + + bool uploading_ = false; + uint8_t slotMode_ = 0, slotVariant_ = 0; + uint32_t writeOff_ = 0; // next byte offset within the data area + uint32_t expected_ = 0; // total bytes announced for this session + + // Flash writes must be whole 256-byte pages, so bytes are staged here. + uint8_t page_[256]; + uint32_t pageFill_ = 0; + uint32_t pageAddr_ = 0; + + // The whole upload is staged in RAM before ANY flash is touched, because + // writing flash kills USB: TinyUSB's device stack and its USBCTRL_IRQ + // handler both live in flash, so the card cannot receive the next chunk + // while committing the last one. 128KB holds the largest baked recording + // (meteors_5, 116KB) with room to spare and leaves ~70KB of the RP2040's + // 264KB for everything else. This is the real cap on one upload now -- + // several small samples still fit in a single pass, a full library does not. + uint8_t buf_[kUploadMax]; + uint32_t bufLen_ = 0; + uint32_t baseOff_ = 0; // append point from the existing header + uint32_t slotStart_ = 0; // where the current slot began in buf_ + uint32_t slotLen_ = 0; + bool touched_[kNumModes][kNumVariants] = {}; + // Which modes this session has already wiped. The first slot sent for a mode + // clears the rest of it, so uploading two geese leaves two rather than two + // plus six survivors from an earlier upload. + bool modeCleared_[kNumModes] = {}; + + // The header being built up as slots arrive; written last so a half-finished + // upload never leaves a valid-looking directory behind. + UserSampleHeader hdr_; + + uint8_t rx_[1024]; + uint32_t rxLen_ = 0; + bool inSysex_ = false; + // Set by Send(); Task() pushes the FIFO once it is out of its packet loop, + // where re-entering tud_task() cannot corrupt a half-parsed message. + bool txPending_ = false; +}; + +} // namespace bio From 875a9cec4b45df92296c9160b45bfc791596a694 Mon Sep 17 00:00:00 2001 From: uglifruit Date: Wed, 5 Aug 2026 23:08:05 +0100 Subject: [PATCH 2/4] 62_BioMimicry: release notes move to the end of the README The changelog sat between the pitch and the first section about how the card works. Now at the end, newest first. --- releases/62_BioMimicry/README.md | 84 ++++++++++++++++---------------- 1 file changed, 43 insertions(+), 41 deletions(-) diff --git a/releases/62_BioMimicry/README.md b/releases/62_BioMimicry/README.md index dd10ceb07..272fd6cf2 100644 --- a/releases/62_BioMimicry/README.md +++ b/releases/62_BioMimicry/README.md @@ -13,47 +13,10 @@ accumulator of a waterfall walk, and the sudden silent clustering of a meteor sh Runs on a Music Thing Modular Workshop System Computer. Built on the RP2040 with [ComputerCard](https://github.com/TomWhitwell/Workshop_Computer). -> **v1.1.0** — six ecosystems, two boot modes, a full library of real animal -> recordings, and a browser app for swapping them over USB. -> -> **The card now runs inside its timing budget.** The physics moved to the second -> core, so the engine and the voices no longer land in the same 20.83 µs sample: -> the worst mode went from **334% of budget to 70%, with zero overruns**. The -> clock is 192 MHz. USB is modal — hold the switch to hand the card over, hold -> again to go back to playing — so nothing of TinyUSB runs while you perform. -> -> Audibly: samples no longer truncate when hits overlap (eight voices, and a -> steal is a crossfade rather than a cut), the library is re-baked ~1 bit louder -> with dither, and the round robins finally produce as many distinct sounds as -> they claim — panning no longer collapses eight variants to four, and Meteors -> stops playing its first three swooshes twice as often as the rest. -> -> **v1.2.0** — alt boot is now **TUNED**: the same one-shot voices as Rhythm, but -> played at their recorded pitch with no per-animal or per-hit detuning, so -> uploaded notes gallop or drip instead of being smeared across ±3 semitones. Its -> Summed routing puts **1 V/oct on CV 2** telling you which round-robin slot just -> fired. The granular renderer is gone. -> -> The browser editor now maps a **pool** of uploaded files onto slots, so one -> recording can be reused across ecosystems without being sent twice. -> -> Both audio inputs now work on hardware — and Audio In 1 never had, in any -> firmware: its envelope was computed on one core and read on the other, with -> nothing writing it across. Patch a pad into **Loudness** and the cicadas -> recede while the geese get agitated; patch a drum into **Disturb** and every -> ecosystem flinches on the transient. -> -> **Frogs synchronise again.** The knob mapped almost its whole travel to -> coupling strengths that were already locked, so the chorus sounded the same -> everywhere; the sync/chaos transition now sits in the middle of the sweep where -> it can be played. And a footstep in the grass genuinely silences the cicadas -> rather than thinning them. -> -> Why the card is the way it is — including the things that were wrong first — is -> in [docs/DEVLOG.md](docs/DEVLOG.md). -> -> Questions, bugs and patches: [**the BioMimicry thread**](https://discord.com/channels/1210238368898879569/1533895615442849812) -> on the Music Thing Discord. +Why the card is the way it is — including the things that were wrong first — is in +[docs/DEVLOG.md](docs/DEVLOG.md). Questions, bugs and patches: +[**the BioMimicry thread**](https://discord.com/channels/1210238368898879569/1533895615442849812) +on the Music Thing Discord. --- @@ -435,3 +398,42 @@ Two things in this repository are not mine to relicense and keep their own terms | [`samples/*.raw`](samples/) | Recordings from [Pixabay](https://pixabay.com), under the Pixabay Content License — see [samples/README.md](samples/README.md) | | `ComputerCard.h` | The Music Thing card library by Chris Johnson, MIT | +--- + +## Release notes + +**v1.2.0** — alt boot is now **TUNED**: the same one-shot voices as Rhythm, but +played at their recorded pitch with no per-animal or per-hit detuning, so +uploaded notes gallop or drip instead of being smeared across ±3 semitones. Its +Summed routing puts **1 V/oct on CV 2** telling you which round-robin slot just +fired. The granular renderer is gone. + +The browser editor now maps a **pool** of uploaded files onto slots, so one +recording can be reused across ecosystems without being sent twice. + +Both audio inputs now work on hardware — and Audio In 1 never had, in any +firmware: its envelope was computed on one core and read on the other, with +nothing writing it across. Patch a pad into **Loudness** and the cicadas +recede while the geese get agitated; patch a drum into **Disturb** and every +ecosystem flinches on the transient. + +**Frogs synchronise again.** The knob mapped almost its whole travel to +coupling strengths that were already locked, so the chorus sounded the same +everywhere; the sync/chaos transition now sits in the middle of the sweep where +it can be played. And a footstep in the grass genuinely silences the cicadas +rather than thinning them. + +**v1.1.0** — six ecosystems, two boot modes, a full library of real animal +recordings, and a browser app for swapping them over USB. + +**The card now runs inside its timing budget.** The physics moved to the second +core, so the engine and the voices no longer land in the same 20.83 µs sample: +the worst mode went from **334% of budget to 70%, with zero overruns**. The +clock is 192 MHz. USB is modal — hold the switch to hand the card over, hold +again to go back to playing — so nothing of TinyUSB runs while you perform. + +Audibly: samples no longer truncate when hits overlap (eight voices, and a +steal is a crossfade rather than a cut), the library is re-baked ~1 bit louder +with dither, and the round robins finally produce as many distinct sounds as +they claim — panning no longer collapses eight variants to four, and Meteors +stops playing its first three swooshes twice as often as the rest. From b11e15dfd4a3041183ada4a4913c07ff66446ecd Mon Sep 17 00:00:00 2001 From: uglifruit Date: Wed, 5 Aug 2026 23:14:21 +0100 Subject: [PATCH 3/4] 62_BioMimicry: README section reorder --- releases/62_BioMimicry/README.md | 57 +++++++++++++++++--------------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/releases/62_BioMimicry/README.md b/releases/62_BioMimicry/README.md index 272fd6cf2..425cf9b67 100644 --- a/releases/62_BioMimicry/README.md +++ b/releases/62_BioMimicry/README.md @@ -6,17 +6,8 @@ BioMimicry uses **six distinct mathematical physics engines** to generate trigge audio that feel organically alive. It was built to capture the semi-random behaviours of the natural world: the polyrhythmic clopping of horses on a road, the cascading panic of a flock of geese, the rushing -accumulator of a waterfall walk, and the sudden silent clustering of a meteor shower overhead. +accumulator of a waterfall walk, and the sudden silent clustering of a meteor shower overhead. (I didn't hear frogs, but the swamp mathematics were too good to leave out.) -*I didn't hear frogs, but the swamp mathematics were too good to leave out.* - -Runs on a Music Thing Modular Workshop System Computer. Built on the RP2040 with -[ComputerCard](https://github.com/TomWhitwell/Workshop_Computer). - -Why the card is the way it is — including the things that were wrong first — is in -[docs/DEVLOG.md](docs/DEVLOG.md). Questions, bugs and patches: -[**the BioMimicry thread**](https://discord.com/channels/1210238368898879569/1533895615442849812) -on the Music Thing Discord. --- @@ -26,14 +17,14 @@ Tap the momentary switch (Down) to cycle habitats. Each has its own internal log | Mode | Model | Behaviour | |---|---|---| -| **Horses** | Real equine gaits | A **herd**: each horse has its own stride clock driving four hooves at their true footfall offsets, and the animals slide in and out of step the way real horses travelling together never quite match pace. Walk, trot, canter and gallop are the actual biomechanical patterns — including the suspension phase where all four feet leave the ground. | +| **Horses** | Equine gaits | A **herd**: each horse has its own stride clock driving four hooves at their true footfall offsets, and the animals slide in and out of step the way real horses travelling together never quite match pace. Walk, trot, canter and gallop are the actual biomechanical patterns — including the suspension phase where all four feet leave the ground. | | **Geese** | Stochastic contagion | A cascading probability network across a **flock of twelve**. One bird honking raises the odds for all the others, creating tight reactive clusters that erupt and fade. | | **Frogs** | Coupled oscillators | The Kuramoto model. Voices pull on each other's timing, fighting between perfect metronomic synchronisation and chaotic swarms — and they'll entrain to an external clock if you give them one. | | **Rain** | Leaky integrate-and-fire | Buckets fill with noise and constantly leak. An overflow **splashes downstream** into the next bucket, so drips pull each other along into rushing clusters, then fall apart. | | **Meteors** | Inhomogeneous Poisson | An invisible slow-moving weather system dictates the density of a **swarm of twelve**. Long eerie silences swell smoothly into heavy overlapping barrages. | | **Cicadas** | Amplitude feedback | Twelve insects in **four patches**, each hearing mostly its own neighbours. They call faster the louder their patch already is, and tire from being in it. Patches swell out of step with each other, so the field surges and subsides irregularly. Where Frogs couple on *phase* and Geese on *events*, Cicadas couple on *loudness*. | -### The gaits are real +### The gaits are based on real horses Horses mode is clocked with each hoof landing at its correct point in the stride: @@ -124,19 +115,8 @@ physical trigger. glow and flares to full on every trigger, so one light carries both meanings. Both tables above describe the **Rhythm** boot. Tuned routes differently — see -[Two instruments](#two-instruments-rhythm-and-tuned). +[Two Modes](#two-modes-rhythm-and-tuned). -## Voices - -**The fallback — synthesized.** Recordings are the normal case; this is what plays if a -card is built with no PCM baked in and nothing uploaded. Each mode has its own DSP -timbre, built around whatever -detail actually identifies the sound: hooves get a pitch-dropping body *plus a sharp -band-passed noise transient* for shoe-on-stone; honks are a saw whose filter opens at the -attack for that nasal kink; ribbits are Karplus-Strong; **drips rise in pitch as they -decay**, which is the acoustic signature of a bubble collapsing in liquid and the reason a -drip sounds like a drip; meteors are noise swept by a closing filter; cicadas are a high -tone ring-modulated by a wing-beat buzz. ### Round robins @@ -169,7 +149,7 @@ Panning comes from the ecosystem, not from a knob: birds occupy twelve positions and a cascade sweeps across the field. - **Random** (Rain, Meteors) — each hit lands somewhere new, because each is a new object. -## Two instruments: Rhythm and Tuned +## Two Modes: Rhythm and Tuned Hold the momentary switch **Down at power-on** to boot **TUNED** instead of the normal **RHYTHM** card. On power-up the LEDs announce which you got: Rhythm lights the left @@ -230,6 +210,9 @@ Flash layout: firmware and baked samples occupy the first 1 MB, user sample second. The build fails loudly if the firmware ever grows into the user region, because that would make flashing destroy uploads and uploads destroy the firmware. + +## Advanced Use + ## PCM samples (baked at build time) Sample playback is a **build-time** choice, not a boot mode: bake recordings into @@ -303,6 +286,17 @@ whole path works before you have a single recording. --- +## Voices + +**The fallback — synthesized.** Recordings are the normal case; this is what plays if a +card is built with no PCM baked in and nothing uploaded. Each mode has its own DSP +timbre, built around whatever detail actually identifies the sound: hooves get a pitch-dropping body *plus a sharp band-passed noise transient* for shoe-on-stone; honks are a saw whose filter opens at the +attack for that nasal kink; ribbits are Karplus-Strong; **drips rise in pitch as they +decay**, which is the acoustic signature of a bubble collapsing in liquid and the reason a +drip sounds like a drip; meteors are noise swept by a closing filter; cicadas are a high +tone ring-modulated by a wing-beat buzz. + + ## Under the hood `ProcessSample()` runs at 48 kHz, but the physics don't need audio rate: engines tick at @@ -372,7 +366,18 @@ the mounted drive. On Windows, `cmake`/`ninja` live in `~/.pico-sdk/` and are no default PATH — see [CLAUDE.md](CLAUDE.md) for the exact invocation. --- +## Use +Runs on a Music Thing Modular Workshop System Computer. Built on the RP2040 with +[ComputerCard](https://github.com/TomWhitwell/Workshop_Computer). + +Why the card is the way it is — including the things that were wrong first — is in +[docs/DEVLOG.md](docs/DEVLOG.md). Questions, bugs and patches: +[**the BioMimicry thread**](https://discord.com/channels/1210238368898879569/1533895615442849812) +on the Music Thing Discord. + + +--- ## Credits - **Music Thing Modular Workshop System Computer** — Tom Whitwell / Music Thing Modular. @@ -432,7 +437,7 @@ the worst mode went from **334% of budget to 70%, with zero overruns**. The clock is 192 MHz. USB is modal — hold the switch to hand the card over, hold again to go back to playing — so nothing of TinyUSB runs while you perform. -Audibly: samples no longer truncate when hits overlap (eight voices, and a +Audibly: samples less audibly truncate when hits overlap (eight voices, and a steal is a crossfade rather than a cut), the library is re-baked ~1 bit louder with dither, and the round robins finally produce as many distinct sounds as they claim — panning no longer collapses eight variants to four, and Meteors From a387549d4c6d841a1ed0053d613fd6b6b4f50297 Mon Sep 17 00:00:00 2001 From: uglifruit Date: Wed, 5 Aug 2026 23:16:40 +0100 Subject: [PATCH 4/4] 62_BioMimicry: README heading, and drop the CLAUDE.md link CLAUDE.md is internal working notes and is not shipped here, so the build section pointed at a file that does not exist in this repo. Points at the upstream repo instead. --- releases/62_BioMimicry/README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/releases/62_BioMimicry/README.md b/releases/62_BioMimicry/README.md index 425cf9b67..016a1249f 100644 --- a/releases/62_BioMimicry/README.md +++ b/releases/62_BioMimicry/README.md @@ -363,10 +363,11 @@ cmake --build build Produces `build/biomimicry.uf2`. Hold **BOOTSEL** while plugging in USB and drop it on the mounted drive. On Windows, `cmake`/`ninja` live in `~/.pico-sdk/` and are not on the -default PATH — see [CLAUDE.md](CLAUDE.md) for the exact invocation. +default PATH — see the build notes in the +[upstream repo](https://github.com/uglifruit/WorkshopBio) for the exact invocation. --- -## Use +## Requirements and Help Runs on a Music Thing Modular Workshop System Computer. Built on the RP2040 with [ComputerCard](https://github.com/TomWhitwell/Workshop_Computer).

yz0u5NA#NfG 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 literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/horses_1.raw b/releases/62_BioMimicry/samples/horses_1.raw new file mode 100644 index 0000000000000000000000000000000000000000..3dc8ad9dde54c03ec02fab00bfe21d1901ca562c GIT binary patch literal 5241 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 RW+U9x?L`i4mxu@i{s*+p*{1*i literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/horses_2.raw b/releases/62_BioMimicry/samples/horses_2.raw new file mode 100644 index 0000000000000000000000000000000000000000..35e0288234ba59d2d02897ce0246cc779a7a0a0d GIT binary patch literal 6028 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 literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/horses_3.raw b/releases/62_BioMimicry/samples/horses_3.raw new file mode 100644 index 0000000000000000000000000000000000000000..f88b53dcb1bd7b351dd580bd228a60eb7d68c21a GIT binary patch literal 8250 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 literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/horses_4.raw b/releases/62_BioMimicry/samples/horses_4.raw new file mode 100644 index 0000000000000000000000000000000000000000..cbddd24d823bc779982d50c0bda826090854f882 GIT binary patch literal 8857 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 K$MMCco&N(opoM7w literal 0 HcmV?d00001 diff --git a/releases/62_BioMimicry/samples/meteors_1.raw b/releases/62_BioMimicry/samples/meteors_1.raw new file mode 100644 index 0000000000000000000000000000000000000000..388996663e34ff9c2977e57a9e59d26a96281a4f GIT binary patch literal 39443 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

DHa7ZicAHY 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 iIluZ5{#JxMl0k-5Oo+Q{uq> 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