adding classical Reed-Solomon and BCH codes to the ECC Module

Adding Reed Solomon codes to the ECC Module
Adding the tests for the reed module

TODO: convert Generator Matrix for Reed Muller codes to Parity check Matrix
Add proper references
Edit:
Maybe the todo task is not required since in the literature, RS codes are defined in by generating their generator matrix.
Why RS codes?
Reed Solomon codes are important subroutines for advanced Quantum codes, this subroutine is going to be helpful when defining advanced QECCs. This PR is based to address that goal.

Classical Reed-Solomon codes are standardly defined in terms of generating their generator matrix, so added a function for generator matrix and also added a generator_matrix function in the ECC.jl

For documentation, these resources for consultation :

https://codyplanteen.com/assets/rs/gf256_prim.pdf
https://codyplanteen.com/notes/rs
https://core.ac.uk/download/pdf/16697418.pdf

More specifically, Reed-Solomon codes: RS(255, 223) is the common instance that is used in many places

Is this able to generate all RS codes or is there some limitation on the size? It seems 255 is hardcodded as the largest number of physical bits possible.
If I understand correctly, an RS code is unique defined by three integers that have to obey k<n<q (encoded message size, physical message size, and the order of the group we use to generate the code). q has to also obey q = 2^p.
Here q is fixed to 256 so only a particular set of RS codes is available, right?

Is this able to generate all RS codes or is there some limitation on the size? It seems 255 is hardcodded as the largest number of physical bits possible.

Nope, this is only one instance of the ReedSolomon codes namely RS(255, 233). This can be easily extended to include all RS codes though

I would like to refer a youtube lecture for consultation, That really helped me in understanding math and concept of ReedSolomon codes for consulation when adding papers. Is it okay to add it in the docstring along with papers ?
Link: https://youtu.be/K26Ssr8H3ec?si=DOai-gnjveQMaq-p (Pedagogical lecture)

Improvements:

I have added three helper functions that people can use to play with RS codes. We are only concerned with generator polynomial, but for pedagogical purposes, one can create a custom message polynomial , and then corresponding parity check polynomial and codeword polynomials.
Added all known examples in literature for Reed Solmon codes for testing purposes.
using only Nemo for generation of Reed-Solomon codes

Sorry for four pushes instead of one.

Improvements:

Adding classical BCH codes as well. These codes are fully implemented in Nemo as well.
Tested the universal property of BCH codes as well!
Tested locally as well.

It is impressive that the BCHs are also added now!
Just a quick advice on structuring PRs like this to make it easier to review. Here for instances, BCH is something sufficiently separate from the original contribution. It is a good idea to split such things into two PRs that can depend on each other, something like:
> git checkout -b first_contribution # create a branch for the initial work
> ... do all the implementation work and local testing
> git add .
> git commit -m "implementing first contribution"
> git push # make a pull request
> git branch -b second_contribution # create a branch on top of your current contribution
> ... do all the implementation work and local testing for the second contribution
> git add .
> git commit -m "implementing second contribution that depends on first contribution"
> git push # make a second pull request that depends on the first pull request being merged

This makes reviewing drastically easier as the reviewer needs to keep only one thing in their head.  But the contributor needs to be careful to make sure that modifications they make to the first PR get carried over (they need to rebase the second one on top of the first one occasionally).
No need to make any such changes here. Just a note for future reference.

No need to make any such changes here. Just a note for future reference.

Dear Professor, Thank you for this advice and new information! I will keep this in mind for future reference.

Dear Prof, I request your attention to review this one, so that I can fully focus on more abstract convolutional.
Also, if you don't mind, I want give these slides a mention in the docstring: they are so nice:  https://web.ntpu.edu.tw/~yshan/BCH_code.pdf

I will probably try to review the previous PR first, which wont happen until maybe the weekend.

Since this PR is fully implemented in Nemo with universal code properties proven,  it would be have been easy to review this PR first since convolutional is also based on Nemo.
Convolutional is extending the concepts used here, so I wanted to discuss one approach with you.
I will revisit Steane-Reed-Muller as well for verification and correctness with paper as well.

My apologies, since you are very occupied, I don't think I have the opportunity to discuss to seek some guidance the about Direct sums in convolutional case at this time. I will try to work on my end to polish convolutional PR as well!

Set proper bounds for BCH codes instead of arbitraty max 500 limit.
Some outputs
n: block length
t: t bit error that can be corrected, t is error correction capability

julia> generator_polynomial(BCH(15,2))
x^8 + x^7 + x^6 + x^4 + 1

julia> generator_polynomial(BCH(15,3))
x^10 + x^8 + x^5 + x^4 + x^2 + x + 1

julia> generator_polynomial(BCH(15,1))
x^4 + x + 1

julia> generator_polynomial(BCH(7,1))
x^3 + x + 1

julia> generator_polynomial(BCH(7,2))
x^6 + x^5 + x^4 + x^3 + x^2 + x + 1

julia> generator_polynomial(BCH(7,3))
x^6 + x^5 + x^4 + x^3 + x^2 + x + 1

julia> generator_polynomial(BCH(7,4))
x^7 + 1

BCH

Lowest value of n is 7 since lowest degree of finite field is r = 3. n is defined here as 2^r - 1.  Also, t must not be > 2^(r - 1) as well.

The double and triple BCH codes when t =2, and t =3 respectively for n = 15 can be verified from the outputs as well.
Their derivation is on Page4 and Page 5 of the slides here:  https://web.ntpu.edu.tw/~yshan/BCH_code.pdf

julia> generator_polynomial(BCH(15,2))
x^8 + x^7 + x^6 + x^4 + 1

julia> generator_polynomial(BCH(15,3))
x^10 + x^8 + x^5 + x^4 + x^2 + x + 1

BTW, Stefan, Happy World Quantum Day!

Dear @Krastanov I am looking forward to your comments and review!

something seems to be missing: how is one supposed to actually get a parity_check matrix here?

Reed Solomon Case
We can check the parity check polynomial. I have created two functions, namelyfunction _codeword_polynomial_rs(message, ck)and function _parity_check_polynomial_rs(n, k, x, message, gx) that takes the generator polynomial and then using the equations given in the Giesel paper, find out the corresponding parity check polynomial.
BCH case
This generates the generator polynomial, and then is method to get to parity check matrix. Kindly please see the https://web.ntpu.edu.tw/~yshan/BCH_code.pdf (Pages 14 to 16). Please let me know your insights.
Actually, I ask the same question myself when writing the codes and asked the Nemo developers this question as well. From their response, it seemed there is no clear cut way to go from rings to matrices as per their description. I will forward their exact response.

BCH case This generates the generator polynomial, and then is method to get to parity check matrix. Kindly please see the https://web.ntpu.edu.tw/~yshan/BCH_code.pdf (Pages 14 to 16). Please let me know your insights.

I do not really have much insight here, I have not worked with these codes before. That resource seems to list explicitly how to construct the parity_check matrix, so that is good. This library just needs the parity check matrix -- for now it is not trying to provide much more.

Page 14 talks about some alphas that define the code. Do you have them?
Page 17 talks about taking powers of alpha and then expressing them as binary column vectors. Can you do that?
It seems as long as these terms are defined, the operation is pretty easy, but I do not know what these terms are.
I will mark this as a draft for now, until the parity check matrices are figured out.

When I was working on these codes,  I asked the Nemo Developers this question:

It's nice that we can generate generator polynomials via these methods in nemo toolkit when working with FiniteFieldsIt would be great to have some guidance about how to utilize these g(x) in the matrix form.

Is there any way to represent these generator polynomials in the matrix form.  If I have them (gx) in matrix for, I can convert them to parity check matrices

In summary, I am not sure whether there is a method in Nemo or AA to actually write generator polynomial as full matrix form with coefficients being of the type FiniteField and Polynomials rings.
To get around this, we can do operations on the g(x), and then get to parity check polynomial that that is still in the datatypes of Fields and Rings, not a binary parity check matrix.
This workaround is used in the paper: https://ntrs.nasa.gov/api/citations/19900019023/downloads/19900019023.pdf section 3.3.2 . Here, the author construct the message polynomial, and then the parity check polynomial for Reed Solomon Codes. For this reason, the two helper functions are described.
So, in the Reed-Solomon case, we can define the parity check polynomial. But I am not sure how to convert the polynomial representation into the corresponding matrix representation since in the doc of Nemo, there is no method for this.
Your Question

Page 14 talks about some alphas that define the code. Do you have them?
The alphas are the roots of the generator polynomial. In the Reed Solomon case, the alphas are represented by a

For example:
g(x)  =  x^4 + a^6*x^3 + a^6*x^2 + a^3 + a`
g(x) = x^4 + (a^2 + 1)*x^3 + (a^2 + 1)*x^2 + (a + 1) + a `

Your Question

Page 17 talks about taking powers of alpha and then expressing them as binary column vectors. Can you do that?

My guess is that we can perform operations on g(x) of BCH to get the roots/zeros of the generator polynomial and multiply it with the message to get the parity check polynomial. But since the datatypes of alpha will be finite field and rings, of that form, my guess is that we can take the powers of the zeros of the polynomial.
I will investigate it further.

Page 17 talks about taking powers of alpha and then expressing them as binary column vectors. Can you do that?

My guess is that we can perform operations on g(x) of BCH to get the roots/zeros of the generator polynomial and multiply it with the message to get the parity check polynomial. But since the datatypes of alpha will be finite field and rings, of that form, my guess is that we can take the powers of the zeros of the polynomial.
I will investigate it further.

I have the impression it is much simpler than this. If you already have alpha and you can already compute powers of alpha, it seems the only thing left is to figure out what the following means:

If you already have alpha and you can already compute powers of alpha, it seems the only thing left is to figure out what the following means:

Sounds interesting, but doesn't this assumes that we have constructed H as a matrix not as a polynomial, right? And that H matrix has zeros of the generator polynomial g(x) as elements which are of the types FiniteField Element/Polynomial Ring Element.

So, here we see this H matrix, but the elements of the matrix are of the type  FiniteField Element/Polynomial Ring Element since we are working with polynomial rings/finite fields.
In Nemo/AA, since we can't represent the generator polynomial in a matrix form, so my question is that the above suggested method assumes we have the H in this matrix form after which we can perform the suggested operation, right?
In the Reed-Solomon case, we have alphas/zeros but Giesel handled the g(x) which is generator polynomial in polynomial notation, so after doing some operations such as taking mod of the polynomial which we can do in Nemo, we arrived at the parity check matrix.
Here, we are trying to represent/get the H in a matrix representation, but I believe, with Nemo, we can play with generator polynomials in polynomial representation.
Kindly please see Giesel https://ntrs.nasa.gov/api/citations/19900019023/downloads/19900019023.pdf section 3.3.2 and please let me know your thoughts. Thank you.
I will ponder about this as well. Thanks for your comments!

Sounds interesting, but doesn't this assumes that we have constructed H as a matrix not as a polynomial, right?

Not really. You can put whatever you wish in a two-axis array an call it a matrix. Sure, it will not have some fancy features that come from Nemo, but we do not want fancy features that come from Nemo, we just want a two-axis array of booleans.
Again, the one important thing to figure out is what does it mean to represent these alphas as binary vectors.
At the end, a parity check matrix for a classical code is a matrix of zeros and ones, not of fancier objects (although those fancier objects might be necessary to derive the matrix).
I skimmed through the Giesel reference, but I do not really know the topics they are discussing.

I agree. We have to leave the fancy stuff behind and come back to 1s and 0s!

Again, the one important thing to figure out is what does it mean to represent these alphas as binary vectors.

I figured it out! Actually, It's pretty simple. I am not sure that method is actually present in Nemo/AA  to convert polynomial notation into tuple notation, so I will ask demo devs and then we can easily do the following

Page 14 talks about some alphas that define the code. Do you have them?

Yes, it's done now.
> parity_checks(BCH(15,2))
FqFieldElem[1 a a^2 a^3 a + 1 a^2 + a a^3 + a^2 a^3 + a + 1 a^2 + 1 a^3 + a a^2 + a + 1 a^3 + a^2 + a a^3 + a^2 + a + 1 a^3 + a^2 + 1 a^3 + 1;
1 a a^2 a^3 a + 1 a^2 + a a^3 + a^2 a^3 + a + 1 a^2 + 1 a^3 + a a^2 + a + 1 a^3 + a^2 + a a^3 + a^2 + a + 1 a^3 + a^2 + 1 a^3 + 1]

Page 17 talks about taking powers of alpha and then expressing them as binary column vectors. Can you do that?

Yes, for the corresponding Field Element, we can extract their coefficient vector as Bool as at the end of the day, we want a Boolean Matrix.
What is shown below are m-tuples in column form corresponding to each Field Element from the fancy H matrix!
Bool[1 0 0 0]
Bool[0 1 0 0]
Bool[0 0 1 0]
Bool[0 0 0 1]
Bool[1 1 0 0]
Bool[0 1 1 0]
Bool[0 0 1 1]
Bool[1 1 0 1]
Bool[1 0 1 0]
Bool[0 1 0 1]
Bool[1 1 1 0]
Bool[0 1 1 1]
Bool[1 1 1 1]
Bool[1 0 1 1]
Bool[1 0 0 1]
Bool[1 0 0 0]
Bool[0 1 0 0]
Bool[0 0 1 0]
Bool[0 0 0 1]
Bool[1 1 0 0]
Bool[0 1 1 0]
Bool[0 0 1 1]
Bool[1 1 0 1]
Bool[1 0 1 0]
Bool[0 1 0 1]
Bool[1 1 1 0]
Bool[0 1 1 1]
Bool[1 1 1 1]
Bool[1 0 1 1]
Bool[1 0 0 1]

The parity check matrix of BCH code is now completed!
julia> parity_checks(BCH(15,2))
8×15 Matrix{Bool}:
 1  0  0  0  1  0  0  1  1  0  1  0  1  1  1
 0  1  0  0  1  1  0  1  0  1  1  1  1  0  0
 0  0  1  0  0  1  1  0  1  0  1  1  1  1  0
 0  0  0  1  0  0  1  1  0  1  0  1  1  1  1
 1  0  0  0  1  1  0  0  0  1  1  0  0  0  1
 0  0  0  1  1  0  0  0  1  1  0  0  0  1  1
 0  0  1  0  1  0  0  1  0  1  0  0  1  0  1
 0  1  1  1  1  0  1  1  1  1  0  1  1  1  1

That looks pretty exciting. I will read through the implementation when it exits draft status. I suspect I will have some requests for inline documentation/comments to make sure future readers know what is happening.

That looks pretty exciting. I will read through the implementation when it exits draft status. I suspect I will have some requests for inline documentation/comments to make sure future readers know what is happening.

Thanks. I am excited as well.
I would like to thank these slides( people from Iraq!), they also had a working example for BCH(15, 2) so the following parity check matrix H was given as working example:
Slides: https://uotechnology.edu.iq/dep-eee/lectures/4th/Communication/Information theory/2.pdf
Page 12
julia> parity_checks(BCH(15,2))
8×15 Matrix{Bool}:
 1  0  0  0  1  0  0  1  1  0  1  0  1  1  1
 0  1  0  0  1  1  0  1  0  1  1  1  1  0  0
 0  0  1  0  0  1  1  0  1  0  1  1  1  1  0
 0  0  0  1  0  0  1  1  0  1  0  1  1  1  1
 1  0  0  0  1  1  0  0  0  1  1  0  0  0  1
 0  0  0  1  1  0  0  0  1  1  0  0  0  1  1
 0  0  1  0  1  0  0  1  0  1  0  0  1  0  1
 0  1  1  1  1  0  1  1  1  1  0  1  1  1  1

Please checkout docstring/inline documentation for parity_checks for BCH code:
"""
H matrix (i.e. the parity-check matrix) of the BCH code is given as
1            a^1            a^2                   a^3             ...          a^(n - 1)
1         (a^3)^1          (a^3)^2            (a^3)^3             ...       (a^3)^(n - 1)
1         (a^5)^1          (a^5)^2            (a^5)^3             ...       (a^5)^((n - 1)
.                                                                                .
.                                                                                .
.                                                                                .
1       a^(2*t - 1)     a^(2*t - 1)^2      a^(2*t - 1)^3    ...       a^(2*t - 1)^(n -1)

Note that the entries of H are elements in GF(2^m). Each element in GF(2^m) can be represented by a w-tuple over GF(2). If each entry of H is replaced by its corresponding m-tuple over GF(2) arranged in column form, we obtain a binary parity check matrix for the code
"""

The output of parity_checks should be a binary matrix, not a matrix over some complicated field. Otherwise downstream users would not be able to use parity_checks in their software without special casing, which kinda defeats the purpose of having a pre-defined API. If you want to have this matrix-over-a-field function, it should have a different name (and potentially be private/unexported for now).

The output of parity_checks should be a binary matrix, not a matrix over some complicated field.

It is a binary matrix! The docstring is describing how to get to the binary matrix as done in the parity_checks code!

Noted!
I would suggest putting this in the docstring for the code type, not for the parity_check method -- it would be easier to find it there and it will avoid making it sound like the parity check is not binary.
Reword it slightly, maybe something like "the parity check matrix can be obtained from the following matrix over field elements, after each field element is expressed as a binary column vector".

Searching for binary check matrix method for Reed Solomon Codes:
In the following slides/papers/books, there is no mention about binary parity check matrix for Reed-Solomon codes. There is mention of non-binary parity check matrix though.  Most of these on the internet discuss generator polynomial approach and some discuss non-binary parity check matrix. These are the following:

https://math.stackexchange.com/questions/3723530/construct-a-reed-solomon-code-find-the-parity-check-matrix
https://web.ntpu.edu.tw/~yshan/RS_code.pdf
https://ericmoorhouse.org/handouts/reed_solomon.pdf
https://ntrs.nasa.gov/api/citations/19900019023/downloads/19900019023.pdf
https://www.math.tecnico.ulisboa.pt/~pmartins/CTC/CTC21Notes9.pdf
https://people.eecs.berkeley.edu/~venkatg/teaching/ECC-fall22/scribes/lecture05.pdf
https://books.google.com.pk/books?hl=en&lr=&id=3EK7EAAAQBAJ&oi=fnd&pg=PR13&dq=Reed+Solomon+codes&ots=wd3r6OuxEw&sig=8kQN9c-pMyDup01Sl0Z7fssBDFs&redir_esc=y#v=onepage&q=Reed Solomon codes&f=false
https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=3b30a902c329ca393daec6df94b862d786f176c1
http://masters.donntu.ru/2010/fknt/yuriev/library/article8.pdf

However, I found this paper titled "Reed–Solomon Codes and Binary Transmission"
Link: https://link.springer.com/chapter/10.1007/978-3-319-51103-0_7#:~:text=1 Introduction,highest possible minimum Hamming distance.
This seems expensive: As a practical example, we will consider the (256, 234, 23) extended RS code. Representing each  symbol as a binary 8 tuple the RS code becomes a (2048, 1872, 23) binary code.
Kindly please have a look at this paper when convenient. This paper says that RS codes are not suited for binary-channel. I think that's the reason why people don't discuss about their binary parity check matrices in the above [1-10] sources in pedagogical setting.
Please consider providing your thoughts before or after BCH review.

I will not be able to help with reading through these materials.
For what is worth, a (2048, 1872, 23)  binary code is not particularly large. It is normal to work with binary codes for size even up to 50_000.
This seems to have been marked for review. Is everything finished in it?

This seems to have been marked for review.

Thanks for your thoughts.  Just please have a tiny look at this paper: https://link.springer.com/chapter/10.1007/978-3-319-51103-0_7#:~:text=1 Introduction,highest possible minimum Hamming distance! Your insights could be valuable. All the other sources were provided for reference.

Is everything finished in it?
BCH is done. Now, I am moving onto parity_checks for RS codes. Would like to review BCH now or all at once? I marked it for review for BCH. Please let me know as you find comfortable

Generally I prefer to review completed PRs. That is pretty common in most projects.
It is normal to ask for feedback while something is a draft, but that is a pretty different dynamic from a final review, hence that distinction being useful.
It is also reasonable to split PRs in smaller pieces if you want each reviewed separately (that usually leads to faster reviews too and some projects have it as an explicit requirement).
For the moment I will turn this back into a draft. Re-request a review when it is ready for complete review (or split it into smaller PRs if you prefer).

Alright. No problem! Actually, I don't know how to split PRs into smaller ones, so let's go with complete review.
On a small note, Kindly please consider providing me a green signal/confirmation so that I can work on implementing these huge binary matrices! Have I selected the right paper? Is my approach right? are questions I am considering.
Link: : https://link.springer.com/chapter/10.1007/978-3-319-51103-0_7#:~:text=1 Introduction,highest possible minimum Hamming distance!

Regrettably, I am not an expert in these constructions. I do not know whether you have selected appropriate sources.

Is it okay to submit another PR for BCH code ? BCH is completed and ready for review! BCH code is very different from Reed Solomon code. Maybe it's better to have to different PRs.
This PR can be solely for the Reed-Solomon code, I will read the paper and relevant people in the coming days for the reed solomon case.

yes, an easy way to do that would be:
git checkout -b newbranchname
# delete all of the stuff you do not want in the new PR; I would suggest deleting the BCH stuff
git add .
git commit -m "some message"
git push # and make a new pull request
git checkout oldbranchname
# delete all of the stuff you do not want in the current PR; I would suggest deleting the non-BCH stuff
git add .
git commit -m "some message"
git push # and this pull request will become focused only on BCH stuff

The paper is reliable! I started reading the paper and found interesting points:
Excerpt from the paper:

Reed–Solomon codes are maximum distance separable (MDS) codes and have the highest possible minimum Hamming
distance. The codes have symbols from F_q with parameters (q - 1, k, q - k) .
They are not binary codes but frequently are used with q = 2^m , and so there is a mapping of residue classes of a primitive polynomial with binary coefficients and each element of  GF(2^m)  is represented as a binary m-tuple.

I think in the docstring I would have to mention all these details that since RS codes are inherently non-binary, we are mapping them to boolean field for Binary Transmission Process.

As per the paper, we expand these field matrices into binary to get parity check matrix! Nemo really powerful!
[a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2
a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3
a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4
a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1 a^2 + 1
a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a a^3 + a
a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2 a^4 + a^2
a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1 a^3 + a^2 + 1
a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a a^4 + a^3 + a
a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1 a^4 + 1
a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1 a^2 + a + 1
a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a a^3 + a^2 + a
a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2
a^4 + a^3 +a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1
a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a + 1
a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a + 1]

I did it! I followed the Springer Book/Paper.
I will set up proper docstring as here we also have a Field Matrix that gets expanded to Boolean Field!
println(H4)
Bool[1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0; 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0; 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0; 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0; 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1; 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 1 0 1 1 0 0 1 0 1 1 1 0 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 1 0 1 0 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 1 1 1 0 1 1 1 0 1 0 0 1 1 0 1 1 0 0 1 0; 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 1 0 1 1 0 0 1 0 1 1 1 0 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 1 0 1 0 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 1 1 1 0 1 1 1 0 1 0 0 1 1 0 1 1 0 0 1 0 0 1 0 0 1; 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 1 0 1 1 0 0 1 0 1 1 1 0 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 1 0 1 0 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 1 1 1 0 1 1 1 0 1 0 0 1 1 0 1 1 0 0 1 0 0 1 0 0 1 1 0 0 0 0; 0 0 0 1 0 0 0 0 0 1 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 1 0 1 1 0 0 1 0 1 1 1 0 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 1 0 1 0 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 1 1 1 0 1 1 1 0 1 0 0 1 1 0 1 1 0 0 1 0 0 1 0 0 1 1 0 0 0 0 0 1 0 0 0; 0 0 0 0 1 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 1 0 1 1 0 0 1 0 1 1 1 0 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 1 0 1 0 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 1 1 1 0 1 1 1 0 1 0 0 1 1 0 1 1 0 0 1 0 0 1 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0; 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 1 1 0 1 0 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 1 0 1 0 1 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 0 1 0 0 1 1 1 1 0 1 0; 0 1 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 1 0 1 0 1 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 0 1 0 0 1 1 1 1 0 1 0 1 0 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 1 1 0 1 0 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 0 1 0 1 1 0 1; 0 0 1 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 1 1 0 1 0 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 1 0 1 0 1 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 0 1 0 0 1 1 1 1 0 1 0 1 0 0 1 0; 0 0 0 1 0 1 0 1 0 0 0 0 1 0 1 0 1 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 0 1 0 0 1 1 1 1 0 1 0 1 0 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 1 1 0 1 0 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 0 1 0 1 1 0 1 0 1 0 0 1; 0 0 0 0 1 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 1 1 0 1 0 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 1 0 1 0 1 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 0 1 0 0 1 1 1 1 0 1 0 1 0 0 1 0 1 0 0 0 0; 1 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 1 1 0 1 1 1 0 0 1 0 1 1 1 1 1 0 0 1 0 0 1 1 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0 1 0 0 1 1 1 1 1 0 1 1 0 1 1 0 0 1 0 1 0 1 1 0 0 1 1; 0 1 0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0 1 0 0 1 1 1 1 1 0 1 1 0 1 1 0 0 1 0 1 0 1 1 0 0 1 1 0 1 1 0 1 1 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 1 1 0 1 1 1 0 0 1 0 1 1 1 1 1 0 0 1 0 0 1 1 0 1 1 1 1 0 1 1 1 0 1; 0 0 1 0 0 1 0 1 0 0 1 0 1 1 0 1 1 1 0 0 1 0 1 1 1 1 1 0 0 1 0 0 1 1 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0 1 0 0 1 1 1 1 1 0 1 1 0 1 1 0 0 1 0 1 0 1 1 0 0 1 1 0 1 1 0 1 1 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 0 1 0; 0 0 0 1 0 0 1 0 1 0 0 1 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 1 1 0 1 1 1 0 0 1 0 1 1 1 1 1 0 0 1 0 0 1 1 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0 1 0 0 1 1 1 1 1 0 1 1 0 1 1 0 0 1 0 1 0 1 1 0 0 1 1 0 1 1 0 1; 0 0 0 0 1 0 0 1 0 1 1 0 0 0 1 0 0 1 1 1 1 1 0 1 1 0 1 1 0 0 1 0 1 0 1 1 0 0 1 1 0 1 1 0 1 1 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 1 1 0 1 1 1 0 0 1 0 1 1 1 1 1 0 0 1 0 0 1 1 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 0; 1 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 1 1 1 0 1 1 0 1 1 0 0 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 1 0 0 1 1 1 1 1 0 0 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 1 0 1 1 1 1 1 0 0 0 1 0 1 0 1 1 1 1 0 1 0 1 0 0 1 0 0 0 1 0 0 0 1 0 1 1 1 1 0 0 1 1 1 1 1 0 1 1 0 0 1 1 1 1 0; 0 1 0 0 0 1 0 1 0 0 0 1 0 1 1 0 0 1 1 1 1 1 0 0 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 1 0 1 1 1 1 1 0 0 0 1 0 1 0 1 1 1 1 0 1 0 1 0 0 1 0 0 0 1 0 0 0 1 0 1 1 1 1 0 0 1 1 1 1 1 0 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 1 1 1 0 1 1 0 1 1 0 0 1 1 0 0 1 1 1 1; 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 1 0 1 1 1 1 1 0 0 0 1 0 1 0 1 1 1 1 0 1 0 1 0 0 1 0 0 0 1 0 0 0 1 0 1 1 1 1 0 0 1 1 1 1 1 0 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 1 1 1 0 1 1 0 1 1 0 0 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 1 0 0 1 1 1 1 1 0 0 1 0 0 0 1 1 1 0 0 1 1; 0 0 0 1 0 0 0 1 0 1 1 1 1 0 0 1 1 1 1 1 0 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 1 1 1 0 1 1 0 1 1 0 0 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 1 0 0 1 1 1 1 1 0 0 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 1 0 1 1 1 1 1 0 0 0 1 0 1 0 1 1 1 1 0 1; 0 0 0 0 1 1 0 1 1 0 0 1 1 1 0 1 1 0 1 1 0 0 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 1 0 0 1 1 1 1 1 0 0 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 1 0 1 1 1 1 1 0 0 0 1 0 1 0 1 1 1 1 0 1 0 1 0 0 1 0 0 0 1 0 0 0 1 0 1 1 1 1 0 0 1 1 1 1 1 0 1 1 0 0 1 1 1 1 0 1 1 0 1 0; 1 0 0 0 0 1 0 1 0 0 1 0 0 0 1 1 1 1 1 1 0 0 1 1 0 1 0 0 1 1 0 1 0 0 1 0 0 0 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 0 0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 1 0 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 0 0 1 1 0 1 0 0 1 0 0 0 0 1 0 1 0 1 1 1 0 1 1 0 0 1 1 0 1 0 1 1 1 0 1 0 0 1 0 0 0 0 1 0 1 0 1 1 1 0 0 1 1 0 1 1 0 0 0 1 1; 0 1 0 0 0 0 1 0 1 0 1 1 1 0 0 1 1 0 1 1 0 0 0 1 1 1 1 1 0 1 1 0 0 0 0 1 0 1 0 0 1 0 0 0 1 1 1 1 1 1 0 0 1 1 0 1 0 0 1 1 0 1 0 0 1 0 0 0 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 0 0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 1 0 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 0 0 1 1 0 1 0 0 1 0 0 0 0 1 0 1 0 1 1 1 0 1 1 0 0 1 1 0 1 0 1; 0 0 1 0 0 0 0 1 0 1 0 1 1 1 0 1 1 0 0 1 1 0 1 0 1 1 1 0 1 0 0 1 0 0 0 0 1 0 1 0 1 1 1 0 0 1 1 0 1 1 0 0 0 1 1 1 1 1 0 1 1 0 0 0 0 1 0 1 0 0 1 0 0 0 1 1 1 1 1 1 0 0 1 1 0 1 0 0 1 1 0 1 0 0 1 0 0 0 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 0 0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 1 0 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 0; 0 0 0 1 0 1 0 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 0 0 1 1 0 1 0 0 1 0 0 0 0 1 0 1 0 1 1 1 0 1 1 0 0 1 1 0 1 0 1 1 1 0 1 0 0 1 0 0 0 0 1 0 1 0 1 1 1 0 0 1 1 0 1 1 0 0 0 1 1 1 1 1 0 1 1 0 0 0 0 1 0 1 0 0 1 0 0 0 1 1 1 1 1 1 0 0 1 1 0 1 0 0 1 1 0 1 0 0 1 0 0 0 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 0 0 0 1 1 1 1; 0 0 0 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 0 0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 1 0 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 0 0 1 1 0 1 0 0 1 0 0 0 0 1 0 1 0 1 1 1 0 1 1 0 0 1 1 0 1 0 1 1 1 0 1 0 0 1 0 0 0 0 1 0 1 0 1 1 1 0 0 1 1 0 1 1 0 0 0 1 1 1 1 1 0 1 1 0 0 0 0 1 0 1 0 0 1 0 0 0 1 1 1 1 1 1 0 0 1 1 0 1 0 0 1 1; 1 0 0 0 0 0 1 0 1 0 0 1 1 1 0 1 1 0 0 0 0 1 1 1 1 0 1 0 0 1 1 0 1 0 0 1 1 1 0 0 1 1 0 0 1 1 1 1 1 0 1 0 0 1 0 0 0 0 0 1 1 0 0 0 1 1 1 0 1 1 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 0 1 0 0 0 1 0 0 1 0 1 1 0 1 0 1 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 0 1 0 0 1 1 1 0 1 1 0 0; 0 1 0 0 0 0 0 1 0 1 0 0 1 1 1 0 1 1 0 0 1 0 0 1 1 1 0 0 0 0 0 1 0 1 0 0 1 1 1 0 1 1 0 0 0 0 1 1 1 1 0 1 0 0 1 1 0 1 0 0 1 1 1 0 0 1 1 0 0 1 1 1 1 1 0 1 0 0 1 0 0 0 0 0 1 1 0 0 0 1 1 1 0 1 1 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 0 1 0 0 0 1 0 0 1 0 1 1 0 1 0 1 1 1 0 0 1 1 0; 0 0 1 0 0 1 0 1 1 0 1 0 1 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 0 1 0 0 1 1 1 0 1 1 0 0 1 0 0 1 1 1 0 0 0 0 0 1 0 1 0 0 1 1 1 0 1 1 0 0 0 0 1 1 1 1 0 1 0 0 1 1 0 1 0 0 1 1 1 0 0 1 1 0 0 1 1 1 1 1 0 1 0 0 1 0 0 0 0 0 1 1 0 0 0 1 1 1 0 1 1 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 0 0 0 1 1; 0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 0 1 0 0 0 1 0 0 1 0 1 1 0 1 0 1 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 0 1 0 0 1 1 1 0 1 1 0 0 1 0 0 1 1 1 0 0 0 0 0 1 0 1 0 0 1 1 1 0 1 1 0 0 0 0 1 1 1 1 0 1 0 0 1 1 0 1 0 0 1 1 1 0 0 1 1 0 0 1 1 1 1 1 0 1 0 0 1 0 0 0 0 0 1 1 0 0 0 1 1 1 0 1 1 1 0 1 0 1; 0 0 0 0 1 1 0 0 0 1 1 1 0 1 1 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 0 1 0 0 0 1 0 0 1 0 1 1 0 1 0 1 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 0 1 0 0 1 1 1 0 1 1 0 0 1 0 0 1 1 1 0 0 0 0 0 1 0 1 0 0 1 1 1 0 1 1 0 0 0 0 1 1 1 1 0 1 0 0 1 1 0 1 0 0 1 1 1 0 0 1 1 0 0 1 1 1 1 1 0; 1 0 0 0 0 0 0 1 0 1 1 0 1 1 1 0 0 0 1 1 0 1 1 0 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 0 1 0 0 1 1 0 1 0 0 0 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0 1 1 1 0 0 1 1 0 0 1 1 1 0 1 0 0 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 1 0 0 1 0 0 1 0 1 0 1 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 0 0 0 1 0 1 0 0 0 1 1 1 0 0 1; 0 1 0 0 0 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0 1 1 1 0 0 1 1 0 0 1 1 1 0 1 0 0 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 1 0 0 1 0 0 1 0 1 0 1 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 0 0 0 1 0 1 0 0 0 1 1 1 0 0 1 0 1 1 1 1 1 0 0 0 0 0 0 1 0 1 1 0 1 1 1 0 0 0 1 1 0 1 1 0 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 0; 0 0 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 1 0 0 1 0 0 1 0 1 0 1 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 0 0 0 1 0 1 0 0 0 1 1 1 0 0 1 0 1 1 1 1 1 0 0 0 0 0 0 1 0 1 1 0 1 1 1 0 0 0 1 1 0 1 1 0 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 0 1 0 0 1 1 0 1 0 0 0 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0 1 1 1 0 0 1 1 0 0; 0 0 0 1 0 1 0 0 0 1 1 1 0 0 1 0 1 1 1 1 1 0 0 0 0 0 0 1 0 1 1 0 1 1 1 0 0 0 1 1 0 1 1 0 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 0 1 0 0 1 1 0 1 0 0 0 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0 1 1 1 0 0 1 1 0 0 1 1 1 0 1 0 0 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 1 0 0 1 0 0 1 0 1 0 1 0 0 0 1 1 1 0 0 1 1 0; 0 0 0 0 1 1 1 1 0 0 1 1 0 0 0 1 0 0 1 1 0 1 0 0 0 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0 1 1 1 0 0 1 1 0 0 1 1 1 0 1 0 0 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 1 0 0 1 0 0 1 0 1 0 1 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 0 0 0 1 0 1 0 0 0 1 1 1 0 0 1 0 1 1 1 1 1 0 0 0 0 0 0 1 0 1 1 0 1 1 1 0 0 0 1 1; 1 0 0 0 0 1 0 1 1 0 1 1 0 1 1 0 1 1 1 1 0 1 0 0 0 0 1 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 0 0 1 0 0 0 1 1 1 0 0 0 1 1 1 0 1 0 0 0 1 0 1 1 1 0 0 0 1 1 0 0 1 1 0 1 0 0 0 0 0 1 0 1 1 1 0 0 0 1 1 0 0 1 1 0 1 1 0 1 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 1 0 0 1 0 1 0 1 0 1 1 1 1 0 1 0 1 0 1 0 0 1 0 0 1 0 1 1 1 1 1 1; 0 1 0 0 0 0 1 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 0 0 1 0 0 0 1 1 1 0 0 0 1 1 1 0 1 0 0 0 1 0 1 1 1 0 0 0 1 1 0 0 1 1 0 1 0 0 0 0 0 1 0 1 1 1 0 0 0 1 1 0 0 1 1 0 1 1 0 1 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 1 0 0 1 0 1 0 1 0 1 1 1 1 0 1 0 1 0 1 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 1 0 1 1 0 1 1 0 1 1; 0 0 1 0 0 1 0 0 0 1 1 1 0 0 0 1 1 1 0 1 0 0 0 1 0 1 1 1 0 0 0 1 1 0 0 1 1 0 1 0 0 0 0 0 1 0 1 1 1 0 0 0 1 1 0 0 1 1 0 1 1 0 1 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 1 0 0 1 0 1 0 1 0 1 1 1 1 0 1 0 1 0 1 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 1 0 1 1 0 1 1 0 1 1 0 1 1 1 1 0 1 0 0 0 0 1 0 1 1 1 1 0 0 1; 0 0 0 1 0 1 1 1 0 0 0 1 1 0 0 1 1 0 1 0 0 0 0 0 1 0 1 1 1 0 0 0 1 1 0 0 1 1 0 1 1 0 1 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 1 0 0 1 0 1 0 1 0 1 1 1 1 0 1 0 1 0 1 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 1 0 1 1 0 1 1 0 1 1 0 1 1 1 1 0 1 0 0 0 0 1 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 0 0 1 0 0 0 1 1 1 0 0 0; 0 0 0 0 1 0 1 1 1 0 0 0 1 1 0 0 1 1 0 1 1 0 1 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 1 0 0 1 0 1 0 1 0 1 1 1 1 0 1 0 1 0 1 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 1 0 1 1 0 1 1 0 1 1 0 1 1 1 1 0 1 0 0 0 0 1 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 0 0 1 0 0 0 1 1 1 0 0 0 1 1 1 0 1 0 0 0 1 0 1 1 1 0 0 0 1 1 0 0; 1 0 0 0 0 0 1 0 1 1 1 1 0 0 0 1 1 0 1 0 1 0 1 0 0 1 0 1 1 1 1 1 1 1 0 0 1 0 0 0 1 0 0 0 1 0 1 1 0 0 0 1 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1 1 1 1 0 0 1 0 0 1 1 1 0 0 0 0 1 1 0 1 0 0 1 0 0 0 1 0 1 1 1 0 1 1 1 0 0 1 1 0 0 0 1 0 0 1 1 1 0 0 0 0 1 1 0 1 0 0 1 1 0 1 1 0 1 1 0 0 1 1 1 1 0 1 0 0 0 0 1 0 0 1 1 1; 0 1 0 0 0 1 0 0 0 1 0 1 1 0 0 0 1 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1 1 1 1 0 0 1 0 0 1 1 1 0 0 0 0 1 1 0 1 0 0 1 0 0 0 1 0 1 1 1 0 1 1 1 0 0 1 1 0 0 0 1 0 0 1 1 1 0 0 0 0 1 1 0 1 0 0 1 1 0 1 1 0 1 1 0 0 1 1 1 1 0 1 0 0 0 0 1 0 0 1 1 1 1 0 1 0 1 1 0 0 0 0 0 1 0 1 1 1 1 0 0 0 1 1 0 1 0 1 0 1 0 0 1 0 1 1 1; 0 0 1 0 0 1 1 1 0 0 0 0 1 1 0 1 0 0 1 0 0 0 1 0 1 1 1 0 1 1 1 0 0 1 1 0 0 0 1 0 0 1 1 1 0 0 0 0 1 1 0 1 0 0 1 1 0 1 1 0 1 1 0 0 1 1 1 1 0 1 0 0 0 0 1 0 0 1 1 1 1 0 1 0 1 1 0 0 0 0 0 1 0 1 1 1 1 0 0 0 1 1 0 1 0 1 0 1 0 0 1 0 1 1 1 1 1 1 1 0 0 1 0 0 0 1 0 0 0 1 0 1 1 0 0 0 1 1 0 1 0 1 0 1 0 1 1 1 1 1; 0 0 0 1 0 0 1 1 1 0 0 0 0 1 1 0 1 0 0 1 1 0 1 1 0 1 1 0 0 1 1 1 1 0 1 0 0 0 0 1 0 0 1 1 1 1 0 1 0 1 1 0 0 0 0 0 1 0 1 1 1 1 0 0 0 1 1 0 1 0 1 0 1 0 0 1 0 1 1 1 1 1 1 1 0 0 1 0 0 0 1 0 0 0 1 0 1 1 0 0 0 1 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1 1 1 1 0 0 1 0 0 1 1 1 0 0 0 0 1 1 0 1 0 0 1 0 0 0 1 0 1 1 1 0 1 1; 0 0 0 0 1 0 0 1 1 1 1 0 1 0 1 1 0 0 0 0 0 1 0 1 1 1 1 0 0 0 1 1 0 1 0 1 0 1 0 0 1 0 1 1 1 1 1 1 1 0 0 1 0 0 0 1 0 0 0 1 0 1 1 0 0 0 1 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1 1 1 1 0 0 1 0 0 1 1 1 0 0 0 0 1 1 0 1 0 0 1 0 0 0 1 0 1 1 1 0 1 1 1 0 0 1 1 0 0 0 1 0 0 1 1 1 0 0 0 0 1 1 0 1 0 0 1 1 0 1 1 0 1 1 0 0 1; 1 0 0 0 0 1 0 0 0 1 0 0 1 1 0 0 1 0 0 1 0 1 0 1 1 0 1 1 0 0 1 0 0 1 0 1 0 1 1 0 1 1 0 0 0 0 1 1 0 1 0 0 1 0 1 1 1 0 0 1 1 1 0 1 0 0 1 0 1 0 1 1 0 1 1 1 1 1 0 1 1 0 1 0 0 1 1 1 1 1 1 0 0 1 1 0 0 0 0 1 1 0 1 1 1 0 1 1 1 1 0 0 0 1 0 0 0 1 1 1 1 1 1 1 0 0 0 1 0 0 0 1 1 1 0 1 0 1 0 1 0 1 0 0 0 1 1 1 0 0; 0 1 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 1 0 0 0 1 0 0 1 1 0 0 1 0 0 1 0 1 0 1 1 0 1 1 0 0 1 0 0 1 0 1 0 1 1 0 1 1 0 0 0 0 1 1 0 1 0 0 1 0 1 1 1 0 0 1 1 1 0 1 0 0 1 0 1 0 1 1 0 1 1 1 1 1 0 1 1 0 1 0 0 1 1 1 1 1 1 0 0 1 1 0 0 0 0 1 1 0 1 1 1 0 1 1 1 1 0 0 0 1 0 0 0 1 1 1 1 1 1 1 0 0 0 1 0 0 0 1 1 1 0; 0 0 1 0 0 0 1 1 1 0 1 0 1 0 1 0 1 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 1 0 0 0 1 0 0 1 1 0 0 1 0 0 1 0 1 0 1 1 0 1 1 0 0 1 0 0 1 0 1 0 1 1 0 1 1 0 0 0 0 1 1 0 1 0 0 1 0 1 1 1 0 0 1 1 1 0 1 0 0 1 0 1 0 1 1 0 1 1 1 1 1 0 1 1 0 1 0 0 1 1 1 1 1 1 0 0 1 1 0 0 0 0 1 1 0 1 1 1 0 1 1 1 1 0 0 0 1 0 0 0 1 1 1; 0 0 0 1 0 0 0 1 1 1 1 1 1 1 0 0 0 1 0 0 0 1 1 1 0 1 0 1 0 1 0 1 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 1 0 0 0 1 0 0 1 1 0 0 1 0 0 1 0 1 0 1 1 0 1 1 0 0 1 0 0 1 0 1 0 1 1 0 1 1 0 0 0 0 1 1 0 1 0 0 1 0 1 1 1 0 0 1 1 1 0 1 0 0 1 0 1 0 1 1 0 1 1 1 1 1 0 1 1 0 1 0 0 1 1 1 1 1 1 0 0 1 1 0 0 0 0 1 1 0 1 1 1; 0 0 0 0 1 1 0 1 1 1 0 1 1 1 1 0 0 0 1 0 0 0 1 1 1 1 1 1 1 0 0 0 1 0 0 0 1 1 1 0 1 0 1 0 1 0 1 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 1 0 0 0 1 0 0 1 1 0 0 1 0 0 1 0 1 0 1 1 0 1 1 0 0 1 0 0 1 0 1 0 1 1 0 1 1 0 0 0 0 1 1 0 1 0 0 1 0 1 1 1 0 0 1 1 1 0 1 0 0 1 0 1 0 1 1 0 1 1 1 1 1 0 1 1 0 1 0 0 1 1 1 1 1; 1 0 0 0 0 1 1 1 0 0 1 0 1 0 1 0 0 1 0 0 0 0 1 1 1 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 0 0 1 0 1 1 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 1 1 0 0 0 1 0 0 0 1 1 0 1 0 0 0 0 1 1 1 0 1 1 1 1 0 0 0 0 1 0 1 0 1 1 1 1 0 0 1 1 1 0 1 0 0 1 1 0 1 1 1 1 0 1 0 0 0 1 0 1 1 1 0 0 0 1 0 0 1 0 0 1 0 1 1; 0 1 0 0 0 0 1 1 1 0 1 1 1 1 0 0 0 0 1 0 1 0 1 1 1 1 0 0 1 1 1 0 1 0 0 1 1 0 1 1 1 1 0 1 0 0 0 1 0 1 1 1 0 0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 0 0 1 1 1 0 0 1 0 1 0 1 0 0 1 0 0 0 0 1 1 1 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 0 0 1 0 1 1 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 1 1 0 0 0 1; 0 0 1 0 0 0 0 1 1 1 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 0 0 1 0 1 1 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 1 1 0 0 0 1 0 0 0 1 1 0 1 0 0 0 0 1 1 1 0 1 1 1 1 0 0 0 0 1 0 1 0 1 1 1 1 0 0 1 1 1 0 1 0 0 1 1 0 1 1 1 1 0 1 0 0 0 1 0 1 1 1 0 0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 0 0 1 1 1 0 0; 0 0 0 1 0 1 0 1 1 1 1 0 0 1 1 1 0 1 0 0 1 1 0 1 1 1 1 0 1 0 0 0 1 0 1 1 1 0 0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 0 0 1 1 1 0 0 1 0 1 0 1 0 0 1 0 0 0 0 1 1 1 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 0 0 1 0 1 1 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 1 1 0 0 0 1 0 0 0 1 1 0 1 0 0 0 0 1 1 1 0; 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 0 0 1 0 1 1 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 1 1 0 0 0 1 0 0 0 1 1 0 1 0 0 0 0 1 1 1 0 1 1 1 1 0 0 0 0 1 0 1 0 1 1 1 1 0 0 1 1 1 0 1 0 0 1 1 0 1 1 1 1 0 1 0 0 0 1 0 1 1 1 0 0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 0 0 1 1 1 0 0 1 0 1 0 1 0 0 1 0 0 0 0 1 1 1; 1 0 0 0 0 0 1 1 1 0 0 1 1 1 1 1 0 1 0 0 1 1 0 0 1 1 0 0 1 0 1 0 0 0 1 1 0 1 0 1 0 0 0 1 0 1 1 1 1 1 1 1 0 1 0 1 0 1 1 0 0 0 1 1 0 0 1 0 0 0 0 0 1 1 1 1 0 0 1 1 0 1 0 1 0 1 1 0 0 0 0 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 0 0 0 1 1 1 0 1 1 0 1 1 0 1 0 1 0 1 1 0 0 0 1 1 0 0 1 0 0 1 0 1 1 1 1 1 1 0 1 0 0 1 0 1; 0 1 0 0 0 0 0 1 1 1 1 0 0 1 1 0 1 0 1 0 1 1 0 0 0 0 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 0 0 0 1 1 1 0 1 1 0 1 1 0 1 0 1 0 1 1 0 0 0 1 1 0 0 1 0 0 1 0 1 1 1 1 1 1 0 1 0 0 1 0 1 0 1 1 0 0 1 0 0 0 0 0 1 1 1 0 0 1 1 1 1 1 0 1 0 0 1 1 0 0 1 1 0 0 1 0 1 0 0 0 1 1 0 1 0 1 0 0 0 1 0 1 1 1 1 1 1 1 0 1 0 1 0 1 1 0; 0 0 1 0 0 1 0 1 1 1 1 1 1 0 1 0 0 1 0 1 0 1 1 0 0 1 0 0 0 0 0 1 1 1 0 0 1 1 1 1 1 0 1 0 0 1 1 0 0 1 1 0 0 1 0 1 0 0 0 1 1 0 1 0 1 0 0 0 1 0 1 1 1 1 1 1 1 0 1 0 1 0 1 1 0 0 0 1 1 0 0 1 0 0 0 0 0 1 1 1 1 0 0 1 1 0 1 0 1 0 1 1 0 0 0 0 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 0 0 0 1 1 1 0 1 1 0 1 1 0 1 0 1 0 1 1; 0 0 0 1 0 1 1 1 1 1 1 1 0 1 0 1 0 1 1 0 0 0 1 1 0 0 1 0 0 0 0 0 1 1 1 1 0 0 1 1 0 1 0 1 0 1 1 0 0 0 0 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 0 0 0 1 1 1 0 1 1 0 1 1 0 1 0 1 0 1 1 0 0 0 1 1 0 0 1 0 0 1 0 1 1 1 1 1 1 0 1 0 0 1 0 1 0 1 1 0 0 1 0 0 0 0 0 1 1 1 0 0 1 1 1 1 1 0 1 0 0 1 1 0 0 1 1 0 0 1 0 1 0 0 0 1; 0 0 0 0 1 1 1 0 1 1 0 1 1 0 1 0 1 0 1 1 0 0 0 1 1 0 0 1 0 0 1 0 1 1 1 1 1 1 0 1 0 0 1 0 1 0 1 1 0 0 1 0 0 0 0 0 1 1 1 0 0 1 1 1 1 1 0 1 0 0 1 1 0 0 1 1 0 0 1 0 1 0 0 0 1 1 0 1 0 1 0 0 0 1 0 1 1 1 1 1 1 1 0 1 0 1 0 1 1 0 0 0 1 1 0 0 1 0 0 0 0 0 1 1 1 1 0 0 1 1 0 1 0 1 0 1 1 0 0 0 0 1 0 0 1 1 1 1 0 0; 1 0 0 0 0 0 0 1 1 1 1 1 1 0 1 1 0 1 1 0 0 0 0 1 1 0 0 0 1 0 1 1 0 1 1 1 0 0 1 0 1 1 1 0 0 0 1 1 1 1 0 1 0 1 0 0 1 1 0 0 0 1 0 0 0 1 0 1 1 1 1 1 0 1 0 0 1 0 1 1 1 0 1 0 1 0 0 0 0 1 1 1 0 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 1 1 0 0 1 0 1 0 0 1 1 0 0 0 1 0 0 1 1 1 1 1 0 1 1 0 1 1 0 0 0 1 1 1 1 1 0 1 0 1 0 0; 0 1 0 0 0 1 0 1 1 1 1 1 0 1 0 0 1 0 1 1 1 0 1 0 1 0 0 0 0 1 1 1 0 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 1 1 0 0 1 0 1 0 0 1 1 0 0 0 1 0 0 1 1 1 1 1 0 1 1 0 1 1 0 0 0 1 1 1 1 1 0 1 0 1 0 0 1 1 0 0 0 1 0 0 0 0 0 0 1 1 1 1 1 1 0 1 1 0 1 1 0 0 0 0 1 1 0 0 0 1 0 1 1 0 1 1 1 0 0 1 0 1 1 1 0 0 0 1 1 1 1 0 1 0 1 0; 0 0 1 0 0 1 1 1 1 1 0 1 1 0 1 1 0 0 0 1 1 1 1 1 0 1 0 1 0 0 1 1 0 0 0 1 0 0 0 0 0 0 1 1 1 1 1 1 0 1 1 0 1 1 0 0 0 0 1 1 0 0 0 1 0 1 1 0 1 1 1 0 0 1 0 1 1 1 0 0 0 1 1 1 1 0 1 0 1 0 0 1 1 0 0 0 1 0 0 0 1 0 1 1 1 1 1 0 1 0 0 1 0 1 1 1 0 1 0 1 0 0 0 0 1 1 1 0 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 1 1 0 0 1 0 1; 0 0 0 1 0 1 1 0 1 1 1 0 0 1 0 1 1 1 0 0 0 1 1 1 1 0 1 0 1 0 0 1 1 0 0 0 1 0 0 0 1 0 1 1 1 1 1 0 1 0 0 1 0 1 1 1 0 1 0 1 0 0 0 0 1 1 1 0 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 1 1 0 0 1 0 1 0 0 1 1 0 0 0 1 0 0 1 1 1 1 1 0 1 1 0 1 1 0 0 0 1 1 1 1 1 0 1 0 1 0 0 1 1 0 0 0 1 0 0 0 0 0 0 1 1 1 1 1 1 0 1 1 0 1 1 0; 0 0 0 0 1 1 1 0 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 1 1 0 0 1 0 1 0 0 1 1 0 0 0 1 0 0 1 1 1 1 1 0 1 1 0 1 1 0 0 0 1 1 1 1 1 0 1 0 1 0 0 1 1 0 0 0 1 0 0 0 0 0 0 1 1 1 1 1 1 0 1 1 0 1 1 0 0 0 0 1 1 0 0 0 1 0 1 1 0 1 1 1 0 0 1 0 1 1 1 0 0 0 1 1 1 1 0 1 0 1 0 0 1 1 0 0 0 1 0 0 0 1 0 1 1 1 1 1 0 1 0 0 1 0 1 1; 1 0 0 0 0 1 0 1 1 1 0 1 1 0 1 1 1 1 0 0 1 0 0 1 1 1 0 1 1 0 1 0 1 0 1 1 0 1 0 0 0 1 1 0 0 0 0 1 0 0 1 1 0 1 1 0 1 0 0 1 0 0 1 1 1 1 1 0 1 0 1 0 0 0 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 0 1 0 0 0 1 1 1 1 1 1 0 0 1 0 0 1 1 1 0 1 1 1 0 1 0 1 0 1 1 1 1 1 1 0 0 1 0 1 0 0 0 1 1 0 0 0 0 1 0; 0 1 0 0 0 1 1 1 1 1 1 0 0 1 0 0 1 1 1 0 1 1 1 0 1 0 1 0 1 1 1 1 1 1 0 0 1 0 1 0 0 0 1 1 0 0 0 0 1 0 1 1 0 0 1 1 0 0 0 0 1 0 1 1 1 0 1 1 0 1 1 1 1 0 0 1 0 0 1 1 1 0 1 1 0 1 0 1 0 1 1 0 1 0 0 0 1 1 0 0 0 0 1 0 0 1 1 0 1 1 0 1 0 0 1 0 0 1 1 1 1 1 0 1 0 1 0 0 0 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 1 0 0 0 0 1; 0 0 1 0 0 1 1 0 1 1 0 1 0 0 1 0 0 1 1 1 1 1 0 1 0 1 0 0 0 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 0 1 0 0 0 1 1 1 1 1 1 0 0 1 0 0 1 1 1 0 1 1 1 0 1 0 1 0 1 1 1 1 1 1 0 0 1 0 1 0 0 0 1 1 0 0 0 0 1 0 1 1 0 0 1 1 0 0 0 0 1 0 1 1 1 0 1 1 0 1 1 1 1 0 0 1 0 0 1 1 1 0 1 1 0 1 0 1 0 1 1 0 1 0 0; 0 0 0 1 0 1 1 0 0 1 1 0 0 0 0 1 0 1 1 1 0 1 1 0 1 1 1 1 0 0 1 0 0 1 1 1 0 1 1 0 1 0 1 0 1 1 0 1 0 0 0 1 1 0 0 0 0 1 0 0 1 1 0 1 1 0 1 0 0 1 0 0 1 1 1 1 1 0 1 0 1 0 0 0 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 0 1 0 0 0 1 1 1 1 1 1 0 0 1 0 0 1 1 1 0 1 1 1 0 1 0 1 0 1 1 1 1 1 1 0 0 1 0 1 0; 0 0 0 0 1 1 1 0 0 0 0 1 0 0 0 1 1 1 1 1 1 0 0 1 0 0 1 1 1 0 1 1 1 0 1 0 1 0 1 1 1 1 1 1 0 0 1 0 1 0 0 0 1 1 0 0 0 0 1 0 1 1 0 0 1 1 0 0 0 0 1 0 1 1 1 0 1 1 0 1 1 1 1 0 0 1 0 0 1 1 1 0 1 1 0 1 0 1 0 1 1 0 1 0 0 0 1 1 0 0 0 0 1 0 0 1 1 0 1 1 0 1 0 0 1 0 0 1 1 1 1 1 0 1 0 1 0 0 0 1 0 1 1 1 1 0 0 1 0 1]

julia> println(H3)
FqFieldElem[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1; a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a; a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2 a^2; a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3 a^3; a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4 a^4; 1 a a^2 a^3 a^4 a^2 + 1 a^3 + a a^4 + a^2 a^3 + a^2 + 1 a^4 + a^3 + a a^4 + 1 a^2 + a + 1 a^3 + a^2 + a a^4 + a^3 + a^2 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a + 1 a^4 + a + 1 a + 1 a^2 + a a^3 + a^2 a^4 + a^3 a^4 + a^2 + 1 a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a a^4 + a^3 + 1 a^4 + a^2 + a + 1 a^3 + a + 1 a^4 + a^2 + a a^3 + 1; a a^2 a^3 a^4 a^2 + 1 a^3 + a a^4 + a^2 a^3 + a^2 + 1 a^4 + a^3 + a a^4 + 1 a^2 + a + 1 a^3 + a^2 + a a^4 + a^3 + a^2 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a + 1 a^4 + a + 1 a + 1 a^2 + a a^3 + a^2 a^4 + a^3 a^4 + a^2 + 1 a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a a^4 + a^3 + 1 a^4 + a^2 + a + 1 a^3 + a + 1 a^4 + a^2 + a a^3 + 1 a^4 + a; a^2 a^3 a^4 a^2 + 1 a^3 + a a^4 + a^2 a^3 + a^2 + 1 a^4 + a^3 + a a^4 + 1 a^2 + a + 1 a^3 + a^2 + a a^4 + a^3 + a^2 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a + 1 a^4 + a + 1 a + 1 a^2 + a a^3 + a^2 a^4 + a^3 a^4 + a^2 + 1 a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a a^4 + a^3 + 1 a^4 + a^2 + a + 1 a^3 + a + 1 a^4 + a^2 + a a^3 + 1 a^4 + a 1; a^3 a^4 a^2 + 1 a^3 + a a^4 + a^2 a^3 + a^2 + 1 a^4 + a^3 + a a^4 + 1 a^2 + a + 1 a^3 + a^2 + a a^4 + a^3 + a^2 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a + 1 a^4 + a + 1 a + 1 a^2 + a a^3 + a^2 a^4 + a^3 a^4 + a^2 + 1 a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a a^4 + a^3 + 1 a^4 + a^2 + a + 1 a^3 + a + 1 a^4 + a^2 + a a^3 + 1 a^4 + a 1 a; a^4 a^2 + 1 a^3 + a a^4 + a^2 a^3 + a^2 + 1 a^4 + a^3 + a a^4 + 1 a^2 + a + 1 a^3 + a^2 + a a^4 + a^3 + a^2 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a + 1 a^4 + a + 1 a + 1 a^2 + a a^3 + a^2 a^4 + a^3 a^4 + a^2 + 1 a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a a^4 + a^3 + 1 a^4 + a^2 + a + 1 a^3 + a + 1 a^4 + a^2 + a a^3 + 1 a^4 + a 1 a a^2; 1 a^2 a^4 a^3 + a a^3 + a^2 + 1 a^4 + 1 a^3 + a^2 + a a^4 + a^3 + a^2 + 1 a^4 + a^3 + a + 1 a + 1 a^3 + a^2 a^4 + a^2 + 1 a^4 + a^3 + a^2 + a a^4 + a^2 + a + 1 a^4 + a^2 + a a^4 + a a a^3 a^2 + 1 a^4 + a^2 a^4 + a^3 + a a^2 + a + 1 a^4 + a^3 + a^2 a^4 + a^3 + a^2 + a + 1 a^4 + a + 1 a^2 + a a^4 + a^3 a^3 + a^2 + a + 1 a^4 + a^3 + 1 a^3 + a + 1; a a^3 a^2 + 1 a^4 + a^2 a^4 + a^3 + a a^2 + a + 1 a^4 + a^3 + a^2 a^4 + a^3 + a^2 + a + 1 a^4 + a + 1 a^2 + a a^4 + a^3 a^3 + a^2 + a + 1 a^4 + a^3 + 1 a^3 + a + 1 a^3 + 1 1 a^2 a^4 a^3 + a a^3 + a^2 + 1 a^4 + 1 a^3 + a^2 + a a^4 + a^3 + a^2 + 1 a^4 + a^3 + a + 1 a + 1 a^3 + a^2 a^4 + a^2 + 1 a^4 + a^3 + a^2 + a a^4 + a^2 + a + 1 a^4 + a^2 + a; a^2 a^4 a^3 + a a^3 + a^2 + 1 a^4 + 1 a^3 + a^2 + a a^4 + a^3 + a^2 + 1 a^4 + a^3 + a + 1 a + 1 a^3 + a^2 a^4 + a^2 + 1 a^4 + a^3 + a^2 + a a^4 + a^2 + a + 1 a^4 + a^2 + a a^4 + a a a^3 a^2 + 1 a^4 + a^2 a^4 + a^3 + a a^2 + a + 1 a^4 + a^3 + a^2 a^4 + a^3 + a^2 + a + 1 a^4 + a + 1 a^2 + a a^4 + a^3 a^3 + a^2 + a + 1 a^4 + a^3 + 1 a^3 + a + 1 a^3 + 1; a^3 a^2 + 1 a^4 + a^2 a^4 + a^3 + a a^2 + a + 1 a^4 + a^3 + a^2 a^4 + a^3 + a^2 + a + 1 a^4 + a + 1 a^2 + a a^4 + a^3 a^3 + a^2 + a + 1 a^4 + a^3 + 1 a^3 + a + 1 a^3 + 1 1 a^2 a^4 a^3 + a a^3 + a^2 + 1 a^4 + 1 a^3 + a^2 + a a^4 + a^3 + a^2 + 1 a^4 + a^3 + a + 1 a + 1 a^3 + a^2 a^4 + a^2 + 1 a^4 + a^3 + a^2 + a a^4 + a^2 + a + 1 a^4 + a^2 + a a^4 + a; a^4 a^3 + a a^3 + a^2 + 1 a^4 + 1 a^3 + a^2 + a a^4 + a^3 + a^2 + 1 a^4 + a^3 + a + 1 a + 1 a^3 + a^2 a^4 + a^2 + 1 a^4 + a^3 + a^2 + a a^4 + a^2 + a + 1 a^4 + a^2 + a a^4 + a a a^3 a^2 + 1 a^4 + a^2 a^4 + a^3 + a a^2 + a + 1 a^4 + a^3 + a^2 a^4 + a^3 + a^2 + a + 1 a^4 + a + 1 a^2 + a a^4 + a^3 a^3 + a^2 + a + 1 a^4 + a^3 + 1 a^3 + a + 1 a^3 + 1 1; 1 a^3 a^3 + a a^4 + a^3 + a a^3 + a^2 + a a^4 + a^3 + a^2 + a + 1 a + 1 a^4 + a^3 a^4 + a^3 + a^2 + a a^3 + a + 1 a^4 + a a^2 a^2 + 1 a^3 + a^2 + 1 a^2 + a + 1 a^4 + a^3 + a^2 + 1 a^4 + a + 1 a^3 + a^2 a^3 + a^2 + a + 1 a^4 + a^2 + a + 1 a^3 + 1 a a^4 a^4 + a^2 a^4 + 1 a^4 + a^3 + a^2 a^4 + a^3 + a + 1 a^2 + a a^4 + a^2 + 1 a^4 + a^3 + 1; a a^4 a^4 + a^2 a^4 + 1 a^4 + a^3 + a^2 a^4 + a^3 + a + 1 a^2 + a a^4 + a^2 + 1 a^4 + a^3 + 1 a^4 + a^2 + a 1 a^3 a^3 + a a^4 + a^3 + a a^3 + a^2 + a a^4 + a^3 + a^2 + a + 1 a + 1 a^4 + a^3 a^4 + a^3 + a^2 + a a^3 + a + 1 a^4 + a a^2 a^2 + 1 a^3 + a^2 + 1 a^2 + a + 1 a^4 + a^3 + a^2 + 1 a^4 + a + 1 a^3 + a^2 a^3 + a^2 + a + 1 a^4 + a^2 + a + 1; a^2 a^2 + 1 a^3 + a^2 + 1 a^2 + a + 1 a^4 + a^3 + a^2 + 1 a^4 + a + 1 a^3 + a^2 a^3 + a^2 + a + 1 a^4 + a^2 + a + 1 a^3 + 1 a a^4 a^4 + a^2 a^4 + 1 a^4 + a^3 + a^2 a^4 + a^3 + a + 1 a^2 + a a^4 + a^2 + 1 a^4 + a^3 + 1 a^4 + a^2 + a 1 a^3 a^3 + a a^4 + a^3 + a a^3 + a^2 + a a^4 + a^3 + a^2 + a + 1 a + 1 a^4 + a^3 a^4 + a^3 + a^2 + a a^3 + a + 1; a^3 a^3 + a a^4 + a^3 + a a^3 + a^2 + a a^4 + a^3 + a^2 + a + 1 a + 1 a^4 + a^3 a^4 + a^3 + a^2 + a a^3 + a + 1 a^4 + a a^2 a^2 + 1 a^3 + a^2 + 1 a^2 + a + 1 a^4 + a^3 + a^2 + 1 a^4 + a + 1 a^3 + a^2 a^3 + a^2 + a + 1 a^4 + a^2 + a + 1 a^3 + 1 a a^4 a^4 + a^2 a^4 + 1 a^4 + a^3 + a^2 a^4 + a^3 + a + 1 a^2 + a a^4 + a^2 + 1 a^4 + a^3 + 1 a^4 + a^2 + a; a^4 a^4 + a^2 a^4 + 1 a^4 + a^3 + a^2 a^4 + a^3 + a + 1 a^2 + a a^4 + a^2 + 1 a^4 + a^3 + 1 a^4 + a^2 + a 1 a^3 a^3 + a a^4 + a^3 + a a^3 + a^2 + a a^4 + a^3 + a^2 + a + 1 a + 1 a^4 + a^3 a^4 + a^3 + a^2 + a a^3 + a + 1 a^4 + a a^2 a^2 + 1 a^3 + a^2 + 1 a^2 + a + 1 a^4 + a^3 + a^2 + 1 a^4 + a + 1 a^3 + a^2 a^3 + a^2 + a + 1 a^4 + a^2 + a + 1 a^3 + 1; 1 a^4 a^3 + a^2 + 1 a^3 + a^2 + a a^4 + a^3 + a + 1 a^3 + a^2 a^4 + a^3 + a^2 + a a^4 + a^2 + a a a^2 + 1 a^4 + a^3 + a a^4 + a^3 + a^2 a^4 + a + 1 a^4 + a^3 a^4 + a^3 + 1 a^3 + 1 a^2 a^3 + a a^4 + 1 a^4 + a^3 + a^2 + 1 a + 1 a^4 + a^2 + 1 a^4 + a^2 + a + 1 a^4 + a a^3 a^4 + a^2 a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^2 + a a^3 + a^2 + a + 1; a a^2 + 1 a^4 + a^3 + a a^4 + a^3 + a^2 a^4 + a + 1 a^4 + a^3 a^4 + a^3 + 1 a^3 + 1 a^2 a^3 + a a^4 + 1 a^4 + a^3 + a^2 + 1 a + 1 a^4 + a^2 + 1 a^4 + a^2 + a + 1 a^4 + a a^3 a^4 + a^2 a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^2 + a a^3 + a^2 + a + 1 a^3 + a + 1 1 a^4 a^3 + a^2 + 1 a^3 + a^2 + a a^4 + a^3 + a + 1 a^3 + a^2 a^4 + a^3 + a^2 + a; a^2 a^3 + a a^4 + 1 a^4 + a^3 + a^2 + 1 a + 1 a^4 + a^2 + 1 a^4 + a^2 + a + 1 a^4 + a a^3 a^4 + a^2 a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^2 + a a^3 + a^2 + a + 1 a^3 + a + 1 1 a^4 a^3 + a^2 + 1 a^3 + a^2 + a a^4 + a^3 + a + 1 a^3 + a^2 a^4 + a^3 + a^2 + a a^4 + a^2 + a a a^2 + 1 a^4 + a^3 + a a^4 + a^3 + a^2 a^4 + a + 1 a^4 + a^3 a^4 + a^3 + 1; a^3 a^4 + a^2 a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^2 + a a^3 + a^2 + a + 1 a^3 + a + 1 1 a^4 a^3 + a^2 + 1 a^3 + a^2 + a a^4 + a^3 + a + 1 a^3 + a^2 a^4 + a^3 + a^2 + a a^4 + a^2 + a a a^2 + 1 a^4 + a^3 + a a^4 + a^3 + a^2 a^4 + a + 1 a^4 + a^3 a^4 + a^3 + 1 a^3 + 1 a^2 a^3 + a a^4 + 1 a^4 + a^3 + a^2 + 1 a + 1 a^4 + a^2 + 1 a^4 + a^2 + a + 1; a^4 a^3 + a^2 + 1 a^3 + a^2 + a a^4 + a^3 + a + 1 a^3 + a^2 a^4 + a^3 + a^2 + a a^4 + a^2 + a a a^2 + 1 a^4 + a^3 + a a^4 + a^3 + a^2 a^4 + a + 1 a^4 + a^3 a^4 + a^3 + 1 a^3 + 1 a^2 a^3 + a a^4 + 1 a^4 + a^3 + a^2 + 1 a + 1 a^4 + a^2 + 1 a^4 + a^2 + a + 1 a^4 + a a^3 a^4 + a^2 a^2 + a + 1 a^4 + a^3 + a^2 + a + 1 a^2 + a a^3 + a^2 + a + 1 a^3 + a + 1; 1 a^2 + 1 a^4 + 1 a^4 + a^3 + a^2 + a + 1 a^3 + a^2 a^4 + a^3 + 1 a^4 + a a^4 a^4 + a^3 + a a^4 + a^3 + a^2 + 1 a^2 + a a^4 + a^3 + a^2 + a a^3 + 1 a^3 a^3 + a^2 + 1 a^4 + a^3 + a^2 a + 1 a^3 + a^2 + a + 1 a^4 + a^2 + a a^2 a^4 + a^2 a^3 + a^2 + a a^4 + a + 1 a^4 + a^2 + 1 a^3 + a + 1 a a^3 + a a^2 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3; a a^3 + a a^2 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 a^4 + a^2 + a + 1 1 a^2 + 1 a^4 + 1 a^4 + a^3 + a^2 + a + 1 a^3 + a^2 a^4 + a^3 + 1 a^4 + a a^4 a^4 + a^3 + a a^4 + a^3 + a^2 + 1 a^2 + a a^4 + a^3 + a^2 + a a^3 + 1 a^3 a^3 + a^2 + 1 a^4 + a^3 + a^2 a + 1 a^3 + a^2 + a + 1 a^4 + a^2 + a a^2 a^4 + a^2 a^3 + a^2 + a a^4 + a + 1 a^4 + a^2 + 1; a^2 a^4 + a^2 a^3 + a^2 + a a^4 + a + 1 a^4 + a^2 + 1 a^3 + a + 1 a a^3 + a a^2 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 a^4 + a^2 + a + 1 1 a^2 + 1 a^4 + 1 a^4 + a^3 + a^2 + a + 1 a^3 + a^2 a^4 + a^3 + 1 a^4 + a a^4 a^4 + a^3 + a a^4 + a^3 + a^2 + 1 a^2 + a a^4 + a^3 + a^2 + a a^3 + 1 a^3 a^3 + a^2 + 1 a^4 + a^3 + a^2 a + 1 a^3 + a^2 + a + 1; a^3 a^3 + a^2 + 1 a^4 + a^3 + a^2 a + 1 a^3 + a^2 + a + 1 a^4 + a^2 + a a^2 a^4 + a^2 a^3 + a^2 + a a^4 + a + 1 a^4 + a^2 + 1 a^3 + a + 1 a a^3 + a a^2 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 a^4 + a^2 + a + 1 1 a^2 + 1 a^4 + 1 a^4 + a^3 + a^2 + a + 1 a^3 + a^2 a^4 + a^3 + 1 a^4 + a a^4 a^4 + a^3 + a a^4 + a^3 + a^2 + 1 a^2 + a a^4 + a^3 + a^2 + a; a^4 a^4 + a^3 + a a^4 + a^3 + a^2 + 1 a^2 + a a^4 + a^3 + a^2 + a a^3 + 1 a^3 a^3 + a^2 + 1 a^4 + a^3 + a^2 a + 1 a^3 + a^2 + a + 1 a^4 + a^2 + a a^2 a^4 + a^2 a^3 + a^2 + a a^4 + a + 1 a^4 + a^2 + 1 a^3 + a + 1 a a^3 + a a^2 + a + 1 a^4 + a^3 + a + 1 a^4 + a^3 a^4 + a^2 + a + 1 1 a^2 + 1 a^4 + 1 a^4 + a^3 + a^2 + a + 1 a^3 + a^2 a^4 + a^3 + 1; 1 a^3 + a a^3 + a^2 + a a + 1 a^4 + a^3 + a^2 + a a^4 + a a^2 + 1 a^2 + a + 1 a^4 + a + 1 a^3 + a^2 + a + 1 a^3 + 1 a^4 a^4 + 1 a^4 + a^3 + a + 1 a^4 + a^2 + 1 a^4 + a^2 + a a^3 a^4 + a^3 + a a^4 + a^3 + a^2 + a + 1 a^4 + a^3 a^3 + a + 1 a^2 a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^3 + a^2 a^4 + a^2 + a + 1 a a^4 + a^2 a^4 + a^3 + a^2 a^2 + a; a a^4 + a^2 a^4 + a^3 + a^2 a^2 + a a^4 + a^3 + 1 1 a^3 + a a^3 + a^2 + a a + 1 a^4 + a^3 + a^2 + a a^4 + a a^2 + 1 a^2 + a + 1 a^4 + a + 1 a^3 + a^2 + a + 1 a^3 + 1 a^4 a^4 + 1 a^4 + a^3 + a + 1 a^4 + a^2 + 1 a^4 + a^2 + a a^3 a^4 + a^3 + a a^4 + a^3 + a^2 + a + 1 a^4 + a^3 a^3 + a + 1 a^2 a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^3 + a^2; a^2 a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^3 + a^2 a^4 + a^2 + a + 1 a a^4 + a^2 a^4 + a^3 + a^2 a^2 + a a^4 + a^3 + 1 1 a^3 + a a^3 + a^2 + a a + 1 a^4 + a^3 + a^2 + a a^4 + a a^2 + 1 a^2 + a + 1 a^4 + a + 1 a^3 + a^2 + a + 1 a^3 + 1 a^4 a^4 + 1 a^4 + a^3 + a + 1 a^4 + a^2 + 1 a^4 + a^2 + a a^3 a^4 + a^3 + a a^4 + a^3 + a^2 + a + 1 a^4 + a^3; a^3 a^4 + a^3 + a a^4 + a^3 + a^2 + a + 1 a^4 + a^3 a^3 + a + 1 a^2 a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^3 + a^2 a^4 + a^2 + a + 1 a a^4 + a^2 a^4 + a^3 + a^2 a^2 + a a^4 + a^3 + 1 1 a^3 + a a^3 + a^2 + a a + 1 a^4 + a^3 + a^2 + a a^4 + a a^2 + 1 a^2 + a + 1 a^4 + a + 1 a^3 + a^2 + a + 1 a^3 + 1 a^4 a^4 + 1 a^4 + a^3 + a + 1 a^4 + a^2 + 1; a^4 a^4 + 1 a^4 + a^3 + a + 1 a^4 + a^2 + 1 a^4 + a^2 + a a^3 a^4 + a^3 + a a^4 + a^3 + a^2 + a + 1 a^4 + a^3 a^3 + a + 1 a^2 a^3 + a^2 + 1 a^4 + a^3 + a^2 + 1 a^3 + a^2 a^4 + a^2 + a + 1 a a^4 + a^2 a^4 + a^3 + a^2 a^2 + a a^4 + a^3 + 1 1 a^3 + a a^3 + a^2 + a a + 1 a^4 + a^3 + a^2 + a a^4 + a a^2 + 1 a^2 + a + 1 a^4 + a + 1 a^3 + a^2 + a + 1; 1 a^4 + a^2 a^4 + a^3 + a^2 + 1 a^4 + a^3 a^4 + a^2 + a a^4 a^2 + a + 1 a + 1 a^4 + a^3 + 1 a a^3 + a^2 + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^2 + 1 a^3 + 1 a^2 + 1 a^3 + a^2 + a a^2 + a a^4 + a^2 + a + 1 a^2 a^4 + a^3 + a a^4 + a^3 + a + 1 a^3 + a^2 + a + 1 a^4 + a a^3 + a a^4 + a^3 + a^2 a^3 + a^2 a^3 + a + 1 a^3 a^4 + 1 a^4 + a + 1; a a^3 + a^2 + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^2 + 1 a^3 + 1 a^2 + 1 a^3 + a^2 + a a^2 + a a^4 + a^2 + a + 1 a^2 a^4 + a^3 + a a^4 + a^3 + a + 1 a^3 + a^2 + a + 1 a^4 + a a^3 + a a^4 + a^3 + a^2 a^3 + a^2 a^3 + a + 1 a^3 a^4 + 1 a^4 + a + 1 a^4 + a^3 + a^2 + a 1 a^4 + a^2 a^4 + a^3 + a^2 + 1 a^4 + a^3 a^4 + a^2 + a a^4 a^2 + a + 1 a + 1; a^2 a^4 + a^3 + a a^4 + a^3 + a + 1 a^3 + a^2 + a + 1 a^4 + a a^3 + a a^4 + a^3 + a^2 a^3 + a^2 a^3 + a + 1 a^3 a^4 + 1 a^4 + a + 1 a^4 + a^3 + a^2 + a 1 a^4 + a^2 a^4 + a^3 + a^2 + 1 a^4 + a^3 a^4 + a^2 + a a^4 a^2 + a + 1 a + 1 a^4 + a^3 + 1 a a^3 + a^2 + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^2 + 1 a^3 + 1 a^2 + 1 a^3 + a^2 + a a^2 + a; a^3 a^4 + 1 a^4 + a + 1 a^4 + a^3 + a^2 + a 1 a^4 + a^2 a^4 + a^3 + a^2 + 1 a^4 + a^3 a^4 + a^2 + a a^4 a^2 + a + 1 a + 1 a^4 + a^3 + 1 a a^3 + a^2 + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^2 + 1 a^3 + 1 a^2 + 1 a^3 + a^2 + a a^2 + a a^4 + a^2 + a + 1 a^2 a^4 + a^3 + a a^4 + a^3 + a + 1 a^3 + a^2 + a + 1 a^4 + a a^3 + a a^4 + a^3 + a^2 a^3 + a^2; a^4 a^2 + a + 1 a + 1 a^4 + a^3 + 1 a a^3 + a^2 + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^2 + 1 a^3 + 1 a^2 + 1 a^3 + a^2 + a a^2 + a a^4 + a^2 + a + 1 a^2 a^4 + a^3 + a a^4 + a^3 + a + 1 a^3 + a^2 + a + 1 a^4 + a a^3 + a a^4 + a^3 + a^2 a^3 + a^2 a^3 + a + 1 a^3 a^4 + 1 a^4 + a + 1 a^4 + a^3 + a^2 + a 1 a^4 + a^2 a^4 + a^3 + a^2 + 1 a^4 + a^3; 1 a^3 + a^2 + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a^2 + a a a^4 + a^3 + a a^4 + a + 1 a^4 + a^3 + 1 a^2 a^4 + 1 a + 1 a^4 + a^2 + a + 1 a^3 a^2 + a + 1 a^2 + a a^3 + a + 1 a^4 a^3 + a^2 + a a^3 + a^2 a^4 + a^2 + a a^2 + 1 a^4 + a^3 + a^2 a^4 + a^3 a^3 + 1 a^3 + a a^4 + a^3 + a^2 + 1 a^4 + a^2 + 1 a^4 + a a^4 + a^2 a^4 + a^3 + a^2 + a + 1; a a^4 + a^3 + a a^4 + a + 1 a^4 + a^3 + 1 a^2 a^4 + 1 a + 1 a^4 + a^2 + a + 1 a^3 a^2 + a + 1 a^2 + a a^3 + a + 1 a^4 a^3 + a^2 + a a^3 + a^2 a^4 + a^2 + a a^2 + 1 a^4 + a^3 + a^2 a^4 + a^3 a^3 + 1 a^3 + a a^4 + a^3 + a^2 + 1 a^4 + a^2 + 1 a^4 + a a^4 + a^2 a^4 + a^3 + a^2 + a + 1 a^3 + a^2 + a + 1 1 a^3 + a^2 + 1 a^4 + a^3 + a + 1; a^2 a^4 + 1 a + 1 a^4 + a^2 + a + 1 a^3 a^2 + a + 1 a^2 + a a^3 + a + 1 a^4 a^3 + a^2 + a a^3 + a^2 a^4 + a^2 + a a^2 + 1 a^4 + a^3 + a^2 a^4 + a^3 a^3 + 1 a^3 + a a^4 + a^3 + a^2 + 1 a^4 + a^2 + 1 a^4 + a a^4 + a^2 a^4 + a^3 + a^2 + a + 1 a^3 + a^2 + a + 1 1 a^3 + a^2 + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a^2 + a a a^4 + a^3 + a a^4 + a + 1; a^3 a^2 + a + 1 a^2 + a a^3 + a + 1 a^4 a^3 + a^2 + a a^3 + a^2 a^4 + a^2 + a a^2 + 1 a^4 + a^3 + a^2 a^4 + a^3 a^3 + 1 a^3 + a a^4 + a^3 + a^2 + 1 a^4 + a^2 + 1 a^4 + a a^4 + a^2 a^4 + a^3 + a^2 + a + 1 a^3 + a^2 + a + 1 1 a^3 + a^2 + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a^2 + a a a^4 + a^3 + a a^4 + a + 1 a^4 + a^3 + 1 a^2 a^4 + 1 a + 1; a^4 a^3 + a^2 + a a^3 + a^2 a^4 + a^2 + a a^2 + 1 a^4 + a^3 + a^2 a^4 + a^3 a^3 + 1 a^3 + a a^4 + a^3 + a^2 + 1 a^4 + a^2 + 1 a^4 + a a^4 + a^2 a^4 + a^3 + a^2 + a + 1 a^3 + a^2 + a + 1 1 a^3 + a^2 + 1 a^4 + a^3 + a + 1 a^4 + a^3 + a^2 + a a a^4 + a^3 + a a^4 + a + 1 a^4 + a^3 + 1 a^2 a^4 + 1 a + 1 a^4 + a^2 + a + 1 a^3 a^2 + a + 1 a^2 + a; 1 a^4 + a^3 + a a + 1 a^3 + a + 1 a^2 + 1 a^4 + a^3 + a^2 + 1 a^3 + a^2 + a + 1 a a^4 + 1 a^2 + a a^4 + a^2 + a a^3 + a a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a a^2 a^2 + a + 1 a^3 + a^2 a^3 + 1 a^4 + a^2 a^4 + a^3 + a + 1 a^4 + a^3 + 1 a^3 a^3 + a^2 + a a^4 + a^3 a^4 + a a^3 + a^2 + 1 a^4 + a + 1 a^4 + a^2 + a + 1 a^4 a^4 + a^3 + a^2; a a^4 + 1 a^2 + a a^4 + a^2 + a a^3 + a a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a a^2 a^2 + a + 1 a^3 + a^2 a^3 + 1 a^4 + a^2 a^4 + a^3 + a + 1 a^4 + a^3 + 1 a^3 a^3 + a^2 + a a^4 + a^3 a^4 + a a^3 + a^2 + 1 a^4 + a + 1 a^4 + a^2 + a + 1 a^4 a^4 + a^3 + a^2 a^4 + a^2 + 1 1 a^4 + a^3 + a a + 1 a^3 + a + 1 a^2 + 1 a^4 + a^3 + a^2 + 1; a^2 a^2 + a + 1 a^3 + a^2 a^3 + 1 a^4 + a^2 a^4 + a^3 + a + 1 a^4 + a^3 + 1 a^3 a^3 + a^2 + a a^4 + a^3 a^4 + a a^3 + a^2 + 1 a^4 + a + 1 a^4 + a^2 + a + 1 a^4 a^4 + a^3 + a^2 a^4 + a^2 + 1 1 a^4 + a^3 + a a + 1 a^3 + a + 1 a^2 + 1 a^4 + a^3 + a^2 + 1 a^3 + a^2 + a + 1 a a^4 + 1 a^2 + a a^4 + a^2 + a a^3 + a a^4 + a^3 + a^2 + a + 1; a^3 a^3 + a^2 + a a^4 + a^3 a^4 + a a^3 + a^2 + 1 a^4 + a + 1 a^4 + a^2 + a + 1 a^4 a^4 + a^3 + a^2 a^4 + a^2 + 1 1 a^4 + a^3 + a a + 1 a^3 + a + 1 a^2 + 1 a^4 + a^3 + a^2 + 1 a^3 + a^2 + a + 1 a a^4 + 1 a^2 + a a^4 + a^2 + a a^3 + a a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a a^2 a^2 + a + 1 a^3 + a^2 a^3 + 1 a^4 + a^2 a^4 + a^3 + a + 1; a^4 a^4 + a^3 + a^2 a^4 + a^2 + 1 1 a^4 + a^3 + a a + 1 a^3 + a + 1 a^2 + 1 a^4 + a^3 + a^2 + 1 a^3 + a^2 + a + 1 a a^4 + 1 a^2 + a a^4 + a^2 + a a^3 + a a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + a^2 + a a^2 a^2 + a + 1 a^3 + a^2 a^3 + 1 a^4 + a^2 a^4 + a^3 + a + 1 a^4 + a^3 + 1 a^3 a^3 + a^2 + a a^4 + a^3 a^4 + a a^3 + a^2 + 1 a^4 + a + 1; 1 a^4 + 1 a^3 + a^2 a^4 + a a^4 + a^3 + a a^2 + a a^3 + 1 a^3 + a^2 + 1 a + 1 a^4 + a^2 + a a^4 + a^2 a^4 + a + 1 a^3 + a + 1 a^3 + a a^4 + a^3 + a + 1 a^4 + a^2 + a + 1 a^2 + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + 1 a^4 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + a a^3 a^4 + a^3 + a^2 a^3 + a^2 + a + 1 a^2 a^3 + a^2 + a a^4 + a^2 + 1 a a^2 + a + 1; a a^2 + a + 1 a^4 + a^3 1 a^4 + 1 a^3 + a^2 a^4 + a a^4 + a^3 + a a^2 + a a^3 + 1 a^3 + a^2 + 1 a + 1 a^4 + a^2 + a a^4 + a^2 a^4 + a + 1 a^3 + a + 1 a^3 + a a^4 + a^3 + a + 1 a^4 + a^2 + a + 1 a^2 + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + 1 a^4 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + a a^3 a^4 + a^3 + a^2 a^3 + a^2 + a + 1 a^2 a^3 + a^2 + a; a^2 a^3 + a^2 + a a^4 + a^2 + 1 a a^2 + a + 1 a^4 + a^3 1 a^4 + 1 a^3 + a^2 a^4 + a a^4 + a^3 + a a^2 + a a^3 + 1 a^3 + a^2 + 1 a + 1 a^4 + a^2 + a a^4 + a^2 a^4 + a + 1 a^3 + a + 1 a^3 + a a^4 + a^3 + a + 1 a^4 + a^2 + a + 1 a^2 + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + 1 a^4 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + a a^3 a^4 + a^3 + a^2; a^3 a^4 + a^3 + a^2 a^3 + a^2 + a + 1 a^2 a^3 + a^2 + a a^4 + a^2 + 1 a a^2 + a + 1 a^4 + a^3 1 a^4 + 1 a^3 + a^2 a^4 + a a^4 + a^3 + a a^2 + a a^3 + 1 a^3 + a^2 + 1 a + 1 a^4 + a^2 + a a^4 + a^2 a^4 + a + 1 a^3 + a + 1 a^3 + a a^4 + a^3 + a + 1 a^4 + a^2 + a + 1 a^2 + 1 a^4 + a^3 + a^2 + a + 1 a^4 + a^3 + 1 a^4 a^4 + a^3 + a^2 + 1; a^4 a^4 + a^3 + a^2 + 1 a^4 + a^3 + a^2 + a a^3 a^4 + a^3 + a^2 a^3 + a^2 + a + 1 a^2 a^3 + a^2 + a a^4 + a^2 + 1 a a^2 + a + 1 a^4 + a^3 1 a^4 + 1 a^3 + a^2 a^4 + a a^4 + a^3 + a a^2 + a a^3 + 1 a^3 + a^2 + 1 a + 1 a^4 + a^2 + a a^4 + a^2 a^4 + a + 1 a^3 + a + 1 a^3 + a a^4 + a^3 + a + 1 a^4 + a^2 + a + 1 a^2 + 1 a^4 + a^3 + a^2 + a + 1; 1 a^2 + a + 1 a^4 + a^2 + 1 a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 + a a^4 a^4 + a^3 + a^2 + a + 1 a^4 + a^2 + a + 1 a^3 + a a^4 + a + 1 a^4 + a^2 + a a^3 + a^2 + 1 a^2 + a a^4 + a a^4 + 1 a^4 + a^3 a a^3 + a^2 + a a^3 + a^2 + a + 1 a^3 a^4 + a^3 + a^2 + 1 a^4 + a^3 + 1 a^2 + 1 a^4 + a^3 + a + 1 a^3 + a + 1 a^4 + a^2 a + 1 a^3 + 1 a^4 + a^3 + a; a a^3 + a^2 + a a^3 + a^2 + a + 1 a^3 a^4 + a^3 + a^2 + 1 a^4 + a^3 + 1 a^2 + 1 a^4 + a^3 + a + 1 a^3 + a + 1 a^4 + a^2 a + 1 a^3 + 1 a^4 + a^3 + a a^3 + a^2 1 a^2 + a + 1 a^4 + a^2 + 1 a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 + a a^4 a^4 + a^3 + a^2 + a + 1 a^4 + a^2 + a + 1 a^3 + a a^4 + a + 1 a^4 + a^2 + a a^3 + a^2 + 1 a^2 + a a^4 + a a^4 + 1; a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 + a a^4 a^4 + a^3 + a^2 + a + 1 a^4 + a^2 + a + 1 a^3 + a a^4 + a + 1 a^4 + a^2 + a a^3 + a^2 + 1 a^2 + a a^4 + a a^4 + 1 a^4 + a^3 a a^3 + a^2 + a a^3 + a^2 + a + 1 a^3 a^4 + a^3 + a^2 + 1 a^4 + a^3 + 1 a^2 + 1 a^4 + a^3 + a + 1 a^3 + a + 1 a^4 + a^2 a + 1 a^3 + 1 a^4 + a^3 + a a^3 + a^2 1 a^2 + a + 1; a^3 a^4 + a^3 + a^2 + 1 a^4 + a^3 + 1 a^2 + 1 a^4 + a^3 + a + 1 a^3 + a + 1 a^4 + a^2 a + 1 a^3 + 1 a^4 + a^3 + a a^3 + a^2 1 a^2 + a + 1 a^4 + a^2 + 1 a^2 a^4 + a^3 + a^2 a^4 + a^3 + a^2 + a a^4 a^4 + a^3 + a^2 + a + 1 a^4 + a^2 + a + 1 a^3 + a a^4 + a + 1 a^4 + a^2 + a a^3 + a^2 + 1 a^2 + a a^4 + a a^4 + 1 a^4 + a^3 a a^3 + a^2 + a; a^4 a^4 + a^3 + a^2 + a + 1 a^4 + a^2 + a + 1 a^3 + a a^4 + a + 1 a^4 + a^2 + a a^3 + a^2 + 1 a^2 + a a^4 + a a^4 + 1 a^4 + a^3 a a^3 + a^2 + a a^3 + a^2 + a + 1 a^3 a^4 + a^3 + a^2 + 1 a^4 + a^3 + 1 a^2 + 1 a^4 + a^3 + a + 1 a^3 + a + 1 a^4 + a^2 a + 1 a^3 + 1 a^4 + a^3 + a a^3 + a^2 1 a^2 + a + 1 a^4 + a^2 + 1 a^2 a^4 + a^3 + a^2; 1 a^3 + a^2 + a a^4 + a^3 + a^2 + a a^2 + 1 a^4 + a + 1 a^3 + 1 a^4 + 1 a^4 + a^2 + 1 a^3 a^4 + a^3 + a^2 + a + 1 a^3 + a + 1 a^3 + a^2 + 1 a^3 + a^2 a a^4 + a^3 + a^2 a^4 + a^3 + 1 a^3 + a a + 1 a^4 + a a^2 + a + 1 a^3 + a^2 + a + 1 a^4 a^4 + a^3 + a + 1 a^4 + a^2 + a a^4 + a^3 + a a^4 + a^3 a^2 a^4 + a^3 + a^2 + 1 a^4 + a^2 + a + 1 a^4 + a^2; a a^4 + a^3 + a^2 a^4 + a^3 + 1 a^3 + a a + 1 a^4 + a a^2 + a + 1 a^3 + a^2 + a + 1 a^4 a^4 + a^3 + a + 1 a^4 + a^2 + a a^4 + a^3 + a a^4 + a^3 a^2 a^4 + a^3 + a^2 + 1 a^4 + a^2 + a + 1 a^4 + a^2 a^2 + a 1 a^3 + a^2 + a a^4 + a^3 + a^2 + a a^2 + 1 a^4 + a + 1 a^3 + 1 a^4 + 1 a^4 + a^2 + 1 a^3 a^4 + a^3 + a^2 + a + 1 a^3 + a + 1 a^3 + a^2 + 1; a^2 a^4 + a^3 + a^2 + 1 a^4 + a^2 + a + 1 a^4 + a^2 a^2 + a 1 a^3 + a^2 + a a^4 + a^3 + a^2 + a a^2 + 1 a^4 + a + 1 a^3 + 1 a^4 + 1 a^4 + a^2 + 1 a^3 a^4 + a^3 + a^2 + a + 1 a^3 + a + 1 a^3 + a^2 + 1 a^3 + a^2 a a^4 + a^3 + a^2 a^4 + a^3 + 1 a^3 + a a + 1 a^4 + a a^2 + a + 1 a^3 + a^2 + a + 1 a^4 a^4 + a^3 + a + 1 a^4 + a^2 + a a^4 + a^3 + a; a^3 a^4 + a^3 + a^2 + a + 1 a^3 + a + 1 a^3 + a^2 + 1 a^3 + a^2 a a^4 + a^3 + a^2 a^4 + a^3 + 1 a^3 + a a + 1 a^4 + a a^2 + a + 1 a^3 + a^2 + a + 1 a^4 a^4 + a^3 + a + 1 a^4 + a^2 + a a^4 + a^3 + a a^4 + a^3 a^2 a^4 + a^3 + a^2 + 1 a^4 + a^2 + a + 1 a^4 + a^2 a^2 + a 1 a^3 + a^2 + a a^4 + a^3 + a^2 + a a^2 + 1 a^4 + a + 1 a^3 + 1 a^4 + 1; a^4 a^4 + a^3 + a + 1 a^4 + a^2 + a a^4 + a^3 + a a^4 + a^3 a^2 a^4 + a^3 + a^2 + 1 a^4 + a^2 + a + 1 a^4 + a^2 a^2 + a 1 a^3 + a^2 + a a^4 + a^3 + a^2 + a a^2 + 1 a^4 + a + 1 a^3 + 1 a^4 + 1 a^4 + a^2 + 1 a^3 a^4 + a^3 + a^2 + a + 1 a^3 + a + 1 a^3 + a^2 + 1 a^3 + a^2 a a^4 + a^3 + a^2 a^4 + a^3 + 1 a^3 + a a + 1 a^4 + a a^2 + a + 1; 1 a^4 + a^3 + a^2 a^4 + a^2 + a + 1 a^3 + a^2 + 1 a^4 + a^3 a^3 a^4 + a^3 + a + 1 a^3 + 1 a^2 + a + 1 a^4 + a^3 + a^2 + a a^3 + a a^2 + a a a^4 + a^3 + a^2 + 1 a^3 + a + 1 a^4 + a^3 + a a^4 + a^2 + 1 a^4 a^4 + a + 1 a^4 + a a^3 + a^2 + a a^4 + a^3 + 1 a^4 + a^2 a^3 + a^2 a^2 a^4 + a^3 + a^2 + a + 1 a^4 + a^2 + a a^4 + 1 a^3 + a^2 + a + 1 a^2 + 1; a a^4 + a^3 + a^2 + 1 a^3 + a + 1 a^4 + a^3 + a a^4 + a^2 + 1 a^4 a^4 + a + 1 a^4 + a a^3 + a^2 + a a^4 + a^3 + 1 a^4 + a^2 a^3 + a^2 a^2 a^4 + a^3 + a^2 + a + 1 a^4 + a^2 + a a^4 + 1 a^3 + a^2 + a + 1 a^2 + 1 a + 1 1 a^4 + a^3 + a^2 a^4 + a^2 + a + 1 a^3 + a^2 + 1 a^4 + a^3 a^3 a^4 + a^3 + a + 1 a^3 + 1 a^2 + a + 1 a^4 + a^3 + a^2 + a a^3 + a; a^2 a^4 + a^3 + a^2 + a + 1 a^4 + a^2 + a a^4 + 1 a^3 + a^2 + a + 1 a^2 + 1 a + 1 1 a^4 + a^3 + a^2 a^4 + a^2 + a + 1 a^3 + a^2 + 1 a^4 + a^3 a^3 a^4 + a^3 + a + 1 a^3 + 1 a^2 + a + 1 a^4 + a^3 + a^2 + a a^3 + a a^2 + a a a^4 + a^3 + a^2 + 1 a^3 + a + 1 a^4 + a^3 + a a^4 + a^2 + 1 a^4 a^4 + a + 1 a^4 + a a^3 + a^2 + a a^4 + a^3 + 1 a^4 + a^2; a^3 a^4 + a^3 + a + 1 a^3 + 1 a^2 + a + 1 a^4 + a^3 + a^2 + a a^3 + a a^2 + a a a^4 + a^3 + a^2 + 1 a^3 + a + 1 a^4 + a^3 + a a^4 + a^2 + 1 a^4 a^4 + a + 1 a^4 + a a^3 + a^2 + a a^4 + a^3 + 1 a^4 + a^2 a^3 + a^2 a^2 a^4 + a^3 + a^2 + a + 1 a^4 + a^2 + a a^4 + 1 a^3 + a^2 + a + 1 a^2 + 1 a + 1 1 a^4 + a^3 + a^2 a^4 + a^2 + a + 1 a^3 + a^2 + 1; a^4 a^4 + a + 1 a^4 + a a^3 + a^2 + a a^4 + a^3 + 1 a^4 + a^2 a^3 + a^2 a^2 a^4 + a^3 + a^2 + a + 1 a^4 + a^2 + a a^4 + 1 a^3 + a^2 + a + 1 a^2 + 1 a + 1 1 a^4 + a^3 + a^2 a^4 + a^2 + a + 1 a^3 + a^2 + 1 a^4 + a^3 a^3 a^4 + a^3 + a + 1 a^3 + 1 a^2 + a + 1 a^4 + a^3 + a^2 + a a^3 + a a^2 + a a a^4 + a^3 + a^2 + 1 a^3 + a + 1 a^4 + a^3 + a; 1 a^4 + a^3 + a^2 + 1 a^4 + a^2 + a a^2 + a + 1 a^4 + a^3 + 1 a^3 + a^2 + 1 a^4 + a^2 + 1 a^2 + 1 a^2 + a a^2 a^4 + a^3 + a + 1 a^4 + a a^4 + a^3 + a^2 a^3 + a + 1 a^4 + 1 a^4 + a^3 + a^2 + a a^4 + a^2 a^4 + a^3 a^4 a + 1 a a^4 + a^3 + a^2 + a + 1 a^3 + 1 a^3 + a^2 + a a^4 + a^2 + a + 1 a^4 + a^3 + a a^3 + a^2 + a + 1 a^3 + a a^3 + a^2 a^3; a a^4 + a^3 + a^2 + a + 1 a^3 + 1 a^3 + a^2 + a a^4 + a^2 + a + 1 a^4 + a^3 + a a^3 + a^2 + a + 1 a^3 + a a^3 + a^2 a^3 a^4 + a + 1 1 a^4 + a^3 + a^2 + 1 a^4 + a^2 + a a^2 + a + 1 a^4 + a^3 + 1 a^3 + a^2 + 1 a^4 + a^2 + 1 a^2 + 1 a^2 + a a^2 a^4 + a^3 + a + 1 a^4 + a a^4 + a^3 + a^2 a^3 + a + 1 a^4 + 1 a^4 + a^3 + a^2 + a a^4 + a^2 a^4 + a^3 a^4; a^2 a^4 + a^3 + a + 1 a^4 + a a^4 + a^3 + a^2 a^3 + a + 1 a^4 + 1 a^4 + a^3 + a^2 + a a^4 + a^2 a^4 + a^3 a^4 a + 1 a a^4 + a^3 + a^2 + a + 1 a^3 + 1 a^3 + a^2 + a a^4 + a^2 + a + 1 a^4 + a^3 + a a^3 + a^2 + a + 1 a^3 + a a^3 + a^2 a^3 a^4 + a + 1 1 a^4 + a^3 + a^2 + 1 a^4 + a^2 + a a^2 + a + 1 a^4 + a^3 + 1 a^3 + a^2 + 1 a^4 + a^2 + 1 a^2 + 1; a^3 a^4 + a + 1 1 a^4 + a^3 + a^2 + 1 a^4 + a^2 + a a^2 + a + 1 a^4 + a^3 + 1 a^3 + a^2 + 1 a^4 + a^2 + 1 a^2 + 1 a^2 + a a^2 a^4 + a^3 + a + 1 a^4 + a a^4 + a^3 + a^2 a^3 + a + 1 a^4 + 1 a^4 + a^3 + a^2 + a a^4 + a^2 a^4 + a^3 a^4 a + 1 a a^4 + a^3 + a^2 + a + 1 a^3 + 1 a^3 + a^2 + a a^4 + a^2 + a + 1 a^4 + a^3 + a a^3 + a^2 + a + 1 a^3 + a; a^4 a + 1 a a^4 + a^3 + a^2 + a + 1 a^3 + 1 a^3 + a^2 + a a^4 + a^2 + a + 1 a^4 + a^3 + a a^3 + a^2 + a + 1 a^3 + a a^3 + a^2 a^3 a^4 + a + 1 1 a^4 + a^3 + a^2 + 1 a^4 + a^2 + a a^2 + a + 1 a^4 + a^3 + 1 a^3 + a^2 + 1 a^4 + a^2 + 1 a^2 + 1 a^2 + a a^2 a^4 + a^3 + a + 1 a^4 + a a^4 + a^3 + a^2 a^3 + a + 1 a^4 + 1 a^4 + a^3 + a^2 + a a^4 + a^2]

Results:
Test Summary:          | Time
ecc_decoder_all_setups | None  25.4s
Test Summary: | Pass  Total  Time
ecc_encoding  |  238    238  0.6s
Test Summary: |  Pass  Total  Time
ecc_gottesman | 24562  24562  0.2s
Test Summary:  | Pass  Total  Time
ecc_reedmuller |   19     19  0.7s
Test Summary:   | Pass  Total  Time
ecc_reedsolomon |   95     95  5.9s
Test Summary: | Pass  Total  Time
ecc_syndromes |  176    176  3.2s
Test Summary: | Pass  Total  Time
ecc_throws    |    4      4  0.0s
Test Summary: |Time
precompile    | None  0.2s
┌ Warning: The operation is of a type that can not be unified, defaulting to slower runtime dispatch
│   typeof(g) = NoiseOp{UnbiasedUncorrelatedNoise{Float64}, 1}
└ @ QuantumClifford ~/Desktop/New/b11/QuantumClifford.jl/src/sumtypes.jl:77
┌ Warning: The operation is of a type that can not be unified, defaulting to slower runtime dispatch
│   typeof(g) = NoiseOp{UnbiasedUncorrelatedNoise{Float64}, 1}
└ @ QuantumClifford ~/Desktop/New/b11/QuantumClifford.jl/src/sumtypes.jl:77
Test Summary: | Pass  Total  Time
pauliframe    |   90     90  5.1s
Test Summary: | Pass  Total  Time
allocations   |   39     39  6.5s
[ Info: SetupBuildDirectory: setting up build directory.
[ Info: Doctest: running doctests.
[ Info: Skipped ExpandTemplates step (doctest only).
[ Info: Skipped CrossReferences step (doctest only).
[ Info: Skipped CheckDocument step (doctest only).
[ Info: Skipped Populate step (doctest only).
[ Info: Skipped RenderDocument step (doctest only).
Test Summary: | Pass  Total   Time
doctests      |    1      1  14.9s
Skipping Base.active_repl
Skipping Base.active_repl_backend
Test Summary: | Pass  Total   Time
aqua          |   11     11  19.9s
     Testing QuantumClifford tests passed

julia> H1 = vcat(HField[1:1, :], HField[3:end, :])
15×30 Matrix{FqFieldElem}:
 1  1                    1                    …  1                  1
 1  a                    a^2                     a^4 + a^2 + a      a^3 + 1
 1  a^2                  a^4                     a^4 + a^3 + 1      a^3 + a + 1
 1  a^3                  a^3 + a                 a^4 + a^2 + 1      a^4 + a^3 + 1
 1  a^4                  a^3 + a^2 + 1           a^2 + a            a^3 + a^2 + a + 1
 1  a^2 + 1              a^4 + 1              …  a^4 + a^3 + a + 1  a^4 + a^3
 1  a^3 + a              a^3 + a^2 + a           a^4 + a^3 + a^2    a^2 + a
 1  a^4 + a^2            a^4 + a^3 + a^2 + 1     a^4 + 1            a^4 + a + 1
 1  a^3 + a^2 + 1        a^4 + a^3 + a + 1       a^4 + a^2          a^4 + a^3 + a^2 + a + 1
 1  a^4 + a^3 + a        a + 1                   a^4                a^4 + a^3 + a^2
 1  a^4 + 1              a^3 + a^2            …  a                  a^2 + a + 1
 1  a^2 + a + 1          a^4 + a^2 + 1           a^3 + 1            a^4 + a^3 + a
 1  a^3 + a^2 + a        a^4 + a^3 + a^2 + a     a^4 + a^2 + a + 1  a^4 + a^2
 1  a^4 + a^3 + a^2      a^4 + a^2 + a + 1       a^3 + a^2 + a + 1  a^2 + 1
 1  a^4 + a^3 + a^2 + 1  a^4 + a^2 + a           a^3 + a^2          a^3

ReedSolomon (30, 15) Before Binary Expansion:

julia> GF2, a = finite_field(2, 4, "a")
(Finite field of degree 4 and characteristic 2, a)

julia> a^29
a^3 + 1

julia> a^27
a^3 + a^2 + a + 1

julia> a^25
a^2 + a + 1

julia> a^5
a^2 + a

julia> a^28
a^3 + a^2 + 1

julia> a^26
a^3 + a^2 + a

julia> a^14
a^3 + 1

julia> a^13
a^3 + a^2 + 1

julia> a^5
a^2 + a

julia> a^6
a^3 + a^2

julia> a^13
a^3 + a^2 + 1

Some of your review suggestions from the BCH apply here as well so converting it back to draft for a while.
This will save your time and effort during the first round of review.

I have inclued an example of expanded binary parity check matrix from the paper. It's somewhat huge, it has 75 rows and 150 columns after binary expansion. Good thing is that I have checked it's minimum hamming distance and rank as per formulas.
I have taken the suggestions from BCH Code review and applied them here. This will save your time when doing code review, I hope.

Applying BCH codereview suggestions:
As per one of your suggestion to also include some example of actual binary H which can be referred to, I have tested this expanded matrix using parity_checks(ReedSolomon(...)) in the test file.
Writing this message for reference with regards to lines 92 to 148 of test file.

Hi Stefan,
Thanks to your suggestions in the previous code review in the other PR, I have significantly improved this PR. I have applied all of your suggestions here as well.
I will wait a day and then convert it to open from draft status.

I have set this up for review! Suggestions about docstring style are added from BCH review.
There is rendering issue with matrices, but they are in alignment in the src files when seen locally.

Added the cyclic test and Singleton Bound test for Reed Solomon Codes to polish the PR.

There is docstring error that  `: special characters "#{}()[]<>|&*?~;" must be quoted in commands.
Please let me know that how to define proper doctests as I have never written them before.
```jldoctest
julia> using Nemo: degree
julia> using QuantumClifford.ECC: ReedSolomon, generator_polynomial
julia> test_cases = [(7, 3) (15, 9) (225, 223) (160, 128) (255, 251) (255, 239) (255, 249)];
julia> for (n, k) in test_cases
           m = ilog2(n + 1)
           t = div(n - k, 2)
           degree(generator_polynomial(ReedSolomon(m, t))) == n - k == 2 * t
       end

This PR is actually an implementation of ExtendedReedSolomonMDS  rather than ReedSolomon codes. So, I have removeed the generator polynomial of ReedSolomon codes as that leads to misunderstanding for the readers. I will open a new PR that will focus purely on Reed Solomon codes in the future.
ECC Zoo has some details about Extended Generalized Reed Solomon codes: https://errorcorrectionzoo.org/c/extended_reed_solomon) which are related to ExtendedReedSolomonMDS.
I will remove unnecessary references about ReedSolomon codes since we are not dealing with them at this time.  The documentation is significantly improved to avoid any misunderstandings as well.

Hi, @Krastanov, I took the time to conduct further reading and have curated this especially for you to provide a thorough overview!
I asked myself this question that in order to implement PR on Reed Solomon codes (better to call it  GeneralizedReedSolomon), what does their parity check Matrix look like?
After some more digging, I have found the answers and also clear differences which are as follows:
ExtendedReedSolomonMDS
This PR is implementing family of Augmented, Extended RS-MDS (ExtendedReedSolomonMDS) codes with parameters [[ 2^m + 1, k , 2 ^ (m + 1) - k]].  ECC Zoo has some details about Extended Generalized Reed Solomon codes: https://errorcorrectionzoo.org/c/extended_reed_solomon) which are related toExtendedReedSolomonMDS.
I am implementing this following parity check matrix in Shortened version of (ExtendedReedSolomonMDS) :
From Page 171 of Springer Book: Error Correction Coding and Encoding

Generalized ReedSolomon
On the other hand, Reed Solomon codes have the following Parity Check Matrix. This represent GeneralizedReedSolomon codes  and it's H matrix is similar to BCH matrix. Huffman say that these codes (given by parity check matrix below) are subfamily of BCH codes. ECC Zoo has detail on these codes: https://errorcorrectionzoo.org/c/generalized_reed_solomon.
Note: It is not the Reed Solomon codes per se but Generalized Reed Solomon codes that are related to the BCH codes. BCH codes are subfield subcodes of GRS codes according to ECC Zoo.
From Page 177 of Huffman Book: Fundamentals of Error Correcting Codes

Parity check Matrix of BCH codes is given below:  This H is is similar to the the above Generalized Reed Solomon H.

Hopefully, this explain the differences!
Best,

For the sake of brevity, better name is ShortenedMDS instead of ExtendedReedSolomonMDS.
Ultimately, the authors construct the family of [[2ᵐ + 1 - s, k, 2ᵐ ⁺ ¹ - s - k]] ShortenedMDS first shortening the ExtendedReedSolomonMDS.
Then they massively expanding each row in a m x m matrix and then expanding each element of each row further into m column tupe.
I have also started exploring regular Reed Solomon codes  (in later PR), they are non-binary so we don't use GF(2) base field or GF(p ᵐ)  where p is not 2. In this regard, a special subcase of q-ary BCH (non-binary BCH) is non-binary ReedSolomon code.
Macwillians book shows that we use a non-binary base field, say GF(4), GF(5) and then end up with a GF(2) matrix, but it require further consultation with the book. I also started discussing this Macwillians method with Nemo devs as well.

This can be revived soon if classical MDS codes are required , closing for now.


How to add custom class in datepicker

I'm using multiple datepicker in single page. I want to change color and font-size etc, mean override bootstrap styles. How can i add class for datepicker

If u talking about add class for datepicker dropdown did like this:
add data for input(datepicker)
HTML
`

`
SCRIPT
$('#datepicker-cont').datepicker(options)     .on('show', function(e){         var elem = $(e.target);         var dropDownAddClass = elem.data('costume_class');         var datepickerDropDown = $('.datepicker');         datepickerDropDown.addClass(dropDownAddClass); ...
Should work ;)

@dryusha I am running into a similar problem and your solution works really well!
In your example you were using a class selector to get the datepickers
var datepickerDropDown = $('.datepicker');, but if I have multiple .datepicker on the same page, do you have any thoughts on how I can select a specific date picker and apply the custom classes/attributes?


Directory not empty error

Describe the bug
When calling the eodag API a "Directory not empty error" occurs.
Code To Reproduce
CLI commands or Python code snippet to reproduce the bug. Please use maximum verbosity using:
import eodag

Output
    Traceback (most recent call last):
      File "/usr/local/lib/python3.6/dist-packages/eodag/api/core.py", line 161, in build_index
        self.guess_product_type(eodagVersion=eodag_version)
      File "/usr/local/lib/python3.6/dist-packages/eodag/api/core.py", line 443, in guess_product_type
        raise NoMatchingProductType()
    eodag.utils.exceptions.NoMatchingProductType

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "/usr/local/lib/python3.6/dist-packages/notebook/notebookapp.py", line 1988, in init_server_extensions
        mod = importlib.import_module(modulename)
      File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
        return _bootstrap._gcd_import(name[level:], package, level)
      File "<frozen importlib._bootstrap>", line 994, in _gcd_import
      File "<frozen importlib._bootstrap>", line 971, in _find_and_load
      File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
      File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
      File "<frozen importlib._bootstrap_external>", line 678, in exec_module
      File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
      File "/usr/local/lib/python3.6/dist-packages/eodag_labextension/__init__.py", line 6, in <module>
        from eodag_labextension.handlers import RootHandler, ProductTypeHandler, SearchHandler
      File "/usr/local/lib/python3.6/dist-packages/eodag_labextension/handlers.py", line 9, in <module>
        from eodag.rest.utils import (
      File "/usr/local/lib/python3.6/dist-packages/eodag/rest/utils.py", line 32, in <module>
        eodag_api = eodag.EODataAccessGateway()
      File "/usr/local/lib/python3.6/dist-packages/eodag/api/core.py", line 106, in __init__
        self.build_index()
      File "/usr/local/lib/python3.6/dist-packages/eodag/api/core.py", line 166, in build_index
        shutil.rmtree(index_dir)
      File "/usr/lib/python3.6/shutil.py", line 490, in rmtree
        onerror(os.rmdir, path, sys.exc_info())
      File "/usr/lib/python3.6/shutil.py", line 488, in rmtree
        os.rmdir(path)
    OSError: [Errno 39] Directory not empty: '/home/qt/triquetc/.config/eodag/.index'

Environment:

Python version: 3.6.9
EODAG version: 2.0

Additional context:
Not sure, but this seemed to happen right after an eodag upgrade.

The issue seems related to rmtree usage with NFS, see https://github.com/spotify/luigi/issues/1665
I managed to reproduce the error when trying to delete an opened file on a NFS mounted directory:
>>> import shutil
>>> from pathlib import Path
>>> Path('/home/ad/brunats/foo/').mkdir()
>>> Path('/home/ad/brunats/foo/bar').touch()
>>> f = open('/home/ad/brunats/foo/bar', 'r')
>>> shutil.rmtree('/home/ad/brunats/foo')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python3.6/shutil.py", line 490, in rmtree
    onerror(os.rmdir, path, sys.exc_info())
  File "/usr/lib64/python3.6/shutil.py", line 488, in rmtree
    os.rmdir(path)
OSError: [Errno 39] Directory not empty: '/home/ad/brunats/foo'

This won't work using a rmtree alternative either:
>>> import subprocess
>>> subprocess.run("rm -rf /home/ad/brunats/foo", shell=True)
rm: cannot remove ‘/home/ad/brunats/foo/.nfs0000000003ed797100004fc6’: Device or resource busy
CompletedProcess(args='rm -rf /home/ad/brunats/foo', returncode=1)

The same thing on my local computer does not raise any error (with both rmtree and subprocess.run)
What can be done to bypass this issue, is to wait and retry that the file in closed

In our particular case, we have an error (when $HOME is on NFS) because when trying to delete .index it is still still opened until we exit the except block. See the following snippet that reproduces the error:
import os
import shutil
from eodag import EODataAccessGateway
from eodag.utils.exceptions import NoMatchingProductType

dag = EODataAccessGateway()
index_dir = os.path.join(dag.conf_dir, ".index")
try:
    dag.guess_product_type(foo="bar")
except NoMatchingProductType:
    shutil.rmtree(index_dir)
    print("DELETED")
print("END")

OSError: [Errno 39] Directory not empty: '/home/ad/brunats/.config/eodag/.index'
And the same snippet with rmtree out of the except block:
import os
import shutil
from eodag import EODataAccessGateway
from eodag.utils.exceptions import NoMatchingProductType

dag = EODataAccessGateway()
index_dir = os.path.join(dag.conf_dir, ".index")
create_index = False
try:
    dag.guess_product_type(foo="bar")
except NoMatchingProductType:
    create_index = True
finally:
    if create_index:
        shutil.rmtree(index_dir)
        print("DELETED")
print("END")

DELETED
END

This method is a good fix to our issue, we will use it to update build_index()


preprocess

Hi! I don't see the preprocessing script. Interested in using this as a metric to optimize my data gen by comparing to GPT-4 (1 response evaluation).
When I look in the readme, I see a reference to a judge_preprocess.py script, but I can't find where that is. How are you guys handling that for the different cases described in the paper? Is there a unifying function that preprocessed based on mode?
Fantastic work, by the way. Crazy this hasn't blown up yet.

Thanks for your interest! We have uploaded the preprocess scripts. Or you can directly download our uploaded dataset collection and put the contents in /JudgeLM/judgelm/data for easy use more samples.

Hey @Unrealluver, thanks for your response.
Can you please also share whether you tried PEFT approaches for fine- tuning and if you did, what was the results for those and also WRT dataset size.

Hey @Unrealluver, thanks for your response.
Can you please also share whether you tried PEFT approaches for fine- tuning and if you did, what was the results for those and also WRT dataset size.
Also, did you test with Classification / Regression Head if you were concerned about the scores of two answers?

Thanks for your questions.

We plan to update the PEFT plan in November.
The JudgeLM first produces the scores of answer pairs in a natural language inference way. Then, we get the compared results Answer 1 win / Answer 2 win / Tie from the scores pair. Last, we use the GPT-4 generated compared results as GT to calculate metrics as shown in our paper. Furthermore, we also tried the 0-shot performance of JudgeLM with the PandaLM benchmark.

Hi @Unrealluver again!
How would you reccomend deploying this to use with various LM frameworks? IE: What's the easiest way to use JudgeLM for inference in scripts?

Hi @Unrealluver ! Thank you for publishing both! I looked through the judgelm/judgelm/data scripts, and found how to do local inference. However, that's assuming the workload comes in all at once. I'd like to use this in the middle of my pipeline, for evaluating model results as they come in for instant feedback.
What's the best way to do that? I'd guess something like VLLM or TGI, but unsure if you've come up with anything better. Would adapting the web app help?

Hey @darinkishore , thanks for your suggestions!
We are also trying to explore a more convenient way to plug JudgeLM into the model's training pipeline.

I will close this issue. If there are more questions, you are welcome to raise issues :)


Firefox Sync Support?

Hello
Is there any plan to add "firefox sync" feature to ublacklist?
Thanks

There is no plan to implement it for the same reason as #39 .


Adding MOPITT read via MONETIO

Adding the MOPITT DataSet reader within MONETIO framework.

Thanks Maggie. Hmmm I thought I had added a close command - thanks for catching that. You mean in the MONETIO fork code right:
https://github.com/NCAR/monetio/blob/develop_satellite/monetio/sat/_mopitt_l3_mm.py

Yes in the MONETIO fork, around line 104 or earlier such as around line 89 when you finish reading things in from the file.

Added a close commend to the hdf reading function. Will merge.


Alpha numeric string values not displaying in Grafana

Updated dashboard from 7.0.5 to 8.3.6. OSISoft attribute strings results are being captured by query editor but not displaying on Grafana panels. Any idea how to resolve this issue?

Have you configured the table column to be interpreted as a String?

I have, but that does not resolve the issue. Any ideas on how to fix?


[BEAM-10773] Use the image flag before the default environment.

Use an image when set by the worker_harness_container_image flag.
The image variable stopped being consumed in https://github.com/apache/beam/commit/5f46b678e001d55621e5de719cf782160b1ba67d#diff-baacafffaacf38819d0a42b9d41d3174L228, which appears to have removed any ability to specific an image workers should use.

Thank you for your contribution! Follow this checklist to help us incorporate your contribution quickly and easily:

[X] Choose reviewer(s) and mention them in a comment (R: @username).
[X] Format the pull request title like [BEAM-XXX] Fixes bug in ApproximateQuantiles, where you replace BEAM-XXX with the appropriate JIRA issue, if applicable. This will automatically link the pull request to the issue.
[X] Update CHANGES.md with noteworthy changes.
[X] If this contribution is large, please file an Apache Individual Contributor License Agreement.

See the Contributor Guide for more tips on how to make review process smoother.

GitHub Actions Tests Status (on master branch)

See CI.md for more information about GitHub Actions CI.

R: @robertwb
I don't completely understand all the layers here used to build a config, if this is more appropriately set elsewhere happy to adjust!

I think this is OK, adding @lostluck to confirm.


Update zh-hant.json

change heading translation to 方向

"Bird.heading": "標題" -> "Bird.heading": "方向"  is often appropriate


ENH: Add itkImageToPathFilter method to work with older versions of ITK

To follow up on this, a branch named support-itk-older-v4.9rc01-2015-10-25-611676c has been created and master has been reverted to match the state of upstream repository.
This will not prevent existing project from building. The commits and SHA1s originally associated with master are still valid.
Now, regarding commit 9b7bb53, since:

the filter itkImageToPathFilter has been moved from ITKReview to ITKPath in https://github.com/InsightSoftwareConsortium/ITK/commit/1486e4363c228f473944bc3be3dbf2f0c67d33dd
and was originally introduced in https://github.com/InsightSoftwareConsortium/ITK/commit/2ac180f63c83b4fe0303f8f261e21621be74c096

, addressing the build of your project may be as simple as enabling ITKReview (disabled by default) if using an older version of ITK.
Cc: @thewtex @sumedhasingla


Change url & title of ancestry pages

The ancestry page: https://www.ebi.ac.uk/gwas/ancestry
url should be changed to https://www.ebi.ac.uk/gwas/populationdescriptors
Title to be changed to "Population descriptors" on this page and on the homepage

The documentation page https://www.ebi.ac.uk/gwas/docs/ancestry should also be changed to https://www.ebi.ac.uk/gwas/docs/populationdescriptors

Note from Yomi: but what if someone has previously bookmarked the previous url or also search index has stored it for Google and …
if we care about that, we can just point the 2 URLs to thesame page so we have a new one, and we preserve the previous one as well


instance.memory may cause a (small) problem in the future

Summary
At the current version of WebAssembly, an instance has at most one memory instance, but it may not be true in the future.
If there are more than one memory, the interface of instance.memory will not be the best interface.
Additional details
http://webassembly.github.io/spec/core/syntax/modules.html#syntax-mem

In the current version of WebAssembly, at most one memory may be defined or imported in a single module, and all constructs implicitly reference this memory 0. This restriction may be lifted in future versions.

Just for your information, the memory is exposed to the JavaScript API through exportsObject, ie. instance.exports.mem1.
https://webassembly.github.io/spec/js-api/#dom-module-exports

Yeah I know, the memory API isn't perfect right now, but we are not in the 1.* branch yet, so we are free to change it. Behind the scene, the runtime supports multiple memory, but we only read the first one if any. Using instance.exports.memory is indeed an interesting API.