ControlBlock LED continuously blinking and power button not working
-
I have a ControlBlock 2 and a Raspberry Pi 3 and the ControlBlock is working to use my wired NES controllers, however the power LED only blinks and never stops, and the power button can be used to turn on the device but does nothing for shutdown.
Reading other posts with the same problem from years ago, people said if it was only blinking then the driver wasn't working, but it obviously is since my controllers work.
powerswitchOn is set to true in my config
Anyone have any ideas what might be wrong?
-
Can you post the console output of the driver installation here?
-
Here you go.
pi@retropie:~ $ wget -O - https://raw.githubusercontent.com/petrockblog/ControlBlockService2/master/install.sh | sudo bash --2019-11-01 03:31:12-- https://raw.githubusercontent.com/petrockblog/ControlBlockService2/master/install.sh Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.24.133 Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.24.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 2299 (2.2K) [text/plain] Saving to: ‘STDOUT’ - 100%[==================================>] 2.25K --.-KB/s in 0s 2019-11-01 03:31:12 (11.1 MB/s) - written to stdout [2299/2299] Reading package lists... Done Building dependency tree Reading state information... Done cmake is already the newest version (3.7.2-1). doxygen is already the newest version (1.8.13-4). g++ is already the newest version (4:6.3.0-4). git is already the newest version (1:2.11.0-3+deb9u4). libc6 is already the newest version (2.24-11+deb9u4). libc6-dev is already the newest version (2.24-11+deb9u4). 0 upgraded, 0 newly installed, 0 to remove and 7 not upgraded. Cloning into 'ControlBlockService2'... remote: Enumerating objects: 79, done. remote: Counting objects: 100% (79/79), done. remote: Compressing objects: 100% (61/61), done. remote: Total 1552 (delta 25), reused 60 (delta 18), pack-reused 1473 Receiving objects: 100% (1552/1552), 2.62 MiB | 2.62 MiB/s, done. Resolving deltas: 100% (888/888), done. Submodule 'src/lib/LIO' (https://github.com/petrockblog/LIO.git) registered for path 'src/lib/LIO' Submodule 'src/lib/jsoncpp' (https://github.com/open-source-parsers/jsoncpp.git) registered for path 'src/lib/jsoncpp' Submodule 'test/lib/googletest' (https://github.com/google/googletest.git) registered for path 'test/lib/googletest' Cloning into '/home/pi/ControlBlockService2/src/lib/LIO'... remote: Enumerating objects: 237, done. remote: Total 237 (delta 0), reused 0 (delta 0), pack-reused 237 Receiving objects: 100% (237/237), 45.49 KiB | 0 bytes/s, done. Resolving deltas: 100% (118/118), done. Cloning into '/home/pi/ControlBlockService2/src/lib/jsoncpp'... remote: Enumerating objects: 7784, done. remote: Total 7784 (delta 0), reused 0 (delta 0), pack-reused 7784 Receiving objects: 100% (7784/7784), 2.41 MiB | 2.80 MiB/s, done. Resolving deltas: 100% (4901/4901), done. Cloning into '/home/pi/ControlBlockService2/test/lib/googletest'... remote: Enumerating objects: 18899, done. remote: Total 18899 (delta 0), reused 0 (delta 0), pack-reused 18899 Receiving objects: 100% (18899/18899), 6.86 MiB | 3.30 MiB/s, done. Resolving deltas: 100% (13967/13967), done. Submodule path 'src/lib/LIO': checked out 'f85e0d95972ccd7c938a9dce8038f449150aa5ae' Submodule path 'src/lib/jsoncpp': checked out 'd8cd848ede1071a25846cd90b4fddf269d868ff1' Submodule path 'test/lib/googletest': checked out 'ec44c6c1675c25b9827aacd08c02433cccde7780' /home/pi/ControlBlockService2/build /home/pi/ControlBlockService2 -- The C compiler identification is GNU 6.3.0 -- The CXX compiler identification is GNU 6.3.0 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- JsonCpp Version: 1.7.7 -- Found PythonInterp: /usr/bin/python2 (found suitable version "2.7.13", minimum required is "2.6") -- Looking for pthread.h -- Looking for pthread.h - found -- Looking for pthread_create -- Looking for pthread_create - not found -- Looking for pthread_create in pthreads -- Looking for pthread_create in pthreads - not found -- Looking for pthread_create in pthread -- Looking for pthread_create in pthread - found -- Found Threads: TRUE -- Configuring done -- Generating done -- Build files have been written to: /home/pi/ControlBlockService2/build Scanning dependencies of target uninstallservice [100%] Uninstalling service. [ ok ] Stopping controlblockservice (via systemctl): controlblockservice.service. [100%] Built target uninstallservice Scanning dependencies of target controlblock-uinput [ 2%] Building CXX object src/controlblock/uinput/CMakeFiles/controlblock-uinput.dir/UInputGamepadArcade.cpp.o [ 4%] Building CXX object src/controlblock/uinput/CMakeFiles/controlblock-uinput.dir/UInputDevice.cpp.o [ 6%] Building CXX object src/controlblock/uinput/CMakeFiles/controlblock-uinput.dir/UInputGamepadSNES.cpp.o [ 8%] Building CXX object src/controlblock/uinput/CMakeFiles/controlblock-uinput.dir/UInputGamepadNES.cpp.o [ 10%] Building CXX object src/controlblock/uinput/CMakeFiles/controlblock-uinput.dir/UInputGamepadGenesis.cpp.o [ 12%] Building CXX object src/controlblock/uinput/CMakeFiles/controlblock-uinput.dir/UInputKeyboard.cpp.o [ 14%] Building CXX object src/controlblock/uinput/CMakeFiles/controlblock-uinput.dir/UInputFactory.cpp.o [ 16%] Linking CXX static library libcontrolblock-uinput.a [ 16%] Built target controlblock-uinput Scanning dependencies of target jsoncpp_lib_static [ 18%] Building CXX object src/lib/jsoncpp/src/lib_json/CMakeFiles/jsoncpp_lib_static.dir/json_reader.cpp.o [ 20%] Building CXX object src/lib/jsoncpp/src/lib_json/CMakeFiles/jsoncpp_lib_static.dir/json_value.cpp.o In file included from /usr/include/c++/6/map:60:0, from /home/pi/ControlBlockService2/src/lib/jsoncpp/include/json/value.h:17, from /home/pi/ControlBlockService2/src/lib/jsoncpp/src/lib_json/json_value.cpp:8: /usr/include/c++/6/bits/stl_tree.h: In member function ‘std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_emplace_hint_unique(std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator, _Args&& ...) [with _Args = {const std::piecewise_construct_t&, std::tuple<const Json::Value::CZString&>, std::tuple<>}; _Key = Json::Value::CZString; _Val = std::pair<const Json::Value::CZString, Json::Value>; _KeyOfValue = std::_Select1st<std::pair<const Json::Value::CZString, Json::Value> >; _Compare = std::less<Json::Value::CZString>; _Alloc = std::allocator<std::pair<const Json::Value::CZString, Json::Value> >]’: /usr/include/c++/6/bits/stl_tree.h:2193:7: note: parameter passing for argument of type ‘std::_Rb_tree<Json::Value::CZString, std::pair<const Json::Value::CZString, Json::Value>, std::_Select1st<std::pair<const Json::Value::CZString, Json::Value> >, std::less<Json::Value::CZString>, std::allocator<std::pair<const Json::Value::CZString, Json::Value> > >::const_iterator {aka std::_Rb_tree_const_iterator<std::pair<const Json::Value::CZString, Json::Value> >}’ will change in GCC 7.1 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/6/bits/stl_tree.h:2193:7: note: parameter passing for argument of type ‘std::_Rb_tree<Json::Value::CZString, std::pair<const Json::Value::CZString, Json::Value>, std::_Select1st<std::pair<const Json::Value::CZString, Json::Value> >, std::less<Json::Value::CZString>, std::allocator<std::pair<const Json::Value::CZString, Json::Value> > >::const_iterator {aka std::_Rb_tree_const_iterator<std::pair<const Json::Value::CZString, Json::Value> >}’ will change in GCC 7.1 /usr/include/c++/6/bits/stl_tree.h: In function ‘std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_insert_unique_(std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator, _Arg&&, _NodeGen&) [with _Arg = std::pair<const Json::Value::CZString, Json::Value>&; _NodeGen = std::_Rb_tree<Json::Value::CZString, std::pair<const Json::Value::CZString, Json::Value>, std::_Select1st<std::pair<const Json::Value::CZString, Json::Value> >, std::less<Json::Value::CZString>, std::allocator<std::pair<const Json::Value::CZString, Json::Value> > >::_Alloc_node; _Key = Json::Value::CZString; _Val = std::pair<const Json::Value::CZString, Json::Value>; _KeyOfValue = std::_Select1st<std::pair<const Json::Value::CZString, Json::Value> >; _Compare = std::less<Json::Value::CZString>; _Alloc = std::allocator<std::pair<const Json::Value::CZString, Json::Value> >]’: /usr/include/c++/6/bits/stl_tree.h:1989:7: note: parameter passing for argument of type ‘std::_Rb_tree<Json::Value::CZString, std::pair<const Json::Value::CZString, Json::Value>, std::_Select1st<std::pair<const Json::Value::CZString, Json::Value> >, std::less<Json::Value::CZString>, std::allocator<std::pair<const Json::Value::CZString, Json::Value> > >::const_iterator {aka std::_Rb_tree_const_iterator<std::pair<const Json::Value::CZString, Json::Value> >}’ will change in GCC 7.1 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/6/bits/stl_tree.h: In member function ‘Json::Value& Json::Value::operator[](Json::Value::ArrayIndex)’: /usr/include/c++/6/bits/stl_tree.h:950:65: note: parameter passing for argument of type ‘std::_Rb_tree<Json::Value::CZString, std::pair<const Json::Value::CZString, Json::Value>, std::_Select1st<std::pair<const Json::Value::CZString, Json::Value> >, std::less<Json::Value::CZString>, std::allocator<std::pair<const Json::Value::CZString, Json::Value> > >::const_iterator {aka std::_Rb_tree_const_iterator<std::pair<const Json::Value::CZString, Json::Value> >}’ will change in GCC 7.1 return _M_insert_unique_(__pos, std::forward<_Arg>(__x), __an); ^ In file included from /usr/include/c++/6/map:61:0, from /home/pi/ControlBlockService2/src/lib/jsoncpp/include/json/value.h:17, from /home/pi/ControlBlockService2/src/lib/jsoncpp/src/lib_json/json_value.cpp:8: /usr/include/c++/6/bits/stl_map.h: In member function ‘bool Json::Value::removeIndex(Json::Value::ArrayIndex, Json::Value*)’: /usr/include/c++/6/bits/stl_map.h:483:4: note: parameter passing for argument of type ‘std::_Rb_tree<Json::Value::CZString, std::pair<const Json::Value::CZString, Json::Value>, std::_Select1st<std::pair<const Json::Value::CZString, Json::Value> >, std::less<Json::Value::CZString>, std::allocator<std::pair<const Json::Value::CZString, Json::Value> > >::const_iterator {aka std::_Rb_tree_const_iterator<std::pair<const Json::Value::CZString, Json::Value> >}’ will change in GCC 7.1 __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct, ^~~ In file included from /usr/include/c++/6/map:60:0, from /home/pi/ControlBlockService2/src/lib/jsoncpp/include/json/value.h:17, from /home/pi/ControlBlockService2/src/lib/jsoncpp/src/lib_json/json_value.cpp:8: /usr/include/c++/6/bits/stl_tree.h: In member function ‘Json::Value& Json::Value::resolveReference(const char*)’: /usr/include/c++/6/bits/stl_tree.h:950:65: note: parameter passing for argument of type ‘std::_Rb_tree<Json::Value::CZString, std::pair<const Json::Value::CZString, Json::Value>, std::_Select1st<std::pair<const Json::Value::CZString, Json::Value> >, std::less<Json::Value::CZString>, std::allocator<std::pair<const Json::Value::CZString, Json::Value> > >::const_iterator {aka std::_Rb_tree_const_iterator<std::pair<const Json::Value::CZString, Json::Value> >}’ will change in GCC 7.1 return _M_insert_unique_(__pos, std::forward<_Arg>(__x), __an); ^ /usr/include/c++/6/bits/stl_tree.h: In member function ‘Json::Value& Json::Value::resolveReference(const char*, const char*)’: /usr/include/c++/6/bits/stl_tree.h:950:65: note: parameter passing for argument of type ‘std::_Rb_tree<Json::Value::CZString, std::pair<const Json::Value::CZString, Json::Value>, std::_Select1st<std::pair<const Json::Value::CZString, Json::Value> >, std::less<Json::Value::CZString>, std::allocator<std::pair<const Json::Value::CZString, Json::Value> > >::const_iterator {aka std::_Rb_tree_const_iterator<std::pair<const Json::Value::CZString, Json::Value> >}’ will change in GCC 7.1 return _M_insert_unique_(__pos, std::forward<_Arg>(__x), __an); ^ [ 22%] Building CXX object src/lib/jsoncpp/src/lib_json/CMakeFiles/jsoncpp_lib_static.dir/json_writer.cpp.o [ 24%] Linking CXX static library libjsoncpp.a [ 24%] Built target jsoncpp_lib_static Scanning dependencies of target LIOlib [ 26%] Building CXX object src/lib/LIO/src/CMakeFiles/LIOlib.dir/AsyncInput.cpp.o [ 28%] Building CXX object src/lib/LIO/src/CMakeFiles/LIOlib.dir/EventHandledInput.cpp.o [ 30%] Building CXX object src/lib/LIO/src/CMakeFiles/LIOlib.dir/GPIO_Linux.cpp.o [ 32%] Building CXX object src/lib/LIO/src/CMakeFiles/LIOlib.dir/InputPort.cpp.o [ 34%] Building CXX object src/lib/LIO/src/CMakeFiles/LIOlib.dir/OutputPort.cpp.o [ 36%] Building CXX object src/lib/LIO/src/CMakeFiles/LIOlib.dir/example.cpp.o [ 38%] Linking CXX static library libLIOlib.a [ 38%] Built target LIOlib Scanning dependencies of target mcp23s17Lib [ 40%] Building CXX object src/lib/mcp23s17/CMakeFiles/mcp23s17Lib.dir/mcp23s17.cpp.o [ 42%] Linking CXX static library libmcp23s17Lib.a [ 42%] Built target mcp23s17Lib Scanning dependencies of target controlblock-app [ 44%] Building CXX object src/controlblock/app/CMakeFiles/controlblock-app.dir/ControlBlock.cpp.o [ 46%] Building CXX object src/controlblock/app/CMakeFiles/controlblock-app.dir/PowerSwitch.cpp.o [ 48%] Linking CXX static library libcontrolblock-app.a [ 48%] Built target controlblock-app Scanning dependencies of target controlblock-config [ 50%] Building CXX object src/controlblock/config/CMakeFiles/controlblock-config.dir/ControlBlockConfiguration.cpp.o [ 52%] Building CXX object src/controlblock/config/CMakeFiles/controlblock-config.dir/SingleConfiguration.cpp.o [ 54%] Linking CXX static library libcontrolblock-config.a [ 54%] Built target controlblock-config Scanning dependencies of target controlblock-hal [ 56%] Building CXX object src/controlblock/hal/CMakeFiles/controlblock-hal.dir/DigitalIn.cpp.o [ 58%] Building CXX object src/controlblock/hal/CMakeFiles/controlblock-hal.dir/DigitalOut.cpp.o [ 60%] Building CXX object src/controlblock/hal/CMakeFiles/controlblock-hal.dir/DigitalIO.cpp.o [ 62%] Building CXX object src/controlblock/hal/CMakeFiles/controlblock-hal.dir/HALFactory.cpp.o [ 64%] Building CXX object src/controlblock/hal/CMakeFiles/controlblock-hal.dir/mcp23s17pi.cpp.o [ 66%] Linking CXX static library libcontrolblock-hal.a [ 66%] Built target controlblock-hal Scanning dependencies of target controlblock-gamepads [ 68%] Building CXX object src/controlblock/gamepads/CMakeFiles/controlblock-gamepads.dir/ArcadeGamepad.cpp.o [ 70%] Building CXX object src/controlblock/gamepads/CMakeFiles/controlblock-gamepads.dir/MAMEGamepad.cpp.o [ 72%] Building CXX object src/controlblock/gamepads/CMakeFiles/controlblock-gamepads.dir/NONEGamepad.cpp.o [ 74%] Building CXX object src/controlblock/gamepads/CMakeFiles/controlblock-gamepads.dir/SNESGamepad.cpp.o [ 76%] Building CXX object src/controlblock/gamepads/CMakeFiles/controlblock-gamepads.dir/NESGamepad.cpp.o [ 78%] Building CXX object src/controlblock/gamepads/CMakeFiles/controlblock-gamepads.dir/GenesisGamepad.cpp.o [ 80%] Building CXX object src/controlblock/gamepads/CMakeFiles/controlblock-gamepads.dir/GamepadFactory.cpp.o [ 82%] Linking CXX static library libcontrolblock-gamepads.a [ 82%] Built target controlblock-gamepads Scanning dependencies of target controlblock [ 84%] Building CXX object CMakeFiles/controlblock.dir/src/controlblock/main.cpp.o [ 86%] Linking CXX executable controlblock [ 86%] Built target controlblock Scanning dependencies of target jsontestrunner_exe [ 88%] Building CXX object src/lib/jsoncpp/src/jsontestrunner/CMakeFiles/jsontestrunner_exe.dir/main.cpp.o [ 90%] Linking CXX executable jsontestrunner_exe [ 90%] Built target jsontestrunner_exe Scanning dependencies of target jsoncpp_test [ 92%] Building CXX object src/lib/jsoncpp/src/test_lib_json/CMakeFiles/jsoncpp_test.dir/jsontest.cpp.o [ 94%] Building CXX object src/lib/jsoncpp/src/test_lib_json/CMakeFiles/jsoncpp_test.dir/main.cpp.o [ 96%] Linking CXX executable jsoncpp_test Testing ValueTest/checkNormalizeFloatingPointStr: OK Testing ValueTest/memberCount: OK Testing ValueTest/objects: OK Testing ValueTest/arrays: OK Testing ValueTest/arrayIssue252: OK Testing ValueTest/null: OK Testing ValueTest/strings: OK Testing ValueTest/bools: OK Testing ValueTest/integers: OK Testing ValueTest/nonIntegers: OK Testing ValueTest/compareNull: OK Testing ValueTest/compareInt: OK Testing ValueTest/compareUInt: OK Testing ValueTest/compareDouble: OK Testing ValueTest/compareString: OK Testing ValueTest/compareBoolean: OK Testing ValueTest/compareArray: OK Testing ValueTest/compareObject: OK Testing ValueTest/compareType: OK Testing ValueTest/offsetAccessors: OK Testing ValueTest/typeChecksThrowExceptions: OK Testing ValueTest/StaticString: OK Testing ValueTest/CommentBefore: OK Testing ValueTest/zeroes: OK Testing ValueTest/zeroesInKeys: OK Testing ValueTest/specialFloats: OK Testing ValueTest/precision: OK Testing WriterTest/dropNullPlaceholders: OK Testing StreamWriterTest/dropNullPlaceholders: OK Testing StreamWriterTest/writeZeroes: OK Testing ReaderTest/parseWithNoErrors: OK Testing ReaderTest/parseWithNoErrorsTestingOffsets: OK Testing ReaderTest/parseWithOneError: OK Testing ReaderTest/parseChineseWithOneError: OK Testing ReaderTest/parseWithDetailError: OK Testing CharReaderTest/parseWithNoErrors: OK Testing CharReaderTest/parseWithNoErrorsTestingOffsets: OK Testing CharReaderTest/parseWithOneError: OK Testing CharReaderTest/parseChineseWithOneError: OK Testing CharReaderTest/parseWithDetailError: OK Testing CharReaderTest/parseWithStackLimit: OK Testing CharReaderStrictModeTest/dupKeys: OK Testing CharReaderFailIfExtraTest/issue164: OK Testing CharReaderFailIfExtraTest/issue107: OK Testing CharReaderFailIfExtraTest/commentAfterObject: OK Testing CharReaderFailIfExtraTest/commentAfterArray: OK Testing CharReaderFailIfExtraTest/commentAfterBool: OK Testing CharReaderAllowDropNullTest/issue178: OK Testing CharReaderAllowSingleQuotesTest/issue182: OK Testing CharReaderAllowZeroesTest/issue176: OK Testing CharReaderAllowSpecialFloatsTest/issue209: OK Testing BuilderTest/settings: OK Testing IteratorTest/distance: OK Testing IteratorTest/names: OK Testing IteratorTest/indexes: OK Testing IteratorTest/const: OK Testing RValueTest/moveConstruction: OK All 57 tests passed [ 96%] Built target jsoncpp_test Scanning dependencies of target Example [ 98%] Building CXX object src/lib/LIO/src/CMakeFiles/Example.dir/example.cpp.o [100%] Linking CXX executable Example [100%] Built target Example [ 16%] Built target controlblock-uinput [ 24%] Built target jsoncpp_lib_static [ 38%] Built target LIOlib [ 42%] Built target mcp23s17Lib [ 48%] Built target controlblock-app [ 54%] Built target controlblock-config [ 66%] Built target controlblock-hal [ 82%] Built target controlblock-gamepads [ 86%] Built target controlblock [ 90%] Built target jsontestrunner_exe [ 96%] Built target jsoncpp_test [100%] Built target Example Install the project... -- Install configuration: "Release" -- Installing: /usr/bin/controlblock -- Installing: /etc/controlblockconfig.cfg -- Installing: /etc/controlblockswitchoff.sh -- Installing: /usr/local/lib/pkgconfig/jsoncpp.pc -- Installing: /usr/local/lib/libjsoncpp.a -- Installing: /usr/local/include/json/allocator.h -- Installing: /usr/local/include/json/assertions.h -- Installing: /usr/local/include/json/autolink.h -- Installing: /usr/local/include/json/config.h -- Installing: /usr/local/include/json/features.h -- Installing: /usr/local/include/json/forwards.h -- Installing: /usr/local/include/json/json.h -- Installing: /usr/local/include/json/reader.h -- Installing: /usr/local/include/json/value.h -- Installing: /usr/local/include/json/version.h -- Installing: /usr/local/include/json/writer.h Scanning dependencies of target installservice [100%] Installing service. Making sure that spi-dev is contained in /etc/modules ... [ ok ] Starting controlblockservice (via systemctl): controlblockservice.service. [100%] Built target installservice /home/pi/ControlBlockService2 [SUCCESS] The ControlBlock driver binary is installed [SUCCESS] The ControlBlock service is running You can find the configuration file at /etc/controlblockconfig.cfg.
-
@petrockblog Any luck finding anything in all that?
-
@kdbdallas Curious if you found a resolution to your issue?
-
Hello, we recently identified a bug in the ControlBlock driver. I am very sorry for that!
Your observations see to match the symptoms caused by that. We released an update yesterday and that should also fix your problems.
Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.
Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.