diff --git a/CMakeLists.txt b/CMakeLists.txt index c3bf5b826..2490246a3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_PROJECT_VERSION_MAJOR 0) set(CMAKE_PROJECT_VERSION_MINOR 6) -set(CMAKE_PROJECT_VERSION_PATCH 0) +set(CMAKE_PROJECT_VERSION_PATCH 1) set(BUILD_GUI_DEFAULT ON) set(USE_SDL2_DEFAULT ON) diff --git a/README.md b/README.md index 5abdc8127..3bf73dc14 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ for other operating systems, you may [build the source](#developer-info). - YM3812 (OPL2) - YMF262 (OPL3) with full 4-op support! - Y8950 (OPL with ADPCM) + - ESS ESFM (like OPL3 but with more features) - square wave chips: - AY-3-8910/YM2149(F) used in several computers and game consoles - Commodore VIC used in the VIC-20 @@ -86,6 +87,7 @@ for other operating systems, you may [build the source](#developer-info). - modern/fantasy: - Commander X16 VERA - tildearrow Sound Unit + - PowerNoise - Generic PCM DAC - mix and match sound chips! - over 200 ready to use presets from computers, game consoles and arcade boards... diff --git a/TODO.md b/TODO.md index f1918edef..03e64ae2e 100644 --- a/TODO.md +++ b/TODO.md @@ -1,13 +1,5 @@ # to-do -- finish color import improvements (settings refactor) -- new undo stuff -- fix some bugs - finish auto-clone - -once you have done all of this (maybe not the first one), release 0.6.1 - -# and then - - new oscilloscope renderer - custom code that uses texture and fixes two issues: too many vertices, and broken anti-aliasing - new pattern renderer - performance improvements diff --git a/android/app/build.gradle b/android/app/build.gradle index 1b09780c5..6fed5ed8e 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -15,8 +15,8 @@ android { } minSdkVersion 21 targetSdkVersion 26 - versionCode 181 - versionName "0.6" + versionCode 192 + versionName "0.6.1" externalNativeBuild { cmake { arguments "-DANDROID_APP_PLATFORM=android-21", "-DANDROID_STL=c++_static", "-DWARNINGS_ARE_ERRORS=ON" diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index a8b2007b1..0c430ea6b 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,8 +1,8 @@ diff --git a/demos/amiga/trance_dream.fur b/demos/amiga/trance_dream.fur new file mode 100644 index 000000000..553b3bbc8 Binary files /dev/null and b/demos/amiga/trance_dream.fur differ diff --git a/demos/ay8930/One_Minute_Waltz.fur b/demos/ay8930/One_Minute_Waltz.fur new file mode 100644 index 000000000..8295974d9 Binary files /dev/null and b/demos/ay8930/One_Minute_Waltz.fur differ diff --git a/demos/ay8930/PlayingOnTheStairs.fur b/demos/ay8930/PlayingOnTheStairs.fur deleted file mode 100644 index 80c5fd82a..000000000 Binary files a/demos/ay8930/PlayingOnTheStairs.fur and /dev/null differ diff --git a/demos/ay8930/Playing_On_The_Stairs.fur b/demos/ay8930/Playing_On_The_Stairs.fur new file mode 100644 index 000000000..da4e7ddd5 Binary files /dev/null and b/demos/ay8930/Playing_On_The_Stairs.fur differ diff --git a/demos/esfm/AAAA.fur b/demos/esfm/AAAA.fur new file mode 100644 index 000000000..36f29a613 Binary files /dev/null and b/demos/esfm/AAAA.fur differ diff --git a/demos/esfm/ALCATRAZ_ALWAYS.fur b/demos/esfm/ALCATRAZ_ALWAYS.fur new file mode 100644 index 000000000..08d61df24 Binary files /dev/null and b/demos/esfm/ALCATRAZ_ALWAYS.fur differ diff --git a/demos/esfm/CampingJourney.fur b/demos/esfm/CampingJourney.fur new file mode 100644 index 000000000..0eb13e69a Binary files /dev/null and b/demos/esfm/CampingJourney.fur differ diff --git a/demos/esfm/Deadline.fur b/demos/esfm/Deadline.fur new file mode 100644 index 000000000..8231af8f9 Binary files /dev/null and b/demos/esfm/Deadline.fur differ diff --git a/demos/esfm/Devil_Detective.fur b/demos/esfm/Devil_Detective.fur new file mode 100644 index 000000000..8a92094df Binary files /dev/null and b/demos/esfm/Devil_Detective.fur differ diff --git a/demos/esfm/Drinkin_Coffee_Way_Too_Much.fur b/demos/esfm/Drinkin_Coffee_Way_Too_Much.fur new file mode 100644 index 000000000..9b946f186 Binary files /dev/null and b/demos/esfm/Drinkin_Coffee_Way_Too_Much.fur differ diff --git a/demos/esfm/EdgeRunning_2078.fur b/demos/esfm/EdgeRunning_2078.fur new file mode 100644 index 000000000..946d97353 Binary files /dev/null and b/demos/esfm/EdgeRunning_2078.fur differ diff --git a/demos/esfm/Fighting_the_Dimensions_Big_Bad_Because_its_Fun.fur b/demos/esfm/Fighting_the_Dimensions_Big_Bad_Because_its_Fun.fur new file mode 100644 index 000000000..e4144c343 Binary files /dev/null and b/demos/esfm/Fighting_the_Dimensions_Big_Bad_Because_its_Fun.fur differ diff --git a/demos/esfm/I_Cant_Escape_Your_Memory.fur b/demos/esfm/I_Cant_Escape_Your_Memory.fur new file mode 100644 index 000000000..66c5f3eae Binary files /dev/null and b/demos/esfm/I_Cant_Escape_Your_Memory.fur differ diff --git a/demos/esfm/Just_me_and_my_Brain.fur b/demos/esfm/Just_me_and_my_Brain.fur new file mode 100644 index 000000000..5f6e0933e Binary files /dev/null and b/demos/esfm/Just_me_and_my_Brain.fur differ diff --git a/demos/esfm/Ken_Stage.fur b/demos/esfm/Ken_Stage.fur new file mode 100644 index 000000000..b2ecc1d8d Binary files /dev/null and b/demos/esfm/Ken_Stage.fur differ diff --git a/demos/esfm/Magician_Lake_Cover.fur b/demos/esfm/Magician_Lake_Cover.fur new file mode 100644 index 000000000..7e8c00d3b Binary files /dev/null and b/demos/esfm/Magician_Lake_Cover.fur differ diff --git a/demos/esfm/Napalm-Loader.fur b/demos/esfm/Napalm-Loader.fur new file mode 100644 index 000000000..56501f144 Binary files /dev/null and b/demos/esfm/Napalm-Loader.fur differ diff --git a/demos/esfm/Perilous059.fur b/demos/esfm/Perilous059.fur new file mode 100644 index 000000000..abe825a8c Binary files /dev/null and b/demos/esfm/Perilous059.fur differ diff --git a/demos/esfm/Poets_I.fur b/demos/esfm/Poets_I.fur new file mode 100644 index 000000000..7b24ee6ca Binary files /dev/null and b/demos/esfm/Poets_I.fur differ diff --git a/demos/esfm/Redial.fur b/demos/esfm/Redial.fur new file mode 100644 index 000000000..477af17f5 Binary files /dev/null and b/demos/esfm/Redial.fur differ diff --git a/demos/esfm/SearchPrincess.fur b/demos/esfm/SearchPrincess.fur new file mode 100644 index 000000000..9c769b69b Binary files /dev/null and b/demos/esfm/SearchPrincess.fur differ diff --git a/demos/esfm/Second_Start.fur b/demos/esfm/Second_Start.fur new file mode 100644 index 000000000..3473e63dd Binary files /dev/null and b/demos/esfm/Second_Start.fur differ diff --git a/demos/esfm/Strange_Sunset.fur b/demos/esfm/Strange_Sunset.fur new file mode 100644 index 000000000..19328b612 Binary files /dev/null and b/demos/esfm/Strange_Sunset.fur differ diff --git a/demos/esfm/Tangent_to_a_Segue.fur b/demos/esfm/Tangent_to_a_Segue.fur new file mode 100644 index 000000000..6ca6e7ac3 Binary files /dev/null and b/demos/esfm/Tangent_to_a_Segue.fur differ diff --git a/demos/esfm/TheOneWayFuture.fur b/demos/esfm/TheOneWayFuture.fur new file mode 100644 index 000000000..dc4150c3b Binary files /dev/null and b/demos/esfm/TheOneWayFuture.fur differ diff --git a/demos/esfm/Unconscious_Unravelling.fur b/demos/esfm/Unconscious_Unravelling.fur new file mode 100644 index 000000000..940d8bd61 Binary files /dev/null and b/demos/esfm/Unconscious_Unravelling.fur differ diff --git a/demos/esfm/Unknown_Location.fur b/demos/esfm/Unknown_Location.fur new file mode 100644 index 000000000..58d3b9a34 Binary files /dev/null and b/demos/esfm/Unknown_Location.fur differ diff --git a/demos/esfm/WalkInThePark.fur b/demos/esfm/WalkInThePark.fur new file mode 100644 index 000000000..a593e1988 Binary files /dev/null and b/demos/esfm/WalkInThePark.fur differ diff --git a/demos/esfm/act_of_fighter.fur b/demos/esfm/act_of_fighter.fur new file mode 100644 index 000000000..2d04e49f7 Binary files /dev/null and b/demos/esfm/act_of_fighter.fur differ diff --git a/demos/esfm/cielos_esfumados.fur b/demos/esfm/cielos_esfumados.fur new file mode 100644 index 000000000..7aed36c51 Binary files /dev/null and b/demos/esfm/cielos_esfumados.fur differ diff --git a/demos/esfm/esfm_ins.fur b/demos/esfm/esfm_ins.fur new file mode 100644 index 000000000..48af457e8 Binary files /dev/null and b/demos/esfm/esfm_ins.fur differ diff --git a/demos/esfm/experiment.fur b/demos/esfm/experiment.fur new file mode 100644 index 000000000..d0a7a6992 Binary files /dev/null and b/demos/esfm/experiment.fur differ diff --git a/demos/esfm/flashback.fur b/demos/esfm/flashback.fur new file mode 100644 index 000000000..597abd45e Binary files /dev/null and b/demos/esfm/flashback.fur differ diff --git a/demos/esfm/frosty_dusk.fur b/demos/esfm/frosty_dusk.fur new file mode 100644 index 000000000..2f2d0c39c Binary files /dev/null and b/demos/esfm/frosty_dusk.fur differ diff --git a/demos/esfm/haunted_castle.fur b/demos/esfm/haunted_castle.fur new file mode 100644 index 000000000..90ec11b93 Binary files /dev/null and b/demos/esfm/haunted_castle.fur differ diff --git a/demos/esfm/her_wishes.fur b/demos/esfm/her_wishes.fur new file mode 100644 index 000000000..872952f90 Binary files /dev/null and b/demos/esfm/her_wishes.fur differ diff --git a/demos/esfm/ledstorm.fur b/demos/esfm/ledstorm.fur new file mode 100644 index 000000000..9515d0ece Binary files /dev/null and b/demos/esfm/ledstorm.fur differ diff --git a/demos/esfm/loneguitarist.fur b/demos/esfm/loneguitarist.fur new file mode 100644 index 000000000..03293d86d Binary files /dev/null and b/demos/esfm/loneguitarist.fur differ diff --git a/demos/esfm/moon_closedspace.fur b/demos/esfm/moon_closedspace.fur new file mode 100644 index 000000000..107bb3b59 Binary files /dev/null and b/demos/esfm/moon_closedspace.fur differ diff --git a/demos/esfm/sticker1.fur b/demos/esfm/sticker1.fur new file mode 100644 index 000000000..f09f7c523 Binary files /dev/null and b/demos/esfm/sticker1.fur differ diff --git a/demos/esfm/synthy.fur b/demos/esfm/synthy.fur new file mode 100644 index 000000000..f9c2fb772 Binary files /dev/null and b/demos/esfm/synthy.fur differ diff --git a/demos/esfm/wack.fur b/demos/esfm/wack.fur new file mode 100644 index 000000000..e475919cd Binary files /dev/null and b/demos/esfm/wack.fur differ diff --git a/demos/esfm/x_evil_soul.fur b/demos/esfm/x_evil_soul.fur new file mode 100644 index 000000000..780ff36d1 Binary files /dev/null and b/demos/esfm/x_evil_soul.fur differ diff --git a/demos/misc/Playground_2xT6W28.fur b/demos/misc/Playground_2xT6W28.fur new file mode 100644 index 000000000..7709900e3 Binary files /dev/null and b/demos/misc/Playground_2xT6W28.fur differ diff --git a/demos/misc/RunningOnThePlayground_2xT6W28.fur b/demos/misc/RunningOnThePlayground_2xT6W28.fur deleted file mode 100644 index 769f12373..000000000 Binary files a/demos/misc/RunningOnThePlayground_2xT6W28.fur and /dev/null differ diff --git a/demos/misc/Someting_I_can_feel_MSM5232.fur b/demos/misc/Someting_I_can_feel_MSM5232.fur new file mode 100644 index 000000000..5e9c724ee Binary files /dev/null and b/demos/misc/Someting_I_can_feel_MSM5232.fur differ diff --git a/demos/misc/T_Six_T6W28.fur b/demos/misc/T_Six_T6W28.fur new file mode 100644 index 000000000..0d8530946 Binary files /dev/null and b/demos/misc/T_Six_T6W28.fur differ diff --git a/demos/msx/Morning_Alarm.fur b/demos/msx/Morning_Alarm.fur new file mode 100644 index 000000000..3f063df4b Binary files /dev/null and b/demos/msx/Morning_Alarm.fur differ diff --git a/demos/msx/WakingUpWhenMorningAlarmRings_OPLL.fur b/demos/msx/WakingUpWhenMorningAlarmRings_OPLL.fur deleted file mode 100644 index 36968ed0c..000000000 Binary files a/demos/msx/WakingUpWhenMorningAlarmRings_OPLL.fur and /dev/null differ diff --git a/demos/multichip/Chip_Duel_AY-3-8910+SN76489.fur b/demos/multichip/Chip_Duel_AY-3-8910+SN76489.fur new file mode 100644 index 000000000..e5aa24679 Binary files /dev/null and b/demos/multichip/Chip_Duel_AY-3-8910+SN76489.fur differ diff --git a/demos/nes/Fur_Nes.fur b/demos/nes/Fur_Nes.fur new file mode 100644 index 000000000..2535d591c Binary files /dev/null and b/demos/nes/Fur_Nes.fur differ diff --git a/demos/specs2/back_into_adventure.fur b/demos/specs2/back_into_adventure.fur new file mode 100644 index 000000000..865a97e6b Binary files /dev/null and b/demos/specs2/back_into_adventure.fur differ diff --git a/demos/specs2/spa.fur b/demos/specs2/spa.fur new file mode 100644 index 000000000..34ecd2558 Binary files /dev/null and b/demos/specs2/spa.fur differ diff --git a/doc/4-instrument/README.md b/doc/4-instrument/README.md index 1ba003c13..058fc7f7e 100644 --- a/doc/4-instrument/README.md +++ b/doc/4-instrument/README.md @@ -9,10 +9,8 @@ alternatively, window > instrument editor displays it. ![top of instrument editor](instrument-editor-top.png) -**TODO: add descriptions to buttons in the image. it really needs them.** - -- **Instrument Selector**: displays a list of instruments in the song. -- **Open**: open an instrument file. +- **Select**: displays a list of instruments in the song. +- **Load**: open an instrument file. - **Save**: save current instrument to a file. - right-click to see additional options, such as saving in DefleMask preset format (.dmp). - **Name**: changes the instrument name. @@ -76,6 +74,7 @@ the following instrument types are available: - [TED](ted.md) - for use with Commodore Plus/4 and Commodore 16's TED chip. - [C140](c140.md) - for use with C140 sample chip. - [C219](c219.md) - for use with C219 sample chip. +- [PowerNoise](powernoise.md) - for use with PowerNoise chip. ## macros @@ -93,9 +92,6 @@ each macro has the following parameters: - **Step Length (ticks)**: determines the number of ticks between macro steps. default is 1. - **Delay**: delays the macro until this many ticks have elapsed. default is 0. - the button is highlighted if either of these parameters is set to non-default values. -- release mode: determines how macro release (`===` or `REL` in the pattern) is handled: - - **Active**: jumps to release position on release. - - **Passive**: does not jump to release position. this will result in delay if release position has not been reached yet. ## macro types @@ -115,8 +111,6 @@ this is the most basic macro type. when the instrument is played, every value in ![bitmask sequence macro editor](macro-seq-bitmask.png) -**TODO: once again, text in the image. this sucks.** - the Length field allows you to set the number of steps in the sequence. the sequence view allows you to edit the macro. @@ -171,6 +165,10 @@ the sequence can be edited in the text input field at the very bottom. the follo in bitmask-style macros, the values are added up in binary and converted to decimal. +the release mode parameter determines how macro release (`===` or `REL` in the pattern) is handled: +- **Active**: jumps to release position on release. +- **Passive**: does not jump to release position. this will result in delay if release position has not been reached yet. + ### ADSR ![ADSR macro editor](macro-ADSR.png) diff --git a/doc/4-instrument/instrument-editor-top.png b/doc/4-instrument/instrument-editor-top.png index 5aa3f7289..3cfab1ec1 100644 Binary files a/doc/4-instrument/instrument-editor-top.png and b/doc/4-instrument/instrument-editor-top.png differ diff --git a/doc/4-instrument/lynx.md b/doc/4-instrument/lynx.md index e4bb3bc78..73cf93734 100644 --- a/doc/4-instrument/lynx.md +++ b/doc/4-instrument/lynx.md @@ -24,6 +24,20 @@ note that using samples on Lynx is CPU expensive! Atari Lynx generates sound using a 12-bit linear feedback shift register with configurable tap. nine separate bits can be enabled to be the source of feedback: 0, 1, 2, 3, 4, 5, 7, 10 and 11. to generate _any_ sound at least one bit _must_ be enabled. +### LFSR-based synthesis + +a linear-feedback shift register is one method used for random number generation. +it works by shifting a sequence of binary numbers (bits), taking the last bit into the output. then some of the bits are combined with others, doing a XOR (exclusive or) operation and then being pushed back. + +think of it as a conveyor carrying glass bottles. each bottle may be empty or carrying water. +the bottle at the end is taken. if there's water, then the output is 1. if it's empty, the output is 0. +depending on the LFSR configuration, many bottles at specific positions ("taps") are looked at. these are combined from left to right, two by two: +- if two bottles are identical, an empty bottle is pushed. +- if one bottle has water but the other is empty, a water bottle is pushed. +the process is repeated indefinitely. + +unlike PowerNoise, Lynx's taps are in fixed positions, but it has many of them. + ### square wave the LFSR is shifted at the rate define by sound pitch and generates square wave by setting channel output value to +volume or -volume, depending on the bit shifted in. diff --git a/doc/4-instrument/macro-seq-bitmask.png b/doc/4-instrument/macro-seq-bitmask.png index ce4c323f4..e9d846278 100644 Binary files a/doc/4-instrument/macro-seq-bitmask.png and b/doc/4-instrument/macro-seq-bitmask.png differ diff --git a/doc/4-instrument/macro-seq-clip.png b/doc/4-instrument/macro-seq-clip.png index 063e92faa..e3dcea591 100644 Binary files a/doc/4-instrument/macro-seq-clip.png and b/doc/4-instrument/macro-seq-clip.png differ diff --git a/doc/4-instrument/macro-seq.png b/doc/4-instrument/macro-seq.png index fa7e0d946..e9b86443c 100644 Binary files a/doc/4-instrument/macro-seq.png and b/doc/4-instrument/macro-seq.png differ diff --git a/doc/4-instrument/macroview.png b/doc/4-instrument/macroview.png index faadedb2e..af8dd58aa 100644 Binary files a/doc/4-instrument/macroview.png and b/doc/4-instrument/macroview.png differ diff --git a/doc/4-instrument/powernoise.md b/doc/4-instrument/powernoise.md index af921ebf6..6b4909e5b 100644 --- a/doc/4-instrument/powernoise.md +++ b/doc/4-instrument/powernoise.md @@ -15,7 +15,7 @@ depending on the LFSR configuration: - a bottle is pushed into the conveyor. it is either empty or filled with water depending on the bottle at a specific position in the conveyor (this is called a "tap"), or - two bottles at specific positions ("taps") are looked at and combined as follows: - if the bottles are identical, an empty bottle is pushed. - - if one bottle has water but the other is empty, a watee bottle is pushed. + - if one bottle has water but the other is empty, a water bottle is pushed. the process is repeated indefinitely. PowerNoise uses either one or two taps for the LFSR, configurable via the Control macro. diff --git a/doc/7-systems/README.md b/doc/7-systems/README.md index 4c1d09f98..8f5616faf 100644 --- a/doc/7-systems/README.md +++ b/doc/7-systems/README.md @@ -90,6 +90,7 @@ this is the full list of chips that Furnace supports. - [PET](pet.md) - [Pokémon Mini](pokemini.md) - [POKEY](pokey.md) +- [PowerNoise](powernoise.md) - [PV-1000](pv1000.md) - [QSound](qsound.md) - [RF5C68/RF5C164](ricoh.md) diff --git a/extern/YMF262-LLE/fmopl3.c b/extern/YMF262-LLE/fmopl3.c index f534ba724..69a4224e0 100644 --- a/extern/YMF262-LLE/fmopl3.c +++ b/extern/YMF262-LLE/fmopl3.c @@ -1442,6 +1442,8 @@ void FMOPL3_Clock(fmopl3_t *chip) int sign; + chip->op_value_debug = chip->op_value; + int accm_a = chip->fsm_out[6] ? 0 : chip->accm_a[1]; accm_a += (chip->pan_l[1][1] & 1) != 0 ? value : 0; chip->accm_a[0] = accm_a; diff --git a/extern/YMF262-LLE/fmopl3.h b/extern/YMF262-LLE/fmopl3.h index 6fcf95f57..051515593 100644 --- a/extern/YMF262-LLE/fmopl3.h +++ b/extern/YMF262-LLE/fmopl3.h @@ -297,6 +297,7 @@ typedef struct int op_mod[2]; int op_value; + int op_value_debug; int accm_a[2]; int accm_b[2]; diff --git a/extern/backward/backward.hpp b/extern/backward/backward.hpp index 1e2251369..096e9d73d 100644 --- a/extern/backward/backward.hpp +++ b/extern/backward/backward.hpp @@ -4253,7 +4253,7 @@ public: } #ifdef _WIN32 - MessageBox(NULL,"Error","Furnace has crashed! please report this to the issue tracker immediately:\r\nhttps://github.com/tildearrow/furnace/issues/new\r\n\r\na file called furnace_crash.txt will be created in your user directory.\r\nthis will be important for locating the origin of the crash.",MB_OK|MB_ICONERROR); + MessageBox(NULL,"Error","Furnace has crashed! please report this to the issue tracker immediately:\r\nhttps://github.com/tildearrow/furnace/issues/new\r\n\r\na file called furnace_crash.txt will be created in your user directory.\r\nthis will be important for locating the origin of the crash.\r\n\r\nif Furnace keeps crashing and you believe it is caused by a configuration problem, you may start Furnace with the -safemode parameter.",MB_OK|MB_ICONERROR); std::string crashLocation; char* userProfile=getenv("USERPROFILE"); if (userProfile==NULL) { @@ -4492,7 +4492,7 @@ private: printer.print(st, std::cerr); #ifdef _WIN32 - MessageBox(NULL,"Furnace has crashed! please report this to the issue tracker immediately:\r\nhttps://github.com/tildearrow/furnace/issues/new\r\n\r\na file called furnace_crash.txt will be created in your user directory.\r\nthis will be important for locating the origin of the crash.","Error",MB_OK|MB_ICONERROR); + MessageBox(NULL,"Furnace has crashed! please report this to the issue tracker immediately:\r\nhttps://github.com/tildearrow/furnace/issues/new\r\n\r\na file called furnace_crash.txt will be created in your user directory.\r\nthis will be important for locating the origin of the crash.\r\n\r\nif Furnace keeps crashing and you believe it is caused by a configuration problem, you may start Furnace with the -safemode parameter.","Error",MB_OK|MB_ICONERROR); std::string crashLocation; char* userProfile=getenv("USERPROFILE"); if (userProfile==NULL) { diff --git a/papers/clipboard-format.md b/papers/clipboard-format.md index 06d1c4f4a..7182b59e2 100644 --- a/papers/clipboard-format.md +++ b/papers/clipboard-format.md @@ -6,7 +6,7 @@ when copying pattern data from Furnace, it's stored in the clipboard as plain te org.tildearrow.furnace - Pattern Data (144) ``` -this top line of text is always the same except for the number in parentheses, which is the internal build number. for example, 0.6 is `181`. +this top line of text is always the same except for the number in parentheses, which is the internal build number. for example, 0.6.1 is `192`. the second line is a number between 0 and 18 (decimal) which indicates which column the clip starts from. - `0`: note. diff --git a/papers/format.md b/papers/format.md index fc442e895..149c49869 100644 --- a/papers/format.md +++ b/papers/format.md @@ -32,6 +32,7 @@ these fields are 0 in format versions prior to 100 (0.6pre1). the format versions are: +- 192: Furnace 0.6.1 - 181: Furnace 0.6 - 180: Furnace 0.6pre18 - 179: Furnace 0.6pre17 diff --git a/res/Info.plist b/res/Info.plist index 7895024da..20f1b73b5 100644 --- a/res/Info.plist +++ b/res/Info.plist @@ -15,17 +15,17 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString - 0.6 + 0.6.1 CFBundleName Furnace CFBundlePackageType APPL CFBundleShortVersionString - 0.6 + 0.6.1 CFBundleSignature ???? CFBundleVersion - 0.6 + 0.6.1 NSHumanReadableCopyright NSHighResolutionCapable diff --git a/res/docpdf/make_paper.py b/res/docpdf/make_paper.py index 72708a436..91e97e77c 100644 --- a/res/docpdf/make_paper.py +++ b/res/docpdf/make_paper.py @@ -325,7 +325,7 @@ if __name__ == "__main__":

Furnace
User Manual

- for version 0.6 + for version 0.6.1
@@ -348,7 +348,7 @@ if __name__ == "__main__":

this documentation is under the Creative Commons Attribution 3.0 Unported license.

you may reproduce, modify and/or distribute this documentation provided this copyright notice (including license and attribution) is present and any necessary disclaimers whether modifications have been made.

this documentation is provided as-is and without warranty of any kind.

-

this manual is written for version 0.6 of Furnace.
it may not necessarily apply to previous or future versions.

+

this manual is written for version 0.6.1 of Furnace.
it may not necessarily apply to previous or future versions.

%s diff --git a/res/furnace.appdata.xml.in b/res/furnace.appdata.xml.in index 6103fef1f..782c7448a 100644 --- a/res/furnace.appdata.xml.in +++ b/res/furnace.appdata.xml.in @@ -4,6 +4,10 @@ Furnace Open-source chiptune tracker + + tildearrow and contributors + + tildearrow and contributors https://github.com/tildearrow/furnace CC0-1.0 @@ -32,7 +36,8 @@ furnace.desktop - https://tildearrow.org/storage/images/furnace.png + Furnace during playback + https://raw.githubusercontent.com/tildearrow/furnace/94cce861800c0473bdddb8270e462ebcdd18202a/papers/screenshot3.png diff --git a/res/icons.sfd b/res/icons.sfd index 769b73fbc..558f8c051 100644 --- a/res/icons.sfd +++ b/res/icons.sfd @@ -21,7 +21,7 @@ OS2Version: 0 OS2_WeightWidthSlopeOnly: 0 OS2_UseTypoMetrics: 0 CreationTime: 1691897631 -ModificationTime: 1701817435 +ModificationTime: 1706927377 PfmFamily: 81 TTFWeight: 400 TTFWidth: 5 @@ -47,13 +47,13 @@ LangName: 1033 Encoding: UnicodeBmp UnicodeInterp: none NameList: AGL For New Fonts -DisplaySize: -96 +DisplaySize: -24 AntiAlias: 1 FitToEm: 0 -WinInfo: 57672 8 5 +WinInfo: 57540 21 12 BeginPrivate: 0 EndPrivate -BeginChars: 65536 96 +BeginChars: 65536 98 StartChar: space Encoding: 32 32 0 @@ -2270,15 +2270,15 @@ SplineSet 1653.60449219 798.544921875 1681.75488281 781.904296875 1709.90625 765.263671875 c 1 1688.8125 716.044921875 1660.609375 678.232421875 1625.453125 651.982421875 c 0 1590.21875 625.732421875 1544.125 612.685546875 1487.171875 612.685546875 c 0xcbcd -1289.23339844 435.383789062 m 1 - 1289.23339844 -25.1181640625 l 1 - 1585.29882812 247.456054688 l 1 - 1585.29882812 117.280273438 l 1 - 1187.45410156 -248.998046875 l 1xd3ce - 1187.45410156 211.504882812 l 1 - 891.388671875 -61.0693359375 l 1 - 891.388671875 69.1064453125 l 1 - 1289.23339844 435.383789062 l 1 +1289.23339844 435.383789062 m 5 + 1289.23339844 -25.1181640625 l 5 + 1585.29882812 247.456054688 l 5 + 1585.29882812 117.280273438 l 5 + 1187.45410156 -248.998046875 l 5xd3ce + 1187.45410156 211.504882812 l 5 + 891.388671875 -61.0693359375 l 5 + 891.388671875 69.1064453125 l 5 + 1289.23339844 435.383789062 l 5 EndSplineSet EndChar @@ -6736,54 +6736,8 @@ EndChar StartChar: uniE159 Encoding: 57689 57689 95 Width: 1792 -Flags: HWO +Flags: HW LayerCount: 2 -UndoRedoHistory -Layer: 0 -Undoes -UndoOperation -Index: 0 -Type: 1 -WasModified: 0 -WasOrder2: 0 -Layer: 1 -Width: 1792 -VWidth: 1792 -LBearingChange: 0 -UnicodeEnc: 0 -InstructionsLength: 0 -SplineSet -1632 70 m 1 - 1632 -50 l 1025 -160 1210 m 1 - 160 1330 l 1025 -EndSplineSet -EndUndoOperation -UndoOperation -Index: 1 -Type: 1 -WasModified: 0 -WasOrder2: 0 -Layer: 2 -Width: 1792 -VWidth: 1792 -LBearingChange: 0 -UnicodeEnc: 0 -InstructionsLength: 0 -SplineSet -160 1270 m 25 - 160 1270 560 1270 896 640 c 0 - 1232 10 1632 10 1632 10 c 1025 -1632 70 m 5 - 1632 -50 l 1029 -160 1210 m 5 - 160 1330 l 1029 -EndSplineSet -EndUndoOperation -EndUndoes -Redoes -EndRedoes -EndUndoRedoHistory Back SplineSet 160 1270 m 25 @@ -6794,314 +6748,6 @@ SplineSet 160 1210 m 1 160 1330 l 1025 EndSplineSet -UndoRedoHistory -Layer: 1 -Undoes -UndoOperation -Index: 0 -Type: 1 -WasModified: 1 -WasOrder2: 0 -Layer: 2 -Width: 1792 -VWidth: 1792 -LBearingChange: 0 -UnicodeEnc: 0 -InstructionsLength: 0 -SplineSet -1632 1210.01171875 m 1 - 1632 1329.98828125 l 1 - 1619.75878906 1329.98828125 1193.45019531 1325.24316406 843.048828125 668.2421875 c 0 - 755.229492188 503.581054688 663.75 384.705078125 577.82421875 298.780273438 c 0 - 473.91796875 194.873046875 377.610351562 138.502929688 303.73046875 107.581054688 c 0 - 262.674804688 90.396484375 228.48828125 81.078125 203.702148438 76.0087890625 c 0 - 176.166992188 70.3779296875 160.23046875 70 159.536132812 69.986328125 c 1 - 159.698242188 69.9873046875 160 69.98828125 160 69.98828125 c 1 - 160 -49.98828125 l 1 - 172.241210938 -49.98828125 598.549804688 -45.2431640625 948.951171875 611.7578125 c 0 - 1036.77050781 776.418945312 1128.25 895.294921875 1214.17578125 981.219726562 c 0 - 1318.08203125 1085.12695312 1414.38964844 1141.49707031 1488.26953125 1172.41894531 c 0 - 1529.32519531 1189.60351562 1563.51171875 1198.921875 1588.29785156 1203.99121094 c 0 - 1615.83300781 1209.62207031 1631.76953125 1210 1632.46386719 1210.01367188 c 1 - 1632.30175781 1210.01269531 1632 1210.01171875 1632 1210.01171875 c 1 -159.999999952 1210.01176537 m 1 - 159.999999952 1329.98823463 l 1 - 170.809951102 1329.98823463 504.536374276 1326.28810718 823.734604363 872.948478072 c 1 - 800.889124326 837.280193024 778.251310121 799.419416229 755.928040313 759.232259114 c 1 - 695.916689064 850.735795855 635.614260663 923.430234862 577.824293264 981.220202232 c 0 - 473.917602143 1085.12689335 377.61065751 1141.49706263 303.730893464 1172.41936621 c 0 - 262.674555191 1189.60345677 228.488523437 1198.92230209 203.702403502 1203.99126863 c 0 - 176.167181121 1209.62244935 160.230079948 1210.00005891 159.536222574 1210.01396385 c 1 - 159.698263781 1210.01275358 159.999999952 1210.01176537 159.999999952 1210.01176537 c 1 -1632 1090.03515625 m 5 - 1632 1449.96484375 l 5 - 1558.47725996 1449.96484375 1167.58409474 1409.79522486 823.734604363 872.948478072 c 5 - 865.988935134 812.936984165 907.988680731 745.046220598 948.951069976 668.241740764 c 4 - 977.706682766 614.324966782 1006.85482384 565.317167145 1036.07195969 520.767740886 c 5 - 1042.35821703 532.084488601 1048.61953126 543.58571637 1054.85351562 555.274414062 c 4 - 1093.06152344 626.915039062 1265.13574219 948.919921875 1534.69042969 1061.74121094 c 4 - 1536.87304688 1062.65429688 1591.23828125 1085.29492188 1632 1090.03515625 c 5 -1036.07195969 520.767740886 m 1 - 1096.08331094 429.264204145 1156.38573934 356.569765138 1214.17570674 298.779797768 c 0 - 1318.08239786 194.873106647 1414.38934249 138.502937368 1488.26910654 107.580633787 c 0 - 1529.32544481 90.3965432265 1563.51147656 81.0776979108 1588.2975965 76.0087313726 c 0 - 1615.83281888 70.3775506458 1631.76992005 69.9999410877 1632.46377743 69.986036148 c 1 - 1632.30173622 69.9872464204 1632.00000005 69.9882346324 1632.00000005 69.9882346324 c 1 - 1632.00000005 -49.9882346324 l 1 - 1621.1900489 -49.9882346324 1287.46362572 -46.2881071791 968.265395637 407.051521928 c 1 - 991.110875674 442.719806976 1013.74868988 480.580583771 1036.07195969 520.767740886 c 1 -968.265395637 407.051521928 m 5 - 926.011064866 467.063015835 884.011319269 534.953779402 843.048930024 611.758259236 c 4 - 814.293317234 665.675033218 785.145176159 714.682832855 755.928040313 759.232259114 c 5 - 749.641782968 747.9155114 743.380468741 736.41428363 737.146484375 724.725585938 c 4 - 698.938476562 653.084960938 526.864257812 331.080078125 257.309570312 218.258789062 c 4 - 255.126953125 217.345703125 200.76171875 194.705078125 160 189.96484375 c 5 - 160 -169.96484375 l 5 - 233.522740042 -169.96484375 624.415905262 -129.795224857 968.265395637 407.051521928 c 5 -EndSplineSet -EndUndoOperation -UndoOperation -Index: 1 -Type: 1 -WasModified: 0 -WasOrder2: 0 -Layer: 2 -Width: 1792 -VWidth: 1792 -LBearingChange: 0 -UnicodeEnc: 0 -InstructionsLength: 0 -SplineSet -1632 1090.03515625 m 5 - 1632 1449.96484375 l 5 - 1552.21679688 1449.96484375 1098.71386719 1402.66308594 737.146484375 724.725585938 c 4 - 698.938476562 653.084960938 526.864257812 331.080078125 257.309570312 218.258789062 c 4 - 255.126953125 217.345703125 200.76171875 194.705078125 160 189.96484375 c 5 - 160 -169.96484375 l 5 - 239.783203125 -169.96484375 693.286132812 -122.663085938 1054.85351562 555.274414062 c 4 - 1093.06152344 626.915039062 1265.13574219 948.919921875 1534.69042969 1061.74121094 c 4 - 1536.87304688 1062.65429688 1591.23828125 1085.29492188 1632 1090.03515625 c 5 -1632 1210.01171875 m 1 - 1632 1329.98828125 l 1 - 1619.75878906 1329.98828125 1193.45019531 1325.24316406 843.048828125 668.2421875 c 0 - 755.229492188 503.581054688 663.75 384.705078125 577.82421875 298.780273438 c 0 - 473.91796875 194.873046875 377.610351562 138.502929688 303.73046875 107.581054688 c 0 - 262.674804688 90.396484375 228.48828125 81.078125 203.702148438 76.0087890625 c 0 - 176.166992188 70.3779296875 160.23046875 70 159.536132812 69.986328125 c 1 - 159.698242188 69.9873046875 160 69.98828125 160 69.98828125 c 1 - 160 -49.98828125 l 1 - 172.241210938 -49.98828125 598.549804688 -45.2431640625 948.951171875 611.7578125 c 0 - 1036.77050781 776.418945312 1128.25 895.294921875 1214.17578125 981.219726562 c 0 - 1318.08203125 1085.12695312 1414.38964844 1141.49707031 1488.26953125 1172.41894531 c 0 - 1529.32519531 1189.60351562 1563.51171875 1198.921875 1588.29785156 1203.99121094 c 0 - 1615.83300781 1209.62207031 1631.76953125 1210 1632.46386719 1210.01367188 c 1 - 1632.30175781 1210.01269531 1632 1210.01171875 1632 1210.01171875 c 1 -159.999999952 1210.01176537 m 5 - 159.999999952 1329.98823463 l 5 - 172.240934135 1329.98823462 598.550052583 1325.24364837 948.951069976 668.241740764 c 4 - 1036.77007573 503.581104976 1128.25010681 384.70539769 1214.17570674 298.779797768 c 4 - 1318.08239786 194.873106647 1414.38934249 138.502937368 1488.26910654 107.580633787 c 4 - 1529.32544481 90.3965432265 1563.51147656 81.0776979108 1588.2975965 76.0087313726 c 4 - 1615.83281888 70.3775506458 1631.76992005 69.9999410877 1632.46377743 69.986036148 c 5 - 1632.30173622 69.9872464204 1632.00000005 69.9882346324 1632.00000005 69.9882346324 c 5 - 1632.00000005 -49.9882346324 l 5 - 1619.75906587 -49.9882346228 1193.44994742 -45.2436483754 843.048930024 611.758259236 c 4 - 755.229924271 776.418895024 663.749893187 895.29460231 577.824293264 981.220202232 c 4 - 473.917602143 1085.12689335 377.61065751 1141.49706263 303.730893464 1172.41936621 c 4 - 262.674555191 1189.60345677 228.488523437 1198.92230209 203.702403502 1203.99126863 c 4 - 176.167181121 1209.62244935 160.230079948 1210.00005891 159.536222574 1210.01396385 c 5 - 159.698263781 1210.01275358 159.999999952 1210.01176537 159.999999952 1210.01176537 c 5 -EndSplineSet -EndUndoOperation -UndoOperation -Index: 2 -Type: 1 -WasModified: 1 -WasOrder2: 0 -Layer: 2 -Width: 1792 -VWidth: 1792 -LBearingChange: 0 -UnicodeEnc: 0 -InstructionsLength: 0 -SplineSet -160 1270 m 29 - 160 1270 560 1270 896 640 c 4 - 1232 10 1632 10 1632 10 c 1029 -1632 1210.01171875 m 1 - 1632 1329.98828125 l 1 - 1619.75878906 1329.98828125 1193.45019531 1325.24316406 843.048828125 668.2421875 c 0 - 755.229492188 503.581054688 663.75 384.705078125 577.82421875 298.780273438 c 0 - 473.91796875 194.873046875 377.610351562 138.502929688 303.73046875 107.581054688 c 0 - 262.674804688 90.396484375 228.48828125 81.078125 203.702148438 76.0087890625 c 0 - 176.166992188 70.3779296875 160.23046875 70 159.536132812 69.986328125 c 1 - 159.698242188 69.9873046875 160 69.98828125 160 69.98828125 c 1 - 160 -49.98828125 l 1 - 172.241210938 -49.98828125 598.549804688 -45.2431640625 948.951171875 611.7578125 c 0 - 1036.77050781 776.418945312 1128.25 895.294921875 1214.17578125 981.219726562 c 0 - 1318.08203125 1085.12695312 1414.38964844 1141.49707031 1488.26953125 1172.41894531 c 0 - 1529.32519531 1189.60351562 1563.51171875 1198.921875 1588.29785156 1203.99121094 c 0 - 1615.83300781 1209.62207031 1631.76953125 1210 1632.46386719 1210.01367188 c 1 - 1632.30175781 1210.01269531 1632 1210.01171875 1632 1210.01171875 c 1 -1632 1090.03515625 m 1 - 1632 1449.96484375 l 1 - 1552.21679688 1449.96484375 1098.71386719 1402.66308594 737.146484375 724.725585938 c 0 - 698.938476562 653.084960938 526.864257812 331.080078125 257.309570312 218.258789062 c 0 - 255.126953125 217.345703125 200.76171875 194.705078125 160 189.96484375 c 1 - 160 -169.96484375 l 1 - 239.783203125 -169.96484375 693.286132812 -122.663085938 1054.85351562 555.274414062 c 0 - 1093.06152344 626.915039062 1265.13574219 948.919921875 1534.69042969 1061.74121094 c 0 - 1536.87304688 1062.65429688 1591.23828125 1085.29492188 1632 1090.03515625 c 1 -EndSplineSet -EndUndoOperation -UndoOperation -Index: 3 -Type: 3 -WasModified: 1 -WasOrder2: 0 -Layer: 2 -EndUndoOperation -UndoOperation -Index: 4 -Type: 1 -WasModified: 1 -WasOrder2: 0 -Layer: 2 -Width: 1792 -VWidth: 1792 -LBearingChange: 0 -UnicodeEnc: 0 -InstructionsLength: 0 -SplineSet -159.999999952 1210.01176537 m 5 - 159.999999952 1329.98823463 l 5 - 172.240934135 1329.98823462 598.550052583 1325.24364837 948.951069976 668.241740764 c 4 - 1036.77007573 503.581104976 1128.25010681 384.70539769 1214.17570674 298.779797768 c 4 - 1318.08239786 194.873106647 1414.38934249 138.502937368 1488.26910654 107.580633787 c 4 - 1529.32544481 90.3965432265 1563.51147656 81.0776979108 1588.2975965 76.0087313726 c 4 - 1615.83281888 70.3775506458 1631.76992005 69.9999410877 1632.46377743 69.986036148 c 5 - 1632.30173622 69.9872464204 1632.00000005 69.9882346324 1632.00000005 69.9882346324 c 5 - 1632.00000005 -49.9882346324 l 5 - 1619.75906587 -49.9882346228 1193.44994742 -45.2436483754 843.048930024 611.758259236 c 4 - 755.229924271 776.418895024 663.749893187 895.29460231 577.824293264 981.220202232 c 4 - 473.917602143 1085.12689335 377.61065751 1141.49706263 303.730893464 1172.41936621 c 4 - 262.674555191 1189.60345677 228.488523437 1198.92230209 203.702403502 1203.99126863 c 4 - 176.167181121 1209.62244935 160.230079948 1210.00005891 159.536222574 1210.01396385 c 5 - 159.698263781 1210.01275358 159.999999952 1210.01176537 159.999999952 1210.01176537 c 5 -159.999999857 1090.0352961 m 5 - 159.999999857 1449.9647039 l 5 - 239.782893731 1449.96470383 693.286263441 1402.66324695 1054.85320993 724.725222292 c 4 - 1093.06152816 653.084625607 1265.13598183 331.080480771 1534.69080463 218.25857115 c 4 - 1536.87267214 217.345352617 1591.23876559 194.705394151 1632.00000014 189.964703897 c 5 - 1632.00000014 -169.964703897 l 5 - 1552.21710627 -169.964703835 1098.71373656 -122.663246954 737.146790073 555.274777708 c 4 - 698.938471842 626.915374393 526.864018169 948.919519229 257.309195374 1061.74142885 c 4 - 255.127327856 1062.65464738 200.761234414 1085.29460585 159.999999857 1090.0352961 c 5 -EndSplineSet -EndUndoOperation -UndoOperation -Index: 5 -Type: 3 -WasModified: 1 -WasOrder2: 0 -Layer: 2 -EndUndoOperation -UndoOperation -Index: 6 -Type: 1 -WasModified: 1 -WasOrder2: 0 -Layer: 2 -Width: 1792 -VWidth: 1792 -LBearingChange: 0 -UnicodeEnc: 0 -InstructionsLength: 0 -SplineSet -160 1270 m 29 - 160 1270 560 1270 896 640 c 4 - 1232 10 1632 10 1632 10 c 1029 -159.999999952 1210.01176537 m 1 - 159.999999952 1329.98823463 l 1 - 172.240934135 1329.98823462 598.550052583 1325.24364837 948.951069976 668.241740764 c 0 - 1036.77007573 503.581104976 1128.25010681 384.70539769 1214.17570674 298.779797768 c 0 - 1318.08239786 194.873106647 1414.38934249 138.502937368 1488.26910654 107.580633787 c 0 - 1529.32544481 90.3965432265 1563.51147656 81.0776979108 1588.2975965 76.0087313726 c 0 - 1615.83281888 70.3775506458 1631.76992005 69.9999410877 1632.46377743 69.986036148 c 1 - 1632.30173622 69.9872464204 1632.00000005 69.9882346324 1632.00000005 69.9882346324 c 1 - 1632.00000005 -49.9882346324 l 1 - 1619.75906587 -49.9882346228 1193.44994742 -45.2436483754 843.048930024 611.758259236 c 0 - 755.229924271 776.418895024 663.749893187 895.29460231 577.824293264 981.220202232 c 0 - 473.917602143 1085.12689335 377.61065751 1141.49706263 303.730893464 1172.41936621 c 0 - 262.674555191 1189.60345677 228.488523437 1198.92230209 203.702403502 1203.99126863 c 0 - 176.167181121 1209.62244935 160.230079948 1210.00005891 159.536222574 1210.01396385 c 1 - 159.698263781 1210.01275358 159.999999952 1210.01176537 159.999999952 1210.01176537 c 1 -EndSplineSet -EndUndoOperation -UndoOperation -Index: 7 -Type: 3 -WasModified: 1 -WasOrder2: 0 -Layer: 2 -EndUndoOperation -UndoOperation -Index: 8 -Type: 1 -WasModified: 1 -WasOrder2: 0 -Layer: 2 -Width: 1792 -VWidth: 1792 -LBearingChange: 0 -UnicodeEnc: 0 -InstructionsLength: 0 -SplineSet -160 1270 m 29 - 160 1270 560 1270 896 640 c 4 - 1232 10 1632 10 1632 10 c 1029 -EndSplineSet -EndUndoOperation -UndoOperation -Index: 9 -Type: 3 -WasModified: 1 -WasOrder2: 0 -Layer: 2 -EndUndoOperation -UndoOperation -Index: 10 -Type: 2 -WasModified: 1 -WasOrder2: 0 -Layer: 2 -Width: 1792 -VWidth: 1792 -LBearingChange: 0 -UnicodeEnc: 0 -InstructionsLength: 0 -SplineSet -160 1270 m 29 - 160 1270 560 1270 896 640 c 4 - 1232 10 1632 10 1632 10 c 1029 -EndSplineSet -EndUndoOperation -UndoOperation -Index: 11 -Type: 1 -WasModified: 1 -WasOrder2: 0 -Layer: 1 -Width: 1792 -VWidth: 1792 -LBearingChange: 0 -UnicodeEnc: 0 -InstructionsLength: 0 -EndUndoOperation -EndUndoes -Redoes -EndRedoes -EndUndoRedoHistory Fore SplineSet 1632 1210.01171875 m 1 @@ -7139,5 +6785,102 @@ SplineSet 991.110875674 442.719806976 1013.74868988 480.580583771 1036.07195969 520.767740886 c 1 EndSplineSet EndChar + +StartChar: uniE15A +Encoding: 57690 57690 96 +Width: 1792 +Flags: HW +LayerCount: 2 +Fore +SplineSet +170.8046875 72.1796875 m 1 + 170.8046875 351.37890625 170.8046875 630.578125 170.8046875 909.77734375 c 1 + 290.791992188 909.77734375 410.778320312 909.77734375 530.765625 909.77734375 c 1 + 608.40234375 909.77734375 668.36328125 887.0234375 710.74609375 841.41796875 c 128 + 753.2265625 795.8125 774.41796875 734.58203125 774.41796875 657.82421875 c 256 + 774.41796875 580.96875 753.2265625 519.73828125 710.74609375 474.1328125 c 128 + 668.36328125 428.625 608.40234375 405.7734375 530.765625 405.7734375 c 1 + 455.9609375 405.7734375 381.15625 405.7734375 306.3515625 405.7734375 c 1 + 306.3515625 294.576171875 306.3515625 183.377929688 306.3515625 72.1796875 c 1 + 261.168945312 72.1796875 215.987304688 72.1796875 170.8046875 72.1796875 c 1 +306.3515625 524.62109375 m 1 + 378.356445312 524.62109375 450.362304688 524.62109375 522.3671875 524.62109375 c 1 + 556.7421875 524.62109375 583.59765625 533.60546875 602.73828125 551.57421875 c 128 + 621.9765625 569.54296875 631.546875 595.421875 631.546875 629.015625 c 1 + 631.546875 648.189453125 631.546875 667.362304688 631.546875 686.53515625 c 1 + 631.546875 720.2265625 621.9765625 746.0078125 602.73828125 763.9765625 c 128 + 583.59765625 781.9453125 556.7421875 791.02734375 522.3671875 791.02734375 c 1 + 450.362304688 791.02734375 378.356445312 791.02734375 306.3515625 791.02734375 c 1 + 306.3515625 702.225585938 306.3515625 613.423828125 306.3515625 524.62109375 c 1 +1196.390625 535.36328125 m 1 + 1165.59667969 594.576171875 1134.80175781 653.788085938 1104.0078125 713 c 1 + 1102.80371094 713 1101.59863281 713 1100.39453125 713 c 1 + 1100.39453125 499.393554688 1100.39453125 285.787109375 1100.39453125 72.1796875 c 1 + 1057.19824219 72.1796875 1014.00097656 72.1796875 970.8046875 72.1796875 c 1 + 970.8046875 351.37890625 970.8046875 630.578125 970.8046875 909.77734375 c 1 + 1021.1953125 909.77734375 1071.5859375 909.77734375 1121.9765625 909.77734375 c 1 + 1213.1875 755.3828125 1304.3984375 600.98828125 1395.609375 446.59375 c 1 + 1426.40332031 387.381835938 1457.19824219 328.169921875 1487.9921875 268.95703125 c 1 + 1489.19628906 268.95703125 1490.40136719 268.95703125 1491.60546875 268.95703125 c 1 + 1491.60546875 482.564453125 1491.60546875 696.170898438 1491.60546875 909.77734375 c 1 + 1534.80175781 909.77734375 1577.99902344 909.77734375 1621.1953125 909.77734375 c 1 + 1621.1953125 630.578125 1621.1953125 351.37890625 1621.1953125 72.1796875 c 1 + 1570.8046875 72.1796875 1520.4140625 72.1796875 1470.0234375 72.1796875 c 1 + 1378.8125 226.57421875 1287.6015625 380.96875 1196.390625 535.36328125 c 1 +EndSplineSet +EndChar + +StartChar: uniE15B +Encoding: 57691 57691 97 +Width: 1792 +Flags: HWO +LayerCount: 2 +Fore +SplineSet +938.209960938 435.383789062 m 1 + 938.209960938 -25.1181640625 l 1 + 1234.27539062 247.456054688 l 1 + 1234.27539062 117.280273438 l 1 + 836.430664062 -248.998046875 l 1xd3ce + 836.430664062 211.504882812 l 1 + 540.365234375 -61.0693359375 l 1 + 540.365234375 69.1064453125 l 1 + 938.209960938 435.383789062 l 1 +315.962890625 621 m 1 + 315.962890625 844.359375 315.962890625 1067.71875 315.962890625 1291.078125 c 1 + 411.952148438 1291.078125 507.942382812 1291.078125 603.931640625 1291.078125 c 1 + 666.041015625 1291.078125 714.009765625 1272.875 747.916015625 1236.390625 c 128 + 781.900390625 1199.90625 798.853515625 1150.921875 798.853515625 1089.515625 c 256 + 798.853515625 1028.03125 781.900390625 979.046875 747.916015625 942.5625 c 128 + 714.009765625 906.15625 666.041015625 887.875 603.931640625 887.875 c 1 + 544.087890625 887.875 484.244140625 887.875 424.400390625 887.875 c 1 + 424.400390625 798.916992188 424.400390625 709.958984375 424.400390625 621 c 1 + 388.254882812 621 352.108398438 621 315.962890625 621 c 1 +424.400390625 982.953125 m 1 + 482.004882812 982.953125 539.608398438 982.953125 597.212890625 982.953125 c 1 + 624.712890625 982.953125 646.197265625 990.140625 661.509765625 1004.515625 c 128 + 676.900390625 1018.890625 684.556640625 1039.59375 684.556640625 1066.46875 c 1 + 684.556640625 1081.80761719 684.556640625 1097.14648438 684.556640625 1112.484375 c 1 + 684.556640625 1139.4375 676.900390625 1160.0625 661.509765625 1174.4375 c 128 + 646.197265625 1188.8125 624.712890625 1196.078125 597.212890625 1196.078125 c 1 + 539.608398438 1196.078125 482.004882812 1196.078125 424.400390625 1196.078125 c 1 + 424.400390625 1125.03710938 424.400390625 1053.99511719 424.400390625 982.953125 c 1 +1136.43164062 991.546875 m 1 + 1111.79589844 1038.91699219 1087.16113281 1086.28710938 1062.52539062 1133.65625 c 1 + 1061.56152344 1133.65625 1060.59863281 1133.65625 1059.63476562 1133.65625 c 1 + 1059.63476562 962.771484375 1059.63476562 791.885742188 1059.63476562 621 c 1 + 1025.07714844 621 990.520507812 621 955.962890625 621 c 1 + 955.962890625 844.359375 955.962890625 1067.71875 955.962890625 1291.078125 c 1 + 996.275390625 1291.078125 1036.58789062 1291.078125 1076.90039062 1291.078125 c 1 + 1149.86914062 1167.5625 1222.83789062 1044.046875 1295.80664062 920.53125 c 1 + 1320.44238281 873.162109375 1345.07714844 825.791992188 1369.71289062 778.421875 c 1 + 1370.67675781 778.421875 1371.63964844 778.421875 1372.60351562 778.421875 c 1 + 1372.60351562 949.307617188 1372.60351562 1120.19335938 1372.60351562 1291.078125 c 1 + 1407.16113281 1291.078125 1441.71777344 1291.078125 1476.27539062 1291.078125 c 1 + 1476.27539062 1067.71875 1476.27539062 844.359375 1476.27539062 621 c 1 + 1435.96289062 621 1395.65039062 621 1355.33789062 621 c 1 + 1282.36914062 744.515625 1209.40039062 868.03125 1136.43164062 991.546875 c 1 +EndSplineSet +EndChar EndChars EndSplineFont diff --git a/res/icons.ttf b/res/icons.ttf index 499cb84a1..07f6313f2 100644 Binary files a/res/icons.ttf and b/res/icons.ttf differ diff --git a/res/releaseReadme/stable-linux.txt b/res/releaseReadme/stable-linux.txt index be3b0078a..e93f352cc 100644 --- a/res/releaseReadme/stable-linux.txt +++ b/res/releaseReadme/stable-linux.txt @@ -16,9 +16,9 @@ if you find issues (e.g. bugs or annoyances), report them. links below. - Furnace on GitHub (project page and issue tracker): https://github.com/tildearrow/furnace - issues: https://github.com/tildearrow/furnace/issues - discussion: https://github.com/tildearrow/furnace/discussions -- Furnace on Revolt: https://rvlt.gg/GRPS6tmc - Furnace on Discord: https://discord.gg/EfrwT2wq7z -- online manual: https://tildearrow.org/furnace/doc/v0.6/ +- Furnace on Revolt: https://rvlt.gg/GRPS6tmc +- online manual: https://tildearrow.org/furnace/doc/v0.6.1/ # notes diff --git a/res/releaseReadme/stable-mac.txt b/res/releaseReadme/stable-mac.txt index 63bad6b0d..623a59d0f 100644 --- a/res/releaseReadme/stable-mac.txt +++ b/res/releaseReadme/stable-mac.txt @@ -26,9 +26,9 @@ if you find issues (e.g. bugs or annoyances), report them. links below. - Furnace on GitHub (project page and issue tracker): https://github.com/tildearrow/furnace - issues: https://github.com/tildearrow/furnace/issues - discussion: https://github.com/tildearrow/furnace/discussions -- Furnace on Revolt: https://rvlt.gg/GRPS6tmc - Furnace on Discord: https://discord.gg/EfrwT2wq7z -- online manual: https://tildearrow.org/furnace/doc/v0.6/ +- Furnace on Revolt: https://rvlt.gg/GRPS6tmc +- online manual: https://tildearrow.org/furnace/doc/v0.6.1/ # notes diff --git a/res/releaseReadme/stable-win.txt b/res/releaseReadme/stable-win.txt index c691defec..4c1174803 100644 --- a/res/releaseReadme/stable-win.txt +++ b/res/releaseReadme/stable-win.txt @@ -16,9 +16,9 @@ if you find issues (e.g. bugs or annoyances), report them. links below. - Furnace on GitHub (project page and issue tracker): https://github.com/tildearrow/furnace - issues: https://github.com/tildearrow/furnace/issues - discussion: https://github.com/tildearrow/furnace/discussions -- Furnace on Revolt: https://rvlt.gg/GRPS6tmc - Furnace on Discord: https://discord.gg/EfrwT2wq7z -- online manual: https://tildearrow.org/furnace/doc/v0.6/ +- Furnace on Revolt: https://rvlt.gg/GRPS6tmc +- online manual: https://tildearrow.org/furnace/doc/v0.6.1/ # notes diff --git a/scripts/release-linux-AppImage.sh b/scripts/release-linux-AppImage.sh index c535d2f6e..f5fbfeeb7 100755 --- a/scripts/release-linux-AppImage.sh +++ b/scripts/release-linux-AppImage.sh @@ -8,11 +8,11 @@ fi cd /tmp/furnace -if [ ! -e linuxbuild ]; then - mkdir linuxbuild || exit 1 +if [ ! -e aibuild ]; then + mkdir aibuild || exit 1 fi -cd linuxbuild +cd aibuild cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-O2" -DCMAKE_CXX_FLAGS="-O2 -Wall -Wextra -Wno-unused-parameter -Werror" -DWITH_DEMOS=OFF -DWITH_INSTRUMENTS=OFF -DWITH_WAVETABLES=OFF .. || exit 1 make -j4 || exit 1 @@ -20,7 +20,7 @@ make -j4 || exit 1 cd .. mkdir -p release/linux/furnace.AppDir || exit 1 -cd linuxbuild +cd aibuild make DESTDIR=/tmp/furnace/release/linux/furnace.AppDir install || exit 1 diff --git a/src/divasm/divasm.cpp b/src/divasm/divasm.cpp new file mode 100644 index 000000000..3970669c8 --- /dev/null +++ b/src/divasm/divasm.cpp @@ -0,0 +1,22 @@ +/** + * Furnace Tracker - multi-system chiptune tracker + * Copyright (C) 2021-2024 tildearrow and contributors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + + #include "divasm.h" + + \ No newline at end of file diff --git a/src/divasm/divasm.h b/src/divasm/divasm.h index 2846c98f8..646ed089f 100644 --- a/src/divasm/divasm.h +++ b/src/divasm/divasm.h @@ -1,3 +1,27 @@ +/** + * Furnace Tracker - multi-system chiptune tracker + * Copyright (C) 2021-2024 tildearrow and contributors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +// this is a mini-assembler written for Furnace. +// it will be used in future ROM export (yes, that's right, ROM is baked at export time). + +#include "../engine/safeWriter.h" + struct DivASMResult { int line, err; DivASMResult(): @@ -5,26 +29,34 @@ struct DivASMResult { err(0) {} }; -struct DivASMFile { - String name; - SafeReader* data; -}; - enum DivASMTarget { DIV_ASM_TARGET_DUMMY=0, DIV_ASM_TARGET_6502, - DIV_ASM_TARGET_SPC700 + DIV_ASM_TARGET_SPC700, + DIV_ASM_TARGET_Z80 +}; + +struct DivLabel { + String name; + unsigned int location; + bool direct; +}; + +struct DivOper { + String operation; + int line; }; class DivASM { - std::vector files; SafeWriter* result; + std::vector labels; + std::vector ops; + public: DivASMResult getError(); - SafeWriter* assemble(String name); - void addFile(String name, SafeReader* data); + SafeWriter* assemble(SafeReader* data); - DivASM(DivASMTarget target); + DivASM(); ~DivASM(); }; diff --git a/src/divasm/standalone.cpp b/src/divasm/standalone.cpp new file mode 100644 index 000000000..17b0bf631 --- /dev/null +++ b/src/divasm/standalone.cpp @@ -0,0 +1,30 @@ +/** + * Furnace Tracker - multi-system chiptune tracker + * Copyright (C) 2021-2024 tildearrow and contributors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "divasm.h" + +int main(int argc, char** argv) { + if (argc<2) { + printf("usage: %s file\n",argv[0]); + return 1; + } + + + return 0; +} \ No newline at end of file diff --git a/src/engine/chipUtils.h b/src/engine/chipUtils.h index d7cef0e28..84e2cf6b2 100644 --- a/src/engine/chipUtils.h +++ b/src/engine/chipUtils.h @@ -20,6 +20,7 @@ #ifndef _CHIP_UTILS_H #define _CHIP_UTILS_H +#include "defines.h" #include "macroInt.h" // custom clock limits @@ -29,7 +30,7 @@ // common shared channel struct template struct SharedChannel { int freq, baseFreq, baseNoteOverride, pitch, pitch2, arpOff; - int ins, note; + int ins, note, sampleNote, sampleNoteDelta; bool active, insChanged, freqChanged, fixedArp, keyOn, keyOff, portaPause, inPorta; T vol, outVol; DivMacroInt std; @@ -71,6 +72,8 @@ template struct SharedChannel { arpOff(0), ins(-1), note(0), + sampleNote(DIV_NOTE_NULL), + sampleNoteDelta(0), active(false), insChanged(true), freqChanged(false), diff --git a/src/engine/defines.h b/src/engine/defines.h index 8d9a501db..2b150ed45 100644 --- a/src/engine/defines.h +++ b/src/engine/defines.h @@ -36,5 +36,6 @@ // dispatch #define DIV_MAX_OUTPUTS 16 +#define DIV_NOTE_NULL 0x7fffffff #endif diff --git a/src/engine/dispatch.h b/src/engine/dispatch.h index d736fcfe0..fd9697375 100644 --- a/src/engine/dispatch.h +++ b/src/engine/dispatch.h @@ -25,11 +25,10 @@ #include "../pch.h" #include "config.h" #include "chipUtils.h" +#include "defines.h" #define ONE_SEMITONE 2200 -#define DIV_NOTE_NULL 0x7fffffff - #define addWrite(a,v) regWrites.push_back(DivRegWrite(a,v)); // HOW TO ADD A NEW COMMAND: diff --git a/src/engine/engine.h b/src/engine/engine.h index c1d60bbea..4ce839c0b 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -52,10 +52,10 @@ class DivWorkPool; #define EXTERN_BUSY_BEGIN_SOFT e->softLocked=true; e->isBusy.lock(); #define EXTERN_BUSY_END e->isBusy.unlock(); e->softLocked=false; -#define DIV_UNSTABLE +//#define DIV_UNSTABLE -#define DIV_VERSION "dev191" -#define DIV_ENGINE_VERSION 191 +#define DIV_VERSION "0.6.1" +#define DIV_ENGINE_VERSION 192 // for imports #define DIV_VERSION_MOD 0xff01 #define DIV_VERSION_FC 0xff02 diff --git a/src/engine/platform/amiga.cpp b/src/engine/platform/amiga.cpp index 95c9d49d5..9555019bd 100644 --- a/src/engine/platform/amiga.cpp +++ b/src/engine/platform/amiga.cpp @@ -370,20 +370,10 @@ void DivPlatformAmiga::tick(bool sysTick) { chan[i].outVol=((chan[i].vol%65)*MIN(64,chan[i].std.vol.val))>>6; chan[i].writeVol=true; } - double off=1.0; - if (!chan[i].useWave && chan[i].sample>=0 && chan[i].samplesong.sampleLen) { - DivSample* s=parent->getSample(chan[i].sample); - if (s->centerRate<1) { - off=1.0; - } else { - off=8363.0/(double)s->centerRate; - } - } if (NEW_ARP_STRAT) { chan[i].handleArp(); } else if (chan[i].std.arp.had) { - // TODO: why the off mult? this may be a bug! - chan[i].baseFreq=round(off*NOTE_PERIODIC_NOROUND(parent->calcArp(chan[i].note,chan[i].std.arp.val))); + chan[i].baseFreq=round(NOTE_PERIODIC_NOROUND(parent->calcArp(chan[i].note,chan[i].std.arp.val))); chan[i].freqChanged=true; } if (chan[i].useWave && chan[i].std.wave.had) { @@ -577,10 +567,14 @@ int DivPlatformAmiga::dispatch(DivCommand c) { chan[c.chan].updateWave=true; } } + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; } else { if (c.value!=DIV_NOTE_NULL) { chan[c.chan].sample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; } chan[c.chan].useWave=false; } @@ -657,9 +651,7 @@ int DivPlatformAmiga::dispatch(DivCommand c) { chan[c.chan].updateWave=true; break; case DIV_CMD_NOTE_PORTA: { - DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_AMIGA); - chan[c.chan].sample=ins->amiga.getSample(c.value2); - int destFreq=round(NOTE_PERIODIC_NOROUND(c.value2)); + int destFreq=round(NOTE_PERIODIC_NOROUND(c.value2+chan[c.chan].sampleNoteDelta)); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -682,7 +674,7 @@ int DivPlatformAmiga::dispatch(DivCommand c) { break; } case DIV_CMD_LEGATO: { - chan[c.chan].baseFreq=round(NOTE_PERIODIC_NOROUND(c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0)))); + chan[c.chan].baseFreq=round(NOTE_PERIODIC_NOROUND(c.value+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0)))); chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; break; diff --git a/src/engine/platform/ay.cpp b/src/engine/platform/ay.cpp index df75c4af8..6f50214cc 100644 --- a/src/engine/platform/ay.cpp +++ b/src/engine/platform/ay.cpp @@ -405,7 +405,12 @@ int DivPlatformAY8910::dispatch(DivCommand c) { if (!parent->song.disableSampleMacro && (ins->type==DIV_INS_AMIGA || ins->amiga.useSample)) { if (c.value!=DIV_NOTE_NULL) { chan[c.chan].dac.sample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; + } else if (chan[c.chan].sampleNote!=DIV_NOTE_NULL) { + chan[c.chan].dac.sample=ins->amiga.getSample(chan[c.chan].sampleNote); + c.value=ins->amiga.getFreq(chan[c.chan].sampleNote); } if (chan[c.chan].dac.sample<0 || chan[c.chan].dac.sample>=parent->song.sampleLen) { chan[c.chan].dac.sample=-1; @@ -457,6 +462,8 @@ int DivPlatformAY8910::dispatch(DivCommand c) { break; } if (c.value!=DIV_NOTE_NULL) { + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; chan[c.chan].baseFreq=NOTE_PERIODIC(c.value); chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; @@ -526,7 +533,7 @@ int DivPlatformAY8910::dispatch(DivCommand c) { break; } case DIV_CMD_NOTE_PORTA: { - int destFreq=NOTE_PERIODIC(c.value2); + int destFreq=NOTE_PERIODIC(c.value2+chan[c.chan].sampleNoteDelta); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -549,7 +556,7 @@ int DivPlatformAY8910::dispatch(DivCommand c) { break; } case DIV_CMD_LEGATO: { - chan[c.chan].baseFreq=NOTE_PERIODIC(c.value); + chan[c.chan].baseFreq=NOTE_PERIODIC(c.value+chan[c.chan].sampleNoteDelta); chan[c.chan].freqChanged=true; break; } diff --git a/src/engine/platform/ay8930.cpp b/src/engine/platform/ay8930.cpp index 1a6072717..6fca42e06 100644 --- a/src/engine/platform/ay8930.cpp +++ b/src/engine/platform/ay8930.cpp @@ -406,7 +406,12 @@ int DivPlatformAY8930::dispatch(DivCommand c) { if (ins->type==DIV_INS_AMIGA || ins->amiga.useSample) { if (c.value!=DIV_NOTE_NULL) { chan[c.chan].dac.sample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; + } else if (chan[c.chan].sampleNote!=DIV_NOTE_NULL) { + chan[c.chan].dac.sample=ins->amiga.getSample(chan[c.chan].sampleNote); + c.value=ins->amiga.getFreq(chan[c.chan].sampleNote); } if (chan[c.chan].dac.sample<0 || chan[c.chan].dac.sample>=parent->song.sampleLen) { chan[c.chan].dac.sample=-1; @@ -458,6 +463,8 @@ int DivPlatformAY8930::dispatch(DivCommand c) { break; } if (c.value!=DIV_NOTE_NULL) { + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; chan[c.chan].baseFreq=NOTE_PERIODIC(c.value); chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; @@ -520,7 +527,7 @@ int DivPlatformAY8930::dispatch(DivCommand c) { break; } case DIV_CMD_NOTE_PORTA: { - int destFreq=NOTE_PERIODIC(c.value2); + int destFreq=NOTE_PERIODIC(c.value2+chan[c.chan].sampleNoteDelta); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -543,7 +550,7 @@ int DivPlatformAY8930::dispatch(DivCommand c) { break; } case DIV_CMD_LEGATO: { - chan[c.chan].baseFreq=NOTE_PERIODIC(c.value); + chan[c.chan].baseFreq=NOTE_PERIODIC(c.value+chan[c.chan].sampleNoteDelta); chan[c.chan].freqChanged=true; break; } diff --git a/src/engine/platform/c140.cpp b/src/engine/platform/c140.cpp index 14d203587..c83a93247 100644 --- a/src/engine/platform/c140.cpp +++ b/src/engine/platform/c140.cpp @@ -320,7 +320,9 @@ int DivPlatformC140::dispatch(DivCommand c) { chan[c.chan].macroPanMul=ins->type==DIV_INS_AMIGA?127:255; if (c.value!=DIV_NOTE_NULL) { chan[c.chan].sample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; } if (c.value!=DIV_NOTE_NULL) { chan[c.chan].baseFreq=NOTE_FREQUENCY(c.value); @@ -393,7 +395,7 @@ int DivPlatformC140::dispatch(DivCommand c) { chan[c.chan].freqChanged=true; break; case DIV_CMD_NOTE_PORTA: { - int destFreq=NOTE_FREQUENCY(c.value2); + int destFreq=NOTE_FREQUENCY(c.value2+chan[c.chan].sampleNoteDelta); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -416,7 +418,7 @@ int DivPlatformC140::dispatch(DivCommand c) { break; } case DIV_CMD_LEGATO: { - chan[c.chan].baseFreq=NOTE_FREQUENCY(c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val-12):(0))); + chan[c.chan].baseFreq=NOTE_FREQUENCY(c.value+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val-12):(0))); chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; break; diff --git a/src/engine/platform/es5506.cpp b/src/engine/platform/es5506.cpp index 6c6e1732f..5a7c01c08 100644 --- a/src/engine/platform/es5506.cpp +++ b/src/engine/platform/es5506.cpp @@ -719,27 +719,51 @@ void DivPlatformES5506::tick(bool sysTick) { } } +// man this code +// part of the reason why it's so messy is because the chip is +// overly complex and because when this pull request was made, +// Furnace still was in an early state with no support for sample +// maps or whatever... +// one day I'll come back and clean this up int DivPlatformES5506::dispatch(DivCommand c) { switch (c.cmd) { case DIV_CMD_NOTE_ON: { DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_ES5506); bool sampleValid=false; - if (((ins->amiga.useNoteMap) && (c.value>=0 && c.value<120)) || - ((!ins->amiga.useNoteMap) && (ins->amiga.initSample>=0 && ins->amiga.initSamplesong.sampleLen))) { + if (c.value!=DIV_NOTE_NULL) { int sample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; if (sample>=0 && samplesong.sampleLen) { sampleValid=true; chan[c.chan].volMacroMax=ins->type==DIV_INS_AMIGA?64:0xfff; chan[c.chan].panMacroMax=ins->type==DIV_INS_AMIGA?127:0xfff; chan[c.chan].pcm.next=ins->amiga.useNoteMap?c.value:sample; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; chan[c.chan].pcm.note=c.value; chan[c.chan].filter=ins->es5506.filter; chan[c.chan].envelope=ins->es5506.envelope; + } else { + chan[c.chan].sampleNoteDelta=0; + } + } else { + int sample=ins->amiga.getSample(chan[c.chan].sampleNote); + if (sample>=0 && samplesong.sampleLen) { + sampleValid=true; + chan[c.chan].volMacroMax=ins->type==DIV_INS_AMIGA?64:0xfff; + chan[c.chan].panMacroMax=ins->type==DIV_INS_AMIGA?127:0xfff; + chan[c.chan].pcm.next=ins->amiga.useNoteMap?chan[c.chan].sampleNote:sample; + c.value=ins->amiga.getFreq(chan[c.chan].sampleNote); + chan[c.chan].pcm.note=c.value; + chan[c.chan].filter=ins->es5506.filter; + chan[c.chan].envelope=ins->es5506.envelope; + } else { + chan[c.chan].sampleNoteDelta=0; } } if (!sampleValid) { chan[c.chan].pcm.index=chan[c.chan].pcm.next=-1; + chan[c.chan].sampleNoteDelta=0; chan[c.chan].filter=DivInstrumentES5506::Filter(); chan[c.chan].envelope=DivInstrumentES5506::Envelope(); } @@ -962,7 +986,7 @@ int DivPlatformES5506::dispatch(DivCommand c) { break; case DIV_CMD_NOTE_PORTA: { int nextFreq=chan[c.chan].baseFreq; - const int destFreq=NOTE_ES5506(c.chan,c.value2); + const int destFreq=NOTE_ES5506(c.chan,c.value2+chan[c.chan].sampleNoteDelta); bool return2=false; if (destFreq>nextFreq) { nextFreq+=c.value; @@ -987,7 +1011,7 @@ int DivPlatformES5506::dispatch(DivCommand c) { } case DIV_CMD_LEGATO: { chan[c.chan].note=c.value; - chan[c.chan].nextNote=chan[c.chan].note+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val-12):(0)); + chan[c.chan].nextNote=chan[c.chan].note+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val-12):(0)); chan[c.chan].noteChanged.note=1; break; } diff --git a/src/engine/platform/ga20.cpp b/src/engine/platform/ga20.cpp index df8677584..2098f140b 100644 --- a/src/engine/platform/ga20.cpp +++ b/src/engine/platform/ga20.cpp @@ -207,7 +207,9 @@ int DivPlatformGA20::dispatch(DivCommand c) { chan[c.chan].macroVolMul=ins->type==DIV_INS_AMIGA?64:255; if (c.value!=DIV_NOTE_NULL) { chan[c.chan].sample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; } if (c.value!=DIV_NOTE_NULL) { chan[c.chan].baseFreq=NOTE_PERIODIC(c.value); @@ -263,7 +265,7 @@ int DivPlatformGA20::dispatch(DivCommand c) { chan[c.chan].freqChanged=true; break; case DIV_CMD_NOTE_PORTA: { - const int destFreq=NOTE_PERIODIC(c.value2); + const int destFreq=NOTE_PERIODIC(c.value2+chan[c.chan].sampleNoteDelta); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -286,7 +288,7 @@ int DivPlatformGA20::dispatch(DivCommand c) { break; } case DIV_CMD_LEGATO: { - chan[c.chan].baseFreq=NOTE_PERIODIC(c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val-12):(0))); + chan[c.chan].baseFreq=NOTE_PERIODIC(c.value+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val-12):(0))); chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; break; diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index 57bb640e6..f59cf1975 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -704,8 +704,12 @@ int DivPlatformGenesis::dispatch(DivCommand c) { } else if (chan[c.chan].furnaceDac) { chan[c.chan].dacMode=0; rWrite(0x2b,0<<7); + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; } else if (!chan[c.chan].dacMode) { rWrite(0x2b,0<<7); + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; } } if (c.chan>=5 && chan[c.chan].dacMode) { @@ -713,7 +717,12 @@ int DivPlatformGenesis::dispatch(DivCommand c) { if (ins->type==DIV_INS_AMIGA) { // Furnace mode if (c.value!=DIV_NOTE_NULL) { chan[c.chan].dacSample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; + } else if (chan[c.chan].sampleNote!=DIV_NOTE_NULL) { + chan[c.chan].dacSample=ins->amiga.getSample(chan[c.chan].sampleNote); + c.value=ins->amiga.getFreq(chan[c.chan].sampleNote); } if (chan[c.chan].dacSample<0 || chan[c.chan].dacSample>=parent->song.sampleLen) { chan[c.chan].dacSample=-1; @@ -752,6 +761,8 @@ int DivPlatformGenesis::dispatch(DivCommand c) { if (c.value!=DIV_NOTE_NULL) { chan[c.chan].note=c.value; } + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; chan[c.chan].dacSample=12*chan[c.chan].sampleBank+chan[c.chan].note%12; if (chan[c.chan].dacSample>=parent->song.sampleLen) { chan[c.chan].dacSample=-1; @@ -863,7 +874,7 @@ int DivPlatformGenesis::dispatch(DivCommand c) { } case DIV_CMD_NOTE_PORTA: { if (parent->song.linearPitch==2) { - int destFreq=NOTE_FREQUENCY(c.value2); + int destFreq=NOTE_FREQUENCY(c.value2+chan[c.chan].sampleNoteDelta); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -909,7 +920,7 @@ int DivPlatformGenesis::dispatch(DivCommand c) { break; } if (c.chan>=5 && chan[c.chan].furnaceDac && chan[c.chan].dacMode) { - int destFreq=parent->calcBaseFreq(1,1,c.value2,false); + int destFreq=parent->calcBaseFreq(1,1,c.value2+chan[c.chan].sampleNoteDelta,false); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value*16; @@ -963,7 +974,7 @@ int DivPlatformGenesis::dispatch(DivCommand c) { if (c.chan==csmChan) { chan[c.chan].baseFreq=NOTE_PERIODIC(c.value); } else if (c.chan>=5 && chan[c.chan].furnaceDac && chan[c.chan].dacMode) { - chan[c.chan].baseFreq=parent->calcBaseFreq(1,1,c.value,false); + chan[c.chan].baseFreq=parent->calcBaseFreq(1,1,c.value+chan[c.chan].sampleNoteDelta,false); } else { if (chan[c.chan].insChanged) { DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_FM); diff --git a/src/engine/platform/k007232.cpp b/src/engine/platform/k007232.cpp index eb2157e05..3f3ebc6d9 100644 --- a/src/engine/platform/k007232.cpp +++ b/src/engine/platform/k007232.cpp @@ -281,7 +281,9 @@ int DivPlatformK007232::dispatch(DivCommand c) { chan[c.chan].macroVolMul=ins->type==DIV_INS_AMIGA?64:15; if (c.value!=DIV_NOTE_NULL) { chan[c.chan].sample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; } if (c.value!=DIV_NOTE_NULL) { chan[c.chan].baseFreq=NOTE_PERIODIC(c.value); @@ -347,7 +349,7 @@ int DivPlatformK007232::dispatch(DivCommand c) { chan[c.chan].freqChanged=true; break; case DIV_CMD_NOTE_PORTA: { - const int destFreq=NOTE_PERIODIC(c.value2); + const int destFreq=NOTE_PERIODIC(c.value2+chan[c.chan].sampleNoteDelta); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -370,7 +372,7 @@ int DivPlatformK007232::dispatch(DivCommand c) { break; } case DIV_CMD_LEGATO: { - chan[c.chan].baseFreq=NOTE_PERIODIC(c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val-12):(0))); + chan[c.chan].baseFreq=NOTE_PERIODIC(c.value+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val-12):(0))); chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; break; diff --git a/src/engine/platform/k053260.cpp b/src/engine/platform/k053260.cpp index b084f3a23..68704c9ee 100644 --- a/src/engine/platform/k053260.cpp +++ b/src/engine/platform/k053260.cpp @@ -230,7 +230,9 @@ int DivPlatformK053260::dispatch(DivCommand c) { chan[c.chan].macroVolMul=ins->type==DIV_INS_AMIGA?64:127; if (c.value!=DIV_NOTE_NULL) { chan[c.chan].sample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; } if (c.value!=DIV_NOTE_NULL) { chan[c.chan].baseFreq=NOTE_PERIODIC(c.value); @@ -291,7 +293,7 @@ int DivPlatformK053260::dispatch(DivCommand c) { chan[c.chan].freqChanged=true; break; case DIV_CMD_NOTE_PORTA: { - int destFreq=NOTE_PERIODIC(c.value2); + int destFreq=NOTE_PERIODIC(c.value2+chan[c.chan].sampleNoteDelta); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -314,7 +316,7 @@ int DivPlatformK053260::dispatch(DivCommand c) { break; } case DIV_CMD_LEGATO: { - chan[c.chan].baseFreq=NOTE_PERIODIC(c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0))); + chan[c.chan].baseFreq=NOTE_PERIODIC(c.value+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0))); chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; break; diff --git a/src/engine/platform/lynx.cpp b/src/engine/platform/lynx.cpp index 68f3ac762..5d9100f8c 100644 --- a/src/engine/platform/lynx.cpp +++ b/src/engine/platform/lynx.cpp @@ -228,19 +228,28 @@ int DivPlatformLynx::dispatch(DivCommand c) { WRITE_CONTROL(c.chan,0x18); WRITE_BACKUP(c.chan,0); } else { + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; WRITE_FEEDBACK(c.chan,chan[c.chan].duty.feedback); WRITE_CONTROL(c.chan,(chan[c.chan].fd.clockDivider|0x18|chan[c.chan].duty.int_feedback7)); WRITE_BACKUP(c.chan,chan[c.chan].fd.backup); } } - if (c.value!=DIV_NOTE_NULL) { - if (chan[c.chan].pcm) { + if (chan[c.chan].pcm) { + if (c.value!=DIV_NOTE_NULL) { chan[c.chan].sample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; chan[c.chan].sampleBaseFreq=NOTE_FREQUENCY(c.value); - chan[c.chan].sampleAccum=0; - chan[c.chan].samplePos=0; + } else if (chan[c.chan].sampleNote!=DIV_NOTE_NULL) { + chan[c.chan].sample=ins->amiga.getSample(chan[c.chan].sampleNote); + c.value=ins->amiga.getFreq(chan[c.chan].sampleNote); } + chan[c.chan].sampleAccum=0; + chan[c.chan].samplePos=0; + } + if (c.value!=DIV_NOTE_NULL) { chan[c.chan].baseFreq=NOTE_PERIODIC(c.value); chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; @@ -301,7 +310,7 @@ int DivPlatformLynx::dispatch(DivCommand c) { chan[c.chan].freqChanged=true; break; case DIV_CMD_NOTE_PORTA: { - int destFreq=NOTE_PERIODIC(c.value2); + int destFreq=NOTE_PERIODIC(c.value2+chan[c.chan].sampleNoteDelta); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -327,7 +336,7 @@ int DivPlatformLynx::dispatch(DivCommand c) { break; } case DIV_CMD_LEGATO: { - int whatAMess=c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0)); + int whatAMess=c.value+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0)); chan[c.chan].baseFreq=NOTE_PERIODIC(whatAMess); if (chan[c.chan].pcm) { chan[c.chan].sampleBaseFreq=NOTE_FREQUENCY(whatAMess); diff --git a/src/engine/platform/mmc5.cpp b/src/engine/platform/mmc5.cpp index 899bf7d8a..49a19e8c8 100644 --- a/src/engine/platform/mmc5.cpp +++ b/src/engine/platform/mmc5.cpp @@ -178,7 +178,12 @@ int DivPlatformMMC5::dispatch(DivCommand c) { if (ins->type==DIV_INS_AMIGA) { if (c.value!=DIV_NOTE_NULL) { dacSample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; + } else if (chan[c.chan].sampleNote!=DIV_NOTE_NULL) { + dacSample=ins->amiga.getSample(chan[c.chan].sampleNote); + c.value=ins->amiga.getFreq(chan[c.chan].sampleNote); } if (dacSample<0 || dacSample>=parent->song.sampleLen) { dacSample=-1; @@ -189,8 +194,8 @@ int DivPlatformMMC5::dispatch(DivCommand c) { } dacPos=0; dacPeriod=0; - chan[c.chan].baseFreq=parent->calcBaseFreq(1,1,c.value,false); if (c.value!=DIV_NOTE_NULL) { + chan[c.chan].baseFreq=parent->calcBaseFreq(1,1,c.value,false); chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; } @@ -270,7 +275,7 @@ int DivPlatformMMC5::dispatch(DivCommand c) { chan[c.chan].freqChanged=true; break; case DIV_CMD_NOTE_PORTA: { - int destFreq=(c.chan==2)?(parent->calcBaseFreq(1,1,c.value2,false)):(NOTE_PERIODIC(c.value2)); + int destFreq=(c.chan==2)?(parent->calcBaseFreq(1,1,c.value2+chan[c.chan].sampleNoteDelta,false)):(NOTE_PERIODIC(c.value2)); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -304,7 +309,7 @@ int DivPlatformMMC5::dispatch(DivCommand c) { break; case DIV_CMD_LEGATO: if (c.chan==2) { - chan[c.chan].baseFreq=parent->calcBaseFreq(1,1,c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0)),false); + chan[c.chan].baseFreq=parent->calcBaseFreq(1,1,c.value+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0)),false); } else { chan[c.chan].baseFreq=NOTE_PERIODIC(c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0))); } diff --git a/src/engine/platform/nes.cpp b/src/engine/platform/nes.cpp index 6abdf1dc9..526944a3d 100644 --- a/src/engine/platform/nes.cpp +++ b/src/engine/platform/nes.cpp @@ -407,7 +407,14 @@ int DivPlatformNES::dispatch(DivCommand c) { if (c.value!=DIV_NOTE_NULL) { dacSample=ins->amiga.getSample(c.value); if (ins->type==DIV_INS_AMIGA) { + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; + } + } else if (chan[c.chan].sampleNote!=DIV_NOTE_NULL) { + dacSample=ins->amiga.getSample(chan[c.chan].sampleNote); + if (ins->type==DIV_INS_AMIGA) { + c.value=ins->amiga.getFreq(chan[c.chan].sampleNote); } } if (dacSample<0 || dacSample>=parent->song.sampleLen) { @@ -535,7 +542,7 @@ int DivPlatformNES::dispatch(DivCommand c) { chan[c.chan].freqChanged=true; break; case DIV_CMD_NOTE_PORTA: { - int destFreq=(c.chan==4)?(parent->calcBaseFreq(1,1,c.value2,false)):(NOTE_PERIODIC(c.value2)); + int destFreq=(c.chan==4)?(parent->calcBaseFreq(1,1,c.value2+chan[c.chan].sampleNoteDelta,false)):(NOTE_PERIODIC(c.value2)); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -636,7 +643,7 @@ int DivPlatformNES::dispatch(DivCommand c) { case DIV_CMD_LEGATO: if (c.chan==3) break; if (c.chan==4) { - chan[c.chan].baseFreq=parent->calcBaseFreq(1,1,c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0)),false); + chan[c.chan].baseFreq=parent->calcBaseFreq(1,1,c.value+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0)),false); } else { chan[c.chan].baseFreq=NOTE_PERIODIC(c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0))); } diff --git a/src/engine/platform/opl.cpp b/src/engine/platform/opl.cpp index fbad13218..d62161827 100644 --- a/src/engine/platform/opl.cpp +++ b/src/engine/platform/opl.cpp @@ -515,6 +515,18 @@ static const int cycleMapDrums[18]={ 0, 1, 2, 3, 4, 5, 3, 4, 5, }; +static const int cycleMap3[36]={ + 14, 12, 13, 14, 0, 2, 4, 0, 2, + 4, 1, 3, 5, 1, 3, 5, 15, 16, + 17, 15, 16, 17, 6, 8, 10, 6, 8, 10, 7, 9, 11, 7, 9, 11, 12, 13 +}; + +static const int cycleMap3Drums[36]={ + 14, 12, 13, 14, 0, 2, 4, 0, 2, + 4, 1, 3, 5, 1, 3, 5, 15, 19, + 17, 15, 16, 18, 6, 8, 10, 6, 8, 10, 7, 9, 11, 7, 9, 11, 12, 13 +}; + void DivPlatformOPL::acquire_nukedLLE2(short** buf, size_t len) { int chOut[11]; thread_local ymfm::ymfm_output<2> aOut; @@ -662,10 +674,11 @@ void DivPlatformOPL::acquire_nukedLLE2(short** buf, size_t len) { void DivPlatformOPL::acquire_nukedLLE3(short** buf, size_t len) { int chOut[20]; + int ch=0; for (size_t h=0; h0) ch|=1; + + if (ch>=12 || (ch&1) || !chan[ch&(~1)].fourOp) { + if (fm_lle3.op_value_debug&0x1000) { + chOut[ch]+=(fm_lle3.op_value_debug|0xfffff000)<<1; + } else { + chOut[ch]+=(fm_lle3.op_value_debug)<<1; + } + } curCycle++; - }*/ + } if (fm_lle3.o_sy && !lastSY) { dacVal>>=1; @@ -746,11 +773,11 @@ void DivPlatformOPL::acquire_nukedLLE3(short** buf, size_t len) { } for (int i=0; i<20; i++) { - if (i>=15 && properDrums) { + /*if (i>=15 && properDrums) { chOut[i]<<=1; } else { chOut[i]<<=2; - } + }*/ if (chOut[i]<-32768) chOut[i]=-32768; if (chOut[i]>32767) chOut[i]=32767; oscBuf[i]->data[oscBuf[i]->needle++]=chOut[i]; diff --git a/src/engine/platform/pce.cpp b/src/engine/platform/pce.cpp index d8be4dd21..211a73caf 100644 --- a/src/engine/platform/pce.cpp +++ b/src/engine/platform/pce.cpp @@ -278,6 +278,8 @@ int DivPlatformPCE::dispatch(DivCommand c) { chan[c.chan].pcm=true; } else if (chan[c.chan].furnaceDac) { chan[c.chan].pcm=false; + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; } if (chan[c.chan].pcm) { if (ins->type==DIV_INS_AMIGA || ins->amiga.useSample) { @@ -285,7 +287,12 @@ int DivPlatformPCE::dispatch(DivCommand c) { if (skipRegisterWrites) break; if (c.value!=DIV_NOTE_NULL) { chan[c.chan].dacSample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; + } else if (chan[c.chan].sampleNote!=DIV_NOTE_NULL) { + chan[c.chan].dacSample=ins->amiga.getSample(chan[c.chan].sampleNote); + c.value=ins->amiga.getFreq(chan[c.chan].sampleNote); } if (chan[c.chan].dacSample<0 || chan[c.chan].dacSample>=parent->song.sampleLen) { chan[c.chan].dacSample=-1; @@ -312,6 +319,8 @@ int DivPlatformPCE::dispatch(DivCommand c) { //chan[c.chan].keyOn=true; } else { chan[c.chan].furnaceDac=false; + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; if (skipRegisterWrites) break; if (c.value!=DIV_NOTE_NULL) { chan[c.chan].note=c.value; @@ -334,6 +343,8 @@ int DivPlatformPCE::dispatch(DivCommand c) { } break; } + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; if (c.value!=DIV_NOTE_NULL) { chan[c.chan].baseFreq=NOTE_PERIODIC(c.value); chan[c.chan].freqChanged=true; @@ -413,7 +424,7 @@ int DivPlatformPCE::dispatch(DivCommand c) { updateLFO=true; break; case DIV_CMD_NOTE_PORTA: { - int destFreq=NOTE_PERIODIC(c.value2); + int destFreq=NOTE_PERIODIC(c.value2+chan[c.chan].sampleNoteDelta); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -454,7 +465,7 @@ int DivPlatformPCE::dispatch(DivCommand c) { break; } case DIV_CMD_LEGATO: - chan[c.chan].baseFreq=NOTE_PERIODIC(c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0))); + chan[c.chan].baseFreq=NOTE_PERIODIC(c.value+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0))); chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; break; @@ -513,6 +524,13 @@ unsigned short DivPlatformPCE::getPan(int ch) { return ((chan[ch].pan&0xf0)<<4)|(chan[ch].pan&15); } +DivChannelPair DivPlatformPCE::getPaired(int ch) { + if (ch==1 && lfoMode>0) { + return DivChannelPair("mod",0); + } + return DivChannelPair(); +} + DivChannelModeHints DivPlatformPCE::getModeHints(int ch) { DivChannelModeHints ret; if (ch<4) return ret; diff --git a/src/engine/platform/pce.h b/src/engine/platform/pce.h index ceba204be..4d434e9cc 100644 --- a/src/engine/platform/pce.h +++ b/src/engine/platform/pce.h @@ -83,6 +83,7 @@ class DivPlatformPCE: public DivDispatch { void* getChanState(int chan); DivMacroInt* getChanMacroInt(int ch); unsigned short getPan(int chan); + DivChannelPair getPaired(int chan); DivChannelModeHints getModeHints(int chan); DivSamplePos getSamplePos(int ch); DivDispatchOscBuffer* getOscBuffer(int chan); diff --git a/src/engine/platform/pcmdac.cpp b/src/engine/platform/pcmdac.cpp index eebcd3860..17776acaa 100644 --- a/src/engine/platform/pcmdac.cpp +++ b/src/engine/platform/pcmdac.cpp @@ -314,6 +314,8 @@ int DivPlatformPCMDAC::dispatch(DivCommand c) { case DIV_CMD_NOTE_ON: { DivInstrument* ins=parent->getIns(chan[0].ins,DIV_INS_AMIGA); if (ins->amiga.useWave) { + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; chan[0].useWave=true; chan[0].audLen=ins->amiga.waveLen+1; if (chan[0].insChanged) { @@ -326,7 +328,12 @@ int DivPlatformPCMDAC::dispatch(DivCommand c) { } else { if (c.value!=DIV_NOTE_NULL) { chan[0].sample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; + } else if (chan[c.chan].sampleNote!=DIV_NOTE_NULL) { + chan[c.chan].sample=ins->amiga.getSample(chan[c.chan].sampleNote); + c.value=ins->amiga.getFreq(chan[c.chan].sampleNote); } chan[0].useWave=false; } @@ -335,6 +342,8 @@ int DivPlatformPCMDAC::dispatch(DivCommand c) { } if (chan[0].useWave || chan[0].sample<0 || chan[0].sample>=parent->song.sampleLen) { chan[0].sample=-1; + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; } if (chan[0].setPos) { chan[0].setPos=false; @@ -402,9 +411,7 @@ int DivPlatformPCMDAC::dispatch(DivCommand c) { chan[0].ws.changeWave1(chan[0].wave); break; case DIV_CMD_NOTE_PORTA: { - DivInstrument* ins=parent->getIns(chan[0].ins,DIV_INS_AMIGA); - chan[0].sample=ins->amiga.getSample(c.value2); - int destFreq=round(NOTE_FREQUENCY(c.value2)); + int destFreq=round(NOTE_FREQUENCY(c.value2+chan[c.chan].sampleNoteDelta)); bool return2=false; if (destFreq>chan[0].baseFreq) { chan[0].baseFreq+=c.value; @@ -427,7 +434,7 @@ int DivPlatformPCMDAC::dispatch(DivCommand c) { break; } case DIV_CMD_LEGATO: { - chan[0].baseFreq=round(NOTE_FREQUENCY(c.value+((HACKY_LEGATO_MESS)?(chan[0].std.arp.val):(0)))); + chan[0].baseFreq=round(NOTE_FREQUENCY(c.value+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[0].std.arp.val):(0)))); chan[0].freqChanged=true; chan[0].note=c.value; break; diff --git a/src/engine/platform/qsound.cpp b/src/engine/platform/qsound.cpp index 4709fb668..152afb932 100644 --- a/src/engine/platform/qsound.cpp +++ b/src/engine/platform/qsound.cpp @@ -451,7 +451,9 @@ int DivPlatformQSound::dispatch(DivCommand c) { chan[c.chan].isNewQSound=(ins->type==DIV_INS_QSOUND); if (c.value!=DIV_NOTE_NULL) { chan[c.chan].sample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; } if (c.value!=DIV_NOTE_NULL) { chan[c.chan].baseFreq=QS_NOTE_FREQUENCY(c.value); @@ -543,7 +545,7 @@ int DivPlatformQSound::dispatch(DivCommand c) { chan[c.chan].freqChanged=true; break; case DIV_CMD_NOTE_PORTA: { - int destFreq=QS_NOTE_FREQUENCY(c.value2); + int destFreq=QS_NOTE_FREQUENCY(c.value2+chan[c.chan].sampleNoteDelta); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -566,7 +568,7 @@ int DivPlatformQSound::dispatch(DivCommand c) { break; } case DIV_CMD_LEGATO: { - chan[c.chan].baseFreq=QS_NOTE_FREQUENCY(c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val-12):(0))); + chan[c.chan].baseFreq=QS_NOTE_FREQUENCY(c.value+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val-12):(0))); chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; break; diff --git a/src/engine/platform/rf5c68.cpp b/src/engine/platform/rf5c68.cpp index 06f9ab53e..148df4c28 100644 --- a/src/engine/platform/rf5c68.cpp +++ b/src/engine/platform/rf5c68.cpp @@ -184,7 +184,9 @@ int DivPlatformRF5C68::dispatch(DivCommand c) { chan[c.chan].macroVolMul=ins->type==DIV_INS_AMIGA?64:255; if (c.value!=DIV_NOTE_NULL) { chan[c.chan].sample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; } if (c.value!=DIV_NOTE_NULL) { chan[c.chan].baseFreq=NOTE_FREQUENCY(c.value); @@ -243,7 +245,7 @@ int DivPlatformRF5C68::dispatch(DivCommand c) { chan[c.chan].freqChanged=true; break; case DIV_CMD_NOTE_PORTA: { - int destFreq=NOTE_FREQUENCY(c.value2); + int destFreq=NOTE_FREQUENCY(c.value2+chan[c.chan].sampleNoteDelta); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -266,7 +268,7 @@ int DivPlatformRF5C68::dispatch(DivCommand c) { break; } case DIV_CMD_LEGATO: { - chan[c.chan].baseFreq=NOTE_FREQUENCY(c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val-12):(0))); + chan[c.chan].baseFreq=NOTE_FREQUENCY(c.value+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val-12):(0))); chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; break; diff --git a/src/engine/platform/segapcm.cpp b/src/engine/platform/segapcm.cpp index 5c5170186..19ec2bbb7 100644 --- a/src/engine/platform/segapcm.cpp +++ b/src/engine/platform/segapcm.cpp @@ -189,7 +189,9 @@ int DivPlatformSegaPCM::dispatch(DivCommand c) { chan[c.chan].isNewSegaPCM=(ins->type==DIV_INS_SEGAPCM); if (c.value!=DIV_NOTE_NULL) { chan[c.chan].pcm.sample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; } if (chan[c.chan].pcm.sample<0 || chan[c.chan].pcm.sample>=parent->song.sampleLen) { chan[c.chan].pcm.sample=-1; @@ -297,7 +299,7 @@ int DivPlatformSegaPCM::dispatch(DivCommand c) { break; } case DIV_CMD_NOTE_PORTA: { - int destFreq=(c.value2<<7); + int destFreq=((c.value2+chan[c.chan].sampleNoteDelta)<<7); int newFreq; int mul=(oldSlides || parent->song.linearPitch!=2)?8:1; bool return2=false; @@ -323,7 +325,7 @@ int DivPlatformSegaPCM::dispatch(DivCommand c) { break; } case DIV_CMD_LEGATO: { - chan[c.chan].baseFreq=(c.value<<7); + chan[c.chan].baseFreq=((c.value+chan[c.chan].sampleNoteDelta)<<7); chan[c.chan].freqChanged=true; break; } diff --git a/src/engine/platform/snes.cpp b/src/engine/platform/snes.cpp index 8cc205a16..cf1143c7f 100644 --- a/src/engine/platform/snes.cpp +++ b/src/engine/platform/snes.cpp @@ -333,6 +333,8 @@ int DivPlatformSNES::dispatch(DivCommand c) { DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_SNES); if (ins->amiga.useWave) { chan[c.chan].useWave=true; + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; chan[c.chan].wtLen=ins->amiga.waveLen+1; if (chan[c.chan].insChanged) { if (chan[c.chan].wave<0) { @@ -345,7 +347,9 @@ int DivPlatformSNES::dispatch(DivCommand c) { } else { if (c.value!=DIV_NOTE_NULL) { chan[c.chan].sample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; } chan[c.chan].useWave=false; } @@ -424,7 +428,7 @@ int DivPlatformSNES::dispatch(DivCommand c) { chan[c.chan].ws.changeWave1(chan[c.chan].wave); break; case DIV_CMD_NOTE_PORTA: { - int destFreq=round(NOTE_FREQUENCY(c.value2)); + int destFreq=round(NOTE_FREQUENCY(c.value2+chan[c.chan].sampleNoteDelta)); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -447,7 +451,7 @@ int DivPlatformSNES::dispatch(DivCommand c) { break; } case DIV_CMD_LEGATO: { - chan[c.chan].baseFreq=round(NOTE_FREQUENCY(c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0)))); + chan[c.chan].baseFreq=round(NOTE_FREQUENCY(c.value+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0)))); chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; break; diff --git a/src/engine/platform/su.cpp b/src/engine/platform/su.cpp index 5ac95d3cd..8a80ee7c2 100644 --- a/src/engine/platform/su.cpp +++ b/src/engine/platform/su.cpp @@ -282,8 +282,13 @@ int DivPlatformSoundUnit::dispatch(DivCommand c) { if (chan[c.chan].pcm) { if (c.value!=DIV_NOTE_NULL) { chan[c.chan].sample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; } + } else { + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; } if (c.value!=DIV_NOTE_NULL) { chan[c.chan].baseFreq=NOTE_SU(c.chan,c.value); @@ -450,7 +455,7 @@ int DivPlatformSoundUnit::dispatch(DivCommand c) { } break; case DIV_CMD_NOTE_PORTA: { - int destFreq=NOTE_SU(c.chan,c.value2); + int destFreq=NOTE_SU(c.chan,c.value2+chan[c.chan].sampleNoteDelta); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value*((parent->song.linearPitch==2)?1:(1+(chan[c.chan].baseFreq>>9))); @@ -482,7 +487,7 @@ int DivPlatformSoundUnit::dispatch(DivCommand c) { chan[c.chan].keyOn=true; break; case DIV_CMD_LEGATO: - chan[c.chan].baseFreq=NOTE_SU(c.chan,c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0))); + chan[c.chan].baseFreq=NOTE_SU(c.chan,c.value+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0))); chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; break; diff --git a/src/engine/platform/swan.cpp b/src/engine/platform/swan.cpp index 484151595..51abfef28 100644 --- a/src/engine/platform/swan.cpp +++ b/src/engine/platform/swan.cpp @@ -257,6 +257,8 @@ int DivPlatformSwan::dispatch(DivCommand c) { pcm=true; } else if (furnaceDac) { pcm=false; + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; } if (pcm) { if (skipRegisterWrites) break; @@ -265,7 +267,12 @@ int DivPlatformSwan::dispatch(DivCommand c) { if (ins->type==DIV_INS_AMIGA || ins->amiga.useSample) { if (c.value!=DIV_NOTE_NULL) { dacSample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; + } else if (chan[c.chan].sampleNote!=DIV_NOTE_NULL) { + dacSample=ins->amiga.getSample(chan[c.chan].sampleNote); + c.value=ins->amiga.getFreq(chan[c.chan].sampleNote); } if (dacSample<0 || dacSample>=parent->song.sampleLen) { dacSample=-1; @@ -332,6 +339,8 @@ int DivPlatformSwan::dispatch(DivCommand c) { dacSample=-1; if (dumpWrites) postWrite(0xffff0002,0); pcm=false; + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; } chan[c.chan].active=false; chan[c.chan].keyOff=true; @@ -383,7 +392,7 @@ int DivPlatformSwan::dispatch(DivCommand c) { } break; case DIV_CMD_NOTE_PORTA: { - int destFreq=NOTE_PERIODIC(c.value2); + int destFreq=NOTE_PERIODIC(c.value2+chan[c.chan].sampleNoteDelta); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -412,7 +421,13 @@ int DivPlatformSwan::dispatch(DivCommand c) { } break; case DIV_CMD_SAMPLE_MODE: - if (c.chan==1) pcm=c.value; + if (c.chan==1) { + pcm=c.value; + if (!pcm) { + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; + } + } break; case DIV_CMD_SAMPLE_BANK: sampleBank=c.value; @@ -426,7 +441,7 @@ int DivPlatformSwan::dispatch(DivCommand c) { break; } case DIV_CMD_LEGATO: - chan[c.chan].baseFreq=NOTE_PERIODIC(c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0))); + chan[c.chan].baseFreq=NOTE_PERIODIC(c.value+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0))); chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; break; diff --git a/src/engine/platform/vera.cpp b/src/engine/platform/vera.cpp index 7c48dc108..fcd13b8ed 100644 --- a/src/engine/platform/vera.cpp +++ b/src/engine/platform/vera.cpp @@ -299,10 +299,15 @@ int DivPlatformVERA::dispatch(DivCommand c) { if (c.chan<16) { rWriteLo(c.chan,2,chan[c.chan].vol); } else { + DivInstrument* ins=parent->getIns(chan[16].ins,DIV_INS_VERA); if (c.value!=DIV_NOTE_NULL) { - DivInstrument* ins=parent->getIns(chan[16].ins,DIV_INS_VERA); chan[16].pcm.sample=ins->amiga.getSample(c.value); + chan[16].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[16].sampleNoteDelta=c.value-chan[c.chan].sampleNote; + } else if (chan[c.chan].sampleNote!=DIV_NOTE_NULL) { + chan[16].pcm.sample=ins->amiga.getSample(chan[c.chan].sampleNote); + c.value=ins->amiga.getFreq(chan[c.chan].sampleNote); } if (chan[16].pcm.sample<0 || chan[16].pcm.sample>=parent->song.sampleLen) { chan[16].pcm.sample=-1; @@ -371,7 +376,7 @@ int DivPlatformVERA::dispatch(DivCommand c) { chan[c.chan].freqChanged=true; break; case DIV_CMD_NOTE_PORTA: { - int destFreq=calcNoteFreq(c.chan,c.value2); + int destFreq=calcNoteFreq(c.chan,c.value2+chan[c.chan].sampleNoteDelta); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -394,7 +399,7 @@ int DivPlatformVERA::dispatch(DivCommand c) { break; } case DIV_CMD_LEGATO: - chan[c.chan].baseFreq=calcNoteFreq(c.chan,c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0))); + chan[c.chan].baseFreq=calcNoteFreq(c.chan,c.value+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0))); chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; break; diff --git a/src/engine/platform/vrc6.cpp b/src/engine/platform/vrc6.cpp index f5f7371d6..c87a747db 100644 --- a/src/engine/platform/vrc6.cpp +++ b/src/engine/platform/vrc6.cpp @@ -236,13 +236,20 @@ int DivPlatformVRC6::dispatch(DivCommand c) { chan[c.chan].pcm=true; } else if (chan[c.chan].furnaceDac) { chan[c.chan].pcm=false; + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; } if (chan[c.chan].pcm) { if (skipRegisterWrites) break; if (ins->type==DIV_INS_AMIGA || ins->amiga.useSample) { if (c.value!=DIV_NOTE_NULL) { chan[c.chan].dacSample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; + } else if (chan[c.chan].sampleNote!=DIV_NOTE_NULL) { + chan[c.chan].dacSample=ins->amiga.getSample(chan[c.chan].sampleNote); + c.value=ins->amiga.getFreq(chan[c.chan].sampleNote); } if (chan[c.chan].dacSample<0 || chan[c.chan].dacSample>=parent->song.sampleLen) { chan[c.chan].dacSample=-1; @@ -270,6 +277,8 @@ int DivPlatformVRC6::dispatch(DivCommand c) { //chan[c.chan].keyOn=true; chan[c.chan].furnaceDac=true; } else { + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; if (c.value!=DIV_NOTE_NULL) { chan[c.chan].note=c.value; } @@ -314,6 +323,8 @@ int DivPlatformVRC6::dispatch(DivCommand c) { chan[c.chan].dacSample=-1; if (dumpWrites) addWrite(0xffff0002+(c.chan<<8),0); chan[c.chan].pcm=false; + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; chan[c.chan].active=false; chan[c.chan].keyOff=true; chan[c.chan].macroInit(NULL); @@ -352,7 +363,7 @@ int DivPlatformVRC6::dispatch(DivCommand c) { chan[c.chan].freqChanged=true; break; case DIV_CMD_NOTE_PORTA: { - int destFreq=NOTE_PERIODIC(c.value2); + int destFreq=NOTE_PERIODIC(c.value2+chan[c.chan].sampleNoteDelta); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -382,6 +393,10 @@ int DivPlatformVRC6::dispatch(DivCommand c) { case DIV_CMD_SAMPLE_MODE: if (c.chan!=2) { // pulse chan[c.chan].pcm=c.value; + if (!chan[c.chan].pcm) { + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; + } } break; case DIV_CMD_SAMPLE_BANK: @@ -391,7 +406,7 @@ int DivPlatformVRC6::dispatch(DivCommand c) { } break; case DIV_CMD_LEGATO: - chan[c.chan].baseFreq=NOTE_PERIODIC(c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0))); + chan[c.chan].baseFreq=NOTE_PERIODIC(c.value+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0))); chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; break; diff --git a/src/engine/platform/x1_010.cpp b/src/engine/platform/x1_010.cpp index 9600cc09b..77d34b668 100644 --- a/src/engine/platform/x1_010.cpp +++ b/src/engine/platform/x1_010.cpp @@ -536,6 +536,8 @@ int DivPlatformX1_010::dispatch(DivCommand c) { chan[c.chan].furnacePCM=true; } else { chan[c.chan].furnacePCM=false; + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; } if (skipRegisterWrites) break; if (chan[c.chan].furnacePCM) { @@ -543,7 +545,9 @@ int DivPlatformX1_010::dispatch(DivCommand c) { chan[c.chan].macroInit(ins); if (c.value!=DIV_NOTE_NULL) { chan[c.chan].sample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; } if (chan[c.chan].sample>=0 && chan[c.chan].samplesong.sampleLen) { DivSample* s=parent->getSample(chan[c.chan].sample); @@ -608,6 +612,8 @@ int DivPlatformX1_010::dispatch(DivCommand c) { } } else if (c.value!=DIV_NOTE_NULL) { chan[c.chan].note=c.value; + chan[c.chan].sampleNote=DIV_NOTE_NULL; + chan[c.chan].sampleNoteDelta=0; chan[c.chan].baseFreq=NoteX1_010(c.chan,chan[c.chan].note); chan[c.chan].fixedFreq=0; chan[c.chan].freqChanged=true; @@ -684,7 +690,7 @@ int DivPlatformX1_010::dispatch(DivCommand c) { } break; case DIV_CMD_NOTE_PORTA: { - int destFreq=NoteX1_010(c.chan,c.value2); + int destFreq=NoteX1_010(c.chan,c.value2+chan[c.chan].sampleNoteDelta); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -732,7 +738,7 @@ int DivPlatformX1_010::dispatch(DivCommand c) { } case DIV_CMD_LEGATO: chan[c.chan].note=c.value; - chan[c.chan].baseFreq=NoteX1_010(c.chan,chan[c.chan].note+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0))); + chan[c.chan].baseFreq=NoteX1_010(c.chan,chan[c.chan].note+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0))); chan[c.chan].freqChanged=true; break; case DIV_CMD_PRE_PORTA: diff --git a/src/engine/platform/ym2608.cpp b/src/engine/platform/ym2608.cpp index 4d3986b2d..0a6168cd2 100644 --- a/src/engine/platform/ym2608.cpp +++ b/src/engine/platform/ym2608.cpp @@ -919,7 +919,9 @@ int DivPlatformYM2608::dispatch(DivCommand c) { } if (c.value!=DIV_NOTE_NULL) { chan[c.chan].sample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; } if (chan[c.chan].sample>=0 && chan[c.chan].samplesong.sampleLen) { DivSample* s=parent->getSample(chan[c.chan].sample); @@ -1109,7 +1111,7 @@ int DivPlatformYM2608::dispatch(DivCommand c) { } case DIV_CMD_NOTE_PORTA: { if (c.chan>5 || parent->song.linearPitch==2) { // PSG, ADPCM-B - int destFreq=NOTE_OPNB(c.chan,c.value2); + int destFreq=NOTE_OPNB(c.chan,c.value2+chan[c.chan].sampleNoteDelta); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -1150,7 +1152,7 @@ int DivPlatformYM2608::dispatch(DivCommand c) { chan[c.chan].insChanged=false; } } - chan[c.chan].baseFreq=NOTE_OPNB(c.chan,c.value); + chan[c.chan].baseFreq=NOTE_OPNB(c.chan,c.value+chan[c.chan].sampleNoteDelta); chan[c.chan].freqChanged=true; break; } diff --git a/src/engine/platform/ym2610.cpp b/src/engine/platform/ym2610.cpp index f30ce9082..6753744e2 100644 --- a/src/engine/platform/ym2610.cpp +++ b/src/engine/platform/ym2610.cpp @@ -850,7 +850,9 @@ int DivPlatformYM2610::dispatch(DivCommand c) { } if (c.value!=DIV_NOTE_NULL) { chan[c.chan].sample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; } if (chan[c.chan].sample>=0 && chan[c.chan].samplesong.sampleLen) { DivSample* s=parent->getSample(chan[c.chan].sample); @@ -1081,7 +1083,7 @@ int DivPlatformYM2610::dispatch(DivCommand c) { } case DIV_CMD_NOTE_PORTA: { if (c.chan>=psgChanOffs || parent->song.linearPitch==2) { // PSG, ADPCM-B - int destFreq=NOTE_OPNB(c.chan,c.value2); + int destFreq=NOTE_OPNB(c.chan,c.value2+chan[c.chan].sampleNoteDelta); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -1122,7 +1124,7 @@ int DivPlatformYM2610::dispatch(DivCommand c) { chan[c.chan].insChanged=false; } } - chan[c.chan].baseFreq=NOTE_OPNB(c.chan,c.value); + chan[c.chan].baseFreq=NOTE_OPNB(c.chan,c.value+chan[c.chan].sampleNoteDelta); chan[c.chan].freqChanged=true; break; } diff --git a/src/engine/platform/ym2610b.cpp b/src/engine/platform/ym2610b.cpp index e588bea94..e01077d56 100644 --- a/src/engine/platform/ym2610b.cpp +++ b/src/engine/platform/ym2610b.cpp @@ -917,7 +917,9 @@ int DivPlatformYM2610B::dispatch(DivCommand c) { } if (c.value!=DIV_NOTE_NULL) { chan[c.chan].sample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; } if (chan[c.chan].sample>=0 && chan[c.chan].samplesong.sampleLen) { DivSample* s=parent->getSample(chan[c.chan].sample); @@ -1148,7 +1150,7 @@ int DivPlatformYM2610B::dispatch(DivCommand c) { } case DIV_CMD_NOTE_PORTA: { if (c.chan>=psgChanOffs || parent->song.linearPitch==2) { // PSG, ADPCM-B - int destFreq=NOTE_OPNB(c.chan,c.value2); + int destFreq=NOTE_OPNB(c.chan,c.value2+chan[c.chan].sampleNoteDelta); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -1189,7 +1191,7 @@ int DivPlatformYM2610B::dispatch(DivCommand c) { chan[c.chan].insChanged=false; } } - chan[c.chan].baseFreq=NOTE_OPNB(c.chan,c.value); + chan[c.chan].baseFreq=NOTE_OPNB(c.chan,c.value+chan[c.chan].sampleNoteDelta); chan[c.chan].freqChanged=true; break; } diff --git a/src/engine/platform/ymz280b.cpp b/src/engine/platform/ymz280b.cpp index 395d1524e..878ed0f0d 100644 --- a/src/engine/platform/ymz280b.cpp +++ b/src/engine/platform/ymz280b.cpp @@ -213,7 +213,9 @@ int DivPlatformYMZ280B::dispatch(DivCommand c) { chan[c.chan].macroVolMul=ins->type==DIV_INS_AMIGA?64:255; if (c.value!=DIV_NOTE_NULL) { chan[c.chan].sample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; } if (c.value!=DIV_NOTE_NULL) { chan[c.chan].baseFreq=NOTE_FREQUENCY(c.value); @@ -272,7 +274,7 @@ int DivPlatformYMZ280B::dispatch(DivCommand c) { chan[c.chan].freqChanged=true; break; case DIV_CMD_NOTE_PORTA: { - int destFreq=NOTE_FREQUENCY(c.value2); + int destFreq=NOTE_FREQUENCY(c.value2+chan[c.chan].sampleNoteDelta); bool return2=false; int multiplier=(parent->song.linearPitch==2)?1:256; if (destFreq>chan[c.chan].baseFreq) { @@ -296,7 +298,7 @@ int DivPlatformYMZ280B::dispatch(DivCommand c) { break; } case DIV_CMD_LEGATO: { - chan[c.chan].baseFreq=NOTE_FREQUENCY(c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val-12):(0))); + chan[c.chan].baseFreq=NOTE_FREQUENCY(c.value+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val-12):(0))); chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; break; diff --git a/src/engine/platform/zxbeeperquadtone.cpp b/src/engine/platform/zxbeeperquadtone.cpp index bc3fc884d..66e1ee007 100644 --- a/src/engine/platform/zxbeeperquadtone.cpp +++ b/src/engine/platform/zxbeeperquadtone.cpp @@ -30,13 +30,14 @@ const char** DivPlatformZXBeeperQuadTone::getRegisterSheet() { } void DivPlatformZXBeeperQuadTone::acquire(short** buf, size_t len) { - bool o=false; for (size_t h=0; h=0 && curSamplesong.sampleLen && !isMuted[4]) { + bool sampleActive=false; + if (curSample>=0 && curSamplesong.sampleLen) { + sampleActive=!isMuted[4]; while (curSamplePeriod>=chan[4].freq) { DivSample* s=parent->getSample(curSample); if (s->samples>0) { - if (!isMuted[4]) o=(s->data8[curSamplePos++]>0); + chan[4].out=(s->data8[curSamplePos++]>0); if (curSamplePos>=s->samples) curSample=-1; // (theoretical) 32KiB limit if (curSamplePos>=32768*8) curSample=-1; @@ -46,46 +47,47 @@ void DivPlatformZXBeeperQuadTone::acquire(short** buf, size_t len) { curSamplePeriod-=chan[4].freq; } curSamplePeriod+=40; - if ((outputClock&3)==0) { + } + if (sampleActive) { + buf[0][h]=chan[4].out?32767:0; + if (outputClock==0) { oscBuf[0]->data[oscBuf[0]->needle++]=0; oscBuf[1]->data[oscBuf[1]->needle++]=0; oscBuf[2]->data[oscBuf[2]->needle++]=0; oscBuf[3]->data[oscBuf[3]->needle++]=0; - oscBuf[4]->data[oscBuf[4]->needle++]=o?32767:0; } + oscBuf[4]->data[oscBuf[4]->needle++]=buf[0][h]; } else { int ch=outputClock/2; int b=ch*4; + bool o=false; if ((outputClock&1)==0) { + short oscOut; chan[ch].sPosition+=(regPool[1+b]<<8)|regPool[0+b]; chan[ch].out=regPool[3+b]+((((chan[ch].sPosition>>8)&0xff)data[oscBuf[4]->needle++]=0; - } - o=chan[ch].out&0x10; - oscBuf[ch]->data[oscBuf[ch]->needle++]=o?32767:0; - chan[ch].out<<=1; - - // if muted, ztill run sample - if (curSample>=0 && curSamplesong.sampleLen && isMuted[4]) { - while (curSamplePeriod>=chan[4].freq) { - DivSample* s=parent->getSample(curSample); - if (s->samples>0) { - if (curSamplePos>=s->samples) curSample=-1; - // (theoretical) 32KiB limit - if (curSamplePos>=32768*8) curSample=-1; - } else { - curSample=-1; - } - curSamplePeriod-=chan[4].freq; + if (isMuted[ch] || ((chan[ch].out&0x18)==0)) { + oscOut=0; + } else if ((chan[ch].out&0x18)==0x18) { + oscOut=32767; + } else { + oscOut=16383; } - curSamplePeriod+=40; + oscBuf[ch]->data[oscBuf[ch]->needle++]=oscOut; } + if (!isMuted[ch]) o=chan[ch].out&0x10; + if (noHiss) { + deHisser[outputClock]=o; + buf[0][h]=-1; + for (int i=0; i<8; i++) { + buf[0][h]+=deHisser[i]?4096:0; + } + } else { + buf[0][h]=o?32767:0; + } + chan[ch].out<<=1; + oscBuf[4]->data[oscBuf[4]->needle++]=0; } outputClock=(outputClock+1)&7; - buf[0][h]=o?32767:0; } } @@ -157,6 +159,7 @@ void DivPlatformZXBeeperQuadTone::tick(bool sysTick) { chan[4].freq=parent->calcFreq(chan[4].baseFreq,chan[4].pitch,chan[4].fixedArp?chan[4].baseNoteOverride:chan[4].arpOff,chan[4].fixedArp,true,2,chan[4].pitch2,chipClock,off); if (chan[4].freq>258) chan[4].freq=258; if (chan[4].freq<3) chan[4].freq=3; + rWrite(16,(chan[4].freq-2)&255); chan[4].freq*=13; } if (chan[4].keyOn) chan[4].keyOn=false; @@ -187,13 +190,21 @@ int DivPlatformZXBeeperQuadTone::dispatch(DivCommand c) { DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_AMIGA); if (c.value!=DIV_NOTE_NULL) { curSample=ins->amiga.getSample(c.value); + chan[c.chan].sampleNote=c.value; c.value=ins->amiga.getFreq(c.value); + chan[c.chan].sampleNoteDelta=c.value-chan[c.chan].sampleNote; chan[c.chan].baseFreq=NOTE_PERIODIC(c.value); chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; // TODO support offset commands curSamplePos=0; curSamplePeriod=0; + } else if (chan[c.chan].sampleNote!=DIV_NOTE_NULL) { + curSample=ins->amiga.getSample(chan[c.chan].sampleNote); + c.value=ins->amiga.getFreq(chan[c.chan].sampleNote); + // TODO support offset commands + curSamplePos=0; + curSamplePeriod=0; } chan[c.chan].active=true; chan[c.chan].keyOn=true; @@ -241,7 +252,7 @@ int DivPlatformZXBeeperQuadTone::dispatch(DivCommand c) { chan[c.chan].freqChanged=true; break; case DIV_CMD_NOTE_PORTA: { - int destFreq=NOTE_FREQUENCY(c.value2); + int destFreq=NOTE_FREQUENCY(c.value2+chan[c.chan].sampleNoteDelta); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -268,7 +279,7 @@ int DivPlatformZXBeeperQuadTone::dispatch(DivCommand c) { if (c.chan<4) rWrite(2+c.chan*4,chan[c.chan].duty^0xff); break; case DIV_CMD_LEGATO: - chan[c.chan].baseFreq=NOTE_FREQUENCY(c.value+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0))); + chan[c.chan].baseFreq=NOTE_FREQUENCY(c.value+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val):(0))); chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; break; @@ -332,11 +343,12 @@ unsigned char* DivPlatformZXBeeperQuadTone::getRegisterPool() { } int DivPlatformZXBeeperQuadTone::getRegisterPoolSize() { - return 16; + return 17; } void DivPlatformZXBeeperQuadTone::reset() { - memset(regPool,0,16); + memset(regPool,0,17); + memset(deHisser,0,8); for (int i=0; i<5; i++) { chan[i]=DivPlatformZXBeeperQuadTone::Channel(); chan[i].std.setEngine(parent); @@ -345,7 +357,6 @@ void DivPlatformZXBeeperQuadTone::reset() { cycles=0; curChan=0; sOffTimer=0; - ulaOut=0; curSample=-1; curSamplePos=0; curSamplePeriod=0; @@ -373,9 +384,11 @@ void DivPlatformZXBeeperQuadTone::setFlags(const DivConfig& flags) { } CHECK_CUSTOM_CLOCK; rate=chipClock/40; + noHiss=flags.getBool("noHiss",false); for (int i=0; i<4; i++) { - oscBuf[i]->rate=rate/4; + oscBuf[i]->rate=rate/8; } + oscBuf[4]->rate=rate; } void DivPlatformZXBeeperQuadTone::poke(unsigned int addr, unsigned short val) { diff --git a/src/engine/platform/zxbeeperquadtone.h b/src/engine/platform/zxbeeperquadtone.h index 4efd66c07..f4fdda058 100644 --- a/src/engine/platform/zxbeeperquadtone.h +++ b/src/engine/platform/zxbeeperquadtone.h @@ -36,12 +36,13 @@ class DivPlatformZXBeeperQuadTone: public DivDispatch { Channel chan[5]; DivDispatchOscBuffer* oscBuf[5]; bool isMuted[5]; - unsigned char ulaOut; + bool noHiss; + bool deHisser[8]; int cycles, curChan, sOffTimer, delay, curSample, curSamplePeriod; unsigned int curSamplePos; unsigned int outputClock; - unsigned char regPool[16]; + unsigned char regPool[17]; friend void putDispatchChip(void*,int); friend void putDispatchChan(void*,int,int); public: diff --git a/src/gui/about.cpp b/src/gui/about.cpp index e9e95f546..4eb815c76 100644 --- a/src/gui/about.cpp +++ b/src/gui/about.cpp @@ -68,14 +68,18 @@ const char* aboutLine[]={ "-- demo songs --", "0x5066", "Abstract 64", + "Aburtos", "ActualNK358", "airconmanws", "akumanatt", "AmigaX", "AquaDoesStuff", "AURORA*FIELDS", + "Background2982", "battybeats", + "bbqzzd", "Bernie", + "BlastBrothers", "Blaze Weednix", "BlueElectric05", "breakthetargets", @@ -107,6 +111,7 @@ const char* aboutLine[]={ "JayBOB18", "Jimmy-DS", "Kagamiin~", + "Kaoru", "kleeder", "Korbo", "jaezu", @@ -125,23 +130,31 @@ const char* aboutLine[]={ "Miker", "Molkirill", "NeoWar", + "Nerreave", "niffuM", "", "Notakin", + "nwcr", "NyaongI", "Pale Moon", "PeyPey", "PichuMario", + "Poltvick", + "PotaJoe", "potatoTeto", "psxdominator", "Raijin", "railzen7", + "Rei8bit", "RepellantMold", "RetroCarrot", "RevvoBolt", + "Rockyfan75000", "scooblee", "sillygoose", + "smaybius", "SnugglyBun", + "Spinning Square Waves", "SuperJet Spade", "Supper_E1", "SwapXFO", @@ -157,6 +170,7 @@ const char* aboutLine[]={ "The Beesh-Spweesh!", "TheRealHedgehogSonic", "tildearrow", + "tom_atom", "traumatized", "Uhrwerk Klockwerx", "Ultraprogramer", @@ -165,6 +179,7 @@ const char* aboutLine[]={ "Xan", "YaIiya", "Yuzu4K", + "Zabir", "Zaxolotl", "ZoomTen (Zumi)", "", diff --git a/src/gui/font_furicon.cpp b/src/gui/font_furicon.cpp index 188053cb7..f4c5fb888 100644 --- a/src/gui/font_furicon.cpp +++ b/src/gui/font_furicon.cpp @@ -1,370 +1,374 @@ #include "fonts.h" -// File: 'icons.ttf' (32076 bytes) +// File: 'icons.ttf' (32364 bytes) // Exported using binary_to_compressed_c.cpp -const unsigned int furIcons_compressed_size = 17366; -const unsigned int furIcons_compressed_data[17368/4] = +const unsigned int furIcons_compressed_size = 17542; +const unsigned int furIcons_compressed_data[17544/4] = { - 0x0000bc57, 0x00000000, 0x4c7d0000, 0x00000400, 0x00010037, 0x000e0000, 0x00030080, 0x54464660, 0x276aa24d, 0x7d0000ac, 0x28158230, 0x4544471c, - 0x00150046, 0x820f8214, 0x1c002d03, 0x322f534f, 0x8d52fa8c, 0x68010000, 0x562c1f82, 0x70616d63, 0x0dceb1d1, 0x90020000, 0x102c0382, 0x20747663, - 0x6f043b00, 0xa0040000, 0x04261f82, 0x70736167, 0x5982ffff, 0x0c7d0022, 0x08380f82, 0x66796c67, 0xf2e6a629, 0x6c050000, 0xcc710000, 0x64616568, - 0xbfa43225, 0xec201b82, 0x36210382, 0x23108268, 0x05068209, 0x24205f82, 0x24280f82, 0x78746d68, 0x8a18782e, 0xc0200f82, 0xce280f82, 0x61636f6c, - 0x7c463629, 0xa4205f82, 0xc8270f82, 0x7078616d, 0x8203ad00, 0x4801213b, 0x202c0f82, 0x656d616e, 0x8ba58b77, 0x38770000, 0xf2303382, 0x74736f70, - 0x5b5739aa, 0x2c790000, 0xe0030000, 0x012deb84, 0x6ca50000, 0x0f5f48b3, 0x0b00f53c, 0x25368207, 0xfde00000, 0x08839fff, 0x5c95e12b, 0xfe80fcdb, - 0x05000768, 0x220f82e0, 0x82020008, 0x82028305, 0x00062233, 0x290982ff, 0x80fc0007, 0x00070000, 0x0c820100, 0x0420028b, 0x63251184, 0x0800bb03, + 0x0000bc57, 0x00000000, 0x6c7e0000, 0x00000400, 0x00010037, 0x000e0000, 0x00030080, 0x54464660, 0xbd36a34d, 0x7e000051, 0x28158250, 0x4544471c, + 0x00150046, 0x200f8214, 0x2b0f8334, 0x322f534f, 0x8f52fa8c, 0x68010000, 0x562c0f82, 0x70616d63, 0x7ace15d2, 0x94020000, 0x142c0382, 0x20747663, + 0x6f043b00, 0xa8040000, 0x04261f82, 0x70736167, 0x5982ffff, 0x2c7e0022, 0x08380f82, 0x66796c67, 0x4aa9652e, 0x78050000, 0xdc720000, 0x64616568, + 0x759d8025, 0xec201b82, 0x36210382, 0x23108268, 0x05068209, 0x24205f82, 0x24280f82, 0x78746d68, 0x3519b32f, 0xc0200f82, 0xd2280f82, 0x61636f6c, + 0xea7f5862, 0xac205f82, 0xcc270f82, 0x7078616d, 0x8203af00, 0x4801213b, 0x202c0f82, 0x656d616e, 0xdd521d80, 0x54780000, 0xe3303382, 0x74736f70, + 0x12a0e944, 0x387a0000, 0xf4030000, 0x012deb84, 0xafdd0000, 0x0f5ff7a9, 0x0b00f53c, 0x25368207, 0xfde00000, 0x08839fff, 0x55e3e12b, 0xfe80fc91, + 0x05000768, 0x220f82e0, 0x82020008, 0x82028305, 0x00062233, 0x290982ff, 0x80fc0007, 0x00070000, 0x0c820100, 0x0420028b, 0x65251184, 0x0800bb03, 0x21008300, 0x23830002, 0x40222583, 0x0b822e00, 0x072b0d82, 0x00900100, 0x04000005, 0x82e6048c, 0x85fa2011, 0x5c032b07, 0xcf015900, 0x00020000, - 0x15820905, 0x01210285, 0x84078510, 0x75462905, 0x40005472, 0x59e12000, 0x06208385, 0x04856a84, 0x3b208b84, 0x07202683, 0x03830482, 0x0280fc25, + 0x15820905, 0x01210285, 0x84078510, 0x75462905, 0x40005472, 0x5be12000, 0x06208385, 0x04856a84, 0x3b208b84, 0x07202683, 0x03830482, 0x0280fc25, 0x82910009, 0x0052220c, 0x2c798220, 0x003500a5, 0x0029004b, 0x006d0191, 0x349b8278, 0x00470060, 0x00170152, 0x004a000a, 0x0032018f, 0x004f001b, 0x2631822e, 0x011801ca, 0x82a90036, 0x0028251b, 0x004d0133, 0x23829182, 0x22000338, 0x7a017c01, 0x39003900, 0xce012701, 0x4c001300, 0x22007301, - 0x0d824700, 0x85000b24, 0x0f82b500, 0x2e005b26, 0x5c004b01, 0x5b220182, 0x05822a00, 0x03825320, 0x5e004b32, 0xc8005300, 0x56015c00, 0x6b002e01, - 0x46001e00, 0x7d210184, 0x22018500, 0x82450046, 0x00a0214b, 0x6324018b, 0x9f006300, 0x0022b782, 0x05820300, 0x1c200383, 0x0123e385, 0x8403000a, - 0x001c2409, 0x82ee0004, 0x00082e1b, 0x00020008, 0xe0200000, 0xff59e1f4, 0x260984ff, 0xff00e1f0, 0x82e3ffff, 0x8400200b, 0x0006222b, 0x260b820e, - 0x00050004, 0x82070006, 0x8209202f, 0x000b24cd, 0x820d000c, 0x000f2617, 0x00110010, 0x32818212, 0x00150014, 0x00170016, 0x00190018, 0x001b001a, - 0x821d001c, 0x001f34ab, 0x00210020, 0x00230022, 0x00250024, 0x00270026, 0x82290028, 0x2b3208db, 0x2d002c00, 0x2f002e00, 0x31003000, 0x33003200, - 0x35003400, 0x37003600, 0x39003800, 0x3b003a00, 0x3d003c00, 0x3f003e00, 0x41004000, 0x43004200, 0xe7824400, 0x00463808, 0x00480047, 0x004a0049, - 0x004c004b, 0x004e004d, 0x0050004f, 0x00520051, 0x00540053, 0x00560055, 0x00580057, 0x005a0059, 0x005c005b, 0x005e005d, 0x0060005f, 0x82620061, - 0x850620c8, 0x22c982cc, 0x82020100, 0x00022105, 0x0123008d, 0x8d030000, 0xd10d4011, 0x6f043b22, 0x2c21d482, 0x08018500, 0x84003cdf, 0x6404c600, - 0xc4052405, 0x5807d406, 0xce08ea07, 0x76093409, 0xfe0ab00a, 0xee0b880b, 0xe60c2e0c, 0xd80d6a0d, 0xca0e640e, 0x5a10a40f, 0x7e11bc10, 0x9212c611, - 0x8c130c13, 0x9814d813, 0x38164815, 0x80171217, 0xae1b1e1b, 0xc01c341c, 0x081fea1d, 0x8020bc1f, 0x8a213421, 0x8622fc21, 0x2a27c823, 0xb028ca27, - 0xc6295229, 0xbe2a0a2a, 0xf42ba42b, 0x442e162e, 0x8e2e682e, 0x0c30f02f, 0xd2306a30, 0x56311e31, 0xde31ac31, 0xba32ec31, 0xc6336433, 0xbc344034, - 0xb6353a35, 0x1a36de35, 0x90364236, 0x1c37e436, 0x9e378c37, 0xc637b237, 0xee37da37, 0x14380238, 0x7c384a38, 0x0200e638, 0x00003b00, 0xaa041502, - 0x07000300, 0x01b12e00, 0xb23c2f00, 0xed000407, 0x0506b132, 0x03b23cdc, 0x220a8202, 0x8303b100, 0x83052016, 0x07b22716, 0x3cfc0106, 0x178301b2, - 0x21113338, 0x11212511, 0xda013b21, 0x640161fe, 0xaa049cfe, 0x043b56fb, 0x52820034, 0xff80fc25, 0x828003f5, 0x82012009, 0x05002e59, 0xfd212521, - 0xf99a0533, 0x0b0007b3, 0x0815820b, 0x09020325, 0xf7040f00, 0x1b00fd03, 0x2f002500, 0x30010000, 0x15163221, 0x07010e14, 0x16150706, 0x1e171617, - 0x82141501, 0x010e2f0b, 0x21372123, 0x013d3632, 0x21232634, 0x09853335, 0x012b4d08, 0xbd010a02, 0x311f8e7d, 0x1e1e2020, 0x1f202525, 0x2214132b, - 0xfe385f23, 0x1801a217, 0x3f48483f, 0x3dfce8fe, 0xfc3d4242, 0x778dfd03, 0x0d324f38, 0x0208030c, 0x1c1c0d0d, 0x363c3f58, 0x2c272735, 0x313e428b, - 0x3e88423e, 0x3e3a2e39, 0x30088f83, 0x63009100, 0xa9036f06, 0x17000f00, 0x00002b00, 0x30273025, 0x30073021, 0x37123623, 0x17121633, 0x06233001, - 0x26333007, 0x00113001, 0x30333027, 0x2f038513, 0x11070206, 0x4cea0230, 0x8a49c7fe, 0xab2fbf2f, 0x34080382, 0x3c068dfe, 0x023cf73d, 0x17f7fe84, - 0xcb04cc9b, 0x1dce3794, 0x8ce3e363, 0x8c8c2e02, 0x028cd2fd, 0xb9b9b9c9, 0x4a01f0fd, 0xfe28d401, 0x6175018b, 0xfe329afe, 0x218282b3, 0x04820300, - 0x0007ab3a, 0x58036103, 0xba038c03, 0x26370000, 0x30332702, 0x1d17021d, 0x031d1704, 0x14910290, 0x478211a3, 0x719126f1, 0x1e268695, 0x3e331701, - 0x73413701, 0x220d8606, 0x8937033d, 0x8a042002, 0xa317850b, 0xf1298211, 0xa1719126, 0x06332e86, 0x26230702, 0x012e2702, 0x010e2327, 0x2d0d8207, - 0x27262205, 0x1e37013e, 0x35323301, 0x18832634, 0x26272629, 0x33363435, 0x82171632, 0x012e2b21, 0x15062223, 0x17161714, 0x0285011e, 0x06141523, - 0x223b8225, 0x82272223, 0x26272628, 0x37363734, 0x823c823e, 0x84072021, 0x011d352c, 0x32331614, 0x3d023e37, 0x33352301, 0x188e2311, 0x0168185e, - 0x043400cc, 0x040c040e, 0x390e030e, 0x390f7b0e, 0x030f030e, 0x040e030d, 0x012761cc, 0x19621864, 0x833a0e7a, 0x820c205c, 0x3c0f3b5c, 0x4bf0020f, - 0x2f0b276e, 0x314d1d0c, 0x09342a77, 0x2b5a0a24, 0x4865702a, 0x13822463, 0x401a3c08, 0x16373731, 0x24093116, 0x15443009, 0x02741316, 0x4f090c43, - 0x2b2c3448, 0x12132021, 0x22221212, 0x375a3d5f, 0x11531e38, 0x50483c46, 0x1a1e4850, 0x7c16271a, 0x70b75adf, 0xcd70be01, 0x4d0010b8, 0x1a2d4701, - 0x67191968, 0x10014419, 0xf0fe4444, 0x220a8244, 0x101a6819, 0x47015b01, 0x084d4741, 0x42fe70af, 0x13014570, 0x19671a45, 0x451a6719, 0x0b45edfe, - 0x2a0b3638, 0x6d2c290b, 0x020d2f2c, 0x2c150207, 0x615c512d, 0x290a3431, 0x2d24250b, 0x15162a34, 0x0208020c, 0x17171f0b, 0x6865293f, 0x133e306e, - 0x42292a13, 0x4242b842, 0x27282a2a, 0x31314726, 0xa4525c39, 0x09085c52, 0x3b1e3121, 0x009efe57, 0x52000700, 0xae0602ff, 0x1a001a05, 0x38002400, - 0x53004900, 0x80007800, 0x22050000, 0x37343526, 0x3337023e, 0x07060706, 0x3307010e, 0x3233013e, 0x06141516, 0x013d3227, 0x1d222334, 0x26031401, - 0x16332702, 0x17161712, 0x36373633, 0x272a8212, 0x23210702, 0x17322111, 0x07272783, 0x012e2313, 0x48372327, 0x15270779, 0x27262201, 0x8234012e, - 0x3637222a, 0x21238233, 0x58450617, 0x3698080b, 0x17011e37, 0x1105010e, 0x11011501, 0xa2013501, 0x0f106d6b, 0x8a314f3a, 0x1e2a2a3b, 0x0c09251d, - 0x51314711, 0x6d6a6e5f, 0x211f6c6d, 0x136b2183, 0x0e0e1450, 0x140e0e0c, 0x2169144e, 0x8f012083, 0x56090165, 0x3a392b2c, 0x56087180, 0x249b7817, - 0x9b242626, 0x5d3aad02, 0x23232122, 0x2e2e2221, 0x3333563b, 0x12490d1f, 0x4c44353e, 0x4236444c, 0x0e380f12, 0xe4fe6920, 0x72fe2801, 0x84fdd8fe, - 0x3c3d3c7f, 0x2d22606f, 0x28292829, 0x312f3256, 0x776a676a, 0x77197755, 0x56080282, 0x01701803, 0xfe466fbf, 0x4f4e46e7, 0x01464e4f, 0xfe6f4619, - 0x9e027041, 0x4d603433, 0xe7fe1160, 0x5536c913, 0x2a3e2a26, 0x8efede26, 0x842a2a27, 0x2a2a84b6, 0x25251414, 0x3929074a, 0xa1525f32, 0x3b365e53, - 0x4a092108, 0x34feb24e, 0xfe821001, 0xfecd0192, 0x820082ef, 0x00043f00, 0x06ab0020, 0x006103e0, 0x0015000b, 0x0074004a, 0x11303700, 0x16322130, - 0x012b0614, 0xb7490119, 0x46012008, 0x162205ce, 0x12821617, 0x2806d046, 0x3435012e, 0x3233023e, 0x08d14617, 0x1506072c, 0x011f1614, 0x1415011e, - 0xcd46020e, 0x022e2105, 0x16212485, 0x0cc64617, 0x3e373623, 0x06c84601, 0x0121d108, 0x66665d20, 0x2aadb45d, 0xad292f2e, 0x7655dd02, 0x0d320c2a, - 0x362b2b23, 0x3b2e4141, 0x620a270a, 0x563d2162, 0x37384c36, 0x0d320d28, 0x39384b1a, 0x37342020, 0x205d643c, 0xdd025a3f, 0x4c5e0a04, 0x294a663c, - 0x426c4d2a, 0x59237d5a, 0x503d5113, 0x20506161, 0x16161d1c, 0x5ff38a19, 0x6d9e02b7, 0xf5fe6db9, 0x282b6a01, 0xfd2b292e, 0x0b343db6, 0x162b0c2f, - 0x27313a17, 0x07020c2e, 0x515c1202, 0x1b31482c, 0x0b321a1b, 0x29210b2d, 0x2a2c1817, 0x130c0b29, 0x4d2f505d, 0x31711d37, 0x82572d40, 0x58815454, - 0x3447502e, 0x5d663b2f, 0x09665d6e, 0x2f0f1008, 0xfe5d3420, 0x0005009b, 0x06ab002e, 0x006103d2, 0x001f0012, 0x0134002a, 0x25000046, 0x28076842, - 0x1e32013e, 0x020e1402, 0x05834227, 0x1d06222a, 0x05161401, 0x17322111, 0x2c0f5e41, 0x27012e05, 0x17071d23, 0x1d170f1d, 0x8502870e, 0x3305820b, - 0x11231101, 0x17121633, 0x3317011e, 0x3d27053d, 0x0e3d270f, 0x0b880287, 0x3311042d, 0x02262311, 0x603c3301, 0x82232223, 0x7a5f3a02, 0x23234460, - 0x483c6144, 0x4f904f4f, 0x01df014f, 0x2b2c5609, 0x9aa35657, 0x26008225, 0x0863029a, 0x440c0922, 0x62280732, 0x22852175, 0x0d082308, 0x76231088, - 0x42ac8521, 0x282d074c, 0xb6845428, 0x5a275484, 0x52a2525d, 0x3304845d, 0x339e024f, 0xfe67c134, 0x256901f1, 0x26293d2a, 0x155315b2, 0xae4d7f44, - 0xfe02284d, 0x439e0270, 0x4043f4fe, 0x01268088, 0x4362fd90, 0x5f430c01, 0x00a53a05, 0x035b0654, 0x002f00b8, 0x00540048, 0x2500005e, 0x010e2330, - 0x022e2223, 0x078a4435, 0x20083e43, 0x06e34906, 0x82373621, 0x013d3501, 0x11213523, 0x32210123, 0x06141516, 0x07010e07, 0x17021e15, 0x07300b82, - 0x2123020e, 0x37323337, 0x34013d36, 0x012b2627, 0x080a5d4d, 0x0e04e541, 0x804a6074, 0x3035345c, 0x53434330, 0x122b9c71, 0x6518124a, 0x7979634d, - 0x24242863, 0x10101b1b, 0x772f01ac, 0x72010601, 0x141b7769, 0x1a1a3415, 0x1311353d, 0x4f391011, 0x8768fe2f, 0x821e35e9, 0x356a0800, 0x3733d2e9, - 0xe2d23337, 0x6d38503d, 0xa2686aa2, 0x1c1c3738, 0x2b0b5963, 0x7f493b0b, 0x7f758875, 0x14130b0a, 0x41271e1d, 0x0341fe75, 0x2f627646, 0x14151542, - 0x16010703, 0x3525242f, 0x412d2c32, 0x1c1b7525, 0x1b342933, 0x3033711c, 0x00333027, 0x00050000, 0x06ab0035, 0x006103cb, 0x0046001f, 0x00600053, - 0x25000066, 0x1b442622, 0x37362c13, 0x0617011e, 0x22210607, 0x8227012e, 0x37362321, 0x0646013e, 0x2a148205, 0x17163207, 0x3233033e, 0x4315021e, - 0xa8081058, 0x36352135, 0x11333712, 0x15231533, 0x23113325, 0x4e01010e, 0x49269683, 0x76584169, 0x48115b21, 0x59594d3b, 0x124c3d4d, 0x210e3a0f, - 0xfc013c3d, 0x113c5738, 0x23232c10, 0x39902955, 0x22212d2d, 0x020d1617, 0x1c0b0104, 0x2a203025, 0x211d3548, 0x3b35573e, 0x42754141, 0xfea10242, - 0x2eb52dc9, 0xfe5b5b8e, 0x2307dbbe, 0xa9b1ac8e, 0x2e588154, 0x30324b4d, 0x665d6a39, 0x313f6a5d, 0x49092309, 0x44242929, 0x493d3030, 0x53363680, - 0x2627291c, 0x2d2d2928, 0x15010136, 0x1c0f1b23, 0x332f4d37, 0x58213c53, 0x3d0d3d3e, 0x0804843e, 0x5d834d2f, 0x4a2a014a, 0x83553afe, 0x3b6301d8, - 0x000800ed, 0x0608ff4b, 0x001505b5, 0x0016000c, 0x0028001c, 0x0068005c, 0x009b0072, 0x11301700, 0x12354430, 0x83110121, 0x113323ec, 0x01871521, - 0x4c06a645, 0xb44c2d75, 0x13232406, 0x85031333, 0x010f2a0b, 0x013e2533, 0x010e2337, 0x82028207, 0x27028213, 0x17011e23, 0x33112311, 0x2005af4c, - 0x821e8233, 0x11332902, 0x0901b023, 0x582c2c56, 0x30075644, 0xf466ca01, 0xfe850186, 0xfe0301e1, 0xfa1f01fd, 0x0cdd4be7, 0x4b092521, 0x0c2207dd, - 0xdd4b0c2e, 0x38300811, 0xe1092209, 0x64082309, 0xf1ca81c9, 0x0d030e04, 0x3b040e03, 0x02d002b0, 0x080b0104, 0x5716071f, 0x15571516, 0x0b081f08, - 0x62010501, 0x12481278, 0x09200b82, 0x54080382, 0x77124712, 0x9f02f862, 0x67c23334, 0x6901f1fe, 0x293e2926, 0x02bcfd25, 0x5abbfd9f, 0xc45a9f02, - 0x035acf58, 0x0b353957, 0x2c2a0b2b, 0x0c2f2c6e, 0x14020802, 0x5d512c2d, 0x0a343160, 0x25240a29, 0x162a342d, 0x08020b16, 0x17200a03, 0x64293f17, - 0x7c1f0b69, 0x8202821f, 0x01613340, 0x104111e0, 0xd3114110, 0x144c1390, 0x2d134b13, 0x02822db6, 0x13491322, 0xfe290b82, 0x279f0263, 0x5816279d, - 0x82028216, 0x61fd2c08, 0x04000000, 0xab002900, 0x4703d706, 0x3a220553, 0x53474600, 0x1140471a, 0x14011d26, 0x32331617, 0x20070443, 0x0adc4125, - 0x01292108, 0x66655e20, 0x29adb35d, 0xad292e2e, 0x95840f03, 0x41694926, 0x223b3b57, 0x110f3d0f, 0x2c4e3b48, 0x4e350082, 0x0e134c3c, 0x3c220f3a, - 0x012d013d, 0x01bffeae, 0x01ddfe23, 0x10054741, 0x54a9b134, 0x272d5981, 0x22084b26, 0x35393008, 0x5d665d35, 0xc6423535, 0x020b2a07, 0x60ba609e, - 0x000060c4, 0x825f5103, 0x6d01082e, 0x930502ff, 0x44001a05, 0x6d005500, 0x9e299182, 0xd500ab00, 0x0000e300, 0x05584725, 0x0622232c, 0x27012e07, - 0x013e3736, 0x1b443637, 0x0e072205, 0x098f5202, 0x82070621, 0x22232a01, 0x3727022e, 0x17161716, 0x09d6481e, 0x44013521, 0x37370664, 0x3233023e, - 0x27061016, 0x3d023e32, 0x022e3401, 0x07010e22, 0x4f011d06, 0x258205a1, 0x34350225, 0x48353736, 0x322005f2, 0x634a4282, 0x1e152405, 0x82141501, - 0x0ce1476b, 0xee471320, 0x8325200b, 0x2307211e, 0x02829982, 0x27262223, 0x232d8206, 0x2e272223, 0x37204f82, 0x3320b083, 0x07204c85, 0x7382c988, - 0x02165508, 0x3a3c3e4b, 0x17433031, 0x0f0c300c, 0x21331413, 0x502f2b20, 0x0a0a213a, 0x1d1a2f24, 0x13131a19, 0x1f1f2216, 0x2f362c2d, 0x0f2a3647, - 0x0e0e0c50, 0x1c2e1112, 0x3f45413e, 0x3e980247, 0x0f0e3c5c, 0x5c3c0e0f, 0x76767d3e, 0x1e31237d, 0x311e0e0e, 0x071f3145, 0xb3080082, 0xfd31100f, - 0x3d593bf8, 0x343c4a1f, 0x53371e3e, 0x38292968, 0x343f0f0f, 0x10104a3d, 0x3c3a5a3c, 0x42794242, 0x3b373d42, 0x3a3a6f3b, 0x16165203, 0x90295645, - 0x21225b38, 0x05010d2d, 0x0e0e0a01, 0x2a203026, 0x1d352424, 0x1f1f1110, 0x2b383656, 0x10113c2c, 0x42413bec, 0x41413b3a, 0x07293599, 0x262c312e, - 0x160a2a0a, 0x0a1d1415, 0x412d1709, 0x191a2028, 0x04061928, 0x150d0d06, 0x2c253914, 0x0e191a48, 0x2c21140e, 0x11143e17, 0x0d0c0c11, 0x3407343a, - 0x6afe5c36, 0x4040582f, 0x40415253, 0xfeb72f59, 0x1c5cb6b8, 0x752c4933, 0x1c34482c, 0x2424341c, 0x2e080982, 0x1a1a2325, 0x1d06031c, 0x432a4734, - 0x13071151, 0x40263a4e, 0x0c0d192d, 0x2620202d, 0x07134e3a, 0x2a435111, 0x1d342423, 0x13323857, 0x82373732, 0x01382704, 0x102e303a, 0x0484302e, - 0x491f2a08, 0x556b4041, 0x284e291b, 0x01365a28, 0x12121401, 0x0f0e0f1b, 0x32304c36, 0x1e1d2b2a, 0x44131222, 0x3f933030, 0x3e3c0e3c, 0x2104823e, - 0x0082003f, 0x78000437, 0x8806b700, 0x0f005603, 0x37002700, 0x00004000, 0x30113001, 0x2a038423, 0x30213035, 0x30133015, 0x8a333035, 0x201b830f, - 0x22178233, 0x82273021, 0x0c815427, 0x07010e3c, 0x01012e33, 0x01c86cac, 0x5b5b53fc, 0x5c5c2401, 0xfb3c2b02, 0x99266f3a, 0x03828826, 0xd7fe4308, - 0x10411005, 0x024010c6, 0x02c2fdf5, 0xfd60603e, 0xee0158c2, 0x12fe5858, 0x70b5b558, 0x7070be01, 0x027042fe, 0x31c5313a, 0x0000c531, 0x00080005, - 0x03f806ab, 0x00340061, 0x0046003e, 0x00580050, 0x9f4b3700, 0x23272a32, 0x33132307, 0x01171216, 0x90a18623, 0xfd420811, 0x0d2a7655, 0x2b230d31, - 0x4140372b, 0x280a3a2e, 0x2262620a, 0x4c36563c, 0x0d273838, 0x4b1a0d32, 0x1f203a37, 0x653c3634, 0x5a3e215d, 0xfa3dd002, 0x89e46e3b, 0xfe269826, - 0x401104d7, 0x4010c510, 0x13912803, 0x824bac20, 0xb50b242c, 0x419e02b5, 0xfd210a00, 0x20108ef7, 0x34008200, 0x00600003, 0x03a006ab, 0x00150061, - 0x004b002b, 0x03302500, 0x0eaa4630, 0x07020624, 0xb1413521, 0x48052013, 0x012d1d87, 0x1270db3c, 0x2b0a1247, 0x2b0b040b, 0x2509820b, 0x2595256d, - 0xc7414b01, 0x84012605, 0x4a269683, 0x14614868, 0x9e02b728, 0x2737dd37, 0x0282279b, 0xc3830882, 0x2007d641, 0x1741480b, 0x042acb82, 0xb7004700, - 0x5603b906, 0xcd820b00, 0x29002122, 0x46183f46, 0x01280a1b, 0x23112311, 0x48152135, 0x28074c4d, 0x292e2e29, 0x011402ad, 0x070246ad, 0x6c7b0125, - 0x46fc01c8, 0xc1200f08, 0x2106ea45, 0x79423e02, 0x207f8205, 0x08934f06, 0x27001e34, 0x4e003d00, 0x7e005800, 0x22050000, 0x34352627, 0x01843637, - 0x0e333025, 0x4f060702, 0x17200594, 0x2408954f, 0x14011d22, 0x06944f01, 0x200a1256, 0x2d964f06, 0x4f010e21, 0x033f1297, 0x37366b7a, 0x1d1d0f10, - 0x8a312827, 0x123a553b, 0x110c0a12, 0x30513147, 0x6d6a6e2f, 0x4f09fed9, 0x04260692, 0x050c0513, 0x944f0512, 0x4d142212, 0x17944f14, 0x0e3a0e22, - 0x350e954f, 0x7f4242fd, 0x363d3d3c, 0x232f3038, 0x2b50522d, 0x312f332a, 0x904f3535, 0x691a2213, 0x4f02821a, 0x2e221192, 0x924f2eb6, 0x20082215, - 0x0d934f08, 0x0106003c, 0x0508ff17, 0x001505e9, 0x0017000b, 0x004b002d, 0x005f0055, 0x11300500, 0x03823330, 0x15302122, 0x0b870784, 0x3305c650, - 0x37363435, 0x1632013e, 0x14011e17, 0x010e0706, 0x37363227, 0x3d2b0182, 0x26273401, 0x23012e27, 0x82070622, 0x07bf4601, 0x4f110521, 0xcc2412d1, - 0x6311016c, 0x22080382, 0x6a4210fd, 0x29292626, 0x836a2626, 0x2a26256b, 0x6b25262a, 0x17402641, 0x0c0c0d16, 0x4017160d, 0x873f2826, 0x013f220b, - 0x0c8348f4, 0x9f02f825, 0x8460c1fd, 0x57032b04, 0x822b2c2d, 0x2b825455, 0x09832d2c, 0x0883a920, 0x191b612d, 0x2e252519, 0x25252e69, 0x8c1b1919, - 0x02562f0c, 0x6eb86e9f, 0x6a01f5fe, 0x282e282c, 0xf082002c, 0x000a0036, 0x03f606ab, 0x00120061, 0x003a0030, 0x004a0044, 0x2e222500, 0x4f064050, - 0xe6af0749, 0x1133112f, 0x2c011521, 0x294c6a42, 0x426a4c29, 0x9b078541, 0x665d21e0, 0x08086449, 0x6d130222, 0x2dac1001, 0x54548257, 0x2d2d5882, - 0x82a88258, 0x1b602d57, 0x2425191a, 0x242e6a2e, 0x1b1a1925, 0x55200c8c, 0x280e6d50, 0xfd9e02c1, 0x000060c2, 0x2ccb8204, 0x03b606ab, 0x00130061, - 0x002d0022, 0x06d34366, 0x30153023, 0x26038821, 0x30013011, 0x83173233, 0x070124e8, 0x52012b06, 0x272405ba, 0x11012b26, 0x51064d58, 0x2724077e, - 0x012e2726, 0x35220282, 0x80513734, 0x1506230d, 0x80511714, 0x07240806, 0x010e0706, 0xfea3014a, 0xfe1301ca, 0xedc301ed, 0x4a343441, 0x344a2929, - 0xeded4134, 0x2e2e5c4b, 0xdc02804b, 0x2705de45, 0x372b2a24, 0x17174140, 0x2405df45, 0x563d1111, 0x07e04535, 0x384a2b08, 0x1a1a3f3a, 0x5d653c36, - 0x201f1011, 0x9e02b759, 0xfe60ba60, 0x159e02dc, 0xa87d5415, 0x1515547d, 0x6c5b5e60, 0xfe2f2f5b, 0xd6456b22, 0x1717210a, 0x21075a51, 0x5b512424, - 0x2f290809, 0x15142a2c, 0x5c130c0b, 0x26272f51, 0x001d1c1b, 0x8f000400, 0x71066300, 0x1500a903, 0x39002f00, 0x00004300, 0x30013025, 0x06ec5033, - 0x2806535a, 0x01070206, 0x15163221, 0x0bd44914, 0x2322df84, 0xa2523721, 0x09064f08, 0xfea2012e, 0x59168ded, 0x0b360f16, 0x0b380f05, 0x89370982, - 0x012fb92f, 0x687301c2, 0x34291b77, 0x1f1e1919, 0x10241b1a, 0x4e1d1c11, 0x3c2106f5, 0x07f34e3c, 0x46036334, 0x45ecfe45, 0x3729c536, 0x014525c8, - 0xfd8c4514, 0xe44e8cd2, 0x142a3605, 0x0b010703, 0x4918170b, 0x2d2c3235, 0x75252120, 0x34293337, 0x09e34e37, 0xff320134, 0x05ce0508, 0x00260014, - 0x00780033, 0x009b008a, 0xc44e0500, 0x4a01202e, 0x2e3241d1, 0x11232701, 0x13331123, 0x3317011e, 0x23113311, 0x04823521, 0x07020e26, 0x37362726, - 0x30081082, 0x38700215, 0x10103d57, 0x5523222c, 0x2d39902a, 0x1721222d, 0x05010c17, 0x251c0a01, 0x472b1f31, 0x3d221e35, 0x423a3557, 0x41417542, - 0x3b3f4402, 0x08884a39, 0x4a341321, 0x0b220688, 0x884a230a, 0x233c0807, 0x2c2c1f1f, 0x37472f36, 0x0d4f0f29, 0x12110e0e, 0x413e1d2d, 0xfd474045, - 0x0e3408b2, 0xdb796803, 0x0308340e, 0x43017967, 0x341708bc, 0x4002123e, 0xa3a55655, 0x304425f8, 0x81493c30, 0x080d284f, 0x1b241447, 0x4d361d0f, - 0x3c53332f, 0x3d3e5922, 0x3f3f3c0d, 0x3e3d0d3c, 0x29353d01, 0x2b312e07, 0x0a2a0a26, 0x1e141416, 0x2d170909, 0x1a202840, 0x0619271a, 0x0e0c0605, - 0x25381514, 0x1a1a482c, 0x21150e0e, 0x153f172b, 0x06594a10, 0x36333508, 0x104a035c, 0x00fe1b63, 0x8dfe9e02, 0x0210631b, 0x5a62fd01, 0x3818f501, - 0x3a021343, 0xbcfd5d5c, 0x0003005a, 0x06ab001b, 0x006103e5, 0x005c0039, 0x2500007f, 0x430d4749, 0x26220568, 0x69432627, 0x0aea5410, 0x07060726, - 0x2221010e, 0x23051d47, 0x3233013e, 0x200fd051, 0x055b5636, 0x012722a2, 0x2a775410, 0x490c320d, 0x91430570, 0x31312c06, 0x573c1111, 0x38374c36, - 0x49330c27, 0x23080b73, 0x1f1f1011, 0x8429025a, 0x24131395, 0x57426825, 0x3d0f2276, 0x3a48120f, 0x4e58584e, 0x0f124c3c, 0x79220f3a, 0x8b491e9e, - 0x06b4430b, 0x512e2e23, 0x0bb5432c, 0x2d171723, 0x0611552a, 0x1b26272d, 0xa9b11d1c, 0x2c404154, 0x4e4d2e2c, 0x0051053b, 0x9a52200a, 0x0000281a, - 0x004f0005, 0x55b106ab, 0x0021092b, 0x342b5540, 0x35210122, 0x28080282, 0x02061521, 0x54012107, 0x2222603d, 0x22222323, 0x44607960, 0x60442424, - 0x4e4e483c, 0x014f4f90, 0x570901de, 0x57572c2b, 0x058957a3, 0xfe60032e, 0xfe420141, 0x36a601cd, 0x4c0136d6, 0x082bd954, 0x5bbcfd2a, 0x5b59ea01, - 0x52bafe52, 0x2e000700, 0xd20608ff, 0x1c001505, 0x47003300, 0x5d005300, 0x91007300, 0x06370000, 0x30153007, 0x3205034c, 0x36333011, 0x30373637, - 0x16070633, 0x2e231712, 0x45110101, 0xf1450ae5, 0x2726230c, 0x29493330, 0x82332006, 0x301122cf, 0x187d5701, 0x47012e21, 0x36082df3, 0x6d1a42f7, - 0x1848046d, 0x417f5a5a, 0x16ba32ae, 0x01922783, 0xfead01a5, 0xfe2301c0, 0x014001dd, 0x7c737422, 0x031b6d1b, 0x781b6c1b, 0xfb2da418, 0x5e20014a, - 0x505e6565, 0x1720075d, 0x08291448, 0x1e4b4123, 0xfe9f02d0, 0x6d1e5cac, 0x4bce4d6d, 0x3d21e8fe, 0x02e2fee1, 0x60bb609f, 0x080160c4, 0xc732cbcc, - 0x27028232, 0x4ee2fe29, 0x6203f6fe, 0x210df847, 0x3748b5fd, 0x0000212d, 0x358f8362, 0xffca0005, 0x05360608, 0x000f0015, 0x00330017, 0x00920066, - 0x054e0500, 0x07062a11, 0x05263330, 0x2327012e, 0x05494e30, 0x13303326, 0x3317011e, 0x2106e749, 0x63593023, 0x27262110, 0x5a0a6259, 0x615905ad, - 0x0226230d, 0x42823327, 0x53171621, 0x9c53078e, 0x36372706, 0x02063337, 0x6c822307, 0x2327262f, 0x010e0706, 0x3df80207, 0x266e3afb, 0x07704e98, - 0xc6313034, 0x0e190230, 0x68020834, 0x3408db79, 0x7967030e, 0x7c445bfc, 0x050e4805, 0x1e3a2e35, 0x2262621e, 0x4c36563d, 0x03273837, 0x384a1a49, - 0x4d201f3a, 0x5e0807eb, 0x6a1a9001, 0x2e0d6e1a, 0x03171809, 0x0b0a2408, 0x0e790f36, 0x23090a36, 0x23310309, 0x6e1c6b23, 0x390d7a1b, 0x02191910, - 0x3b101919, 0xb6b6f80d, 0x70bf0170, 0x7041fe70, 0x94943b02, 0x641b3494, 0x02fffd0f, 0x0f8dfe9f, 0x01021b64, 0x570361fd, 0x2f0c343d, 0x16162b0b, - 0x2e27313a, 0x5905060b, 0x1a350694, 0x4102321b, 0x17172822, 0x0a2a2a2c, 0x515c130d, 0x1e364d2f, 0x334b830b, 0x6f2ddb3b, 0x29981e70, 0x3c3cdc2b, - 0x94252bdc, 0xa2a1de25, 0x32235f83, 0x82663fea, 0xea3f3700, 0x01040032, 0x050eff18, 0x000f05e8, 0x003a001b, 0x00570043, 0x7d412500, 0x3021221a, - 0x05fc5423, 0x3e230724, 0x0a823701, 0x27089843, 0x1e07010e, 0x33110101, 0x2007c543, 0x06764111, 0x27823320, 0x0806b543, 0x320ccd36, 0x7867030c, - 0x0c310ddb, 0x03796803, 0x6d1b7f3f, 0x6b1b021b, 0x9124781b, 0x238b2324, 0x19661980, 0x1a671a02, 0x248c2478, 0xd9fb9325, 0x0111016c, 0x269a2601, - 0x08078043, 0x9a277723, 0x5f178127, 0x02fffd18, 0x188efe9e, 0x0002175f, 0xb22d62fd, 0x2db22c2c, 0x3639e539, 0xa72936db, 0x3e028229, 0x3936da36, - 0x022903e6, 0x60c2fd9e, 0x01440801, 0xc732430f, 0x32c73131, 0x43f2fe43, 0x8200f6fe, 0x01062200, 0x20f38236, 0x2ff382ca, 0x001e0014, 0x0032002a, - 0x00520046, 0x23300500, 0x22055744, 0x82061415, 0x5d1720cb, 0x27220f19, 0x30650723, 0x070b5008, 0x4f030221, 0x02220e3f, 0x704e2103, 0x6da33a0b, - 0x685a2101, 0x61184142, 0x5a167918, 0x2aac8516, 0xac292f2e, 0xfa3db603, 0x0a66423b, 0x10401034, 0xfd4010c5, 0x716e6e79, 0x0b114811, 0x0b040a2b, - 0x09820b2c, 0x6f706e24, 0x9c4e6801, 0xf2200809, 0x5d6c9e02, 0x2f145f48, 0xb52d2fbc, 0x292b5b2d, 0xd52b282e, 0xb6b696fe, 0x6fbf0170, 0x7041fe6f, - 0x2506fd50, 0x4f015901, 0x554f4f01, 0xb1fe240b, 0x5402b1fe, 0x003007ae, 0x00a90002, 0x03570663, 0x001d00a9, 0x25000033, 0x2005d341, 0x058d5106, - 0x210eb641, 0x0d500516, 0x08194905, 0x33304008, 0x03301530, 0x9027a076, 0x64640413, 0x35c21896, 0xa017bc33, 0x02207f20, 0x96208120, 0x8a33be17, - 0x0aeb2d01, 0x164f411c, 0x41955003, 0x4163ccce, 0xa7a720ed, 0x53330127, 0x2426014f, 0x8234d034, 0xfe243402, 0xd7d74fdb, 0x1e720271, 0x02175446, - 0xfd47a148, 0x1000712b, 0x8101e71e, 0x28010634, 0xd80502ff, 0x0f001a05, 0x43002500, 0x74005600, 0xd3537c00, 0x335b4f11, 0xa14e0120, 0x07a6512b, - 0x6d670228, 0x01fb01c7, 0x704f4173, 0x6b822107, 0x2205824f, 0x4f27416b, 0x27250979, 0x16164027, 0x2c00820d, 0xfd401616, 0x4c6b41d0, 0x6b4c2929, - 0x21078741, 0x1c874126, 0x28264134, 0x0c17163f, 0x170c0d0d, 0xed023f16, 0xfc01c86c, 0xcf514c01, 0xb7fd3605, 0x822c2b2d, 0x2c815554, 0x2c2d2d2c, - 0x82a9812c, 0x612d2b2c, 0x06c04e1a, 0x4e242521, 0x242105c0, 0x06cd4e25, 0x01031a24, 0x2e83572d, 0x2d2d5823, 0x202c8258, 0x4f2b8a57, 0xf94e09c2, - 0x011a2205, 0x083352e8, 0x33000736, 0xc206fdfe, 0x0c000905, 0x3c001600, 0x86006100, 0xa2009c00, 0x6119b95a, 0xf4510f8b, 0x5a012014, 0x0b210683, - 0x1a7f5a01, 0x112c24a5, 0x36321614, 0x11331135, 0x020e0714, 0x2005934d, 0x063e5b11, 0x57090124, 0x284a2b2c, 0xad022a08, 0x21215e3a, 0x21212323, - 0x05b2612f, 0x390c1d52, 0x200e390e, 0x01c30269, 0x080b0105, 0x8282081f, 0x0b081f07, 0x62010401, 0x8b5a1378, 0x20072905, 0x12471208, 0xc0fb6277, - 0x0c202282, 0x82261d82, 0x081e0882, 0x2283020c, 0x12491222, 0x08253382, 0x12072008, 0x33228248, 0x8e386401, 0x0c0c6538, 0x577f5835, 0x020c0c36, - 0xf8f46636, 0x080fc15a, 0x2b27b120, 0x83b6842a, 0x14132b2a, 0x084a2525, 0x32390820, 0x53a1535e, 0x093c365e, 0x4f4a0821, 0x925aa801, 0xf0fe2305, - 0x905a1001, 0xff042117, 0x320823a1, 0x4efe9f02, 0x514d4d51, 0x5efeb201, 0x41323244, 0x32411f1f, 0xa2014432, 0x9f0261fd, 0x005abbfd, 0x01040000, - 0x0502ff4d, 0x001a05b3, 0x00510017, 0x529d008b, 0xbb50059f, 0x09d54a09, 0x4d14aa50, 0xfe482341, 0x297a4d0e, 0xf14e0120, 0x85012110, 0x38095a46, - 0x76544b01, 0x0c320c2a, 0x362c2a24, 0x17174240, 0x0a280a3b, 0x10313161, 0x06d94811, 0x0c330c23, 0x0653621a, 0x5d653b29, 0x1f201010, 0x848bfd5a, - 0x230d2332, 0x32862b2b, 0x620a272e, 0x11113131, 0x4c36563c, 0x0d283738, 0x3c213289, 0x2b328264, 0x015b1f1f, 0x0d310ce2, 0xdb796802, 0x03230682, - 0x46f27967, 0x0b320692, 0x2e0c343d, 0x16162b0c, 0x18273139, 0x07020b17, 0x5e4d1202, 0x2822250d, 0x2b2c1717, 0x210b5e4d, 0x33b16203, 0x487e0121, - 0x002f0f3c, 0x00020000, 0x065400cf, 0x00b80331, 0x4e4a0034, 0x262010d9, 0x5c05666a, 0x5e4a0880, 0x07405209, 0x01020e22, 0x080d3543, 0x022e2787, - 0x02021135, 0x0f34946a, 0x352d0f3f, 0x52504436, 0x2525493a, 0x2a3d3d7b, 0x5e446b4c, 0x5b314646, 0x465d2104, 0x21282847, 0x7e4b4420, 0x704e2974, - 0xc552f901, 0x11108551, 0x3bae764b, 0x55214b3b, 0x3a0f404d, 0x1b1c360f, 0x3a313d48, 0x1706070e, 0x3865393a, 0x21213e59, 0x03513e21, 0x1c1d322a, - 0x1a1a3438, 0x7318100d, 0x44613a65, 0xfd540325, 0x6c6c6bfc, 0xfe04026b, 0x44435c11, 0x16152b57, 0x015c8658, 0x10db82ef, 0x3d07732d, 0x08ff0a39, - 0x1505f606, 0x18000e00, 0x49002b00, 0x5d005300, 0x00006300, 0x5c333001, 0x2b200950, 0x23067e5a, 0x11012b26, 0x5c2ce24c, 0x113a146b, 0x15211133, - 0x41ed7602, 0x29252568, 0x68252529, 0x4beded41, 0x804b5c5c, 0x985b49fe, 0xa7013c3a, 0x7e2a292b, 0x292a7ea7, 0x5b5f602b, 0xfe5f5b6b, 0x2df70221, - 0x54558257, 0x822d5782, 0x82a92007, 0x1b612906, 0x24251919, 0x242f692f, 0x8807bf4c, 0x0e825c0c, 0x02c0fd2e, 0x61c2fd9f, 0x03000500, 0xfd06ab00, - 0x200aa756, 0x34a75659, 0xbd4c0520, 0x56082024, 0xae6b11c0, 0x56a4200d, 0x962006c0, 0x2105744c, 0x744c8307, 0x67612007, 0xd4560f00, 0x13a73a2b, - 0x4b13134c, 0x01effe12, 0x124a1211, 0xfe134a13, 0x279e0263, 0x5916279c, 0x82028216, 0x62fd2208, 0x31008200, 0x00220003, 0x03de06ab, 0x001b0061, - 0x006c0033, 0x41531300, 0x15e7561c, 0x2114114c, 0x5259012e, 0x0fbc5c10, 0x4d53d720, 0x0cdb2805, 0x68030c32, 0x56400179, 0x4c200abc, 0x212fb85c, - 0x214b2a02, 0x0218240a, 0x4b62fd01, 0x0f6e09a1, 0x27b55c08, 0x00002508, 0xff7c0107, 0x05840502, 0x0037001a, 0x0068005b, 0x009c0075, 0x00d500a9, - 0x21300100, 0x3307010e, 0x023e3736, 0x2e078866, 0x23060701, 0x012e2722, 0x37272627, 0x821e1716, 0x05157917, 0x07062222, 0x3e231482, 0x66213701, - 0xbf663a5e, 0x0d246b07, 0x33011e22, 0x2117246b, 0x71823521, 0x24052960, 0x0e222326, 0x82838302, 0x3202233c, 0x01821716, 0x8206c979, 0x213708c2, - 0xd7fe2603, 0x06020c03, 0x200d0d0b, 0x4b2b1c2b, 0x10101f36, 0x392c2d3d, 0x3423232d, 0x4f101314, 0x230d0e0c, 0x413b1c2b, 0x342b3b41, 0x0f3c0f12, - 0x01041104, 0x6669017c, 0x3b37245d, 0x3717fe3b, 0x11103c58, 0x5523232c, 0x2e389029, 0x1622212d, 0x6b010c17, 0x1e21097d, 0x067d6b22, 0x41415908, - 0x39fe5003, 0x33248f23, 0x323a1b1b, 0x141f291c, 0x103f1006, 0x3812120b, 0x1b50664c, 0x190f0e1c, 0x201e1d2d, 0x011a691a, 0x274e0152, 0x1014289e, - 0x1c0c1710, 0x32314e36, 0x113d2a2a, 0x210a0a10, 0x3e181516, 0x19111014, 0x0b3a410d, 0x1421413a, 0x3e020902, 0x57fd3ef9, 0x21374e66, 0xe66bd101, - 0x27262d0b, 0x2d2e2828, 0x14010135, 0x1d101b23, 0x0812e66b, 0x7f20683f, 0x2a2a2e20, 0x38310c2e, 0x16271c11, 0x20061906, 0x1b2e1d1d, 0x241b1a1e, - 0x45282b25, 0x1c1c1c3e, 0x00175a17, 0x01060000, 0x0502ff7a, 0x001a0586, 0x00360028, 0x0092006c, 0x00ca009f, 0x0c406800, 0x22263f68, 0x42062125, - 0x3e241883, 0x031e3701, 0x6906345f, 0x13220738, 0xa75e2521, 0x196b6d14, 0x36352122, 0x42068861, 0x52201e45, 0x35054568, 0x22225a39, 0x04030d2c, - 0x260e0e0a, 0x242b1f30, 0x111e3424, 0x44681e11, 0x3d450805, 0x3bec1010, 0x3a3b4141, 0x34034242, 0x0c05d6fe, 0x0c0d0b07, 0x2b1d2a21, 0x101f364a, - 0x2c2d3e0f, 0x23222d39, 0x10141335, 0x0d0d340e, 0x1c2b221b, 0x3c40403c, 0x0e12342b, 0x12070f3c, 0x10fd7c01, 0x103c5838, 0x2c238211, 0x38902955, - 0x22212e2d, 0x030c1716, 0x07c76d03, 0x2205cd5e, 0x42754141, 0x6b250549, 0x1c1b336b, 0x0548423b, 0x42400f21, 0x1c2e0748, 0x190f0e1b, 0x201d1e2c, - 0x011a691b, 0x3068b352, 0x49f2222d, 0x147542a4, 0x0a2a0a24, 0x76422114, 0x0174230b, 0x3b42b901, 0x605f212d, 0x38243a42, 0x39000600, 0xc70608ff, - 0x0f001505, 0x28001c00, 0x57003200, 0x00007a00, 0x07d15805, 0x30133034, 0x17121633, 0x30272603, 0x30070623, 0x2e333007, 0x536e0101, 0x0f995315, - 0x53132575, 0x16251473, 0x17011e17, 0x05884433, 0x0423113c, 0x06240a1e, 0x0a2406e2, 0x2182c964, 0x0af12187, 0x0a0b0c0b, 0x290bb13c, 0x306e9bfc, - 0x0230080d, 0x215d3bad, 0x21242421, 0x3b2e2f21, 0x1f343355, 0x3f114a0d, 0x4c4c4434, 0x12433544, 0x1f0e380e, 0x01c4026a, 0x090c0105, 0x82820421, - 0x0c092203, 0x623e0c82, 0x09373678, 0x18080521, 0x15520517, 0x23f86277, 0x7f18187f, 0x709f0223, 0x017041fe, 0x008231e0, 0x8c24d324, 0x4e53a501, - 0x2907211d, 0x3f124d53, 0xfe095216, 0x081001f0, 0x4b141651, 0x0263fe12, 0x1975769f, 0x42420e5d, 0xfd2fb10b, 0x07000061, 0x2c086741, 0x00200016, - 0x0035002a, 0x0064003f, 0x08077f87, 0x15070623, 0x061c6c32, 0xa5710e20, 0x3d362305, 0xa3713401, 0x7301200c, 0x785613ff, 0x1e9b7605, 0x08227541, - 0x01980222, 0x37504e10, 0x18171d34, 0x16090a22, 0xfe223928, 0x25a766d5, 0xa7252626, 0x25252197, 0x3bfd9721, 0x3f507d41, 0x5459a701, 0x0c054841, - 0x1c280b0b, 0x472b211c, 0x275a1c33, 0x272c2c2b, 0x2b282457, 0x1d012329, 0x34518541, 0x01050000, 0x0502ff27, 0x001a05d9, 0x0034002a, 0x0071003c, - 0x7314827d, 0x3e240959, 0x16323302, 0x6a197176, 0x7b5410e7, 0x085e650e, 0x5d0d5d65, 0x0c5b0d7c, 0xf402210a, 0x261f8676, 0xfb3c7302, 0x6be56f3a, - 0x402607ed, 0x4010c611, 0xea76b6fd, 0x135d6b12, 0x215e6426, 0x2e015a3f, 0x2009d354, 0x0796768c, 0x762d5921, 0x652e0896, 0x10100808, 0x5d341f2f, - 0xb6b69bfe, 0x345b9e02, 0x544e200b, 0x2f220a51, 0xf376020b, 0x0982540e, 0x2f515c25, 0x6f1d374d, 0x003d09fd, 0xce010200, 0x320516ff, 0x21000e04, - 0x00003b00, 0x22233005, 0x30352627, 0x27012e35, 0x42088226, 0x322f05b0, 0x1e171617, 0x02141501, 0x27331507, 0x74013e32, 0x2e220598, 0x436f2302, - 0x1e280808, 0x8e700402, 0x55272855, 0x1b2f2f88, 0x39383e19, 0x50c45050, 0x3e383950, 0xf09aa0bb, 0x1244603a, 0x44121313, 0x5f3b3a60, 0x5f310985, - 0x492b2cea, 0x414d0b4c, 0x735c5b41, 0x4142c27f, 0x34008222, 0x7fc24241, 0x1cfcfee1, 0x4c28f267, 0x9e453737, 0x4c373745, 0x290a8a28, 0x13000300, - 0xed06b700, 0x07825603, 0x51003d22, 0x20056167, 0x0f5f6103, 0x2206944b, 0x58033003, 0x30230753, 0x6c113023, 0x11230f2b, 0x82213023, 0x30352201, - 0x08058401, 0x15302123, 0x21070206, 0x72cfe330, 0x0d175d17, 0x70175b17, 0x03228a22, 0x01050109, 0x081e080c, 0x1f088282, 0x05974407, 0x12491236, - 0x08082007, 0x12081f08, 0x62771248, 0x41fe9a02, 0xcefe4101, 0x32067662, 0x010301b7, 0x31c8329b, 0x4432c831, 0xfe45eefe, 0x4b9d01fd, 0x7d622187, - 0x00002809, 0x004c0004, 0x82b406ab, 0x001426e3, 0x0028001e, 0x5de5835f, 0xa6421ddb, 0x01112107, 0x2032994a, 0x06e45db9, 0x5d601921, 0x2e2408e4, - 0x1302ac2a, 0x27075668, 0xd7fe5803, 0x07030c03, 0x2123244a, 0x244a0e13, 0x5db72006, 0x28270eec, 0xd52b292e, 0x680296fe, 0x402a065a, 0x14279e28, - 0x0c171010, 0xc549351d, 0x1011210f, 0x200ec549, 0x30008200, 0xff730104, 0x058d0502, 0x004c001a, 0x00b4007d, 0x171772e0, 0xe24a1720, 0x06072106, - 0x15220184, 0xf24a011e, 0x220d8405, 0x57222306, 0x27210511, 0x72178237, 0x324b0c22, 0x2627210a, 0x4b06596b, 0x01230636, 0x86323637, 0x23548555, - 0x2107010e, 0x20336841, 0x49648a01, 0x02211d51, 0x11926750, 0x28286208, 0x11101d1d, 0x12120a0a, 0x1d1a1718, 0x0b131333, 0x2011110b, 0x362c2c1f, - 0x1b24232f, 0x0f15141c, 0x111c0d4f, 0x3d1d2d12, 0x47404542, 0x39fe8003, 0x33238f24, 0x1e1d1b1c, 0x0f2a1b32, 0x050a0b0f, 0x0b0f4010, 0x26371311, - 0x1b516626, 0x190e0e1c, 0x1e1d1616, 0x1b691a20, 0xa7fd5201, 0x0b03d6fe, 0x08934903, 0x0f1e3735, 0x2d2c3e10, 0x23222d39, 0x0f141434, 0x0e0d0d4e, - 0x491b2c22, 0x0f210692, 0x05074c3b, 0xfe500224, 0xb34b2438, 0x1e2a2107, 0x2008b34b, 0x205e854b, 0x08b34b18, 0x08103572, 0x170b0c27, 0x291f2116, - 0x14191a20, 0x060d0c14, 0x151a0604, 0x251c1d14, 0x1a24242c, 0x0a0e0e19, 0x1511110a, 0x143e1716, 0x093d7222, 0x614b7520, 0x1c1c2609, 0x140e0e11, - 0x07644b13, 0x4b0e0d21, 0x29230565, 0x4b1f1f44, 0x05210566, 0x2b224c46, 0xbb4b6220, 0x4f042028, 0x56280627, 0x2e000f00, 0x8f033700, 0x6f135b5e, - 0x0526243f, 0x33270226, 0x4618011d, 0x45182235, 0x38c9158a, 0x26a65fa6, 0x194a4618, 0x46181520, 0x0122153d, 0x45183d37, 0x14941477, 0x11b34518, - 0x38a61191, 0x5fcc26a6, 0x18333521, 0x28103f46, 0xb2663a01, 0x0601c901, 0x05f6706b, 0x70272821, 0x012312f6, 0x185f18eb, 0x2d4f0346, 0x040e0301, - 0x040e040c, 0x7c0e380e, 0x0782390e, 0x52044618, 0x19640128, 0x0f7a1862, 0x6b820f39, 0x0e040b3a, 0x0f3d0f03, 0xbbfdfc02, 0x59594502, 0x4242b0fd, - 0x3c3d3c7f, 0x302f3837, 0x21077a71, 0x7a713430, 0x104a200a, 0x5503da45, 0x0000002f, 0x00470005, 0x03b906ab, 0x001e0061, 0x280b822f, 0x00700058, - 0x010e0100, 0x0ad76c07, 0x2005c67a, 0x6c148233, 0x3e7b06d9, 0xa4052024, 0x10013925, 0x6c103d0f, 0x4010046c, 0x1e791e10, 0x289f287e, 0x832bad2b, - 0x63028822, 0x2718d27a, 0x0f070606, 0x52023110, 0x2208209e, 0x4612f001, 0x9e02cf12, 0x5115acfe, 0x24912514, 0x412fbc2f, 0x3441fefe, 0x2ef0fed1, - 0x53404059, 0x7a414052, 0x1b350679, 0x762b4934, 0x1b34482c, 0x2424341b, 0x252b762c, 0x1b1a1b23, 0x2224a35c, 0x4e060000, 0x2f3a0893, 0x63004200, - 0x98008d00, 0x0000a000, 0x30213005, 0x36373035, 0x30353637, 0xdb493435, 0x37362a0a, 0x1e32013e, 0x15161701, 0x05814a14, 0x010e0725, 0x56052107, - 0x3521052a, 0x211d8234, 0x937c3637, 0x4d3d8306, 0x26210555, 0x20018227, 0x752f8522, 0x162305dd, 0x18011617, 0x4e085142, 0x122022f7, 0x240cf279, - 0x39fe4503, 0x091153d6, 0x2c055a55, 0x664c1c1c, 0x0f0e3750, 0x17160c0d, 0x0613531d, 0x3f490126, 0x0e3c2e2e, 0x23080082, 0x3f2e2e3c, 0x7c76767c, - 0x10181922, 0x0606070f, 0x18100f07, 0x19184519, 0x0706100f, 0x0f100607, 0x89fe1819, 0x26200e4f, 0x3afb3d74, 0x4f72726e, 0xf22c0c0f, 0x2a2ebf68, - 0x310c2f29, 0x261d1138, 0x2a06c349, 0x1e1b1717, 0x2b252435, 0x49222328, 0x672207c3, 0x2e7c1817, 0x18173307, 0xb6b8feb7, 0x1a0e0e5c, 0x2d24231a, - 0x24242c75, 0xa1821a1a, 0x1b1a0e29, 0x752c2423, 0x8323242d, 0x7703210e, 0x231f2d4f, 0x4f014f01, 0x080a2f4f, 0x00000020, 0xfe0b0106, 0x05f50568, - 0x001f000f, 0x00410039, 0x0055004b, 0x0100006f, 0x26222330, 0xfd4e013d, 0x4e062014, 0xf6671afd, 0x77012007, 0x05201287, 0x0d654118, 0x23112e08, - 0x33133311, 0x11333736, 0x5fe50223, 0x5b383539, 0x1211201f, 0x3625262a, 0x35368235, 0x7c292626, 0x27a1676b, 0x0c0d2d40, 0x402d0d0c, 0x2d098227, - 0x0c0d0d0c, 0xed02402d, 0xfb01c76d, 0xff793bfb, 0x15042b0c, 0x09230905, 0x18186219, 0x08821962, 0x80670539, 0x595a06b4, 0x68fe677b, 0x0732313a, - 0x3d2b2b34, 0x81554c3e, 0x82172b2c, 0x2c2b3d00, 0xad965581, 0x1aa24513, 0x2d252533, 0x24252e6a, 0x331b1b33, 0x6a2e2524, 0x3325252d, 0x2108ec67, - 0xe2762401, 0x2e292d09, 0x123e2b28, 0xb32c1249, 0x2cb32d2d, 0xfd390882, 0xfe9e02ff, 0xfdaaabab, 0x00000062, 0x00850002, 0x037b0654, 0x003400b8, - 0x357f644d, 0x08131a41, 0x1133133d, 0x69b70123, 0x3e103594, 0x35362c10, 0x39515144, 0x7a252649, 0x4c2a3e3d, 0x465f436c, 0x035b3145, 0x48465d21, - 0x21202728, 0x757e4a44, 0x03714e29, 0x2c0b06fa, 0x2381130b, 0x82138124, 0x82062708, 0xe007e1a1, 0x8c64829a, 0x8f022a2d, 0x22175a17, 0xec4040ec, - 0x38088222, 0x46037ffd, 0xaa0156fe, 0x0000bafc, 0x00b50003, 0x034b0663, 0x000b00a9, 0x19ad7b15, 0x76010921, 0xb63c11d5, 0x7f746801, 0xd8e1747f, - 0x34393934, 0xfe5a03d8, 0x58178ced, 0x0f370a17, 0x0a380f05, 0x88340982, 0x632eba2e, 0xe6894603, 0x01b2fe89, 0x3a3236c5, 0x31fd3632, 0x2205a176, - 0x7637c825, 0x00200aa1, 0x1b500082, 0x45612007, 0x7e2006bf, 0x4e46bd45, 0x210834ce, 0x0f3d1015, 0x10036d6d, 0x781f1040, 0xa0287f1e, 0x2bac2b27, - 0x02872283, 0x3b5c3f63, 0x0f0e0e0f, 0x43445c3b, 0x1f312805, 0x311f0d0d, 0x441f3145, 0x3122053b, 0x50501a03, 0x3edf4532, 0x50ef0121, 0x053a2c71, - 0x02ff5b01, 0x1a05a505, 0x3e003400, 0x81004800, 0x0000a200, 0x27262205, 0x9f793736, 0x103f5407, 0x2e070225, 0x54222301, 0x4b180f3f, 0x45891465, - 0x76290169, 0xb1570d59, 0x17162a0e, 0x5002010e, 0x252a7655, 0x14c77f26, 0x1e1a0b23, 0x0dc87f09, 0x442d0121, 0xb3350545, 0x2e2e2aac, 0x2cfeac2a, - 0x262b7654, 0x2b2a2425, 0x18424037, 0x11406916, 0x69190d21, 0x74760e40, 0x25210805, 0x58416924, 0x2e2d2275, 0x4e3b4811, 0x3d4e5858, 0x4d0a134b, - 0x3dfd7922, 0x2b232334, 0x31391616, 0x0e8c5427, 0x1b160a23, 0x128d5408, 0x07bf4b18, 0x282e2925, 0x8918012b, 0x2650693d, 0xa9b12a08, 0x2d404055, - 0x4b4d2d2c, 0x39301919, 0x5d665d6a, 0x06313e69, 0x0052492f, 0x00040000, 0x06b7002e, 0x005603d2, 0x0027000f, 0xe7411836, 0x15d55e15, 0x2d611320, - 0x6c622518, 0x70fc01c8, 0x2b09ad55, 0x6940ed83, 0x28282525, 0x40692525, 0x2005f660, 0xe8411881, 0x70022009, 0x022705bb, 0x2a2a2a9e, 0x827da87d, - 0x5e602705, 0x5e5b6c5b, 0x9e8222fe, 0x0106002d, 0x0502ff4b, 0x001a05b5, 0x821e0015, 0x004930ab, 0x00d8016e, 0x35300500, 0x35302130, 0x74371236, - 0x152e053d, 0x15302330, 0x33302530, 0x23301130, 0x145e010e, 0x183e2007, 0x2008d344, 0x073d4801, 0x22012e23, 0x07197e06, 0x01021e24, 0x006a2622, - 0x06816d08, 0x1d060722, 0x0e814618, 0x1133352b, 0x15010f23, 0x0f150e0f, 0x8205840d, 0x270b9108, 0x27012e05, 0x0b3f3537, 0x0a200284, 0x0b880584, - 0x17930620, 0x1133073c, 0xa1021533, 0xb52dc9fe, 0x5c5c8e2d, 0x07dbbffe, 0xaf028e23, 0x0e3c5c3e, 0x44181d0f, 0x072009bd, 0x0f260082, 0x3145310f, - 0x09820f10, 0x311f0739, 0x9683eefd, 0x41684927, 0x213b3b58, 0x11103c0f, 0x2c4d3b48, 0x182c2d2d, 0x220ad849, 0x1808bc2f, 0xeb2e3b4c, 0x2c0b222e, - 0x206ed20b, 0x2453d202, 0xa3a60101, 0xa54a18f2, 0xe2fe290e, 0x4140582f, 0x58835152, 0x07aa4518, 0x2c25243b, 0x24252b75, 0x1c1c1a1a, 0x25241a1a, - 0x252c752b, 0x031c3324, 0x55a9b106, 0x61481880, 0x3e342c0f, 0x09230931, 0x0b292949, 0xd4f5015a, 0x2254d0b1, 0xd00a280a, 0x41508953, 0x5f8655b6, - 0x5abcfd23, 0x08008200, 0x5c000235, 0xa4065f02, 0x03007105, 0x00001b00, 0x21152113, 0x17372701, 0x37153335, 0x15330717, 0x27071723, 0x07352315, - 0x35233727, 0xf948065c, 0x8cc204b8, 0x823c8c2a, 0xc6c62103, 0x02240887, 0x220246a5, 0x1a84118c, 0x01000026, 0x25ff5c00, 0xd6225b82, 0x59821400, - 0x2c323808, 0x35053e01, 0x032e3411, 0x5c23022c, 0x0134019d, 0xadc7f605, 0x3c2e5b7f, 0xfeccaa6f, 0xfee5fef8, 0xa502ada9, 0x7e725633, 0x47667a83, - 0x154ff90e, 0x91907d5b, 0x823e6886, 0x895b2047, 0x22012447, 0x832e012c, 0x823e2047, 0x06332747, 0xccfe9da4, 0x4889fbfe, 0x01080125, 0x9657011b, - 0x32ef8248, 0xff2a0005, 0x05d60638, 0x00040094, 0x00440040, 0x8208014b, 0x21302b9b, 0x22042107, 0x0e07030e, 0xeb570704, 0x34352e06, 0x17323336, - 0x3e32041e, 0x043e3703, 0x240c8337, 0x15161716, 0x391e8314, 0x2103032e, 0x15012115, 0x23250523, 0x3e342535, 0x16323302, 0x1e323617, 0x26821703, - 0x83061421, 0x32362105, 0x17250583, 0x3e37013e, 0x20478203, 0x83408436, 0x011e2228, 0x840c8631, 0x32332317, 0x2983021e, 0x15215b85, 0x29618514, - 0x012e2726, 0x2e353435, 0x6e832702, 0x23010e2e, 0x010e2722, 0x27220607, 0x030e0706, 0x06830c86, 0x0e820220, 0x2683b084, 0x2e210386, 0x08ba8202, - 0x0e34273b, 0x010e3501, 0x26272627, 0x34351617, 0x34370627, 0x22233637, 0xe4015c26, 0x0462fe46, 0x506154e0, 0x070f2f4f, 0x5b403c15, 0x934b522c, - 0x08354da7, 0x0f1b151d, 0x504f2f0f, 0x081b9a61, 0xe401ddd4, 0x10fe62fe, 0x01000196, 0x7afc9600, 0x1a240e04, 0x0e0b1b13, 0x080c171f, 0x1b110202, - 0x06021115, 0x2e380407, 0x0e101007, 0x0810020c, 0x130c0603, 0x06090a0c, 0x1339530b, 0x282c040d, 0x1e180c11, 0x1d0c2f41, 0x0e040d15, 0x2013241a, - 0x0c1e2714, 0x090a1114, 0x492f0909, 0x13012c21, 0x180f121a, 0x0f061004, 0x0f142521, 0x1c192a10, 0x12241017, 0x0e0d2109, 0x3b1a132e, 0x07071813, - 0x09380d06, 0x141b0e29, 0x340d111a, 0x0807122f, 0x0a111910, 0x1010160b, 0x0f171c10, 0x1a0c2218, 0x16110822, 0x1601030d, 0x03270617, 0x0801021a, - 0x01030110, 0x12070802, 0x6eb9021a, 0x52422fbb, 0x1d09173c, 0x184b424a, 0x4d4ea72d, 0x1d150f0d, 0x523c1716, 0x18972f42, 0x58019008, 0xfa25016e, - 0xa0faf0f0, 0x1a291d0d, 0x0e071b15, 0x0e111d11, 0x0b3a2617, 0x070d0c02, 0x10370505, 0x09100b09, 0x670c0804, 0x2741040d, 0x60373b1f, 0x11070e18, - 0x2617121d, 0x100f1509, 0x04435201, 0x05120438, 0x11083401, 0x2d0c1017, 0x04030b12, 0x0b423e08, 0x111d2f07, 0x10450b24, 0x331c1411, 0x090e1d0f, - 0x0c4d0a5d, 0x410c1818, 0x1617022d, 0x05081721, 0x141b0c11, 0x0e052226, 0x17031922, 0x0c0c0207, 0x02050203, 0x02020411, 0x82010402, 0x07022403, - 0x4300171a, 0x250807b3, 0x000b0049, 0x0100000f, 0x23153315, 0x23352315, 0x01353335, 0x05211521, 0x64b4b498, 0x28fbb4b4, 0xb8f94806, 0x0b834905, - 0xfdb46438, 0x0500465c, 0x3eff5300, 0xa7058c06, 0x28000600, 0x30002c00, 0x3d823700, 0x0b331129, 0x27113301, 0x83270723, 0x84032001, 0x020b2605, - 0x37021b35, 0x20018217, 0x29058413, 0x33213317, 0x35022b15, 0x2d853733, 0xa1042e08, 0xa0cecea0, 0x334ac936, 0x3f2f303f, 0x19373a3a, 0x37361031, - 0x36372727, 0x37193110, 0x2f3f3a3a, 0x4a333f30, 0x8af201c9, 0x7373bc8a, 0x082c8388, 0x01080247, 0xfe2201b0, 0x3a50fede, 0x72a93ed6, 0xfcfee3cd, - 0xdf6a8b54, 0x01d4fe92, 0x89eb0104, 0x0401eb01, 0xdfb7affe, 0xfe548b6a, 0x72cde3fc, 0x61d63ea9, 0x50fe3a61, 0x2201defe, 0x0000b001, 0xff5c0003, - 0x05a40637, 0x22bb82e0, 0x833b000d, 0x092326b7, 0x03112301, 0x22068411, 0x85012f01, 0x200585bf, 0x220f840f, 0x821f020f, 0x013f23c4, 0xc485011f, - 0x03280586, 0x1401c834, 0x98c81401, 0x023d0685, 0x4e7238d8, 0x60484b60, 0x27545a5a, 0x4554184b, 0x364b394b, 0x2539155a, 0x5a153925, 0x310c8236, - 0x4b185445, 0x5a5a5427, 0x604b4860, 0x5d01724e, 0x9484fcfe, 0x5d020422, 0xd183b982, 0xfefc3008, 0x04381bc8, 0x59512d42, 0x2a372166, 0x70844858, - 0x3b4b645a, 0x6c438f52, 0x528f4a65, 0x5a644b3b, 0x58488470, 0x6621372a, 0x422d5159, 0x82003804, 0x00023b00, 0x0622ff4b, 0x00d005b5, 0x002a0009, - 0x2d150500, 0x35211501, 0x0135010d, 0xad8b1713, 0xd98d3f20, 0x03070324, 0x7e836d01, 0x01260422, 0x26087a82, 0x6e4ed3fa, 0x32621f6d, 0x7d75756d, - 0x667d615e, 0x94494994, 0x5e617d66, 0x6d75757d, 0x6d1f6232, 0xa03e4e6e, 0x83a0cece, 0x03330803, 0xcd7efe54, 0x54b073ec, 0xb2cc426e, 0x318459a1, - 0x99353699, 0xa1598431, 0x6e42ccb2, 0x0190b054, 0x7efecd09, 0x00020000, 0x066aff5e, 0x007b05a2, 0x421f000b, 0x03300e5b, 0x0b270327, 0x37112702, - 0x1337021b, 0x15211337, 0x21066942, 0x7487c7fe, 0x02218687, 0x077742a7, 0xfef0fc33, 0xf7fe629d, 0x01befeb2, 0x8467fe65, 0xfe840705, 0x2f098267, - 0xf7feb2be, 0x749dfe62, 0x53000300, 0xaf063eff, 0x2c069342, 0x1300002f, 0x010d3521, 0x15032135, 0x05074121, 0x22058042, 0x8235021b, 0x09a04279, - 0x85030721, 0x42cb2026, 0x55220754, 0x8c424503, 0x363b2106, 0x210b8c42, 0x8c423b36, 0x42962006, 0x0428074b, 0xcecea003, 0x61fcfea0, 0x21268642, - 0x2f839bfe, 0x00820020, 0xc8000428, 0x38065eff, 0xb582a605, 0x1b000f2b, 0x00001f00, 0x15213525, 0x0b7f4303, 0x112e0b8b, 0x6c041123, 0xb4b4cc01, - 0xb4b464b4, 0x0684c0fc, 0x5a310227, 0x046464a0, 0x0595439c, 0x855cfe21, 0x0e022507, 0x4806b8f9, 0x00216282, 0x058f4701, 0x82a50221, 0x13002c63, - 0x5c211521, 0xb8f94806, 0x8246a502, 0x01053a1c, 0x0508ff56, 0x001505aa, 0x0039000f, 0x00650045, 0x0500008f, 0x23113335, 0x05715e06, 0x3311332a, - 0x07140115, 0x2307020e, 0x21058b55, 0x1a82012e, 0x18020e21, 0x20125250, 0x86501804, 0x08e84b0a, 0x280d1463, 0x011e3736, 0x06070617, 0x0fce6725, - 0x6a272621, 0x06321013, 0x01152107, 0x6507bc9c, 0x0b2c0b37, 0xa3a56e3d, 0xda671c02, 0x5b382c05, 0x0d2d2221, 0x0a010402, 0x18250e0f, 0x32122050, - 0x4275d9fe, 0xfe417542, 0x26958456, 0x57416949, 0x4e5b2276, 0x52180610, 0x5f0808aa, 0x39fee202, 0x1c3307cf, 0x1b323b1b, 0x05151e2a, 0x120a332c, - 0x664c3713, 0x0f1b1c50, 0x1d2c190e, 0x4f4f201e, 0x5bf85201, 0x3b6bf501, 0x430a270a, 0x5bbcfd77, 0x4049a501, 0x1b556b41, 0x29284d2a, 0x01013659, - 0x1a121214, 0x370e0f10, 0x2b31304c, 0x211e1e2a, 0x30441312, 0x3c3e9230, 0x3f3f3c0e, 0x01310482, 0x54a9b2ca, 0x4d2d5881, 0x392f314b, 0x5d655d6a, - 0x088b4a6a, 0x07b8682f, 0x2e2a292f, 0x1038310c, 0x1116271d, 0x0d9f6914, 0x1c1d1b39, 0x005c4344, 0x01040000, 0x0508ff2e, 0x001505c7, 0x00350013, - 0x7986004d, 0x11231303, 0x52300130, 0x302310b5, 0x86133033, 0x30112203, 0x4e218223, 0x276d1551, 0x2e012137, 0x37088e61, 0x230905c4, 0x19621809, - 0x09186218, 0x68050824, 0xb406b381, 0x2bfc687b, 0x323b3a6d, 0x609f02f8, 0xdcfe60bb, 0x48120102, 0x2cb32d12, 0x822db32c, 0xfffd2b08, 0xabfe9f02, - 0x61fd5501, 0x20846203, 0x0b61c322, 0x0ac44118, 0xec781720, 0x5c450805, 0x24242c51, 0x1b1a1b31, 0x0b2d0b32, 0x2c2e2822, 0x0a15152a, 0x515c130d, - 0x1b27262f, 0x01001e1b, 0xd3006b00, 0x31049506, 0x00004400, 0x15163201, 0x020e0714, 0x22230607, 0x2627052e, 0x22232627, 0x0e070607, 0x08108301, - 0x34352645, 0x3e373637, 0x1e323306, 0x17161705, 0x37323316, 0x013f013e, 0x4c06023e, 0x0b072a1e, 0x72326624, 0x42522a6e, 0x1b362f44, 0x70214913, - 0x4643305d, 0x0d101259, 0x2a1e1411, 0x140a0412, 0x4330381c, 0x8b264d40, 0x32310821, 0x15572a48, 0x1f0b0316, 0x1e2aca02, 0x41160f11, 0x1e723293, - 0x5539472a, 0x3184242e, 0x984643a8, 0x0a08151e, 0x141c1e2a, 0x2e221106, 0x2a443a52, 0x281d891d, 0x287c2a48, 0x130e0728, 0x3e008200, 0xff1e0003, - 0x05ce0649, 0x000b00cc, 0x004e002b, 0x06140400, 0x26222123, 0x21333634, 0x83222532, 0x3e0127b8, 0x17323301, 0x03822101, 0xde82e282, 0x21012729, - 0x01092722, 0x8413010e, 0x820620f3, 0x211582e6, 0x2c82012f, 0x32333625, 0x8503011f, 0x13172108, 0x3808e482, 0x151d0b02, 0x1d159ffe, 0x6101151d, - 0x158afe15, 0x6101021d, 0x19111a05, 0x0182010f, 0x010f1c8c, 0x151d078d, 0x82fe0f1c, 0x0f1977fe, 0xbcfeaafe, 0x0a9a1a05, 0x01011a0f, 0x08548203, - 0xd2050554, 0x050a0f0f, 0x03a38b05, 0x080e0a0f, 0x0e0111a4, 0x1d1d2a70, 0x1d5d1d2a, 0x04070715, 0x151410a6, 0xfd18effd, 0x150e0c80, 0x6802181d, - 0xfbd40115, 0x051410bb, 0x010a0f4a, 0x070403e1, 0x5b020404, 0x0f0a1007, 0x15013d02, 0x0f0a0706, 0x95e9fe0c, 0xf3840d09, 0xf3844620, 0xf3841420, - 0xf3ad5020, 0xf3830120, 0x25010f22, 0x1624e982, 0x05071415, 0x2506734b, 0x2330012f, 0xf8822726, 0x3f363726, 0x9c033601, 0x6f20f582, 0x9123f584, - 0xa2f9fc15, 0x52033ef5, 0x48040f0a, 0x04042d01, 0xfe110f0a, 0x0f0d89c7, 0xba05070a, 0x04030501, 0x6c020101, 0x3df7a307, 0x070b0e03, 0x01687906, - 0x05120b0e, 0x0f074d6d, 0x69030f0a, 0x08060503, 0x03020404, 0xf78a0cb4, 0xf784b020, 0xf7ae5220, 0x82363421, 0x361322f9, 0x24068337, 0x07060714, - 0x21048227, 0xf4832223, 0x31262722, 0x2306f141, 0x41051716, 0x5b20f982, 0xa523f984, 0xa354fb15, 0x0fb32ef9, 0x8d010f14, 0x0f140806, 0x02219605, - 0x2bf18312, 0x4f060709, 0x0a0f056b, 0x375a070d, 0x2908faa3, 0x0f0f0a8d, 0xbd54fe0a, 0x0a0f0806, 0x2dc70609, 0x01051305, 0x6a060601, 0x0a090691, - 0x4a790a0f, 0x00030000, 0x0649ff46, 0xf34105e2, 0x06ec4135, 0x37070222, 0x0f210985, 0x05854d01, 0x42233421, 0x1f2406eb, 0xce063601, 0x7320f982, - 0x8d23f984, 0xa2c7f915, 0xe6053ef9, 0x0f0a1206, 0xa3285f01, 0x0f0a0707, 0x0807e00b, 0x03070607, 0x0f026201, 0x4c06110a, 0x08f8a22a, 0x119e0451, - 0x04040a0f, 0x6b74e2fe, 0x0e0a0f04, 0x04049307, 0x01010704, 0x0a05040d, 0x7dcc110f, 0x02000000, 0x7cff7d00, 0xb6058306, 0x12000600, 0x11010000, - 0x17010b37, 0x06140011, 0x26012722, 0x17323634, 0xb7cc0501, 0x01b7e2e2, 0x163e2c0d, 0x821690fa, 0x70053505, 0x9afeb605, 0x01dffe46, 0x66014621, - 0x2c3e31fa, 0x16700516, 0xfa210582, 0x204f8d90, 0x294f881f, 0x23061401, 0x012c3122, 0x0f410027, 0x17162606, 0x05000112, 0x385c891e, 0xddfe011f, - 0xfebd14fe, 0x2c017588, 0x05291c1f, 0x0157016c, 0x1f120252, 0x386b8c2b, 0x052c1f12, 0x7801bdc6, 0x0706ae02, 0x1b242c1f, 0xa9fe82fd, 0x010aaefe, - 0x20c7842c, 0x20c7825f, 0x34c78583, 0x1b071105, 0x24112701, 0x37342622, 0x16323601, 0x05010714, 0x21c78376, 0xae8a1bfb, 0x6601a02b, 0xfe210146, - 0x9afe46df, 0x83d8841d, 0x85c583de, 0x224f87c7, 0x8600002f, 0x05f0444f, 0x3e373626, 0x24363706, 0x2606e243, 0x04060706, 0x8207020e, 0x07062202, - 0x0865860e, 0x1ffcfa28, 0x5331062c, 0x2a3f2322, 0x27493840, 0x01b60192, 0x1f04034c, 0xb61d272c, 0xa3d0e2fe, 0x461f3472, 0x33532b2f, 0x818c2608, - 0x0f1f2408, 0x5ad7760e, 0x7b569959, 0x92275d55, 0x2c0120a8, 0x032b1d1f, 0x865c4312, 0x9f3b6495, 0x78d96f78, 0x82001915, 0x00043400, 0x0644ff46, - 0x00b405ce, 0x000e000d, 0x00300020, 0x45330100, 0x23270a7d, 0x01032531, 0x4523010e, 0x09280a9d, 0x15163201, 0x06010714, 0x36231486, 0x4564ab04, - 0x87280a5d, 0xfeef6ffe, 0x111a05bc, 0x290a9542, 0x1f310215, 0x49fc0c2c, 0x06822916, 0x16b70324, 0x4a45ee02, 0x01a12609, 0x10bbfb48, 0x08664514, - 0x0284fe2a, 0x161f2c30, 0x2327fa12, 0x05220683, 0xa68223d9, 0x0001002e, 0x06090045, 0x001505cf, 0x3700001f, 0x201e2b46, 0x22104378, 0xd7450a20, - 0x8200201b, 0xff13286f, 0x05ed0654, 0x823e00af, 0x1732267e, 0x37011b16, 0x26038817, 0x07031702, 0x82270327, 0x010b2304, 0x03832707, 0x06033424, - 0x0f86010f, 0x37032c08, 0x3f303713, 0x37131701, 0x3f011a32, 0x018b0201, 0x32420239, 0x2c723939, 0x173f3939, 0x278c3939, 0x39847045, 0x1f2f4c39, - 0x825e3939, 0x3f6b2813, 0x03463939, 0x828c0706, 0x4824080e, 0x71543939, 0x39580724, 0x013d5539, 0x380a221a, 0x0239ae05, 0x47024bfd, 0x0bfd3838, - 0x38388d01, 0x530361fe, 0x20260582, 0x5602cbfe, 0x3282fb0d, 0x9760032a, 0x393985fb, 0x6ffe6502, 0xc8310582, 0x393924fd, 0x37da0208, 0xcffd6d5a, - 0x6d033939, 0x314a82fc, 0xfd06a005, 0x38ec649e, 0xf5e3fc38, 0x9f019a01, 0xdf82380b, 0xffa02008, 0x056006ce, 0x00070032, 0x15212500, 0x35231121, - 0x04940133, 0x7cbcfacc, 0x047846f4, 0x920078ec, 0x35212c23, 0x044c0221, 0xfe74fb14, 0x86ac01cc, 0x29279625, 0x5c030403, 0x14fe2cfc, 0x279e6402, - 0xa402bc28, 0x5cfde4fc, 0x279d1c03, 0x01740429, 0xfc9cfdec, 0x9dd403a4, 0x2c052927, 0x54fe3401, 0x8c04ecfb, 0x33232796, 0x82112315, 0xe40527c7, - 0x34fbf47c, 0xeb884405, 0xceff6328, 0x32059d06, 0xd0821f00, 0x15163226, 0x01011930, 0x42058045, 0x112006e9, 0x2c09f042, 0x23198003, 0x16117d02, - 0xfd152319, 0x21068320, 0x0c8483fd, 0x11e00233, 0x19233205, 0xcafdccfd, 0x230e2202, 0xfd121c19, 0x2306828a, 0xdefd6a04, 0x02230d84, 0x82000e76, - 0x00012a00, 0x063b0063, 0x00c5049d, 0x206b851a, 0x22628214, 0x87092722, 0x01303760, 0x09173236, 0x60063601, 0xfe0b2319, 0x123e1290, 0xc1fe51fd, - 0x0d821f12, 0x82700121, 0xaf02330d, 0x02123f01, 0x131923bc, 0x19f8fd10, 0xfecb0319, 0x0c83193d, 0x19080228, 0x0135fc19, 0x638219c3, 0x9f000322, - 0x6120cf82, 0x2124cf82, 0x47003400, 0x35256782, 0x07050e22, 0x24018506, 0x3e321523, 0x052b6105, 0x2136372a, 0x051e3235, 0x26070617, 0x2105d66b, - 0xfe6b1601, 0x15332505, 0x27052e22, 0x0b2f8482, 0x986b6825, 0x7748a48e, 0x348e8492, 0x8e101c30, 0x50fa2d0f, 0x57541d09, 0x4190797d, 0x5e542123, - 0x03212284, 0x2008865c, 0x301a8810, 0x0378ba04, 0x86642e1b, 0x92df86da, 0x0a163b84, 0x2a0e8f06, 0x45201302, 0x375d965c, 0x845e803b, 0x4ffd211f, - 0x78200886, 0xd5821987, 0xae000e24, 0x07820100, 0x02200285, 0x01240b86, 0x1f000d00, 0x02240b86, 0x3d000700, 0x03240b86, 0x99002900, 0x04200b86, - 0xdf202382, 0x05240b86, 0x0d010f00, 0x062a0b86, 0x37010c00, 0x01000300, 0x54850904, 0x01220b86, 0x09821a00, 0x02241785, 0x2d000e00, 0x03241786, - 0x45005200, 0x04200b86, 0xc3202382, 0x05240b86, 0xed001e00, 0x06240b86, 0x1d011800, 0x46304d83, 0x72007500, 0x61006e00, 0x65006300, 0x49002000, - 0x6f200782, 0x732e0f82, 0x75460000, 0x63616e72, 0x63492065, 0x0e826e6f, 0x1f825220, 0x2d826720, 0x2b826c20, 0x00007228, 0x75676552, 0x0882616c, - 0x6c004522, 0x63221982, 0x47827400, 0x3d826920, 0x4b002022, 0x65200f82, 0x20220f82, 0x51823a00, 0x1f856199, 0xb8823520, 0x32003122, 0x32220582, - 0x07823000, 0x00003332, 0x63656c45, 0x63697274, 0x65654b20, 0x203a2074, 0x0f82898c, 0x312d3527, 0x30322d32, 0x992a8232, 0x20bf8f5d, 0x26958256, - 0x00730072, 0x826f0069, 0x822020df, 0x0030246b, 0x842e0031, 0x00303007, 0x72655600, 0x6e6f6973, 0x31303020, 0x8230302e, 0x41598d10, 0x16411117, - 0x00002306, 0x008b0002, 0x0c8b0120, 0x63200b84, 0xca080582, 0x00020001, 0x01020103, 0x01040103, 0x01060105, 0x01080107, 0x010a0109, 0x010c010b, - 0x010e010d, 0x0110010f, 0x01120111, 0x01140113, 0x01160115, 0x01180117, 0x011a0119, 0x011c011b, 0x011e011d, 0x0120011f, 0x01220121, 0x01240123, - 0x01260125, 0x01280127, 0x012a0129, 0x012c012b, 0x012e012d, 0x0130012f, 0x01320131, 0x01340133, 0x01360135, 0x01380137, 0x013a0139, 0x013c013b, - 0x013e013d, 0x0140013f, 0x01420141, 0x01440143, 0x01460145, 0x01480147, 0x014a0149, 0x014c014b, 0x014e014d, 0x0150014f, 0x01520151, 0x01540153, - 0x01560155, 0x01580157, 0x015a0159, 0x015c015b, 0x015e015d, 0x0760015f, 0x45696e75, 0x86304630, 0x86312007, 0x86322007, 0x86332007, 0x84342007, - 0x30312107, 0x31212785, 0x21278530, 0x27853031, 0x85303121, 0x30312127, 0x35202787, 0x36202f86, 0x37200786, 0x38200786, 0x39200786, 0x41200786, - 0x42200786, 0x43200786, 0x44200786, 0x45200786, 0x46200786, 0x31210785, 0x20078630, 0x86078631, 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, - 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, 0x8631207f, 0x3032217f, 0x32217785, 0x86078631, - 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, 0x8632207f, - 0x8632207f, 0x3033217f, 0x33217785, 0x86078631, 0x8633207f, 0x8633207f, 0x8633207f, 0x8633207f, 0x8633207f, 0x8633207f, 0x8633207f, 0x8633207f, - 0x8633207f, 0x8633207f, 0x8633207f, 0x8633207f, 0x8633207f, 0x3034217f, 0x34217785, 0x86078631, 0x8634207f, 0x8634207f, 0x8634207f, 0x8634207f, - 0x8634207f, 0x8634207f, 0x8634207f, 0x8634207f, 0x8634207f, 0x8634207f, 0x8634207f, 0x8634207f, 0x8634207f, 0x3035217f, 0x35217785, 0x86078631, - 0x8635207f, 0x8635207f, 0x8635207f, 0x8635207f, 0x8635207f, 0x8635207f, 0x3935287f, 0x01000000, 0x4500ffff, 0x002607c9, 0x14000c00, 0x15820400, - 0x00000224, 0x03860100, 0x00240985, 0x31cbd6df, 0x002c1182, 0x9ffffde0, 0x00000000, 0xdb5c95e1, 0x9b97fa05, 0x0000342b, + 0x0d824700, 0x85000b24, 0x0f82b500, 0x2e005b26, 0x5c004b01, 0x2a200184, 0x53200582, 0x4b320382, 0x53005e00, 0x5c00c800, 0x2e015601, 0x1e006b00, + 0x01844600, 0x85007d21, 0x00462201, 0x214b8245, 0x018b00a0, 0x63006327, 0xaa009f00, 0x21cd8401, 0xc1820300, 0x1c200383, 0x0123e785, 0x8403000e, + 0x001c2409, 0x82f20004, 0x00082e1b, 0x00020008, 0xe0200000, 0xff5be1f4, 0x260984ff, 0xff00e1f0, 0x82e3ffff, 0x8400200b, 0x0006222b, 0x260b820e, + 0x00050004, 0x82070006, 0x8209202f, 0x000b24d1, 0x820d000c, 0x000f2617, 0x00110010, 0x32858212, 0x00150014, 0x00170016, 0x00190018, 0x001b001a, + 0x821d001c, 0x1f4a08af, 0x21002000, 0x23002200, 0x25002400, 0x27002600, 0x29002800, 0x2b002a00, 0x2d002c00, 0x2f002e00, 0x31003000, 0x33003200, + 0x35003400, 0x37003600, 0x39003800, 0x3b003a00, 0x3d003c00, 0x3f003e00, 0x41004000, 0x43004200, 0xeb824400, 0x00463c08, 0x00480047, 0x004a0049, + 0x004c004b, 0x004e004d, 0x0050004f, 0x00520051, 0x00540053, 0x00560055, 0x00580057, 0x005a0059, 0x005c005b, 0x005e005d, 0x0060005f, 0x00620061, + 0x82640063, 0x850620cc, 0x22cd82d0, 0x82020100, 0x00022105, 0x0123008d, 0x8d030000, 0xd10d4011, 0x6f043b22, 0x2c21d482, 0x08018500, 0x84003ce3, + 0x6404c600, 0xc4052405, 0x5807d406, 0xce08ea07, 0x76093409, 0xfe0ab00a, 0xee0b880b, 0xe60c2e0c, 0xd80d6a0d, 0xca0e640e, 0x5a10a40f, 0x7e11bc10, + 0x9212c611, 0x8c130c13, 0x9814d813, 0x38164815, 0x80171217, 0xae1b1e1b, 0xc01c341c, 0x081fea1d, 0x8020bc1f, 0x8a213421, 0x8622fc21, 0x2a27c823, + 0xb028ca27, 0xc6295229, 0xbe2a0a2a, 0xf42ba42b, 0x442e162e, 0x8e2e682e, 0x0c30f02f, 0xd2306a30, 0x56311e31, 0xde31ac31, 0xba32ec31, 0xc6336433, + 0xbc344034, 0xb6353a35, 0x1a36de35, 0x90364236, 0x1c37e436, 0x9e378c37, 0xc637b237, 0xee37da37, 0x14380238, 0x7c384a38, 0x2239e638, 0x02006e39, + 0x00003b00, 0xaa041502, 0x07000300, 0x01b12e00, 0xb23c2f00, 0xed000407, 0x0506b132, 0x03b23cdc, 0x220a8202, 0x8303b100, 0x83052016, 0x07b22716, + 0x3cfc0106, 0x178301b2, 0x21113338, 0x11212511, 0xda013b21, 0x640161fe, 0xaa049cfe, 0x043b56fb, 0x52820034, 0xff80fc25, 0x828003f5, 0x82012009, + 0x05002e59, 0xfd212521, 0xf99a0533, 0x0b0007b3, 0x0815820b, 0x09020325, 0xf7040f00, 0x1b00fd03, 0x2f002500, 0x30010000, 0x15163221, 0x07010e14, + 0x16150706, 0x1e171617, 0x82141501, 0x010e2f0b, 0x21372123, 0x013d3632, 0x21232634, 0x09853335, 0x012b4d08, 0xbd010a02, 0x311f8e7d, 0x1e1e2020, + 0x1f202525, 0x2214132b, 0xfe385f23, 0x1801a217, 0x3f48483f, 0x3dfce8fe, 0xfc3d4242, 0x778dfd03, 0x0d324f38, 0x0208030c, 0x1c1c0d0d, 0x363c3f58, + 0x2c272735, 0x313e428b, 0x3e88423e, 0x3e3a2e39, 0x30088f83, 0x63009100, 0xa9036f06, 0x17000f00, 0x00002b00, 0x30273025, 0x30073021, 0x37123623, + 0x17121633, 0x06233001, 0x26333007, 0x00113001, 0x30333027, 0x2f038513, 0x11070206, 0x4cea0230, 0x8a49c7fe, 0xab2fbf2f, 0x34080382, 0x3c068dfe, + 0x023cf73d, 0x17f7fe84, 0xcb04cc9b, 0x1dce3794, 0x8ce3e363, 0x8c8c2e02, 0x028cd2fd, 0xb9b9b9c9, 0x4a01f0fd, 0xfe28d401, 0x6175018b, 0xfe329afe, + 0x218282b3, 0x04820300, 0x0007ab3a, 0x58036103, 0xba038c03, 0x26370000, 0x30332702, 0x1d17021d, 0x031d1704, 0x14910290, 0x478211a3, 0x719126f1, + 0x1e268695, 0x3e331701, 0x73413701, 0x220d8606, 0x8937033d, 0x8a042002, 0xa317850b, 0xf1298211, 0xa1719126, 0x06332e86, 0x26230702, 0x012e2702, + 0x010e2327, 0x2d0d8207, 0x27262205, 0x1e37013e, 0x35323301, 0x18832634, 0x26272629, 0x33363435, 0x82171632, 0x012e2b21, 0x15062223, 0x17161714, + 0x0285011e, 0x06141523, 0x223b8225, 0x82272223, 0x26272628, 0x37363734, 0x823c823e, 0x84072021, 0x011d352c, 0x32331614, 0x3d023e37, 0x33352301, + 0x188e2311, 0x0168185e, 0x043400cc, 0x040c040e, 0x390e030e, 0x390f7b0e, 0x030f030e, 0x040e030d, 0x012761cc, 0x19621864, 0x833a0e7a, 0x820c205c, + 0x3c0f3b5c, 0x4bf0020f, 0x2f0b276e, 0x314d1d0c, 0x09342a77, 0x2b5a0a24, 0x4865702a, 0x13822463, 0x401a3c08, 0x16373731, 0x24093116, 0x15443009, + 0x02741316, 0x4f090c43, 0x2b2c3448, 0x12132021, 0x22221212, 0x375a3d5f, 0x11531e38, 0x50483c46, 0x1a1e4850, 0x7c16271a, 0x70b75adf, 0xcd70be01, + 0x4d0010b8, 0x1a2d4701, 0x67191968, 0x10014419, 0xf0fe4444, 0x220a8244, 0x101a6819, 0x47015b01, 0x084d4741, 0x42fe70af, 0x13014570, 0x19671a45, + 0x451a6719, 0x0b45edfe, 0x2a0b3638, 0x6d2c290b, 0x020d2f2c, 0x2c150207, 0x615c512d, 0x290a3431, 0x2d24250b, 0x15162a34, 0x0208020c, 0x17171f0b, + 0x6865293f, 0x133e306e, 0x42292a13, 0x4242b842, 0x27282a2a, 0x31314726, 0xa4525c39, 0x09085c52, 0x3b1e3121, 0x009efe57, 0x52000700, 0xae0602ff, + 0x1a001a05, 0x38002400, 0x53004900, 0x80007800, 0x22050000, 0x37343526, 0x3337023e, 0x07060706, 0x3307010e, 0x3233013e, 0x06141516, 0x013d3227, + 0x1d222334, 0x26031401, 0x16332702, 0x17161712, 0x36373633, 0x272a8212, 0x23210702, 0x17322111, 0x07272783, 0x012e2313, 0x48372327, 0x15270779, + 0x27262201, 0x8234012e, 0x3637222a, 0x21238233, 0x58450617, 0x3698080b, 0x17011e37, 0x1105010e, 0x11011501, 0xa2013501, 0x0f106d6b, 0x8a314f3a, + 0x1e2a2a3b, 0x0c09251d, 0x51314711, 0x6d6a6e5f, 0x211f6c6d, 0x136b2183, 0x0e0e1450, 0x140e0e0c, 0x2169144e, 0x8f012083, 0x56090165, 0x3a392b2c, + 0x56087180, 0x249b7817, 0x9b242626, 0x5d3aad02, 0x23232122, 0x2e2e2221, 0x3333563b, 0x12490d1f, 0x4c44353e, 0x4236444c, 0x0e380f12, 0xe4fe6920, + 0x72fe2801, 0x84fdd8fe, 0x3c3d3c7f, 0x2d22606f, 0x28292829, 0x312f3256, 0x776a676a, 0x77197755, 0x56080282, 0x01701803, 0xfe466fbf, 0x4f4e46e7, + 0x01464e4f, 0xfe6f4619, 0x9e027041, 0x4d603433, 0xe7fe1160, 0x5536c913, 0x2a3e2a26, 0x8efede26, 0x842a2a27, 0x2a2a84b6, 0x25251414, 0x3929074a, + 0xa1525f32, 0x3b365e53, 0x4a092108, 0x34feb24e, 0xfe821001, 0xfecd0192, 0x820082ef, 0x00043f00, 0x06ab0020, 0x006103e0, 0x0015000b, 0x0074004a, + 0x11303700, 0x16322130, 0x012b0614, 0xb7490119, 0x46012008, 0x162205ce, 0x12821617, 0x2806d046, 0x3435012e, 0x3233023e, 0x08d14617, 0x1506072c, + 0x011f1614, 0x1415011e, 0xcd46020e, 0x022e2105, 0x16212485, 0x0cc64617, 0x3e373623, 0x06c84601, 0x0121d108, 0x66665d20, 0x2aadb45d, 0xad292f2e, + 0x7655dd02, 0x0d320c2a, 0x362b2b23, 0x3b2e4141, 0x620a270a, 0x563d2162, 0x37384c36, 0x0d320d28, 0x39384b1a, 0x37342020, 0x205d643c, 0xdd025a3f, + 0x4c5e0a04, 0x294a663c, 0x426c4d2a, 0x59237d5a, 0x503d5113, 0x20506161, 0x16161d1c, 0x5ff38a19, 0x6d9e02b7, 0xf5fe6db9, 0x282b6a01, 0xfd2b292e, + 0x0b343db6, 0x162b0c2f, 0x27313a17, 0x07020c2e, 0x515c1202, 0x1b31482c, 0x0b321a1b, 0x29210b2d, 0x2a2c1817, 0x130c0b29, 0x4d2f505d, 0x31711d37, + 0x82572d40, 0x58815454, 0x3447502e, 0x5d663b2f, 0x09665d6e, 0x2f0f1008, 0xfe5d3420, 0x0005009b, 0x06ab002e, 0x006103d2, 0x001f0012, 0x0134002a, + 0x25000046, 0x28076842, 0x1e32013e, 0x020e1402, 0x05834227, 0x1d06222a, 0x05161401, 0x17322111, 0x2c0f5e41, 0x27012e05, 0x17071d23, 0x1d170f1d, + 0x8502870e, 0x3305820b, 0x11231101, 0x17121633, 0x3317011e, 0x3d27053d, 0x0e3d270f, 0x0b880287, 0x3311042d, 0x02262311, 0x603c3301, 0x82232223, + 0x7a5f3a02, 0x23234460, 0x483c6144, 0x4f904f4f, 0x01df014f, 0x2b2c5609, 0x9aa35657, 0x26008225, 0x0863029a, 0x440c0922, 0x62280732, 0x22852175, + 0x0d082308, 0x76231088, 0x42ac8521, 0x282d074c, 0xb6845428, 0x5a275484, 0x52a2525d, 0x3304845d, 0x339e024f, 0xfe67c134, 0x256901f1, 0x26293d2a, + 0x155315b2, 0xae4d7f44, 0xfe02284d, 0x439e0270, 0x4043f4fe, 0x01268088, 0x4362fd90, 0x5f430c01, 0x00a53a05, 0x035b0654, 0x002f00b8, 0x00540048, + 0x2500005e, 0x010e2330, 0x022e2223, 0x078a4435, 0x20083e43, 0x06e34906, 0x82373621, 0x013d3501, 0x11213523, 0x32210123, 0x06141516, 0x07010e07, + 0x17021e15, 0x07300b82, 0x2123020e, 0x37323337, 0x34013d36, 0x012b2627, 0x080a5d4d, 0x0e04e541, 0x804a6074, 0x3035345c, 0x53434330, 0x122b9c71, + 0x6518124a, 0x7979634d, 0x24242863, 0x10101b1b, 0x772f01ac, 0x72010601, 0x141b7769, 0x1a1a3415, 0x1311353d, 0x4f391011, 0x8768fe2f, 0x821e35e9, + 0x356a0800, 0x3733d2e9, 0xe2d23337, 0x6d38503d, 0xa2686aa2, 0x1c1c3738, 0x2b0b5963, 0x7f493b0b, 0x7f758875, 0x14130b0a, 0x41271e1d, 0x0341fe75, + 0x2f627646, 0x14151542, 0x16010703, 0x3525242f, 0x412d2c32, 0x1c1b7525, 0x1b342933, 0x3033711c, 0x00333027, 0x00050000, 0x06ab0035, 0x006103cb, + 0x0046001f, 0x00600053, 0x25000066, 0x1b442622, 0x37362c13, 0x0617011e, 0x22210607, 0x8227012e, 0x37362321, 0x0646013e, 0x2a148205, 0x17163207, + 0x3233033e, 0x4315021e, 0xa8081058, 0x36352135, 0x11333712, 0x15231533, 0x23113325, 0x4e01010e, 0x49269683, 0x76584169, 0x48115b21, 0x59594d3b, + 0x124c3d4d, 0x210e3a0f, 0xfc013c3d, 0x113c5738, 0x23232c10, 0x39902955, 0x22212d2d, 0x020d1617, 0x1c0b0104, 0x2a203025, 0x211d3548, 0x3b35573e, + 0x42754141, 0xfea10242, 0x2eb52dc9, 0xfe5b5b8e, 0x2307dbbe, 0xa9b1ac8e, 0x2e588154, 0x30324b4d, 0x665d6a39, 0x313f6a5d, 0x49092309, 0x44242929, + 0x493d3030, 0x53363680, 0x2627291c, 0x2d2d2928, 0x15010136, 0x1c0f1b23, 0x332f4d37, 0x58213c53, 0x3d0d3d3e, 0x0804843e, 0x5d834d2f, 0x4a2a014a, + 0x83553afe, 0x3b6301d8, 0x000800ed, 0x0608ff4b, 0x001505b5, 0x0016000c, 0x0028001c, 0x0068005c, 0x009b0072, 0x11301700, 0x12354430, 0x83110121, + 0x113323ec, 0x01871521, 0x4c06a645, 0xb44c2d75, 0x13232406, 0x85031333, 0x010f2a0b, 0x013e2533, 0x010e2337, 0x82028207, 0x27028213, 0x17011e23, + 0x33112311, 0x2005af4c, 0x821e8233, 0x11332902, 0x0901b023, 0x582c2c56, 0x30075644, 0xf466ca01, 0xfe850186, 0xfe0301e1, 0xfa1f01fd, 0x0cdd4be7, + 0x4b092521, 0x0c2207dd, 0xdd4b0c2e, 0x38300811, 0xe1092209, 0x64082309, 0xf1ca81c9, 0x0d030e04, 0x3b040e03, 0x02d002b0, 0x080b0104, 0x5716071f, + 0x15571516, 0x0b081f08, 0x62010501, 0x12481278, 0x09200b82, 0x54080382, 0x77124712, 0x9f02f862, 0x67c23334, 0x6901f1fe, 0x293e2926, 0x02bcfd25, + 0x5abbfd9f, 0xc45a9f02, 0x035acf58, 0x0b353957, 0x2c2a0b2b, 0x0c2f2c6e, 0x14020802, 0x5d512c2d, 0x0a343160, 0x25240a29, 0x162a342d, 0x08020b16, + 0x17200a03, 0x64293f17, 0x7c1f0b69, 0x8202821f, 0x01613340, 0x104111e0, 0xd3114110, 0x144c1390, 0x2d134b13, 0x02822db6, 0x13491322, 0xfe290b82, + 0x279f0263, 0x5816279d, 0x82028216, 0x61fd2c08, 0x04000000, 0xab002900, 0x4703d706, 0x3a220553, 0x53474600, 0x1140471a, 0x14011d26, 0x32331617, + 0x20070443, 0x0adc4125, 0x01292108, 0x66655e20, 0x29adb35d, 0xad292e2e, 0x95840f03, 0x41694926, 0x223b3b57, 0x110f3d0f, 0x2c4e3b48, 0x4e350082, + 0x0e134c3c, 0x3c220f3a, 0x012d013d, 0x01bffeae, 0x01ddfe23, 0x10054741, 0x54a9b134, 0x272d5981, 0x22084b26, 0x35393008, 0x5d665d35, 0xc6423535, + 0x020b2a07, 0x60ba609e, 0x000060c4, 0x825f5103, 0x6d01082e, 0x930502ff, 0x44001a05, 0x6d005500, 0x9e299182, 0xd500ab00, 0x0000e300, 0x05584725, + 0x0622232c, 0x27012e07, 0x013e3736, 0x1b443637, 0x0e072205, 0x098f5202, 0x82070621, 0x22232a01, 0x3727022e, 0x17161716, 0x09d6481e, 0x44013521, + 0x37370664, 0x3233023e, 0x27061016, 0x3d023e32, 0x022e3401, 0x07010e22, 0x4f011d06, 0x258205a1, 0x34350225, 0x48353736, 0x322005f2, 0x634a4282, + 0x1e152405, 0x82141501, 0x0ce1476b, 0xee471320, 0x8325200b, 0x2307211e, 0x02829982, 0x27262223, 0x232d8206, 0x2e272223, 0x37204f82, 0x3320b083, + 0x07204c85, 0x7382c988, 0x02165508, 0x3a3c3e4b, 0x17433031, 0x0f0c300c, 0x21331413, 0x502f2b20, 0x0a0a213a, 0x1d1a2f24, 0x13131a19, 0x1f1f2216, + 0x2f362c2d, 0x0f2a3647, 0x0e0e0c50, 0x1c2e1112, 0x3f45413e, 0x3e980247, 0x0f0e3c5c, 0x5c3c0e0f, 0x76767d3e, 0x1e31237d, 0x311e0e0e, 0x071f3145, + 0xb3080082, 0xfd31100f, 0x3d593bf8, 0x343c4a1f, 0x53371e3e, 0x38292968, 0x343f0f0f, 0x10104a3d, 0x3c3a5a3c, 0x42794242, 0x3b373d42, 0x3a3a6f3b, + 0x16165203, 0x90295645, 0x21225b38, 0x05010d2d, 0x0e0e0a01, 0x2a203026, 0x1d352424, 0x1f1f1110, 0x2b383656, 0x10113c2c, 0x42413bec, 0x41413b3a, + 0x07293599, 0x262c312e, 0x160a2a0a, 0x0a1d1415, 0x412d1709, 0x191a2028, 0x04061928, 0x150d0d06, 0x2c253914, 0x0e191a48, 0x2c21140e, 0x11143e17, + 0x0d0c0c11, 0x3407343a, 0x6afe5c36, 0x4040582f, 0x40415253, 0xfeb72f59, 0x1c5cb6b8, 0x752c4933, 0x1c34482c, 0x2424341c, 0x2e080982, 0x1a1a2325, + 0x1d06031c, 0x432a4734, 0x13071151, 0x40263a4e, 0x0c0d192d, 0x2620202d, 0x07134e3a, 0x2a435111, 0x1d342423, 0x13323857, 0x82373732, 0x01382704, + 0x102e303a, 0x0484302e, 0x491f2a08, 0x556b4041, 0x284e291b, 0x01365a28, 0x12121401, 0x0f0e0f1b, 0x32304c36, 0x1e1d2b2a, 0x44131222, 0x3f933030, + 0x3e3c0e3c, 0x2104823e, 0x0082003f, 0x78000437, 0x8806b700, 0x0f005603, 0x37002700, 0x00004000, 0x30113001, 0x2a038423, 0x30213035, 0x30133015, + 0x8a333035, 0x201b830f, 0x22178233, 0x82273021, 0x0c815427, 0x07010e3c, 0x01012e33, 0x01c86cac, 0x5b5b53fc, 0x5c5c2401, 0xfb3c2b02, 0x99266f3a, + 0x03828826, 0xd7fe4308, 0x10411005, 0x024010c6, 0x02c2fdf5, 0xfd60603e, 0xee0158c2, 0x12fe5858, 0x70b5b558, 0x7070be01, 0x027042fe, 0x31c5313a, + 0x0000c531, 0x00080005, 0x03f806ab, 0x00340061, 0x0046003e, 0x00580050, 0x9f4b3700, 0x23272a32, 0x33132307, 0x01171216, 0x90a18623, 0xfd420811, + 0x0d2a7655, 0x2b230d31, 0x4140372b, 0x280a3a2e, 0x2262620a, 0x4c36563c, 0x0d273838, 0x4b1a0d32, 0x1f203a37, 0x653c3634, 0x5a3e215d, 0xfa3dd002, + 0x89e46e3b, 0xfe269826, 0x401104d7, 0x4010c510, 0x13912803, 0x824bac20, 0xb50b242c, 0x419e02b5, 0xfd210a00, 0x20108ef7, 0x34008200, 0x00600003, + 0x03a006ab, 0x00150061, 0x004b002b, 0x03302500, 0x0eaa4630, 0x07020624, 0xb1413521, 0x48052013, 0x012d1d87, 0x1270db3c, 0x2b0a1247, 0x2b0b040b, + 0x2509820b, 0x2595256d, 0xc7414b01, 0x84012605, 0x4a269683, 0x14614868, 0x9e02b728, 0x2737dd37, 0x0282279b, 0xc3830882, 0x2007d641, 0x1741480b, + 0x042acb82, 0xb7004700, 0x5603b906, 0xcd820b00, 0x29002122, 0x46183f46, 0x01280a1b, 0x23112311, 0x48152135, 0x28074c4d, 0x292e2e29, 0x011402ad, + 0x070246ad, 0x6c7b0125, 0x46fc01c8, 0xc1200f08, 0x2106ea45, 0x79423e02, 0x207f8205, 0x08934f06, 0x27001e34, 0x4e003d00, 0x7e005800, 0x22050000, + 0x34352627, 0x01843637, 0x0e333025, 0x4f060702, 0x17200594, 0x2408954f, 0x14011d22, 0x06944f01, 0x200a1256, 0x2d964f06, 0x4f010e21, 0x033f1297, + 0x37366b7a, 0x1d1d0f10, 0x8a312827, 0x123a553b, 0x110c0a12, 0x30513147, 0x6d6a6e2f, 0x4f09fed9, 0x04260692, 0x050c0513, 0x944f0512, 0x4d142212, + 0x17944f14, 0x0e3a0e22, 0x350e954f, 0x7f4242fd, 0x363d3d3c, 0x232f3038, 0x2b50522d, 0x312f332a, 0x904f3535, 0x691a2213, 0x4f02821a, 0x2e221192, + 0x924f2eb6, 0x20082215, 0x0d934f08, 0x0106003c, 0x0508ff17, 0x001505e9, 0x0017000b, 0x004b002d, 0x005f0055, 0x11300500, 0x03823330, 0x15302122, + 0x0b870784, 0x3305c650, 0x37363435, 0x1632013e, 0x14011e17, 0x010e0706, 0x37363227, 0x3d2b0182, 0x26273401, 0x23012e27, 0x82070622, 0x07bf4601, + 0x4f110521, 0xcc2412d1, 0x6311016c, 0x22080382, 0x6a4210fd, 0x29292626, 0x836a2626, 0x2a26256b, 0x6b25262a, 0x17402641, 0x0c0c0d16, 0x4017160d, + 0x873f2826, 0x013f220b, 0x0c8348f4, 0x9f02f825, 0x8460c1fd, 0x57032b04, 0x822b2c2d, 0x2b825455, 0x09832d2c, 0x0883a920, 0x191b612d, 0x2e252519, + 0x25252e69, 0x8c1b1919, 0x02562f0c, 0x6eb86e9f, 0x6a01f5fe, 0x282e282c, 0xf082002c, 0x000a0036, 0x03f606ab, 0x00120061, 0x003a0030, 0x004a0044, + 0x2e222500, 0x4f064050, 0xe6af0749, 0x1133112f, 0x2c011521, 0x294c6a42, 0x426a4c29, 0x9b078541, 0x665d21e0, 0x08086449, 0x6d130222, 0x2dac1001, + 0x54548257, 0x2d2d5882, 0x82a88258, 0x1b602d57, 0x2425191a, 0x242e6a2e, 0x1b1a1925, 0x55200c8c, 0x280e6d50, 0xfd9e02c1, 0x000060c2, 0x2ccb8204, + 0x03b606ab, 0x00130061, 0x002d0022, 0x06d34366, 0x30153023, 0x26038821, 0x30013011, 0x83173233, 0x070124e8, 0x52012b06, 0x272405ba, 0x11012b26, + 0x51064d58, 0x2724077e, 0x012e2726, 0x35220282, 0x80513734, 0x1506230d, 0x80511714, 0x07240806, 0x010e0706, 0xfea3014a, 0xfe1301ca, 0xedc301ed, + 0x4a343441, 0x344a2929, 0xeded4134, 0x2e2e5c4b, 0xdc02804b, 0x2705de45, 0x372b2a24, 0x17174140, 0x2405df45, 0x563d1111, 0x07e04535, 0x384a2b08, + 0x1a1a3f3a, 0x5d653c36, 0x201f1011, 0x9e02b759, 0xfe60ba60, 0x159e02dc, 0xa87d5415, 0x1515547d, 0x6c5b5e60, 0xfe2f2f5b, 0xd6456b22, 0x1717210a, + 0x21075a51, 0x5b512424, 0x2f290809, 0x15142a2c, 0x5c130c0b, 0x26272f51, 0x001d1c1b, 0x8f000400, 0x71066300, 0x1500a903, 0x39002f00, 0x00004300, + 0x30013025, 0x06ec5033, 0x2806535a, 0x01070206, 0x15163221, 0x0bd44914, 0x2322df84, 0xa2523721, 0x09064f08, 0xfea2012e, 0x59168ded, 0x0b360f16, + 0x0b380f05, 0x89370982, 0x012fb92f, 0x687301c2, 0x34291b77, 0x1f1e1919, 0x10241b1a, 0x4e1d1c11, 0x3c2106f5, 0x07f34e3c, 0x46036334, 0x45ecfe45, + 0x3729c536, 0x014525c8, 0xfd8c4514, 0xe44e8cd2, 0x142a3605, 0x0b010703, 0x4918170b, 0x2d2c3235, 0x75252120, 0x34293337, 0x09e34e37, 0xff320134, + 0x05ce0508, 0x00260014, 0x00780033, 0x009b008a, 0xc44e0500, 0x4a01202e, 0x2e3241d1, 0x11232701, 0x13331123, 0x3317011e, 0x23113311, 0x04823521, + 0x07020e26, 0x37362726, 0x30081082, 0x38700215, 0x10103d57, 0x5523222c, 0x2d39902a, 0x1721222d, 0x05010c17, 0x251c0a01, 0x472b1f31, 0x3d221e35, + 0x423a3557, 0x41417542, 0x3b3f4402, 0x08884a39, 0x4a341321, 0x0b220688, 0x884a230a, 0x233c0807, 0x2c2c1f1f, 0x37472f36, 0x0d4f0f29, 0x12110e0e, + 0x413e1d2d, 0xfd474045, 0x0e3408b2, 0xdb796803, 0x0308340e, 0x43017967, 0x341708bc, 0x4002123e, 0xa3a55655, 0x304425f8, 0x81493c30, 0x080d284f, + 0x1b241447, 0x4d361d0f, 0x3c53332f, 0x3d3e5922, 0x3f3f3c0d, 0x3e3d0d3c, 0x29353d01, 0x2b312e07, 0x0a2a0a26, 0x1e141416, 0x2d170909, 0x1a202840, + 0x0619271a, 0x0e0c0605, 0x25381514, 0x1a1a482c, 0x21150e0e, 0x153f172b, 0x06594a10, 0x36333508, 0x104a035c, 0x00fe1b63, 0x8dfe9e02, 0x0210631b, + 0x5a62fd01, 0x3818f501, 0x3a021343, 0xbcfd5d5c, 0x0003005a, 0x06ab001b, 0x006103e5, 0x005c0039, 0x2500007f, 0x430d4749, 0x26220568, 0x69432627, + 0x0aea5410, 0x07060726, 0x2221010e, 0x23051d47, 0x3233013e, 0x200fd051, 0x055b5636, 0x012722a2, 0x2a775410, 0x490c320d, 0x91430570, 0x31312c06, + 0x573c1111, 0x38374c36, 0x49330c27, 0x23080b73, 0x1f1f1011, 0x8429025a, 0x24131395, 0x57426825, 0x3d0f2276, 0x3a48120f, 0x4e58584e, 0x0f124c3c, + 0x79220f3a, 0x8b491e9e, 0x06b4430b, 0x512e2e23, 0x0bb5432c, 0x2d171723, 0x0611552a, 0x1b26272d, 0xa9b11d1c, 0x2c404154, 0x4e4d2e2c, 0x0051053b, + 0x9a52200a, 0x0000281a, 0x004f0005, 0x55b106ab, 0x0021092b, 0x342b5540, 0x35210122, 0x28080282, 0x02061521, 0x54012107, 0x2222603d, 0x22222323, + 0x44607960, 0x60442424, 0x4e4e483c, 0x014f4f90, 0x570901de, 0x57572c2b, 0x058957a3, 0xfe60032e, 0xfe420141, 0x36a601cd, 0x4c0136d6, 0x082bd954, + 0x5bbcfd2a, 0x5b59ea01, 0x52bafe52, 0x2e000700, 0xd20608ff, 0x1c001505, 0x47003300, 0x5d005300, 0x91007300, 0x06370000, 0x30153007, 0x3205034c, + 0x36333011, 0x30373637, 0x16070633, 0x2e231712, 0x45110101, 0xf1450ae5, 0x2726230c, 0x29493330, 0x82332006, 0x301122cf, 0x187d5701, 0x47012e21, + 0x36082df3, 0x6d1a42f7, 0x1848046d, 0x417f5a5a, 0x16ba32ae, 0x01922783, 0xfead01a5, 0xfe2301c0, 0x014001dd, 0x7c737422, 0x031b6d1b, 0x781b6c1b, + 0xfb2da418, 0x5e20014a, 0x505e6565, 0x1720075d, 0x08291448, 0x1e4b4123, 0xfe9f02d0, 0x6d1e5cac, 0x4bce4d6d, 0x3d21e8fe, 0x02e2fee1, 0x60bb609f, + 0x080160c4, 0xc732cbcc, 0x27028232, 0x4ee2fe29, 0x6203f6fe, 0x210df847, 0x3748b5fd, 0x0000212d, 0x358f8362, 0xffca0005, 0x05360608, 0x000f0015, + 0x00330017, 0x00920066, 0x054e0500, 0x07062a11, 0x05263330, 0x2327012e, 0x05494e30, 0x13303326, 0x3317011e, 0x2106e749, 0x63593023, 0x27262110, + 0x5a0a6259, 0x615905ad, 0x0226230d, 0x42823327, 0x53171621, 0x9c53078e, 0x36372706, 0x02063337, 0x6c822307, 0x2327262f, 0x010e0706, 0x3df80207, + 0x266e3afb, 0x07704e98, 0xc6313034, 0x0e190230, 0x68020834, 0x3408db79, 0x7967030e, 0x7c445bfc, 0x050e4805, 0x1e3a2e35, 0x2262621e, 0x4c36563d, + 0x03273837, 0x384a1a49, 0x4d201f3a, 0x5e0807eb, 0x6a1a9001, 0x2e0d6e1a, 0x03171809, 0x0b0a2408, 0x0e790f36, 0x23090a36, 0x23310309, 0x6e1c6b23, + 0x390d7a1b, 0x02191910, 0x3b101919, 0xb6b6f80d, 0x70bf0170, 0x7041fe70, 0x94943b02, 0x641b3494, 0x02fffd0f, 0x0f8dfe9f, 0x01021b64, 0x570361fd, + 0x2f0c343d, 0x16162b0b, 0x2e27313a, 0x5905060b, 0x1a350694, 0x4102321b, 0x17172822, 0x0a2a2a2c, 0x515c130d, 0x1e364d2f, 0x334b830b, 0x6f2ddb3b, + 0x29981e70, 0x3c3cdc2b, 0x94252bdc, 0xa2a1de25, 0x32235f83, 0x82663fea, 0xea3f3700, 0x01040032, 0x050eff18, 0x000f05e8, 0x003a001b, 0x00570043, + 0x7d412500, 0x3021221a, 0x05fc5423, 0x3e230724, 0x0a823701, 0x27089843, 0x1e07010e, 0x33110101, 0x2007c543, 0x06764111, 0x27823320, 0x0806b543, + 0x320ccd36, 0x7867030c, 0x0c310ddb, 0x03796803, 0x6d1b7f3f, 0x6b1b021b, 0x9124781b, 0x238b2324, 0x19661980, 0x1a671a02, 0x248c2478, 0xd9fb9325, + 0x0111016c, 0x269a2601, 0x08078043, 0x9a277723, 0x5f178127, 0x02fffd18, 0x188efe9e, 0x0002175f, 0xb22d62fd, 0x2db22c2c, 0x3639e539, 0xa72936db, + 0x3e028229, 0x3936da36, 0x022903e6, 0x60c2fd9e, 0x01440801, 0xc732430f, 0x32c73131, 0x43f2fe43, 0x8200f6fe, 0x01062200, 0x20f38236, 0x2ff382ca, + 0x001e0014, 0x0032002a, 0x00520046, 0x23300500, 0x22055744, 0x82061415, 0x5d1720cb, 0x27220f19, 0x30650723, 0x070b5008, 0x4f030221, 0x02220e3f, + 0x704e2103, 0x6da33a0b, 0x685a2101, 0x61184142, 0x5a167918, 0x2aac8516, 0xac292f2e, 0xfa3db603, 0x0a66423b, 0x10401034, 0xfd4010c5, 0x716e6e79, + 0x0b114811, 0x0b040a2b, 0x09820b2c, 0x6f706e24, 0x9c4e6801, 0xf2200809, 0x5d6c9e02, 0x2f145f48, 0xb52d2fbc, 0x292b5b2d, 0xd52b282e, 0xb6b696fe, + 0x6fbf0170, 0x7041fe6f, 0x2506fd50, 0x4f015901, 0x554f4f01, 0xb1fe240b, 0x5402b1fe, 0x003007ae, 0x00a90002, 0x03570663, 0x001d00a9, 0x25000033, + 0x2005d341, 0x058d5106, 0x210eb641, 0x0d500516, 0x08194905, 0x33304008, 0x03301530, 0x9027a076, 0x64640413, 0x35c21896, 0xa017bc33, 0x02207f20, + 0x96208120, 0x8a33be17, 0x0aeb2d01, 0x164f411c, 0x41955003, 0x4163ccce, 0xa7a720ed, 0x53330127, 0x2426014f, 0x8234d034, 0xfe243402, 0xd7d74fdb, + 0x1e720271, 0x02175446, 0xfd47a148, 0x1000712b, 0x8101e71e, 0x28010634, 0xd80502ff, 0x0f001a05, 0x43002500, 0x74005600, 0xd3537c00, 0x335b4f11, + 0xa14e0120, 0x07a6512b, 0x6d670228, 0x01fb01c7, 0x704f4173, 0x6b822107, 0x2205824f, 0x4f27416b, 0x27250979, 0x16164027, 0x2c00820d, 0xfd401616, + 0x4c6b41d0, 0x6b4c2929, 0x21078741, 0x1c874126, 0x28264134, 0x0c17163f, 0x170c0d0d, 0xed023f16, 0xfc01c86c, 0xcf514c01, 0xb7fd3605, 0x822c2b2d, + 0x2c815554, 0x2c2d2d2c, 0x82a9812c, 0x612d2b2c, 0x06c04e1a, 0x4e242521, 0x242105c0, 0x06cd4e25, 0x01031a24, 0x2e83572d, 0x2d2d5823, 0x202c8258, + 0x4f2b8a57, 0xf94e09c2, 0x011a2205, 0x083352e8, 0x33000736, 0xc206fdfe, 0x0c000905, 0x3c001600, 0x86006100, 0xa2009c00, 0x6119b95a, 0xf4510f8b, + 0x5a012014, 0x0b210683, 0x1a7f5a01, 0x112c24a5, 0x36321614, 0x11331135, 0x020e0714, 0x2005934d, 0x063e5b11, 0x57090124, 0x284a2b2c, 0xad022a08, + 0x21215e3a, 0x21212323, 0x05b2612f, 0x390c1d52, 0x200e390e, 0x01c30269, 0x080b0105, 0x8282081f, 0x0b081f07, 0x62010401, 0x8b5a1378, 0x20072905, + 0x12471208, 0xc0fb6277, 0x0c202282, 0x82261d82, 0x081e0882, 0x2283020c, 0x12491222, 0x08253382, 0x12072008, 0x33228248, 0x8e386401, 0x0c0c6538, + 0x577f5835, 0x020c0c36, 0xf8f46636, 0x080fc15a, 0x2b27b120, 0x83b6842a, 0x14132b2a, 0x084a2525, 0x32390820, 0x53a1535e, 0x093c365e, 0x4f4a0821, + 0x925aa801, 0xf0fe2305, 0x905a1001, 0xff042117, 0x320823a1, 0x4efe9f02, 0x514d4d51, 0x5efeb201, 0x41323244, 0x32411f1f, 0xa2014432, 0x9f0261fd, + 0x005abbfd, 0x01040000, 0x0502ff4d, 0x001a05b3, 0x00510017, 0x529d008b, 0xbb50059f, 0x09d54a09, 0x4d14aa50, 0xfe482341, 0x297a4d0e, 0xf14e0120, + 0x85012110, 0x38095a46, 0x76544b01, 0x0c320c2a, 0x362c2a24, 0x17174240, 0x0a280a3b, 0x10313161, 0x06d94811, 0x0c330c23, 0x0653621a, 0x5d653b29, + 0x1f201010, 0x848bfd5a, 0x230d2332, 0x32862b2b, 0x620a272e, 0x11113131, 0x4c36563c, 0x0d283738, 0x3c213289, 0x2b328264, 0x015b1f1f, 0x0d310ce2, + 0xdb796802, 0x03230682, 0x46f27967, 0x0b320692, 0x2e0c343d, 0x16162b0c, 0x18273139, 0x07020b17, 0x5e4d1202, 0x2822250d, 0x2b2c1717, 0x210b5e4d, + 0x33b16203, 0x487e0121, 0x002f0f3c, 0x00020000, 0x065400cf, 0x00b80331, 0x4e4a0034, 0x262010d9, 0x5c05666a, 0x5e4a0880, 0x07405209, 0x01020e22, + 0x080d3543, 0x022e2787, 0x02021135, 0x0f34946a, 0x352d0f3f, 0x52504436, 0x2525493a, 0x2a3d3d7b, 0x5e446b4c, 0x5b314646, 0x465d2104, 0x21282847, + 0x7e4b4420, 0x704e2974, 0xc552f901, 0x11108551, 0x3bae764b, 0x55214b3b, 0x3a0f404d, 0x1b1c360f, 0x3a313d48, 0x1706070e, 0x3865393a, 0x21213e59, + 0x03513e21, 0x1c1d322a, 0x1a1a3438, 0x7318100d, 0x44613a65, 0xfd540325, 0x6c6c6bfc, 0xfe04026b, 0x44435c11, 0x16152b57, 0x015c8658, 0x10db82ef, + 0x3d07732d, 0x08ff0a39, 0x1505f606, 0x18000e00, 0x49002b00, 0x5d005300, 0x00006300, 0x5c333001, 0x2b200950, 0x23067e5a, 0x11012b26, 0x5c2ce24c, + 0x113a146b, 0x15211133, 0x41ed7602, 0x29252568, 0x68252529, 0x4beded41, 0x804b5c5c, 0x985b49fe, 0xa7013c3a, 0x7e2a292b, 0x292a7ea7, 0x5b5f602b, + 0xfe5f5b6b, 0x2df70221, 0x54558257, 0x822d5782, 0x82a92007, 0x1b612906, 0x24251919, 0x242f692f, 0x8807bf4c, 0x0e825c0c, 0x02c0fd2e, 0x61c2fd9f, + 0x03000500, 0xfd06ab00, 0x200aa756, 0x34a75659, 0xbd4c0520, 0x56082024, 0xae6b11c0, 0x56a4200d, 0x962006c0, 0x2105744c, 0x744c8307, 0x67612007, + 0xd4560f00, 0x13a73a2b, 0x4b13134c, 0x01effe12, 0x124a1211, 0xfe134a13, 0x279e0263, 0x5916279c, 0x82028216, 0x62fd2208, 0x31008200, 0x00220003, + 0x03de06ab, 0x001b0061, 0x006c0033, 0x41531300, 0x15e7561c, 0x2114114c, 0x5259012e, 0x0fbc5c10, 0x4d53d720, 0x0cdb2805, 0x68030c32, 0x56400179, + 0x4c200abc, 0x212fb85c, 0x214b2a02, 0x0218240a, 0x4b62fd01, 0x0f6e09a1, 0x27b55c08, 0x00002508, 0xff7c0107, 0x05840502, 0x0037001a, 0x0068005b, + 0x009c0075, 0x00d500a9, 0x21300100, 0x3307010e, 0x023e3736, 0x2e078866, 0x23060701, 0x012e2722, 0x37272627, 0x821e1716, 0x05157917, 0x07062222, + 0x3e231482, 0x66213701, 0xbf663a5e, 0x0d246b07, 0x33011e22, 0x2117246b, 0x71823521, 0x24052960, 0x0e222326, 0x82838302, 0x3202233c, 0x01821716, + 0x8206c979, 0x213708c2, 0xd7fe2603, 0x06020c03, 0x200d0d0b, 0x4b2b1c2b, 0x10101f36, 0x392c2d3d, 0x3423232d, 0x4f101314, 0x230d0e0c, 0x413b1c2b, + 0x342b3b41, 0x0f3c0f12, 0x01041104, 0x6669017c, 0x3b37245d, 0x3717fe3b, 0x11103c58, 0x5523232c, 0x2e389029, 0x1622212d, 0x6b010c17, 0x1e21097d, + 0x067d6b22, 0x41415908, 0x39fe5003, 0x33248f23, 0x323a1b1b, 0x141f291c, 0x103f1006, 0x3812120b, 0x1b50664c, 0x190f0e1c, 0x201e1d2d, 0x011a691a, + 0x274e0152, 0x1014289e, 0x1c0c1710, 0x32314e36, 0x113d2a2a, 0x210a0a10, 0x3e181516, 0x19111014, 0x0b3a410d, 0x1421413a, 0x3e020902, 0x57fd3ef9, + 0x21374e66, 0xe66bd101, 0x27262d0b, 0x2d2e2828, 0x14010135, 0x1d101b23, 0x0812e66b, 0x7f20683f, 0x2a2a2e20, 0x38310c2e, 0x16271c11, 0x20061906, + 0x1b2e1d1d, 0x241b1a1e, 0x45282b25, 0x1c1c1c3e, 0x00175a17, 0x01060000, 0x0502ff7a, 0x001a0586, 0x00360028, 0x0092006c, 0x00ca009f, 0x0c406800, + 0x22263f68, 0x42062125, 0x3e241883, 0x031e3701, 0x6906345f, 0x13220738, 0xa75e2521, 0x196b6d14, 0x36352122, 0x42068861, 0x52201e45, 0x35054568, + 0x22225a39, 0x04030d2c, 0x260e0e0a, 0x242b1f30, 0x111e3424, 0x44681e11, 0x3d450805, 0x3bec1010, 0x3a3b4141, 0x34034242, 0x0c05d6fe, 0x0c0d0b07, + 0x2b1d2a21, 0x101f364a, 0x2c2d3e0f, 0x23222d39, 0x10141335, 0x0d0d340e, 0x1c2b221b, 0x3c40403c, 0x0e12342b, 0x12070f3c, 0x10fd7c01, 0x103c5838, + 0x2c238211, 0x38902955, 0x22212e2d, 0x030c1716, 0x07c76d03, 0x2205cd5e, 0x42754141, 0x6b250549, 0x1c1b336b, 0x0548423b, 0x42400f21, 0x1c2e0748, + 0x190f0e1b, 0x201d1e2c, 0x011a691b, 0x3068b352, 0x49f2222d, 0x147542a4, 0x0a2a0a24, 0x76422114, 0x0174230b, 0x3b42b901, 0x605f212d, 0x38243a42, + 0x39000600, 0xc70608ff, 0x0f001505, 0x28001c00, 0x57003200, 0x00007a00, 0x07d15805, 0x30133034, 0x17121633, 0x30272603, 0x30070623, 0x2e333007, + 0x536e0101, 0x0f995315, 0x53132575, 0x16251473, 0x17011e17, 0x05884433, 0x0423113c, 0x06240a1e, 0x0a2406e2, 0x2182c964, 0x0af12187, 0x0a0b0c0b, + 0x290bb13c, 0x306e9bfc, 0x0230080d, 0x215d3bad, 0x21242421, 0x3b2e2f21, 0x1f343355, 0x3f114a0d, 0x4c4c4434, 0x12433544, 0x1f0e380e, 0x01c4026a, + 0x090c0105, 0x82820421, 0x0c092203, 0x623e0c82, 0x09373678, 0x18080521, 0x15520517, 0x23f86277, 0x7f18187f, 0x709f0223, 0x017041fe, 0x008231e0, + 0x8c24d324, 0x4e53a501, 0x2907211d, 0x3f124d53, 0xfe095216, 0x081001f0, 0x4b141651, 0x0263fe12, 0x1975769f, 0x42420e5d, 0xfd2fb10b, 0x07000061, + 0x2c086741, 0x00200016, 0x0035002a, 0x0064003f, 0x08077f87, 0x15070623, 0x061c6c32, 0xa5710e20, 0x3d362305, 0xa3713401, 0x7301200c, 0x785613ff, + 0x1e9b7605, 0x08227541, 0x01980222, 0x37504e10, 0x18171d34, 0x16090a22, 0xfe223928, 0x25a766d5, 0xa7252626, 0x25252197, 0x3bfd9721, 0x3f507d41, + 0x5459a701, 0x0c054841, 0x1c280b0b, 0x472b211c, 0x275a1c33, 0x272c2c2b, 0x2b282457, 0x1d012329, 0x34518541, 0x01050000, 0x0502ff27, 0x001a05d9, + 0x0034002a, 0x0071003c, 0x7314827d, 0x3e240959, 0x16323302, 0x6a197176, 0x7b5410e7, 0x085e650e, 0x5d0d5d65, 0x0c5b0d7c, 0xf402210a, 0x261f8676, + 0xfb3c7302, 0x6be56f3a, 0x402607ed, 0x4010c611, 0xea76b6fd, 0x135d6b12, 0x215e6426, 0x2e015a3f, 0x2009d354, 0x0796768c, 0x762d5921, 0x652e0896, + 0x10100808, 0x5d341f2f, 0xb6b69bfe, 0x345b9e02, 0x544e200b, 0x2f220a51, 0xf376020b, 0x0982540e, 0x2f515c25, 0x6f1d374d, 0x003d09fd, 0xce010200, + 0x320516ff, 0x21000e04, 0x00003b00, 0x22233005, 0x30352627, 0x27012e35, 0x42088226, 0x322f05b0, 0x1e171617, 0x02141501, 0x27331507, 0x74013e32, + 0x2e220598, 0x436f2302, 0x1e280808, 0x8e700402, 0x55272855, 0x1b2f2f88, 0x39383e19, 0x50c45050, 0x3e383950, 0xf09aa0bb, 0x1244603a, 0x44121313, + 0x5f3b3a60, 0x5f310985, 0x492b2cea, 0x414d0b4c, 0x735c5b41, 0x4142c27f, 0x34008222, 0x7fc24241, 0x1cfcfee1, 0x4c28f267, 0x9e453737, 0x4c373745, + 0x290a8a28, 0x13000300, 0xed06b700, 0x07825603, 0x51003d22, 0x20056167, 0x0f5f6103, 0x2206944b, 0x58033003, 0x30230753, 0x6c113023, 0x11230f2b, + 0x82213023, 0x30352201, 0x08058401, 0x15302123, 0x21070206, 0x72cfe330, 0x0d175d17, 0x70175b17, 0x03228a22, 0x01050109, 0x081e080c, 0x1f088282, + 0x05974407, 0x12491236, 0x08082007, 0x12081f08, 0x62771248, 0x41fe9a02, 0xcefe4101, 0x32067662, 0x010301b7, 0x31c8329b, 0x4432c831, 0xfe45eefe, + 0x4b9d01fd, 0x7d622187, 0x00002809, 0x004c0004, 0x82b406ab, 0x001426e3, 0x0028001e, 0x5de5835f, 0xa6421ddb, 0x01112107, 0x2032994a, 0x06e45db9, + 0x5d601921, 0x2e2408e4, 0x1302ac2a, 0x27075668, 0xd7fe5803, 0x07030c03, 0x2123244a, 0x244a0e13, 0x5db72006, 0x28270eec, 0xd52b292e, 0x680296fe, + 0x402a065a, 0x14279e28, 0x0c171010, 0xc549351d, 0x1011210f, 0x200ec549, 0x30008200, 0xff730104, 0x058d0502, 0x004c001a, 0x00b4007d, 0x171772e0, + 0xe24a1720, 0x06072106, 0x15220184, 0xf24a011e, 0x220d8405, 0x57222306, 0x27210511, 0x72178237, 0x324b0c22, 0x2627210a, 0x4b06596b, 0x01230636, + 0x86323637, 0x23548555, 0x2107010e, 0x20336841, 0x49648a01, 0x02211d51, 0x11926750, 0x28286208, 0x11101d1d, 0x12120a0a, 0x1d1a1718, 0x0b131333, + 0x2011110b, 0x362c2c1f, 0x1b24232f, 0x0f15141c, 0x111c0d4f, 0x3d1d2d12, 0x47404542, 0x39fe8003, 0x33238f24, 0x1e1d1b1c, 0x0f2a1b32, 0x050a0b0f, + 0x0b0f4010, 0x26371311, 0x1b516626, 0x190e0e1c, 0x1e1d1616, 0x1b691a20, 0xa7fd5201, 0x0b03d6fe, 0x08934903, 0x0f1e3735, 0x2d2c3e10, 0x23222d39, + 0x0f141434, 0x0e0d0d4e, 0x491b2c22, 0x0f210692, 0x05074c3b, 0xfe500224, 0xb34b2438, 0x1e2a2107, 0x2008b34b, 0x205e854b, 0x08b34b18, 0x08103572, + 0x170b0c27, 0x291f2116, 0x14191a20, 0x060d0c14, 0x151a0604, 0x251c1d14, 0x1a24242c, 0x0a0e0e19, 0x1511110a, 0x143e1716, 0x093d7222, 0x614b7520, + 0x1c1c2609, 0x140e0e11, 0x07644b13, 0x4b0e0d21, 0x29230565, 0x4b1f1f44, 0x05210566, 0x2b224c46, 0xbb4b6220, 0x4f042028, 0x56280627, 0x2e000f00, + 0x8f033700, 0x6f135b5e, 0x0526243f, 0x33270226, 0x4618011d, 0x45182235, 0x38c9158a, 0x26a65fa6, 0x194a4618, 0x46181520, 0x0122153d, 0x45183d37, + 0x14941477, 0x11b34518, 0x38a61191, 0x5fcc26a6, 0x18333521, 0x28103f46, 0xb2663a01, 0x0601c901, 0x05f6706b, 0x70272821, 0x012312f6, 0x185f18eb, + 0x2d4f0346, 0x040e0301, 0x040e040c, 0x7c0e380e, 0x0782390e, 0x52044618, 0x19640128, 0x0f7a1862, 0x6b820f39, 0x0e040b3a, 0x0f3d0f03, 0xbbfdfc02, + 0x59594502, 0x4242b0fd, 0x3c3d3c7f, 0x302f3837, 0x21077a71, 0x7a713430, 0x104a200a, 0x5503da45, 0x0000002f, 0x00470005, 0x03b906ab, 0x001e0061, + 0x280b822f, 0x00700058, 0x010e0100, 0x0ad76c07, 0x2005c67a, 0x6c148233, 0x3e7b06d9, 0xa4052024, 0x10013925, 0x6c103d0f, 0x4010046c, 0x1e791e10, + 0x289f287e, 0x832bad2b, 0x63028822, 0x2718d27a, 0x0f070606, 0x52023110, 0x2208209e, 0x4612f001, 0x9e02cf12, 0x5115acfe, 0x24912514, 0x412fbc2f, + 0x3441fefe, 0x2ef0fed1, 0x53404059, 0x7a414052, 0x1b350679, 0x762b4934, 0x1b34482c, 0x2424341b, 0x252b762c, 0x1b1a1b23, 0x2224a35c, 0x4e060000, + 0x2f3a0893, 0x63004200, 0x98008d00, 0x0000a000, 0x30213005, 0x36373035, 0x30353637, 0xdb493435, 0x37362a0a, 0x1e32013e, 0x15161701, 0x05814a14, + 0x010e0725, 0x56052107, 0x3521052a, 0x211d8234, 0x937c3637, 0x4d3d8306, 0x26210555, 0x20018227, 0x752f8522, 0x162305dd, 0x18011617, 0x4e085142, + 0x122022f7, 0x240cf279, 0x39fe4503, 0x091153d6, 0x2c055a55, 0x664c1c1c, 0x0f0e3750, 0x17160c0d, 0x0613531d, 0x3f490126, 0x0e3c2e2e, 0x23080082, + 0x3f2e2e3c, 0x7c76767c, 0x10181922, 0x0606070f, 0x18100f07, 0x19184519, 0x0706100f, 0x0f100607, 0x89fe1819, 0x26200e4f, 0x3afb3d74, 0x4f72726e, + 0xf22c0c0f, 0x2a2ebf68, 0x310c2f29, 0x261d1138, 0x2a06c349, 0x1e1b1717, 0x2b252435, 0x49222328, 0x672207c3, 0x2e7c1817, 0x18173307, 0xb6b8feb7, + 0x1a0e0e5c, 0x2d24231a, 0x24242c75, 0xa1821a1a, 0x1b1a0e29, 0x752c2423, 0x8323242d, 0x7703210e, 0x231f2d4f, 0x4f014f01, 0x080a2f4f, 0x00000020, + 0xfe0b0106, 0x05f50568, 0x001f000f, 0x00410039, 0x0055004b, 0x0100006f, 0x26222330, 0xfd4e013d, 0x4e062014, 0xf6671afd, 0x77012007, 0x05201287, + 0x0d654118, 0x23112e08, 0x33133311, 0x11333736, 0x5fe50223, 0x5b383539, 0x1211201f, 0x3625262a, 0x35368235, 0x7c292626, 0x27a1676b, 0x0c0d2d40, + 0x402d0d0c, 0x2d098227, 0x0c0d0d0c, 0xed02402d, 0xfb01c76d, 0xff793bfb, 0x15042b0c, 0x09230905, 0x18186219, 0x08821962, 0x80670539, 0x595a06b4, + 0x68fe677b, 0x0732313a, 0x3d2b2b34, 0x81554c3e, 0x82172b2c, 0x2c2b3d00, 0xad965581, 0x1aa24513, 0x2d252533, 0x24252e6a, 0x331b1b33, 0x6a2e2524, + 0x3325252d, 0x2108ec67, 0xe2762401, 0x2e292d09, 0x123e2b28, 0xb32c1249, 0x2cb32d2d, 0xfd390882, 0xfe9e02ff, 0xfdaaabab, 0x00000062, 0x00850002, + 0x037b0654, 0x003400b8, 0x357f644d, 0x08131a41, 0x1133133d, 0x69b70123, 0x3e103594, 0x35362c10, 0x39515144, 0x7a252649, 0x4c2a3e3d, 0x465f436c, + 0x035b3145, 0x48465d21, 0x21202728, 0x757e4a44, 0x03714e29, 0x2c0b06fa, 0x2381130b, 0x82138124, 0x82062708, 0xe007e1a1, 0x8c64829a, 0x8f022a2d, + 0x22175a17, 0xec4040ec, 0x38088222, 0x46037ffd, 0xaa0156fe, 0x0000bafc, 0x00b50003, 0x034b0663, 0x000b00a9, 0x19ad7b15, 0x76010921, 0xb63c11d5, + 0x7f746801, 0xd8e1747f, 0x34393934, 0xfe5a03d8, 0x58178ced, 0x0f370a17, 0x0a380f05, 0x88340982, 0x632eba2e, 0xe6894603, 0x01b2fe89, 0x3a3236c5, + 0x31fd3632, 0x2205a176, 0x7637c825, 0x00200aa1, 0x1b500082, 0x45612007, 0x7e2006bf, 0x4e46bd45, 0x210834ce, 0x0f3d1015, 0x10036d6d, 0x781f1040, + 0xa0287f1e, 0x2bac2b27, 0x02872283, 0x3b5c3f63, 0x0f0e0e0f, 0x43445c3b, 0x1f312805, 0x311f0d0d, 0x441f3145, 0x3122053b, 0x50501a03, 0x3edf4532, + 0x50ef0121, 0x053a2c71, 0x02ff5b01, 0x1a05a505, 0x3e003400, 0x81004800, 0x0000a200, 0x27262205, 0x9f793736, 0x103f5407, 0x2e070225, 0x54222301, + 0x4b180f3f, 0x45891465, 0x76290169, 0xb1570d59, 0x17162a0e, 0x5002010e, 0x252a7655, 0x14c77f26, 0x1e1a0b23, 0x0dc87f09, 0x442d0121, 0xb3350545, + 0x2e2e2aac, 0x2cfeac2a, 0x262b7654, 0x2b2a2425, 0x18424037, 0x11406916, 0x69190d21, 0x74760e40, 0x25210805, 0x58416924, 0x2e2d2275, 0x4e3b4811, + 0x3d4e5858, 0x4d0a134b, 0x3dfd7922, 0x2b232334, 0x31391616, 0x0e8c5427, 0x1b160a23, 0x128d5408, 0x07bf4b18, 0x282e2925, 0x8918012b, 0x2650693d, + 0xa9b12a08, 0x2d404055, 0x4b4d2d2c, 0x39301919, 0x5d665d6a, 0x06313e69, 0x0052492f, 0x00040000, 0x06b7002e, 0x005603d2, 0x0027000f, 0xe7411836, + 0x15d55e15, 0x2d611320, 0x6c622518, 0x70fc01c8, 0x2b09ad55, 0x6940ed83, 0x28282525, 0x40692525, 0x2005f660, 0xe8411881, 0x70022009, 0x022705bb, + 0x2a2a2a9e, 0x827da87d, 0x5e602705, 0x5e5b6c5b, 0x9e8222fe, 0x0106002d, 0x0502ff4b, 0x001a05b5, 0x821e0015, 0x004930ab, 0x00d8016e, 0x35300500, + 0x35302130, 0x74371236, 0x152e053d, 0x15302330, 0x33302530, 0x23301130, 0x145e010e, 0x183e2007, 0x2008d344, 0x073d4801, 0x22012e23, 0x07197e06, + 0x01021e24, 0x006a2622, 0x06816d08, 0x1d060722, 0x0e814618, 0x1133352b, 0x15010f23, 0x0f150e0f, 0x8205840d, 0x270b9108, 0x27012e05, 0x0b3f3537, + 0x0a200284, 0x0b880584, 0x17930620, 0x1133073c, 0xa1021533, 0xb52dc9fe, 0x5c5c8e2d, 0x07dbbffe, 0xaf028e23, 0x0e3c5c3e, 0x44181d0f, 0x072009bd, + 0x0f260082, 0x3145310f, 0x09820f10, 0x311f0739, 0x9683eefd, 0x41684927, 0x213b3b58, 0x11103c0f, 0x2c4d3b48, 0x182c2d2d, 0x220ad849, 0x1808bc2f, + 0xeb2e3b4c, 0x2c0b222e, 0x206ed20b, 0x2453d202, 0xa3a60101, 0xa54a18f2, 0xe2fe290e, 0x4140582f, 0x58835152, 0x07aa4518, 0x2c25243b, 0x24252b75, + 0x1c1c1a1a, 0x25241a1a, 0x252c752b, 0x031c3324, 0x55a9b106, 0x61481880, 0x3e342c0f, 0x09230931, 0x0b292949, 0xd4f5015a, 0x2254d0b1, 0xd00a280a, + 0x41508953, 0x5f8655b6, 0x5abcfd23, 0x08008200, 0x5c000235, 0xa4065f02, 0x03007105, 0x00001b00, 0x21152113, 0x17372701, 0x37153335, 0x15330717, + 0x27071723, 0x07352315, 0x35233727, 0xf948065c, 0x8cc204b8, 0x823c8c2a, 0xc6c62103, 0x02240887, 0x220246a5, 0x1a84118c, 0x01000026, 0x25ff5c00, + 0xd6225b82, 0x59821400, 0x2c323808, 0x35053e01, 0x032e3411, 0x5c23022c, 0x0134019d, 0xadc7f605, 0x3c2e5b7f, 0xfeccaa6f, 0xfee5fef8, 0xa502ada9, + 0x7e725633, 0x47667a83, 0x154ff90e, 0x91907d5b, 0x8d3e6886, 0x22012447, 0x832e012c, 0x823e2047, 0x06332747, 0xccfe9da4, 0x4889fbfe, 0x01080125, + 0x9657011b, 0x32ef8248, 0xff2a0005, 0x05d60638, 0x00040094, 0x00440040, 0x8208014b, 0x21302b9b, 0x22042107, 0x0e07030e, 0xeb570704, 0x34352e06, + 0x17323336, 0x3e32041e, 0x043e3703, 0x240c8337, 0x15161716, 0x391e8314, 0x2103032e, 0x15012115, 0x23250523, 0x3e342535, 0x16323302, 0x1e323617, + 0x26821703, 0x83061421, 0x32362105, 0x17250583, 0x3e37013e, 0x20478203, 0x83408436, 0x011e2228, 0x840c8631, 0x32332317, 0x2983021e, 0x15215b85, + 0x29618514, 0x012e2726, 0x2e353435, 0x6e832702, 0x23010e2e, 0x010e2722, 0x27220607, 0x030e0706, 0x06830c86, 0x0e820220, 0x2683b084, 0x2e210386, + 0x08ba8202, 0x0e34273b, 0x010e3501, 0x26272627, 0x34351617, 0x34370627, 0x22233637, 0xe4015c26, 0x0462fe46, 0x506154e0, 0x070f2f4f, 0x5b403c15, + 0x934b522c, 0x08354da7, 0x0f1b151d, 0x504f2f0f, 0x081b9a61, 0xe401ddd4, 0x10fe62fe, 0x01000196, 0x7afc9600, 0x1a240e04, 0x0e0b1b13, 0x080c171f, + 0x1b110202, 0x06021115, 0x2e380407, 0x0e101007, 0x0810020c, 0x130c0603, 0x06090a0c, 0x1339530b, 0x282c040d, 0x1e180c11, 0x1d0c2f41, 0x0e040d15, + 0x2013241a, 0x0c1e2714, 0x090a1114, 0x492f0909, 0x13012c21, 0x180f121a, 0x0f061004, 0x0f142521, 0x1c192a10, 0x12241017, 0x0e0d2109, 0x3b1a132e, + 0x07071813, 0x09380d06, 0x141b0e29, 0x340d111a, 0x0807122f, 0x0a111910, 0x1010160b, 0x0f171c10, 0x1a0c2218, 0x16110822, 0x1601030d, 0x03270617, + 0x0801021a, 0x01030110, 0x12070802, 0x6eb9021a, 0x52422fbb, 0x1d09173c, 0x184b424a, 0x4d4ea72d, 0x1d150f0d, 0x523c1716, 0x18972f42, 0x58019008, + 0xfa25016e, 0xa0faf0f0, 0x1a291d0d, 0x0e071b15, 0x0e111d11, 0x0b3a2617, 0x070d0c02, 0x10370505, 0x09100b09, 0x670c0804, 0x2741040d, 0x60373b1f, + 0x11070e18, 0x2617121d, 0x100f1509, 0x04435201, 0x05120438, 0x11083401, 0x2d0c1017, 0x04030b12, 0x0b423e08, 0x111d2f07, 0x10450b24, 0x331c1411, + 0x090e1d0f, 0x0c4d0a5d, 0x410c1818, 0x1617022d, 0x05081721, 0x141b0c11, 0x0e052226, 0x17031922, 0x0c0c0207, 0x02050203, 0x02020411, 0x82010402, + 0x07022403, 0x4300171a, 0x250807b3, 0x000b0049, 0x0100000f, 0x23153315, 0x23352315, 0x01353335, 0x05211521, 0x64b4b498, 0x28fbb4b4, 0xb8f94806, + 0x0b834905, 0xfdb46438, 0x0500465c, 0x3eff5300, 0xa7058c06, 0x28000600, 0x30002c00, 0x3d823700, 0x0b331129, 0x27113301, 0x83270723, 0x84032001, + 0x020b2605, 0x37021b35, 0x20018217, 0x29058413, 0x33213317, 0x35022b15, 0x2d853733, 0xa1042e08, 0xa0cecea0, 0x334ac936, 0x3f2f303f, 0x19373a3a, + 0x37361031, 0x36372727, 0x37193110, 0x2f3f3a3a, 0x4a333f30, 0x8af201c9, 0x7373bc8a, 0x082c8388, 0x01080247, 0xfe2201b0, 0x3a50fede, 0x72a93ed6, + 0xfcfee3cd, 0xdf6a8b54, 0x01d4fe92, 0x89eb0104, 0x0401eb01, 0xdfb7affe, 0xfe548b6a, 0x72cde3fc, 0x61d63ea9, 0x50fe3a61, 0x2201defe, 0x0000b001, + 0xff5c0003, 0x05a40637, 0x22bb82e0, 0x833b000d, 0x092326b7, 0x03112301, 0x22068411, 0x85012f01, 0x200585bf, 0x220f840f, 0x821f020f, 0x013f23c4, + 0xc485011f, 0x03280586, 0x1401c834, 0x98c81401, 0x023d0685, 0x4e7238d8, 0x60484b60, 0x27545a5a, 0x4554184b, 0x364b394b, 0x2539155a, 0x5a153925, + 0x310c8236, 0x4b185445, 0x5a5a5427, 0x604b4860, 0x5d01724e, 0x9484fcfe, 0x5d020422, 0xd183b982, 0xfefc3008, 0x04381bc8, 0x59512d42, 0x2a372166, + 0x70844858, 0x3b4b645a, 0x6c438f52, 0x528f4a65, 0x5a644b3b, 0x58488470, 0x6621372a, 0x422d5159, 0x82003804, 0x00023b00, 0x0622ff4b, 0x00d005b5, + 0x002a0009, 0x2d150500, 0x35211501, 0x0135010d, 0xad8b1713, 0xd98d3f20, 0x03070324, 0x7e836d01, 0x01260422, 0x26087a82, 0x6e4ed3fa, 0x32621f6d, + 0x7d75756d, 0x667d615e, 0x94494994, 0x5e617d66, 0x6d75757d, 0x6d1f6232, 0xa03e4e6e, 0x83a0cece, 0x03330803, 0xcd7efe54, 0x54b073ec, 0xb2cc426e, + 0x318459a1, 0x99353699, 0xa1598431, 0x6e42ccb2, 0x0190b054, 0x7efecd09, 0x00020000, 0x066aff5e, 0x007b05a2, 0x421f000b, 0x03300e5b, 0x0b270327, + 0x37112702, 0x1337021b, 0x15211337, 0x21066942, 0x7487c7fe, 0x02218687, 0x077742a7, 0xfef0fc33, 0xf7fe629d, 0x01befeb2, 0x8467fe65, 0xfe840705, + 0x2f098267, 0xf7feb2be, 0x749dfe62, 0x53000300, 0xaf063eff, 0x2c069342, 0x1300002f, 0x010d3521, 0x15032135, 0x05074121, 0x22058042, 0x8235021b, + 0x09a04279, 0x85030721, 0x42cb2026, 0x55220754, 0x8c424503, 0x363b2106, 0x210b8c42, 0x8c423b36, 0x42962006, 0x0428074b, 0xcecea003, 0x61fcfea0, + 0x21268642, 0x2f839bfe, 0x00820020, 0xc8000428, 0x38065eff, 0xb582a605, 0x1b000f2b, 0x00001f00, 0x15213525, 0x0b7f4303, 0x112e0b8b, 0x6c041123, + 0xb4b4cc01, 0xb4b464b4, 0x0684c0fc, 0x5a310227, 0x046464a0, 0x0595439c, 0x855cfe21, 0x0e022507, 0x4806b8f9, 0x00216282, 0x058f4701, 0x82a50221, + 0x13002c63, 0x5c211521, 0xb8f94806, 0x8246a502, 0x01053a1c, 0x0508ff56, 0x001505aa, 0x0039000f, 0x00650045, 0x0500008f, 0x23113335, 0x05715e06, + 0x3311332a, 0x07140115, 0x2307020e, 0x21058b55, 0x1a82012e, 0x18020e21, 0x20125250, 0x86501804, 0x08e84b0a, 0x280d1463, 0x011e3736, 0x06070617, + 0x0fce6725, 0x6a272621, 0x06321013, 0x01152107, 0x6507bc9c, 0x0b2c0b37, 0xa3a56e3d, 0xda671c02, 0x5b382c05, 0x0d2d2221, 0x0a010402, 0x18250e0f, + 0x32122050, 0x4275d9fe, 0xfe417542, 0x26958456, 0x57416949, 0x4e5b2276, 0x52180610, 0x5f0808aa, 0x39fee202, 0x1c3307cf, 0x1b323b1b, 0x05151e2a, + 0x120a332c, 0x664c3713, 0x0f1b1c50, 0x1d2c190e, 0x4f4f201e, 0x5bf85201, 0x3b6bf501, 0x430a270a, 0x5bbcfd77, 0x4049a501, 0x1b556b41, 0x29284d2a, + 0x01013659, 0x1a121214, 0x370e0f10, 0x2b31304c, 0x211e1e2a, 0x30441312, 0x3c3e9230, 0x3f3f3c0e, 0x01310482, 0x54a9b2ca, 0x4d2d5881, 0x392f314b, + 0x5d655d6a, 0x088b4a6a, 0x07b8682f, 0x2e2a292f, 0x1038310c, 0x1116271d, 0x0d9f6914, 0x1c1d1b39, 0x005c4344, 0x01040000, 0x0508ff2e, 0x001505c7, + 0x00350013, 0x7986004d, 0x11231303, 0x52300130, 0x302310b5, 0x86133033, 0x30112203, 0x4e218223, 0x276d1551, 0x2e012137, 0x37088e61, 0x230905c4, + 0x19621809, 0x09186218, 0x68050824, 0xb406b381, 0x2bfc687b, 0x323b3a6d, 0x609f02f8, 0xdcfe60bb, 0x48120102, 0x2cb32d12, 0x822db32c, 0xfffd2b08, + 0xabfe9f02, 0x61fd5501, 0x20846203, 0x0b61c322, 0x0ac44118, 0xec781720, 0x5c450805, 0x24242c51, 0x1b1a1b31, 0x0b2d0b32, 0x2c2e2822, 0x0a15152a, + 0x515c130d, 0x1b27262f, 0x01001e1b, 0xd3006b00, 0x31049506, 0x00004400, 0x15163201, 0x020e0714, 0x22230607, 0x2627052e, 0x22232627, 0x0e070607, + 0x08108301, 0x34352645, 0x3e373637, 0x1e323306, 0x17161705, 0x37323316, 0x013f013e, 0x4c06023e, 0x0b072a1e, 0x72326624, 0x42522a6e, 0x1b362f44, + 0x70214913, 0x4643305d, 0x0d101259, 0x2a1e1411, 0x140a0412, 0x4330381c, 0x8b264d40, 0x32310821, 0x15572a48, 0x1f0b0316, 0x1e2aca02, 0x41160f11, + 0x1e723293, 0x5539472a, 0x3184242e, 0x984643a8, 0x0a08151e, 0x141c1e2a, 0x2e221106, 0x2a443a52, 0x281d891d, 0x287c2a48, 0x130e0728, 0x3e008200, + 0xff1e0003, 0x05ce0649, 0x000b00cc, 0x004e002b, 0x06140400, 0x26222123, 0x21333634, 0x83222532, 0x3e0127b8, 0x17323301, 0x03822101, 0xde82e282, + 0x21012729, 0x01092722, 0x8413010e, 0x820620f3, 0x211582e6, 0x2c82012f, 0x32333625, 0x8503011f, 0x13172108, 0x3808e482, 0x151d0b02, 0x1d159ffe, + 0x6101151d, 0x158afe15, 0x6101021d, 0x19111a05, 0x0182010f, 0x010f1c8c, 0x151d078d, 0x82fe0f1c, 0x0f1977fe, 0xbcfeaafe, 0x0a9a1a05, 0x01011a0f, + 0x08548203, 0xd2050554, 0x050a0f0f, 0x03a38b05, 0x080e0a0f, 0x0e0111a4, 0x1d1d2a70, 0x1d5d1d2a, 0x04070715, 0x151410a6, 0xfd18effd, 0x150e0c80, + 0x6802181d, 0xfbd40115, 0x051410bb, 0x010a0f4a, 0x070403e1, 0x5b020404, 0x0f0a1007, 0x15013d02, 0x0f0a0706, 0x95e9fe0c, 0xf3840d09, 0xf3844620, + 0xf3841420, 0xf3ad5020, 0xf3830120, 0x25010f22, 0x1624e982, 0x05071415, 0x2506734b, 0x2330012f, 0xf8822726, 0x3f363726, 0x9c033601, 0x6f20f582, + 0x9123f584, 0xa2f9fc15, 0x52033ef5, 0x48040f0a, 0x04042d01, 0xfe110f0a, 0x0f0d89c7, 0xba05070a, 0x04030501, 0x6c020101, 0x3df7a307, 0x070b0e03, + 0x01687906, 0x05120b0e, 0x0f074d6d, 0x69030f0a, 0x08060503, 0x03020404, 0xf78a0cb4, 0xf784b020, 0xf7ae5220, 0x82363421, 0x361322f9, 0x24068337, + 0x07060714, 0x21048227, 0xf4832223, 0x31262722, 0x2306f141, 0x41051716, 0x5b20f982, 0xa523f984, 0xa354fb15, 0x0fb32ef9, 0x8d010f14, 0x0f140806, + 0x02219605, 0x2bf18312, 0x4f060709, 0x0a0f056b, 0x375a070d, 0x2908faa3, 0x0f0f0a8d, 0xbd54fe0a, 0x0a0f0806, 0x2dc70609, 0x01051305, 0x6a060601, + 0x0a090691, 0x4a790a0f, 0x00030000, 0x0649ff46, 0xf34105e2, 0x06ec4135, 0x37070222, 0x0f210985, 0x05854d01, 0x42233421, 0x1f2406eb, 0xce063601, + 0x7320f982, 0x8d23f984, 0xa2c7f915, 0xe6053ef9, 0x0f0a1206, 0xa3285f01, 0x0f0a0707, 0x0807e00b, 0x03070607, 0x0f026201, 0x4c06110a, 0x08f8a22a, + 0x119e0451, 0x04040a0f, 0x6b74e2fe, 0x0e0a0f04, 0x04049307, 0x01010704, 0x0a05040d, 0x7dcc110f, 0x02000000, 0x7cff7d00, 0xb6058306, 0x12000600, + 0x11010000, 0x17010b37, 0x06140011, 0x26012722, 0x17323634, 0xb7cc0501, 0x01b7e2e2, 0x163e2c0d, 0x821690fa, 0x70053505, 0x9afeb605, 0x01dffe46, + 0x66014621, 0x2c3e31fa, 0x16700516, 0xfa210582, 0x204f8d90, 0x294f881f, 0x23061401, 0x012c3122, 0x0f410027, 0x17162606, 0x05000112, 0x385c891e, + 0xddfe011f, 0xfebd14fe, 0x2c017588, 0x05291c1f, 0x0157016c, 0x1f120252, 0x386b8c2b, 0x052c1f12, 0x7801bdc6, 0x0706ae02, 0x1b242c1f, 0xa9fe82fd, + 0x010aaefe, 0x20c7842c, 0x20c7825f, 0x34c78583, 0x1b071105, 0x24112701, 0x37342622, 0x16323601, 0x05010714, 0x21c78376, 0xae8a1bfb, 0x6601a02b, + 0xfe210146, 0x9afe46df, 0x83d8841d, 0x85c583de, 0x224f87c7, 0x8600002f, 0x05f0444f, 0x3e373626, 0x24363706, 0x2606e243, 0x04060706, 0x8207020e, + 0x07062202, 0x0865860e, 0x1ffcfa28, 0x5331062c, 0x2a3f2322, 0x27493840, 0x01b60192, 0x1f04034c, 0xb61d272c, 0xa3d0e2fe, 0x461f3472, 0x33532b2f, + 0x818c2608, 0x0f1f2408, 0x5ad7760e, 0x7b569959, 0x92275d55, 0x2c0120a8, 0x032b1d1f, 0x865c4312, 0x9f3b6495, 0x78d96f78, 0x82001915, 0x00043400, + 0x0644ff46, 0x00b405ce, 0x000e000d, 0x00300020, 0x45330100, 0x23270a7d, 0x01032531, 0x4523010e, 0x09280a9d, 0x15163201, 0x06010714, 0x36231486, + 0x4564ab04, 0x87280a5d, 0xfeef6ffe, 0x111a05bc, 0x290a9542, 0x1f310215, 0x49fc0c2c, 0x06822916, 0x16b70324, 0x4a45ee02, 0x01a12609, 0x10bbfb48, + 0x08664514, 0x0284fe2a, 0x161f2c30, 0x2327fa12, 0x05220683, 0xa68223d9, 0x0001002e, 0x06090045, 0x001505cf, 0x3700001f, 0x201e2b46, 0x22104378, + 0xd7450a20, 0x8200201b, 0xff13286f, 0x05ed0654, 0x823e00af, 0x1732267e, 0x37011b16, 0x26038817, 0x07031702, 0x82270327, 0x010b2304, 0x03832707, + 0x06033424, 0x0f86010f, 0x37032c08, 0x3f303713, 0x37131701, 0x3f011a32, 0x018b0201, 0x32420239, 0x2c723939, 0x173f3939, 0x278c3939, 0x39847045, + 0x1f2f4c39, 0x825e3939, 0x3f6b2813, 0x03463939, 0x828c0706, 0x4824080e, 0x71543939, 0x39580724, 0x013d5539, 0x380a221a, 0x0239ae05, 0x47024bfd, + 0x0bfd3838, 0x38388d01, 0x530361fe, 0x20260582, 0x5602cbfe, 0x3282fb0d, 0x9760032a, 0x393985fb, 0x6ffe6502, 0xc8310582, 0x393924fd, 0x37da0208, + 0xcffd6d5a, 0x6d033939, 0x314a82fc, 0xfd06a005, 0x38ec649e, 0xf5e3fc38, 0x9f019a01, 0xdf82380b, 0xffa02008, 0x056006ce, 0x00070032, 0x15212500, + 0x35231121, 0x04940133, 0x7cbcfacc, 0x047846f4, 0x920078ec, 0x35212c23, 0x044c0221, 0xfe74fb14, 0x86ac01cc, 0x29279625, 0x5c030403, 0x14fe2cfc, + 0x279e6402, 0xa402bc28, 0x5cfde4fc, 0x279d1c03, 0x01740429, 0xfc9cfdec, 0x9dd403a4, 0x2c052927, 0x54fe3401, 0x8c04ecfb, 0x33232796, 0x82112315, + 0xe40527c7, 0x34fbf47c, 0xeb884405, 0xceff6328, 0x32059d06, 0xd0821f00, 0x15163226, 0x01011930, 0x42058045, 0x112006e9, 0x2c09f042, 0x23198003, + 0x16117d02, 0xfd152319, 0x21068320, 0x0c8483fd, 0x11e00233, 0x19233205, 0xcafdccfd, 0x230e2202, 0xfd121c19, 0x2306828a, 0xdefd6a04, 0x02230d84, + 0x82000e76, 0x00012a00, 0x063b0063, 0x00c5049d, 0x206b851a, 0x22628214, 0x87092722, 0x01303760, 0x09173236, 0x60063601, 0xfe0b2319, 0x123e1290, + 0xc1fe51fd, 0x0d821f12, 0x82700121, 0xaf02330d, 0x02123f01, 0x131923bc, 0x19f8fd10, 0xfecb0319, 0x0c83193d, 0x19080228, 0x0135fc19, 0x638219c3, + 0x9f000322, 0x6120cf82, 0x2124cf82, 0x47003400, 0x35256782, 0x07050e22, 0x24018506, 0x3e321523, 0x052b6105, 0x2136372a, 0x051e3235, 0x26070617, + 0x2105d66b, 0xfe6b1601, 0x15332505, 0x27052e22, 0x0b2f8482, 0x986b6825, 0x7748a48e, 0x348e8492, 0x8e101c30, 0x50fa2d0f, 0x57541d09, 0x4190797d, + 0x5e542123, 0x03212284, 0x2008865c, 0x301a8810, 0x0378ba04, 0x86642e1b, 0x92df86da, 0x0a163b84, 0x2a0e8f06, 0x45201302, 0x375d965c, 0x845e803b, + 0x4ffd211f, 0x78200886, 0x00321987, 0x00aa0003, 0x03560648, 0x0009008e, 0x00250013, 0x25603700, 0xe3441812, 0x18012008, 0x2007d553, 0x083b5eab, + 0x343a3a30, 0x117a03d8, 0x81040a41, 0x0a120197, 0x07821240, 0x03483908, 0x88e78946, 0xc501b2fe, 0x323a3335, 0x2200ff36, 0x7ffd137d, 0x31fe4603, + 0x02227c14, 0x00bafc81, 0x3b010400, 0xc50507ff, 0x07000c05, 0x1b001100, 0x00002d00, 0x15011101, 0x35210382, 0x20819203, 0x65451805, 0xaa032810, + 0x72fe2801, 0x5ce0d8fe, 0x6718052d, 0xc82307c0, 0x180e3308, 0x200af853, 0x736818b3, 0x2802210b, 0x35093d60, 0x2b292e28, 0x1b640fcc, 0x9e02fffd, + 0x631c8efe, 0xfd010210, 0x00830062, 0xae000e24, 0x08830100, 0x02200384, 0x01240b86, 0x1f000d00, 0x02200b86, 0x3d20b382, 0x03240b86, 0x8f002400, + 0x04200b86, 0xd0202382, 0x05240b86, 0xfe000f00, 0x062a0b86, 0x28010c00, 0x01000300, 0x53840904, 0x0b860020, 0x1a000122, 0x17850982, 0x0e000224, + 0x17862d00, 0x48000324, 0x0b864500, 0x23820420, 0x0b86b420, 0x1e000524, 0x0b86de00, 0x18000624, 0x4d830e01, 0x75004630, 0x6e007200, 0x63006100, + 0x20006500, 0x07824900, 0x0f826f20, 0x0000732e, 0x6e727546, 0x20656361, 0x6e6f6349, 0x52200e82, 0x67201f82, 0x6c202d82, 0x72282b82, 0x65520000, + 0x616c7567, 0x46210882, 0x212f8300, 0x07830074, 0x67007222, 0x3a204584, 0x59994982, 0x83002021, 0x8233201f, 0x843220b0, 0x00302403, 0x82340032, + 0x6e6f2a6f, 0x726f4674, 0x3a206567, 0x827b8c20, 0x2d33260f, 0x30322d32, 0xa8258332, 0x825620b0, 0x0072248a, 0x84690073, 0x002022a0, 0x22018230, + 0x842e0031, 0x00303007, 0x72655600, 0x6e6f6973, 0x31303020, 0x8230302e, 0x41b08d10, 0x07411108, 0x02002206, 0x20008b00, 0x840c8b01, 0x8265200b, + 0x01ce0805, 0x03000200, 0x03010201, 0x05010401, 0x07010601, 0x09010801, 0x0b010a01, 0x0d010c01, 0x0f010e01, 0x11011001, 0x13011201, 0x15011401, + 0x17011601, 0x19011801, 0x1b011a01, 0x1d011c01, 0x1f011e01, 0x21012001, 0x23012201, 0x25012401, 0x27012601, 0x29012801, 0x2b012a01, 0x2d012c01, + 0x2f012e01, 0x31013001, 0x33013201, 0x35013401, 0x37013601, 0x39013801, 0x3b013a01, 0x3d013c01, 0x3f013e01, 0x41014001, 0x43014201, 0x45014401, + 0x47014601, 0x49014801, 0x4b014a01, 0x4d014c01, 0x4f014e01, 0x51015001, 0x53015201, 0x55015401, 0x57015601, 0x59015801, 0x5b015a01, 0x5d015c01, + 0x5f015e01, 0x61016001, 0x75076201, 0x3045696e, 0x07863046, 0x07863120, 0x07863220, 0x07863320, 0x07843420, 0x85303121, 0x30312127, 0x31212785, + 0x21278530, 0x27853031, 0x87303121, 0x86352027, 0x8636202f, 0x86372007, 0x86382007, 0x86392007, 0x86412007, 0x86422007, 0x86432007, 0x86442007, + 0x86452007, 0x85462007, 0x30312107, 0x31200786, 0x7f860786, 0x7f863120, 0x7f863120, 0x7f863120, 0x7f863120, 0x7f863120, 0x7f863120, 0x7f863120, + 0x7f863120, 0x7f863120, 0x7f863120, 0x7f863120, 0x7f863120, 0x7f863120, 0x85303221, 0x31322177, 0x7f860786, 0x7f863220, 0x7f863220, 0x7f863220, + 0x7f863220, 0x7f863220, 0x7f863220, 0x7f863220, 0x7f863220, 0x7f863220, 0x7f863220, 0x7f863220, 0x7f863220, 0x7f863220, 0x85303321, 0x31332177, + 0x7f860786, 0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320, 0x7f863320, + 0x7f863320, 0x7f863320, 0x85303421, 0x31342177, 0x7f860786, 0x7f863420, 0x7f863420, 0x7f863420, 0x7f863420, 0x7f863420, 0x7f863420, 0x7f863420, + 0x7f863420, 0x7f863420, 0x7f863420, 0x7f863420, 0x7f863420, 0x7f863420, 0x85303521, 0x31352177, 0x7f860786, 0x7f863520, 0x7f863520, 0x7f863520, + 0x7f863520, 0x7f863520, 0x7f863520, 0x7f863520, 0x7f863520, 0x00423529, 0xff010000, 0x450200ff, 0x0c2408d9, 0x04001400, 0x02221582, 0x13840000, + 0x84050544, 0x55e02305, 0x15822068, 0x0c5b7d18, 0x3131fa05, 0x0000f177, }; diff --git a/src/gui/guiConst.cpp b/src/gui/guiConst.cpp index 2629c7b49..039bfd5bc 100644 --- a/src/gui/guiConst.cpp +++ b/src/gui/guiConst.cpp @@ -177,7 +177,7 @@ const char* insTypes[DIV_INS_MAX+1][3]={ {"C219",ICON_FA_VOLUME_UP,ICON_FUR_INS_C219}, {"FM (ESFM)",ICON_FA_AREA_CHART,ICON_FUR_INS_ESFM}, {"PowerNoise (noise)",ICON_FUR_NOISE,ICON_FUR_INS_POWERNOISE}, - {"PowerNoise (slope)",ICON_FUR_SAW,ICON_FUR_INS_POWERNOISE}, + {"PowerNoise (slope)",ICON_FUR_SAW,ICON_FUR_INS_POWERNOISE_SAW}, {NULL,ICON_FA_QUESTION,ICON_FA_QUESTION} }; diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index f9c15b987..71f3cda80 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -44,7 +44,7 @@ #endif #ifdef HAVE_FREETYPE -#define FONT_BACKEND_DEFAULT 1 +#define FONT_BACKEND_DEFAULT 0 #else #define FONT_BACKEND_DEFAULT 0 #endif @@ -1520,10 +1520,10 @@ void FurnaceGUI::drawSettings() { ImGui::Text("YM2612"); ImGui::TableNextColumn(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::Combo("##YM2612Core",&settings.ym2612Core,ym2612Cores,3)) settingsChanged=true; + if (ImGui::Combo("##YM2612Core",&settings.ym2612Core,ym2612Cores,2)) settingsChanged=true; ImGui::TableNextColumn(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::Combo("##YM2612CoreRender",&settings.ym2612CoreRender,ym2612Cores,3)) settingsChanged=true; + if (ImGui::Combo("##YM2612CoreRender",&settings.ym2612CoreRender,ym2612Cores,2)) settingsChanged=true; ImGui::TableNextRow(); ImGui::TableNextColumn(); diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index efa453c3c..86b478ca8 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -2270,6 +2270,23 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl } break; } + case DIV_SYSTEM_SFX_BEEPER_QUADTONE: { + bool sysPal=flags.getInt("clockSel",0); + bool noHiss=flags.getBool("noHiss",false); + if (ImGui::Checkbox("PAL",&sysPal)) { + altered=true; + } + if (ImGui::Checkbox("Disable hissing",&noHiss)) { + altered=true; + } + if (altered) { + e->lockSave([&]() { + flags.set("clockSel",(int)sysPal); + flags.set("noHiss",noHiss); + }); + } + break; + } case DIV_SYSTEM_SWAN: case DIV_SYSTEM_BUBSYS_WSG: case DIV_SYSTEM_PET: diff --git a/src/icon/furIcons.h b/src/icon/furIcons.h index 3932f5213..fb1c8a7b5 100644 --- a/src/icon/furIcons.h +++ b/src/icon/furIcons.h @@ -1,7 +1,7 @@ // not auto-generated. update every time you change icons.ttf! #define ICON_MIN_FUR 0xe0f0 -#define ICON_MAX_FUR 0xe15a +#define ICON_MAX_FUR 0xe15b // test #define ICON_FUR_TEST0 u8"\ue0f0" @@ -68,6 +68,7 @@ #define ICON_FUR_INS_C219 u8"\ue142" #define ICON_FUR_INS_ESFM u8"\ue143" #define ICON_FUR_INS_POWERNOISE u8"\ue15a" +#define ICON_FUR_INS_POWERNOISE_SAW u8"\ue15b" // sample editor #define ICON_FUR_SAMPLE_APPLY_SILENCE u8"\ue136"