@classmethod
def decipher(cls, cyphered):
    """
        Reverse engineered version of the part of the script
        http://www.nonograms.org/js/nonogram.min.059.js
        that produces a nonogram solution for given cyphered solution
        (it can be found in puzzle HTML in the form 'var d=[...]').
        """
    x = cyphered[1]
    width = x[0] % x[3] + x[1] % x[3] - x[2] % x[3]
    x = cyphered[2]
    height = x[0] % x[3] + x[1] % x[3] - x[2] % x[3]
    x = cyphered[3]
    colors_number = x[0] % x[3] + x[1] % x[3] - x[2] % x[3]
    colors = []
    x = cyphered[4]
    for i in range(colors_number):
        color_x = cyphered[i + 5]
        a = color_x[0] - x[1]
        b = color_x[1] - x[0]
        c = color_x[2] - x[3]
        rgb = hex(a + 256)[3:] + hex((b + 256 << 8) + c)[3:]
        colors.append(rgb)
    solution = [([0] * width) for _ in range(height)]
    a = colors_number + 5
    x = cyphered[a]
    solution_size = x[0] % x[3] * (x[0] % x[3]) + x[1] % x[3] * 2 + x[2] % x[3]
    x = cyphered[a + 1]
    for i in range(solution_size):
        y = cyphered[a + 2 + i]
        vv = y[0] - x[0] - 1
        for j in range(y[1] - x[1]):
            v = j + vv
            solution[y[3] - x[3] - 1][v] = y[2] - x[2]
    return [colors, solution]
