From 122aa848abb79543ab0b138d257e61b4908ea01e Mon Sep 17 00:00:00 2001 From: Andreas Tsouchlos Date: Fri, 9 Dec 2022 14:59:01 +0100 Subject: [PATCH] Removed sw directory --- sw/cpp/.clang-format | 28 - sw/cpp/CMakeLists.txt | 37 - sw/cpp/src/proximal.h | 277 ---- sw/cpp/src/python_interface.cpp | 58 - sw/python/README.md | 24 - sw/python/cpp_modules/__init__.py | 0 ...p_decoders.cpython-310-x86_64-linux-gnu.so | Bin 359896 -> 0 bytes sw/python/decoders/__init__.py | 2 - sw/python/decoders/maximum_likelihood.py | 52 - sw/python/decoders/proximal.py | 97 -- sw/python/requirements.txt | 4 - sw/python/res/204.33.484.alist | 310 ---- sw/python/res/204.33.486.alist | 310 ---- sw/python/res/204.55.187.alist | 310 ---- sw/python/res/408.33.844.alist | 616 -------- sw/python/res/816.1A4.845.alist | 1364 ----------------- sw/python/res/96.3.965.alist | 148 -- sw/python/res/999.111.3.5543.alist | 1114 -------------- sw/python/res/999.111.3.5565.alist | 1114 -------------- sw/python/res/BCH_31_11.alist | 55 - sw/python/res/BCH_31_26.alist | 40 - sw/python/res/BCH_7_4.alist | 14 - sw/python/res/PEGReg252x504.alist | 760 --------- sw/python/scripts/proximal/simulate_2d_BER.py | 154 -- .../scripts/proximal/simulate_2d_avg_error.py | 147 -- .../scripts/proximal/simulate_gradient.py | 88 -- sw/python/utility/__init__.py | 2 - sw/python/utility/codes.py | 249 --- sw/python/utility/misc.py | 72 - sw/python/utility/noise.py | 34 - sw/python/utility/simulation/__init__.py | 77 - sw/python/utility/simulation/management.py | 239 --- sw/python/utility/simulation/simulators.py | 121 -- sw/python/utility/test/__init__.py | 1 - sw/python/utility/test/test_proximal.py | 72 - sw/python/utility/test/test_soft_decision.py | 55 - sw/python/utility/test/test_utility.py | 48 - sw/python/utility/test/test_visualization.py | 24 - sw/python/utility/visualization.py | 75 - 39 files changed, 8192 deletions(-) delete mode 100644 sw/cpp/.clang-format delete mode 100644 sw/cpp/CMakeLists.txt delete mode 100644 sw/cpp/src/proximal.h delete mode 100644 sw/cpp/src/python_interface.cpp delete mode 100644 sw/python/README.md delete mode 100644 sw/python/cpp_modules/__init__.py delete mode 100755 sw/python/cpp_modules/cpp_decoders.cpython-310-x86_64-linux-gnu.so delete mode 100644 sw/python/decoders/__init__.py delete mode 100644 sw/python/decoders/maximum_likelihood.py delete mode 100644 sw/python/decoders/proximal.py delete mode 100644 sw/python/requirements.txt delete mode 100644 sw/python/res/204.33.484.alist delete mode 100644 sw/python/res/204.33.486.alist delete mode 100644 sw/python/res/204.55.187.alist delete mode 100644 sw/python/res/408.33.844.alist delete mode 100644 sw/python/res/816.1A4.845.alist delete mode 100644 sw/python/res/96.3.965.alist delete mode 100644 sw/python/res/999.111.3.5543.alist delete mode 100644 sw/python/res/999.111.3.5565.alist delete mode 100644 sw/python/res/BCH_31_11.alist delete mode 100644 sw/python/res/BCH_31_26.alist delete mode 100644 sw/python/res/BCH_7_4.alist delete mode 100644 sw/python/res/PEGReg252x504.alist delete mode 100644 sw/python/scripts/proximal/simulate_2d_BER.py delete mode 100644 sw/python/scripts/proximal/simulate_2d_avg_error.py delete mode 100644 sw/python/scripts/proximal/simulate_gradient.py delete mode 100644 sw/python/utility/__init__.py delete mode 100644 sw/python/utility/codes.py delete mode 100644 sw/python/utility/misc.py delete mode 100644 sw/python/utility/noise.py delete mode 100644 sw/python/utility/simulation/__init__.py delete mode 100644 sw/python/utility/simulation/management.py delete mode 100644 sw/python/utility/simulation/simulators.py delete mode 100644 sw/python/utility/test/__init__.py delete mode 100644 sw/python/utility/test/test_proximal.py delete mode 100644 sw/python/utility/test/test_soft_decision.py delete mode 100644 sw/python/utility/test/test_utility.py delete mode 100644 sw/python/utility/test/test_visualization.py delete mode 100644 sw/python/utility/visualization.py diff --git a/sw/cpp/.clang-format b/sw/cpp/.clang-format deleted file mode 100644 index 4b9f225..0000000 --- a/sw/cpp/.clang-format +++ /dev/null @@ -1,28 +0,0 @@ -BasedOnStyle: LLVM -Language: Cpp - -IndentWidth: 4 -UseTab: Never -#NamespaceIndentation: All - -PointerAlignment: Left -AccessModifierOffset: -4 -AlwaysBreakTemplateDeclarations: true -LambdaBodyIndentation: Signature - -MaxEmptyLinesToKeep: 3 -# ColumnLimit: 128 - -CompactNamespaces: true -FixNamespaceComments: true - -AllowShortFunctionsOnASingleLine: false -AllowShortIfStatementsOnASingleLine: true - -AlignConsecutiveAssignments: true -AlignConsecutiveBitFields: true -AlignConsecutiveDeclarations: true -AlignConsecutiveMacros: true - -#BraceWrapping: -# BeforeElse: true diff --git a/sw/cpp/CMakeLists.txt b/sw/cpp/CMakeLists.txt deleted file mode 100644 index d7d8baa..0000000 --- a/sw/cpp/CMakeLists.txt +++ /dev/null @@ -1,37 +0,0 @@ -cmake_minimum_required (VERSION 3.0) -project(cpp_decoders) - - -if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - message(STATUS "Setting build type to 'Release' as none was specified.") - set(CMAKE_BUILD_TYPE - Release - CACHE STRING "Choose the type of build." FORCE) - set_property( - CACHE CMAKE_BUILD_TYPE - PROPERTY STRINGS - "Debug" - "Release") -endif() - -set(CMAKE_CXX_STANDARD 23) - -find_package(Eigen3 3.3 REQUIRED NO_MODULE) -find_package(pybind11 CONFIG REQUIRED) - -include_directories(${pybind11_INCLUDE_DIRS}) - - -find_package(OpenMP REQUIRED) - -#add_compile_options(-ffast-math) - -pybind11_add_module(cpp_decoders src/python_interface.cpp) -target_link_libraries(cpp_decoders PRIVATE Eigen3::Eigen OpenMP::OpenMP_CXX) - -set(INSTALL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../cpp_modules) - -install(TARGETS cpp_decoders ARCHIVE DESTINATION ${INSTALL_DIR} - LIBRARY DESTINATION ${INSTALL_DIR} - RUNTIME DESTINATION ${INSTALL_DIR}) - diff --git a/sw/cpp/src/proximal.h b/sw/cpp/src/proximal.h deleted file mode 100644 index 42e47b9..0000000 --- a/sw/cpp/src/proximal.h +++ /dev/null @@ -1,277 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include - -#include -#include - - -/* - * - * Using declarations - * - */ - - -template -using MatrixiR = Eigen::Matrix; - -template -using MatrixdR = Eigen::Matrix; - -template -using RowVectori = Eigen::RowVector; - -template -using RowVectord = Eigen::RowVector; - - -/* - * - * Proximal decoder implementation - * - */ - - -/** - * @brief Class implementing the Proximal Decoding algorithm. See "Proximal - * Decoding for LDPC Codes" by Tadashi Wadayama, and Satoshi Takabe. - * @tparam t_m Number of rows of the H Matrix - * @tparam t_n Number of columns of the H Matrix - */ -template -class ProximalDecoder { -public: - /** - * @brief Constructor - * @param H Parity-Check Matrix - * @param K Number of iterations to run while decoding - * @param omega Step size - * @param gamma Positive constant. Arises in the approximation of the prior - * PDF - * @param eta Positive constant slightly larger than one. See 3.2, p. 3 - */ - ProximalDecoder(const Eigen::Ref>& H, int K, - double omega, double gamma, double eta) - : mK(K), mOmega(omega), mGamma(gamma), mEta(eta), mH(H), - mH_zero_indices(find_zero(H)) { - - Eigen::setNbThreads(8); - } - - /** - * @brief Decode a received signal. The algorithm is detailed in 3.2, p.3. - * This function assumes a BPSK modulated signal and an AWGN channel. - * @param y Vector of received values. (y = x + w, where 'x' is element of - * [-1, 1]^n and 'w' is noise) - * @return \b std::pair of the form (x_hat, num_iter), x_hat is the most - * probably sent codeword and num_iter is the number of iterations that were - * performed. If the parity check fails and no valid codeword is reached, - * num_iter is -1 - */ - std::pair, int> - decode(const Eigen::Ref>& y) { - if (y.size() != mH.cols()) - throw std::runtime_error("Length of vector must match H matrix"); - - RowVectord s = RowVectord::Zero(t_n); - RowVectori x_hat; - RowVectord r; - - for (std::size_t i = 0; i < mK; ++i) { - r = s - mOmega * L_awgn(s, y); - - s = projection(r - mGamma * grad_H(r)); - - x_hat = s.unaryExpr([](double d) { - uint64_t bits = std::bit_cast(d); - // Return the sign bit: 1 for negative, 0 for positive - return (bits >> 63); - }).template cast(); - - if (check_parity(x_hat)) { - return {x_hat, i + 1}; - } - } - - return {x_hat, -1}; - } - - /** - * @brief Decode a received signal an measure error value (x - sign(x_hat)) - * @param x Transmitted word - * @param y Received signal - * @return \b std::vector of error values. Each element corresponds to one - * iteration of the algorithm - */ - std::vector - get_error_values(const Eigen::Ref>& x, - const Eigen::Ref>& y) { - - if (y.size() != mH.cols()) - throw std::runtime_error("Length of vector must match H matrix"); - - std::vector error_values; - error_values.reserve(mK); - - RowVectord s = RowVectord::Zero(t_n); - RowVectori x_hat; - RowVectord r; - - for (std::size_t i = 0; i < mK; ++i) { - r = s - mOmega * L_awgn(s, y); - - s = projection(r - mGamma * grad_H(r)); - - x_hat = s.unaryExpr([](double d) { - uint64_t bits = std::bit_cast(d); - // Return the sign bit: 1 for negative, 0 for positive - return (bits >> 63); - }).template cast(); - - RowVectord x_hat_bpsk = - -1 * ((2 * x_hat.template cast()).array() - 1).matrix(); - error_values.push_back( - (x.template cast() - x_hat_bpsk).norm()); - - if (check_parity(x_hat)) { - break; - } - } - - return error_values; - } - - /** - * @brief Decode a received signal and measure the norm of the two gradients - * at each iteration - * @param y - * @return \b std::vector of \b std::pair of gradient values. Each element corresponds to - * one iteration. Result is of the form [(grad_H_1, grad_L_1), ...] - */ - std::vector> - get_gradient_values(const Eigen::Ref>& y) { - - if (y.size() != mH.cols()) - throw std::runtime_error("Length of vector must match H matrix"); - - std::vector> gradient_values; - gradient_values.reserve(mK); - - RowVectord s = RowVectord::Zero(t_n); - RowVectori x_hat; - RowVectord r; - - for (std::size_t i = 0; i < mK; ++i) { - RowVectord gradl = L_awgn(s, y); - r = s - mOmega * gradl; - - RowVectord gradh = grad_H(r); - s = projection(r - mGamma * gradh); - - gradient_values.push_back({gradh.norm(), gradl.norm()}); - - x_hat = s.unaryExpr([](double d) { - uint64_t bits = std::bit_cast(d); - // Return the sign bit: 1 for negative, 0 for positive - return (bits >> 63); - }).template cast(); - - if (check_parity(x_hat)) { - break; - } - } - - return gradient_values; - } - - /** - * @brief Get the values of all member variables necessary to recreate an - * exact copy of this class. Used for pickling - * @return \b std::tuple - */ - auto get_decoder_state() const { - return std::tuple(mH, mK, mOmega, mGamma, mEta); - } - -private: - const int mK; - const double mOmega; - const double mGamma; - const double mEta; - - const MatrixiR mH; - const std::vector mH_zero_indices; - - - /** - * Variation of the negative log-likelihood for the special case of AWGN - * noise. See 4.1, p. 4. - */ - static Eigen::RowVectorXd L_awgn(const RowVectord& s, - const RowVectord& y) { - return s.array() - y.array(); - } - - /** - * @brief Find all indices of a matrix, where the corresponding value is - * zero - * @return \b std::vector of indices - */ - static std::vector find_zero(MatrixiR mat) { - std::vector indices; - - for (Eigen::Index i = 0; i < mat.size(); ++i) - if (mat(i) == 0) indices.push_back(i); - - return indices; - } - - /** - * Gradient of the code-constraint polynomial. See 2.3, p. 2. - */ - RowVectord grad_H(const RowVectord& x) { - MatrixdR A_prod_matrix = x.replicate(t_m, 1); - - for (const auto& index : mH_zero_indices) - A_prod_matrix(index) = 1; - RowVectord A_prods = A_prod_matrix.rowwise().prod(); - - RowVectord B_terms = - (A_prods.array().pow(2) - A_prods.array()).matrix().transpose(); - - RowVectord B_sums = B_terms * mH.template cast(); - - RowVectord result = 4 * (x.array().pow(2) - 1) * x.array() + - (2 * x.array().inverse()) * B_sums.array(); - - return result; - } - - /** - * Perform a parity check for a given codeword. - * @param x_hat: codeword to be checked (element of [0, 1]^n) - * @return \b True if the parity check passes, i.e. the codeword is valid. - * False otherwise - */ - bool check_parity(const RowVectori& x_hat) { - RowVectori syndrome = - (mH * x_hat.transpose()).unaryExpr([](int i) { return i % 2; }); - - return !(syndrome.count() > 0); - } - - /** - * Project a vector onto [-eta, eta]^n in order to avoid numerical - * instability. Detailed in 3.2, p. 3 (Equation (15)). - * @param v Vector to project - * @return v clipped to [-eta, eta]^n - */ - RowVectord projection(const RowVectord& v) { - return v.cwiseMin(mEta).cwiseMax(-mEta); - } -}; diff --git a/sw/cpp/src/python_interface.cpp b/sw/cpp/src/python_interface.cpp deleted file mode 100644 index 4970e75..0000000 --- a/sw/cpp/src/python_interface.cpp +++ /dev/null @@ -1,58 +0,0 @@ -#define EIGEN_STACK_ALLOCATION_LIMIT 1048576 - -#include "proximal.h" - -#include - - -namespace py = pybind11; -using namespace pybind11::literals; - - -#define DEF_PROXIMAL_DECODER(name, m, n) \ - py::class_>(proximal, name) \ - .def(py::init, int, double, double, double>(), \ - "H"_a.noconvert(), "K"_a = 100, "omega"_a = 0.0002, \ - "gamma"_a = .05, "eta"_a = 1.5) \ - .def("decode", &ProximalDecoder::decode, "y"_a.noconvert()) \ - .def("get_error_values", &ProximalDecoder::get_error_values, \ - "x"_a.noconvert(), "y"_a.noconvert()) \ - .def("get_gradient_values", \ - &ProximalDecoder::get_gradient_values, "y"_a.noconvert()) \ - .def(py::pickle( \ - [](const ProximalDecoder& a) { \ - auto state = a.get_decoder_state(); \ - \ - MatrixiR H = std::get<0>(state); \ - int K = std::get<1>(state); \ - double omega = std::get<2>(state); \ - double gamma = std::get<3>(state); \ - double eta = std::get<4>(state); \ - \ - return py::make_tuple(H, K, omega, gamma, eta); \ - }, \ - [](py::tuple t) { \ - return ProximalDecoder{ \ - t[0].cast>(), t[1].cast(), \ - t[2].cast(), t[3].cast(), \ - t[4].cast()}; \ - })); - - -PYBIND11_MODULE(cpp_decoders, proximal) { - proximal.doc() = "Proximal decoder"; - - DEF_PROXIMAL_DECODER("ProximalDecoder_7_3", 3, 7) - DEF_PROXIMAL_DECODER("ProximalDecoder_31_20", 20, 31) - DEF_PROXIMAL_DECODER("ProximalDecoder_31_5", 5, 31) - DEF_PROXIMAL_DECODER("ProximalDecoder_96_48", 48, 96) - DEF_PROXIMAL_DECODER("ProximalDecoder_204_102", 102, 204) - DEF_PROXIMAL_DECODER("ProximalDecoder_408_204", 204, 408) - DEF_PROXIMAL_DECODER("ProximalDecoder_Dynamic", Eigen::Dynamic, - Eigen::Dynamic) - - py::register_exception( - proximal, "CppException: std::runtime_error"); - py::register_exception(proximal, - "CppException: std::bad_alloc"); -} \ No newline at end of file diff --git a/sw/python/README.md b/sw/python/README.md deleted file mode 100644 index bd6f18e..0000000 --- a/sw/python/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# Bachelorarbeit - -## Software - -Warning: At least a `Python 3.9` or higher is required to properly run the -scripts in this project - -### Create a python virtual environment - -In the root directory of this repository run - -```bash -$ python3 -m venv venv -$ source venv/bin/activate -$ pip3 install -r requirements.txt -``` - -### Run the unit tests - -In the root directory of this repository run - -```bash -$ python -m unittest discover test -``` diff --git a/sw/python/cpp_modules/__init__.py b/sw/python/cpp_modules/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/sw/python/cpp_modules/cpp_decoders.cpython-310-x86_64-linux-gnu.so b/sw/python/cpp_modules/cpp_decoders.cpython-310-x86_64-linux-gnu.so deleted file mode 100755 index a56c94a509e6bbc2d358dbfc6edf5f8fbd889ee2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 359896 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 z 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 xyC``gar%ZQ2HaeraEyF-S4K9H=JitA+j8 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 jAB}iHX&FY>O np.array: - """Generate a list of all possible codewords. - - :return: Numpy array of the form [[codeword_1], [codeword_2], ...] - (Each generated codeword is an element of [0, 1]^n) - """ - k, n = self._G.shape - - # Generate a list of all possible data words - u_lst = [list(i) for i in itertools.product([0, 1], repeat=k)] - u_lst = np.array(u_lst) - - # Map each data word onto a codeword - c_lst = np.dot(u_lst, self._G) % 2 - - return u_lst, c_lst - - def decode(self, y: np.array) -> np.array: - """Decode a received signal. - - This function assumes a BPSK modulated signal. - - :param y: Vector of received values. (y = x + w, where 'x' is - element of [-1, 1]^n and 'w' is noise) - :return: Most probably sent codeword (element of [0, 1]^k) - """ - correlations = np.dot(self._codewords_bpsk, y) - - return self._codewords[np.argmax(correlations)] diff --git a/sw/python/decoders/proximal.py b/sw/python/decoders/proximal.py deleted file mode 100644 index f0aeb81..0000000 --- a/sw/python/decoders/proximal.py +++ /dev/null @@ -1,97 +0,0 @@ -import numpy as np - - -class ProximalDecoder: - """Class implementing the Proximal Decoding algorithm. See "Proximal - Decoding for LDPC Codes" - by Tadashi Wadayama, and Satoshi Takabe. - """ - - def __init__(self, H: np.array, K: int = 1000, omega: float = 0.0002, - gamma: float = 0.05, eta: float = 1.5): - """Construct a new ProximalDecoder Object. - - :param H: Parity Check Matrix - :param K: Max number of iterations to perform when decoding - :param omega: Step size for the gradient descent process - :param gamma: Positive constant. Arises in the approximation of the - prior PDF - :param eta: Positive constant slightly larger than one. See 3.2, p. 3 - """ - self._H = H - self._K = K - self._step_size = omega - self._gamma = gamma - self._eta = eta - - self._k, self._n = self._H.shape - self._H_ne_0 = H != 0 - - @staticmethod - def _L_awgn(s: np.array, y: np.array) -> np.array: - """Variation of the negative log-likelihood for the special case of - AWGN noise. See 4.1, p. 4. - """ - return s - y - - def _grad_h(self, x: np.array) -> np.array: - """Gradient of the code-constraint polynomial. See 2.3, p. 2.""" - # Pre-computations - - A_prod_matrix = np.tile(x, (self._k, 1)) - A_prods = np.prod(A_prod_matrix, axis=1, where=self._H_ne_0) - - # Calculate gradient - - sums = np.dot(A_prods ** 2 - A_prods, self._H) - - result = 4 * (x ** 2 - 1) * x + (2 / x) * sums - - return result - - def _projection(self, v): - """Project a vector onto [-eta, eta]^n in order to avoid numerical - instability. Detailed in 3.2, p. 3 (Equation (15)). - - :param v: Vector to project - :return: x clipped to [-eta, eta]^n - """ - return np.clip(v, -self._eta, self._eta) - - def _check_parity(self, x_hat: np.array) -> bool: - """Perform a parity check for a given codeword. - - :param x_hat: codeword to be checked (element of [0, 1]^n) - :return: True if the parity check passes, i.e. the codeword is - valid. False otherwise - """ - syndrome = np.dot(self._H, x_hat) % 2 - return not np.any(syndrome) - - def decode(self, y: np.array) -> np.array: - """Decode a received signal. The algorithm is detailed in 3.2, p.3. - - This function assumes a BPSK modulated signal and an AWGN channel. - - :param y: Vector of received values. (y = x + w, where 'x' is - element of [-1, 1]^n and 'w' is noise) - :return: Most probably sent codeword (element of [0, 1]^n). If - decoding fails, the returned value is 'None' - """ - s = np.zeros(self._n) - x_hat = np.zeros(self._n) - for k in range(self._K): - r = s - self._step_size * self._L_awgn(s, y) - - s = r - self._gamma * self._grad_h(r) - s = self._projection(s) # Equation (15) - - x_hat = np.sign(s) - - # Map the codeword from [ -1, 1]^n to [0, 1]^n - x_hat = (x_hat == -1) * 1 - - if self._check_parity(x_hat): - return x_hat - - return None diff --git a/sw/python/requirements.txt b/sw/python/requirements.txt deleted file mode 100644 index 0fe1d13..0000000 --- a/sw/python/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -matplotlib==3.6.2 -pandas==1.5.2 -seaborn==0.12.1 -tqdm==4.64.1 diff --git a/sw/python/res/204.33.484.alist b/sw/python/res/204.33.484.alist deleted file mode 100644 index c3871ba..0000000 --- a/sw/python/res/204.33.484.alist +++ /dev/null @@ -1,310 +0,0 @@ -204 102 -3 6 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -73 84 81 -63 45 26 -17 77 55 -74 47 24 -9 10 52 -62 63 44 -38 39 35 -60 4 100 -82 98 63 -40 80 68 -91 81 18 -86 88 99 -77 71 65 -29 9 33 -15 41 34 -75 11 22 -48 24 95 -22 44 60 -5 19 41 -31 22 43 -21 18 56 -83 51 49 -79 7 88 -36 67 5 -84 75 32 -1 79 38 -43 82 75 -2 1 23 -33 61 83 -69 3 30 -28 5 77 -8 56 4 -53 76 36 -96 28 102 -44 17 48 -92 26 74 -56 69 11 -18 68 50 -72 34 37 -25 37 76 -23 30 21 -7 29 40 -71 78 39 -13 2 96 -55 33 51 -49 64 16 -37 66 54 -50 36 89 -45 15 57 -88 35 15 -57 102 78 -98 27 71 -27 52 94 -68 20 87 -89 38 8 -24 94 53 -11 50 19 -14 83 98 -76 55 2 -41 70 62 -78 86 14 -3 21 59 -64 23 46 -47 43 45 -95 31 1 -85 59 84 -94 54 101 -93 6 31 -59 95 61 -58 73 47 -54 87 7 -52 97 79 -12 90 28 -30 99 97 -42 100 73 -101 62 20 -80 96 85 -100 58 91 -19 16 6 -99 49 72 -70 92 17 -90 93 69 -10 40 25 -39 72 82 -67 74 12 -4 65 27 -20 85 90 -102 13 92 -46 8 9 -35 46 10 -97 53 93 -66 48 42 -87 89 64 -26 25 58 -6 57 67 -65 12 3 -61 91 66 -81 101 29 -51 60 86 -16 14 80 -34 32 70 -32 42 13 -72 17 45 -52 14 22 -49 53 2 -95 76 60 -39 57 26 -32 60 48 -2 78 8 -92 3 54 -71 55 42 -23 5 62 -35 99 50 -37 31 18 -24 84 12 -14 97 56 -94 40 44 -22 74 63 -63 49 28 -42 96 78 -101 27 85 -55 75 99 -40 9 67 -61 28 97 -76 101 16 -88 95 33 -5 33 37 -68 61 27 -65 52 38 -20 42 15 -60 23 84 -67 73 52 -25 66 53 -51 77 21 -81 62 1 -66 21 96 -75 56 83 -8 13 19 -30 19 51 -102 90 58 -97 11 68 -89 15 98 -44 20 35 -74 35 5 -26 72 59 -10 88 94 -46 69 100 -16 54 77 -91 6 74 -13 64 101 -47 32 40 -50 24 90 -38 48 46 -86 85 47 -6 51 34 -7 68 36 -56 7 31 -69 92 61 -48 39 43 -31 71 64 -33 8 93 -79 4 17 -98 37 95 -77 87 25 -19 67 49 -87 2 69 -1 22 10 -64 29 88 -70 91 65 -84 25 102 -99 45 66 -58 18 57 -4 1 70 -12 30 72 -82 89 32 -15 47 55 -18 59 24 -21 81 13 -54 100 29 -57 50 4 -90 94 23 -34 10 79 -93 44 89 -73 102 41 -80 26 82 -11 65 92 -45 41 87 -28 83 71 -85 34 39 -9 82 14 -3 36 20 -83 86 76 -29 70 80 -43 12 9 -78 63 73 -27 46 30 -59 16 86 -62 58 6 -41 98 91 -96 93 11 -53 43 81 -36 79 75 -17 38 3 -100 80 7 -26 167 28 173 65 135 -28 109 44 166 59 105 -62 191 30 110 96 203 -86 173 8 162 32 180 -19 127 31 112 24 144 -95 155 68 149 79 198 -42 156 23 157 71 204 -32 138 89 161 55 109 -5 190 14 123 89 194 -83 146 5 182 90 167 -57 186 16 141 37 200 -73 174 96 194 85 115 -44 150 88 138 102 178 -58 116 100 104 61 190 -15 176 49 142 50 130 -100 148 79 197 46 125 -3 203 35 103 81 162 -38 177 21 172 11 114 -79 165 19 139 57 138 -87 130 54 143 76 191 -21 178 62 136 41 134 -18 118 20 167 16 104 -41 112 63 131 28 181 -56 115 17 152 4 177 -40 133 94 170 83 164 -94 145 36 185 2 107 -53 196 52 121 86 128 -31 188 34 124 73 119 -14 193 42 168 98 179 -74 139 41 174 30 196 -20 160 65 114 68 157 -102 108 101 151 25 175 -29 161 45 127 14 126 -101 182 39 189 15 155 -90 113 50 144 7 143 -24 202 48 191 33 156 -47 114 40 163 39 127 -7 153 55 203 26 129 -84 107 7 159 43 189 -10 123 83 117 42 151 -60 199 15 187 19 184 -75 120 102 130 92 111 -27 194 64 201 20 159 -35 143 18 183 6 117 -49 187 2 171 64 103 -89 147 90 196 63 153 -64 151 4 176 70 154 -17 159 92 153 35 108 -46 105 80 119 22 165 -48 152 57 180 38 113 -99 134 22 155 45 139 -72 104 53 129 5 132 -33 201 91 105 56 133 -71 179 67 148 47 110 -45 122 59 111 3 176 -37 157 32 137 21 116 -51 180 95 107 49 172 -70 172 78 198 94 140 -69 197 66 177 62 145 -8 131 99 108 18 106 -97 124 29 128 69 158 -6 198 76 135 60 112 -2 119 6 195 9 118 -63 168 46 150 93 160 -96 129 86 186 13 169 -92 136 47 133 97 171 -85 132 24 165 95 123 -54 128 38 156 10 141 -30 158 37 147 82 166 -81 169 60 193 101 173 -43 111 13 160 52 188 -39 103 84 145 80 174 -1 184 70 132 75 195 -4 144 85 118 36 149 -16 137 25 122 27 202 -59 125 33 106 40 192 -13 164 3 134 31 148 -61 195 43 109 51 120 -23 162 26 202 72 182 -77 185 10 204 100 193 -98 135 11 178 1 201 -9 175 27 190 84 185 -22 192 58 188 29 137 -25 170 1 115 66 131 -66 189 87 154 77 121 -12 154 61 192 99 197 -93 166 71 164 54 187 -50 126 12 146 23 168 -55 142 93 175 48 183 -82 181 73 140 87 152 -11 149 97 169 78 199 -36 110 81 158 88 186 -68 183 82 200 91 161 -67 117 56 181 53 146 -65 106 69 126 17 163 -34 200 77 120 44 136 -91 141 72 116 74 124 -52 163 9 199 58 142 -80 171 74 113 12 122 -78 204 75 179 8 147 -76 121 98 125 67 150 -88 140 51 184 34 170 diff --git a/sw/python/res/204.33.486.alist b/sw/python/res/204.33.486.alist deleted file mode 100644 index 8d6c749..0000000 --- a/sw/python/res/204.33.486.alist +++ /dev/null @@ -1,310 +0,0 @@ -204 102 -3 6 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -76 98 67 -67 36 11 -17 44 4 -44 66 94 -79 24 34 -95 69 6 -82 87 12 -87 60 41 -3 8 45 -14 2 95 -31 79 96 -99 62 46 -98 6 48 -45 29 30 -84 33 39 -23 35 13 -4 23 84 -92 91 74 -64 77 20 -75 99 60 -57 100 77 -58 59 36 -56 12 40 -51 80 32 -50 54 21 -19 37 56 -54 86 24 -36 48 43 -5 70 47 -93 38 98 -11 78 54 -25 71 102 -16 88 1 -8 61 19 -42 40 14 -94 13 51 -32 49 31 -9 56 59 -74 20 26 -62 43 92 -63 75 66 -38 34 83 -72 65 93 -71 55 23 -18 22 78 -97 96 53 -52 31 29 -2 27 99 -85 42 86 -90 28 79 -59 85 27 -21 15 73 -27 45 5 -91 5 87 -29 53 3 -66 17 81 -101 74 2 -88 46 55 -49 97 42 -15 51 18 -100 63 16 -68 41 10 -47 82 35 -26 68 101 -22 57 9 -13 19 58 -83 89 15 -55 73 61 -35 10 38 -43 39 37 -69 7 89 -61 16 70 -53 64 17 -10 25 82 -89 26 22 -39 101 91 -65 1 75 -30 14 72 -41 92 100 -37 47 7 -70 81 62 -86 76 88 -28 50 63 -20 95 90 -102 72 76 -12 11 25 -80 3 57 -6 67 8 -73 9 44 -96 4 28 -34 21 80 -78 58 97 -60 90 71 -24 18 85 -40 94 33 -46 102 65 -48 93 68 -81 83 50 -7 30 49 -33 52 69 -77 84 52 -1 32 64 -99 95 33 -66 76 62 -41 102 80 -9 99 13 -25 45 35 -2 91 90 -16 89 53 -88 39 6 -42 11 38 -11 49 84 -35 51 39 -102 60 27 -57 14 26 -27 80 42 -101 42 50 -70 34 44 -30 92 5 -39 79 65 -92 29 101 -64 28 82 -53 67 21 -93 8 17 -76 43 23 -40 10 76 -67 84 41 -3 98 7 -36 52 63 -58 18 71 -33 88 11 -55 75 78 -23 56 29 -72 23 92 -4 57 94 -5 2 85 -15 70 49 -28 40 83 -61 71 99 -54 9 91 -63 19 4 -80 35 72 -10 12 48 -50 82 32 -71 83 100 -79 86 47 -26 48 52 -73 3 28 -65 101 97 -29 26 86 -38 66 12 -74 97 56 -75 7 36 -77 27 69 -14 63 74 -95 16 55 -47 4 73 -62 24 19 -86 73 59 -51 61 30 -84 47 88 -90 65 61 -48 72 2 -60 77 31 -87 94 77 -44 59 3 -13 36 1 -78 13 60 -56 54 45 -100 58 89 -17 74 15 -97 81 34 -6 87 64 -96 6 40 -19 17 16 -43 44 18 -89 62 67 -91 93 24 -1 100 68 -85 33 98 -31 37 20 -81 96 43 -94 41 95 -46 15 57 -45 32 14 -8 64 9 -59 21 10 -32 53 79 -49 25 75 -22 1 58 -52 22 25 -18 50 87 -34 68 66 -82 20 93 -12 5 54 -37 78 70 -21 30 37 -68 85 8 -69 31 102 -7 38 81 -24 69 51 -20 46 96 -98 55 22 -83 90 46 -102 179 77 190 33 167 -48 108 10 136 57 163 -9 128 87 148 55 166 -17 135 90 157 3 141 -29 136 54 195 53 119 -88 173 13 174 6 110 -99 200 71 153 80 128 -34 186 9 124 88 198 -38 106 89 140 65 186 -74 143 69 126 62 187 -31 112 86 111 2 131 -86 195 23 143 7 151 -66 167 36 168 16 106 -10 155 78 115 35 185 -60 137 52 184 67 171 -33 109 72 156 61 175 -3 171 56 175 73 124 -45 192 94 130 60 176 -26 175 66 141 34 158 -84 202 39 194 19 181 -52 197 91 187 25 123 -65 190 45 191 75 203 -16 133 17 134 44 125 -94 201 5 158 27 178 -32 107 74 189 86 191 -64 147 75 150 39 115 -53 116 48 154 51 114 -83 138 50 122 90 148 -55 150 14 121 47 133 -78 119 99 197 14 160 -11 181 47 199 37 164 -37 188 102 185 24 144 -100 131 15 180 95 103 -91 193 42 118 5 172 -69 113 16 142 63 107 -28 129 2 167 22 153 -80 196 26 181 70 197 -42 151 30 200 69 111 -76 120 70 110 15 113 -95 126 35 138 23 174 -79 105 62 183 8 127 -35 111 49 117 59 116 -70 176 40 125 28 182 -4 166 3 176 89 118 -14 185 53 107 9 169 -96 184 58 202 12 204 -63 157 80 161 29 146 -97 163 28 147 13 143 -59 189 37 112 99 137 -25 144 83 192 98 117 -24 160 60 113 36 201 -47 191 100 129 101 147 -73 123 55 188 46 109 -27 140 25 169 31 195 -68 132 44 203 58 156 -23 169 38 133 26 152 -21 115 65 135 87 184 -22 130 92 170 66 190 -51 187 22 166 38 159 -93 164 8 114 20 168 -72 139 34 160 68 162 -40 158 12 177 81 104 -41 141 61 155 83 129 -19 122 73 186 102 173 -77 149 43 162 96 120 -56 104 4 151 41 193 -2 127 88 123 1 177 -62 198 64 193 97 179 -71 199 6 201 100 154 -81 118 29 137 72 196 -44 145 32 139 93 130 -43 134 85 163 78 142 -89 148 68 159 52 157 -39 152 57 171 18 155 -20 153 41 132 77 189 -1 125 82 104 85 126 -101 154 19 164 21 165 -92 168 31 196 45 132 -5 146 11 120 50 188 -87 142 24 116 91 105 -98 182 81 172 56 200 -7 194 63 144 74 122 -67 204 98 145 42 138 -15 161 101 127 17 112 -49 180 51 198 94 136 -82 159 27 146 49 150 -8 165 7 173 54 192 -58 110 33 131 82 161 -75 177 67 109 71 170 -50 162 93 204 84 108 -54 178 18 108 76 140 -18 121 79 119 40 134 -30 124 97 178 43 194 -36 183 95 165 4 135 -6 156 84 103 10 183 -90 174 46 182 11 202 -46 172 59 152 92 149 -13 203 1 128 30 180 -12 103 20 106 48 139 -61 170 21 179 79 145 -57 117 76 149 64 121 -85 114 96 105 32 199 diff --git a/sw/python/res/204.55.187.alist b/sw/python/res/204.55.187.alist deleted file mode 100644 index b36a0d0..0000000 --- a/sw/python/res/204.55.187.alist +++ /dev/null @@ -1,310 +0,0 @@ -204 102 -5 10 -5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 -1 12 41 20 52 -2 41 28 40 34 -3 55 98 89 102 -4 16 64 6 13 -5 93 58 37 25 -6 91 62 67 68 -7 43 30 34 62 -8 87 53 48 50 -9 85 81 43 74 -10 82 26 77 44 -11 42 72 82 33 -12 98 83 54 65 -13 65 48 41 77 -14 10 71 47 92 -15 17 74 2 49 -16 100 63 81 24 -17 6 36 55 5 -18 80 59 98 1 -19 101 11 80 70 -20 47 32 56 90 -21 89 49 60 93 -22 19 27 87 86 -23 7 19 91 10 -24 59 25 70 66 -25 49 96 72 12 -26 64 76 11 48 -27 63 35 1 26 -28 54 75 57 11 -29 31 93 35 91 -30 95 66 32 98 -31 56 3 22 14 -32 88 21 3 23 -33 79 88 13 8 -34 13 46 96 37 -35 36 80 62 40 -36 81 101 83 97 -37 8 55 19 4 -38 37 97 102 60 -39 94 52 88 72 -40 14 90 26 9 -41 9 39 75 101 -42 3 5 24 27 -43 40 42 51 79 -44 22 17 90 63 -45 84 43 52 76 -46 97 47 85 80 -47 33 18 84 95 -48 29 73 36 84 -49 92 50 78 73 -50 27 13 95 20 -51 20 102 49 88 -52 71 65 66 89 -53 99 10 30 85 -54 52 85 50 69 -55 78 60 25 81 -56 96 70 38 43 -57 69 67 65 19 -58 74 68 14 30 -59 60 69 16 41 -60 35 54 53 39 -61 90 87 23 46 -62 48 99 21 18 -63 28 95 45 71 -64 73 86 31 53 -65 76 23 93 78 -66 72 51 46 57 -67 25 79 28 16 -68 51 100 15 96 -69 61 37 29 83 -70 75 15 71 58 -71 68 34 4 17 -72 5 92 101 21 -73 24 8 17 7 -74 32 61 27 99 -75 4 84 44 2 -76 34 33 39 38 -77 46 24 69 31 -78 39 6 58 32 -79 45 29 64 82 -80 2 7 94 56 -81 57 45 33 87 -82 1 94 100 54 -83 86 44 7 47 -84 77 91 74 64 -85 26 4 18 67 -86 102 2 12 35 -87 83 77 5 15 -88 11 9 63 59 -89 50 57 97 22 -90 53 78 68 29 -91 58 56 86 51 -92 38 16 9 42 -93 18 40 10 61 -94 30 31 76 28 -95 44 14 42 100 -96 62 82 59 75 -97 67 12 99 45 -98 21 22 73 94 -99 23 20 79 55 -100 70 89 8 36 -101 15 38 61 3 -102 66 1 92 6 -1 89 69 9 62 -2 95 87 69 99 -3 46 50 93 70 -4 20 38 65 100 -5 94 10 86 74 -6 27 84 82 12 -7 15 33 41 89 -8 44 93 11 52 -9 82 73 61 4 -10 101 54 66 55 -11 62 94 97 15 -12 4 40 70 69 -13 85 42 89 32 -14 86 11 96 29 -15 31 37 42 66 -16 90 58 95 7 -17 99 41 64 93 -18 72 74 71 87 -19 2 85 14 63 -20 78 66 18 43 -21 84 35 38 79 -22 12 100 47 101 -23 18 89 16 39 -24 21 82 50 19 -25 45 30 4 77 -26 47 70 102 61 -27 70 62 88 85 -28 1 19 78 72 -29 19 16 51 94 -30 41 23 72 47 -31 23 25 75 51 -32 64 68 63 57 -33 66 44 74 40 -34 69 64 98 97 -35 57 13 90 10 -36 16 34 53 65 -37 36 78 45 54 -38 30 52 13 67 -39 79 22 5 2 -40 65 39 24 84 -41 68 88 19 81 -42 91 2 76 46 -43 37 24 68 49 -44 13 18 36 24 -45 24 92 26 23 -46 55 45 40 83 -47 48 49 58 35 -48 97 28 52 59 -49 32 77 54 16 -50 59 56 23 68 -51 80 90 84 3 -52 58 21 33 27 -53 33 75 91 26 -54 56 8 99 42 -55 53 97 44 41 -56 40 76 100 5 -57 3 47 29 34 -58 81 26 22 13 -59 38 12 17 95 -60 6 101 30 56 -61 52 95 77 36 -62 74 4 101 50 -63 50 6 15 25 -64 35 14 94 75 -65 10 80 31 6 -66 7 36 21 64 -67 22 71 20 37 -68 11 98 27 38 -69 28 86 92 88 -70 76 57 55 82 -71 102 91 8 9 -72 83 48 6 14 -73 39 63 10 102 -74 29 65 60 22 -75 49 7 85 1 -76 25 3 7 71 -77 73 20 59 33 -78 88 15 56 44 -79 96 9 32 18 -80 34 67 87 78 -81 54 59 34 31 -82 93 102 67 90 -83 92 99 25 91 -84 67 96 81 92 -85 98 51 28 60 -86 63 79 49 80 -87 51 55 35 30 -88 60 31 1 17 -89 77 81 2 11 -90 8 43 12 28 -91 61 5 80 48 -92 17 32 43 53 -93 100 27 48 45 -94 71 61 57 96 -95 5 60 46 8 -96 87 17 39 98 -97 9 72 3 86 -98 26 29 62 20 -99 43 46 73 58 -100 75 83 79 73 -101 14 1 37 76 -102 42 53 83 21 -1 103 82 130 102 203 27 190 18 177 -2 104 80 121 86 144 15 191 75 141 -3 105 42 159 31 178 32 199 101 153 -4 106 75 114 85 164 71 127 37 111 -5 107 72 197 42 193 87 141 17 158 -6 108 17 162 78 165 4 174 102 167 -7 109 23 168 80 177 83 178 73 118 -8 110 37 192 73 156 100 173 33 197 -9 111 41 199 88 181 92 103 40 173 -10 112 14 167 53 107 93 175 23 137 -11 113 88 170 19 116 26 110 28 191 -12 114 1 124 97 161 86 192 25 108 -13 115 34 146 50 137 33 140 4 160 -14 116 40 203 95 166 58 121 31 174 -15 117 101 109 70 180 68 165 87 113 -16 118 4 138 92 131 59 125 67 151 -17 119 15 194 44 198 73 161 71 190 -18 120 93 125 47 146 85 122 62 181 -19 121 22 131 23 130 37 143 57 126 -20 122 51 106 99 179 1 169 50 200 -21 123 98 126 32 154 62 168 72 204 -22 124 44 169 98 141 31 160 89 176 -23 125 99 133 65 132 61 152 32 147 -24 126 73 147 77 145 42 142 16 146 -25 127 67 178 24 133 55 185 5 165 -26 128 85 200 10 160 40 147 27 155 -27 129 50 108 22 195 74 170 42 154 -28 130 63 171 2 150 67 187 94 192 -29 131 48 176 79 200 69 159 90 116 -30 132 94 140 7 127 53 162 58 189 -31 133 29 117 94 190 64 167 77 183 -32 134 74 151 20 194 30 181 78 115 -33 135 47 155 76 109 81 154 11 179 -34 136 76 182 71 138 7 183 2 159 -35 137 60 166 27 123 29 189 86 149 -36 138 35 139 17 168 48 146 100 163 -37 139 38 145 69 117 5 203 34 169 -38 140 92 161 101 106 56 123 76 170 -39 141 78 175 41 142 76 198 60 125 -40 142 43 158 93 114 2 148 35 135 -41 143 2 132 1 119 13 109 59 157 -42 144 11 204 43 115 95 117 92 156 -43 145 7 201 45 192 9 194 56 122 -44 146 95 110 83 135 75 157 10 180 -45 147 79 127 81 148 63 139 97 195 -46 148 77 105 34 201 66 197 61 144 -47 149 20 128 46 159 14 124 83 132 -48 150 62 149 13 174 8 195 26 193 -49 151 25 177 21 149 51 188 15 145 -50 152 89 165 49 105 54 126 8 164 -51 153 68 189 66 187 43 131 91 133 -52 154 54 163 39 140 45 150 1 110 -53 155 90 157 8 204 60 138 64 194 -54 156 28 183 60 112 12 151 82 139 -55 157 3 148 37 189 17 172 99 112 -56 158 31 156 91 152 20 180 80 162 -57 159 81 137 89 172 28 196 66 134 -58 160 91 154 5 118 78 149 70 201 -59 161 24 152 18 183 96 179 88 150 -60 162 59 190 55 197 21 176 38 187 -61 163 69 193 74 196 101 111 93 128 -62 164 96 113 6 129 35 200 7 103 -63 165 27 188 16 175 88 134 44 121 -64 166 26 134 4 136 79 119 84 168 -65 167 13 142 52 176 57 106 12 138 -66 168 102 135 30 122 52 112 24 117 -67 169 97 186 57 182 6 184 85 140 -68 170 71 143 58 134 90 145 6 152 -69 171 57 136 59 103 77 104 54 114 -70 172 100 129 56 128 24 114 19 105 -71 173 52 196 14 169 70 120 63 178 -72 174 66 120 11 199 25 132 39 130 -73 175 64 179 48 111 98 201 49 202 -74 176 58 164 15 120 84 135 9 107 -75 177 70 202 28 155 41 133 96 166 -76 178 65 172 26 158 94 144 45 203 -77 179 84 191 87 151 10 163 13 127 -78 180 55 122 90 139 49 130 65 182 -79 181 33 141 67 188 99 202 43 123 -80 182 18 153 35 167 19 193 46 188 -81 183 36 160 9 191 16 186 55 143 -82 184 10 111 96 126 11 108 79 172 -83 185 87 174 12 202 36 204 69 148 -84 186 45 123 75 108 47 153 48 142 -85 187 9 115 54 121 46 177 53 129 -86 188 83 116 64 171 91 107 22 199 -87 189 8 198 61 104 22 182 81 120 -88 190 32 180 33 143 39 129 51 171 -89 191 21 103 100 125 3 115 52 109 -90 192 61 118 40 153 44 137 20 184 -91 193 6 144 84 173 23 155 29 185 -92 194 49 185 72 147 102 171 14 186 -93 195 5 184 29 110 65 105 21 119 -94 196 39 107 82 113 80 166 98 131 -95 197 30 104 63 163 50 118 47 161 -96 198 56 181 25 186 34 116 68 196 -97 199 46 150 38 157 89 113 36 136 -98 200 12 187 3 170 18 136 30 198 -99 201 53 119 62 185 97 156 74 104 -100 202 16 195 68 124 82 158 95 106 -101 203 19 112 36 162 72 164 41 124 -102 204 86 173 51 184 38 128 3 175 diff --git a/sw/python/res/408.33.844.alist b/sw/python/res/408.33.844.alist deleted file mode 100644 index f70918f..0000000 --- a/sw/python/res/408.33.844.alist +++ /dev/null @@ -1,616 +0,0 @@ -408 204 -3 6 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -27 43 140 -88 42 106 -71 80 202 -158 129 15 -125 149 93 -13 158 180 -166 146 23 -12 65 153 -147 199 17 -4 180 99 -84 113 103 -146 51 150 -75 30 160 -163 49 87 -29 192 2 -159 74 104 -18 95 157 -86 116 132 -102 166 81 -121 60 185 -156 203 56 -63 32 36 -191 106 196 -107 128 21 -177 48 181 -151 71 80 -119 12 69 -134 145 164 -69 54 25 -111 39 33 -114 204 187 -93 38 188 -168 105 8 -122 98 163 -67 36 5 -43 186 18 -202 66 131 -162 107 126 -85 163 137 -72 41 48 -170 27 149 -126 79 179 -99 25 161 -34 122 63 -144 22 146 -157 150 183 -79 175 62 -80 40 192 -90 33 75 -161 46 73 -81 108 34 -62 2 19 -77 144 54 -21 73 53 -197 72 195 -40 156 78 -50 92 138 -36 4 184 -155 23 42 -65 26 177 -47 187 6 -153 3 27 -57 134 127 -28 200 14 -184 137 154 -39 117 128 -94 13 39 -145 21 122 -92 82 57 -59 174 200 -2 11 125 -186 119 109 -58 148 169 -109 55 1 -175 8 145 -44 132 32 -98 191 83 -140 138 156 -46 56 123 -169 87 28 -22 96 203 -37 152 112 -174 37 12 -20 29 197 -32 20 29 -53 19 143 -61 88 90 -8 75 35 -181 198 55 -115 126 10 -10 159 98 -203 115 85 -171 161 191 -135 10 7 -31 103 134 -26 85 141 -173 1 114 -128 197 198 -7 64 118 -103 141 76 -108 86 61 -74 17 116 -101 196 22 -19 91 105 -6 167 45 -190 123 129 -117 31 108 -130 97 155 -14 151 92 -127 50 88 -131 184 170 -106 125 101 -138 136 120 -66 93 144 -82 70 38 -55 157 107 -150 176 82 -204 58 37 -15 133 91 -97 15 44 -83 140 130 -142 135 95 -104 77 52 -194 59 199 -35 104 142 -17 139 11 -110 162 9 -176 142 148 -120 57 47 -60 62 124 -116 188 51 -48 194 162 -11 9 194 -24 118 77 -188 124 110 -198 61 74 -89 47 68 -192 45 113 -5 16 72 -136 5 102 -118 155 71 -56 153 182 -9 181 96 -149 202 84 -199 63 4 -164 114 172 -100 170 117 -137 110 97 -165 24 151 -96 185 26 -112 69 168 -113 6 67 -132 164 13 -189 165 41 -180 147 176 -167 121 60 -179 7 89 -148 177 173 -139 183 186 -183 67 20 -73 172 50 -30 168 193 -87 179 59 -68 131 58 -129 154 64 -160 112 46 -33 18 16 -123 160 121 -172 89 147 -185 44 3 -78 94 43 -154 81 119 -200 127 189 -52 68 66 -51 143 201 -70 99 100 -38 53 94 -152 83 49 -178 111 135 -201 173 24 -64 178 30 -187 182 139 -45 76 159 -41 78 31 -195 189 70 -23 109 79 -133 34 175 -91 100 174 -49 130 111 -42 90 158 -3 190 165 -95 28 86 -1 101 178 -76 102 152 -124 14 204 -25 84 65 -54 169 136 -143 171 190 -16 201 167 -196 52 115 -182 120 133 -105 193 40 -141 195 171 -193 35 166 -84 69 187 -27 150 193 -201 8 124 -71 9 28 -192 181 95 -146 151 62 -20 128 83 -91 20 9 -15 88 185 -18 202 133 -89 142 37 -198 170 189 -77 71 159 -101 156 183 -120 126 34 -130 122 197 -43 144 33 -121 189 45 -62 26 74 -196 168 19 -180 58 117 -173 149 90 -92 89 203 -187 24 127 -75 104 64 -134 4 88 -124 38 3 -169 83 161 -190 93 198 -159 201 195 -151 124 93 -57 43 147 -40 153 170 -6 194 57 -154 65 160 -50 154 23 -79 135 141 -145 91 108 -109 19 130 -85 130 162 -106 90 135 -117 166 144 -66 49 47 -140 191 89 -164 101 110 -150 197 101 -125 87 188 -141 73 65 -11 78 24 -97 164 131 -37 48 94 -32 127 164 -107 64 16 -152 79 2 -58 173 6 -29 3 139 -21 161 70 -165 167 129 -166 136 148 -155 177 7 -22 34 167 -193 118 174 -73 119 17 -51 172 27 -103 11 118 -64 115 140 -72 121 109 -26 47 128 -83 184 55 -131 169 11 -175 45 59 -69 30 132 -13 178 31 -170 75 21 -5 86 20 -94 31 143 -111 56 84 -110 42 168 -135 174 184 -68 41 152 -167 112 40 -33 29 97 -168 175 169 -186 10 155 -46 61 32 -139 55 116 -137 195 172 -203 187 58 -204 17 201 -45 53 69 -149 200 71 -179 114 5 -47 109 102 -8 70 22 -127 145 35 -4 94 173 -184 85 46 -44 186 125 -163 157 200 -93 77 26 -19 12 100 -61 62 181 -52 25 15 -100 105 87 -30 40 61 -42 193 115 -176 46 126 -136 76 73 -142 50 190 -7 183 199 -147 84 98 -1 147 52 -54 33 158 -99 106 165 -3 97 166 -12 159 138 -195 125 25 -144 1 85 -105 32 41 -104 72 157 -200 141 105 -188 103 80 -38 39 77 -56 140 178 -31 165 43 -133 160 48 -98 57 150 -14 110 49 -132 14 119 -25 66 86 -34 132 137 -108 123 14 -86 198 114 -171 44 142 -95 7 120 -35 22 76 -55 133 186 -82 36 8 -76 52 54 -181 28 176 -90 185 67 -119 176 112 -24 82 91 -78 81 50 -174 192 146 -16 188 149 -162 199 30 -88 18 81 -67 107 175 -197 37 4 -191 35 122 -189 203 99 -81 152 180 -178 163 121 -59 63 154 -17 131 78 -113 108 63 -63 137 153 -143 21 38 -65 117 194 -74 67 1 -60 23 111 -153 102 134 -2 74 39 -53 51 103 -9 113 51 -28 92 82 -194 179 182 -158 100 92 -199 13 56 -118 16 79 -156 95 36 -36 2 145 -126 5 202 -128 134 44 -185 138 75 -114 120 177 -183 98 179 -80 15 66 -115 96 12 -102 116 60 -129 182 10 -202 180 171 -48 171 68 -10 162 42 -148 155 53 -161 60 136 -177 204 72 -123 148 13 -172 129 196 -112 68 104 -39 196 123 -157 80 204 -160 158 96 -138 6 191 -41 139 151 -96 111 107 -122 190 106 -23 54 192 -116 143 29 -49 27 18 -182 59 163 -87 99 113 -70 146 156 -193 316 97 322 74 365 -71 368 52 377 15 258 -191 319 62 260 170 231 -10 300 58 230 145 354 -139 279 140 378 35 296 -105 238 152 399 61 259 -99 314 157 339 94 264 -88 298 75 207 33 342 -143 370 133 208 127 212 -91 389 94 288 90 386 -133 253 71 269 126 274 -8 320 27 305 83 384 -6 277 67 374 153 393 -109 332 195 333 64 336 -119 213 120 383 4 307 -199 350 139 375 167 257 -126 360 102 293 9 267 -17 214 167 352 36 405 -104 305 86 243 52 224 -84 211 85 212 160 279 -54 261 68 363 24 278 -81 265 45 340 103 298 -186 403 59 366 7 240 -134 347 149 228 180 253 -196 334 43 307 29 321 -96 272 60 223 150 304 -1 206 41 405 62 268 -64 371 192 344 80 208 -15 260 84 286 85 404 -162 309 13 276 181 351 -95 329 107 280 184 277 -85 256 22 323 76 289 -167 286 49 317 30 221 -44 335 187 265 51 219 -125 340 204 355 88 299 -58 377 35 342 22 376 -82 255 83 354 118 215 -177 327 32 231 115 363 -66 396 30 327 67 368 -56 237 48 309 202 285 -184 400 40 284 154 323 -190 310 2 282 59 389 -36 221 1 236 171 329 -76 302 170 338 120 379 -183 294 138 275 105 222 -79 289 50 311 166 301 -61 297 137 272 129 247 -132 388 25 255 40 330 -189 405 14 247 178 332 -57 240 110 313 161 348 -175 268 12 369 131 370 -174 307 200 343 123 316 -86 369 177 294 54 390 -197 317 29 403 53 343 -116 341 74 290 89 273 -142 328 79 281 21 374 -63 236 129 331 69 238 -73 259 118 225 164 292 -70 359 124 406 163 275 -130 366 20 391 156 385 -87 306 136 289 101 309 -52 223 130 306 47 210 -22 362 145 359 44 361 -181 270 99 257 165 229 -60 364 8 239 196 252 -114 247 37 334 174 383 -35 353 160 365 152 345 -164 284 174 395 137 388 -29 276 151 205 27 294 -176 408 115 298 185 261 -3 208 26 217 141 295 -40 271 55 324 139 392 -161 267 54 252 50 312 -102 365 16 368 136 223 -13 229 88 278 49 380 -194 343 183 312 100 340 -53 217 123 304 134 327 -171 348 184 253 56 360 -47 241 42 258 186 375 -48 383 3 397 26 326 -51 357 172 348 19 352 -115 342 69 347 117 371 -121 273 178 232 77 211 -11 205 196 315 144 281 -39 244 96 301 92 322 -18 337 101 279 192 334 -163 407 80 251 14 308 -2 352 87 213 110 230 -137 215 169 227 157 248 -49 345 190 245 87 226 -188 212 104 242 119 347 -69 227 57 371 109 373 -32 304 114 233 5 235 -67 280 171 300 177 255 -192 339 17 376 122 209 -150 401 81 384 143 398 -120 254 108 319 148 286 -77 331 34 382 91 315 -43 318 176 407 10 356 -147 308 188 373 176 305 -103 218 193 249 112 250 -19 385 194 367 140 297 -100 269 95 326 11 369 -123 324 125 229 16 395 -202 323 33 308 104 325 -112 245 23 318 2 402 -24 257 38 353 116 401 -101 336 51 361 107 242 -74 243 186 297 72 271 -127 282 148 332 135 249 -30 281 179 401 189 366 -151 395 166 285 82 346 -152 361 11 370 138 407 -31 381 146 296 97 337 -90 384 92 270 200 310 -131 404 18 385 102 290 -107 246 66 364 147 225 -141 375 134 266 99 269 -27 346 72 267 172 333 -129 219 201 381 113 339 -20 222 156 271 168 358 -34 402 44 220 68 355 -168 393 106 336 79 396 -195 231 135 235 130 207 -5 251 112 321 71 302 -42 378 90 219 38 311 -110 299 173 256 63 228 -98 379 24 211 66 272 -165 386 4 394 106 262 -108 220 189 244 121 243 -111 274 164 360 37 254 -153 333 76 335 18 276 -187 330 119 341 201 214 -28 230 63 379 95 367 -94 283 122 241 179 245 -140 312 113 263 197 391 -148 291 65 362 39 335 -113 399 78 380 57 320 -159 290 126 400 182 260 -78 248 121 328 1 270 -203 252 100 325 96 241 -122 313 128 215 125 338 -198 363 175 404 86 280 -45 322 53 221 114 246 -68 242 28 299 75 377 -12 210 7 408 45 349 -9 315 155 316 169 236 -158 390 73 393 128 263 -144 295 5 226 41 350 -117 250 46 206 12 331 -26 235 109 210 149 400 -178 258 82 357 194 284 -62 367 142 237 8 362 -172 239 165 240 65 359 -59 264 141 390 108 288 -21 376 56 218 78 408 -46 397 116 303 17 324 -4 373 6 398 190 317 -16 234 91 320 183 217 -166 398 168 330 13 239 -50 391 93 261 43 232 -38 351 127 389 132 244 -14 303 39 358 34 406 -146 249 153 254 28 256 -149 262 154 329 191 318 -7 263 19 246 204 319 -156 285 105 262 199 265 -33 287 162 224 151 282 -80 232 197 274 73 287 -41 278 147 216 111 237 -93 338 198 388 203 387 -169 394 161 268 146 291 -97 226 180 259 158 300 -83 349 70 283 188 266 -75 275 47 287 187 353 -128 311 117 346 155 344 -25 392 158 264 60 381 -179 358 181 277 193 328 -157 296 163 372 42 382 -155 225 10 387 6 357 -89 344 143 209 25 306 -201 406 182 386 142 372 -160 382 159 314 46 218 -65 301 111 273 58 283 -170 380 150 345 20 213 -72 288 36 302 159 341 -182 228 61 292 31 205 -135 326 131 350 32 251 -154 356 185 222 173 216 -106 233 191 402 198 313 -23 355 77 248 93 399 -138 209 15 349 48 403 -204 266 202 310 162 206 -124 372 132 238 133 364 -185 321 203 291 55 234 -200 224 103 396 23 394 -55 354 98 250 84 220 -136 216 89 337 98 233 -145 374 9 351 124 314 -173 325 64 295 70 303 -180 207 199 234 175 293 -37 387 144 214 3 378 -92 292 21 356 81 227 -118 293 31 392 195 397 diff --git a/sw/python/res/816.1A4.845.alist b/sw/python/res/816.1A4.845.alist deleted file mode 100644 index 7206495..0000000 --- a/sw/python/res/816.1A4.845.alist +++ /dev/null @@ -1,1364 +0,0 @@ -816 544 -4 6 -4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 -6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -1 273 162 494 -2 274 56 350 -3 275 167 507 -4 276 226 296 -5 277 99 528 -6 278 172 321 -7 279 221 285 -8 280 47 524 -9 281 272 371 -10 282 93 400 -11 283 122 337 -12 284 258 498 -13 285 208 503 -14 286 164 403 -15 287 242 521 -16 288 253 486 -17 289 149 408 -18 290 200 291 -19 291 237 439 -20 292 107 284 -21 293 262 341 -22 294 129 356 -23 295 119 463 -24 296 80 476 -25 297 23 436 -26 298 11 468 -27 299 210 517 -28 300 96 478 -29 301 133 435 -30 302 271 480 -31 303 233 313 -32 304 21 388 -33 305 52 287 -34 306 128 275 -35 307 245 411 -36 308 150 542 -37 309 28 326 -38 310 192 421 -39 311 196 520 -40 312 27 419 -41 313 15 277 -42 314 49 312 -43 315 13 377 -44 316 223 508 -45 317 211 440 -46 318 255 354 -47 319 202 452 -48 320 90 306 -49 321 182 372 -50 322 169 352 -51 323 197 319 -52 324 173 437 -53 325 33 431 -54 326 53 510 -55 327 260 370 -56 328 59 325 -57 329 66 433 -58 330 194 344 -59 331 148 533 -60 332 191 329 -61 333 193 281 -62 334 114 301 -63 335 218 446 -64 336 250 298 -65 337 246 305 -66 338 185 314 -67 339 124 294 -68 340 3 361 -69 341 110 462 -70 342 57 540 -71 343 32 499 -72 344 130 466 -73 345 101 310 -74 346 43 338 -75 347 83 428 -76 348 44 477 -77 349 30 413 -78 350 18 346 -79 351 138 509 -80 352 216 511 -81 353 187 416 -82 354 70 280 -83 355 117 402 -84 356 225 307 -85 357 118 518 -86 358 105 496 -87 359 7 363 -88 360 179 405 -89 361 36 299 -90 362 159 348 -91 363 106 460 -92 364 234 311 -93 365 9 376 -94 366 60 367 -95 367 213 333 -96 368 259 398 -97 369 248 397 -98 370 72 357 -99 371 263 474 -100 372 89 317 -101 373 127 351 -102 374 20 438 -103 375 227 504 -104 376 231 385 -105 377 68 488 -106 378 40 393 -107 379 5 315 -108 380 95 360 -109 381 63 457 -110 382 145 543 -111 383 41 322 -112 384 249 330 -113 385 207 276 -114 386 156 450 -115 387 198 365 -116 388 64 526 -117 389 266 406 -118 390 204 443 -119 391 239 390 -120 392 26 425 -121 393 98 502 -122 394 79 297 -123 395 257 458 -124 396 111 328 -125 397 136 389 -126 398 188 512 -127 399 91 451 -128 400 112 501 -129 401 268 308 -130 402 81 383 -131 403 195 538 -132 404 123 382 -133 405 102 530 -134 406 154 492 -135 407 78 481 -136 408 165 469 -137 409 184 342 -138 410 85 516 -139 411 264 544 -140 412 244 515 -141 413 228 506 -142 414 25 318 -143 415 220 289 -144 416 163 514 -145 417 176 475 -146 418 147 378 -147 419 224 484 -148 420 170 339 -149 421 84 534 -150 422 189 332 -151 423 201 470 -152 424 177 479 -153 425 4 355 -154 426 180 391 -155 427 22 535 -156 428 132 448 -157 429 109 347 -158 430 108 427 -159 431 241 412 -160 432 103 381 -161 433 186 531 -162 434 160 404 -163 435 235 472 -164 436 29 505 -165 437 51 362 -166 438 42 415 -167 439 181 429 -168 440 251 414 -169 441 131 380 -170 442 168 430 -171 443 222 386 -172 444 82 345 -173 445 209 467 -174 446 158 407 -175 447 267 304 -176 448 116 418 -177 449 55 497 -178 450 217 536 -179 451 31 461 -180 452 142 485 -181 453 140 302 -182 454 238 396 -183 455 62 426 -184 456 143 379 -185 457 146 519 -186 458 76 422 -187 459 16 290 -188 460 2 309 -189 461 206 303 -190 462 269 434 -191 463 100 420 -192 464 126 288 -193 465 155 283 -194 466 71 359 -195 467 151 539 -196 468 229 373 -197 469 113 490 -198 470 67 441 -199 471 190 522 -200 472 261 334 -201 473 265 320 -202 474 139 364 -203 475 65 409 -204 476 199 523 -205 477 50 487 -206 478 61 454 -207 479 46 384 -208 480 121 449 -209 481 19 444 -210 482 86 300 -211 483 12 394 -212 484 171 482 -213 485 54 445 -214 486 77 278 -215 487 58 331 -216 488 230 410 -217 489 174 442 -218 490 87 353 -219 491 236 456 -220 492 120 473 -221 493 74 527 -222 494 73 327 -223 495 256 493 -224 496 252 537 -225 497 152 392 -226 498 141 489 -227 499 205 358 -228 500 10 343 -229 501 232 369 -230 502 134 324 -231 503 6 423 -232 504 219 417 -233 505 24 424 -234 506 75 279 -235 507 157 395 -236 508 92 368 -237 509 161 471 -238 510 240 525 -239 511 215 274 -240 512 178 349 -241 513 38 282 -242 514 247 401 -243 515 88 295 -244 516 104 464 -245 517 45 447 -246 518 153 366 -247 519 48 323 -248 520 254 293 -249 521 270 483 -250 522 34 529 -251 523 97 513 -252 524 39 432 -253 525 125 286 -254 526 94 491 -255 527 35 399 -256 528 8 453 -257 529 243 455 -258 530 1 532 -259 531 37 500 -260 532 203 541 -261 533 144 292 -262 534 17 340 -263 535 175 375 -264 536 166 459 -265 537 137 374 -266 538 115 273 -267 539 14 316 -268 540 69 336 -269 541 135 495 -270 542 214 335 -271 543 212 465 -272 544 183 387 -340 118 184 198 -412 455 59 239 -339 135 538 5 -95 270 474 82 -64 254 159 268 -449 87 280 238 -179 12 192 340 -428 496 281 337 -375 542 390 484 -126 392 190 206 -193 524 31 531 -415 271 276 55 -533 49 497 494 -490 74 418 421 -181 203 152 419 -295 540 320 446 -432 76 51 473 -124 494 206 136 -275 221 156 171 -509 174 100 346 -369 85 6 334 -20 66 129 352 -349 210 69 179 -105 217 391 113 -22 50 455 306 -398 153 481 288 -238 475 9 333 -512 22 257 430 -468 187 61 286 -26 35 372 280 -482 181 332 18 -261 306 242 483 -435 486 434 520 -276 317 329 25 -355 27 175 26 -500 201 48 236 -178 398 58 256 -538 39 368 364 -379 152 331 31 -13 397 451 191 -118 430 10 20 -33 132 359 17 -425 126 183 250 -107 479 508 512 -520 208 231 441 -66 327 342 132 -400 473 285 412 -403 283 288 373 -190 278 542 262 -138 155 436 44 -366 447 385 170 -18 362 3 65 -157 223 22 386 -180 110 448 351 -125 25 399 174 -182 269 477 146 -37 265 384 98 -359 505 405 516 -147 294 182 37 -502 442 443 385 -385 535 227 248 -84 461 514 53 -223 199 133 321 -279 477 120 227 -357 234 293 78 -39 227 304 343 -235 129 162 467 -544 81 346 329 -30 264 125 155 -74 285 491 496 -12 471 251 530 -152 145 132 173 -104 405 303 513 -443 52 435 231 -256 82 99 141 -80 63 533 408 -505 375 224 366 -117 10 376 11 -484 343 267 237 -158 103 220 87 -252 165 266 49 -312 248 107 415 -173 456 225 148 -407 377 292 436 -489 354 13 215 -294 485 77 324 -45 99 216 38 -525 67 400 316 -114 439 480 293 -195 382 407 69 -479 511 295 157 -497 428 161 541 -270 307 373 119 -164 168 428 478 -237 368 278 221 -88 529 113 193 -203 383 193 277 -465 498 445 135 -87 68 469 527 -228 102 318 432 -540 236 389 91 -100 541 167 504 -370 250 460 67 -98 93 143 60 -539 46 64 202 -79 329 12 205 -184 158 131 465 -498 417 291 22 -204 336 388 217 -121 489 408 154 -112 519 515 106 -441 495 109 263 -424 189 513 19 -283 427 194 259 -308 328 409 153 -373 534 522 243 -27 366 262 34 -343 415 78 187 -352 56 371 6 -144 267 199 325 -530 261 482 265 -296 20 116 172 -93 159 356 326 -260 15 305 383 -452 188 544 95 -325 520 92 535 -341 2 424 27 -106 24 187 372 -253 467 534 128 -430 72 338 543 -324 127 509 264 -247 164 375 225 -528 70 516 506 -156 365 421 320 -338 255 525 290 -523 117 34 161 -233 154 429 518 -515 401 108 200 -475 528 321 188 -421 481 265 186 -85 342 519 365 -47 504 283 299 -321 431 379 448 -514 527 483 378 -318 388 484 537 -82 219 235 45 -345 517 461 63 -347 226 201 24 -429 97 313 234 -162 37 274 74 -481 478 401 349 -414 350 247 472 -448 58 402 233 -36 105 210 112 -136 364 18 304 -356 245 395 318 -361 79 308 103 -471 370 438 328 -458 273 44 131 -67 1 297 232 -358 435 223 322 -243 386 14 393 -307 167 130 454 -336 502 196 284 -393 218 431 151 -116 403 111 185 -320 78 233 443 -81 351 312 124 -86 268 226 395 -265 59 24 76 -511 304 46 314 -183 69 202 192 -305 18 315 381 -288 196 427 204 -153 53 145 8 -92 410 245 363 -382 402 126 255 -495 30 68 73 -442 98 463 389 -264 493 450 464 -119 73 354 137 -387 29 319 168 -148 311 151 405 -19 136 211 361 -420 137 540 279 -273 147 169 143 -381 358 72 118 -240 205 306 388 -212 507 66 466 -298 100 117 254 -310 211 71 52 -31 407 302 228 -4 464 128 84 -83 353 207 500 -384 361 517 503 -404 148 25 240 -207 232 330 127 -171 432 209 407 -488 492 337 367 -287 476 28 507 -439 488 236 463 -461 259 382 104 -470 5 237 139 -210 512 5 289 -213 436 270 315 -72 57 396 158 -299 374 255 92 -50 301 411 542 -38 95 471 222 -208 453 163 461 -317 260 309 470 -155 160 271 368 -51 487 496 79 -467 19 475 319 -177 277 500 165 -476 84 490 362 -209 170 93 459 -14 104 32 283 -186 276 243 175 -417 131 164 379 -316 183 142 519 -496 452 325 229 -451 522 488 47 -322 109 279 58 -42 286 531 177 -284 339 458 2 -191 240 311 297 -244 483 322 312 -459 239 110 414 -134 192 95 88 -542 425 348 273 -351 191 363 339 -53 424 494 207 -469 426 37 418 -21 157 364 54 -262 330 205 501 -7 490 432 10 -327 525 79 130 -313 96 73 499 -49 33 351 244 -535 437 241 46 -101 335 386 433 -202 190 81 32 -44 384 180 117 -23 355 307 195 -380 440 36 201 -519 450 135 469 -227 515 417 90 -395 532 60 471 -159 185 394 105 -110 94 43 456 -175 163 212 440 -113 108 155 336 -9 65 535 502 -501 253 511 489 -154 359 149 488 -301 399 452 508 -146 465 268 246 -397 314 478 258 -225 107 27 369 -277 124 393 342 -394 215 264 495 -34 287 380 125 -331 4 336 517 -323 115 301 376 -59 409 197 166 -57 325 11 475 -333 43 185 384 -389 387 277 305 -374 408 83 426 -383 88 1 51 -377 298 539 354 -466 229 467 300 -40 262 86 81 -422 146 179 460 -492 32 222 476 -416 175 112 271 -392 55 339 396 -176 6 96 12 -259 162 174 184 -2 244 172 480 -272 113 141 453 -445 310 414 66 -120 334 353 266 -285 179 134 423 -401 544 377 14 -250 177 506 199 -56 21 41 394 -537 468 102 253 -122 463 447 435 -266 130 57 180 -267 47 502 28 -507 149 166 402 -293 385 459 302 -62 51 287 536 -274 247 487 197 -354 281 106 468 -115 379 299 455 -70 295 138 21 -200 123 415 223 -483 275 387 347 -447 356 136 70 -28 406 404 16 -408 462 314 89 -485 75 218 147 -446 539 45 486 -344 503 543 4 -346 235 345 417 -282 54 381 327 -527 501 91 29 -76 357 528 50 -286 300 19 267 -246 48 248 491 -518 138 403 115 -406 89 362 514 -6 230 397 359 -364 141 215 129 -131 243 328 152 -63 249 439 183 -362 42 335 387 -221 182 208 56 -315 347 501 371 -97 114 273 399 -194 305 406 437 -94 209 413 121 -151 171 39 391 -473 516 324 96 -444 441 523 40 -245 521 341 295 -536 274 468 111 -102 7 366 270 -197 252 170 86 -437 62 53 189 -135 412 217 287 -54 180 504 164 -372 142 258 335 -24 413 260 220 -405 139 499 167 -189 346 67 203 -306 451 104 532 -386 86 54 190 -248 194 55 242 -71 224 123 261 -111 151 296 122 -226 303 457 357 -478 297 512 213 -128 344 146 481 -58 394 119 474 -55 491 272 358 -174 16 40 101 -426 434 472 307 -278 121 521 404 -504 371 537 462 -513 531 203 126 -472 389 357 281 -41 3 398 33 -132 150 240 521 -399 363 144 374 -487 445 360 59 -363 125 56 275 -390 61 63 458 -32 448 191 323 -15 337 239 341 -280 143 122 97 -168 321 449 41 -77 484 188 492 -140 258 416 420 -199 202 171 269 -474 60 154 107 -297 34 486 57 -508 112 289 230 -303 169 214 294 -10 220 2 291 -29 309 446 452 -418 288 532 409 -236 459 462 71 -510 543 410 109 -524 40 139 317 -291 326 38 529 -5 497 147 442 -163 71 177 425 -188 233 520 257 -289 45 105 309 -123 421 176 345 -160 216 186 406 -222 429 493 3 -150 420 30 356 -251 320 444 370 -89 279 87 382 -91 333 422 411 -96 416 505 48 -462 316 153 252 -139 251 70 150 -127 225 221 401 -220 419 282 380 -271 536 518 209 -196 172 423 313 -334 122 140 214 -456 204 137 450 -108 222 29 416 -99 161 85 247 -427 289 465 116 -411 332 261 120 -130 338 88 528 -450 523 350 35 -269 17 250 524 -342 280 15 39 -409 518 232 145 -242 77 412 296 -129 538 52 7 -419 466 369 43 -391 140 49 149 -263 231 23 282 -172 509 524 348 -494 530 249 479 -413 381 234 138 -367 396 470 353 -73 414 286 272 -141 178 114 487 -455 116 17 142 -185 213 157 99 -214 11 90 525 -365 395 195 428 -258 418 246 260 -290 241 323 375 -17 293 485 212 -534 404 228 457 -454 349 173 110 -348 372 97 438 -457 26 365 360 -531 533 244 510 -434 480 198 133 -309 292 300 485 -376 318 489 83 -526 290 310 102 -215 266 89 505 -133 340 204 61 -314 499 317 159 -52 238 347 93 -335 380 50 344 -423 482 358 160 -464 166 168 140 -206 500 98 482 -149 176 419 427 -65 120 148 445 -165 470 370 397 -541 537 62 533 -438 506 76 219 -218 345 115 68 -90 156 229 439 -328 64 80 355 -350 8 294 181 -257 186 326 413 -169 446 298 211 -68 400 507 444 -8 352 35 194 -205 200 238 424 -61 299 160 311 -477 195 256 276 -522 9 343 278 -506 315 530 123 -436 193 464 226 -396 469 495 429 -254 36 290 15 -255 444 420 308 -368 246 252 522 -486 308 426 534 -360 257 21 377 -167 198 526 77 -529 508 158 42 -201 91 82 134 -16 133 355 224 -440 111 361 178 -353 38 213 30 -166 313 165 80 -516 263 498 75 -517 514 16 434 -145 312 263 64 -371 214 8 301 -198 367 121 498 -231 422 442 509 -216 296 103 100 -543 369 425 144 -503 41 178 332 -304 207 430 298 -48 272 374 523 -521 411 253 515 -493 376 33 176 -137 474 527 285 -402 23 456 249 -463 373 378 477 -75 302 503 410 -292 197 352 493 -311 331 327 303 -319 324 254 431 -43 101 200 235 -211 526 510 245 -241 44 42 400 -431 348 230 13 -302 173 479 331 -232 14 259 449 -69 438 340 162 -330 319 284 1 -161 128 20 72 -460 454 536 210 -532 31 440 94 -109 378 529 163 -388 449 4 36 -142 323 94 169 -499 13 541 422 -46 256 118 540 -300 228 492 62 -187 291 84 526 -35 90 473 108 -281 282 127 398 -480 458 453 274 -143 341 334 23 -268 106 367 350 -433 322 476 403 -230 284 275 392 -219 134 269 544 -378 119 344 251 -326 513 181 196 -3 390 47 511 -229 443 65 85 -170 360 437 9 -60 423 219 216 -410 457 74 310 -453 391 466 490 -1 144 433 218 -234 80 454 156 -217 433 124 390 -78 83 189 447 -103 242 150 182 -332 510 316 451 -11 472 333 539 -192 237 26 208 -491 212 101 538 -337 393 349 114 -239 92 383 330 -329 206 75 338 -25 28 392 292 -224 460 7 497 -249 184 441 241 -1 258 802 432 543 775 -2 188 553 399 645 498 -3 68 796 628 324 658 -4 153 465 536 780 579 -5 107 652 475 476 275 -6 231 588 551 293 391 -7 87 509 603 815 682 -8 256 728 724 751 447 -9 93 526 732 299 798 -10 228 645 350 313 509 -11 26 808 694 539 350 -12 211 343 279 378 551 -13 43 312 782 357 771 -14 267 490 773 434 558 -15 41 635 396 679 736 -16 187 744 622 749 575 -17 262 698 678 692 314 -18 78 324 445 427 303 -19 209 456 486 584 385 -20 102 294 394 776 313 -21 32 507 560 740 571 -22 155 297 300 325 380 -23 25 517 762 685 789 -24 233 609 400 442 420 -25 142 814 327 468 306 -26 120 302 702 809 307 -27 40 389 307 532 399 -28 37 575 814 472 564 -29 164 646 454 672 582 -30 77 341 450 659 746 -31 179 464 778 283 311 -32 71 634 548 490 515 -33 53 314 512 760 628 -34 250 535 642 408 389 -35 255 786 302 728 677 -36 89 426 736 518 780 -37 259 329 422 506 331 -38 241 481 746 651 359 -39 252 338 310 598 679 -40 106 546 650 622 600 -41 111 628 756 560 637 -42 166 497 592 770 742 -43 74 768 540 523 683 -44 76 516 770 431 322 -45 245 359 655 578 418 -46 207 783 377 443 513 -47 8 414 564 796 495 -48 247 758 585 308 663 -49 42 512 285 684 353 -50 205 480 297 712 583 -51 165 485 567 289 543 -52 33 711 346 682 463 -53 54 505 447 605 334 -54 213 607 581 613 507 -55 177 621 550 614 284 -56 2 560 391 632 593 -57 70 539 478 563 642 -58 215 620 425 309 496 -59 56 538 442 274 631 -60 94 799 641 521 376 -61 206 730 633 301 709 -62 183 567 605 719 784 -63 109 591 348 633 419 -64 116 277 723 377 750 -65 203 717 526 797 324 -66 57 318 294 461 555 -67 198 432 360 611 375 -68 105 727 371 450 721 -69 268 774 444 295 362 -70 82 571 405 665 574 -71 194 615 653 463 648 -72 98 478 402 459 776 -73 222 690 453 511 450 -74 221 342 286 800 422 -75 234 764 577 813 748 -76 186 583 289 720 442 -77 214 638 681 358 741 -78 135 805 439 390 337 -79 122 378 429 510 485 -80 24 348 803 723 747 -81 130 440 340 515 546 -82 172 418 347 743 276 -83 75 466 805 542 706 -84 149 334 488 785 465 -85 138 413 293 673 797 -86 210 441 613 546 604 -87 218 371 278 661 352 -88 243 368 543 676 502 -89 100 661 587 708 576 -90 48 722 786 694 520 -91 127 662 743 582 373 -92 236 448 812 398 479 -93 10 395 376 489 711 -94 254 597 523 781 778 -95 108 276 481 502 397 -96 28 663 511 551 599 -97 251 595 421 701 636 -98 121 376 451 715 329 -99 5 673 359 347 693 -100 191 374 462 292 754 -101 73 514 768 810 622 -102 133 603 372 561 707 -103 160 806 352 754 429 -104 244 345 490 612 474 -105 86 296 426 655 522 -106 91 400 790 569 383 -107 20 316 532 354 641 -108 158 672 525 410 786 -109 157 779 496 384 649 -110 69 523 326 501 700 -111 124 616 745 438 602 -112 128 383 643 549 426 -113 197 525 554 368 296 -114 62 361 595 691 811 -115 266 570 537 721 586 -116 176 438 692 394 674 -117 83 350 408 462 516 -118 85 313 273 783 459 -119 23 453 794 620 365 -120 220 556 717 336 675 -121 208 382 624 752 597 -122 11 562 670 636 616 -123 132 656 572 615 733 -124 67 290 533 804 440 -125 253 327 632 341 535 -126 192 282 315 449 626 -127 101 666 403 787 469 -128 34 619 776 465 401 -129 22 682 339 294 589 -130 72 676 563 435 510 -131 169 590 492 379 431 -132 156 629 314 344 318 -133 29 709 744 335 704 -134 230 502 793 557 743 -135 269 606 275 519 370 -136 125 427 456 574 290 -137 265 761 457 671 453 -138 79 322 586 571 688 -139 202 665 610 650 475 -140 181 639 684 670 714 -141 226 691 589 554 347 -142 180 781 608 493 692 -143 184 789 636 376 458 -144 261 392 802 630 755 -145 110 750 344 447 680 -146 185 530 547 619 328 -147 146 331 458 652 577 -148 59 455 468 717 355 -149 17 716 565 528 684 -150 36 659 629 806 665 -151 195 598 616 455 437 -152 225 344 311 287 590 -153 246 447 298 664 387 -154 134 528 409 641 382 -155 193 484 322 525 341 -156 114 406 722 291 803 -157 235 325 507 693 363 -158 174 352 379 742 478 -159 90 522 395 277 710 -160 162 657 484 730 713 -161 237 776 673 364 408 -162 1 422 552 339 774 -163 144 653 524 482 779 -164 14 366 404 492 607 -165 136 718 353 747 487 -166 264 747 714 565 538 -167 3 741 435 374 610 -168 170 637 366 714 454 -169 50 726 644 458 781 -170 148 798 489 604 323 -171 212 470 598 640 291 -172 6 686 669 553 394 -173 52 355 772 700 344 -174 217 622 292 552 327 -175 263 524 549 307 491 -176 145 551 716 656 760 -177 152 487 559 653 497 -178 240 309 691 756 745 -179 88 279 557 547 295 -180 154 326 607 516 563 -181 167 287 303 795 724 -182 49 328 593 331 806 -183 272 444 493 315 591 -184 137 379 816 273 552 -185 66 693 522 540 438 -186 161 491 725 657 412 -187 81 785 301 400 390 -188 126 654 397 638 411 -189 150 611 385 805 605 -190 199 321 515 282 613 -191 60 499 504 634 312 -192 38 809 502 279 444 -193 61 283 734 369 368 -194 58 596 614 386 728 -195 131 362 731 695 517 -196 39 669 446 436 795 -197 51 604 765 538 568 -198 115 752 741 704 273 -199 204 640 335 392 559 -200 18 572 729 768 410 -201 151 743 308 420 518 -202 47 515 640 444 377 -203 260 369 287 626 611 -204 118 381 671 709 446 -205 227 729 460 508 378 -206 189 715 813 290 282 -207 113 469 757 466 505 -208 13 482 317 593 809 -209 173 489 597 470 668 -210 27 476 295 426 777 -211 45 769 463 456 726 -212 271 461 810 524 698 -213 95 477 693 746 618 -214 270 694 751 644 670 -215 239 708 534 589 357 -216 80 754 657 359 799 -217 178 804 296 606 381 -218 63 721 437 577 802 -219 232 793 418 799 720 -220 143 667 645 352 609 -221 7 593 291 666 367 -222 171 658 672 548 481 -223 44 335 325 433 572 -224 147 815 615 349 744 -225 84 532 666 355 404 -226 4 617 420 441 734 -227 103 520 338 333 336 -228 141 372 784 699 464 -229 196 797 545 722 494 -230 216 792 588 771 643 -231 104 753 685 317 346 -232 229 773 469 680 432 -233 31 409 654 439 425 -234 92 803 337 688 421 -235 163 339 580 418 768 -236 219 648 373 473 308 -237 19 367 809 475 351 -238 182 299 711 729 278 -239 119 812 501 635 274 -240 238 460 499 629 468 -241 159 770 697 513 816 -242 15 681 806 304 614 -243 257 434 590 491 388 -244 140 500 553 703 512 -245 35 601 428 448 769 -246 65 585 738 696 530 -247 242 404 568 424 673 -248 97 614 354 585 333 -249 112 816 591 687 762 -250 64 559 375 678 315 -251 168 660 665 343 794 -252 224 353 604 738 664 -253 16 401 527 759 561 -254 248 736 277 767 462 -255 46 737 407 479 449 -256 223 347 783 731 309 -257 123 725 740 300 654 -258 12 696 639 608 531 -259 96 552 474 773 386 -260 55 396 483 609 696 -261 200 304 393 675 615 -262 21 508 546 389 321 -263 99 685 748 750 384 -264 139 452 341 534 403 -265 201 442 329 412 393 -266 117 563 708 353 556 -267 175 564 392 351 584 -268 129 790 441 530 277 -269 190 678 328 793 640 -270 249 365 276 477 603 -271 30 668 284 484 549 -272 9 554 758 621 690 -1 266 458 431 595 503 -2 239 568 602 422 788 -3 34 291 573 792 632 -4 113 306 491 284 731 -5 41 533 487 541 369 -6 214 624 321 367 732 -7 234 336 661 496 457 -8 82 636 679 278 302 -9 61 787 569 280 627 -10 241 581 787 667 685 -11 193 386 320 414 490 -12 20 498 792 775 436 -13 7 557 342 319 761 -14 253 584 497 690 301 -15 33 472 535 567 606 -16 192 446 647 320 298 -17 143 655 674 643 476 -18 187 697 707 736 407 -19 18 651 785 380 645 -20 261 765 705 356 814 -21 248 566 698 337 361 -22 67 358 331 724 644 -23 243 288 571 363 601 -24 4 394 754 616 681 -25 122 642 618 432 499 -26 64 462 544 726 757 -27 89 479 730 570 414 -28 210 784 584 705 545 -29 62 529 480 537 751 -30 181 772 764 464 566 -31 189 644 617 345 766 -32 175 757 443 338 427 -33 65 445 596 396 541 -34 48 612 304 460 297 -35 84 435 365 517 623 -36 129 387 739 429 737 -37 188 705 646 483 655 -38 73 463 555 707 800 -39 92 766 455 499 730 -40 42 354 750 440 500 -41 31 511 747 421 669 -42 66 710 531 576 443 -43 107 594 733 445 477 -44 267 493 664 807 360 -45 100 483 306 710 650 -46 142 417 706 372 428 -47 51 767 775 454 486 -48 201 439 660 288 406 -49 6 415 637 411 335 -50 111 496 791 500 433 -51 247 537 781 697 634 -52 230 403 767 599 358 -53 56 398 539 494 392 -54 37 795 651 725 395 -55 222 510 318 766 581 -56 124 723 387 590 430 -57 60 813 378 306 340 -58 112 775 508 469 812 -59 215 536 766 311 772 -60 150 807 675 303 756 -61 95 540 662 808 299 -62 200 670 556 789 293 -63 270 712 514 592 608 -64 268 436 381 536 525 -65 11 811 635 471 280 -66 74 407 676 402 813 -67 148 275 498 550 504 -68 262 273 709 774 279 -69 21 399 789 601 635 -70 137 679 413 318 533 -71 228 390 351 732 338 -72 58 579 619 794 712 -73 172 419 721 580 656 -74 78 580 611 340 292 -75 157 420 594 711 573 -76 90 701 771 503 686 -77 240 295 700 811 423 -78 2 724 424 677 790 -79 101 504 440 512 326 -80 50 391 728 765 294 -81 218 746 466 556 689 -82 46 569 357 453 544 -83 153 307 517 744 723 -84 22 428 574 395 659 -85 98 337 583 627 617 -86 227 433 459 713 621 -87 194 330 528 314 588 -88 108 740 798 631 702 -89 68 429 467 745 456 -90 165 592 324 587 488 -91 87 632 630 504 448 -92 202 589 427 507 310 -93 115 695 406 702 413 -94 246 323 389 603 349 -95 94 689 752 790 471 -96 236 738 367 310 484 -97 229 293 755 683 532 -98 55 375 430 718 660 -99 9 751 625 391 594 -100 49 608 701 302 400 -101 196 388 763 365 320 -102 265 542 479 758 630 -103 263 281 349 404 697 -104 93 706 760 350 537 -105 43 544 356 558 740 -106 146 794 779 763 416 -107 184 311 570 415 492 -108 169 518 712 535 667 -109 160 459 688 581 445 -110 132 449 362 474 661 -111 130 543 369 812 396 -112 207 467 516 329 540 -113 104 333 566 323 332 -114 171 613 434 514 325 -115 272 454 541 573 592 -116 32 780 417 381 460 -117 125 541 627 373 451 -118 119 633 796 281 804 -119 154 684 801 296 598 -120 225 550 282 814 792 -121 106 437 811 533 434 -122 211 534 620 522 560 -123 235 521 695 428 441 -124 182 735 689 478 550 -125 97 531 312 588 718 -126 96 298 309 628 787 -127 255 630 529 327 595 -128 10 319 727 360 770 -129 242 558 410 423 666 -130 83 762 449 425 565 -131 14 320 438 586 791 -132 162 468 699 575 624 -133 88 610 345 330 455 -134 117 587 575 596 657 -135 174 356 464 362 470 -136 17 576 542 382 348 -137 203 680 538 387 647 -138 216 800 448 649 764 -139 35 675 759 480 662 -140 159 274 606 681 319 -141 77 688 609 597 725 -142 168 424 690 555 501 -143 166 284 390 572 354 -144 81 549 663 639 672 -145 232 492 380 520 580 -146 176 647 696 286 506 -147 40 683 667 716 287 -148 191 457 659 737 639 -149 38 412 656 406 286 -150 186 547 753 662 782 -151 231 713 799 669 557 -152 233 385 505 399 729 -153 120 315 503 755 653 -154 183 623 506 739 542 -155 158 674 386 446 716 -156 75 280 364 366 695 -157 167 421 658 409 735 -158 170 402 313 757 300 -159 53 771 415 437 767 -160 252 289 470 509 372 -161 57 791 804 802 514 -162 190 704 623 305 749 -163 29 305 433 346 562 -164 25 734 477 322 356 -165 52 605 513 798 596 -166 102 720 774 430 701 -167 19 473 361 591 722 -168 45 745 518 778 524 -169 198 384 600 816 317 -170 217 451 332 753 652 -171 118 346 797 332 439 -172 209 600 737 660 727 -173 213 555 631 370 717 -174 63 578 726 646 288 -175 245 574 323 562 805 -176 156 425 634 326 415 -177 208 278 780 637 773 -178 114 677 519 452 671 -179 127 495 612 312 807 -180 47 397 494 529 646 -181 256 801 482 788 554 -182 206 700 777 803 435 -183 257 692 274 297 570 -184 219 671 355 762 523 -185 109 702 800 617 699 -186 123 431 788 498 633 -187 264 501 648 566 489 -188 91 777 815 375 547 -189 179 474 334 419 482 -190 69 664 576 648 625 -191 23 763 562 451 473 -192 244 714 465 734 452 -193 271 370 530 674 379 -194 72 545 683 801 461 -195 173 486 401 545 339 -196 26 301 561 602 569 -197 136 506 735 371 519 -198 151 475 718 689 483 -199 237 430 343 481 521 -200 163 627 808 623 424 -201 220 599 319 786 289 -202 99 641 761 276 620 -203 145 411 299 486 539 -204 24 488 472 791 548 -205 76 731 336 328 763 -206 28 618 423 531 366 -207 152 363 316 772 687 -208 30 788 704 361 553 -209 135 423 412 298 619 -210 212 303 713 393 715 -211 249 573 500 416 304 -212 147 351 638 417 281 -213 180 577 358 698 705 -214 16 739 305 642 578 -215 205 631 485 568 691 -216 105 471 473 495 528 -217 226 357 382 706 527 -218 197 286 509 488 801 -219 254 810 621 342 585 -220 134 548 471 784 638 -221 223 760 452 658 765 -222 1 687 290 505 285 -223 269 450 384 735 534 -224 86 494 280 485 342 -225 177 364 652 285 815 -226 12 380 370 748 752 -227 71 782 710 610 511 -228 259 308 715 487 466 -229 128 527 582 594 508 -230 121 332 436 564 526 -231 13 756 579 764 467 -232 103 625 414 607 374 -233 164 349 330 663 708 -234 141 733 720 559 405 -235 3 565 461 727 472 -236 44 643 742 316 529 -237 79 292 686 403 753 -238 54 649 807 769 703 -239 80 443 363 527 796 -240 126 300 476 618 316 -241 251 626 795 385 345 -242 144 416 749 334 587 -243 140 410 520 383 759 -244 138 748 599 405 330 -245 27 749 419 467 536 -246 85 586 680 668 409 -247 185 519 383 413 493 -248 39 317 398 654 305 -249 15 759 601 624 629 -250 199 732 495 388 738 -251 204 408 677 600 758 -252 8 650 283 686 678 -253 238 360 510 407 694 -254 116 707 769 741 785 -255 221 582 416 761 371 -256 5 405 411 583 676 -257 250 742 368 779 651 -258 133 393 687 733 343 -259 161 703 626 497 283 -260 258 778 521 647 612 -261 59 285 703 348 719 -262 149 699 388 401 739 -263 155 513 333 526 398 -264 178 602 668 777 567 -265 224 561 719 625 417 -266 131 310 682 275 810 -267 195 377 578 544 808 -268 70 373 288 457 783 -269 260 719 374 782 364 -270 36 503 281 321 480 -271 110 755 649 579 402 -272 139 340 558 397 793 diff --git a/sw/python/res/96.3.965.alist b/sw/python/res/96.3.965.alist deleted file mode 100644 index 9ec6591..0000000 --- a/sw/python/res/96.3.965.alist +++ /dev/null @@ -1,148 +0,0 @@ -96 48 -3 6 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -14 28 39 -2 24 43 -9 23 33 -15 27 36 -12 20 37 -8 18 47 -13 21 40 -3 17 42 -5 30 44 -10 19 48 -7 32 34 -11 29 45 -1 25 38 -6 22 41 -4 26 46 -16 31 35 -1 23 45 -5 24 48 -14 19 34 -7 27 35 -8 22 46 -2 28 40 -10 17 36 -3 32 33 -4 29 44 -11 20 47 -15 30 39 -9 18 41 -13 31 43 -16 25 42 -6 21 37 -12 26 38 -6 32 40 -11 26 37 -14 25 48 -12 31 36 -3 19 43 -15 24 45 -9 30 35 -13 29 39 -1 22 34 -4 20 41 -16 21 47 -10 23 46 -8 17 44 -2 27 38 -7 28 33 -5 18 42 -1 28 46 -14 26 42 -7 23 47 -12 19 44 -3 21 45 -5 29 33 -6 27 39 -10 30 34 -8 24 38 -11 22 48 -13 20 35 -4 32 37 -16 17 40 -2 31 41 -15 18 43 -9 25 36 -8 32 43 -6 20 33 -2 22 42 -13 27 44 -3 25 39 -14 29 37 -9 31 40 -7 30 41 -5 23 38 -16 19 45 -4 21 48 -10 28 47 -15 17 46 -11 18 34 -1 26 36 -12 24 35 -13 32 41 -7 29 36 -14 30 38 -8 23 42 -1 18 33 -11 19 35 -10 26 44 -16 20 43 -5 28 34 -15 25 47 -3 31 37 -2 21 39 -9 24 46 -12 22 45 -4 27 40 -6 17 48 -13 17 41 49 79 85 -2 22 46 62 67 92 -8 24 37 53 69 91 -15 25 42 60 75 95 -9 18 48 54 73 89 -14 31 33 55 66 96 -11 20 47 51 72 82 -6 21 45 57 65 84 -3 28 39 64 71 93 -10 23 44 56 76 87 -12 26 34 58 78 86 -5 32 36 52 80 94 -7 29 40 59 68 81 -1 19 35 50 70 83 -4 27 38 63 77 90 -16 30 43 61 74 88 -8 23 45 61 77 96 -6 28 48 63 78 85 -10 19 37 52 74 86 -5 26 42 59 66 88 -7 31 43 53 75 92 -14 21 41 58 67 94 -3 17 44 51 73 84 -2 18 38 57 80 93 -13 30 35 64 69 90 -15 32 34 50 79 87 -4 20 46 55 68 95 -1 22 47 49 76 89 -12 25 40 54 70 82 -9 27 39 56 72 83 -16 29 36 62 71 91 -11 24 33 60 65 81 -3 24 47 54 66 85 -11 19 41 56 78 89 -16 20 39 59 80 86 -4 23 36 64 79 82 -5 31 34 60 70 91 -13 32 46 57 73 83 -1 27 40 55 69 92 -7 22 33 61 71 95 -14 28 42 62 72 81 -8 30 48 50 67 84 -2 29 37 63 65 88 -9 25 45 52 68 87 -12 17 38 53 74 94 -15 21 44 49 77 93 -6 26 43 51 76 90 -10 18 35 58 75 96 diff --git a/sw/python/res/999.111.3.5543.alist b/sw/python/res/999.111.3.5543.alist deleted file mode 100644 index 6d07c8d..0000000 --- a/sw/python/res/999.111.3.5543.alist +++ /dev/null @@ -1,1114 +0,0 @@ -999 111 -3 27 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -41 56 110 -29 91 105 -8 94 9 -11 16 4 -81 1 104 -57 90 92 -27 109 106 -69 12 77 -45 100 31 -86 56 95 -103 91 55 -107 32 21 -24 47 101 -56 83 54 -13 50 103 -34 69 45 -11 66 39 -2 97 92 -33 100 19 -66 10 3 -33 41 103 -49 17 78 -11 70 28 -93 53 88 -107 13 65 -26 76 104 -14 6 44 -23 33 3 -47 9 98 -22 111 72 -98 84 96 -8 49 48 -94 82 10 -31 19 28 -1 74 68 -36 109 53 -23 68 9 -50 85 22 -24 78 95 -20 64 102 -24 103 9 -30 51 15 -34 88 79 -40 4 5 -10 73 100 -47 87 55 -63 88 26 -42 75 90 -59 27 42 -29 90 38 -100 18 63 -89 93 66 -57 59 103 -69 21 28 -70 58 39 -85 24 107 -54 25 61 -7 102 28 -5 62 27 -75 7 2 -32 19 106 -42 15 82 -35 60 69 -62 25 105 -2 82 72 -63 61 35 -2 106 71 -12 88 71 -79 65 111 -43 108 81 -95 54 67 -104 23 49 -111 82 26 -103 101 14 -42 6 101 -66 80 12 -43 26 1 -18 8 21 -42 55 93 -32 71 68 -15 77 19 -58 23 93 -67 97 51 -101 76 70 -73 17 25 -50 56 53 -36 10 16 -99 104 96 -63 83 60 -94 76 17 -3 83 35 -84 30 89 -111 86 110 -18 90 27 -99 52 14 -24 42 97 -3 90 19 -82 35 51 -20 90 99 -45 33 22 -27 14 20 -71 75 34 -52 57 46 -97 59 60 -20 96 11 -64 6 55 -73 43 12 -106 111 44 -75 96 86 -35 76 44 -81 20 30 -25 33 43 -59 105 68 -45 25 68 -37 109 93 -79 84 6 -73 95 37 -91 18 108 -6 92 36 -43 111 101 -55 56 81 -38 32 43 -10 24 61 -44 27 15 -97 43 69 -103 44 65 -4 34 47 -29 64 74 -13 87 7 -108 46 69 -51 40 44 -31 85 63 -89 60 80 -41 61 92 -67 52 36 -96 27 51 -98 8 28 -87 10 35 -13 16 68 -71 33 15 -94 91 75 -82 103 40 -95 58 27 -93 107 101 -95 93 106 -60 2 101 -38 56 71 -45 65 98 -36 62 58 -61 68 27 -89 76 46 -18 45 52 -12 19 61 -109 42 74 -57 88 64 -54 31 82 -4 80 102 -91 43 85 -9 69 70 -29 61 42 -82 75 102 -10 60 46 -76 11 41 -2 40 46 -23 106 107 -18 98 80 -57 35 74 -91 20 1 -102 34 96 -87 83 40 -15 37 94 -26 3 31 -29 20 73 -5 61 52 -51 80 7 -36 21 100 -106 110 66 -54 48 27 -82 4 28 -78 16 15 -19 25 101 -91 24 57 -38 8 50 -43 60 78 -48 3 102 -29 21 76 -61 80 91 -37 104 88 -21 99 26 -109 68 100 -98 75 100 -9 6 109 -21 79 52 -37 38 92 -1 71 66 -5 8 74 -22 15 58 -16 91 107 -4 84 2 -7 70 72 -57 3 96 -9 50 110 -21 111 25 -46 13 34 -61 107 64 -32 83 10 -47 30 7 -54 55 38 -62 64 83 -59 1 108 -68 94 4 -28 74 83 -60 47 99 -23 86 14 -37 40 76 -97 31 107 -28 37 3 -107 90 53 -67 99 106 -22 14 65 -90 73 23 -65 25 86 -45 62 48 -88 36 89 -19 26 47 -94 69 104 -92 7 20 -95 109 7 -22 104 63 -60 21 77 -77 7 101 -45 35 56 -43 75 13 -97 86 36 -67 89 38 -71 96 41 -9 39 95 -30 52 58 -27 32 4 -12 107 79 -38 6 18 -108 47 103 -111 19 85 -59 54 90 -43 15 46 -34 17 58 -99 53 110 -28 16 95 -110 44 63 -101 105 9 -10 25 18 -12 85 75 -54 102 1 -72 36 47 -108 79 80 -58 78 106 -31 39 92 -6 52 37 -35 32 8 -70 3 47 -110 70 20 -6 74 106 -95 33 94 -94 78 5 -58 66 13 -11 26 35 -63 51 94 -81 42 2 -77 74 27 -66 42 69 -87 22 59 -72 67 5 -80 65 105 -7 69 4 -75 30 80 -92 23 18 -55 11 86 -46 74 31 -99 107 56 -64 4 13 -40 24 93 -81 34 37 -40 16 86 -12 67 2 -31 8 69 -77 3 44 -104 53 19 -19 39 99 -1 41 94 -26 62 50 -98 63 37 -100 8 2 -67 45 40 -79 61 48 -77 9 104 -90 76 47 -81 89 59 -21 5 92 -106 65 40 -86 84 52 -62 24 16 -63 86 73 -23 29 110 -85 72 102 -89 11 15 -5 71 84 -64 17 45 -42 34 16 -45 6 70 -42 72 63 -23 31 24 -97 61 26 -70 93 35 -67 81 17 -102 41 5 -72 95 61 -5 91 19 -74 7 88 -27 92 69 -92 99 29 -89 70 71 -8 56 85 -80 97 82 -43 39 87 -34 84 111 -40 18 68 -54 69 13 -18 32 105 -22 99 100 -38 30 5 -2 28 34 -104 30 78 -53 41 63 -48 85 103 -70 62 49 -57 109 102 -6 56 88 -30 49 107 -80 73 94 -30 63 93 -109 97 50 -49 6 40 -67 56 93 -97 103 89 -22 23 95 -94 53 105 -13 6 48 -7 55 106 -71 87 94 -9 79 85 -6 93 96 -52 16 2 -47 107 43 -87 54 8 -20 57 25 -29 32 65 -73 76 49 -59 66 38 -11 13 2 -57 13 56 -24 22 77 -28 86 103 -36 1 51 -46 59 62 -84 66 105 -89 87 37 -20 84 50 -46 44 36 -92 94 66 -69 48 41 -69 101 75 -90 41 105 -36 42 83 -58 69 51 -58 57 85 -34 56 104 -97 55 37 -108 110 6 -81 98 105 -95 45 107 -98 39 49 -37 62 96 -38 75 70 -51 25 78 -102 22 8 -32 39 34 -78 21 64 -101 65 26 -48 25 76 -99 103 111 -63 81 75 -88 55 39 -25 12 8 -17 59 52 -20 10 2 -11 12 24 -75 33 55 -90 15 66 -92 9 1 -48 1 14 -21 22 67 -48 86 44 -101 85 110 -14 49 83 -12 50 105 -47 57 12 -62 39 89 -39 68 36 -18 15 110 -21 39 20 -32 110 16 -70 15 65 -42 11 53 -31 5 17 -65 64 54 -105 42 1 -24 70 14 -42 111 94 -83 109 12 -73 16 46 -62 40 32 -51 12 74 -49 106 50 -14 87 12 -2 22 53 -98 83 97 -79 97 4 -25 102 103 -59 74 2 -1 87 106 -85 33 6 -88 107 50 -17 15 96 -7 66 33 -51 72 108 -77 17 40 -97 111 77 -75 24 35 -68 103 46 -6 95 105 -104 57 11 -15 9 35 -100 23 70 -9 26 59 -71 62 72 -52 27 94 -80 15 20 -98 6 12 -30 42 57 -104 14 71 -5 58 44 -39 57 18 -27 16 53 -3 53 95 -72 49 4 -14 85 105 -97 81 5 -19 81 44 -67 74 98 -38 44 60 -38 36 20 -83 8 103 -45 19 23 -71 50 51 -31 109 4 -9 84 83 -62 57 17 -6 75 17 -78 38 99 -16 25 14 -48 29 24 -87 23 48 -41 43 52 -73 98 101 -34 106 57 -62 99 61 -90 1 4 -33 47 20 -28 45 49 -13 106 38 -57 108 100 -103 75 58 -86 79 102 -71 102 11 -45 90 82 -50 35 96 -46 54 78 -92 8 79 -20 52 109 -80 13 83 -100 14 51 -6 29 60 -96 61 101 -61 94 31 -50 70 54 -3 20 68 -86 62 7 -58 96 1 -55 30 14 -91 32 56 -57 44 66 -17 36 91 -98 61 21 -62 34 38 -5 51 76 -43 76 77 -105 10 79 -61 84 59 -85 66 2 -22 74 54 -68 50 92 -60 91 87 -101 66 5 -110 100 105 -95 42 70 -105 19 8 -89 43 61 -33 89 21 -75 29 106 -21 42 102 -90 49 11 -51 48 17 -51 22 73 -35 110 107 -29 34 55 -68 108 11 -14 82 67 -16 83 82 -103 100 74 -88 25 99 -91 86 69 -65 47 88 -109 96 85 -50 63 4 -19 93 14 -67 92 60 -88 40 3 -39 50 60 -77 65 46 -87 62 80 -42 7 54 -91 40 53 -47 89 54 -36 30 43 -23 30 77 -90 77 95 -64 111 31 -50 23 89 -14 4 89 -109 5 88 -104 79 41 -97 47 52 -16 51 87 -46 81 84 -91 109 2 -86 64 67 -32 13 31 -48 39 106 -5 77 57 -53 18 1 -73 105 104 -35 80 49 -47 1 69 -60 81 22 -107 82 96 -3 27 25 -86 53 61 -58 89 100 -86 76 83 -61 109 3 -3 107 60 -32 2 80 -101 29 46 -100 49 56 -71 77 110 -31 70 37 -92 78 14 -5 26 93 -86 108 109 -100 6 69 -73 1 31 -65 28 76 -60 41 64 -98 41 17 -44 37 71 -99 28 51 -111 41 9 -54 60 111 -26 48 10 -100 82 47 -41 108 3 -46 22 91 -44 41 49 -55 53 28 -54 85 18 -49 10 81 -39 103 29 -103 109 16 -22 26 69 -72 76 39 -58 97 20 -74 76 19 -52 49 9 -11 3 63 -48 97 73 -8 1 67 -44 21 88 -8 59 15 -111 53 7 -62 15 29 -13 28 93 -68 83 30 -104 52 82 -80 11 109 -111 1 88 -111 33 83 -43 90 88 -103 72 69 -50 48 75 -14 21 54 -83 78 61 -12 28 36 -48 90 64 -2 24 26 -4 59 44 -48 9 7 -106 80 33 -102 30 50 -55 102 74 -66 4 21 -35 105 89 -23 60 20 -108 8 36 -12 58 84 -22 28 38 -33 109 101 -68 72 60 -26 13 17 -37 57 67 -31 57 71 -29 47 66 -62 23 76 -90 79 96 -59 12 92 -71 99 82 -109 26 94 -12 37 21 -42 79 40 -35 108 12 -108 34 67 -56 4 36 -73 82 8 -12 45 55 -74 71 10 -102 97 78 -108 73 87 -98 13 44 -30 74 79 -39 16 8 -68 33 58 -19 109 62 -76 102 58 -40 41 109 -38 82 64 -10 78 67 -36 105 40 -7 84 93 -104 32 84 -37 42 13 -18 55 9 -42 110 87 -41 24 82 -75 51 21 -96 39 13 -59 45 79 -79 39 67 -72 99 58 -106 43 9 -4 85 88 -81 36 74 -79 68 73 -56 17 69 -93 12 68 -9 64 3 -99 30 48 -103 84 80 -85 35 55 -62 54 108 -46 39 86 -19 35 43 -25 53 67 -25 7 83 -27 87 84 -1 78 33 -88 2 9 -1 38 85 -55 89 79 -81 33 54 -27 98 91 -50 77 28 -29 28 67 -106 104 42 -81 66 48 -51 103 20 -70 80 46 -46 110 37 -24 81 50 -25 107 22 -21 45 38 -68 10 75 -20 61 46 -83 105 93 -99 24 87 -96 29 25 -11 1 97 -78 87 98 -15 95 111 -93 51 39 -98 30 90 -76 71 18 -28 14 32 -70 4 41 -66 99 83 -84 77 49 -102 29 37 -91 23 65 -55 105 27 -45 41 15 -64 109 81 -63 59 5 -12 46 102 -79 94 46 -7 108 40 -35 94 100 -16 30 29 -62 65 92 -64 96 59 -3 32 24 -2 18 19 -56 29 26 -52 56 106 -105 15 69 -82 66 77 -45 63 96 -11 92 45 -101 11 23 -23 99 5 -10 54 76 -37 7 100 -37 75 72 -60 8 7 -81 45 4 -31 49 34 -108 63 111 -30 46 25 -75 56 19 -70 73 92 -65 33 93 -78 91 79 -92 88 110 -58 101 71 -58 107 8 -111 20 104 -22 27 49 -59 102 10 -39 65 3 -107 77 78 -10 93 31 -8 72 10 -93 87 82 -92 86 43 -80 58 48 -74 111 90 -68 95 26 -98 72 110 -28 85 104 -52 7 89 -55 52 44 -1 77 13 -65 24 68 -22 56 31 -59 34 80 -73 19 67 -35 91 66 -91 34 90 -82 33 57 -21 82 59 -81 71 90 -30 87 95 -94 97 18 -38 84 110 -26 40 89 -96 55 60 -18 88 30 -74 105 11 -44 95 89 -62 63 97 -63 67 15 -6 31 72 -50 32 6 -103 49 15 -108 10 84 -5 10 53 -98 56 23 -44 102 84 -15 40 73 -40 71 9 -37 11 50 -101 84 64 -77 41 51 -65 49 108 -4 95 52 -79 27 72 -14 80 37 -13 61 55 -104 64 98 -98 25 32 -10 11 52 -81 106 70 -88 41 20 -19 34 66 -107 70 44 -108 31 66 -41 78 31 -95 35 104 -56 64 2 -78 80 36 -85 100 27 -38 17 111 -65 96 43 -18 111 107 -14 76 63 -13 100 29 -101 56 16 -10 22 86 -53 32 78 -90 24 106 -99 16 81 -40 63 64 -29 49 33 -60 110 94 -74 108 32 -43 98 34 -84 70 18 -74 13 47 -102 16 23 -97 72 23 -68 91 47 -32 69 95 -57 107 26 -64 26 32 -17 3 93 -110 30 17 -48 11 94 -43 24 63 -100 96 76 -6 2 39 -58 77 59 -45 91 44 -92 53 33 -72 18 73 -86 89 18 -108 55 17 -101 38 104 -54 100 28 -101 72 83 -16 17 22 -27 88 17 -24 17 83 -45 16 104 -60 53 52 -73 99 34 -36 85 65 -9 78 27 -65 110 5 -25 4 38 -47 53 21 -36 33 77 -7 3 76 -79 5 47 -33 28 87 -64 110 52 -51 19 86 -53 26 87 -14 73 75 -34 93 72 -54 35 84 -3 85 78 -45 54 53 -75 109 111 -1 70 5 -29 9 93 -33 32 42 -111 8 30 -80 71 25 -13 22 92 -41 81 57 -27 101 40 -10 39 1 -98 4 29 -65 84 69 -42 91 12 -71 55 24 -47 59 39 -50 86 47 -3 104 18 -72 52 100 -28 17 97 -14 29 43 -85 74 37 -97 106 84 -34 77 103 -20 18 16 -61 32 88 -63 56 21 -41 19 89 -25 35 79 -84 94 107 -23 66 63 -101 37 10 -86 59 78 -58 86 4 -85 16 67 -73 2 107 -77 91 81 -34 7 94 -65 109 48 -6 23 51 -30 1 24 -64 70 19 -82 58 49 -20 75 44 -40 110 90 -95 40 31 -47 11 73 -105 96 46 -50 16 58 -10 42 45 -51 37 53 -44 87 100 -13 90 5 -59 98 76 -15 38 39 -45 26 102 -48 110 104 -22 82 9 -93 54 11 -44 97 56 -43 3 99 -7 64 27 -108 53 4 -89 49 69 -102 31 36 -107 33 46 -62 3 14 -102 35 68 -11 75 25 -9 99 57 -74 62 41 -80 111 57 -38 33 76 -99 93 74 -79 7 31 -27 6 8 -109 60 71 -91 95 110 -22 6 78 -51 92 52 -94 43 62 -18 49 61 -66 24 60 -68 8 106 -96 30 72 -20 17 54 -87 103 90 -13 15 101 -35 38 65 -5 89 108 -36 50 76 -60 95 34 -61 85 23 -87 81 21 -36 64 79 -46 55 104 -66 26 103 -83 96 67 -106 63 12 -77 48 68 -70 105 67 -73 69 83 -21 17 80 -32 12 100 -56 105 82 -15 88 14 -88 72 28 -55 2 83 -2 108 98 -19 78 52 -28 92 26 -929 899 891 779 715 696 694 615 606 581 563 560 498 477 430 416 400 399 363 289 253 210 195 168 77 35 5 -997 996 924 857 826 739 695 624 572 555 509 429 425 395 359 352 331 292 284 268 199 164 146 67 65 60 18 -955 949 906 888 879 852 766 738 684 604 591 571 570 566 537 496 454 286 260 217 201 185 172 97 91 28 20 -951 922 900 876 812 752 722 679 651 630 625 549 534 477 465 455 427 280 274 239 211 199 179 157 127 44 4 -978 941 891 880 875 803 747 730 578 559 550 513 505 457 451 414 330 317 315 306 298 272 264 196 174 59 44 -967 964 928 857 800 799 580 492 468 448 440 431 378 351 347 342 337 309 262 258 241 192 119 116 106 75 27 -963 950 926 879 777 751 749 733 692 667 626 609 541 497 434 348 318 274 231 228 227 207 200 175 129 60 58 -972 964 894 769 762 751 659 652 633 608 606 516 488 462 393 385 354 322 292 285 259 196 183 137 78 32 3 -958 946 892 874 807 695 684 678 670 626 603 587 466 444 442 399 350 295 250 237 202 192 159 41 37 29 3 -938 920 899 835 818 803 802 769 768 765 748 710 665 654 596 589 507 395 251 206 162 138 123 87 45 33 20 -957 947 935 854 818 808 795 746 745 715 614 604 526 521 484 441 413 396 359 305 277 266 163 105 23 17 4 -992 987 902 731 683 653 649 647 644 634 622 448 424 422 419 406 405 396 393 284 252 240 153 107 76 68 8 -976 941 896 845 833 815 779 674 669 657 638 611 557 490 480 360 359 347 327 280 265 233 204 139 129 25 15 -994 955 909 885 832 814 721 620 577 549 535 527 499 491 470 456 450 424 417 404 400 220 214 101 95 74 27 -994 976 943 806 801 798 742 728 717 610 608 447 442 433 412 409 398 305 245 197 180 171 140 124 81 62 42 -937 923 913 870 867 846 838 834 735 659 598 553 528 470 453 420 411 352 308 301 283 248 198 180 139 87 4 -991 974 908 869 868 867 863 853 852 829 682 638 584 522 502 468 467 436 433 414 394 314 307 246 90 85 22 -970 913 906 862 861 844 831 794 790 739 720 670 595 560 452 409 328 326 276 251 241 166 152 118 94 78 51 -998 930 916 883 821 783 756 739 690 661 602 535 516 463 458 317 288 287 243 225 181 153 97 81 61 34 19 -974 932 913 820 763 711 704 632 601 496 489 478 461 447 410 395 367 355 261 227 173 168 111 105 101 99 40 -991 982 915 877 787 709 673 647 630 620 607 520 518 503 410 401 387 298 230 203 193 189 186 176 78 54 12 -967 946 896 867 835 781 764 708 635 599 592 564 523 510 425 401 385 361 345 329 271 229 220 197 100 38 30 -981 928 919 847 846 804 747 746 726 642 632 548 545 472 463 443 345 311 303 276 221 214 165 82 72 37 28 -971 929 903 869 855 837 780 738 713 707 672 624 471 438 417 396 361 311 301 281 182 123 96 56 41 39 13 -957 917 895 876 817 755 714 708 692 691 566 530 470 428 393 389 384 355 251 222 203 181 114 112 85 64 57 -999 985 944 884 851 850 792 774 740 646 638 624 599 589 578 444 388 312 290 266 225 189 172 77 73 47 26 -964 950 898 874 868 828 813 764 727 699 693 566 453 446 319 269 239 178 150 143 136 124 101 94 59 49 7 -999 995 908 881 865 776 721 701 700 635 622 611 594 586 582 479 362 331 248 217 212 179 137 58 54 34 23 -909 900 892 840 833 740 735 725 714 701 641 610 597 573 525 519 492 471 356 320 303 186 173 160 128 50 2 -973 929 894 853 794 789 755 735 719 685 658 628 612 545 544 499 449 340 338 332 330 275 238 207 111 92 42 -963 953 934 824 823 799 781 768 753 640 581 576 557 547 494 465 414 311 285 278 257 216 172 156 132 34 9 -992 914 893 851 849 842 836 817 800 738 721 668 572 557 500 421 411 386 356 328 259 239 206 122 80 61 12 -961 954 893 881 878 860 840 786 758 698 694 660 636 627 616 518 478 434 431 397 263 140 112 100 28 21 19 -980 926 912 886 872 843 821 785 782 753 650 525 504 475 386 376 331 325 308 282 246 204 169 127 102 43 16 -977 956 917 887 825 784 734 690 687 649 631 562 524 486 442 438 313 266 259 232 167 138 110 98 91 66 63 -983 979 953 878 873 827 680 666 651 633 622 544 502 461 408 373 368 363 254 234 224 176 149 135 119 87 36 -939 920 910 814 808 750 749 725 706 669 647 639 585 576 382 377 366 291 282 258 217 215 194 188 171 117 115 -977 961 943 876 864 829 791 709 696 664 635 504 480 469 461 460 383 358 330 241 235 208 194 183 147 122 50 -943 904 899 857 766 718 689 676 674 659 600 597 558 538 452 410 408 407 392 386 381 324 288 257 237 55 17 -934 933 898 839 807 806 792 733 666 663 648 542 537 436 421 342 326 299 293 283 281 215 170 164 142 131 44 -959 916 897 824 820 810 728 722 672 663 593 591 587 584 583 551 473 372 370 333 315 289 236 163 134 21 1 -938 902 893 702 671 669 648 541 520 515 449 418 416 413 373 310 308 270 268 160 154 96 79 75 62 49 48 -969 949 909 855 843 830 771 690 678 617 544 517 506 473 353 324 245 233 184 158 125 122 120 112 107 77 70 -948 940 932 859 822 805 796 778 657 625 607 593 585 501 460 458 451 402 368 286 249 131 126 124 110 108 27 -944 938 889 870 859 752 745 744 728 709 675 653 485 479 463 380 309 307 293 232 223 152 148 114 100 16 9 -984 954 936 755 732 731 711 706 705 689 592 573 554 539 487 439 420 368 364 278 245 204 164 162 151 130 103 -935 905 904 880 877 848 845 641 590 563 552 543 532 478 406 353 296 260 254 242 225 213 207 127 46 29 13 -988 945 927 854 772 703 685 626 623 619 605 589 558 522 472 471 402 400 389 370 347 334 294 223 185 178 32 -970 952 931 840 811 801 764 753 724 603 596 593 574 562 521 479 455 423 404 381 357 342 338 335 72 32 22 -979 937 905 808 800 707 700 628 619 548 538 534 511 495 486 464 432 423 405 367 341 290 202 183 86 38 15 -968 939 928 883 810 718 704 673 586 553 523 522 505 491 464 435 422 384 374 363 267 175 136 131 98 83 42 -998 968 907 882 871 818 812 778 777 741 613 603 552 489 473 446 394 352 300 258 238 193 174 152 135 103 95 -951 939 889 884 877 871 860 836 803 691 609 594 567 560 542 454 453 425 413 346 333 287 247 218 86 36 24 -974 947 889 887 865 748 698 688 620 595 588 543 541 510 495 487 415 354 327 253 244 208 178 156 71 57 14 -996 984 903 863 815 793 778 727 697 687 670 653 629 594 525 499 397 392 377 348 277 208 121 106 79 46 11 -993 948 915 834 826 804 781 756 741 740 682 651 574 500 376 360 343 337 322 279 232 147 121 86 14 10 1 -960 958 897 850 786 640 639 559 501 481 475 467 452 449 441 406 375 360 355 336 201 182 167 155 103 53 6 -937 931 922 858 772 762 761 677 662 660 634 601 568 498 482 451 375 374 265 256 246 238 197 149 143 82 55 -942 921 904 858 787 782 765 737 730 675 644 625 608 508 444 429 394 364 358 297 271 244 210 113 104 53 49 -980 971 965 871 841 793 751 637 632 588 583 571 564 538 536 512 492 460 230 213 184 162 146 133 104 89 63 -981 970 914 815 711 621 570 567 517 508 503 494 493 476 316 312 294 205 187 174 160 153 150 134 123 66 57 -969 959 955 797 736 688 661 642 610 540 504 497 476 467 445 421 407 382 364 335 301 290 223 209 149 64 59 -987 919 915 855 839 832 798 797 754 744 730 604 534 391 340 333 310 302 291 267 249 229 132 89 66 51 47 -983 950 930 882 851 839 826 816 809 737 729 684 664 623 583 556 547 415 387 307 280 209 205 155 128 106 40 -977 927 901 875 873 830 811 780 766 758 736 726 582 539 532 415 412 388 356 299 273 222 220 148 126 69 25 -985 971 919 823 821 784 743 723 703 641 630 513 509 501 434 398 369 365 358 270 265 195 177 76 52 20 17 -989 986 923 798 783 701 691 676 665 650 639 606 556 536 527 459 401 343 314 293 284 272 235 219 135 83 71 -988 972 956 848 780 774 710 683 681 660 637 612 526 511 496 439 408 326 211 190 150 139 114 113 80 37 35 -990 952 901 849 742 682 618 599 580 563 531 374 371 370 327 319 285 274 270 226 159 130 125 63 54 16 8 -989 930 891 844 822 819 757 722 705 576 515 495 443 417 412 383 335 321 313 309 261 260 200 159 84 55 23 -965 903 895 807 788 761 720 654 645 640 585 575 484 464 450 445 349 321 306 236 195 147 140 102 80 68 67 -995 973 907 886 866 861 847 813 799 775 769 750 677 637 618 600 455 445 435 316 310 304 272 254 200 65 30 -990 935 924 885 872 861 806 783 757 681 656 652 605 581 561 523 474 420 357 339 302 221 173 117 107 85 45 -962 959 910 845 842 795 773 680 658 654 629 602 529 510 459 429 422 318 278 269 262 212 196 167 154 128 35 -957 932 890 885 756 750 710 673 619 519 482 468 438 397 391 383 371 275 252 233 191 161 141 109 102 60 48 -979 961 942 879 856 832 748 720 662 642 602 600 582 569 506 505 389 357 296 215 186 163 151 110 90 84 26 -988 925 912 878 858 810 779 767 743 724 700 575 559 546 545 539 506 437 436 361 295 286 269 231 230 81 8 -998 967 921 888 874 836 827 824 767 759 716 694 665 655 621 577 487 469 387 384 332 264 256 184 180 39 22 -983 963 917 880 813 759 732 697 681 676 675 658 648 643 551 507 488 483 427 350 294 255 240 193 116 69 43 -991 960 895 827 814 782 772 705 686 627 614 572 562 540 490 447 339 323 275 273 255 187 175 166 157 133 76 -982 925 897 838 819 788 752 729 707 703 698 680 596 564 554 458 457 391 379 314 297 282 268 121 111 70 5 -993 946 931 787 786 770 743 672 664 652 645 613 590 565 528 527 485 323 179 161 156 142 98 73 65 62 33 -996 990 986 869 866 723 712 692 621 616 612 569 528 490 466 462 426 419 404 373 212 209 206 170 91 89 14 -918 911 901 887 844 809 805 802 791 724 693 686 668 667 634 554 508 466 367 365 325 306 300 199 116 92 31 -981 923 910 888 873 828 776 696 687 679 595 533 509 456 431 403 375 350 334 322 304 252 243 158 132 56 38 -922 921 905 883 862 835 771 689 579 569 567 556 531 497 483 402 362 302 300 283 277 234 222 214 109 93 10 -982 975 940 884 881 789 770 716 713 693 671 656 553 540 512 472 430 424 366 354 349 324 271 170 138 129 46 -995 994 914 868 820 794 760 695 679 617 615 607 550 537 532 530 432 392 337 318 224 188 155 68 47 43 24 -978 952 916 862 796 792 777 697 631 568 549 548 543 518 517 407 366 344 321 305 297 235 224 151 133 92 52 -975 941 933 837 788 785 773 719 643 623 617 546 521 485 477 398 372 296 244 221 218 99 97 94 50 48 6 -966 925 902 859 848 785 784 759 726 699 592 555 542 531 512 502 500 317 198 187 182 168 158 141 118 11 2 -999 968 896 860 771 760 757 745 736 644 577 536 511 488 399 369 320 319 298 276 257 227 194 134 119 18 6 -962 947 892 886 852 770 768 758 718 712 683 667 611 578 535 351 343 340 313 281 145 144 115 82 79 52 24 -969 926 918 854 841 790 734 732 646 494 446 418 369 349 346 339 289 267 264 263 226 211 171 141 90 33 3 -980 966 934 849 825 812 796 789 774 717 546 515 454 440 380 345 316 263 248 237 228 145 143 117 71 39 10 -986 973 936 856 830 793 744 737 714 674 643 565 533 498 493 486 433 382 351 236 201 169 136 109 105 88 31 -948 911 908 847 797 790 715 655 605 601 552 457 437 427 426 377 344 341 323 312 234 216 125 104 96 83 18 -997 942 900 843 817 816 804 775 719 716 699 657 584 503 474 459 448 426 381 379 291 191 166 148 137 31 29 -962 958 949 872 838 747 723 713 685 677 645 586 530 476 469 390 329 320 288 279 247 219 213 189 99 95 88 -992 940 907 865 856 833 828 749 734 590 580 574 568 529 514 491 481 443 329 292 191 190 176 51 45 19 9 -976 920 898 866 864 834 809 761 746 636 573 513 493 474 403 388 371 250 231 181 146 144 120 84 75 74 13 -956 953 944 846 805 765 731 725 662 655 629 628 520 484 483 428 385 336 315 304 253 185 169 161 157 58 40 -985 975 912 801 704 686 618 598 597 529 482 462 439 428 390 362 344 334 242 142 126 74 53 41 21 15 11 -984 945 906 870 864 825 816 776 763 702 668 613 561 551 450 441 376 332 295 287 229 226 188 88 72 26 5 -993 989 936 795 742 727 712 666 631 561 516 514 507 456 440 416 405 379 372 365 346 328 273 250 113 64 2 -987 972 911 837 819 741 702 678 627 558 519 480 475 430 423 348 299 262 256 219 177 165 145 108 67 61 7 -954 924 918 850 831 822 767 762 708 571 565 524 432 380 353 338 279 240 218 216 205 198 165 144 56 25 12 -997 978 951 863 842 823 811 802 754 733 688 656 650 649 633 591 579 526 481 435 378 255 242 210 130 118 70 -965 927 890 729 663 661 646 636 614 598 579 570 555 550 533 489 465 419 341 336 228 192 190 154 115 36 7 -966 945 933 882 875 853 841 791 775 760 706 671 575 524 514 411 409 403 378 303 261 249 247 202 177 93 1 -960 894 890 831 829 773 763 754 717 616 615 609 588 587 547 437 418 390 325 243 203 120 108 93 73 69 30 diff --git a/sw/python/res/999.111.3.5565.alist b/sw/python/res/999.111.3.5565.alist deleted file mode 100644 index 7130dd6..0000000 --- a/sw/python/res/999.111.3.5565.alist +++ /dev/null @@ -1,1114 +0,0 @@ -999 111 -3 27 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 -101 65 10 -85 33 107 -70 109 1 -58 36 78 -40 24 21 -86 92 72 -85 59 81 -54 110 24 -39 48 85 -96 28 36 -75 101 9 -82 62 34 -56 97 2 -94 47 44 -106 74 1 -26 8 29 -18 77 7 -96 95 32 -30 10 43 -14 60 16 -61 84 42 -19 66 73 -25 68 110 -63 64 90 -38 47 101 -71 13 24 -52 37 75 -5 74 109 -89 77 104 -4 64 5 -13 97 34 -6 39 16 -9 89 20 -42 53 110 -61 8 62 -18 79 108 -97 71 107 -16 35 101 -77 69 102 -61 75 54 -110 76 92 -7 37 57 -105 61 55 -99 74 94 -108 43 32 -99 73 101 -88 90 70 -85 109 46 -80 27 59 -16 34 15 -54 32 106 -31 39 24 -78 84 69 -9 97 52 -66 75 30 -45 91 80 -106 110 28 -76 51 4 -76 16 88 -18 40 27 -75 105 53 -78 44 12 -74 90 22 -77 103 38 -35 17 58 -29 31 44 -95 27 24 -27 38 55 -90 67 36 -69 66 25 -82 61 83 -8 73 81 -111 89 95 -2 57 94 -111 76 7 -22 6 65 -103 105 64 -59 38 40 -65 79 31 -29 95 68 -33 47 5 -31 18 16 -77 111 41 -6 14 41 -43 79 67 -87 70 9 -83 27 81 -28 90 92 -107 58 37 -106 12 91 -96 92 102 -19 42 92 -69 12 55 -105 51 67 -39 1 13 -83 85 65 -104 86 25 -50 12 107 -7 29 19 -99 40 106 -20 84 85 -12 105 4 -50 91 15 -23 99 82 -7 12 8 -30 92 79 -100 20 64 -102 83 23 -11 46 59 -21 10 95 -6 98 91 -62 43 46 -3 71 22 -76 10 1 -104 5 101 -30 22 87 -29 25 107 -98 21 20 -81 67 92 -75 10 33 -107 42 105 -94 62 53 -43 106 24 -39 73 47 -19 77 16 -59 13 2 -35 34 4 -57 77 93 -57 33 45 -89 18 48 -48 7 110 -86 29 78 -75 17 24 -4 79 11 -25 72 102 -50 14 13 -55 99 56 -2 63 65 -76 31 74 -96 104 108 -52 100 73 -46 61 76 -51 45 56 -37 110 3 -59 61 73 -75 26 35 -54 15 78 -31 43 38 -25 59 71 -25 79 45 -31 63 40 -31 57 102 -24 67 111 -42 17 34 -51 50 85 -60 53 91 -80 18 87 -69 41 5 -40 54 104 -8 44 42 -39 109 51 -70 40 30 -64 54 53 -83 74 7 -30 42 2 -67 48 93 -66 15 70 -54 77 88 -90 5 78 -95 103 94 -41 10 98 -86 36 4 -59 45 106 -20 90 81 -51 111 55 -63 48 26 -74 57 54 -32 10 83 -74 6 49 -33 35 54 -96 88 63 -65 108 92 -21 79 23 -88 23 84 -42 89 37 -81 1 37 -100 90 2 -97 53 76 -33 60 94 -12 47 96 -18 81 94 -97 66 28 -109 3 14 -13 45 53 -6 97 93 -79 83 55 -73 69 72 -101 80 62 -25 87 55 -84 58 71 -17 25 103 -93 38 61 -84 68 33 -15 58 109 -52 94 84 -73 62 51 -57 95 14 -57 96 61 -104 73 14 -71 81 33 -64 13 61 -91 57 88 -30 24 32 -93 9 22 -10 85 28 -93 47 43 -47 105 35 -20 65 111 -3 56 92 -106 69 21 -17 63 7 -3 5 88 -42 102 80 -13 16 10 -62 32 100 -108 41 70 -1 98 95 -76 33 27 -46 53 78 -46 102 73 -26 104 53 -108 30 100 -6 48 36 -111 9 34 -42 93 5 -36 18 93 -19 60 15 -47 41 61 -23 62 66 -106 81 13 -12 23 45 -92 8 51 -27 39 23 -82 10 109 -38 12 70 -4 30 38 -72 79 16 -96 10 79 -100 83 77 -99 52 44 -46 2 68 -23 81 65 -111 19 83 -4 26 85 -23 36 49 -77 51 71 -29 38 23 -10 58 63 -62 21 68 -14 46 7 -99 25 10 -107 86 31 -102 44 32 -95 47 56 -57 52 67 -7 103 31 -60 89 79 -60 46 20 -70 39 89 -84 10 51 -22 110 109 -80 93 52 -82 19 46 -4 49 100 -28 41 88 -87 64 37 -103 12 67 -10 108 37 -79 5 1 -43 25 105 -49 45 84 -62 54 87 -45 68 18 -101 59 77 -96 53 34 -11 89 91 -100 63 6 -98 52 29 -34 56 85 -105 15 95 -91 29 2 -58 80 95 -30 67 21 -17 39 50 -111 101 100 -84 109 35 -99 66 11 -64 65 82 -46 56 32 -68 106 111 -47 65 91 -22 7 72 -27 91 104 -100 38 37 -10 66 91 -58 38 97 -72 61 9 -36 19 65 -31 37 70 -101 61 107 -22 78 61 -64 78 43 -46 111 4 -13 28 12 -84 76 56 -16 73 63 -9 4 21 -3 73 98 -88 55 18 -3 81 64 -20 108 42 -20 35 80 -90 89 31 -48 78 104 -24 1 48 -110 34 11 -16 74 53 -85 73 7 -45 89 63 -94 89 107 -25 15 100 -35 86 41 -91 108 82 -49 41 105 -59 37 74 -54 8 52 -12 36 89 -43 19 75 -10 39 111 -7 45 42 -34 101 2 -66 83 56 -32 50 78 -49 90 34 -24 4 92 -85 94 14 -66 37 39 -2 93 58 -94 98 58 -43 91 103 -48 102 70 -17 15 82 -6 43 52 -103 19 72 -38 54 26 -95 49 101 -7 102 107 -51 22 104 -80 53 6 -70 105 11 -5 45 99 -41 76 43 -32 27 16 -69 2 52 -51 19 101 -83 44 40 -79 90 44 -46 5 71 -86 3 26 -31 69 108 -103 99 32 -47 81 9 -97 55 26 -51 5 49 -39 103 2 -19 47 26 -45 74 41 -40 55 16 -72 85 36 -71 104 17 -29 48 97 -37 72 27 -11 77 96 -88 61 31 -59 99 100 -22 105 23 -67 8 77 -40 65 100 -82 40 84 -71 27 98 -12 51 37 -32 82 77 -74 108 3 -49 22 55 -67 4 75 -11 53 102 -77 17 26 -84 72 2 -83 80 41 -54 39 34 -30 63 74 -39 105 86 -19 14 20 -88 8 34 -12 40 35 -22 16 44 -79 94 64 -56 25 1 -48 105 80 -3 45 38 -20 69 86 -52 63 41 -12 41 34 -24 5 29 -107 21 51 -77 35 65 -69 30 80 -3 7 39 -106 23 26 -11 39 67 -108 90 38 -57 8 53 -6 66 85 -82 28 55 -3 20 16 -105 104 2 -87 52 59 -92 52 26 -41 93 84 -13 87 57 -101 110 13 -40 64 86 -110 35 9 -17 27 13 -13 62 22 -97 54 92 -19 88 1 -111 22 80 -27 22 88 -4 91 63 -92 74 44 -96 87 65 -48 75 84 -103 46 40 -92 105 16 -21 54 100 -40 29 9 -61 70 17 -7 79 27 -72 6 60 -29 60 28 -51 46 74 -104 102 19 -101 29 69 -111 94 48 -54 41 36 -105 79 88 -100 68 86 -57 98 51 -22 67 56 -91 110 17 -72 89 62 -76 104 21 -63 11 111 -49 11 31 -19 57 90 -46 107 100 -57 80 21 -72 38 109 -8 110 32 -66 77 33 -2 40 110 -26 31 67 -21 1 75 -5 65 28 -24 58 73 -44 101 50 -47 48 57 -59 86 98 -96 46 27 -102 75 28 -17 107 87 -71 53 12 -35 62 48 -32 60 38 -87 68 102 -55 11 32 -30 107 27 -82 51 58 -109 9 50 -39 76 60 -104 34 31 -97 77 74 -13 66 76 -76 58 86 -17 62 4 -1 94 59 -85 63 108 -82 3 33 -42 68 85 -96 55 33 -108 88 15 -57 38 50 -91 78 99 -107 5 14 -35 44 70 -20 75 62 -33 86 63 -109 95 45 -84 28 1 -36 99 3 -40 19 98 -19 55 59 -13 3 68 -49 63 102 -86 32 57 -108 21 72 -92 21 58 -108 23 97 -87 104 39 -14 32 2 -82 89 4 -85 18 2 -60 36 27 -30 111 59 -81 44 61 -83 103 11 -18 1 104 -87 32 23 -28 26 68 -60 88 98 -95 48 41 -53 41 15 -93 94 50 -102 99 15 -72 81 17 -97 20 83 -55 48 42 -96 60 24 -14 106 70 -71 93 88 -69 60 17 -63 38 76 -106 78 72 -33 18 6 -38 15 75 -29 56 70 -102 47 108 -100 35 106 -44 66 68 -26 2 74 -107 45 62 -41 56 50 -29 87 75 -20 103 56 -72 34 48 -7 51 59 -30 37 18 -17 59 89 -34 105 60 -84 91 59 -24 45 50 -36 71 101 -48 99 20 -26 81 56 -20 5 43 -99 93 85 -68 90 11 -110 77 47 -108 44 4 -87 73 76 -31 54 14 -80 50 89 -97 68 14 -70 67 47 -12 111 16 -97 43 33 -61 65 106 -82 16 69 -56 73 74 -90 72 58 -52 106 82 -14 92 22 -78 24 56 -57 25 12 -4 58 8 -65 26 34 -29 45 20 -49 40 43 -88 42 78 -44 76 36 -34 3 25 -89 64 93 -68 82 104 -111 69 58 -92 37 69 -108 103 28 -43 86 50 -97 101 98 -78 6 87 -57 18 11 -21 83 3 -16 47 71 -54 28 93 -96 101 56 -58 25 19 -15 80 31 -94 105 28 -110 15 96 -90 30 13 -31 4 41 -101 24 85 -28 99 46 -53 103 89 -8 87 11 -11 12 104 -53 14 27 -6 8 20 -27 105 5 -33 44 21 -74 9 60 -67 42 98 -47 31 32 -111 60 64 -38 8 13 -97 95 85 -5 50 37 -108 110 95 -18 103 13 -66 8 98 -25 37 49 -67 15 73 -88 73 10 -43 9 55 -84 18 66 -68 67 109 -99 2 19 -71 95 63 -20 37 54 -79 29 35 -82 8 74 -107 98 99 -108 75 55 -84 97 21 -97 103 41 -27 86 70 -45 22 69 -37 46 90 -50 35 49 -64 91 85 -40 85 75 -8 101 18 -34 38 7 -58 16 85 -81 42 75 -18 50 111 -8 93 90 -45 17 11 -11 106 5 -68 37 36 -36 109 16 -21 77 49 -38 5 9 -32 71 28 -15 46 8 -52 17 47 -79 39 71 -39 18 35 -42 86 49 -109 96 26 -37 41 102 -23 74 80 -45 97 67 -23 31 52 -60 90 4 -9 94 71 -36 66 82 -78 14 1 -9 66 64 -29 94 4 -79 47 68 -38 98 82 -67 50 33 -96 3 78 -103 27 45 -23 20 93 -55 6 71 -26 83 87 -49 28 14 -76 102 30 -87 110 99 -10 62 71 -71 68 92 -36 26 32 -34 69 95 -22 75 94 -49 7 104 -64 47 28 -35 69 15 -12 9 77 -70 98 103 -6 79 2 -84 54 98 -96 37 73 -94 38 88 -107 92 53 -96 93 103 -105 96 100 -52 91 76 -9 83 92 -23 107 95 -82 26 76 -1 90 47 -93 86 82 -94 83 67 -76 70 25 -100 33 28 -23 111 35 -35 64 59 -66 111 109 -18 5 67 -40 1 53 -14 81 12 -99 58 29 -62 6 9 -65 105 29 -42 90 14 -36 30 73 -10 110 61 -106 15 92 -77 10 23 -28 17 9 -81 96 7 -94 72 39 -107 6 15 -76 78 11 -79 100 97 -100 3 44 -39 81 32 -101 33 30 -49 69 27 -100 50 88 -103 104 47 -96 48 86 -81 95 86 -11 97 65 -106 101 25 -34 24 99 -42 106 4 -17 51 80 -83 22 84 -107 2 75 -86 24 87 -98 56 35 -48 45 14 -81 110 19 -6 58 42 -53 83 70 -28 80 37 -90 61 66 -75 32 74 -81 78 52 -10 5 60 -91 21 16 -80 3 12 -63 13 104 -7 87 44 -21 55 73 -102 59 95 -27 6 50 -88 65 109 -15 51 79 -21 64 52 -107 70 8 -58 1 60 -72 63 3 -68 1 8 -9 1 36 -95 60 26 -65 110 70 -72 23 13 -83 93 49 -56 7 60 -98 45 110 -15 65 33 -36 103 24 -9 76 18 -40 61 69 -46 3 50 -9 44 80 -72 11 71 -80 84 99 -84 65 107 -24 25 64 -89 87 33 -62 65 57 -73 44 111 -26 43 61 -33 13 46 -29 32 80 -41 87 100 -95 62 106 -57 82 92 -12 2 10 -22 34 86 -108 12 93 -1 57 42 -102 22 58 -30 29 3 -93 104 62 -1 30 46 -81 4 98 -43 88 35 -13 80 54 -31 30 6 -48 52 19 -107 67 49 -3 111 105 -14 89 108 -109 60 78 -89 71 69 -42 63 97 -2 67 89 -110 72 74 -43 69 14 -58 53 66 -51 83 18 -5 17 55 -30 91 94 -85 78 21 -106 77 60 -21 7 89 -91 19 22 -13 69 91 -72 24 49 -59 16 90 -43 2 1 -61 20 39 -52 25 53 -64 75 49 -68 88 4 -48 66 106 -77 52 79 -89 83 86 -43 15 63 -44 109 23 -73 68 78 -46 81 10 -83 109 98 -90 33 40 -50 55 70 -49 109 91 -95 54 99 -56 71 31 -17 43 84 -64 102 51 -20 36 34 -23 55 54 -11 35 7 -66 16 24 -53 82 18 -59 5 63 -23 30 25 -54 22 66 -108 109 48 -6 40 17 -109 6 24 -73 1 103 -110 64 27 -105 52 62 -101 55 64 -36 8 56 -44 96 25 -44 56 19 -57 68 75 -25 62 39 -87 93 92 -104 79 50 -100 98 61 -28 56 109 -103 78 62 -102 29 106 -40 11 15 -20 102 94 -14 8 33 -50 74 47 -41 51 26 -42 70 59 -84 11 24 -47 86 21 -35 66 108 -56 14 64 -59 82 39 -105 87 10 -62 85 31 -49 39 12 -61 19 94 -1 63 110 -43 96 66 -36 104 111 -95 79 17 -6 11 28 -77 99 50 -16 2 8 -106 85 17 -35 73 6 -25 61 5 -77 84 4 -29 84 34 -108 45 105 -15 76 71 -55 67 63 -81 22 24 -13 41 60 -4 3 107 -19 12 63 -96 35 71 -30 20 78 -59 18 41 -18 58 106 -70 74 13 -107 1 22 -50 68 54 -74 111 17 -59 15 24 -8 85 55 -51 34 70 -69 23 18 -52 83 34 -90 25 75 -89 51 99 -109 92 12 -23 57 46 -3 95 65 -97 16 75 -104 42 83 -104 16 29 -103 69 57 -75 109 100 -103 21 61 -7 25 36 -37 13 26 -107 26 79 -58 89 49 -55 20 1 -46 80 108 -101 45 72 -32 33 91 -78 33 92 -83 5 76 -95 37 44 -28 30 57 -51 72 53 -105 56 91 -98 43 48 -2 44 88 -88 87 36 -60 101 54 -58 27 87 -5 100 39 -26 103 102 -60 31 99 -23 48 90 -68 20 15 -46 97 86 -32 67 37 -90 41 110 -9 86 65 -73 109 2 -40 3 91 -52 49 33 -9 48 53 -66 88 81 -98 76 106 -81 79 82 -42 22 73 -30 77 62 -45 40 93 -7 43 94 -19 64 32 -100 7 70 -69 68 93 -40 102 67 -96 62 74 -53 38 65 -80 82 71 -50 11 92 -27 4 93 -110 80 38 -27 89 52 -10 14 44 -47 8 97 -38 64 42 -9 98 102 -6 94 101 -14 29 72 -47 10 78 -111 56 54 -28 31 21 -945 922 898 868 837 811 807 778 777 775 722 713 678 528 510 497 474 437 408 325 279 227 186 114 95 15 3 -969 956 904 837 823 804 752 702 637 551 523 521 472 426 398 375 364 348 341 291 251 187 165 138 126 74 13 -970 934 915 818 809 789 776 765 738 684 602 592 514 511 499 425 418 410 393 369 320 318 222 219 193 144 113 -988 915 908 841 812 749 680 675 611 586 570 522 496 440 395 345 317 313 274 254 246 172 134 127 102 58 30 -960 950 907 862 828 763 721 663 659 627 619 566 505 475 414 374 368 361 279 235 222 169 158 115 81 30 28 -995 906 902 867 866 815 770 757 735 725 702 687 618 600 545 450 423 359 353 287 233 195 179 111 84 76 32 -981 979 941 859 832 783 767 733 697 653 557 449 418 357 340 328 302 266 260 221 164 131 105 99 75 42 17 -992 926 904 885 872 777 774 665 657 652 641 630 625 618 615 586 470 422 404 387 336 242 160 105 72 35 16 -994 972 968 790 787 778 732 725 710 700 679 676 663 634 621 490 447 433 372 317 307 234 214 86 54 33 11 -997 991 894 848 804 763 731 729 692 633 339 305 278 270 261 258 248 244 224 215 178 171 120 114 110 19 1 -987 902 889 883 859 791 746 736 659 658 616 615 601 568 527 487 465 464 420 396 383 360 326 297 286 134 109 -932 916 896 806 804 765 723 700 616 585 576 483 413 405 391 337 314 277 245 241 190 105 102 98 93 90 62 -942 921 914 834 814 799 781 766 629 625 610 514 494 435 434 431 430 314 240 224 211 194 136 126 95 31 26 -996 991 892 885 825 819 755 727 723 689 678 617 583 574 572 540 521 505 403 346 260 209 207 193 136 84 20 -964 925 911 883 845 785 772 735 730 699 665 632 609 607 546 535 533 502 352 331 290 237 204 167 147 103 50 -937 935 904 860 836 764 661 654 603 579 576 445 425 406 378 363 327 316 247 224 125 82 59 50 38 32 20 -924 905 901 866 855 828 750 732 666 658 559 542 536 496 482 461 448 434 397 380 352 294 221 201 154 133 65 -928 920 919 861 827 787 721 668 656 652 635 629 601 558 545 528 523 319 283 236 191 157 130 82 60 36 17 -980 916 897 874 833 816 756 637 606 513 512 466 453 437 403 376 365 354 338 308 273 253 237 125 99 92 22 -964 945 918 884 857 838 686 639 618 588 566 564 555 537 507 425 411 403 322 321 268 218 174 118 107 101 33 -999 940 890 832 830 773 768 764 662 644 620 602 518 517 474 468 463 446 415 317 293 259 220 183 118 110 5 -976 922 913 864 833 808 805 751 696 647 583 460 439 438 435 406 394 386 358 311 302 271 214 116 113 76 63 -963 933 928 863 858 846 781 731 718 711 686 674 672 529 519 419 386 257 255 252 243 241 239 184 183 108 104 -925 913 889 867 860 835 794 786 753 748 612 584 562 539 476 414 345 325 213 153 133 123 67 52 26 8 5 -941 930 907 876 873 863 839 794 747 716 631 606 592 585 408 331 280 261 201 199 150 149 135 117 97 70 23 -961 943 942 887 798 779 712 694 688 670 587 565 551 530 473 428 419 397 376 373 369 355 254 231 176 146 16 -990 988 959 869 770 741 685 646 619 617 524 488 480 449 439 434 390 382 363 303 243 228 87 68 67 60 49 -999 952 902 880 759 732 717 698 689 664 613 608 604 597 530 510 481 475 451 424 314 275 215 192 88 57 10 -996 937 909 882 809 800 726 724 680 640 588 554 547 454 451 447 414 381 291 288 257 132 117 99 80 66 16 -977 952 918 863 829 815 811 809 740 728 690 610 558 525 488 417 401 293 246 232 213 165 162 116 106 55 19 -999 962 895 854 815 674 623 611 607 572 492 473 465 384 370 323 309 266 262 152 151 148 139 82 79 66 52 -980 966 948 800 761 739 694 664 623 529 521 516 487 485 470 392 371 363 343 299 263 225 213 178 51 45 18 -971 949 948 885 850 799 795 785 740 717 683 620 577 545 508 501 499 471 228 210 203 189 180 129 120 81 2 -929 927 909 857 805 748 695 653 592 587 560 556 492 413 404 400 344 341 326 289 285 234 154 127 50 31 12 -917 906 891 859 813 754 719 718 699 668 649 640 549 506 484 433 416 405 332 322 296 217 180 146 127 65 38 -957 941 900 872 857 786 778 728 694 677 661 660 591 563 524 511 456 379 337 308 255 236 233 172 69 10 4 -966 951 942 759 704 671 660 648 639 631 627 596 558 391 382 347 335 309 304 278 276 186 185 144 89 42 27 -993 989 985 705 682 663 653 625 546 543 503 485 469 421 410 355 306 304 257 246 245 202 148 78 68 64 25 -960 896 893 876 838 739 734 668 667 520 491 420 418 402 400 375 347 339 294 269 243 161 124 95 52 32 9 -983 978 970 883 866 850 788 722 651 589 512 472 447 444 432 405 389 388 378 366 162 159 151 100 78 60 5 -967 919 914 887 801 671 645 611 553 533 532 456 429 413 412 399 377 362 334 332 275 238 226 171 158 84 83 -993 976 936 888 822 807 757 749 727 669 655 622 590 538 500 340 321 235 223 185 165 160 154 121 92 34 21 -979 955 899 855 845 837 825 813 798 634 598 589 577 566 362 353 350 338 312 280 216 148 123 112 85 45 19 -991 956 951 874 873 846 797 790 767 738 620 591 570 550 526 506 477 441 406 367 366 263 250 160 66 62 14 -978 947 910 784 755 685 673 658 647 588 562 552 509 410 377 361 340 329 283 281 241 194 173 150 143 129 56 -965 946 933 848 811 799 789 665 648 613 480 467 452 444 368 313 299 273 268 260 251 230 229 142 112 109 48 -997 992 890 886 743 713 698 681 666 623 603 575 569 548 478 376 372 301 264 238 217 216 190 124 81 25 14 -972 963 955 865 842 816 755 744 564 556 538 532 484 478 455 443 409 381 351 325 324 233 176 166 131 130 9 -971 944 896 852 840 835 817 782 741 697 689 669 662 649 631 589 515 465 394 374 356 344 334 281 274 255 179 -987 923 903 886 878 851 789 770 742 683 656 649 627 598 573 562 553 534 503 490 477 343 294 155 136 103 98 -953 931 927 887 856 827 772 750 557 489 459 452 415 391 374 365 358 270 256 242 206 175 161 155 143 94 58 -990 971 929 870 843 839 816 773 762 709 674 666 582 428 427 412 364 353 336 288 272 265 250 205 141 54 27 -985 972 953 861 839 826 758 722 706 617 614 533 483 422 396 359 327 285 231 229 194 188 163 156 122 61 34 -998 958 923 864 858 853 814 703 639 604 572 456 446 436 400 355 336 282 180 177 168 163 159 147 51 40 8 -945 926 912 871 858 851 828 768 687 643 634 538 513 501 487 424 394 378 373 319 199 196 175 137 93 68 43 -998 954 892 880 874 872 854 783 754 605 584 580 565 555 553 547 460 408 342 315 299 289 264 219 143 137 13 -952 938 933 875 807 803 796 601 585 516 503 478 468 466 459 430 422 265 212 208 207 177 152 129 128 74 42 -959 944 920 826 808 775 757 724 654 606 595 586 581 518 495 489 476 349 348 306 292 258 204 200 89 65 4 -925 919 893 888 862 836 769 719 561 559 557 525 513 497 479 427 385 335 284 173 149 145 126 109 78 49 7 -962 958 914 831 820 783 779 775 763 675 624 621 560 542 539 531 524 491 485 451 450 268 267 237 189 156 20 -940 907 897 879 838 798 788 760 729 578 526 448 384 311 310 307 238 211 208 202 145 142 71 43 40 35 21 -984 977 895 881 876 870 810 802 796 725 692 552 507 496 484 462 435 282 259 239 225 206 198 122 112 35 12 -916 912 898 862 845 822 776 766 638 543 515 508 498 464 440 412 401 329 316 287 258 221 181 176 151 138 24 -993 980 892 871 869 856 840 794 773 719 698 679 650 624 593 432 407 320 312 298 276 211 163 107 77 30 24 -985 968 934 796 793 785 780 771 746 726 587 578 475 442 416 388 308 301 298 252 218 182 138 96 79 76 1 -973 899 891 864 860 842 826 760 720 679 677 635 630 550 494 471 423 347 342 305 297 239 192 167 70 55 22 -983 966 912 823 817 721 715 683 673 636 632 622 575 473 460 420 395 387 293 277 265 166 153 119 94 85 69 -982 964 923 875 847 841 777 693 681 660 636 594 574 568 550 530 514 500 486 458 300 283 259 251 203 80 23 -982 938 928 834 825 821 788 741 699 695 647 596 595 579 542 454 417 411 370 364 220 197 158 93 70 53 39 -981 927 921 888 851 780 774 758 716 701 646 575 547 540 506 448 360 351 309 269 245 226 167 162 86 47 3 -986 917 911 854 821 791 693 692 687 676 667 664 638 603 563 541 483 390 380 368 256 210 200 149 113 37 26 -996 953 947 835 824 791 781 776 734 581 556 544 536 517 469 462 450 398 382 379 354 307 302 247 197 135 6 -976 969 906 868 847 797 768 728 704 633 632 580 571 476 328 318 316 230 209 206 197 145 141 124 72 46 22 -984 924 921 886 824 761 672 641 621 580 551 493 452 441 401 393 377 335 327 179 177 164 139 63 44 28 15 -939 935 930 875 840 761 752 696 655 651 643 554 546 507 481 474 443 395 338 146 133 120 61 55 40 27 11 -974 950 911 787 736 716 712 709 690 591 571 543 495 494 491 463 362 315 228 188 142 139 114 75 59 58 41 -977 908 903 843 831 731 700 662 569 493 471 416 397 392 387 383 284 256 249 168 128 125 83 64 39 29 17 -997 949 918 881 847 830 820 762 736 684 678 600 590 584 544 504 343 324 312 311 229 169 147 132 62 53 4 -975 943 901 878 843 772 737 702 681 667 640 457 449 407 367 279 267 248 247 196 183 150 134 106 85 79 36 -989 986 946 814 800 792 790 765 759 750 672 607 573 468 438 417 409 399 359 322 292 272 223 198 157 56 49 -975 973 913 848 812 762 756 745 739 733 723 655 565 536 526 372 320 252 240 210 191 186 174 119 87 72 7 -986 975 893 861 803 714 712 682 677 641 594 582 579 522 499 489 424 392 389 352 333 298 273 244 104 71 12 -950 936 929 849 844 827 782 758 751 715 710 688 602 537 527 399 366 342 253 249 196 178 164 108 96 87 71 -909 908 889 855 793 792 751 703 644 635 561 510 443 429 398 389 315 296 281 270 205 203 200 184 101 53 21 -926 905 895 830 654 651 650 626 612 567 523 500 498 423 379 346 328 289 254 215 155 101 96 48 9 7 2 -968 965 890 844 805 753 745 744 714 669 646 598 516 508 495 479 458 432 411 402 369 332 262 172 132 97 6 -959 957 894 877 801 795 767 753 691 688 615 600 571 554 529 520 486 482 442 430 427 282 276 199 157 116 86 -973 957 956 841 813 771 742 705 633 590 541 531 502 457 439 437 404 384 319 275 222 212 184 181 168 59 47 -990 944 931 844 832 823 821 819 795 614 593 573 559 522 462 337 330 329 323 286 269 267 185 130 73 33 29 -967 963 930 850 836 760 727 713 675 657 648 610 581 568 466 421 367 344 323 187 174 169 88 69 63 47 24 -970 954 948 852 834 833 829 764 709 650 561 504 461 440 350 333 305 303 301 291 286 212 156 111 103 90 56 -987 949 932 877 803 730 710 706 693 596 583 518 445 441 436 428 345 242 219 182 119 106 92 91 88 41 6 -988 982 978 877 810 806 782 714 707 686 657 604 593 567 541 534 429 348 272 236 235 216 214 202 195 166 128 -995 979 897 884 829 734 715 705 696 680 676 608 534 497 455 407 349 346 330 205 191 189 170 122 74 44 14 -951 934 901 853 802 779 769 745 711 695 638 628 626 532 509 356 292 290 264 227 207 170 110 80 73 67 18 -984 917 899 873 744 733 708 707 704 684 670 609 605 539 501 480 442 383 285 248 208 190 181 140 91 18 10 -992 965 935 822 746 737 673 645 644 626 599 577 574 537 519 493 436 381 373 306 195 192 188 54 37 31 13 -994 974 955 879 849 812 784 754 703 701 682 642 630 622 599 531 512 479 459 390 349 318 288 227 171 118 111 -962 931 903 853 792 748 724 691 642 637 613 567 564 535 511 504 385 371 361 297 261 250 137 104 100 46 44 -981 960 939 879 801 742 738 737 717 708 549 467 458 446 388 385 331 304 295 287 274 249 232 225 187 141 107 -995 958 947 871 747 740 652 612 605 599 563 477 454 431 365 356 341 310 295 284 198 115 46 38 25 11 1 -994 983 961 884 882 856 808 769 690 671 548 535 515 486 481 453 396 357 351 263 230 223 152 135 108 91 39 -961 940 938 881 868 786 743 707 701 685 645 629 614 597 555 527 444 375 371 354 350 277 266 201 170 77 64 -937 936 900 878 810 766 743 697 616 594 528 520 492 463 453 426 380 358 324 303 231 209 159 140 115 97 29 -954 910 894 870 818 726 708 619 608 560 457 445 426 409 402 386 360 334 290 280 217 121 102 94 77 61 43 -974 920 905 882 842 831 802 749 747 730 659 582 578 549 544 540 419 300 240 220 173 123 100 90 57 51 15 -943 922 915 817 793 774 752 735 711 706 642 552 505 488 482 467 415 357 330 310 262 121 117 98 89 37 2 -946 910 891 865 819 806 643 628 597 570 548 519 517 502 498 421 393 370 333 321 278 232 226 182 140 45 36 -969 939 932 880 867 865 852 849 846 820 771 720 670 661 636 509 490 469 296 271 244 204 193 161 48 28 3 -989 967 898 869 824 784 780 756 729 691 628 609 569 472 470 461 433 431 326 271 144 131 57 41 34 23 8 -998 924 900 818 797 720 718 656 624 595 576 525 464 455 438 339 313 300 295 253 234 218 175 153 83 75 73 diff --git a/sw/python/res/BCH_31_11.alist b/sw/python/res/BCH_31_11.alist deleted file mode 100644 index 206145c..0000000 --- a/sw/python/res/BCH_31_11.alist +++ /dev/null @@ -1,55 +0,0 @@ -31 20 -6 6 -1 1 2 3 4 4 4 4 4 5 5 6 6 6 6 6 6 6 6 6 5 5 4 3 2 2 2 2 2 1 1 -6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 -1 0 0 0 0 0 -2 0 0 0 0 0 -1 3 0 0 0 0 -1 2 4 0 0 0 -1 2 3 5 0 0 -2 3 4 6 0 0 -3 4 5 7 0 0 -4 5 6 8 0 0 -5 6 7 9 0 0 -1 6 7 8 10 0 -2 7 8 9 11 0 -1 3 8 9 10 12 -2 4 9 10 11 13 -3 5 10 11 12 14 -4 6 11 12 13 15 -5 7 12 13 14 16 -6 8 13 14 15 17 -7 9 14 15 16 18 -8 10 15 16 17 19 -9 11 16 17 18 20 -10 12 17 18 19 0 -11 13 18 19 20 0 -12 14 19 20 0 0 -13 15 20 0 0 0 -14 16 0 0 0 0 -15 17 0 0 0 0 -16 18 0 0 0 0 -17 19 0 0 0 0 -18 20 0 0 0 0 -19 0 0 0 0 0 -20 0 0 0 0 0 -1 3 4 5 10 12 -2 4 5 6 11 13 -3 5 6 7 12 14 -4 6 7 8 13 15 -5 7 8 9 14 16 -6 8 9 10 15 17 -7 9 10 11 16 18 -8 10 11 12 17 19 -9 11 12 13 18 20 -10 12 13 14 19 21 -11 13 14 15 20 22 -12 14 15 16 21 23 -13 15 16 17 22 24 -14 16 17 18 23 25 -15 17 18 19 24 26 -16 18 19 20 25 27 -17 19 20 21 26 28 -18 20 21 22 27 29 -19 21 22 23 28 30 -20 22 23 24 29 31 diff --git a/sw/python/res/BCH_31_26.alist b/sw/python/res/BCH_31_26.alist deleted file mode 100644 index 7a22846..0000000 --- a/sw/python/res/BCH_31_26.alist +++ /dev/null @@ -1,40 +0,0 @@ -31 5 -5 16 -1 1 1 2 2 2 3 3 2 3 3 3 4 5 4 3 2 2 2 2 3 4 4 3 4 3 3 2 2 1 1 -16 16 16 16 16 -1 0 0 0 0 -2 0 0 0 0 -3 0 0 0 0 -1 4 0 0 0 -2 5 0 0 0 -1 3 0 0 0 -1 2 4 0 0 -2 3 5 0 0 -3 4 0 0 0 -1 4 5 0 0 -1 2 5 0 0 -1 2 3 0 0 -1 2 3 4 0 -1 2 3 4 5 -2 3 4 5 0 -3 4 5 0 0 -4 5 0 0 0 -1 5 0 0 0 -1 2 0 0 0 -2 3 0 0 0 -1 3 4 0 0 -1 2 4 5 0 -1 2 3 5 0 -2 3 4 0 0 -1 3 4 5 0 -2 4 5 0 0 -1 3 5 0 0 -2 4 0 0 0 -3 5 0 0 0 -4 0 0 0 0 -5 0 0 0 0 -1 4 6 7 10 11 12 13 14 18 19 21 22 23 25 27 -2 5 7 8 11 12 13 14 15 19 20 22 23 24 26 28 -3 6 8 9 12 13 14 15 16 20 21 23 24 25 27 29 -4 7 9 10 13 14 15 16 17 21 22 24 25 26 28 30 -5 8 10 11 14 15 16 17 18 22 23 25 26 27 29 31 diff --git a/sw/python/res/BCH_7_4.alist b/sw/python/res/BCH_7_4.alist deleted file mode 100644 index 3ec087e..0000000 --- a/sw/python/res/BCH_7_4.alist +++ /dev/null @@ -1,14 +0,0 @@ -7 3 -3 4 -1 1 2 2 3 2 1 -4 4 4 -1 0 0 -2 0 0 -1 3 0 -1 2 0 -1 2 3 -2 3 0 -3 0 0 -1 3 4 5 -2 4 5 6 -3 5 6 7 diff --git a/sw/python/res/PEGReg252x504.alist b/sw/python/res/PEGReg252x504.alist deleted file mode 100644 index e65e3dd..0000000 --- a/sw/python/res/PEGReg252x504.alist +++ /dev/null @@ -1,760 +0,0 @@ -504 252 -3 7 -3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 6 6 6 5 6 6 6 6 6 6 6 6 6 6 7 6 6 6 6 6 6 -1 70 198 -2 11 210 -3 86 197 -4 145 173 -5 180 196 -6 89 223 -7 144 247 -8 99 119 -9 111 184 -10 20 183 -12 206 218 -13 51 229 -14 16 234 -15 160 190 -17 150 182 -18 71 143 -19 188 238 -21 55 203 -22 25 103 -23 54 202 -24 49 60 -26 57 74 -27 107 115 -28 101 251 -29 94 104 -30 158 225 -31 129 217 -32 40 211 -33 37 154 -34 148 162 -35 232 246 -36 65 92 -38 39 42 -41 113 237 -43 168 200 -44 125 133 -45 215 248 -46 98 136 -47 63 169 -48 80 226 -50 97 166 -52 67 114 -53 58 176 -56 134 147 -59 138 163 -61 130 201 -62 66 87 -64 171 186 -68 161 170 -69 109 174 -72 93 243 -73 126 191 -75 112 227 -76 157 221 -77 187 205 -78 90 233 -79 131 153 -81 117 135 -82 121 172 -83 156 204 -84 175 192 -85 95 132 -88 128 242 -91 189 214 -96 159 167 -100 219 235 -102 199 245 -105 152 241 -106 123 236 -108 140 239 -110 146 178 -116 127 250 -118 185 249 -120 155 209 -122 208 240 -124 212 244 -137 139 228 -141 164 195 -142 179 220 -149 151 194 -165 216 230 -177 193 207 -181 224 252 -213 222 231 -1 169 240 -2 112 185 -3 168 183 -4 11 132 -5 6 232 -7 124 189 -8 64 239 -9 51 198 -10 15 163 -12 52 195 -13 50 58 -14 44 207 -16 49 148 -17 18 60 -19 79 135 -20 41 89 -21 125 139 -22 70 170 -23 53 66 -24 120 201 -25 92 250 -26 218 230 -27 103 145 -28 128 197 -29 173 224 -30 212 251 -31 39 75 -32 127 225 -33 200 204 -34 74 194 -35 143 233 -36 178 188 -37 109 231 -38 72 219 -40 134 186 -42 175 179 -43 77 106 -45 94 126 -46 172 206 -47 105 157 -48 159 211 -54 102 121 -55 220 222 -56 93 149 -57 76 123 -59 62 215 -61 81 87 -63 192 247 -65 90 174 -67 85 99 -68 193 237 -69 98 249 -71 91 191 -73 171 203 -78 235 242 -80 180 199 -82 144 153 -83 129 166 -84 96 190 -86 95 155 -88 216 228 -97 110 140 -100 184 234 -101 176 182 -104 122 187 -107 202 243 -108 223 241 -111 164 167 -113 136 147 -114 156 177 -115 160 165 -116 227 236 -117 137 196 -118 130 244 -119 131 205 -133 146 210 -138 162 213 -141 150 238 -142 181 229 -151 208 246 -152 154 158 -161 209 245 -214 217 226 -207 221 248 -20 238 252 -1 228 249 -2 143 163 -3 55 82 -4 48 176 -5 38 52 -6 7 103 -8 115 148 -9 33 191 -10 219 225 -11 26 175 -12 104 201 -13 56 120 -14 98 226 -15 157 245 -16 19 227 -17 63 156 -18 123 140 -21 62 250 -22 28 57 -23 37 122 -24 139 152 -25 164 166 -27 136 158 -29 78 83 -30 146 205 -31 86 208 -32 68 246 -34 53 89 -35 119 142 -36 91 93 -39 45 182 -40 54 185 -41 85 126 -42 43 186 -44 181 202 -46 84 97 -47 134 135 -49 90 168 -50 73 216 -51 75 206 -58 76 153 -59 151 204 -60 128 190 -61 159 231 -64 70 214 -65 171 221 -66 192 233 -67 69 101 -71 117 193 -72 81 108 -74 118 154 -77 88 102 -79 209 215 -80 107 110 -87 165 189 -92 95 160 -94 127 197 -96 131 223 -99 124 242 -100 132 222 -105 224 230 -106 213 237 -109 199 247 -111 173 212 -112 113 235 -114 178 229 -116 130 180 -121 138 150 -125 170 200 -129 220 244 -133 167 236 -137 211 252 -141 155 239 -144 198 243 -145 174 194 -147 195 248 -149 172 210 -161 218 234 -162 196 251 -110 169 183 -3 177 241 -113 179 240 -47 184 232 -98 187 203 -188 216 246 -192 217 225 -1 89 127 -2 94 229 -4 88 108 -5 44 128 -6 203 211 -7 49 122 -8 61 172 -9 40 160 -10 22 201 -11 191 238 -12 19 107 -13 109 170 -14 163 247 -15 188 220 -16 166 182 -17 23 136 -18 100 130 -20 56 167 -21 111 140 -24 217 237 -25 102 193 -26 41 187 -27 43 209 -28 144 147 -29 96 121 -30 85 221 -31 114 131 -32 153 239 -33 119 207 -34 39 125 -35 116 176 -36 162 224 -37 38 165 -42 91 156 -45 70 233 -46 186 196 -48 200 230 -50 74 243 -51 77 244 -52 66 123 -53 117 242 -54 57 99 -55 120 204 -58 175 212 -59 65 118 -60 62 178 -63 95 227 -64 190 252 -67 135 210 -68 87 173 -69 181 208 -71 101 152 -72 98 213 -73 236 245 -75 103 231 -76 142 228 -78 80 149 -79 139 197 -81 168 185 -82 145 214 -83 184 205 -84 93 141 -86 189 234 -90 164 179 -92 240 241 -97 151 157 -104 134 177 -105 106 174 -112 161 194 -115 129 143 -124 150 250 -126 159 202 -132 148 198 -133 155 235 -137 195 222 -138 158 232 -146 218 249 -154 195 226 -169 206 215 -171 173 219 -11 180 248 -161 183 251 -91 199 223 -1 106 166 -2 25 153 -3 18 34 -4 52 183 -5 51 90 -6 95 172 -7 133 186 -8 113 178 -9 116 136 -10 83 202 -12 32 242 -13 207 211 -14 89 244 -15 75 108 -16 55 158 -17 79 174 -19 57 240 -20 87 152 -21 246 247 -22 73 114 -23 149 228 -24 35 171 -26 44 81 -27 58 100 -28 42 159 -29 101 239 -30 134 181 -31 54 105 -33 84 135 -36 37 209 -38 157 250 -39 120 249 -40 110 213 -41 47 82 -43 99 163 -45 93 184 -46 94 165 -48 122 138 -49 67 127 -50 223 233 -53 160 248 -56 103 230 -59 214 235 -60 199 212 -61 182 245 -62 104 132 -48 63 220 -64 193 227 -65 88 234 -66 112 205 -68 84 148 -69 115 167 -70 210 220 -71 151 231 -72 129 252 -74 134 150 -76 148 156 -19 77 219 -78 188 207 -80 92 237 -85 218 226 -86 123 180 -96 117 118 -97 177 179 -102 125 147 -107 130 221 -109 217 238 -111 201 215 -119 145 196 -121 142 200 -124 204 225 -126 168 175 -128 169 191 -131 222 251 -137 189 192 -139 187 243 -140 154 208 -141 143 144 -146 162 197 -155 213 216 -164 172 225 -170 232 241 -176 206 224 -91 185 236 -190 194 203 -198 230 250 -55 192 229 -1 33 173 -2 36 74 -3 9 62 -4 113 249 -5 100 239 -6 76 77 -7 45 112 -8 23 50 -10 13 117 -11 158 193 -12 168 223 -14 58 105 -15 139 191 -16 40 125 -17 218 233 -18 78 186 -20 54 65 -21 142 183 -22 46 244 -24 97 202 -25 98 242 -26 140 149 -27 35 63 -28 184 206 -29 160 247 -30 79 108 -31 171 215 -32 37 181 -34 164 199 -38 57 229 -39 83 135 -41 150 209 -42 169 246 -43 167 221 -44 92 129 -47 94 211 -49 216 241 -51 152 185 -52 153 227 -53 151 201 -56 86 178 -59 115 175 -60 163 243 -61 93 217 -64 109 123 -66 155 200 -67 82 106 -68 180 182 -69 88 166 -70 110 120 -71 205 240 -72 130 161 -73 75 196 -80 99 133 -35 81 104 -85 224 246 -87 179 190 -89 174 189 -90 131 147 -95 212 214 -96 127 144 -101 165 187 -102 210 252 -103 177 208 -107 114 122 -111 118 197 -116 159 170 -119 136 238 -121 143 234 -124 203 237 -126 204 232 -128 222 245 -132 154 228 -137 146 219 -138 145 248 -105 141 156 -157 226 251 -162 195 236 -176 188 198 -1 85 170 256 339 426 0 -2 86 171 257 340 427 0 -3 87 172 250 341 428 0 -4 88 173 258 342 429 0 -5 89 174 259 343 430 0 -6 89 175 260 344 431 0 -7 90 175 261 345 432 0 -8 91 176 262 346 433 0 -9 92 177 263 347 428 0 -10 93 178 264 348 434 0 -2 88 179 265 336 435 0 -11 94 180 266 349 436 0 -12 95 181 267 350 434 0 -13 96 182 268 351 437 0 -14 93 183 269 352 438 0 -13 97 184 270 353 439 0 -15 98 185 271 354 440 0 -16 98 186 272 341 441 0 -17 99 184 266 355 396 0 -10 100 169 273 356 442 0 -18 101 187 274 357 443 0 -19 102 188 264 358 444 0 -20 103 189 271 359 433 0 -21 104 190 275 360 445 0 -19 105 191 276 340 446 0 -22 106 179 277 361 447 0 -23 107 192 278 362 448 0 -24 108 188 279 363 449 0 -25 109 193 280 364 450 0 -26 110 194 281 365 451 0 -27 111 195 282 366 452 0 -28 112 196 283 349 453 0 -29 113 177 284 367 426 0 -30 114 197 285 341 454 0 -31 115 198 286 360 448 480 -32 116 199 287 368 427 0 -29 117 189 288 368 453 0 -33 118 174 288 369 455 0 -33 111 200 285 370 456 0 -28 119 201 263 371 439 0 -34 100 202 277 372 457 0 -33 120 203 289 363 458 0 -35 121 203 278 373 459 0 -36 96 204 259 361 460 0 -37 122 200 290 374 432 0 -38 123 205 291 375 444 0 -39 124 206 252 372 461 0 -40 125 173 292 376 385 0 -21 97 207 261 377 462 0 -41 95 208 293 378 433 0 -12 92 209 294 343 463 0 -42 94 174 295 342 464 0 -43 103 197 296 379 465 0 -20 126 201 297 366 442 0 -18 127 172 298 353 425 0 -44 128 181 273 380 466 0 -22 129 188 297 355 455 0 -43 95 210 299 362 437 0 -45 130 211 300 381 467 0 -21 98 212 301 382 468 0 -46 131 213 262 383 469 0 -47 130 187 301 384 428 0 -39 132 185 302 385 448 0 -48 91 214 303 386 470 0 -32 133 215 300 387 442 0 -47 103 216 295 388 471 0 -42 134 217 304 377 472 0 -49 135 196 305 389 473 0 -50 136 217 306 390 474 0 -1 102 214 290 391 475 0 -16 137 218 307 392 476 0 -51 118 219 308 393 477 0 -52 138 208 309 358 478 0 -22 114 220 293 394 427 0 -53 111 209 310 352 478 0 -54 129 210 311 395 431 0 -55 121 221 294 396 431 0 -56 139 193 312 397 441 0 -57 99 222 313 354 451 0 -40 140 223 312 398 479 0 -58 131 219 314 361 480 0 -59 141 172 315 372 472 0 -60 142 193 316 348 456 0 -61 143 205 317 367 389 0 -62 134 202 281 399 481 0 -3 144 195 318 400 466 0 -47 131 224 305 356 482 0 -63 145 221 258 387 474 0 -6 100 197 256 351 483 0 -56 133 207 319 343 484 0 -64 137 199 289 338 422 0 -32 105 225 320 398 460 0 -51 128 199 317 374 469 0 -25 122 226 257 375 461 0 -62 144 225 302 344 485 0 -65 143 227 280 401 486 0 -41 146 205 321 402 445 0 -38 136 182 253 308 446 0 -8 134 228 297 373 479 0 -66 147 229 272 362 430 0 -24 148 217 307 364 487 0 -67 126 221 276 403 488 0 -19 107 175 310 380 489 0 -25 149 180 322 384 480 0 -68 124 230 323 366 437 501 -69 121 231 323 339 472 0 -23 150 223 266 404 490 0 -70 151 219 258 352 451 0 -50 117 232 267 405 470 0 -71 146 223 249 371 475 0 -9 152 233 274 406 491 0 -53 86 234 324 388 432 0 -34 153 234 251 346 429 0 -42 154 235 282 358 490 0 -23 155 176 325 390 467 0 -72 156 236 286 347 492 0 -58 157 218 296 401 434 0 -73 158 220 300 401 491 0 -8 159 198 284 407 493 0 -74 104 181 298 370 475 0 -59 126 237 280 408 494 0 -75 149 189 261 376 490 0 -69 129 186 295 400 470 0 -76 90 228 326 409 495 0 -36 101 238 285 403 439 0 -52 122 202 327 410 496 0 -72 112 226 256 377 486 0 -63 108 212 259 411 497 0 -27 142 239 325 393 460 0 -46 158 236 272 404 477 0 -57 159 227 282 412 484 0 -62 88 229 328 384 498 0 -36 160 240 329 345 479 0 -44 119 206 322 365 394 0 -58 99 206 304 367 456 0 -38 153 192 271 347 493 0 -77 157 241 330 413 499 0 -45 161 237 331 376 500 0 -77 101 190 313 414 438 0 -70 146 186 274 415 447 0 -78 162 242 317 416 501 0 -79 163 198 311 408 443 0 -16 115 171 325 416 494 0 -7 141 243 279 416 486 0 -4 107 244 315 407 500 0 -71 160 194 332 417 499 0 -44 153 245 279 403 484 0 -30 97 176 328 389 395 0 -80 128 246 312 359 447 0 -15 162 237 326 394 457 0 -80 164 211 321 392 465 0 -68 165 190 307 356 463 0 -57 141 210 283 340 464 0 -29 165 220 333 415 498 0 -74 144 242 329 418 471 0 -60 154 185 289 395 501 0 -54 124 183 321 369 502 0 -26 165 192 331 353 435 0 -65 125 213 327 363 492 0 -14 155 225 263 379 450 0 -49 166 247 324 337 477 0 -30 161 248 287 417 503 0 -45 93 171 268 373 468 0 -78 152 191 319 419 454 0 -81 155 224 288 375 487 0 -41 142 191 270 339 474 0 -65 152 240 273 390 459 0 -35 87 207 314 410 436 0 -39 85 249 334 411 458 0 -49 102 238 267 420 492 0 -48 138 215 335 360 452 0 -59 123 246 262 344 419 0 -4 109 233 305 335 426 0 -50 133 244 323 354 483 0 -61 120 179 299 410 467 0 -43 148 173 286 421 504 0 -82 154 250 322 402 489 0 -71 116 235 301 346 466 0 -79 120 251 319 402 482 0 -5 140 236 336 400 473 0 -83 163 204 306 365 453 0 -15 148 200 270 383 473 0 -10 87 249 337 342 443 0 -9 147 252 316 374 449 0 -73 86 201 314 422 463 0 -48 119 203 291 345 441 0 -55 149 253 277 414 487 0 -17 116 254 269 397 504 0 -64 90 224 318 413 483 0 -14 143 212 303 423 482 0 -52 137 177 265 411 438 0 -61 132 216 255 413 425 0 -82 135 218 276 386 435 0 -80 114 244 324 423 0 0 -78 94 245 330 333 503 0 -5 157 248 291 407 478 0 -3 108 226 313 417 491 0 -1 92 243 328 424 504 0 -67 140 232 338 382 454 0 -35 113 238 292 408 471 0 -46 104 180 264 406 465 0 -20 150 204 327 348 445 0 -18 138 253 260 423 495 0 -60 113 211 298 409 496 0 -55 159 194 316 388 476 0 -11 123 209 334 421 449 0 -82 96 168 284 350 397 0 -75 164 195 306 415 489 0 -74 166 222 278 368 457 0 -2 160 246 304 391 488 0 -28 125 241 260 350 461 0 -76 110 233 299 382 485 0 -84 161 231 308 371 418 0 -64 167 214 315 381 485 0 -37 130 222 334 406 452 0 -81 145 208 254 418 462 0 -27 167 255 275 405 469 0 -11 106 247 332 399 440 0 -66 118 178 335 396 499 0 -79 127 239 269 385 391 0 -54 168 215 281 404 459 0 -84 127 229 330 412 497 0 -6 151 227 338 378 436 0 -83 109 230 287 421 481 0 -26 112 178 255 409 419 0 -40 167 182 333 399 502 0 -53 156 184 302 386 464 0 -77 145 170 311 359 498 0 -12 163 235 257 425 455 0 -81 106 230 292 380 424 0 -84 117 213 310 392 0 0 -31 89 252 331 420 496 0 -56 115 216 290 378 440 0 -13 147 247 318 387 494 0 -66 139 234 329 381 0 0 -69 156 240 309 422 503 0 -34 135 231 275 398 495 0 -17 162 169 265 405 493 0 -70 91 242 283 364 430 0 -75 85 251 320 355 476 0 -68 151 250 320 420 462 0 -63 139 228 296 349 446 0 -51 150 243 293 414 468 0 -76 158 239 294 351 444 0 -67 166 183 309 383 497 0 -31 164 196 254 357 458 481 -7 132 232 268 357 450 0 -37 168 245 336 379 500 0 -73 136 170 332 370 429 0 -72 105 187 326 369 424 0 -24 110 248 337 412 502 0 -83 169 241 303 393 488 0 diff --git a/sw/python/scripts/proximal/simulate_2d_BER.py b/sw/python/scripts/proximal/simulate_2d_BER.py deleted file mode 100644 index e3cfb37..0000000 --- a/sw/python/scripts/proximal/simulate_2d_BER.py +++ /dev/null @@ -1,154 +0,0 @@ -import sys, os -import sys, os -sys.path.append(os.path.abspath('../..')) -print(sys.path) - - -import numpy as np -import seaborn as sns -import matplotlib.pyplot as plt -import signal -from timeit import default_timer -from functools import partial - -from utility import codes, noise, misc -from utility.simulation.simulators import GenericMultithreadedSimulator -from utility.simulation import SimulationManager - -from cpp_modules.cpp_decoders import ProximalDecoder_204_102 as ProximalDecoder - - -def task_func(params): - """Function called by the GenericMultithreadedSimulator instance. - - Calculate the BER, FER, and DFR for a given SNR and gamma. - """ - signal.signal(signal.SIGINT, signal.SIG_IGN) - - decoder = params["decoder"] - max_iterations = params["max_iterations"] - SNR = params["SNR"] - n = params["n"] - k = params["k"] - - c = np.zeros(n) - x_bpsk = c + 1 - - total_bit_errors = 0 - total_frame_errors = 0 - dec_fails = 0 - - num_iterations = 0 - - for i in range(max_iterations): - x = noise.add_awgn(x_bpsk, SNR, n, k) - x_hat, k_max = decoder.decode(x) - - bit_errors = misc.count_bit_errors(x_hat, c) - if bit_errors > 0: - total_bit_errors += bit_errors - total_frame_errors += 1 - - num_iterations += 1 - - if k_max == -1: - dec_fails += 1 - - if total_frame_errors > 100: - break - - BER = total_bit_errors / (num_iterations * n) - FER = total_frame_errors / num_iterations - DFR = dec_fails / (num_iterations + dec_fails) - - return {"BER": BER, "FER": FER, "DFR": DFR, - "num_iterations": num_iterations} - - -def get_params(code_name: str): - """In this function all parameters for the simulation are defined.""" - # Define global simulation parameters - - H_file = f"../../res/{code_name}.alist" - - H = codes.read_alist_file(H_file) - n_min_k, n = H.shape - k = n - n_min_k - - omega = 0.05 - K = 100 - gammas = np.arange(0.0, 0.17, 0.01) - - SNRs = np.arange(1, 6, 0.5) - max_iterations = 20000 - - # Define parameters different for each task - - task_params = [] - for i, SNR in enumerate(SNRs): - for j, gamma in enumerate(gammas): - decoder = ProximalDecoder(H=H.astype('int32'), K=K, omega=omega, - gamma=gamma) - - task_params.append( - {"decoder": decoder, "max_iterations": max_iterations, - "SNR": SNR, "gamma": gamma, "n": n, "k": k}) - - return omega, K, task_params - - -def configure_new_simulation(sim_mgr: SimulationManager, code_name: str, - sim_name: str) -> None: - sim = GenericMultithreadedSimulator() - - omega, K, task_params = get_params(code_name) - - sim.task_params = task_params - sim.task_func = task_func - sim.format_func = partial(misc.pgf_reformat_data_3d, x_param_name="SNR", - y_param_name="gamma", - z_param_names=["BER", "FER", "DFR", - "num_iterations"]) - - sim_mgr.configure_simulation(simulator=sim, name=sim_name, - additional_metadata={"omega": omega, "K": K}) - - -def main(): - # code_name = "BCH_7_4" - # code_name = "BCH_31_11" - # code_name = "BCH_31_26" - # code_name = "96.3.965" - # code_name = "204.33.486" - code_name = "204.33.484" - # code_name = "204.55.187" - # code_name = "408.33.844" - - sim_name = f"2d_BER_FER_DFR_{misc.slugify(code_name)}" - - # Run simulation - - sim_mgr = SimulationManager(saves_dir="sim_saves", - results_dir="sim_results") - - unfinished_sims = sim_mgr.get_unfinished() - if len(unfinished_sims) > 0: - sim_mgr.load_unfinished(unfinished_sims[0]) - else: - configure_new_simulation(sim_mgr=sim_mgr, code_name=code_name, - sim_name=sim_name) - - sim_mgr.simulate() - - # Plot results - - sns.set_theme() - ax = sns.lineplot(data=sim_mgr.get_current_results(), x="SNR", y="BER", - hue="gamma") - ax.set_yscale('log') - ax.set_ylim((5e-5, 2e-0)) - plt.show() - - -if __name__ == "__main__": - main() diff --git a/sw/python/scripts/proximal/simulate_2d_avg_error.py b/sw/python/scripts/proximal/simulate_2d_avg_error.py deleted file mode 100644 index 975baa4..0000000 --- a/sw/python/scripts/proximal/simulate_2d_avg_error.py +++ /dev/null @@ -1,147 +0,0 @@ -import sys, os -sys.path.append(os.path.abspath('../..')) - -import numpy as np -import seaborn as sns -import matplotlib.pyplot as plt -import signal -from timeit import default_timer -from functools import partial -import pandas as pd - -from utility import codes, noise, misc -from utility.simulation.simulators import GenericMultithreadedSimulator -from utility.simulation import SimulationManager - -from cpp_modules.cpp_decoders import ProximalDecoder_204_102 as ProximalDecoder - - -def task_func(params): - """Function called by the GenericMultithreadedSimulator instance. - - Calculate the average error over a number of iterations. - """ - signal.signal(signal.SIGINT, signal.SIG_IGN) - - decoder = params["decoder"] - num_iterations = params["num_iterations"] - x_bpsk = params["x_bpsk"] - SNR = params["SNR"] - n = params["n"] - k = params["k"] - K = params["K"] - - avg_error_values = np.zeros(K) - - for i in range(num_iterations): - x = noise.add_awgn(x_bpsk, SNR, n, k) - - error_values = decoder.get_error_values(x_bpsk.astype('int32'), x) - - for j, val in enumerate(error_values): - avg_error_values[j] += val - - avg_error_values = avg_error_values / num_iterations - - return {"err": avg_error_values} - - -def get_params(code_name: str): - """In this function all parameters for the simulation are defined.""" - # Define global simulation parameters - - H_file = f"../../res/{code_name}.alist" - H = codes.read_alist_file(H_file) - n_min_k, n = H.shape - k = n - n_min_k - - SNR = 8 - omegas = np.logspace(-0, -10, 40) - K = 200 - - num_iterations = 1000 - x_bpsk = np.zeros(n) + 1 - - # Define parameters different for each task - - task_params = [] - for i, omega in enumerate(omegas): - decoder = ProximalDecoder(H=H.astype('int32'), K=K, - omega=omega) - task_params.append( - {"decoder": decoder, "num_iterations": num_iterations, - "x_bpsk": x_bpsk, "SNR": SNR, "n": n, "k": k, "K": K, - "omega": omega}) - - return SNR, K, task_params - - -def reformat_data(results): - """Reformat the data obtained from the GenericMultithreadedSimulator to - be usable by pgfplots. - """ - K = 200 - num_points = len(results) * K - - x = np.zeros(num_points) - y = np.zeros(num_points) - z = np.zeros(num_points) - - for i, (params, result) in enumerate(results.items()): - np.put(x, np.arange(i * K, (i + 1) * K), np.arange(1, K+1)) - np.put(y, np.arange(i * K, (i + 1) * K), params["omega"]) - np.put(z, np.arange(i * K, (i + 1) * K), result["err"]) - - x = x[::4] - y = y[::4] - z = z[::4] - - df = pd.DataFrame({"k": x, "omega": y, "err": z}).sort_values( - by=['k', 'omega'], ascending=[True, False]) - - return df - - -def configure_new_simulation(sim_mgr: SimulationManager, code_name: str, - sim_name: str) -> None: - sim = GenericMultithreadedSimulator() - - SNR, K, task_params = get_params(code_name) - - sim.task_params = task_params - sim.task_func = task_func - sim.format_func = reformat_data - - sim_mgr.configure_simulation(simulator=sim, name=sim_name, - additional_metadata={"SNR": SNR, "K": K}) - - -def main(): - # code_name = "BCH_7_4" - # code_name = "BCH_31_11" - # code_name = "BCH_31_26" - # code_name = "96.3.965" - # code_name = "204.33.486" - code_name = "204.33.484" - # code_name = "204.55.187" - # code_name = "408.33.844" - - sim_name = f"2d_avg_error_{misc.slugify(code_name)}" - - # Run simulation - - sim_mgr = SimulationManager(saves_dir="sim_saves", - results_dir="sim_results") - - unfinished_sims = sim_mgr.get_unfinished() - if len(unfinished_sims) > 0: - sim_mgr.load_unfinished(unfinished_sims[0]) - else: - configure_new_simulation(sim_mgr=sim_mgr, code_name=code_name, - sim_name=sim_name) - - sim_mgr.simulate() - - -if __name__ == "__main__": - main() diff --git a/sw/python/scripts/proximal/simulate_gradient.py b/sw/python/scripts/proximal/simulate_gradient.py deleted file mode 100644 index 7b1966e..0000000 --- a/sw/python/scripts/proximal/simulate_gradient.py +++ /dev/null @@ -1,88 +0,0 @@ -import sys, os -sys.path.append(os.path.abspath('../..')) - -import numpy as np -import pandas as pd -import seaborn as sns -import matplotlib.pyplot as plt -import signal -from timeit import default_timer -from tqdm import tqdm - -from utility import codes, noise, misc -from utility.simulation.simulators import GenericMultithreadedSimulator - -# from cpp_modules.cpp_decoders import ProximalDecoder -from cpp_modules.cpp_decoders import ProximalDecoder_204_102 as ProximalDecoder - - -def simulate(H_file, SNR, omega, K, gamma): - H = codes.read_alist_file(f"../../res/{H_file}") - n_min_k, n = H.shape - k = n - n_min_k - - decoder = ProximalDecoder(H.astype('int32'), K=K, omega=omega, gamma=gamma) - - c = np.zeros(n) - x_bpsk = (c + 1) - - avg_grad_values = np.zeros(shape=(K, 2)) - - for i in range(1000): - x = noise.add_awgn(x_bpsk, SNR, n, k) - grad_values = decoder.get_gradient_values(x) - - for j, (val_h, val_l) in enumerate(grad_values): - avg_grad_values[j, 0] += val_h - avg_grad_values[j, 1] += val_l - - avg_grad_values = avg_grad_values / 1000 - - return avg_grad_values - - -def reformat_data(results): - return pd.DataFrame({"k": np.arange(0, results.size // 2, 1), "grad_h": results[:, 0], "grad_l": results[:, 1]}) - - -def main(): - # Set up simulation params - - sim_name = "avg_grad_1dB" - - # H_file = "96.3.965.alist" - H_file = "204.33.486.alist" - # H_file = "204.33.484.alist" - # H_file = "204.55.187.alist" - # H_file = "408.33.844.alist" - # H_file = "BCH_7_4.alist" - # H_file = "BCH_31_11.alist" - # H_file = "BCH_31_26.alist" - - SNR = 1 - omega = 0.05 - K = 100 - gamma = 0.05 - - # Run simulation - - start_time = default_timer() - results = simulate(H_file, SNR, omega, K, gamma) - end_time = default_timer() - - print(f"duration: {end_time - start_time}") - - df = reformat_data(results) - - df.to_csv( - f"sim_results/{sim_name}_{misc.slugify(H_file)}.csv", index=False) - - sns.set_theme() - sns.lineplot(data=df, x="k", y="grad_h") - sns.lineplot(data=df, x="k", y="grad_l") - - plt.show() - - -if __name__ == "__main__": - main() diff --git a/sw/python/utility/__init__.py b/sw/python/utility/__init__.py deleted file mode 100644 index 104b7ec..0000000 --- a/sw/python/utility/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -"""This package contains various utilities that can be used in combination -with the decoders.""" diff --git a/sw/python/utility/codes.py b/sw/python/utility/codes.py deleted file mode 100644 index 31d2409..0000000 --- a/sw/python/utility/codes.py +++ /dev/null @@ -1,249 +0,0 @@ -"""This file Helper functions for generating an H matrix from alist data. -Code from https://github.com/gnuradio/gnuradio/blob/master/gr-fec/python/fec -/LDPC/Generate_LDPC_matrix_functions.py -""" - -import numpy as np - - -# -# Related to alist files -# - - -def _parse_alist_header(header): - size = header.split() - return int(size[0]), int(size[1]) - - -def read_alist_file(filename): - """ - This function reads in an alist file and creates the - corresponding parity check matrix H. The format of alist - files is described at: - http://www.inference.phy.cam.ac.uk/mackay/codes/alist.html - """ - - with open(filename, 'r') as myfile: - data = myfile.readlines() - numCols, numRows = _parse_alist_header(data[0]) - - H = np.zeros((numRows, numCols)) - - # The locations of 1s starts in the 5th line of the file - for lineNumber in np.arange(4, 4 + numCols): - indices = data[lineNumber].split() - for index in indices: - H[int(index) - 1, lineNumber - 4] = 1 - - return H - - -# -# G matrices of specific codes -# - - -# @formatter:off - -Gs = {'Hamming_7_4': np.array([[1, 0, 0, 0, 0, 1, 1], - [0, 1, 0, 0, 1, 0, 1], - [0, 0, 1, 0, 1, 1, 0], - [0, 0, 0, 1, 1, 1, 1]]), - - 'Golay_24_12': np.array([[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1], - [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0], - [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1], - [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0], - [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1], - [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0], - [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1]]), - - 'BCH_15_7': np.array([[1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0], - [0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0], - [0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0], - [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1], - [0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0], - [0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1], - [0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1]]), - - 'BCH_31_6': np.array([[1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1], - [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0], - [0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1], - [0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1], - [0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1], - [0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1]]), - - 'BCH_31_11': np.array([[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0], - [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1], - [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0], - [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0], - [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0], - [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0], - [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1]]), - - 'BCH_31_16': np.array([[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0], - [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1], - [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0], - [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0], - [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0], - [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0], - [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1]]), - - 'BCH_31_21': np.array([[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0], - [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0], - [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1], - [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0], - [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1], - [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0], - [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1]]), - - 'BCH_63_16': np.array([[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1], - [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1], - [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0], - [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1], - [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1], - [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1]]), - - 'BCH_63_30': np.array([[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1], - [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0], - [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1], - [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1], - [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1], - [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1]]), - - # TODO: Fix this. This code should be systematic - 'BCH_63_45': np.array([[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1], - [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0], - [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0], - [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1], - [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1], - [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1], - [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1]]) - } - -# @formatter:on - - -# -# Utilities for systematic codes -# - - -def get_systematic_H(G: np.array) -> np.array: - """Compute the H matrix for a systematic code. - - :param G: Generator matrix of the systematic code - :return: Parity check matrix H - """ - k, n = G.shape - - I = G[:, :k] - assert np.array_equal(I, np.identity(k)) - - P = G[:, k:] - - H = np.zeros(shape=(n - k, n)) - H[:, :k] = P.T - H[:, k:] = np.identity(n - k) - - return H diff --git a/sw/python/utility/misc.py b/sw/python/utility/misc.py deleted file mode 100644 index 6619015..0000000 --- a/sw/python/utility/misc.py +++ /dev/null @@ -1,72 +0,0 @@ -import unicodedata -import re -import typing -import pandas as pd -import numpy as np - - -def slugify(value, allow_unicode=False): - """ - Taken from https://github.com/django/django/blob/master/django/utils - /text.py - Convert to ASCII if 'allow_unicode' is False. Convert spaces or repeated - dashes to single dashes. Remove characters that aren't alphanumerics, - underscores, or hyphens. Convert to lowercase. Also strip leading and - trailing whitespace, dashes, and underscores. - """ - value = str(value) - if allow_unicode: - value = unicodedata.normalize('NFKC', value) - else: - value = unicodedata.normalize('NFKD', value).encode('ascii', - 'ignore').decode( - 'ascii') - value = re.sub(r'[^\w\s-]', '', value.lower()) - return re.sub(r'[-\s]+', '-', value).strip('-_') - - -def pgf_reformat_data_3d(results: typing.Sequence, x_param_name: str, - y_param_name: str, - z_param_names: typing.Sequence[str]): - """Reformat the results obtained from the GenericMultithreadedSimulator - into a form usable by pgfplots. - - :param results: Results from GenericMultiThreadedSimulator - (dict of the form {params1: results1, params2: results2, ...}), - where resultsN and paramsN are themselves dicts: - paramsN = {param_name_1: val, param_name_2: val, ...} - resultsN = {result_name_1: val, result_name_2: val, ...} - :param x_param_name: - :param y_param_name: - :param z_param_names: - :return: pandas DataFrame of the following form: - {x_param_name: [x1, x1, x1, ..., x2, x2, x2, ...], - y_param_name: [y1, y2, y3, ..., y1, y2, y3, ...], - z_param_name: [z11, z21, z31, ..., z12, z22, z32, ...]} - """ - # Create result variables - x = np.zeros(len(results)) - y = np.zeros(len(results)) - zs = {name: np.zeros(len(results)) for name in z_param_names} - - # Populate result variables - for i, (params, result) in enumerate(results.items()): - x_val = params[x_param_name] - y_val = params[y_param_name] - for z_param_name in z_param_names: - zs[z_param_name][i] = result[z_param_name] - - x[i] = x_val - y[i] = y_val - - # Create and return pandas DataFrame - df = pd.DataFrame({x_param_name: x, y_param_name: y}) - for z_param_name in z_param_names: - df[z_param_name] = zs[z_param_name] - - return df.sort_values(by=[x_param_name, y_param_name]) - - -def count_bit_errors(x: np.array, x_hat: np.array) -> int: - """Count the number of different bits between two words.""" - return np.sum(x != x_hat) diff --git a/sw/python/utility/noise.py b/sw/python/utility/noise.py deleted file mode 100644 index 33ba026..0000000 --- a/sw/python/utility/noise.py +++ /dev/null @@ -1,34 +0,0 @@ -"""Utility functions relating to noise and SNR calculations.""" - -import numpy as np - - -def get_noise_variance_from_SNR(SNR: float, n: int, k: int) -> float: - """Calculate the variance of the noise from an SNR and the signal - amplitude. - - :param SNR: Signal-to-Noise-Ratio in dB (E_b/N_0) - :param n: Length of a codeword of the used code - :param k: Length of a dataword of the used code - :return: Variance of the noise - """ - SNR_linear = 10 ** (SNR / 10) - variance = 1 / (2 * (k / n) * SNR_linear) - - return variance - - -def add_awgn(c: np.array, SNR: float, n: int, k: int) -> np.array: - """Add Additive White Gaussian Noise to a data vector. As this function - adds random noise to the input, the output changes, even if it is called - multiple times with the same input. - - :param c: Binary vector representing the data to be transmitted - :param SNR: Signal-to-Noise-Ratio in dB - :param n: Length of a codeword of the used code - :param k: Length of a dataword of the used code - :return: Data vector with added noise - """ - noise_var = get_noise_variance_from_SNR(SNR, n, k) - y = c + np.sqrt(noise_var) * np.random.normal(size=c.size) - return y diff --git a/sw/python/utility/simulation/__init__.py b/sw/python/utility/simulation/__init__.py deleted file mode 100644 index 27197a0..0000000 --- a/sw/python/utility/simulation/__init__.py +++ /dev/null @@ -1,77 +0,0 @@ -"""Simulation package. - -This package provides a way to easily define simulations in such a way that -they can be paused and resumed. - -General Structure -================= -The package consists of 3 main components: - - The 'SimulationDeSerializer': Responsible for file IO - - The 'Simulator': Responsible for the actual simulating - - The 'SimulationManager': Delegates work to the DeSerializer and the - Simulator - -The Simulator Class -=================== -For each new simulating task, a new 'Simulator' must be defined. The -requirements for this class are the following: - - Must define the 'start_or_continue()', 'stop()' and - 'get_current_results()' functions - - Must be picklable in order to store the simulation state - -An example simulator could look as follows: ----------------------------------------------------------------- -class SomeSimulator: - def __init__(self, num_iterations): - self._num_iterations = num_iterations - self._current_iter = 0 - - self._simulation_running = False - - self._results = pd.DataFrame() - - def _perform_iteration(self): - # Perform iteration and append results - ... - - def start_or_continue(self) -> None: - self._simulation_running = True - - while self._simulation_running and ( - self._current_iter < self._num_iterations): - self._perform_iteration() - - def stop(self) -> None: - self._simulation_running = False - - def get_current_results(self) -> pd.DataFrame: - return self._results ----------------------------------------------------------------- - -Usage -===== -To start a new simulation: ----------------------------------------------------------------- -sim_mgr = SimulationManager(results_dir="results", saves_dir="saves") - -sim = SomeSimulator(num_iterations=100) -sim_mgr.configure_simulation(simulator=sim, name='Some Simulation', \ - column_labels=['label1', 'label2']) -sim_mgr.start() ----------------------------------------------------------------- - -To check for a previously interrupted simulation and continue: ----------------------------------------------------------------- -sim_mgr = SimulationManager(results_dir="results", saves_dir="saves") - -unfinished_sims = sim_mgr.get_unfinished() - -if len(unfinished_sims) > 0: - sim_mgr.load_unfinished(unfinished_sims[0]) - sim_mgr.simulate() ----------------------------------------------------------------- -""" - - -from utility.simulation.management import SimulationManager, \ - SimulationDeSerializer diff --git a/sw/python/utility/simulation/management.py b/sw/python/utility/simulation/management.py deleted file mode 100644 index f325929..0000000 --- a/sw/python/utility/simulation/management.py +++ /dev/null @@ -1,239 +0,0 @@ -import json -import pandas as pd -import typing -import signal -import pickle -import os -from pathlib import Path -import platform -from datetime import datetime -import timeit -import collections.abc - -from utility import misc - - -class SimulationDeSerializer: - """Class responsible for file management, de- and serialization of - Simulator objects.""" - - def __init__(self, save_dir: str, results_dir: str): - self._saves_dir = save_dir - self._results_dir = results_dir - - Path(self._saves_dir).mkdir(parents=True, exist_ok=True) - Path(self._results_dir).mkdir(parents=True, exist_ok=True) - - def _get_savefile_path(self, sim_name): - return f"{self._saves_dir}/{misc.slugify(sim_name)}_state.pickle" - - def _get_metadata_path(self, sim_name): - return f"{self._results_dir}/{misc.slugify(sim_name)}_metadata.json" - - def _get_results_path(self, sim_name): - return f"{self._results_dir}/{misc.slugify(sim_name)}.csv" - - def _read_metadata(self, sim_name) -> typing.Dict: - with open(self._get_metadata_path(sim_name), 'r', - encoding='utf-8') as f: - return json.load(f) - - def _save_metadata(self, sim_name, metadata) -> None: - with open(self._get_metadata_path(sim_name), 'w+', - encoding='utf-8') as f: - json.dump(metadata, f, ensure_ascii=False, indent=4) - - def unfinished_sim_present(self, sim_name: str): - """Check if the savefile of a previously paused simulation is - present. - - :param sim_name: Name - :return: True if a paused simulation with the given name is found - """ - return os.path.isfile( - self._get_savefile_path(sim_name)) and os.path.isfile( - self._get_metadata_path(sim_name)) - - # TODO: Make the directories configurable in the init function - def get_unfinished_sims(self) -> typing.List[str]: - """Get a list unfinished simulations.""" - save_files = [f for f in os.listdir(self._saves_dir) if - os.path.isfile(os.path.join(self._saves_dir, f))] - - state_files = [f for f in save_files if f.endswith("_state.pickle")] - sim_slugs = [f.removesuffix("_state.pickle") for f in state_files] - - sim_names = [self._read_metadata(slug)["name"] for slug in sim_slugs] - - return sim_names - - def remove_unfinished_sim(self, sim_name: str): - """Remove the savefile of a previously paused simulation. - - :param sim_name: Name of the simulation - """ - os.remove(self._get_savefile_path(sim_name)) - # os.remove(self._get_metadata_path(sim_name)) - - def save_state(self, simulator: typing.Any, sim_name: str, - metadata: typing.Dict) -> None: - """Save the state of a currently running simulation. - - :param simulator: Simulator object - :param sim_name: Name of the simulation - :param metadata: Metadata to be saved besides the actual state - """ - # Save metadata - self._save_metadata(sim_name, metadata) - - # Save simulation state - with open(self._get_savefile_path(sim_name), "wb") as file: - pickle.dump(simulator, file) - - def read_state(self, sim_name: str) -> typing.Tuple[ - typing.Any, typing.Dict]: - """Read the saved state of a paused simulation. - - :param sim_name: Name of the simulation - :return: Tuple of the form (simulator, metadata) - """ - # Read metadata - metadata = self._read_metadata(sim_name) - - # Read simulation state - simulator = None - with open(self._get_savefile_path(sim_name), "rb") as file: - simulator = pickle.load(file) - - return simulator, metadata - - # TODO: Is the simulator object actually necessary here? - def save_results(self, simulator: typing.Any, sim_name: str, - metadata: typing.Dict) -> None: - """Save simulation results to file. - - :param simulator: Simulator object. Used to obtain the data - :param sim_name: Name of the simulation. Determines the filename - :param metadata: Metadata to be saved besides the actual simulation - results - """ - # Save metadata - self._save_metadata(sim_name, metadata) - - # Save current results - simulator.current_results.to_csv(self._get_results_path(sim_name), - index=False) - - def read_results(self, sim_name: str) -> typing.Tuple[ - pd.DataFrame, typing.Dict]: - """Read simulation results from file. - - :param sim_name: Name of the simulation. - :return: Tuple of the form (data, metadata), where data is a pandas - dataframe and metadata is a dict - """ - # Read metadata - metadata = self._read_metadata(sim_name) - - # Read results - results = pd.read_csv(self._get_results_path(sim_name)) - - return results, metadata - - -# TODO: Autosave simulation every so often -# TODO: Comment explaining what a Simulator class is -class SimulationManager: - """This class only contains functions relating to stopping and - restarting of simulations (and storing of the simulation state in a - file, to be resumed at a later date). - - All actual work is outsourced to a provided simulator class. - """ - - def __init__(self, saves_dir: str, results_dir: str): - """Construct a SimulationManager object. - - :param saves_dir: Directory in which the simulation state of a paused - simulation should be stored - :param results_dir: Directory in which the results of the simulation - should be stored - """ - self._de_serializer = SimulationDeSerializer(saves_dir, results_dir) - - self._simulator = None - self._sim_name = None - self._metadata = {"duration": 0} - self._sim_start_time = None - - def _sim_configured(self) -> bool: - """Check whether 'configure_simulation()' has been called.""" - return (self._simulator is not None) and ( - self._sim_name is not None) and ( - self._metadata is not None) - - def configure_simulation(self, simulator: typing.Any, name: str, - additional_metadata: dict = {}) -> None: - """Configure a new simulation.""" - self._simulator = simulator - self._sim_name = name - self._metadata["name"] = name - self._metadata["platform"] = platform.platform() - self._metadata.update(additional_metadata) - - def get_unfinished(self) -> typing.List[str]: - """Get a list of names of all present unfinished simulations.""" - return self._de_serializer.get_unfinished_sims() - - def load_unfinished(self, sim_name: str) -> None: - """Load the state of an unfinished simulation form its savefile. - - Warning: This function deletes the savefile after loading. - """ - assert self._de_serializer.unfinished_sim_present(sim_name) - - self._sim_name = sim_name - self._simulator, self._metadata = self._de_serializer.read_state( - sim_name) - - self._de_serializer.remove_unfinished_sim(sim_name) - - # TODO: Metadata is being written twice here. Should save_results() also - # save the metadata? - def _exit_gracefully(self, *args) -> None: - """Handler called when the program is interrupted. Pauses and saves - the currently running simulation.""" - if self._sim_configured(): - self._simulator.stop() - - self._metadata["end_time"] = f"{datetime.now(tz=None)}" - self._metadata["duration"] \ - += timeit.default_timer() - self._sim_start_time - - self._de_serializer.save_state(self._simulator, self._sim_name, - self._metadata) - self._de_serializer.save_results(self._simulator, self._sim_name, - self._metadata) - - exit() - - def simulate(self) -> None: - """Start the simulation. This is a blocking call.""" - assert self._sim_configured() - - try: - self._sim_start_time = timeit.default_timer() - - self._simulator.start_or_continue() - - self._metadata["end_time"] = f"{datetime.now(tz=None)}" - self._metadata["duration"] \ - += timeit.default_timer() - self._sim_start_time - - self._de_serializer.save_results(self._simulator, self._sim_name, - self._metadata) - except KeyboardInterrupt: - self._exit_gracefully() - - def get_current_results(self) -> pd.DataFrame: - return self._simulator.current_results diff --git a/sw/python/utility/simulation/simulators.py b/sw/python/utility/simulation/simulators.py deleted file mode 100644 index 6f82984..0000000 --- a/sw/python/utility/simulation/simulators.py +++ /dev/null @@ -1,121 +0,0 @@ -import pandas as pd -import numpy as np -import typing -from tqdm import tqdm -from concurrent.futures import ProcessPoolExecutor, process, wait -from functools import partial -from multiprocessing import Lock - -from utility import noise - - -# TODO: Fix ProximalDecoder_Dynamic -# from cpp_modules.cpp_decoders import ProximalDecoder_Dynamic as -# ProximalDecoder - - -def count_bit_errors(d: np.array, d_hat: np.array) -> int: - """Count the number of wrong bits in a decoded codeword. - - :param d: Originally sent data - :param d_hat: Received data - :return: Number of bit errors - """ - return np.sum(d != d_hat) - - -class HashableDict: - """Class behaving like an immutable dict. More importantly it is - hashable and thus usable as a key type for another dict.""" - - def __init__(self, data_dict): - assert (isinstance(data_dict, dict)) - for key, val in data_dict.items(): - self.__dict__[key] = val - - def __getitem__(self, item): - return self.__dict__[item] - - def __str__(self): - return str(self.__dict__) - - -class GenericMultithreadedSimulator: - def __init__(self, max_workers=8): - self._format_func = None - self._task_func = None - self._task_params = None - self._max_workers = max_workers - - self._results = {} - self._executor = None - - @property - def task_params(self): - return self._task_params - - @task_params.setter - def task_params(self, sim_params): - self._task_params = {HashableDict(iteration_params): iteration_params - for iteration_params in sim_params} - - @property - def task_func(self): - return self._task_func - - @task_func.setter - def task_func(self, func): - self._task_func = func - - @property - def format_func(self): - return self._format_func - - @format_func.setter - def format_func(self, func): - self._format_func = func - - def start_or_continue(self): - assert self._task_func is not None - assert self._task_params is not None - assert self._format_func is not None - - self._executor = ProcessPoolExecutor(max_workers=self._max_workers) - - with tqdm(total=(len(self._task_params)), leave=False) as pbar: - def done_callback(key, f): - try: - pbar.update(1) - self._results[key] = f.result() - del self._task_params[key] - except process.BrokenProcessPool: - # This exception is thrown when the program is - # prematurely stopped with a KeyboardInterrupt - pass - - futures = [] - - for key, params in list(self._task_params.items()): - future = self._executor.submit(self._task_func, params) - future.add_done_callback(partial(done_callback, key)) - futures.append(future) - - self._executor.shutdown(wait=True, cancel_futures=False) - - def stop(self): - assert self._executor is not None, "The simulation has to be started" \ - " before it can be stopped" - self._executor.shutdown(wait=True, cancel_futures=True) - - @property - def current_results(self): - return self._format_func(self._results) - - def __getstate__(self): - state = self.__dict__.copy() - state["_executor"] = None - return state - - def __setstate__(self, state): - self.__dict__.update(state) - self._executor = ProcessPoolExecutor() diff --git a/sw/python/utility/test/__init__.py b/sw/python/utility/test/__init__.py deleted file mode 100644 index 2f312a6..0000000 --- a/sw/python/utility/test/__init__.py +++ /dev/null @@ -1 +0,0 @@ -"""This package contains unit tests.""" diff --git a/sw/python/utility/test/test_proximal.py b/sw/python/utility/test/test_proximal.py deleted file mode 100644 index 650b0e6..0000000 --- a/sw/python/utility/test/test_proximal.py +++ /dev/null @@ -1,72 +0,0 @@ -import unittest -import numpy as np -from decoders import proximal - - -class CheckParityTestCase(unittest.TestCase): - """Test case for the check_parity function.""" - - def test_check_parity(self): - # Hamming(7,4) code - G = np.array([[1, 1, 1, 0, 0, 0, 0], - [1, 0, 0, 1, 1, 0, 0], - [0, 1, 0, 1, 0, 1, 0], - [1, 1, 0, 1, 0, 0, 1]]) - H = np.array([[1, 0, 1, 0, 1, 0, 1], - [0, 1, 1, 0, 0, 1, 1], - [0, 0, 0, 1, 1, 1, 1]]) - R = np.array([[0, 0, 1, 0, 0, 0, 0], - [0, 0, 0, 0, 1, 0, 0], - [0, 0, 0, 0, 0, 1, 0], - [0, 0, 0, 0, 0, 0, 1]]) - - decoder = proximal.ProximalDecoder(H) - - d1 = np.array([0, 1, 0, 1]) - c1 = np.dot(np.transpose(G), d1) % 2 - - d2 = np.array([0, 0, 0, 0]) - c2 = np.dot(np.transpose(G), d2) % 2 - - d3 = np.array([1, 1, 1, 1]) - c3 = np.dot(np.transpose(G), d3) % 2 - - invalid_codeword = np.array([0, 1, 1, 0, 1, 1, 1]) - - self.assertEqual(decoder._check_parity(c1), True) - self.assertEqual(decoder._check_parity(c2), True) - self.assertEqual(decoder._check_parity(c3), True) - self.assertEqual(decoder._check_parity(invalid_codeword), False) - - -class GradientTestCase(unittest.TestCase): - """Test case for the calculation of the gradient of the - code-constraint-polynomial.""" - - def test_grad_h(self): - """Test the gradient of the code-constraint polynomial.""" - # Hamming(7,4) code - G = np.array([[1, 1, 1, 0, 0, 0, 0], - [1, 0, 0, 1, 1, 0, 0], - [0, 1, 0, 1, 0, 1, 0], - [1, 1, 0, 1, 0, 0, 1]]) - H = np.array([[1, 0, 1, 0, 1, 0, 1], - [0, 1, 1, 0, 0, 1, 1], - [0, 0, 0, 1, 1, 1, 1]]) - R = np.array([[0, 0, 1, 0, 0, 0, 0], - [0, 0, 0, 0, 1, 0, 0], - [0, 0, 0, 0, 0, 1, 0], - [0, 0, 0, 0, 0, 0, 1]]) - - x = np.array([1, 2, -1, -2, 2, 1, -1]) # Some randomly chosen vector - expected_grad_h = np.array( - [4, 26, -8, -36, 38, 28, -32]) # Manually calculated result - - decoder = proximal.ProximalDecoder(H) - grad_h = decoder._grad_h(x) - - self.assertEqual(np.array_equal(grad_h, expected_grad_h), True) - - -if __name__ == "__main__": - unittest.main() diff --git a/sw/python/utility/test/test_soft_decision.py b/sw/python/utility/test/test_soft_decision.py deleted file mode 100644 index d0c93d6..0000000 --- a/sw/python/utility/test/test_soft_decision.py +++ /dev/null @@ -1,55 +0,0 @@ -import unittest -import numpy as np -from decoders import maximum_likelihood - - -class CodewordGenerationTestCase(unittest.TestCase): - def test_codeword_generation(self): - """Test case for data word and code word generation.""" - # Hamming(7,4) code - G = np.array([[1, 1, 1, 0, 0, 0, 0], - [1, 0, 0, 1, 1, 0, 0], - [0, 1, 0, 1, 0, 1, 0], - [1, 1, 0, 1, 0, 0, 1]]) - H = np.array([[1, 0, 1, 0, 1, 0, 1], - [0, 1, 1, 0, 0, 1, 1], - [0, 0, 0, 1, 1, 1, 1]]) - - decoder = maximum_likelihood.MLDecoder(G, H) - - expected_datawords = np.array([[0, 0, 0, 0], - [0, 0, 0, 1], - [0, 0, 1, 0], - [0, 0, 1, 1], - [0, 1, 0, 0], - [0, 1, 0, 1], - [0, 1, 1, 0], - [0, 1, 1, 1], - [1, 0, 0, 0], - [1, 0, 0, 1], - [1, 0, 1, 0], - [1, 0, 1, 1], - [1, 1, 0, 0], - [1, 1, 0, 1], - [1, 1, 1, 0], - [1, 1, 1, 1]]) - - expected_codewords = np.array([[0, 0, 0, 0, 0, 0, 0], - [1, 1, 0, 1, 0, 0, 1], - [0, 1, 0, 1, 0, 1, 0], - [1, 0, 0, 0, 0, 1, 1], - [1, 0, 0, 1, 1, 0, 0], - [0, 1, 0, 0, 1, 0, 1], - [1, 1, 0, 0, 1, 1, 0], - [0, 0, 0, 1, 1, 1, 1], - [1, 1, 1, 0, 0, 0, 0], - [0, 0, 1, 1, 0, 0, 1], - [1, 0, 1, 1, 0, 1, 0], - [0, 1, 1, 0, 0, 1, 1], - [0, 1, 1, 1, 1, 0, 0], - [1, 0, 1, 0, 1, 0, 1], - [0, 0, 1, 0, 1, 1, 0], - [1, 1, 1, 1, 1, 1, 1]]) - - self.assertEqual(np.array_equal(decoder._datawords, expected_datawords), True) - self.assertEqual(np.array_equal(decoder._codewords, expected_codewords), True) diff --git a/sw/python/utility/test/test_utility.py b/sw/python/utility/test/test_utility.py deleted file mode 100644 index 2a589ed..0000000 --- a/sw/python/utility/test/test_utility.py +++ /dev/null @@ -1,48 +0,0 @@ -import unittest -import numpy as np - -from utility import noise, codes - - -# TODO: Rewrite tests for new SNR calculation -class NoiseAmpFromSNRTestCase(unittest.TestCase): - """Test case for noise amplitude calculation.""" - - def test_get_noise_amp_from_SNR(self): - SNR1 = 0 - SNR2 = 3 - SNR3 = 20 - SNR4 = -20 - - var1 = noise.get_noise_variance_from_SNR(SNR1, n=8, k=8) - var2 = noise.get_noise_variance_from_SNR(SNR2, n=8, k=8) - var3 = noise.get_noise_variance_from_SNR(SNR3, n=8, k=8) - var4 = noise.get_noise_variance_from_SNR(SNR4, n=8, k=8) - - self.assertEqual(var1, 1 * 0.5) - self.assertAlmostEqual(var2, 0.5 * 0.5, places=2) - self.assertEqual(var3, 0.01 * 0.5) - self.assertEqual(var4, 100 * 0.5) - - -class CodesTestCase(unittest.TestCase): - """Tests relating to the 'codes' utilities.""" - - def test_get_systematic_H(self): - # Hamming(7,4) code - G = np.array([[1, 0, 0, 0, 0, 1, 1], - [0, 1, 0, 0, 1, 0, 1], - [0, 0, 1, 0, 1, 1, 0], - [0, 0, 0, 1, 1, 1, 1]]) - - expected_H = np.array([[0, 1, 1, 1, 1, 0, 0], - [1, 0, 1, 1, 0, 1, 0], - [1, 1, 0, 1, 0, 0, 1]]) - - H = codes.get_systematic_H(G) - - self.assertEqual(np.array_equal(expected_H, H), True) - - -if __name__ == '__main__': - unittest.main() diff --git a/sw/python/utility/test/test_visualization.py b/sw/python/utility/test/test_visualization.py deleted file mode 100644 index a668b77..0000000 --- a/sw/python/utility/test/test_visualization.py +++ /dev/null @@ -1,24 +0,0 @@ -import unittest -from utility import visualization - - -class NumRowsTestCase(unittest.TestCase): - def test_get_num_rows(self): - """Test case for number of row calculation.""" - - num_rows1 = visualization._get_num_rows(num_graphs=4, num_cols=3) - expected_rows1 = 2 - - num_rows2 = visualization._get_num_rows(num_graphs=5, num_cols=2) - expected_rows2 = 3 - - num_rows3 = visualization._get_num_rows(num_graphs=4, num_cols=4) - expected_rows3 = 1 - - num_rows4 = visualization._get_num_rows(num_graphs=4, num_cols=5) - expected_rows4 = 1 - - self.assertEqual(num_rows1, expected_rows1) - self.assertEqual(num_rows2, expected_rows2) - self.assertEqual(num_rows3, expected_rows3) - self.assertEqual(num_rows4, expected_rows4) diff --git a/sw/python/utility/visualization.py b/sw/python/utility/visualization.py deleted file mode 100644 index 46ab790..0000000 --- a/sw/python/utility/visualization.py +++ /dev/null @@ -1,75 +0,0 @@ -import seaborn as sns -import matplotlib.pyplot as plt -import pandas as pd -import typing -from itertools import chain -import math - - -def _get_num_rows(num_graphs: int, num_cols: int) -> int: - """Get the minimum number of rows needed to show a certain number of - graphs, given a certain number of columns. - - :param num_graphs: Number of graphs - :param num_cols: Number of columns - :return: Number of rows - """ - return math.ceil(num_graphs / num_cols) - - -# TODO: Handle number of graphs not nicely fitting into rows and columns -def plot_BERs(title: str, - data: typing.Sequence[ - typing.Tuple[str, pd.DataFrame, typing.Sequence[str]]], - num_cols: int = 3) -> plt.figure: - """This function creates a matplotlib figure containing a number of plots. - - The plots created are logarithmic and the scaling is adjusted to be - sensible for BER plots. - - :param title: Title of the figure - :param data: Sequence of tuples. Each tuple corresponds to a new plot and - is of the following form: [graph_title, pd.Dataframe, [line_label_1, - line_label2, ...]]. Each dataframe is assumed to have an "SNR" column - that is used as the x axis. - :param num_cols: Number of columns in which the graphs should be - arranged in the resulting figure - :return: Matplotlib figure - """ - # Determine layout and create figure - - num_graphs = len(data) - num_rows = _get_num_rows(num_graphs, num_cols) - - fig, axes = plt.subplots(num_rows, num_cols, - figsize=(num_cols * 4, num_rows * 4), - squeeze=False) - fig.suptitle(title) - - fig.subplots_adjust(left=0.1, - bottom=0.1, - right=0.9, - top=0.9, - wspace=0.3, - hspace=0.4) - - axes = list(chain.from_iterable(axes))[ - :num_graphs] # Flatten the 2d axes array - - # Populate axes - - for axis, (graph_title, df, labels) in zip(axes, data): - column_names = [column for column in df.columns.values.tolist() if - not column == "SNR"] - - for column, label in zip(column_names, labels): - sns.lineplot(ax=axis, data=df, x="SNR", y=column, label=label) - - axis.set_title(graph_title) - axis.set(yscale="log") - axis.set_xlabel("SNR") - axis.set_ylabel("BER") - axis.set_yticks([10e-5, 10e-4, 10e-3, 10e-2, 10e-1, 10e0]) - axis.legend() - - return fig