1/*	$OpenBSD: bn_mod_sqrt.c,v 1.10 2023/04/11 10:10:52 tb Exp $ */
2
3/*
4 * Copyright (c) 2022,2023 Theo Buehler <tb@openbsd.org>
5 *
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19#include <err.h>
20#include <stdio.h>
21
22#include <openssl/bn.h>
23
24/*
25 * Test that .sqrt * .sqrt = .a (mod .p) where .p is a prime.  If .sqrt is
26 * omitted, .a does not have a square root and BN_mod_sqrt() fails.
27 */
28
29struct mod_sqrt_test {
30	const char *a;
31	const char *p;
32	const char *sqrt;
33} mod_sqrt_test_data[] = {
34	{
35		.a = "0",
36		.p = "2",
37		.sqrt = "0",
38	},
39	{
40		.a = "1",
41		.p = "2",
42		.sqrt = "1",
43	},
44	{
45		.a = "23",
46		.p = "2",
47		.sqrt = "1",
48	},
49	{
50		.a = "24",
51		.p = "2",
52		.sqrt = "0",
53	},
54	{
55		.a = "1",
56		.p = "1",
57	},
58	{
59		.a = "0",
60		.p = "17",
61		.sqrt = "0",
62	},
63	{
64		.a = "1",
65		.p = "17",
66		.sqrt = "1",
67	},
68	{
69		.a = "3",
70		.p = "17",
71		.sqrt = "7",
72	},
73
74	/*
75	 * Test cases resulting in an infinite loop before bn_sqrt.c r1.10.
76	 */
77
78	{
79		.a = "20a7ee",
80		.p = "460201", /* 460201 == 4D5 * E7D */
81	},
82	{
83		.a = "65bebdb00a96fc814ec44b81f98b59fba3c30203928fa521"
84		     "4c51e0a97091645280c947b005847f239758482b9bfc45b0"
85		     "66fde340d1fe32fc9c1bf02e1b2d0ed",
86		.p = "9df9d6cc20b8540411af4e5357ef2b0353cb1f2ab5ffc3e2"
87		     "46b41c32f71e951f",
88	},
89
90	/*
91	 * p = 3 (mod 4)
92	 */
93
94	{
95		.a = "c3978f75d6c2908ae3e9a714ad3d09b13031868dfc5873d7"
96		     "bd9a9691f3b45",
97		.p = "e9f638f327f3ca2a2928f5451bb3b6ff",
98		.sqrt = "37f112813516c2563028c63a687d38b",
99	},
100	{
101		.a = "1730fbcd9e78e1e786284f708aaa599ffa0d744ff223e3f7"
102		     "ac1faac3d7d2a45e",
103		.p = "e9f638f327f3ca2a2928f5451bb3b6ff",
104		.sqrt = "4d0d44591c8c80bf1314762cf73c251f",
105	},
106	{
107		.a = "1fd006456db047a16b32a48235749b8b627be66a5f9e05d7"
108		     "d1857114baa9ff1",
109		.p = "e9f638f327f3ca2a2928f5451bb3b6ff",
110		.sqrt = "168fa1c701b579827436c8abc65bae54",
111	},
112	{
113		.a = "216c1526fc9afa21788f84ff1bba10e8bccd39fc60978cdd"
114		     "f89087d66dffdd35",
115		.p = "e9f638f327f3ca2a2928f5451bb3b6ff",
116		.sqrt = "5c7fc4b52edf59c44b0916cb134e852a",
117	},
118	{
119		.a = "1cd486f29a9632ef276d10bb9754aae1b2723163a1a42552"
120		     "4e514dd9b40e9b6e",
121		.p = "e9f638f327f3ca2a2928f5451bb3b6ff",
122		.sqrt = "55e8f564c1dd1455fea889203ae81c48",
123	},
124	{
125		.a = "7272d05925151c067fcd3fb44d4d4908c9104691e3fa82a5"
126		     "d2ed4a58479020f",
127		.p = "e9f638f327f3ca2a2928f5451bb3b6ff",
128		.sqrt = "2acad049c45fe1bf4307bd7b962dbd7d",
129	},
130	{
131		.a = "6d12f19be6960d04f651867737a0e9a0b16e614cc5eb6ffe"
132		     "cc6c911d3c9b260",
133		.p = "e9f638f327f3ca2a2928f5451bb3b6ff",
134		.sqrt = "29c68091856db1e3f6d63eaa341cbecd",
135	},
136	{
137		.a = "23681522f2ab9e0e7cf34243e092dd8bada26d18dc1211fc"
138		     "d9d49f65569cd179",
139		.p = "e9f638f327f3ca2a2928f5451bb3b6ff",
140		.sqrt = "5f349a0ac98fd5c7b575bc9ff05482cf",
141	},
142	{
143		.a = "3218f7cc3f00df33b1279c2f5386f1f1837db81cf3a69052"
144		     "d23f6220f1b43b4b",
145		.p = "e9f638f327f3ca2a2928f5451bb3b6ff",
146		.sqrt = "713f53f8fc8038dc2b8ad3adf2bb6a3a",
147	},
148	{
149		.a = "1d1cd78fc48830494c54113173d636119286e7bd0bd7d627"
150		     "21063f88256868fc",
151		.p = "e9f638f327f3ca2a2928f5451bb3b6ff",
152		.sqrt = "565470af11ec50128e82606f07bd3baf",
153	},
154	{
155		.a = "3a9de6e9da1e02f6e7e9b4f1556a0bcd1072d065",
156		.p = "e9f638f327f3ca2a2928f5451bb3b6ff",
157	},
158	{
159		.a = "8bdbc0195d2af794784a8b6f7b63d9fce9fe7a29",
160		.p = "e9f638f327f3ca2a2928f5451bb3b6ff",
161	},
162	{
163		.a = "262b386d4027cc114b4bb73ea745650e6e4a22ef314e9e03"
164		     "486f3fa7d721b15e",
165		.p = "e36058b270896dd9380d4d693a2593eb",
166		.sqrt = "62d977c29cfede2669e617851d1db12b",
167	},
168	{
169		.a = "172020616142af15b1d55675aae05601206663c1749e3753"
170		     "f1b80696d62ece4",
171		.p = "e36058b270896dd9380d4d693a2593eb",
172		.sqrt = "133c4f98c82d077789f01c232eca5692",
173	},
174	{
175		.a = "199daf5ed7d4c07f9c22af215c32fc024cc609df92135d9e"
176		     "360076ae2baf943b",
177		.p = "e36058b270896dd9380d4d693a2593eb",
178		.sqrt = "50fac2c950af164b0bd7d9b5cf9600ae",
179	},
180	{
181		.a = "15b01b8d11211643af99034b3e902305228c903653baea22"
182		     "4c4896949b037800",
183		.p = "e36058b270896dd9380d4d693a2593eb",
184		.sqrt = "4a8330fc5c8164f858e5cf5028ba69da",
185	},
186	{
187		.a = "a326d1821af01d2c4251d84807980a9942b3ecab8dfe0fe9"
188		     "9b4fd27c47de741",
189		.p = "e36058b270896dd9380d4d693a2593eb",
190		.sqrt = "3317a2ea8c32838e0c8ac6b0838b2518",
191	},
192	{
193		.a = "1213f38d2c4444e54ec1966acd28c568ad273a1d8337154e"
194		     "3e2a137c372624fd",
195		.p = "e36058b270896dd9380d4d693a2593eb",
196		.sqrt = "44076fb0b477e1a29315aabc95dafe43",
197	},
198	{
199		.a = "399cc2207e49304d48c5ae4e32d3db8676fd16bd79ad98e6"
200		     "dc001fb405ef6f0",
201		.p = "e36058b270896dd9380d4d693a2593eb",
202		.sqrt = "1e5c722148e8939872584ca89e01237d",
203	},
204	{
205		.a = "2faee914d3da21f1a5e82303f945593cbbb8bfc94315cb32"
206		     "5faca3f8877b23a",
207		.p = "e36058b270896dd9380d4d693a2593eb",
208		.sqrt = "1b9f0867a249063caf36bc28b68b5d54",
209	},
210	{
211		.a = "17f6c4ba6517237a5ceaaa186400a0e5a9657db2fd863628"
212		     "d6ac524027287880",
213		.p = "e36058b270896dd9380d4d693a2593eb",
214		.sqrt = "4e5323a7cda4e3037d258f1436e3b964",
215	},
216	{
217		.a = "1973a0acd4be1a2115b396969421d78bcd32f2cc9b31b1a7"
218		     "3e876b0926f34142",
219		.p = "e36058b270896dd9380d4d693a2593eb",
220		.sqrt = "50b82d13351cca9addb25052c4d9bead",
221	},
222	{
223		.a = "2768ea8c5bc132c003b0451a9e356ef1b9821646",
224		.p = "e36058b270896dd9380d4d693a2593eb",
225	},
226	{
227		.a = "ae5450500ae2fdd7d07df1c46337e3de89730ec2",
228		.p = "e36058b270896dd9380d4d693a2593eb",
229	},
230	{
231		.a = "15a78159fcd81c039d997cb2266513d677a36856756ccebd"
232		     "7942fe063a99a42b",
233		.p = "c3b321a39659c8c574148821cc2f4c23",
234		.sqrt = "4a746881ec00b6cb8e637daf97c7f7d1",
235	},
236	{
237		.a = "17ec38e2fbb20de601b699aab3a420d174a2c541938ea004"
238		     "a65f97bc3713a273",
239		.p = "c3b321a39659c8c574148821cc2f4c23",
240		.sqrt = "4e41e59e7b80b061ae255fc98748d2d7",
241	},
242	{
243		.a = "f8327d6ecd54a96d4cb2d1b5ac4be958a1073fd3c9216f18"
244		     "4a2e1b65c80c28a",
245		.p = "c3b321a39659c8c574148821cc2f4c23",
246		.sqrt = "3f04610bae1450420bc38988dfd57fa4",
247	},
248	{
249		.a = "1c8ad905faae5434f6070960507696b2879d5e7891d3073f"
250		     "66a96bdf74c1a56c",
251		.p = "c3b321a39659c8c574148821cc2f4c23",
252		.sqrt = "557ae7ee14896190564703f963bb6516",
253	},
254	{
255		.a = "21bbfe1ed600301ead629d7b87e11c5403bd16dd9c28aaca"
256		     "03fffbf6597c1f47",
257		.p = "c3b321a39659c8c574148821cc2f4c23",
258		.sqrt = "5cee17372e523911e1a0f914db42230d",
259	},
260	{
261		.a = "250de7ab5e802b1b399e8c3333b20d18dbe433ea28c333a2"
262		     "0a9db317c5c96f2f",
263		.p = "c3b321a39659c8c574148821cc2f4c23",
264		.sqrt = "616546bc036efa2a5a30d35c1cb32ec9",
265	},
266	{
267		.a = "20ae8c29c0aa7030c63efd48fb9f371f5a15fb1918859d74"
268		     "d91a160d4533c73",
269		.p = "c3b321a39659c8c574148821cc2f4c23",
270		.sqrt = "16de015e7590bb75c7f9a0d719368285",
271	},
272	{
273		.a = "a9e4dd7fea7f671c392560cc6abd8241ed88655d4adc4907"
274		     "1b7f2151d7931f",
275		.p = "c3b321a39659c8c574148821cc2f4c23",
276		.sqrt = "d08ca78515bb8670926a12f02ae69fa",
277	},
278	{
279		.a = "1a0126ea28387c8caf8a1b0b8440969407279c759673171b"
280		     "80ba9a42281cadbc",
281		.p = "c3b321a39659c8c574148821cc2f4c23",
282		.sqrt = "5197642a69ddeb7c366b25a634a6c33b",
283	},
284	{
285		.a = "52006bab38c980f87129d9d1b0d7a9559b0a8f304ddefee1"
286		     "81b9d2874d12cbb",
287		.p = "c3b321a39659c8c574148821cc2f4c23",
288		.sqrt = "2438cea95ea42a348190d5d004ca0f6f",
289	},
290	{
291		.a = "43e921a1d7d2706dc74144886815c02719a6e3c9",
292		.p = "c3b321a39659c8c574148821cc2f4c23",
293	},
294	{
295		.a = "fe62c1aaa54f6abba02bf1add8118c2cc57ae9c",
296		.p = "c3b321a39659c8c574148821cc2f4c23",
297	},
298	{
299		.a = "1c70683aeb6b0025b8509da40e743f4f98f74f8b81dcbd2f"
300		     "b83c72059f45d986",
301		.p = "c3c9132a60dcb07a29ea04ce12f10af7",
302		.sqrt = "555346fcb482ad8a501120ab9176fece",
303	},
304	{
305		.a = "c30e49d25c864756e6432366defb5a7cd8cb3f18eda3cde2"
306		     "6c88aec3a0ae004",
307		.p = "c3c9132a60dcb07a29ea04ce12f10af7",
308		.sqrt = "37dd6d96b275bff258b4fde3321a9217",
309	},
310	{
311		.a = "331e18f1f1ed03ac53c78f2d98bf9d2757127d3c25ec0cdb"
312		     "f02882cb70595f",
313		.p = "c3c9132a60dcb07a29ea04ce12f10af7",
314		.sqrt = "7264fcc091e4523541e8f0ee130571e",
315	},
316	{
317		.a = "3c9c518aec7a7b502e49dca16acb91f9f1d57c7ca69dd199"
318		     "d55212b710a1f",
319		.p = "c3c9132a60dcb07a29ea04ce12f10af7",
320		.sqrt = "1f242105b1371a672211389a0b02ae5",
321	},
322	{
323		.a = "a3c104e9871de2bf7e2f3e1f2e072f1d869a72935928e293"
324		     "627f04c0fe9567",
325		.p = "c3c9132a60dcb07a29ea04ce12f10af7",
326		.sqrt = "ccbf0901efa15d8d0d8758a57e2ab4f",
327	},
328	{
329		.a = "c60bb5e0a48db72bc0cebe9455e9f94a08febd08d634591a"
330		     "cdd1a7433eeffd9",
331		.p = "c3c9132a60dcb07a29ea04ce12f10af7",
332		.sqrt = "384a9f1f39e3a04e3ec7e3b99cdf123b",
333	},
334	{
335		.a = "22d9c628e23c14d45eaac1bb5c563cb4718556d31798e754"
336		     "bb7f81a3c6b911d",
337		.p = "c3c9132a60dcb07a29ea04ce12f10af7",
338		.sqrt = "179d2110991a0f85ad40927cb08a9c15",
339	},
340	{
341		.a = "20354be2a9992a4f192687ab68025fe85b9724faea87f37d"
342		     "39a43d26b71c4ee",
343		.p = "c3c9132a60dcb07a29ea04ce12f10af7",
344		.sqrt = "16b36e6bffa91122c3615aa277cc249c",
345	},
346	{
347		.a = "3ad95db7205d9413ed31b2145c4b368db365e949e54c4dbf"
348		     "0acaef2bfb54304",
349		.p = "c3c9132a60dcb07a29ea04ce12f10af7",
350		.sqrt = "1eaf6d6949ddfe0d9b915b2c9f472f78",
351	},
352	{
353		.a = "1aa4354b3a677970dfccafe223df531fd9c753f91d802ba4"
354		     "35362bf5ac66c11e",
355		.p = "c3c9132a60dcb07a29ea04ce12f10af7",
356		.sqrt = "5295a52e193ac5011d91f2bbeef1691e",
357	},
358	{
359		.a = "f48312e68f2a47df61bff728ac986ec049c283",
360		.p = "c3c9132a60dcb07a29ea04ce12f10af7",
361	},
362	{
363		.a = "897e77b7f767ac6a99d4be1ac2a4e52153884672",
364		.p = "c3c9132a60dcb07a29ea04ce12f10af7",
365	},
366	{
367		.a = "105505111e51c9a73001339ccff3554c2bdd879baa46210e"
368		     "1df8f73b70527a97",
369		.p = "e84fd723abb1fc0208ad23dfe5986c97",
370		.sqrt = "40a92a8fcac919aa46ee0ea2a6ccdc66",
371	},
372	{
373		.a = "330b1cce03412398a36967102c7cf6e47534b630c60ceb26"
374		     "04bf2e3842bb994",
375		.p = "e84fd723abb1fc0208ad23dfe5986c97",
376		.sqrt = "1c93ef2631f86d57ebc0c843e2082fe7",
377	},
378	{
379		.a = "1cfe5a70784209591d7ced341bba4484e1603226449e52b0"
380		     "a16d9afa9aa1fc0e",
381		.p = "e84fd723abb1fc0208ad23dfe5986c97",
382		.sqrt = "56273048848c7784c2589e3d91dbceaf",
383	},
384	{
385		.a = "7baa8b5f02cdd3451df420b504bd8e16c738a07e7f9cb987"
386		     "9944b99e1496e7d",
387		.p = "e84fd723abb1fc0208ad23dfe5986c97",
388		.sqrt = "2c7b6c3c5e43c0f2acd1ebfee4e234ca",
389	},
390	{
391		.a = "608d55d43908ea7ea3aaf4ca05d5a8321d55cbe09b565e4c"
392		     "163412e45c62386",
393		.p = "e84fd723abb1fc0208ad23dfe5986c97",
394		.sqrt = "274deb2741766cffb60a517e8f3fadbc",
395	},
396	{
397		.a = "526ebff9146c9f50021f56304120d8f9b09ce515d0066346"
398		     "8f20115421f024",
399		.p = "e84fd723abb1fc0208ad23dfe5986c97",
400		.sqrt = "91449230a1a386e9c1093ee0cdbba09",
401	},
402	{
403		.a = "2a20b65b2a28f1b3c9e1d876d86a5f5d87d94421ddf7ef69"
404		     "1a71f07955a09a8b",
405		.p = "e84fd723abb1fc0208ad23dfe5986c97",
406		.sqrt = "67d976d658fd3cbd77c1474a0906404c",
407	},
408	{
409		.a = "1e083613b3a5b9f547972034d37a1f6f42733731dabbe889"
410		     "99b5c0f50a7dca82",
411		.p = "e84fd723abb1fc0208ad23dfe5986c97",
412		.sqrt = "57aeb4be88de6be03a7a453a7ba5b50f",
413	},
414	{
415		.a = "11d00fbce28d46f526bb51246a1cdd3c3b2d8bb83725a83a"
416		     "564f6a67d23a0ff",
417		.p = "e84fd723abb1fc0208ad23dfe5986c97",
418		.sqrt = "10e1ce79ade89e839f3f0f29d72eea8a",
419	},
420	{
421		.a = "3285f0c5eb6ff451af071089be87c1a7fe564e1e8de5911f"
422		     "fe390fda34c8799e",
423		.p = "e84fd723abb1fc0208ad23dfe5986c97",
424		.sqrt = "71ba3c5d0d93cb2da4a8242269f8f349",
425	},
426	{
427		.a = "d0d1f950ec1b85862398f403e8768936ea03cf1d",
428		.p = "e84fd723abb1fc0208ad23dfe5986c97",
429	},
430	{
431		.a = "e5a7a57d99efdd8965c84e10b83df9d0871cc1e",
432		.p = "e84fd723abb1fc0208ad23dfe5986c97",
433	},
434	{
435		.a = "102ce98ef5044dc2f1afa2e6600008198b5329aa0757d239"
436		     "3f6860f7e252f5db",
437		.p = "dfcf17789278b6e9cafdb4beaf2cfcfb",
438		.sqrt = "4059946cd6922b83dd0425fc4acb6651",
439	},
440	{
441		.a = "132922d347e42176551bcf327fcb764380a996142bcec3a7"
442		     "e5c55f822c53e99b",
443		.p = "dfcf17789278b6e9cafdb4beaf2cfcfb",
444		.sqrt = "4609639f50503b898f97fcbce84bd069",
445	},
446	{
447		.a = "1b1be4c1234332b5ac8494697d1de921f851d9c2b4557931"
448		     "125b94f68229dbc1",
449		.p = "dfcf17789278b6e9cafdb4beaf2cfcfb",
450		.sqrt = "534e5790710771e405fa386a75fddcee",
451	},
452	{
453		.a = "272ac5b81ce6e27b4b5aac25ca34abfe8725d28f7f67c8d1"
454		     "9d16d2fdbdadf2d5",
455		.p = "dfcf17789278b6e9cafdb4beaf2cfcfb",
456		.sqrt = "64223ee58ff69643ec0b4cabda6fa41b",
457	},
458	{
459		.a = "77a6fa94c13869d5cc265d70edc83bfed1d0e1b0ac8b89ae"
460		     "e56580f73696b4",
461		.p = "dfcf17789278b6e9cafdb4beaf2cfcfb",
462		.sqrt = "af045f74c28b50570b7d2ed8a53705c",
463	},
464	{
465		.a = "207b2287539f1489a52c29d82415be4d2dbcc256c8f58f51"
466		     "697dacc3ea2c091c",
467		.p = "dfcf17789278b6e9cafdb4beaf2cfcfb",
468		.sqrt = "5b2ff6ea861f522cbe4aeda70ec954b3",
469	},
470	{
471		.a = "a6322e0055de7fd226828206a28c61091a8221449c39bbd1"
472		     "969e9cdb1cbd7b3",
473		.p = "dfcf17789278b6e9cafdb4beaf2cfcfb",
474		.sqrt = "33911aaca827e264d82da9b63fe25c98",
475	},
476	{
477		.a = "5c0625d646c4183b59ccea7fb137399802389d925c999c8f"
478		     "34700cb1edd482f",
479		.p = "dfcf17789278b6e9cafdb4beaf2cfcfb",
480		.sqrt = "265f251061587b79dc4bb3e2dbbddedc",
481	},
482	{
483		.a = "ab2267257b8fb94428bfa7782d114a8189ad9188af7c35aa"
484		     "2f58851104a3c3",
485		.p = "dfcf17789278b6e9cafdb4beaf2cfcfb",
486		.sqrt = "d14f31646a99511d5df395ee0c6f23b",
487	},
488	{
489		.a = "2ccb942f89fcd0f396e6f60dbf26faba338a9f42a08ae83a"
490		     "8349881f4d2c9707",
491		.p = "dfcf17789278b6e9cafdb4beaf2cfcfb",
492		.sqrt = "6b1637561bc8e2b7c6797ff14898b78a",
493	},
494	{
495		.a = "49e501a514b25ec54e97e0643fef58c2331a9e0",
496		.p = "dfcf17789278b6e9cafdb4beaf2cfcfb",
497	},
498	{
499		.a = "bda6072e85a4703a58766eb147beca3a9e407324",
500		.p = "dfcf17789278b6e9cafdb4beaf2cfcfb",
501	},
502	{
503		.a = "e505c659e3649ac1974baa7ecf478c9c46d988149506c124"
504		     "f528a8a1da13bff",
505		.p = "dfe11f28376b5562def9fbecfa68ca47",
506		.sqrt = "3c88b1ef1aa5441216ef7c2457edfb52",
507	},
508	{
509		.a = "88db3bfef58b46e08c36ddcc96ff4588a8c10311ddac5620"
510		     "682e92351245c4",
511		.p = "dfe11f28376b5562def9fbecfa68ca47",
512		.sqrt = "bb2d50c0a9fc425d2f093f5e9882845",
513	},
514	{
515		.a = "eccf316a16ed9aa505b82e99a9c089513f3f5465178c0595"
516		     "5e1c8e7138da57b",
517		.p = "dfe11f28376b5562def9fbecfa68ca47",
518		.sqrt = "3d8df00919e543a5f782cec0e2833eba",
519	},
520	{
521		.a = "23a72d78c1d23f89f21c9aff268ada5431568d136b8980cf"
522		     "cc72b27c7ab4e93b",
523		.p = "dfe11f28376b5562def9fbecfa68ca47",
524		.sqrt = "5f89488ed8134af87ee97152df43de42",
525	},
526	{
527		.a = "1863d4f3fbbcc5ad3cf555c22d5a34045e91039acfe30365"
528		     "4fce949c31d5aba",
529		.p = "dfe11f28376b5562def9fbecfa68ca47",
530		.sqrt = "13c1259e5a87acded9d3999bdd6e7cae",
531	},
532	{
533		.a = "be8a91ec3aed7e990a3a01e12572b1bcf131a6dd93d46e4f"
534		     "c6719ec22197d0",
535		.p = "dfe11f28376b5562def9fbecfa68ca47",
536		.sqrt = "dcdbd473cf66c3ffb560ff8fb1411d5",
537	},
538	{
539		.a = "b268924f724222d8df0d48f502c6bd33b406742efe65b153"
540		     "3f9c34d30819ff5",
541		.p = "dfe11f28376b5562def9fbecfa68ca47",
542		.sqrt = "356d87ec862cd46e67997119202dd092",
543	},
544	{
545		.a = "c860b34209538b9b8efbb4bb51a70a22c1003dec12e5474d"
546		     "2f061f29b1c1c0d",
547		.p = "dfe11f28376b5562def9fbecfa68ca47",
548		.sqrt = "389f374589c29d78ffd4fddfcbc9fdad",
549	},
550	{
551		.a = "857bb672df76352d6ed3259cdf20a65d941b7c3f2ea07a19"
552		     "c513605e4b502bb",
553		.p = "dfe11f28376b5562def9fbecfa68ca47",
554		.sqrt = "2e36c7760d3a9ab2d437ba376940b71c",
555	},
556	{
557		.a = "248ebd6e07fabf93019b22ea1d1ab4d0fc9eba3d780d7307"
558		     "429a57739066844b",
559		.p = "dfe11f28376b5562def9fbecfa68ca47",
560		.sqrt = "60bd96b2e42a4ba4e1c5529dbc4b31f9",
561	},
562	{
563		.a = "7f0b66aca27105e059b111992986f46a71b25c9a",
564		.p = "dfe11f28376b5562def9fbecfa68ca47",
565	},
566	{
567		.a = "a964ffcec8532b0209457c1eda9988e40fe37482",
568		.p = "dfe11f28376b5562def9fbecfa68ca47",
569	},
570	{
571		.a = "12dc5769139571557c0af544a1eca5bec5f9b3cf70cc87d2"
572		     "d48107c5b4d20d98",
573		.p = "fddaa93d6ef55fe16d65f36467751ff3",
574		.sqrt = "457c7c100eaa11609392f6af4fbdc07f",
575	},
576	{
577		.a = "10d05ec3bd88a33465a1c5d9d467b587c2ea46f93a369223"
578		     "29d1893adf131b9d",
579		.p = "fddaa93d6ef55fe16d65f36467751ff3",
580		.sqrt = "419b922a2d4e0fdb18d0e31a130a3b57",
581	},
582	{
583		.a = "34d65ba3637b3b9d46a7d1a3558d7e3e946761ae0b8e4db5"
584		     "1c4b9b6bdfde0492",
585		.p = "fddaa93d6ef55fe16d65f36467751ff3",
586		.sqrt = "744d88ffa822b5d259c4fd138e489067",
587	},
588	{
589		.a = "292612ef1616fff0453f2e66580cffc763dad52f12ec5c37"
590		     "6246c4d8f69c0062",
591		.p = "fddaa93d6ef55fe16d65f36467751ff3",
592		.sqrt = "66a2b919787e57087ca4fd47b6ad37cd",
593	},
594	{
595		.a = "3a7ec6f19e0d9a4cca6f9bd8e2d126519c9370a88fe61879"
596		     "a0ccef7a6d5ccb23",
597		.p = "fddaa93d6ef55fe16d65f36467751ff3",
598		.sqrt = "7a5f18c79265b00cbaedc8bbef8cc26d",
599	},
600	{
601		.a = "b2f41bfdd2c86f5115724830a7dff681ad4f06198f7c989a"
602		     "b8ed9912f690fe7",
603		.p = "fddaa93d6ef55fe16d65f36467751ff3",
604		.sqrt = "3582689e0e3d046dae757b3e395f2a09",
605	},
606	{
607		.a = "12b9a1b6c4f1bd7888f206445c91c722219e1ced30bb2ee8"
608		     "5eb1a511347c430b",
609		.p = "fddaa93d6ef55fe16d65f36467751ff3",
610		.sqrt = "453c6e4824654ae983a123749adf41e1",
611	},
612	{
613		.a = "4a7c46417c3fefe77ee50565fe79aaee7886e1b708eebba8"
614		     "84fd59d616e1c8",
615		.p = "fddaa93d6ef55fe16d65f36467751ff3",
616		.sqrt = "8a16821ca0a63ff8b03b4b1a6afc5b5",
617	},
618	{
619		.a = "70b12a7a215f436eac38a7b2e9bdeae47f4e313c9622bbf0"
620		     "ddc4ae3cdd48ef6",
621		.p = "fddaa93d6ef55fe16d65f36467751ff3",
622		.sqrt = "2a766d514a8eeb2518e55d56d435b5b3",
623	},
624	{
625		.a = "1127295ddd79b3dc0d36759e8475e793c903136b3d779ba4"
626		     "a4b40eaaa2510cec",
627		.p = "fddaa93d6ef55fe16d65f36467751ff3",
628		.sqrt = "42440e1bdce37bc4099b36183270b686",
629	},
630	{
631		.a = "780039d1fb613f1654993c81ebce1000256ec462",
632		.p = "fddaa93d6ef55fe16d65f36467751ff3",
633	},
634	{
635		.a = "55f30fcaf020db602e2db2bed4ed2cdd061683d9",
636		.p = "fddaa93d6ef55fe16d65f36467751ff3",
637	},
638	{
639		.a = "297aa82c160b09d1551443f560c355085c075871687b98af"
640		     "3b2028156e24fa4b",
641		.p = "db9874b4d0f7b1cfcb69168102ef111f",
642		.sqrt = "670bff83e4425dbc782a92735135b8c7",
643	},
644	{
645		.a = "aa4b8a060fcf9f4adb09ccd99c58a0d71023319539618b60"
646		     "8be198e4e19898",
647		.p = "db9874b4d0f7b1cfcb69168102ef111f",
648		.sqrt = "d0cba27ce684c00b2b22b661305ab22",
649	},
650	{
651		.a = "4307405764f9c05f6b8a433fd442e97b20b6dd725a0c5488"
652		     "fc0947daf6daecc",
653		.p = "db9874b4d0f7b1cfcb69168102ef111f",
654		.sqrt = "20bf92a53eeb49fc15a28fa47156c7e1",
655	},
656	{
657		.a = "25e25f800892a56195c46c027eeab26ec820354e889a8057"
658		     "a46da80343dfb960",
659		.p = "db9874b4d0f7b1cfcb69168102ef111f",
660		.sqrt = "627af6200712b962235b167671d6859f",
661	},
662	{
663		.a = "1ee2add6b546b09bfa3acaa640feff18f0a844638a3e526e"
664		     "a9c22ff1657802e0",
665		.p = "db9874b4d0f7b1cfcb69168102ef111f",
666		.sqrt = "58eb64eee715b3535a68d8d4f4c389c9",
667	},
668	{
669		.a = "22c0b5472fee1bb7876e8612b63676678f0815a5a5984718"
670		     "d44000eab1632e6",
671		.p = "db9874b4d0f7b1cfcb69168102ef111f",
672		.sqrt = "1794a1976ec2bb6f199e9e833c9bc7c9",
673	},
674	{
675		.a = "c31233d4d15b615d95bf209890c2bc3446800af361aa69af"
676		     "3d65390eb64b01b",
677		.p = "db9874b4d0f7b1cfcb69168102ef111f",
678		.sqrt = "37ddfd137bf27b3ce0f21c86c844cdf4",
679	},
680	{
681		.a = "12977980fc461d4cf8f61b364e59783c589b5ff4dbb0f67d"
682		     "5ef13413dcf58afd",
683		.p = "db9874b4d0f7b1cfcb69168102ef111f",
684		.sqrt = "44fd2b8b167f4c5a14cabe9344b2e337",
685	},
686	{
687		.a = "3ae43a729fe988282a2a3f2e821aa58409784a661741bf05"
688		     "237563c1025edef",
689		.p = "db9874b4d0f7b1cfcb69168102ef111f",
690		.sqrt = "1eb2423fde03aed73f280a8500172693",
691	},
692	{
693		.a = "25988dd5cd06919bd5cb184431955d865033c58c65466597"
694		     "fcb737ac19f27492",
695		.p = "db9874b4d0f7b1cfcb69168102ef111f",
696		.sqrt = "621ad4ed8769873118ac6279833549c3",
697	},
698	{
699		.a = "b1216cf6c24d756b71dc6cf2c88becfb95bdaf4e",
700		.p = "db9874b4d0f7b1cfcb69168102ef111f",
701	},
702	{
703		.a = "15ad69f58f2c2f4e820e73120f229c70e4facc3",
704		.p = "db9874b4d0f7b1cfcb69168102ef111f",
705	},
706	{
707		.a = "aa9714b318b654674644c3daac851bbd4f39d01dfd89e3af"
708		     "8e099d3b8903329",
709		.p = "cd1f525d3eb5172c591bb299f52ba447",
710		.sqrt = "343e7b2f7e303f97e6dc9db20894ac1d",
711	},
712	{
713		.a = "40597523833f21d1fee6c963939dd73397e2a2352db1b049"
714		     "1b0f8fd50b1bdd5",
715		.p = "cd1f525d3eb5172c591bb299f52ba447",
716		.sqrt = "2016557da8396370d7a7c3d9a947e666",
717	},
718	{
719		.a = "10ddb7215a1e681614b6d7324b92b24fc715ed863d5038be"
720		     "05d740824a0b3114",
721		.p = "cd1f525d3eb5172c591bb299f52ba447",
722		.sqrt = "41b5964db90af860d17fbbcdd4afcc55",
723	},
724	{
725		.a = "1c36ce697e95d06ec63af3b82a6c2d8e9622c2c33f3f87ea"
726		     "ac3e75f2abef8ce",
727		.p = "cd1f525d3eb5172c591bb299f52ba447",
728		.sqrt = "153f2c9007b549d8e802a903ffd2171a",
729	},
730	{
731		.a = "35a13697c77f9629ef70d36fae88659d39b4048dc67828bc"
732		     "4425d1cb41edbbc",
733		.p = "cd1f525d3eb5172c591bb299f52ba447",
734		.sqrt = "1d4afd8ce507d6950e0b714c27e5e4c2",
735	},
736	{
737		.a = "1886d861ea3d46d0edb942a01397780a84f5ce199e6352d7"
738		     "42ed995a94302701",
739		.p = "cd1f525d3eb5172c591bb299f52ba447",
740		.sqrt = "4f3d39e8213df646cee264182fef1f47",
741	},
742	{
743		.a = "143c8b6264d12017961d3829d3aa0088ce4e8c6261a39e68"
744		     "0ea5b276d427e465",
745		.p = "cd1f525d3eb5172c591bb299f52ba447",
746		.sqrt = "47f9db1679dd06966c91bb7ee81f22c3",
747	},
748	{
749		.a = "121134f6cb228fafbd45a934db668a78d27aa12fb87ab25b"
750		     "e714ec93d05137a5",
751		.p = "cd1f525d3eb5172c591bb299f52ba447",
752		.sqrt = "4402458a9a80428c77dda8334ff41f74",
753	},
754	{
755		.a = "1ba2eabc24b78ce8ed873c0aba09443e5f02b98858c0a09a"
756		     "bfdb6d4da798abc3",
757		.p = "cd1f525d3eb5172c591bb299f52ba447",
758		.sqrt = "541cce775b911592fb759167755743f3",
759	},
760	{
761		.a = "e58fe89a18f8200b4aa289446b6de2ae4e4b0ad911e59cf0"
762		     "1e0a0b32b609141",
763		.p = "cd1f525d3eb5172c591bb299f52ba447",
764		.sqrt = "3c9af08f9f626f41c7ebe2f32875497a",
765	},
766	{
767		.a = "b15263e714de941bb702cf71e0db12613a383de7",
768		.p = "cd1f525d3eb5172c591bb299f52ba447",
769	},
770	{
771		.a = "5deae3520dc28e0e3bdee22fd91a66dad70b41c2",
772		.p = "cd1f525d3eb5172c591bb299f52ba447",
773	},
774
775	/*
776	 * p = 5 (mod 8)
777	 */
778
779	{
780		.a = "495114892a3986a8b4a6e05bacc0e293421716b0c4557330"
781		     "0cf4243f784e33d",
782		.p = "c9b4dee4aa04ce668cedd3d2bb8395fd",
783		.sqrt = "224004cbf31a7c967d53819764506317",
784	},
785	{
786		.a = "3f7683a65a7b5ab1134a944cb831bb8a0f9d9835a45d230b"
787		     "d3c6b8bb3902c1",
788		.p = "c9b4dee4aa04ce668cedd3d2bb8395fd",
789		.sqrt = "7f7639804be2c91aed7cdb70e1af18e",
790	},
791	{
792		.a = "9b044b4d448169fbb7da81261016b997ff24b3921b03dfb1"
793		     "d6dc5b1b28de2f1",
794		.p = "c9b4dee4aa04ce668cedd3d2bb8395fd",
795		.sqrt = "31cd63124ff7c306503ea3a2437bdbb0",
796	},
797	{
798		.a = "128b830f7eed54c5b7cfeced129aa45ad857d6e3d9f2a70e"
799		     "8cbf6097607ba1b0",
800		.p = "c9b4dee4aa04ce668cedd3d2bb8395fd",
801		.sqrt = "44e6f601015c26b885d7cd32663bc970",
802	},
803	{
804		.a = "1883fe98086c0821ff2858347227720a967a2c468a8ad9ab"
805		     "018257dd49ec8a18",
806		.p = "c9b4dee4aa04ce668cedd3d2bb8395fd",
807		.sqrt = "4f389ee648fb323847e453c77db0a364",
808	},
809	{
810		.a = "23ab14a89775f60cc6d8c397711429e9aae1fa59b637d356"
811		     "f7a8fbfe6b5379ef",
812		.p = "c9b4dee4aa04ce668cedd3d2bb8395fd",
813		.sqrt = "5f8e83217d7de9d61afc3edb95912f2f",
814	},
815	{
816		.a = "7c1252084891eb7e2b7d1c5ff6102949bf2b598a6ee05a0d"
817		     "03ec0471f963fbd",
818		.p = "c9b4dee4aa04ce668cedd3d2bb8395fd",
819		.sqrt = "2c8e124682ee306b16eebb31464c868f",
820	},
821	{
822		.a = "824e2173788853d264c075c287c558407ab196193af02427"
823		     "b7f7be09945bfcc",
824		.p = "c9b4dee4aa04ce668cedd3d2bb8395fd",
825		.sqrt = "2da917e56d3146f4d6e496bcfb50509d",
826	},
827	{
828		.a = "506661349ca4c1c1d32c030ebaec699f584e537fd561c5a5"
829		     "40bb2339775ad6",
830		.p = "c9b4dee4aa04ce668cedd3d2bb8395fd",
831		.sqrt = "8f7731dd48b0165519d0dfaf629cd81",
832	},
833	{
834		.a = "d21846fcb456b5cc76e2e9e95c72cd8d10537f2f91b7817c"
835		     "06bb2d946f9e1fd",
836		.p = "c9b4dee4aa04ce668cedd3d2bb8395fd",
837		.sqrt = "39fa851e5ff14e140a6f98124bcbf2bf",
838	},
839	{
840		.a = "3727e2a9498ef20c8a6f0d2f8de533d664bd8f2a",
841		.p = "c9b4dee4aa04ce668cedd3d2bb8395fd",
842	},
843	{
844		.a = "2eef7eeaf13b6173f9c68f71cb3a83621672810b",
845		.p = "c9b4dee4aa04ce668cedd3d2bb8395fd",
846	},
847	{
848		.a = "7695ae6d4aa3f51985234f35cded2e378912e848d1e08bb9"
849		     "921dce2b937aa8",
850		.p = "c7ff289dd9db4bc68a80d6d0837f5195",
851		.sqrt = "ae3c0c05a16cb2ad83b0dde2f46d15d",
852	},
853	{
854		.a = "6932c69d54861b47fe83f8531f19d3af58d3b85737e1b540"
855		     "e2f434b05eb4ffa",
856		.p = "c7ff289dd9db4bc68a80d6d0837f5195",
857		.sqrt = "2906c888cd5fe48ccca5c925944559bb",
858	},
859	{
860		.a = "22894e6a44618c1a14c10695cf41b5083f7f6d8a34c58309"
861		     "9334b3ec5a53a6de",
862		.p = "c7ff289dd9db4bc68a80d6d0837f5195",
863		.sqrt = "5e07397aa72c55103caf053fd20540c1",
864	},
865	{
866		.a = "d5189535263311b02c0b50f869524ae54ff3b493ccc15952"
867		     "330792e5676feac",
868		.p = "c7ff289dd9db4bc68a80d6d0837f5195",
869		.sqrt = "3a642808df53bce255b9d4ec52316a36",
870	},
871	{
872		.a = "462df11d760ac7ba6320dce59dd012a5a13e81e93a4a23a3"
873		     "2c2bb60314bc564",
874		.p = "c7ff289dd9db4bc68a80d6d0837f5195",
875		.sqrt = "21825fb45eaf1c3cf86b8b6ec3f3e4a6",
876	},
877	{
878		.a = "1e2fbc91cf281ba1a838e600f8a7348b03daa0d6dc5ceb82"
879		     "788539919839184d",
880		.p = "c7ff289dd9db4bc68a80d6d0837f5195",
881		.sqrt = "57e854eb15ea535a9210c70e2b1d0397",
882	},
883	{
884		.a = "1ac89e6b45c1f3d3888411a374f291e52af2abfbd7dcf23d"
885		     "e8024623ace61a1c",
886		.p = "c7ff289dd9db4bc68a80d6d0837f5195",
887		.sqrt = "52ce01029221f38a79750615d89c83e2",
888	},
889	{
890		.a = "408ada83c389027bb76db1c90279ead9b9855b604403ef4b"
891		     "b2821f807a2f5dc",
892		.p = "c7ff289dd9db4bc68a80d6d0837f5195",
893		.sqrt = "2022a3e12dff46cfd45e4b670e14f5c0",
894	},
895	{
896		.a = "17157376051a1da95618c37fa6a1febd48cbc52dcc3150eb"
897		     "c590f93be06991e8",
898		.p = "c7ff289dd9db4bc68a80d6d0837f5195",
899		.sqrt = "4cdf79e5c4a5e9413612c09652b60588",
900	},
901	{
902		.a = "c43c6a117ba38669cadfebc127dcc99a3292fe772077b322"
903		     "d47c1f62bc8ed29",
904		.p = "c7ff289dd9db4bc68a80d6d0837f5195",
905		.sqrt = "3808a0c60e94e3bf5453c16c14b6e936",
906	},
907	{
908		.a = "7899729705aaa981ccd5b22ca3b9384c957e6d8",
909		.p = "c7ff289dd9db4bc68a80d6d0837f5195",
910	},
911	{
912		.a = "aa82a2131cf182e08daa64945131572020110835",
913		.p = "c7ff289dd9db4bc68a80d6d0837f5195",
914	},
915	{
916		.a = "3b2c1fa25b77539a5adbc8daaaf3afb1660be07651f3f0e1"
917		     "77331853bcd49b21",
918		.p = "fc5054f3123deeb6ca2d35c77263c08d",
919		.sqrt = "7b13e508e84efddeb4eeae18144046db",
920	},
921	{
922		.a = "3b98fb79556ae299a2d9349f8e9544fe7c3fc9b0a7265ec4"
923		     "00dfd31c139c1869",
924		.p = "fc5054f3123deeb6ca2d35c77263c08d",
925		.sqrt = "7b84e784f47a5586e6c3cb970bc98a03",
926	},
927	{
928		.a = "149c120dc19610055d7f0ba9d007f458c558c68a40acd0a6"
929		     "00bb40d2650ee1f4",
930		.p = "fc5054f3123deeb6ca2d35c77263c08d",
931		.sqrt = "48a2f5e66dc7919bd19d00549d177c3c",
932	},
933	{
934		.a = "13c3763c5d74356dafe968f30e1d9a4f8e6c63c6101a02ea"
935		     "ec1cec8db01798bc",
936		.p = "fc5054f3123deeb6ca2d35c77263c08d",
937		.sqrt = "472140c031a001ef403cb71274a91830",
938	},
939	{
940		.a = "8353728f214d74a60f740e3098dc80c8bf3b3878499b71e7"
941		     "06ded8c999a5c68",
942		.p = "fc5054f3123deeb6ca2d35c77263c08d",
943		.sqrt = "2dd6c9cf6caa11c9051d6823a4775155",
944	},
945	{
946		.a = "5e387c6058eeb03b33b59fce405c6278d7e373083fe3ea9c"
947		     "f1d64e8be3f58e7",
948		.p = "fc5054f3123deeb6ca2d35c77263c08d",
949		.sqrt = "26d3b19397db8053cf072f385f71f81e",
950	},
951	{
952		.a = "22eca556be0a5ee93e1bae520342f32331727c75dfca6082"
953		     "3aac96741594cd18",
954		.p = "fc5054f3123deeb6ca2d35c77263c08d",
955		.sqrt = "5e8e13ba599582dc056f0896c4cbae8a",
956	},
957	{
958		.a = "308e76f45903562ae8c4a56fd9e181cf2b802586383cc133"
959		     "7a186fe1d79c8726",
960		.p = "fc5054f3123deeb6ca2d35c77263c08d",
961		.sqrt = "6f7df34d1556913182384ed31aae29eb",
962	},
963	{
964		.a = "9b572efdd07a8a9cc36f20d040d92f3a90fd87a4e0aa651a"
965		     "f71361589d360bf",
966		.p = "fc5054f3123deeb6ca2d35c77263c08d",
967		.sqrt = "31dab1ec08d2030a50cae92533215502",
968	},
969	{
970		.a = "2f720cb02294a4b8b69f41cf5f7071f7010f10038f1e603b"
971		     "1394fdb65d388d5",
972		.p = "fc5054f3123deeb6ca2d35c77263c08d",
973		.sqrt = "1b8d622e0887aadbf3113f7e9c923373",
974	},
975	{
976		.a = "dd9e74c33015c49e90c1b54e29a123bb759e77f0",
977		.p = "fc5054f3123deeb6ca2d35c77263c08d",
978	},
979	{
980		.a = "da290f4e04f8dfc3c07e43dbb7121b91ee2ee29d",
981		.p = "fc5054f3123deeb6ca2d35c77263c08d",
982	},
983	{
984		.a = "111aa51f58dcaae1d55a7f50cdb2e15da632407008ca0cc3"
985		     "7ce53d6f53ea2a",
986		.p = "e7616abd0448ce8b22a99105ef99f00d",
987		.sqrt = "422bdc54895f3fbab7fdc8e8bfe7edb",
988	},
989	{
990		.a = "19381515e93479f7e5d4ce92ce1ee883ed9f50e5802d120d"
991		     "b390d62df8736b6",
992		.p = "e7616abd0448ce8b22a99105ef99f00d",
993		.sqrt = "1416624ee1b331632ede4da5a72c679f",
994	},
995	{
996		.a = "605525d619104f91c7df399e6d68b960ff69d810ae481754"
997		     "5bfa65a00d67dea",
998		.p = "e7616abd0448ce8b22a99105ef99f00d",
999		.sqrt = "274279c61f21177b40e140015ac3b690",
1000	},
1001	{
1002		.a = "e59076d17860b58cf92dc7edbba52d72c3cfa5baf141c600"
1003		     "8bf897afc3a0d0e",
1004		.p = "e7616abd0448ce8b22a99105ef99f00d",
1005		.sqrt = "3c9b0355733638764f3529906f702f46",
1006	},
1007	{
1008		.a = "1b99dda206922285a173c2e05547e366061c908b7a23af82"
1009		     "fe78a3f21c6917",
1010		.p = "e7616abd0448ce8b22a99105ef99f00d",
1011		.sqrt = "540f073d38ac532e5382f9afc215523",
1012	},
1013	{
1014		.a = "543e02b3d7c30e8ff3a141aaf6a150f01b9874b033344ce8"
1015		     "348ddbff79aca9",
1016		.p = "e7616abd0448ce8b22a99105ef99f00d",
1017		.sqrt = "92da8c6295ced9d22457eff8df968bb",
1018	},
1019	{
1020		.a = "2e6d5bf0b9d6ba16af020be648c01aa77b2717ce9262f23e"
1021		     "ebf2e2dfb11fd125",
1022		.p = "e7616abd0448ce8b22a99105ef99f00d",
1023		.sqrt = "6d051e57847d8f83e8e003e833c514ca",
1024	},
1025	{
1026		.a = "179d7fc2e81864cbd54dfa14306c06fcecfc65ed159f1f4b"
1027		     "dbd4ba616ceb064e",
1028		.p = "e7616abd0448ce8b22a99105ef99f00d",
1029		.sqrt = "4dc0b7fd597e46fdffe17ed9b8928355",
1030	},
1031	{
1032		.a = "3275ac40f4e32e5343d33881d4b3994820572bb121ece88e"
1033		     "c7995e668017ef56",
1034		.p = "e7616abd0448ce8b22a99105ef99f00d",
1035		.sqrt = "71a7ebbb86f85e267d71b796b233b773",
1036	},
1037	{
1038		.a = "34d9fd618cd45afdbe87718ad19d8377d17619376bdaecc0"
1039		     "ddb8695e035846a",
1040		.p = "e7616abd0448ce8b22a99105ef99f00d",
1041		.sqrt = "1d14620b9c69abad878797bfb2fa3bd4",
1042	},
1043	{
1044		.a = "e34380a3d760ab9415cd794c58569e3687568038",
1045		.p = "e7616abd0448ce8b22a99105ef99f00d",
1046	},
1047	{
1048		.a = "4e3af908dac0c11da23d73e9b1f2d6d3d5e94906",
1049		.p = "e7616abd0448ce8b22a99105ef99f00d",
1050	},
1051	{
1052		.a = "6ea9d07bd5e2ce59ce999d82dde6e42cfc90ba60f0b70c17"
1053		     "e6e4cef1c8d5fa8",
1054		.p = "c039e7b229cc3b7792b37ed541001005",
1055		.sqrt = "2a1422e259229156026fe1ecaecb2026",
1056	},
1057	{
1058		.a = "171dc2573d5011c8c9254adeef55f0ef572af94fa89bd329"
1059		     "d0f02d2f6fa916db",
1060		.p = "c039e7b229cc3b7792b37ed541001005",
1061		.sqrt = "4ced4e16d63f14de9e77c320d7e61dba",
1062	},
1063	{
1064		.a = "5da9be4927acc2a00f8eb2bd9007b7ea51c77e6440a1e020"
1065		     "75fbc67618e9de8",
1066		.p = "c039e7b229cc3b7792b37ed541001005",
1067		.sqrt = "26b63d2d91137017b1e5e0d3d15210e1",
1068	},
1069	{
1070		.a = "d32669bc65290f5b1fac5c04bcc3de52f582fb9dc22007f4"
1071		     "776a2fc05472435",
1072		.p = "c039e7b229cc3b7792b37ed541001005",
1073		.sqrt = "3a1fbf4661e72f835fc36be9075f43c9",
1074	},
1075	{
1076		.a = "89cb34dafdb05e01f54169143a88b7a9a4201dd66f12b957"
1077		     "6703e52cc176861",
1078		.p = "c039e7b229cc3b7792b37ed541001005",
1079		.sqrt = "2ef448e5f6e4c92d59db78cde0a066f1",
1080	},
1081	{
1082		.a = "5b8674a77fced1b08dd2376af9a96d4c4824786104ebf9f0"
1083		     "7fcc2ddd3ab0201",
1084		.p = "c039e7b229cc3b7792b37ed541001005",
1085		.sqrt = "26447c86fefaa791bf1d1c15d4607fc8",
1086	},
1087	{
1088		.a = "c54d49d0b63981375c4a9129ed4647a7e8a251045a244324"
1089		     "fd58d42baa8355a",
1090		.p = "c039e7b229cc3b7792b37ed541001005",
1091		.sqrt = "382f88a82f4719b32f2021eb845f7045",
1092	},
1093	{
1094		.a = "2256345a067ee92e441731a5007b08461aa7d2adef64664d"
1095		     "a92c40b7d79a9dc9",
1096		.p = "c039e7b229cc3b7792b37ed541001005",
1097		.sqrt = "5dc18f24fe2dd7bcf37ae865c9b48122",
1098	},
1099	{
1100		.a = "36da4779faa88d91d59824acd9b9bd00181aa5c7cfdf8243"
1101		     "7eb2544592c91c8",
1102		.p = "c039e7b229cc3b7792b37ed541001005",
1103		.sqrt = "1da00204dad7da917cb1719a9c826cd0",
1104	},
1105	{
1106		.a = "98f15c0e715dffc5a54dccee9c598314fdee262cee747268"
1107		     "2f585b7ff248ff8",
1108		.p = "c039e7b229cc3b7792b37ed541001005",
1109		.sqrt = "3177d023e1f4310118c00c362b422bf1",
1110	},
1111	{
1112		.a = "5bf6cf4b386b5de218728434e62fd0d802008bdf",
1113		.p = "c039e7b229cc3b7792b37ed541001005",
1114	},
1115	{
1116		.a = "13c22cf6c3c54b75f2c07830cf50777a5add43bf",
1117		.p = "c039e7b229cc3b7792b37ed541001005",
1118	},
1119	{
1120		.a = "8ea35eb078a0033844e5869778d9f581007c9c221338d1f6"
1121		     "4e09c528ac24747",
1122		.p = "d9c22e349011878f87754687ee523365",
1123		.sqrt = "2fc5c1c76763b2843384eaa1609285ce",
1124	},
1125	{
1126		.a = "274714f1060ba85737c3803bb6192cef8f1478448e0f3662"
1127		     "ad57fa2a6cbd13ff",
1128		.p = "d9c22e349011878f87754687ee523365",
1129		.sqrt = "6446686b34424dbb056c499ee47d6af8",
1130	},
1131	{
1132		.a = "1be91ab1e867e7c0ff4b9e039fe3a33515ade6590baba482"
1133		     "6d6ca8347f89082c",
1134		.p = "d9c22e349011878f87754687ee523365",
1135		.sqrt = "54875a1b0c7063fb4597f579a852bbce",
1136	},
1137	{
1138		.a = "b436cb73a7318ec101548cd18d97e350873563b145312a88"
1139		     "6c7e539ebcaa135",
1140		.p = "d9c22e349011878f87754687ee523365",
1141		.sqrt = "35b2914a881429245dfb9adaff55f249",
1142	},
1143	{
1144		.a = "485f18975843b575318dc7086eb45bdfdc54a8aed83b4189"
1145		     "934d2546fe231d7",
1146		.p = "d9c22e349011878f87754687ee523365",
1147		.sqrt = "2207504b2e026ad2c0754aadad5d322c",
1148	},
1149	{
1150		.a = "607d62025340dee0adc2de94c8dab17eb912c5cc8cc1589b"
1151		     "d227218c5ea6759",
1152		.p = "d9c22e349011878f87754687ee523365",
1153		.sqrt = "274aabccb65a4996273ebc7d1941981f",
1154	},
1155	{
1156		.a = "48a5421193d567325bc1d25965ac555d9384efa37843d840"
1157		     "b66b0c104f7618c",
1158		.p = "d9c22e349011878f87754687ee523365",
1159		.sqrt = "2217cafc385b2089617782b01c3cc88e",
1160	},
1161	{
1162		.a = "1e496e33fb89a64d8fcc3591304b05f7fddf4cfdb5a0986a"
1163		     "188e0e4e49f85e14",
1164		.p = "d9c22e349011878f87754687ee523365",
1165		.sqrt = "580db67fe95fbe4f965c678c3e80879d",
1166	},
1167	{
1168		.a = "ec4337ba1339cd0bf3374832526038121727b4bb78b6fd4a"
1169		     "11300ba5506612",
1170		.p = "d9c22e349011878f87754687ee523365",
1171		.sqrt = "f5eef0b27ded737243fe13eace325aa",
1172	},
1173	{
1174		.a = "e826c96625f199c8db32619c61d175f2255aeeefa9183a42"
1175		     "63553a1f3f0f29d",
1176		.p = "d9c22e349011878f87754687ee523365",
1177		.sqrt = "3cf232080315a091c876b8cfea4160d6",
1178	},
1179	{
1180		.a = "c7831203f6b08d222b1b622a7cbbee77237fc689",
1181		.p = "d9c22e349011878f87754687ee523365",
1182	},
1183	{
1184		.a = "bb13fd167d0ceec6baf65d67537d685c82c65c8b",
1185		.p = "d9c22e349011878f87754687ee523365",
1186	},
1187	{
1188		.a = "bd8c5e76b6e2746d4de3467b5c65169c3f62317dc4595bc6"
1189		     "dd1c6a1693e07f8",
1190		.p = "e3fe457cf7ae0d453157fac07cbaa725",
1191		.sqrt = "37121413fdc699e9e61ca1893700c75a",
1192	},
1193	{
1194		.a = "e24e97d56b8a5982465b48fd71f816623028b66ac9b2070f"
1195		     "ce474f541473e13",
1196		.p = "e3fe457cf7ae0d453157fac07cbaa725",
1197		.sqrt = "3c2c8c3d819b3b178474394684d256d6",
1198	},
1199	{
1200		.a = "eb5e5424a250f5921315b3b80e611a8bb31fe0ca502b3673"
1201		     "50dfb435d244a00",
1202		.p = "e3fe457cf7ae0d453157fac07cbaa725",
1203		.sqrt = "3d5decb13bdf112d2a7b8f7eb0499b9f",
1204	},
1205	{
1206		.a = "6974a858d34d14491e668420065eb1fb7c46a76464e66799"
1207		     "af8b6f21b43b7f8",
1208		.p = "e3fe457cf7ae0d453157fac07cbaa725",
1209		.sqrt = "29139f465027081bf12280ef60322f91",
1210	},
1211	{
1212		.a = "3534a02b5daf8f7448ba228e933b98fc0a237e3b6fa34a60"
1213		     "78e1a8788f7669",
1214		.p = "e3fe457cf7ae0d453157fac07cbaa725",
1215		.sqrt = "74b51a89bdf7e7f1bb04c8cc07d506b",
1216	},
1217	{
1218		.a = "279ffd9d740d5de93484de00ca0b02f876c2f8a49548fa4e"
1219		     "a16bb9b5a764f63f",
1220		.p = "e3fe457cf7ae0d453157fac07cbaa725",
1221		.sqrt = "64b7a63b5b33224381ee8dc1e0bed0da",
1222	},
1223	{
1224		.a = "19ff5b6b054acc5ca156cb335fbb57a949d3b495609625f0"
1225		     "b1b1ea0e19c1e669",
1226		.p = "e3fe457cf7ae0d453157fac07cbaa725",
1227		.sqrt = "5194934308057d3c8ecdcccb8a1f8801",
1228	},
1229	{
1230		.a = "286c1adb06c8e0d91743543c715d66581e0f1404952f2cf1"
1231		     "9a92168097e4bce",
1232		.p = "e3fe457cf7ae0d453157fac07cbaa725",
1233		.sqrt = "196e70cf9b236e13078af721e59d4642",
1234	},
1235	{
1236		.a = "2fb921c1706f29159470f5080f009b7af73a2b4b59319e89"
1237		     "44313f674843c790",
1238		.p = "e3fe457cf7ae0d453157fac07cbaa725",
1239		.sqrt = "6e87f87aae63457cd4a4a6ea532641c6",
1240	},
1241	{
1242		.a = "1e9be1645bc61e1814adf8ca7809fe2f024723b319556971"
1243		     "114b2a184e9121f6",
1244		.p = "e3fe457cf7ae0d453157fac07cbaa725",
1245		.sqrt = "5885400cb80c63bae4914308b2cdf9ea",
1246	},
1247	{
1248		.a = "9ca8cf6730dbca96d208b79b0fd52535e792b304",
1249		.p = "e3fe457cf7ae0d453157fac07cbaa725",
1250	},
1251	{
1252		.a = "73f219324f36e0aae1f6e8d95b89d0468ab1922b",
1253		.p = "e3fe457cf7ae0d453157fac07cbaa725",
1254	},
1255	{
1256		.a = "124b02b0fd0ff677573e733d6bc3bea9a6be60d6e84ef86a"
1257		     "6e67b740c7112749",
1258		.p = "d258b10a93a427f65fcdf8cbc655b845",
1259		.sqrt = "446eb9f9ac09ff7ac2b358dd78ebb4c1",
1260	},
1261	{
1262		.a = "d0d034bfbdcca69049d17eead78572c66b5f5a9e230fa1b7"
1263		     "d41e7b623a83153",
1264		.p = "d258b10a93a427f65fcdf8cbc655b845",
1265		.sqrt = "39cd2ece90ca23d6c2693178c5fcf193",
1266	},
1267	{
1268		.a = "25f55f4ea11fd8adef2d8f9781363006366f6caa0b0337a5"
1269		     "e0184795f3fad",
1270		.p = "d258b10a93a427f65fcdf8cbc655b845",
1271		.sqrt = "18a4e931a05b8416bf5b991bc02cf1a",
1272	},
1273	{
1274		.a = "25337b83d2f3e5853dd52b7052496b7a5e6380e941685db6"
1275		     "b4693edeaa62e106",
1276		.p = "d258b10a93a427f65fcdf8cbc655b845",
1277		.sqrt = "61969ce7afde7fada420c587b0241dbf",
1278	},
1279	{
1280		.a = "50eaeefcd5f5a1b5b0926caed2ec08c92c561f00275694d4"
1281		     "68c7bba52ae7b",
1282		.p = "d258b10a93a427f65fcdf8cbc655b845",
1283		.sqrt = "23fb513f8e77985606921ec8e1f49b5",
1284	},
1285	{
1286		.a = "609baed1c2d4d52f1c91a9ed2f3c68ffe87641b5f00464d2"
1287		     "128086a4c1e981e",
1288		.p = "d258b10a93a427f65fcdf8cbc655b845",
1289		.sqrt = "2750d6a4effd2c9ba5f71f80c2f58cce",
1290	},
1291	{
1292		.a = "2d9514eff20d87bf3afcbd25bc681c134780dec20d01b97d"
1293		     "3b29cc911a1d90c",
1294		.p = "d258b10a93a427f65fcdf8cbc655b845",
1295		.sqrt = "1b01816bc1b20bfaee478233e5f22911",
1296	},
1297	{
1298		.a = "28d32b18c9082ae7ea28f0be3cd7aa8efad600561d4347a8"
1299		     "53b467758443b1a8",
1300		.p = "d258b10a93a427f65fcdf8cbc655b845",
1301		.sqrt = "663b1fed3e5cfed7167cce2dbae810b1",
1302	},
1303	{
1304		.a = "fd38ba6f44adf4ce8d06344d0c3e5e4a44a34aaf93497b25"
1305		     "3f1e9b1009c6b0",
1306		.p = "d258b10a93a427f65fcdf8cbc655b845",
1307		.sqrt = "fe9b64d7af41c5ce81ff18a391165af",
1308	},
1309	{
1310		.a = "590d9ed0431461071609075d93270c323533800822a360e1"
1311		     "60210e2d5c438be",
1312		.p = "d258b10a93a427f65fcdf8cbc655b845",
1313		.sqrt = "25bf48a476372ef10dc669ed3f7d4896",
1314	},
1315	{
1316		.a = "5b0f78a90cee80f72695c3b14d340e7a38567f11",
1317		.p = "d258b10a93a427f65fcdf8cbc655b845",
1318	},
1319	{
1320		.a = "afad58d4e0c0c06fb40a77131871575bc72369a7",
1321		.p = "d258b10a93a427f65fcdf8cbc655b845",
1322	},
1323	{
1324		.a = "1e19fd22e601573225586b66084a4df65158ef45ad0fe8f0"
1325		     "a68faa4ad447cf65",
1326		.p = "ffd67dcb5d329a4a2bb7dd5714883bc5",
1327		.sqrt = "57c8a49ae8a34fc47bf236674b817723",
1328	},
1329	{
1330		.a = "5c15b5ef617d5cf85e4c9276478d9278e04a30527a2bcb66"
1331		     "a6adeb05ccb671e",
1332		.p = "ffd67dcb5d329a4a2bb7dd5714883bc5",
1333		.sqrt = "2662638f71038b2b0b9e4a06e46bb361",
1334	},
1335	{
1336		.a = "f1243406b9dbcaa1f252e7dd8c22daa9345c9151f6fa6e54"
1337		     "df6ac088c81ceb2",
1338		.p = "ffd67dcb5d329a4a2bb7dd5714883bc5",
1339		.sqrt = "3e1d6b16acc35ee99a3cf9b58f385d65",
1340	},
1341	{
1342		.a = "a951e30e28201b632da15521f791e8101ae9fdf7a107e6c5"
1343		     "6c35e4f7ce52d46",
1344		.p = "ffd67dcb5d329a4a2bb7dd5714883bc5",
1345		.sqrt = "340c978f9204064fc549747774070f41",
1346	},
1347	{
1348		.a = "2d0cda470ec77db7e748640e1c82131141b262df8cc2cea7"
1349		     "43915d3ce85533e1",
1350		.p = "ffd67dcb5d329a4a2bb7dd5714883bc5",
1351		.sqrt = "6b64207016d908d10e20b8d8098fe79b",
1352	},
1353	{
1354		.a = "47ee4bb1de2238c9ffb9ab96eef909b14b165c8cd9bc2049"
1355		     "0837e26d76134cf",
1356		.p = "ffd67dcb5d329a4a2bb7dd5714883bc5",
1357		.sqrt = "21ecc111c02eac8f8693cd21c980dea7",
1358	},
1359	{
1360		.a = "d6d0e077785db6f2246475088ce5104e6bda7921c1fb12ac"
1361		     "1149bb3c9b7eea",
1362		.p = "ffd67dcb5d329a4a2bb7dd5714883bc5",
1363		.sqrt = "ea816f0e6b06c0d446fa0a00e79103c",
1364	},
1365	{
1366		.a = "3f0fa323e5d12f4aa296f2024f86b51cad3a0339d978bb2f"
1367		     "c4a5ce4fc83a29a4",
1368		.p = "ffd67dcb5d329a4a2bb7dd5714883bc5",
1369		.sqrt = "7f0ebfc9efebd5de70d24955fa75393a",
1370	},
1371	{
1372		.a = "247680753d5599c95aab84d1b1fa516d41e092622574f295"
1373		     "ebf9b51e3825bb74",
1374		.p = "ffd67dcb5d329a4a2bb7dd5714883bc5",
1375		.sqrt = "609d7f6a4769d94e1a3ffc6916c02b50",
1376	},
1377	{
1378		.a = "5f1e3012e6d330b09e72cfbae64d71ecc314161a43045cc1"
1379		     "39c06f35a9842a5",
1380		.p = "ffd67dcb5d329a4a2bb7dd5714883bc5",
1381		.sqrt = "2702e8eea69442b4e6172a2a604727b3",
1382	},
1383	{
1384		.a = "37f3b0d8b439d1154897e5570a0c3848df6bbd0",
1385		.p = "ffd67dcb5d329a4a2bb7dd5714883bc5",
1386	},
1387	{
1388		.a = "7eaf05eecb0d43ecf2512817192528adf0889694",
1389		.p = "ffd67dcb5d329a4a2bb7dd5714883bc5",
1390	},
1391	{
1392		.a = "105c1fa13632480e2b74fb6cf6bc328cc3942f9d8e53b98f"
1393		     "1cdbe90f20cbd421",
1394		.p = "ce66d97f3c1ed87b6103b64014e37bb5",
1395		.sqrt = "40b738fd5e8a939cff33399ccf94500f",
1396	},
1397	{
1398		.a = "13a3407966b0d6d73397a45fa9be2b11acaecc6e80df03fa"
1399		     "ed2e048b044bdbd5",
1400		.p = "ce66d97f3c1ed87b6103b64014e37bb5",
1401		.sqrt = "46e7329b7c7e48e6fa2a369589706b6b",
1402	},
1403	{
1404		.a = "22147b448cd5a73ec3034e900e5e35e2c7449ddea0217f7b"
1405		     "65fc368cb7fc571",
1406		.p = "ce66d97f3c1ed87b6103b64014e37bb5",
1407		.sqrt = "1759ea6c3c8c4564b5978c40efdc030a",
1408	},
1409	{
1410		.a = "e10c85d3fcfda9437b148bd660ad5a7ebca4d80c8c68c524"
1411		     "6ceb0939273b4dc",
1412		.p = "ce66d97f3c1ed87b6103b64014e37bb5",
1413		.sqrt = "3c01ab6ba6cbdb7e8516e22542b2b18d",
1414	},
1415	{
1416		.a = "28f0530dbfaae27d8c0d6681d32a5d550cd335c110b789ef"
1417		     "2988c39b6c4d3294",
1418		.p = "ce66d97f3c1ed87b6103b64014e37bb5",
1419		.sqrt = "665f9acaaa3c55e7088bb93dc88fb6a3",
1420	},
1421	{
1422		.a = "4962eae6c1079bb2a5ee60600f9b9c9db0715a9779c20a5a"
1423		     "8415b20c4b3d85",
1424		.p = "ce66d97f3c1ed87b6103b64014e37bb5",
1425		.sqrt = "8910bc8cbf206a16968ee9607017bb3",
1426	},
1427	{
1428		.a = "15d05b2c3428db47461d4b90e8146dd4b4ad5f86465abb8a"
1429		     "7bb252ca423ff7de",
1430		.p = "ce66d97f3c1ed87b6103b64014e37bb5",
1431		.sqrt = "4aba823c04a7ec0d08070999f7ab5965",
1432	},
1433	{
1434		.a = "37c0957199baff074190dae6fde2420a56748d522ba89182"
1435		     "13bdda91a171085",
1436		.p = "ce66d97f3c1ed87b6103b64014e37bb5",
1437		.sqrt = "1dddf264310f08e6d212b7809744b075",
1438	},
1439	{
1440		.a = "1170b6f4f5c7d90fc1127a987baf05d47c1f91b62ba0dd01"
1441		     "e2ffc3e61e26544",
1442		.p = "ce66d97f3c1ed87b6103b64014e37bb5",
1443		.sqrt = "10b462a39a4ea25517c916ca1267d4ee",
1444	},
1445	{
1446		.a = "dc67e90034f4b1c96158d66c61ef94f6322bf30540767194"
1447		     "289d50a0e64a34",
1448		.p = "ce66d97f3c1ed87b6103b64014e37bb5",
1449		.sqrt = "ed8984640b9032ff7d5dc6164ea1f40",
1450	},
1451	{
1452		.a = "6412bbff1fbbca4e25a7f59fc99722dd655b1941",
1453		.p = "ce66d97f3c1ed87b6103b64014e37bb5",
1454	},
1455	{
1456		.a = "a98c16965781b8b6fb49a1fdfbefbd00ade3dc92",
1457		.p = "ce66d97f3c1ed87b6103b64014e37bb5",
1458	},
1459
1460	/*
1461	 * p = 1 (mod 8), short initial segment of quadratic residues
1462	 */
1463
1464	{
1465		.a = "b0b43e2686e8bf81e07908ee0315393cde48656e98e2c432"
1466		     "3bd5133a07a1c76",
1467		.p = "eec87e1e532b9f1a091122c4cff81d01",
1468		.sqrt = "352c0a67702fab872833b758680a99fb",
1469	},
1470	{
1471		.a = "c95dc97c4405b42ccc6bec830850684245262d383756c231"
1472		     "8dd79378a9f8669",
1473		.p = "eec87e1e532b9f1a091122c4cff81d01",
1474		.sqrt = "38c2ee16f6e355ea53e346fd9078f655",
1475	},
1476	{
1477		.a = "35379a66ef1ef5a281091c35966a31d312095cb7ac0959a0"
1478		     "0f99997ecb69f251",
1479		.p = "eec87e1e532b9f1a091122c4cff81d01",
1480		.sqrt = "74b85e7a7766ca98047ce8a702c9ebd5",
1481	},
1482	{
1483		.a = "4ccc534c7ac3ac9526407a4aae616151c8e5a38984f59a9d"
1484		     "b5e75f03c296",
1485		.p = "eec87e1e532b9f1a091122c4cff81d01",
1486		.sqrt = "8c371cbd5d69a8d82889263b56773d",
1487	},
1488	{
1489		.a = "e30807499ebe6f6c89322fd3c4b428f11ba4952f6fbae497"
1490		     "c90edc5297bdf3b",
1491		.p = "eec87e1e532b9f1a091122c4cff81d01",
1492		.sqrt = "3c452e6bd40178ab4cf09f121a9a89ef",
1493	},
1494	{
1495		.a = "24dc33460e63ad6ae3d5e659bcfcf7208f083c804501a5e9"
1496		     "1b12f0478c6f5f2f",
1497		.p = "eec87e1e532b9f1a091122c4cff81d01",
1498		.sqrt = "6123de04bebd162ffb002e0500ab8359",
1499	},
1500	{
1501		.a = "26c2a761b5d95bc3847ff7a58825f249738d9c1eb8a003ba"
1502		     "53be67dd6a4b92d",
1503		.p = "eec87e1e532b9f1a091122c4cff81d01",
1504		.sqrt = "18e73380a4810e17bb114f3e1f38bb14",
1505	},
1506	{
1507		.a = "362b43adb6aa4f3f7041ee86d42ee37897495fbcd2a52a47"
1508		     "9e1a80493f1fbc7e",
1509		.p = "eec87e1e532b9f1a091122c4cff81d01",
1510		.sqrt = "75c264b8c82dfb64c9cfee3e0c64c699",
1511	},
1512	{
1513		.a = "7364cfd413f046b4bb886cda3d7dcda21f619ebb715a5bd0"
1514		     "6cc3833be5d4107",
1515		.p = "eec87e1e532b9f1a091122c4cff81d01",
1516		.sqrt = "2af7f6495da83f2f27d947cb982cec03",
1517	},
1518	{
1519		.a = "3e7559de589e876d2fe6efd091a0a91511b7334576eef8f0"
1520		     "ecacb298b61838a",
1521		.p = "eec87e1e532b9f1a091122c4cff81d01",
1522		.sqrt = "1f9cbc8282c070ed616cc1a97fac79a9",
1523	},
1524	{
1525		.a = "25ba186abff6724df832e524fd872f6306adefbd",
1526		.p = "eec87e1e532b9f1a091122c4cff81d01",
1527	},
1528	{
1529		.a = "59193d6469d246596bc69cc0030b2e0a0ff2296a",
1530		.p = "eec87e1e532b9f1a091122c4cff81d01",
1531	},
1532	{
1533		.a = "1f14cb634a8e3f4f262998e8e661b91b424ec91b48e245b2"
1534		     "0c7b79d21bfc9307",
1535		.p = "c6f187c92de82671e10480e2f38454f1",
1536		.sqrt = "59336bf333f7dab3f26b6e5b3d580ae4",
1537	},
1538	{
1539		.a = "6b1b8ea97893defaaaa262bbedec178071cd0de9fb5b1bf6"
1540		     "35148c2880bbcac",
1541		.p = "c6f187c92de82671e10480e2f38454f1",
1542		.sqrt = "2965aa4725e333b86683bf030fd5828d",
1543	},
1544	{
1545		.a = "12996d48b6f9cc889c9173399f5f4db773f29a964a192980"
1546		     "2183f3939b94ab8d",
1547		.p = "c6f187c92de82671e10480e2f38454f1",
1548		.sqrt = "4500cab9ab7aec1150b1223ee9cd7049",
1549	},
1550	{
1551		.a = "3dae5dd26b2373500194c86816b27350a53aae4b5dd31531"
1552		     "01d5f6e5a9d3df4",
1553		.p = "c6f187c92de82671e10480e2f38454f1",
1554		.sqrt = "1f6a38ef49cc8bd1eef8883f1491227f",
1555	},
1556	{
1557		.a = "9e2de20f229e667f8e79d43f9f31b890f8b9b58aba382037"
1558		     "ae889c6fc807bf2",
1559		.p = "c6f187c92de82671e10480e2f38454f1",
1560		.sqrt = "324ec7636c3dff4fa3253fbc81af6dab",
1561	},
1562	{
1563		.a = "80d25f2f19978918bca80dab98de01d82ae3b169ba0f6e89"
1564		     "03d21cb4fc27329",
1565		.p = "c6f187c92de82671e10480e2f38454f1",
1566		.sqrt = "2d665de92ba36cd16eafa053f5dc4ef5",
1567	},
1568	{
1569		.a = "70410faf098a2039617c43dd4768c4366f3583a543d74d00"
1570		     "7781d5fae6308ec",
1571		.p = "c6f187c92de82671e10480e2f38454f1",
1572		.sqrt = "2a61492be8dbba6a845ebf0d132e2698",
1573	},
1574	{
1575		.a = "5a35e960ebdb0461f1867c55fd8e4f1e626a7facab744924"
1576		     "2c92e8fe724c17b",
1577		.p = "c6f187c92de82671e10480e2f38454f1",
1578		.sqrt = "25fde03b1a02c096f8383c840443c2d3",
1579	},
1580	{
1581		.a = "a1d2ed930145ab18b174126582c20cc189d64844227bcbd4"
1582		     "6437cd12564cee5",
1583		.p = "c6f187c92de82671e10480e2f38454f1",
1584		.sqrt = "32e24ed1bc281819156635ca43ef4a4c",
1585	},
1586	{
1587		.a = "7054c96a5e8841dcc19561c1324d5ad01c31e853eb73f983"
1588		     "f4d3b86a199cbb6",
1589		.p = "c6f187c92de82671e10480e2f38454f1",
1590		.sqrt = "2a65023c989bb86d8ea28dce73589cd5",
1591	},
1592	{
1593		.a = "be49695b8e19d4480f861204bc929de31e6cc630",
1594		.p = "c6f187c92de82671e10480e2f38454f1",
1595	},
1596	{
1597		.a = "3a0c60b78ae72dfe52da83947fa263ceb2db906b",
1598		.p = "c6f187c92de82671e10480e2f38454f1",
1599	},
1600	{
1601		.a = "165cf974fe4ed624e4f37336c62619b3e7e810c12efaa571"
1602		     "5edddc9fecd73a43",
1603		.p = "debc88c58dfc9ad8e61d69f61fc52d49",
1604		.sqrt = "4ba9df1fcfeeb2d1c8ee0ac376216ef2",
1605	},
1606	{
1607		.a = "4678e362dc4e15b9398f7ccc8fa691b6a05ba26089a0ee9b"
1608		     "b6b538a62e96043",
1609		.p = "debc88c58dfc9ad8e61d69f61fc52d49",
1610		.sqrt = "21943f77370cefaa2abbd82ec27bbe25",
1611	},
1612	{
1613		.a = "7eff91bde1563cc1919ae3a81fa35182a6a44454164c9ba4"
1614		     "9e3f3cf689d23a1",
1615		.p = "debc88c58dfc9ad8e61d69f61fc52d49",
1616		.sqrt = "2d13d1477e40f4bcf7df8323b1f2c103",
1617	},
1618	{
1619		.a = "1de4798791513fe1babddcef80e6a15c996d15f5b70f584b"
1620		     "9ece3ca9ab76d2cf",
1621		.p = "debc88c58dfc9ad8e61d69f61fc52d49",
1622		.sqrt = "577a7a0479f552028216368fb7a36ecb",
1623	},
1624	{
1625		.a = "82732b80ab0df57861ffec20a3c75c270bc5e134eebb264f"
1626		     "99d8f3ebbd53ab4",
1627		.p = "debc88c58dfc9ad8e61d69f61fc52d49",
1628		.sqrt = "2daf94bf89a6d4b92d99f6ec2be281b1",
1629	},
1630	{
1631		.a = "27eb19d9f5b57e8b8eb038da5358a95908dcbeaf7910a9d2"
1632		     "7b063d6f00850fc4",
1633		.p = "debc88c58dfc9ad8e61d69f61fc52d49",
1634		.sqrt = "6516ee003d56d1d4eac285a97de1af3a",
1635	},
1636	{
1637		.a = "12f3ebcf10e154bd69406ed2df0fe0ffd2f613ac45e69c4b"
1638		     "bec2c33247a28df",
1639		.p = "debc88c58dfc9ad8e61d69f61fc52d49",
1640		.sqrt = "1169f787334a104e5da71364960bb4b3",
1641	},
1642	{
1643		.a = "81de8f01e74ce3a1b254c9f2a18817c806e50a3c95903392"
1644		     "943ea1b8ec0d2ac",
1645		.p = "debc88c58dfc9ad8e61d69f61fc52d49",
1646		.sqrt = "2d9587643969929cfb837f76ca325d5d",
1647	},
1648	{
1649		.a = "148c6cdf92945f7111d9ad5ad4a206a349cc46be1a89781c"
1650		     "1b09780f40cebafd",
1651		.p = "debc88c58dfc9ad8e61d69f61fc52d49",
1652		.sqrt = "48875ebd5c183cc3ae177c2506c27249",
1653	},
1654	{
1655		.a = "fe6ef7838aa594f982ac528e59641752e0a4873ef72d900d"
1656		     "703462f5f18c20b",
1657		.p = "debc88c58dfc9ad8e61d69f61fc52d49",
1658		.sqrt = "3fcdcb3f24ebb63257de3e9acd379046",
1659	},
1660	{
1661		.a = "704e6918f3a0a47b167296642e1f6c064b5fed6",
1662		.p = "debc88c58dfc9ad8e61d69f61fc52d49",
1663	},
1664	{
1665		.a = "e10a7f7f045c58adf44a12fcc6cec87bd63b75b",
1666		.p = "debc88c58dfc9ad8e61d69f61fc52d49",
1667	},
1668	{
1669		.a = "b9656d002c98fa8c120ac1db4a05775df1c3319de5bfb690"
1670		     "1c0d264f372014",
1671		.p = "fbde582b5fbe2da75cae71930eb93f21",
1672		.sqrt = "d9db3f403b9e424045df0a09e6cd899",
1673	},
1674	{
1675		.a = "1974d77a065c76035af3290bb7dd8e1cddfc19c59facb248"
1676		     "1639bd8eee190b",
1677		.p = "fbde582b5fbe2da75cae71930eb93f21",
1678		.sqrt = "50ba19e7001bcb74ee9d6df6933e18b",
1679	},
1680	{
1681		.a = "94751c7af51c0786c679e31948c0489d12fabf16c8814bad"
1682		     "906b3b41e6b229b",
1683		.p = "fbde582b5fbe2da75cae71930eb93f21",
1684		.sqrt = "30bcbc5bf9b4bde195aba7aeefa44bfc",
1685	},
1686	{
1687		.a = "3dc05f7bd4aabe0a68e366abcc0487f1a10c4c179cb665b7"
1688		     "ccf4f39ce6063bb0",
1689		.p = "fbde582b5fbe2da75cae71930eb93f21",
1690		.sqrt = "7dbb39e9a61cdbcf7e83b21483d922f6",
1691	},
1692	{
1693		.a = "208977daf6a72daa5c5d4e14fbe2e28fa533753867d08329"
1694		     "5af878df4c7e377e",
1695		.p = "fbde582b5fbe2da75cae71930eb93f21",
1696		.sqrt = "5b4413582ab1a3ff47f447cc08c0d0ed",
1697	},
1698	{
1699		.a = "3de30458947b12443eb955b8895c7b45db79e53805a82933"
1700		     "3b93dee77f4528e",
1701		.p = "fbde582b5fbe2da75cae71930eb93f21",
1702		.sqrt = "1f779e770a66ab59075023137a0f55fd",
1703	},
1704	{
1705		.a = "18f5f5e27aec608f1fd5520a17983aba52d6a1d0ac3d88ec"
1706		     "0243fb82a649ec4c",
1707		.p = "fbde582b5fbe2da75cae71930eb93f21",
1708		.sqrt = "4fefee3399d14feca488bbafcbd9b10e",
1709	},
1710	{
1711		.a = "155a7cab9f3549ddc09cd71691144e147b6471e3e9ecfef2"
1712		     "6db13e9fa385108d",
1713		.p = "fbde582b5fbe2da75cae71930eb93f21",
1714		.sqrt = "49ef89b4f7a44d54bba946b799fee7b0",
1715	},
1716	{
1717		.a = "567ec8920ee7fc5d5a66fd5fb6714a449dd86220a424d4ad"
1718		     "86f0a6b31b7a3c4",
1719		.p = "fbde582b5fbe2da75cae71930eb93f21",
1720		.sqrt = "25337d299557bb92261fd1fd30cc7236",
1721	},
1722	{
1723		.a = "1d3a6ca959af4a5d1cb68a950f244400259e87f51c6f29bd"
1724		     "ac8905767b7e6342",
1725		.p = "fbde582b5fbe2da75cae71930eb93f21",
1726		.sqrt = "568042169dc73549d6345470ee1eabb2",
1727	},
1728	{
1729		.a = "ecc06a093a4b1438a644026f9daba3dbfee04846",
1730		.p = "fbde582b5fbe2da75cae71930eb93f21",
1731	},
1732	{
1733		.a = "4b770b922a4704dd5dcfb1b44bccc4bc79d75dd6",
1734		.p = "fbde582b5fbe2da75cae71930eb93f21",
1735	},
1736	{
1737		.a = "142f20f570f05d4fe64988f56be3ab87aa855d4f8b145dda"
1738		     "7176d7b51c93e765",
1739		.p = "c579568a7fda58a3116a02bde4c395b1",
1740		.sqrt = "47e1fb727135a208cc2c7ea7b0c379fe",
1741	},
1742	{
1743		.a = "979a2fbdbf6fe322c4b7a96d1b8dcf98aa337ee09989d42b"
1744		     "2846137dd294a18",
1745		.p = "c579568a7fda58a3116a02bde4c395b1",
1746		.sqrt = "314031569a866f17741995c94339eff3",
1747	},
1748	{
1749		.a = "1125db5aba454aced382b162c403d256b4b74f15a8da2bd9"
1750		     "8c7df618069b5a00",
1751		.p = "c579568a7fda58a3116a02bde4c395b1",
1752		.sqrt = "424188e0d7180cc52c9cade1410166be",
1753	},
1754	{
1755		.a = "5c15ec51bdca83353cda8dae1258b75eda7320fb2b5f61fd"
1756		     "9c2dd4ef047184",
1757		.p = "c579568a7fda58a3116a02bde4c395b1",
1758		.sqrt = "9989bb94715481c52520a8f18b5d16a",
1759	},
1760	{
1761		.a = "a14e2920e9a3d3c9dcb2b2625570c2799d1ec9bf13eef681"
1762		     "6a2493e0bb67abf",
1763		.p = "c579568a7fda58a3116a02bde4c395b1",
1764		.sqrt = "32cd6adb81261c417dd10a2583a2d1de",
1765	},
1766	{
1767		.a = "4f7e44dd885cfcc183c4c6a81bbc54029b5ec16a57c18d2a"
1768		     "dcb85ddb1f674a",
1769		.p = "c579568a7fda58a3116a02bde4c395b1",
1770		.sqrt = "8ea784baad105cace13c408e30333c4",
1771	},
1772	{
1773		.a = "1ca8323e809c9adda0190816e6083aecf2d7249f111b80af"
1774		     "e243f3ec95b07909",
1775		.p = "c579568a7fda58a3116a02bde4c395b1",
1776		.sqrt = "55a6cf22f6779438a874c1790ee79b01",
1777	},
1778	{
1779		.a = "241ffcdf08f03805c6ba3bd1fe664a031aed20225e841269"
1780		     "8df05607921bb7ae",
1781		.p = "c579568a7fda58a3116a02bde4c395b1",
1782		.sqrt = "602a9d0981fbdf7429190008e771bf43",
1783	},
1784	{
1785		.a = "2005bcee577a5a69d7d38a7c33c0f32a5d4d092cb961369b"
1786		     "8ce8718596581c5",
1787		.p = "c579568a7fda58a3116a02bde4c395b1",
1788		.sqrt = "16a2a5a7aed60909e10cdde80133b3d1",
1789	},
1790	{
1791		.a = "24e5fd362ef16d84a64f25481f99daea591b537726220bcf"
1792		     "59ecc270559a1e21",
1793		.p = "c579568a7fda58a3116a02bde4c395b1",
1794		.sqrt = "6130c332ad0069454b0e327e635ad978",
1795	},
1796	{
1797		.a = "aa65d05d557cf6a73d04668ac5c474cf738d20a0",
1798		.p = "c579568a7fda58a3116a02bde4c395b1",
1799	},
1800	{
1801		.a = "b0e60e655eef70c827476d6706b8ebc040392f78",
1802		.p = "c579568a7fda58a3116a02bde4c395b1",
1803	},
1804	{
1805		.a = "2e2f92d2457763400965223456e5fb40f67df2022e1b397a"
1806		     "f37ca2135582db4",
1807		.p = "d1bd970108af0ab47a7ccff9c1f7b6d1",
1808		.sqrt = "1b2f1ed46b49eb6a0529b395c74f44bf",
1809	},
1810	{
1811		.a = "c4fab9bdefce241989dc61671de4c86d7d7644c02c0be973"
1812		     "54a9f6d865b8128",
1813		.p = "d1bd970108af0ab47a7ccff9c1f7b6d1",
1814		.sqrt = "3823c5f72e6d52d7022b4cb12a312f00",
1815	},
1816	{
1817		.a = "13d0f37f258adc9fbfbde054fb0a9560eacdc5cd8ccd7cdc"
1818		     "928730d1b7e1ff4a",
1819		.p = "d1bd970108af0ab47a7ccff9c1f7b6d1",
1820		.sqrt = "473982d7a7015f122afc0a97e94bf72b",
1821	},
1822	{
1823		.a = "e7593a8c8cca00d2996f301e0b2246f12609bcdff086020c"
1824		     "8e78ad216665e",
1825		.p = "d1bd970108af0ab47a7ccff9c1f7b6d1",
1826		.sqrt = "3cd73095a2a43b2dc019896d5f51fab",
1827	},
1828	{
1829		.a = "1fb9fe423f25e1546d266fee359a6b65cbbf4fa49822f597"
1830		     "76a67f989057af2",
1831		.p = "d1bd970108af0ab47a7ccff9c1f7b6d1",
1832		.sqrt = "1687d08343e40b4750c9592bac920dbc",
1833	},
1834	{
1835		.a = "dbb601ad3da8e497e34eb2f541fcd576dafefa41751a18bd"
1836		     "435ceefbef0c44a",
1837		.p = "d1bd970108af0ab47a7ccff9c1f7b6d1",
1838		.sqrt = "3b4a64d9bf6ebdd2bd243432c0d532a6",
1839	},
1840	{
1841		.a = "6d71e7136f775c460d920b0796c8df487e7dc97d22ea5d92"
1842		     "e8bce3470504a13",
1843		.p = "d1bd970108af0ab47a7ccff9c1f7b6d1",
1844		.sqrt = "29d8abe2fb649295530753aaf1327711",
1845	},
1846	{
1847		.a = "5609c11c6911640ff282bd04ce8400a1221c097df2ef63ed"
1848		     "4ac8b4e999d51a5",
1849		.p = "d1bd970108af0ab47a7ccff9c1f7b6d1",
1850		.sqrt = "251a49ed949d8ddcc69aa3d6dda2dbdb",
1851	},
1852	{
1853		.a = "2df199e2eba7bd3163719afb875e1f64bb5327a51c2e9fe6"
1854		     "c56ef8592a9598a",
1855		.p = "d1bd970108af0ab47a7ccff9c1f7b6d1",
1856		.sqrt = "1b1cdbcd9320d9443ac170ff59d6c27c",
1857	},
1858	{
1859		.a = "2c91906b42c1a3c210516de02bc028f1f2916992158e13b6"
1860		     "03565a950e1b863",
1861		.p = "d1bd970108af0ab47a7ccff9c1f7b6d1",
1862		.sqrt = "1ab432280a0b62a6784abdb8ff2d863c",
1863	},
1864	{
1865		.a = "ac93b16f0e514f2d4ea5270fede89adea8bf3205",
1866		.p = "d1bd970108af0ab47a7ccff9c1f7b6d1",
1867	},
1868	{
1869		.a = "74a3c88c833d3c186c8ddfc0ae0cd9134503c933",
1870		.p = "d1bd970108af0ab47a7ccff9c1f7b6d1",
1871	},
1872	{
1873		.a = "164e6a030c238052514d8152aed4f20009275ea0555e7f14"
1874		     "f2789eff29e27be0",
1875		.p = "cc0bd352a591f8665ea869e19947a909",
1876		.sqrt = "4b913964a95efc1abff3727531e6d1be",
1877	},
1878	{
1879		.a = "121a1159c2305a9bc5b85cd1ae1cda94cee7dbfa471e99f3"
1880		     "5d5471c7bffe918d",
1881		.p = "cc0bd352a591f8665ea869e19947a909",
1882		.sqrt = "4412f0d87aa6931d475a536af11974aa",
1883	},
1884	{
1885		.a = "205b1ab436bfcb8c64aca2a495d47c16703746de53edfcbe"
1886		     "71762c73f73cd7f4",
1887		.p = "cc0bd352a591f8665ea869e19947a909",
1888		.sqrt = "5b02f5b0766eb62563120a97d3da7016",
1889	},
1890	{
1891		.a = "1a84a5e3bf3784e752c2734c536659b1daf6acd4423c7ad9"
1892		     "c89c56fc2959b6df",
1893		.p = "cc0bd352a591f8665ea869e19947a909",
1894		.sqrt = "5264ac2cedc3afd4ed552aeead50c87e",
1895	},
1896	{
1897		.a = "a008aa6563a2233120e31e75f2bf91c4c32ddfbe4ce80e22"
1898		     "c10f16efe9ed7f5",
1899		.p = "cc0bd352a591f8665ea869e19947a909",
1900		.sqrt = "329a0f3350dba44da9c0fa3fb3001460",
1901	},
1902	{
1903		.a = "3454b1dba0a1eb696492911db8d36c58fd1f283802533765"
1904		     "984e3f5c3ce0dee",
1905		.p = "cc0bd352a591f8665ea869e19947a909",
1906		.sqrt = "1cef9f32af8abe01ee1fb856df4a9619",
1907	},
1908	{
1909		.a = "24cc035dd244bca942b1144f4533548fa36faef24f838deb"
1910		     "371870df172474a3",
1911		.p = "cc0bd352a591f8665ea869e19947a909",
1912		.sqrt = "610e8750278f896c548f5b8f6c08d896",
1913	},
1914	{
1915		.a = "24308e5a0df6a24c4c01726759757ee155ef2f107b4d69d7"
1916		     "90e1c66b47beb33",
1917		.p = "cc0bd352a591f8665ea869e19947a909",
1918		.sqrt = "18102a01dea52cf26ec7bcd9ce7bcf1e",
1919	},
1920	{
1921		.a = "2656e62c6b0cc284f0cb348094467a51d89eec529b8ffcfe"
1922		     "f34805a2211fdfa1",
1923		.p = "cc0bd352a591f8665ea869e19947a909",
1924		.sqrt = "6311f6d63ed3fdd25ea3b0b44444fcb8",
1925	},
1926	{
1927		.a = "227ea04bc695cf6afc9ae8414776f4a4a09b7baa3755eb93"
1928		     "569e1c6e979a09f",
1929		.p = "cc0bd352a591f8665ea869e19947a909",
1930		.sqrt = "177e2b9aa023b58ab846307b1e948d16",
1931	},
1932	{
1933		.a = "2b40088613eb00bcaa1fa590a18924b12876e414",
1934		.p = "cc0bd352a591f8665ea869e19947a909",
1935	},
1936	{
1937		.a = "2ef7c6d7541f87a19fa4f788bc213b2e4807eedc",
1938		.p = "cc0bd352a591f8665ea869e19947a909",
1939	},
1940	{
1941		.a = "22edc2d92411cc04ef7ad3119a87a5e12073d9e09c74539b"
1942		     "be76677cbe145ab2",
1943		.p = "e2fd3d48b3845be5df89591787fd68e1",
1944		.sqrt = "5e8f9636712aecc1a01b915baeda4f76",
1945	},
1946	{
1947		.a = "29fea5f62359b09c8dbb54de10637f04295258dbe34e91a8"
1948		     "3dbb0f81447c0f",
1949		.p = "e2fd3d48b3845be5df89591787fd68e1",
1950		.sqrt = "67af71fc655003a5abf936a9ac002b8",
1951	},
1952	{
1953		.a = "8f66c7428f3d42ff8c1d5ee690d8378457d6f2398d7031ef"
1954		     "74663b895758689",
1955		.p = "e2fd3d48b3845be5df89591787fd68e1",
1956		.sqrt = "2fe66fbc713a5304afed6b054570859b",
1957	},
1958	{
1959		.a = "fd9a8bfabaf8bae3776af4c4863dd94751de970d9d27a8ee"
1960		     "12ff19fa805f721",
1961		.p = "e2fd3d48b3845be5df89591787fd68e1",
1962		.sqrt = "3fb32357d34705010c2c57f5f01d142d",
1963	},
1964	{
1965		.a = "2fc61df839a0b92ddeb05d69df8f5830b13faa5325cbe198"
1966		     "e9731e1892c347c",
1967		.p = "e2fd3d48b3845be5df89591787fd68e1",
1968		.sqrt = "1ba5c042e81e591307e09615209ed8a4",
1969	},
1970	{
1971		.a = "5721f5f2c40a81655246041e141a8399cabc43e19c866568"
1972		     "568d5383337dfba",
1973		.p = "e2fd3d48b3845be5df89591787fd68e1",
1974		.sqrt = "255683ec2efe5057dea7391c5912ae9c",
1975	},
1976	{
1977		.a = "2c7a60d81f0a2ee7e1ff17f0271be4af740fe7001e6f9602"
1978		     "07766cffd9dd583e",
1979		.p = "e2fd3d48b3845be5df89591787fd68e1",
1980		.sqrt = "6ab4fc3f4f0c7674d9443ffbddf70d99",
1981	},
1982	{
1983		.a = "3a167990a328fae6c924e193fd37eb420eb5761dffbf6269"
1984		     "b7f1696b6598ee",
1985		.p = "e2fd3d48b3845be5df89591787fd68e1",
1986		.sqrt = "79f1ce74a61de8d2da7f4fff2421e30",
1987	},
1988	{
1989		.a = "13ca314b6be0b28ade1f8d3581eb137f8196a74f8f3f801b"
1990		     "7410bc0d12d49cd",
1991		.p = "e2fd3d48b3845be5df89591787fd68e1",
1992		.sqrt = "11cb571a0d7832a5131c3bd9e2b2175b",
1993	},
1994	{
1995		.a = "2ac0f52b513f3d5dc1aad96129f2d68f3512b1a83a9ed1a9"
1996		     "8ae07407527c1",
1997		.p = "e2fd3d48b3845be5df89591787fd68e1",
1998		.sqrt = "1a278fccb0eafab3c74cdb5a1e0660a",
1999	},
2000	{
2001		.a = "b3b7c12e0c3c394e7b41748f46bb5a71422f44fe",
2002		.p = "e2fd3d48b3845be5df89591787fd68e1",
2003	},
2004	{
2005		.a = "c339daf5e328d836ca0274464ead34c8d4e8b3df",
2006		.p = "e2fd3d48b3845be5df89591787fd68e1",
2007	},
2008	{
2009		.a = "1cad67a0472e3d78ce2f4db0079bf3d3efef4c16bb8b1295"
2010		     "df85c8790aae9586",
2011		.p = "dd371a07847d0e0ba15fe277859db621",
2012		.sqrt = "55ae976c8da057f164602c832173e3bd",
2013	},
2014	{
2015		.a = "1f2aa0fa2d7aaf972d75e84280b1c193bbd4de6de474a1b1"
2016		     "daa929b44805eaa4",
2017		.p = "dd371a07847d0e0ba15fe277859db621",
2018		.sqrt = "5952bb50076a5002d4fd98ee1b234bee",
2019	},
2020	{
2021		.a = "18b96cb4952e56620973262602bb7c65b81b7155e0561c0f"
2022		     "c27e611cdaca4ebe",
2023		.p = "dd371a07847d0e0ba15fe277859db621",
2024		.sqrt = "4f8ec4312a94b37af9d2677320b55d88",
2025	},
2026	{
2027		.a = "19c0b132a768d471e98aec9b3d06620894d3909bae11fc3c"
2028		     "3ecb9f33c7cdac28",
2029		.p = "dd371a07847d0e0ba15fe277859db621",
2030		.sqrt = "5132056926467b9ebc503517eae731b4",
2031	},
2032	{
2033		.a = "2e91ee9e3f29a743a7ed896237b1cdc4ff7045391128a3fe"
2034		     "1fe43b7eb33b88c8",
2035		.p = "dd371a07847d0e0ba15fe277859db621",
2036		.sqrt = "6d3006960c9822d8e3e20277297f2b4d",
2037	},
2038	{
2039		.a = "a89e2e2f33c155e357ace3a22721d0acd7b7c754698e6f46"
2040		     "b75c5b8507315d9",
2041		.p = "dd371a07847d0e0ba15fe277859db621",
2042		.sqrt = "33f0f13b9bfbccfc3af5ebcf2932234f",
2043	},
2044	{
2045		.a = "bafc09132b129b127efb13fca3e56fd94d70f5e60664d93d"
2046		     "6e56bcfd43f138",
2047		.p = "dd371a07847d0e0ba15fe277859db621",
2048		.sqrt = "dac9a361004882677076847427fc17a",
2049	},
2050	{
2051		.a = "2ca6dca28ad4a0c1b16ddbb1d9439cdfce6f8220ddd77af8"
2052		     "192d157f0cc18a",
2053		.p = "dd371a07847d0e0ba15fe277859db621",
2054		.sqrt = "6aea4b1e58873c72cf789c7e1b38c67",
2055	},
2056	{
2057		.a = "aacc0a85bd836d8b31aafaa15b5b30198cfe32943796490a"
2058		     "2f66829fea31ead",
2059		.p = "dd371a07847d0e0ba15fe277859db621",
2060		.sqrt = "344696a190e09e2fcc7c162be811ea3a",
2061	},
2062	{
2063		.a = "145df6843833e76a7d4f7b9ee3df29ed2a604663887296de"
2064		     "844739e5f2c59086",
2065		.p = "dd371a07847d0e0ba15fe277859db621",
2066		.sqrt = "483530d37ec99f64af73f91ff39c2071",
2067	},
2068	{
2069		.a = "b73e95675c9ae0eeb18640fb9e9363ec44c83275",
2070		.p = "dd371a07847d0e0ba15fe277859db621",
2071	},
2072	{
2073		.a = "86545503f6b37446d95dfab5af4536927ef7c949",
2074		.p = "dd371a07847d0e0ba15fe277859db621",
2075	},
2076	{
2077		.a = "1a0ca94f23fb2ff2f05ee6edf6c5288ee6632c9bb78b1f27"
2078		     "a1418ea74cefec90",
2079		.p = "d8708392da9cc40e2cc47ad468621c99",
2080		.sqrt = "51a970741b5119c5d0f3ef99ee70c620",
2081	},
2082	{
2083		.a = "40941999acd5ecaf4819064d829274799f81c557c872b94f"
2084		     "9c55f90669bbbce",
2085		.p = "d8708392da9cc40e2cc47ad468621c99",
2086		.sqrt = "2024f113a8ff4531638916f5ce8ce437",
2087	},
2088	{
2089		.a = "1d2b395e6e74c7a9c89df6b709b809747ad27b2f39e2c84c"
2090		     "c6bfe6c88c591a48",
2091		.p = "d8708392da9cc40e2cc47ad468621c99",
2092		.sqrt = "5669c103c43a3e71eff5067f1c64689e",
2093	},
2094	{
2095		.a = "256567c23e2f5efcae74a5ee4390c2a53371f70cc6a391e4"
2096		     "6cb41df3ac32d795",
2097		.p = "d8708392da9cc40e2cc47ad468621c99",
2098		.sqrt = "61d801f9493c8dd4df81bdec46b11044",
2099	},
2100	{
2101		.a = "1cf702151efb378046c6e1ff7c4fdea64dab11de545b18cc"
2102		     "4635faff50bb2023",
2103		.p = "d8708392da9cc40e2cc47ad468621c99",
2104		.sqrt = "561c45e4d90fbc3d67e257d464522362",
2105	},
2106	{
2107		.a = "2a76050e09a73aeec0b232bd0c58141f1240c51fd0e1c802"
2108		     "d2c6cf88090cbeb9",
2109		.p = "d8708392da9cc40e2cc47ad468621c99",
2110		.sqrt = "6842672d2370bdef87261e322caefacc",
2111	},
2112	{
2113		.a = "3a947f3f87fdac9374669cbd3f426629b2b4b0813a72679c"
2114		     "91bf1536b4bdf95",
2115		.p = "d8708392da9cc40e2cc47ad468621c99",
2116		.sqrt = "1e9d73ae67b54e8c1b37638ff2c5e17f",
2117	},
2118	{
2119		.a = "a2e97855accfaca7225f22b1956b639f40dff10ee0767b7e"
2120		     "34e8daf8af129d3",
2121		.p = "d8708392da9cc40e2cc47ad468621c99",
2122		.sqrt = "330e06e86764464282b30f49d39e279b",
2123	},
2124	{
2125		.a = "233a0d4f8e8b10457cee27d567331ada6c3bb189737efd83"
2126		     "6461a7c3b00e0e40",
2127		.p = "d8708392da9cc40e2cc47ad468621c99",
2128		.sqrt = "5ef6a2fd26778224d90f8d922c064306",
2129	},
2130	{
2131		.a = "22e5d6d527c72836c1120fb64094f939bf0bf7739cd999f0"
2132		     "7e04c68e3223c074",
2133		.p = "d8708392da9cc40e2cc47ad468621c99",
2134		.sqrt = "5e84dc6e6d114b48d36564b1d9881eac",
2135	},
2136	{
2137		.a = "766cf945129c9768cabe5c8bc206ee011a133fb3",
2138		.p = "d8708392da9cc40e2cc47ad468621c99",
2139	},
2140	{
2141		.a = "8b8061d0214fb275eb3edf0ac4efc12983c5188a",
2142		.p = "d8708392da9cc40e2cc47ad468621c99",
2143	},
2144
2145	/*
2146	 * p = 1 (mod 8), long initial segment of quadratic residues
2147	 */
2148
2149	{
2150		.a = "121a50ac860d84f7632ea520155e45108edbf726ef400312"
2151		     "af265d6d6b542aa",
2152		.p = "ee690b3287cc4bef7173d1ae8c38af11",
2153		.sqrt = "1104d9fa5277ffd941b2ca504033f3c1",
2154	},
2155	{
2156		.a = "12bba14492ac49da4e944ac02ac9ded3a2d449cadbba048f"
2157		     "9d30d2a96f6b9e1",
2158		.p = "ee690b3287cc4bef7173d1ae8c38af11",
2159		.sqrt = "115007fab662b063f1c1a85a986d9574",
2160	},
2161	{
2162		.a = "13d8ac7d33c3ea1bcb184abc660fe5ff6ac0b3eace1f6ac0"
2163		     "76425b4a70b6bf0a",
2164		.p = "ee690b3287cc4bef7173d1ae8c38af11",
2165		.sqrt = "474762679be31397e717f008a6d94c44",
2166	},
2167	{
2168		.a = "331f552bbda4b1d992dd79a7dac65fc714d6123502efd1ca"
2169		     "131eca10e1f832cd",
2170		.p = "ee690b3287cc4bef7173d1ae8c38af11",
2171		.sqrt = "72665e9479b1cae103882e27b3896e4e",
2172	},
2173	{
2174		.a = "d39f0377067e6d7814a3b54b74d5fc877e6a150a842dee80"
2175		     "2a5b35f434e94ef",
2176		.p = "ee690b3287cc4bef7173d1ae8c38af11",
2177		.sqrt = "3a3056445c077b79b88dd4feac16ee6f",
2178	},
2179	{
2180		.a = "59ffa4f211e11e9e28bf06313768d9e6f30539ce99a64803"
2181		     "3b147f97992630b",
2182		.p = "ee690b3287cc4bef7173d1ae8c38af11",
2183		.sqrt = "25f271261880530813283b393df6d638",
2184	},
2185	{
2186		.a = "196e733b9783263e5097a258d393314e518d78908dbbd0d9"
2187		     "8e835ea8811ded62",
2188		.p = "ee690b3287cc4bef7173d1ae8c38af11",
2189		.sqrt = "50aff6d9df607c2aab6c09da72abe272",
2190	},
2191	{
2192		.a = "1ad74de96a84df153ed96f4f3305965c688ce85c8e8285b1"
2193		     "16551b86fbf46c41",
2194		.p = "ee690b3287cc4bef7173d1ae8c38af11",
2195		.sqrt = "52e4b15907eafab6fab028f7ff777318",
2196	},
2197	{
2198		.a = "d559fae722d3d02118faf185537d3b9872888085c08f0e33"
2199		     "2f79667588a85",
2200		.p = "ee690b3287cc4bef7173d1ae8c38af11",
2201		.sqrt = "3a6d1d1324934f1c6ab27f4340030b2",
2202	},
2203	{
2204		.a = "1fda911e045e686c13d0ed29ef87858456bfe08a6dcc64c5"
2205		     "044dfa62c2c48755",
2206		.p = "ee690b3287cc4bef7173d1ae8c38af11",
2207		.sqrt = "5a4d79d775b65857a6a3eae7e6c65fd7",
2208	},
2209	{
2210		.a = "c2072a78c83712d1f17d1f4d5146a0b14068e152",
2211		.p = "ee690b3287cc4bef7173d1ae8c38af11",
2212	},
2213	{
2214		.a = "4a46c4c627d798c4a3d26f415e869f18e2b8cd60",
2215		.p = "ee690b3287cc4bef7173d1ae8c38af11",
2216	},
2217	{
2218		.a = "33a4da7f8fab68215f235b974676bb5f530284c9c4346bd2"
2219		     "9c0904947b9893a",
2220		.p = "c94395af7aa282d79adc16e955ceba59",
2221		.sqrt = "1cbed89a3a6add32a2caedd7aa666d4a",
2222	},
2223	{
2224		.a = "12454eb2f4fb16b606b45cdd2f1964bcae0c638cd67eebbd"
2225		     "6e3c12cb58303d0",
2226		.p = "c94395af7aa282d79adc16e955ceba59",
2227		.sqrt = "11190392b941d3c89014057d43c2b933",
2228	},
2229	{
2230		.a = "1be7aad902860399a59a3a4ab60355a96233a1095785d78f"
2231		     "7ef1fad6cbfd499f",
2232		.p = "c94395af7aa282d79adc16e955ceba59",
2233		.sqrt = "54852d0df6fc249853261a64a8bfc356",
2234	},
2235	{
2236		.a = "171d95cc535784789996b38108bf0570f7bf822c848bdad4"
2237		     "017dbd03006159e5",
2238		.p = "c94395af7aa282d79adc16e955ceba59",
2239		.sqrt = "4ced03f935a5b8e00177ac488ceda8ed",
2240	},
2241	{
2242		.a = "13bc64edf2aa045dff33a834f301b9ae53f21b0507a52a6b"
2243		     "9bb9f70ec9fa95e0",
2244		.p = "c94395af7aa282d79adc16e955ceba59",
2245		.sqrt = "471487b8b79cd2cc1562319251cfd065",
2246	},
2247	{
2248		.a = "575eaa57283b6ca36106e03ac951f1eb514aef0871563f17"
2249		     "85b83ae61972cc",
2250		.p = "c94395af7aa282d79adc16e955ceba59",
2251		.sqrt = "958e0d5480ae5eb29c7a2031e5e4747",
2252	},
2253	{
2254		.a = "1497fcf0a83b6d52e15c77e5ee46c84843e2d405f8551c16"
2255		     "961fb7ff05f0df47",
2256		.p = "c94395af7aa282d79adc16e955ceba59",
2257		.sqrt = "489bc3d8bc5b72090a498a3e932cbccf",
2258	},
2259	{
2260		.a = "8156269059697cbe658d596ee7316dc56e2da0f3c9c6bc94"
2261		     "2e318b4f92b3a",
2262		.p = "c94395af7aa282d79adc16e955ceba59",
2263		.sqrt = "2d7d908fba94f97f14510009d92f58f",
2264	},
2265	{
2266		.a = "52d9cdd76ed355c0b91964303075ed7ed5b6bf574c78166e"
2267		     "bb57797cc5988d",
2268		.p = "c94395af7aa282d79adc16e955ceba59",
2269		.sqrt = "91a2c7ccc1fa93a8353d40cd3567b0a",
2270	},
2271	{
2272		.a = "241675d474e36edda5c3b52592f3ca2778b80e3cc9d7ccfc"
2273		     "ff9acea456fad162",
2274		.p = "c94395af7aa282d79adc16e955ceba59",
2275		.sqrt = "601dedc64c2739d55eade2b81bf9f8c3",
2276	},
2277	{
2278		.a = "1c1209a5d14e9c5fd860b4095128e11d30727138",
2279		.p = "c94395af7aa282d79adc16e955ceba59",
2280	},
2281	{
2282		.a = "56962f61002646287cb6213cf007e2b812757b3d",
2283		.p = "c94395af7aa282d79adc16e955ceba59",
2284	},
2285	{
2286		.a = "53277a6735ee7f2b1e6a1ecbaf7697da5d13467f57c2696a"
2287		     "7ae29f809cc2bc",
2288		.p = "e01ad2e26513df5d8863c0407b51c089",
2289		.sqrt = "91e6fc750eae4d47389d23991722161",
2290	},
2291	{
2292		.a = "fb3df21f43f9d6b0454ae88e536fbe2562b90e242e9d4813"
2293		     "859f853e37086e",
2294		.p = "e01ad2e26513df5d8863c0407b51c089",
2295		.sqrt = "fd9c1dcee2d6f1e72864100bf2250f5",
2296	},
2297	{
2298		.a = "1fe8895b0f43e7c7cf435a9708d90fa6af7e102cd797f1c1"
2299		     "06d28f270ff6ef0",
2300		.p = "e01ad2e26513df5d8863c0407b51c089",
2301		.sqrt = "16985135456ec55e3725b2649e85f1ce",
2302	},
2303	{
2304		.a = "8c18527907be48bfe6bba3f269b16accf36cd895650d6b9d"
2305		     "e1f131f3fd6b2d",
2306		.p = "e01ad2e26513df5d8863c0407b51c089",
2307		.sqrt = "bd60f7b30295f53e4b330e67945b6b7",
2308	},
2309	{
2310		.a = "27ceb721ee3cd6332803e248b636270c224fbad700346d2e"
2311		     "a5568d415f99ded7",
2312		.p = "e01ad2e26513df5d8863c0407b51c089",
2313		.sqrt = "64f2f6748b0c7dd09ad91e9987e57627",
2314	},
2315	{
2316		.a = "22c6e133d12d207d07d9a0884092c502e77d38c260f6b23f"
2317		     "7d95611ffc98be4",
2318		.p = "e01ad2e26513df5d8863c0407b51c089",
2319		.sqrt = "1796b981cb621d743e84f701e0026dd9",
2320	},
2321	{
2322		.a = "25893abcc46a5a2aa1a62ebd893decf99a5d9f5d6d6a094b"
2323		     "876f3ff330720c4",
2324		.p = "e01ad2e26513df5d8863c0407b51c089",
2325		.sqrt = "1881b51449505ca0bdb7eb4f6c7ca0bb",
2326	},
2327	{
2328		.a = "bc4082a238d1575921b5eaab6627422cb203184fb28f0e08"
2329		     "6060e840dc1899c",
2330		.p = "e01ad2e26513df5d8863c0407b51c089",
2331		.sqrt = "36e1c98a1360f6c88e4d7e949a6796c9",
2332	},
2333	{
2334		.a = "11cd69e093fb539abe544337e8a572a6d90f9d5c64535b9c"
2335		     "c6ea45b5fb873b17",
2336		.p = "e01ad2e26513df5d8863c0407b51c089",
2337		.sqrt = "438234d3d5d8a32f5c0fdf0b08364d15",
2338	},
2339	{
2340		.a = "23c0c8b1387989e141f57cf845d006452579c911f9f524e8"
2341		     "6ca76ce6e15cffae",
2342		.p = "e01ad2e26513df5d8863c0407b51c089",
2343		.sqrt = "5fab91205cecc253a5ef159f1279f7ce",
2344	},
2345	{
2346		.a = "16506dcf1e424dff4ff0163ff326011f2db4baf3",
2347		.p = "e01ad2e26513df5d8863c0407b51c089",
2348	},
2349	{
2350		.a = "7c735c98cb5e13142fb42696c52dea4f86c35f27",
2351		.p = "e01ad2e26513df5d8863c0407b51c089",
2352	},
2353	{
2354		.a = "1546a26d92c7a1b90e846b8def8a95dcc5fd8d098681485c"
2355		     "f9f40454c2e56a44",
2356		.p = "d9adedeb8bc5d4d1a4bbd07dc62a48d1",
2357		.sqrt = "49cd2327060e71f193255ab50227b50c",
2358	},
2359	{
2360		.a = "40d7e51170443f269b12256b03b7f78916639a565bb91683"
2361		     "7afae2c07bccc81",
2362		.p = "d9adedeb8bc5d4d1a4bbd07dc62a48d1",
2363		.sqrt = "2035cc0bddddef9ab1a6044f713e0e2f",
2364	},
2365	{
2366		.a = "12b4099bd0acc2e80398c544809f6ea261d6cfc6753ff181"
2367		     "7e19ee7cd5cfebb9",
2368		.p = "d9adedeb8bc5d4d1a4bbd07dc62a48d1",
2369		.sqrt = "453215e8591db1b9a53f077b3e388bd2",
2370	},
2371	{
2372		.a = "7e978b624e693fda3c0f159fade85c07690c840dec951b49"
2373		     "571b7563f4f55",
2374		.p = "d9adedeb8bc5d4d1a4bbd07dc62a48d1",
2375		.sqrt = "2d01575650de55dc3553c480bd5d61e",
2376	},
2377	{
2378		.a = "1851ce97073e83d6e3c76ece920c5d91460ab827eeec431b"
2379		     "94adef9c506c80d0",
2380		.p = "d9adedeb8bc5d4d1a4bbd07dc62a48d1",
2381		.sqrt = "4ee75e54c41de8a702b6ce0cb35c7911",
2382	},
2383	{
2384		.a = "1eeeb89f9c697a2a08bff8da8dc6d7fd6e71f43b6922a7cf"
2385		     "8e89087734e24eb2",
2386		.p = "d9adedeb8bc5d4d1a4bbd07dc62a48d1",
2387		.sqrt = "58fcb8ed1d1adcd40427574beb6b6b98",
2388	},
2389	{
2390		.a = "82ea9d2e6ce9f8a7e70d20bb3a00eb0951f0aa9602c98202"
2391		     "a33cf05cbc3f473",
2392		.p = "d9adedeb8bc5d4d1a4bbd07dc62a48d1",
2393		.sqrt = "2dc47a644bfbcd83d67f001ec9f37ec3",
2394	},
2395	{
2396		.a = "7ee5b35c2a7284cce7fc26e681f824c7ef88b92ad6a956e3"
2397		     "04d32ea49935656",
2398		.p = "d9adedeb8bc5d4d1a4bbd07dc62a48d1",
2399		.sqrt = "2d0f39c1415aa6ecdb216eba95e8d130",
2400	},
2401	{
2402		.a = "16691aa76616aa66ba8cb19138b2de30f3e19b4a5f1cc57a"
2403		     "cc7812c0344a0ca6",
2404		.p = "d9adedeb8bc5d4d1a4bbd07dc62a48d1",
2405		.sqrt = "4bbe61678ace7fad9e1f61aac5fc4248",
2406	},
2407	{
2408		.a = "22a64631a16464b2b41f91a716213bc7f5289bd1b8ef5dfe"
2409		     "5de03fa85e43bf49",
2410		.p = "d9adedeb8bc5d4d1a4bbd07dc62a48d1",
2411		.sqrt = "5e2ea04651665b0764861ce7cd63a2c1",
2412	},
2413	{
2414		.a = "7904a8e905770d9c71da1bf00c1246d5365070b2",
2415		.p = "d9adedeb8bc5d4d1a4bbd07dc62a48d1",
2416	},
2417	{
2418		.a = "7941e180046e485ad69df661a9353c369bffa269",
2419		.p = "d9adedeb8bc5d4d1a4bbd07dc62a48d1",
2420	},
2421	{
2422		.a = "22c8e6edc37789d7738ec6dcefebbd607d1fdaaa7c584cad"
2423		     "61d1526800c92018",
2424		.p = "e26c6cd64976b9391f43981671002d69",
2425		.sqrt = "5e5da4530248bd7ab1a3fbd08f69f1c5",
2426	},
2427	{
2428		.a = "1ca92a917bec25c99039774b1246aa9f2fb5a2c9ba9f4f27"
2429		     "fa2b893cb3f559b9",
2430		.p = "e26c6cd64976b9391f43981671002d69",
2431		.sqrt = "55a84239f80708583d3f9a76ff73958e",
2432	},
2433	{
2434		.a = "1159fd297bb177aa585fdaa7bd4bd97ba5fec4770aaf40c9"
2435		     "277496ea0743f4fd",
2436		.p = "e26c6cd64976b9391f43981671002d69",
2437		.sqrt = "42a5f38ec5af19489aeb45e7bfcce9de",
2438	},
2439	{
2440		.a = "26f55dd518994145017f5fd0dc182be72ab0dcef72ead33b"
2441		     "2a69a803f6b19161",
2442		.p = "e26c6cd64976b9391f43981671002d69",
2443		.sqrt = "63dde2ed42f80e076e0481dbaf0cbf02",
2444	},
2445	{
2446		.a = "2d1189aaeea16c966889adada17bcb26232c86006015164a"
2447		     "30742831511eff6",
2448		.p = "e26c6cd64976b9391f43981671002d69",
2449		.sqrt = "1ada6d768160903b16fe877dd9aa113f",
2450	},
2451	{
2452		.a = "28acf490426026147635bdc6b062d6d04b635c9b99a198cd"
2453		     "86b47dc47b96e5f",
2454		.p = "e26c6cd64976b9391f43981671002d69",
2455		.sqrt = "1982cf14b64995642cd5dbd245c27afb",
2456	},
2457	{
2458		.a = "2fc7aefd1b206bcfb2644576a4c8cca7fe9a72a7b2e4dcc8"
2459		     "ed127ffb685fd14",
2460		.p = "e26c6cd64976b9391f43981671002d69",
2461		.sqrt = "1ba6344ba57e08173d21a98328b71684",
2462	},
2463	{
2464		.a = "f035046ddb03b1e343cc2e5dc24a91fe807dbd7906b2f16f"
2465		     "02480db9c8627e5",
2466		.p = "e26c6cd64976b9391f43981671002d69",
2467		.sqrt = "3dfe9533519e67d651b4c524b737dd99",
2468	},
2469	{
2470		.a = "3609bf3e9b32879a3add17aa6d1542c2f549030d23bf4cb0"
2471		     "4d65a353f11230f",
2472		.p = "e26c6cd64976b9391f43981671002d69",
2473		.sqrt = "1d677c1e06055bd8d77565b6e97b18f4",
2474	},
2475	{
2476		.a = "103a6d3816aa8b314402c12ffb54a111bfc100f599aa5f78"
2477		     "ff9574c3523e0121",
2478		.p = "e26c6cd64976b9391f43981671002d69",
2479		.sqrt = "40747083db7013669a8050e31542a781",
2480	},
2481	{
2482		.a = "4ce4c0d22add35bbe43784924de6dbc0906e533d",
2483		.p = "e26c6cd64976b9391f43981671002d69",
2484	},
2485	{
2486		.a = "c5c1e597f6dd8751825916133738c2f42c04114",
2487		.p = "e26c6cd64976b9391f43981671002d69",
2488	},
2489	{
2490		.a = "beeeb4fc61586d0d2d7149410c8bfaa7129f65cd12accd00"
2491		     "ae821bac17ba37",
2492		.p = "e74a67bb1628c7b1d923808f320470a9",
2493		.sqrt = "dd15d5ca7cdce13ab7e98c88fc88f19",
2494	},
2495	{
2496		.a = "2a0b5b4376ec8b0bbb8f0a283a0a317fd09589bdc8e693f0"
2497		     "031c2bc1a1ae087b",
2498		.p = "e74a67bb1628c7b1d923808f320470a9",
2499		.sqrt = "67bf2103f485c73c075cbb5f8243bad9",
2500	},
2501	{
2502		.a = "26c4d966b33befb307a16c8a87acab27a12f94b7921af11e"
2503		     "430adeacac82a62d",
2504		.p = "e74a67bb1628c7b1d923808f320470a9",
2505		.sqrt = "639fa027439489f0eef60d704e8cef98",
2506	},
2507	{
2508		.a = "29eadb8e533f3a9e325bf9bbbc9db41291f5c93281e02a70"
2509		     "3e7153c744a817e6",
2510		.p = "e74a67bb1628c7b1d923808f320470a9",
2511		.sqrt = "6797009adb6ae5b392734d13664e56b2",
2512	},
2513	{
2514		.a = "e4aa928dd30d75d78f5074e8931d697b45c4a65b6ba31109"
2515		     "86e9bd08fa3cb8e",
2516		.p = "e74a67bb1628c7b1d923808f320470a9",
2517		.sqrt = "3c7ca3274282f6fbf175d681fe84526d",
2518	},
2519	{
2520		.a = "32f1d70f5fadfb94c555b61651de9eea025b7150feefddda"
2521		     "6d5319eb6bdfbe37",
2522		.p = "e74a67bb1628c7b1d923808f320470a9",
2523		.sqrt = "72336c9bfae5183830819108df6061da",
2524	},
2525	{
2526		.a = "1c941c73a20169cb3bf4f4c3c37690d041402787e7d12156"
2527		     "6269ccbbc4990a46",
2528		.p = "e74a67bb1628c7b1d923808f320470a9",
2529		.sqrt = "5588c5d715f5f9e0c90823d91b6c7cc7",
2530	},
2531	{
2532		.a = "1579253f887c3a8185c70f385203a19b867d8bf51657e531"
2533		     "78ac6d665c7ba070",
2534		.p = "e74a67bb1628c7b1d923808f320470a9",
2535		.sqrt = "4a248a6f3b66c3dbcf633d86248b6bbf",
2536	},
2537	{
2538		.a = "1a12783318c06b7477ea1f2c7323bf1bade4969a5c2b2d1c"
2539		     "d5de12ca124bc7b5",
2540		.p = "e74a67bb1628c7b1d923808f320470a9",
2541		.sqrt = "51b28a8e6affa359cb3d437785560a6d",
2542	},
2543	{
2544		.a = "b42d6aedb666a8102825bcb9af19b001b37c1902cc3a5751"
2545		     "9775caa627d0c69",
2546		.p = "e74a67bb1628c7b1d923808f320470a9",
2547		.sqrt = "35b12ba2fc934dbfb1f447ea5063f20e",
2548	},
2549	{
2550		.a = "bf7b664d321a2d4a31c0d798f674c0e25a885ec1",
2551		.p = "e74a67bb1628c7b1d923808f320470a9",
2552	},
2553	{
2554		.a = "2a324cfa40e3117fc1da8357e67be94c39365a56",
2555		.p = "e74a67bb1628c7b1d923808f320470a9",
2556	},
2557	{
2558		.a = "82e929f47c509779ae81f2eb12dcac84c1288827cd7909ae"
2559		     "43dbb8bdef71eef",
2560		.p = "d64bb8768a638d7f5d3825337ace2de9",
2561		.sqrt = "2dc43980830b15b0c83573d07afe6999",
2562	},
2563	{
2564		.a = "4589649eb9b85e1be15abcc1f48f2eb4c58b197ebac83abc"
2565		     "8d809024e40803e",
2566		.p = "d64bb8768a638d7f5d3825337ace2de9",
2567		.sqrt = "215affc621edf6c85922903ab48ea658",
2568	},
2569	{
2570		.a = "1c868a42c164513eaf724725ca5994f241c16b2e68f303e1"
2571		     "b5d57b57c1183304",
2572		.p = "d64bb8768a638d7f5d3825337ace2de9",
2573		.sqrt = "55747461ff8137d4e05eeaf2c29aa0a8",
2574	},
2575	{
2576		.a = "518e36afe548286568e99c20afef30074ecac2b1c25ac73d"
2577		     "9556855fda6e2c",
2578		.p = "d64bb8768a638d7f5d3825337ace2de9",
2579		.sqrt = "907e3233f20c0db9a659d896a9c2512",
2580	},
2581	{
2582		.a = "4c41116acdaf952fadd8643ad7db01266cbbd3f3dc86242c"
2583		     "7b255fa17f7bedf",
2584		.p = "d64bb8768a638d7f5d3825337ace2de9",
2585		.sqrt = "22edf0b170fabd22b9cd2919e45ebc77",
2586	},
2587	{
2588		.a = "1deb14e6e04d5c3da1bde36ed62b5c98b30d9637ce70d467"
2589		     "1553062f135fb743",
2590		.p = "d64bb8768a638d7f5d3825337ace2de9",
2591		.sqrt = "578424546feb87643c07224b5ac59802",
2592	},
2593	{
2594		.a = "19b9585337d4bf6c126db6f56929140ceff37c6072503ff1"
2595		     "cdf661c36471bf",
2596		.p = "d64bb8768a638d7f5d3825337ace2de9",
2597		.sqrt = "51266f7e4ea87ca3749d508ed010664",
2598	},
2599	{
2600		.a = "e79ca7697fb17fca33dc2be93bc1408b890da7861b685f4f"
2601		     "432d87a3f0f152f",
2602		.p = "d64bb8768a638d7f5d3825337ace2de9",
2603		.sqrt = "3ce00d970ebd09af262bca93d838fa1f",
2604	},
2605	{
2606		.a = "2ad3e70e0575ddcb8a6b150eb98caba70854861249aefd23"
2607		     "d517198827f406f6",
2608		.p = "d64bb8768a638d7f5d3825337ace2de9",
2609		.sqrt = "68b56a7414fae89868d5bf8352d273fa",
2610	},
2611	{
2612		.a = "13120bbe4f9aa9295e79f6e1d14c6e4ad6857a9cb781542c"
2613		     "d803927706a35b26",
2614		.p = "d64bb8768a638d7f5d3825337ace2de9",
2615		.sqrt = "45df23b41b892c677376741d846897ec",
2616	},
2617	{
2618		.a = "39c6f0ca17b31cdd576136a42afacc1951195d46",
2619		.p = "d64bb8768a638d7f5d3825337ace2de9",
2620	},
2621	{
2622		.a = "364f883be424ee5552e3e2964066cf720981ef15",
2623		.p = "d64bb8768a638d7f5d3825337ace2de9",
2624	},
2625	{
2626		.a = "2a482b02a0fa79c96ef9d00287b3b5eb306bd82d29cbcee0"
2627		     "d4698e0d6cad30fa",
2628		.p = "d3b5db60b30e3077d3bc605643d0a579",
2629		.sqrt = "680a0d10bec5fd5a019917ee00f61184",
2630	},
2631	{
2632		.a = "dace96b6e89e3d170e76b81a9f023d9f364a80e9ff40cdd3"
2633		     "338e2b538177cce",
2634		.p = "d3b5db60b30e3077d3bc605643d0a579",
2635		.sqrt = "3b2b230a1222cd9af8aa60978608e5b1",
2636	},
2637	{
2638		.a = "1350c9c08466500847eb0573aa711123b77d86a12d52184e"
2639		     "584496ebb278e1f8",
2640		.p = "d3b5db60b30e3077d3bc605643d0a579",
2641		.sqrt = "4651b6413d019c9b27af8be350b9efbd",
2642	},
2643	{
2644		.a = "309971a3c9a159c454fe42fcbabe744b8ad1b8aa8ba475b5"
2645		     "8466da45a84de",
2646		.p = "d3b5db60b30e3077d3bc605643d0a579",
2647		.sqrt = "1be2a35bf675130b7362bd13d1bd119",
2648	},
2649	{
2650		.a = "e88515de6431e1ac3259fc16bc996b369e621113c8505c34"
2651		     "ba18d7a77239e80",
2652		.p = "d3b5db60b30e3077d3bc605643d0a579",
2653		.sqrt = "3cfe918a2d7deaec83f14014593287dd",
2654	},
2655	{
2656		.a = "dd42d98bed06e1eee7825a3df6ee9a9406b501801e35fd43"
2657		     "54538ed582c38b1",
2658		.p = "d3b5db60b30e3077d3bc605643d0a579",
2659		.sqrt = "3b7fd868d0022fc7f467d06f3a673aef",
2660	},
2661	{
2662		.a = "e47b2f19b59423aeddf737a59b95433d6c335de8380113c4"
2663		     "cdb781e9851d2fd",
2664		.p = "d3b5db60b30e3077d3bc605643d0a579",
2665		.sqrt = "3c765e522c77141a85a7f5be88e6dce9",
2666	},
2667	{
2668		.a = "1317abf2c6630cecee00a0b2c3619269c6abc56b19d52521"
2669		     "afdeed13e8181498",
2670		.p = "d3b5db60b30e3077d3bc605643d0a579",
2671		.sqrt = "45e9714caf9599488f7b5f50663a6f47",
2672	},
2673	{
2674		.a = "fb4a9ec53f4b5b8337db3b52729f92660c540a57ba26f6a3"
2675		     "1132c3df8e7fbcc",
2676		.p = "d3b5db60b30e3077d3bc605643d0a579",
2677		.sqrt = "3f68a0d5d9b6773b6462d520fc15a592",
2678	},
2679	{
2680		.a = "17bde3718d8c79dea7bf8177b429b9fbbe2ec377ee056318"
2681		     "8b1723601dfe97f4",
2682		.p = "d3b5db60b30e3077d3bc605643d0a579",
2683		.sqrt = "4df5f7e0af55aa287adf15f97d58a39f",
2684	},
2685	{
2686		.a = "9d6a2d424236cef8719d331a7352de39ecf44983",
2687		.p = "d3b5db60b30e3077d3bc605643d0a579",
2688	},
2689	{
2690		.a = "c09b3647eca9c87b3a542b0c1e734bf52ce314df",
2691		.p = "d3b5db60b30e3077d3bc605643d0a579",
2692	},
2693	{
2694		.a = "1d8903ab585dc5b9992ba2f4295e058111c46c3620554d27"
2695		     "5e46107e55d7a2c",
2696		.p = "d221951118210ae00de11d059add5179",
2697		.sqrt = "15bd0fdd249f3c6a8c2f548736905f23",
2698	},
2699	{
2700		.a = "f85fac41fc1b4425c176f56f6e9d62e1e76e1b2211ef4fb4"
2701		     "59c33ae66b796c",
2702		.p = "d221951118210ae00de11d059add5179",
2703		.sqrt = "fc2874c1abda2571ab8a869d1808175",
2704	},
2705	{
2706		.a = "e42771a0f23fd6acdfb6aa40aca83b16c58759815f4dc6a3"
2707		     "8fd3eef95cee3ea",
2708		.p = "d221951118210ae00de11d059add5179",
2709		.sqrt = "3c6b48d5885c257eca850ffce85e46be",
2710	},
2711	{
2712		.a = "195fc0fe25e90c6173a995e481fee9e7e256409fe143fea6"
2713		     "1826da3486c3e297",
2714		.p = "d221951118210ae00de11d059add5179",
2715		.sqrt = "5098a32cc135bdea68430ed532ea0005",
2716	},
2717	{
2718		.a = "b9ba371e8df3cd27092a0acc00e0fb452607e13a8cd3a003"
2719		     "515de9e1d7bda62",
2720		.p = "d221951118210ae00de11d059add5179",
2721		.sqrt = "368342b57f60ae446e6effdf172b074b",
2722	},
2723	{
2724		.a = "110fccbd58d822da1cf00b2ebf75e8479fba35602ae212f8"
2725		     "7abe5470aa0a8dc",
2726		.p = "d221951118210ae00de11d059add5179",
2727		.sqrt = "1085b79c4bb04aeb47ee70702a56c09e",
2728	},
2729	{
2730		.a = "770192a443c51e1652e7057f01317a4daa394f698c7e8552"
2731		     "a2708ce9a171da8",
2732		.p = "d221951118210ae00de11d059add5179",
2733		.sqrt = "2ba2cf3f71977f2ab422dc333af01aed",
2734	},
2735	{
2736		.a = "d64e10830c62eca1dac4bc5f1fa566f9504bb15ca82c63a3"
2737		     "efa32cef3b1c5b0",
2738		.p = "d221951118210ae00de11d059add5179",
2739		.sqrt = "3a8e7f5e1cb03581dc78638cf4860450",
2740	},
2741	{
2742		.a = "1e44103d73e7744ed150aea64c9781bb286d0c8896086aad"
2743		     "a0d01ec4018edd9e",
2744		.p = "d221951118210ae00de11d059add5179",
2745		.sqrt = "5805e8e0c4c53dfa1e3ea9e4ef6659db",
2746	},
2747	{
2748		.a = "2602d83a0b822bf52b8a02e7a5df83d06bf6f75f52658484"
2749		     "03a60c25c70d2fb",
2750		.p = "d221951118210ae00de11d059add5179",
2751		.sqrt = "18a9486523c9cbdcc1d9d812345978a3",
2752	},
2753	{
2754		.a = "7575749b1df9decda4eeb931f3e077a35ab17cb4",
2755		.p = "d221951118210ae00de11d059add5179",
2756	},
2757	{
2758		.a = "1ab8eec9aa32cd78e7fccc74bea5bc666224eae5",
2759		.p = "d221951118210ae00de11d059add5179",
2760	},
2761	{
2762		.a = "1fcb7176f1300935e5f662830115c7330fe0a336e27f1ded"
2763		     "642f51a97f71f6c",
2764		.p = "e9103af488d3bc5209fe348dcf043dc1",
2765		.sqrt = "168e01d97eb477d70cd284571dfff3ec",
2766	},
2767	{
2768		.a = "a856d9e3eb0073dc8acf9736094df283bfaa8ecf94d633d3"
2769		     "0c21fd34154c3df",
2770		.p = "e9103af488d3bc5209fe348dcf043dc1",
2771		.sqrt = "33e5f39cdd6b39931e1295525323eced",
2772	},
2773	{
2774		.a = "23ca9267d09a2a9697887b8d71794f91e7ad6ee2282a6247"
2775		     "5d37273ea49cfb24",
2776		.p = "e9103af488d3bc5209fe348dcf043dc1",
2777		.sqrt = "5fb8a8b3082f117d9c32ba395772f1f9",
2778	},
2779	{
2780		.a = "2e5adfa8b2e4baf9a120ad13afc13d420ea82b7b6552ef49"
2781		     "b93d827edd782420",
2782		.p = "e9103af488d3bc5209fe348dcf043dc1",
2783		.sqrt = "6cef6806482bb27a8f431c2be11da15d",
2784	},
2785	{
2786		.a = "1856d952cfe49f088152e15c8a35a6e02e9e6471ef8ba7c2"
2787		     "a8085d01f197911c",
2788		.p = "e9103af488d3bc5209fe348dcf043dc1",
2789		.sqrt = "4eef8bc5cbe83339d5363dd75fcb906c",
2790	},
2791	{
2792		.a = "809153ea20aab3373a44470d4a92e5415293c42084757301"
2793		     "4ecef756ebe3b6e",
2794		.p = "e9103af488d3bc5209fe348dcf043dc1",
2795		.sqrt = "2d5ae64f52b011c2b47b196d3257815a",
2796	},
2797	{
2798		.a = "d8f2c65347eba4148fed9f5420a50727915e41417b090095"
2799		     "d011f2dd85d13a1",
2800		.p = "e9103af488d3bc5209fe348dcf043dc1",
2801		.sqrt = "3aeaaa8f5a07973ffdc5c96e28c6b6a0",
2802	},
2803	{
2804		.a = "2fc2023299021c3bbd160fdc96f3f235105bec74eedd0bc5"
2805		     "ba2c6ba3aea5845",
2806		.p = "e9103af488d3bc5209fe348dcf043dc1",
2807		.sqrt = "1ba48fe5d1a5c1b26b142965ce0dd426",
2808	},
2809	{
2810		.a = "7c57bc6f695242e8c31ea7ea07ccb856fd80291ab481aab2"
2811		     "66980264ffa3b64",
2812		.p = "e9103af488d3bc5209fe348dcf043dc1",
2813		.sqrt = "2c9a8745a0f72ec9dbb8d2ad4e86e6cf",
2814	},
2815	{
2816		.a = "194e31d9e40a273b975b87cf5b4956b892b0b810e9c56d63"
2817		     "9731eb011f3b5bba",
2818		.p = "e9103af488d3bc5209fe348dcf043dc1",
2819		.sqrt = "507cbb530412e9a988aeecda15a9c9e1",
2820	},
2821	{
2822		.a = "d26fa79e1156dd232b5886efaf8b5b7a08dc5740",
2823		.p = "e9103af488d3bc5209fe348dcf043dc1",
2824	},
2825	{
2826		.a = "cceefd8c7bc0a4b82b8eacbbcb786f9b21f6ff31",
2827		.p = "e9103af488d3bc5209fe348dcf043dc1",
2828	},
2829};
2830
2831const size_t N_TESTS = sizeof(mod_sqrt_test_data) / sizeof(*mod_sqrt_test_data);
2832
2833static int
2834mod_sqrt_test(struct mod_sqrt_test *test, BN_CTX *ctx)
2835{
2836	BIGNUM *a, *p, *want, *got, *diff;
2837	int failed = 1;
2838
2839	BN_CTX_start(ctx);
2840
2841	if ((a = BN_CTX_get(ctx)) == NULL)
2842		errx(1, "a = BN_CTX_get()");
2843	if ((p = BN_CTX_get(ctx)) == NULL)
2844		errx(1, "p = BN_CTX_get()");
2845	if ((want = BN_CTX_get(ctx)) == NULL)
2846		errx(1, "want = BN_CTX_get()");
2847	if ((got = BN_CTX_get(ctx)) == NULL)
2848		errx(1, "got = BN_CTX_get()");
2849	if ((diff = BN_CTX_get(ctx)) == NULL)
2850		errx(1, "diff = BN_CTX_get()");
2851
2852	if (!BN_hex2bn(&a, test->a))
2853		errx(1, "BN_hex2bn(%s)", test->a);
2854	if (!BN_hex2bn(&p, test->p))
2855		errx(1, "BN_hex2bn(%s)", test->p);
2856
2857	if (BN_mod_sqrt(got, a, p, ctx) == NULL) {
2858		failed = test->sqrt != NULL;
2859		if (failed)
2860			fprintf(stderr, "BN_mod_sqrt(%s, %s) failed\n",
2861			    test->a, test->p);
2862		goto out;
2863	}
2864
2865	if (!BN_hex2bn(&want, test->sqrt))
2866		errx(1, "BN_hex2bn(%s)", test->sqrt);
2867	if (!BN_mod_sub(diff, want, got, p, ctx))
2868		errx(1, "BN_mod_sub() failed\n");
2869
2870	if (!BN_is_zero(diff)) {
2871		fprintf(stderr, "a: %s\n", test->a);
2872		fprintf(stderr, "p: %s\n", test->p);
2873		fprintf(stderr, "want: %s\n", test->sqrt);
2874		fprintf(stderr, "got: ");
2875		BN_print_fp(stderr, got);
2876		fprintf(stderr, "\n\n");
2877
2878		goto out;
2879	}
2880
2881	failed = 0;
2882
2883 out:
2884	BN_CTX_end(ctx);
2885
2886	return failed;
2887}
2888
2889static int
2890bn_mod_sqrt_test(void)
2891{
2892	BN_CTX *ctx;
2893	size_t i;
2894	int failed = 0;
2895
2896	if ((ctx = BN_CTX_new()) == NULL)
2897		errx(1, "BN_CTX_new()");
2898
2899	for (i = 0; i < N_TESTS; i++)
2900		failed |= mod_sqrt_test(&mod_sqrt_test_data[i], ctx);
2901
2902	BN_CTX_free(ctx);
2903
2904	return failed;
2905}
2906
2907/*
2908 * A list of primes p = 1 (mod 8) with long initial segments of quadratic
2909 * residues. These exercise the non-deterministic path of Tonelli-Shanks.
2910 */
2911
2912#define N_SMALL_SQUARE_TESTS 100
2913
2914static const struct p_is_1_mod_8_tests {
2915	const char *p;
2916	int first_non_square;
2917	const char *sqrt[N_SMALL_SQUARE_TESTS];
2918} p_is_1_mod_8_tests[] = {
2919	{
2920		.p = "d7a6133d89b7a840ec0d80d2ee197849",
2921		.first_non_square = 101,
2922		.sqrt = {
2923			[0] = "0",
2924			[1] = "1",
2925			[2] = "127b07d9558aa7382fda337e674b0020",
2926			[3] = "2b0756607c913be85534cec59846e6f8",
2927			[4] = "2",
2928			[5] = "1ac3bfe91dd86f91be44b30936b6bcff",
2929			[6] = "3a03fcd8bc70d0a08444356250a316c9",
2930			[7] = "22c3c29b3cf04300495e694db5a1fb11",
2931			[8] = "24f60fb2ab154e705fb466fcce960040",
2932			[9] = "3",
2933			[10] = "46dce6880d735d143a40b99097f87f9e",
2934			[11] = "3eab85485728056c43cd2681a96976ba",
2935			[12] = "560eacc0f92277d0aa699d8b308dcdf0",
2936			[13] = "19bf2319a32e92a6c2d80d364a19229d",
2937			[14] = "51554e1d7adc5173841a9525b4a2ff7d",
2938			[15] = "3d9a295185f27dc096b33184e4edd834",
2939			[16] = "4",
2940			[17] = "407d75edc1fba51c637aeddcb35abc1e",
2941			[18] = "3771178c009ff5a88f8e9a7b35e10060",
2942			[19] = "9e48ccec873561b315a0980c409c291",
2943			[20] = "35877fd23bb0df237c8966126d6d79fe",
2944			[21] = "2f4a3220291ac0440f3a2cb35d8e8f4c",
2945			[22] = "218f85684d6378bf6a90d02b0f94dc11",
2946			[23] = "432f4d621cc773b7945a024a076048d4",
2947			[24] = "639e198c10d606ffe385160e4cd34ab7",
2948			[25] = "5",
2949			[26] = "8478976383e49d4fbda384883343e1",
2950			[27] = "5690101c1403f487ec6f14822544c361",
2951			[28] = "4587853679e0860092bcd29b6b43f622",
2952			[29] = "47804840abaf4bc53e37c87291f55527",
2953			[30] = "48925009cc14fbef1dee0b4a2f920890",
2954			[31] = "228ef1765a5448f6a4600026dfb14830",
2955			[32] = "49ec1f65562a9ce0bf68cdf99d2c0080",
2956			[33] = "a41fb079bc22c9d1e5658a86db0e6bb",
2957			[34] = "675b3a95cddf5b210dde6d3e7dd4cfa3",
2958			[35] = "5b727e9bccd4da204cac92594babe837",
2959			[36] = "6",
2960			[37] = "64ba7d11b9d672e6d31a9b5971e60d2f",
2961			[38] = "24afa6855c01017537555a58a70da6f9",
2962			[39] = "3bb009b3541796452327d8e6fd8323ba",
2963			[40] = "49ec462d6ed0ee18778c0db1be28790d",
2964			[41] = "545f0385bd365fa7862502739a781f69",
2965			[42] = "2b0b17173a32035911223d142ab00a4e",
2966			[43] = "67109cc9a742fc0305d031cc20e7fd1f",
2967			[44] = "5a4f08acdb679d68647333cf9b468ad5",
2968			[45] = "504b3fbb59894eb53ace191ba42436fd",
2969			[46] = "38e6358e14aa1cd9778b09cbf05deb48",
2970			[47] = "319d132fc72dff9b631b3c2ca0c2f49f",
2971			[48] = "2b88b9bb9772b89f973a45bc8cfddc69",
2972			[49] = "7",
2973			[50] = "5c67273eabb54418ef430178047700a0",
2974			[51] = "3558bf08253c3d5afd58bd1c3c0498e3",
2975			[52] = "337e4633465d254d85b01a6c9432453a",
2976			[53] = "1845657cc9012fafd8a266bf41b2ce66",
2977			[54] = "299a1cb35465365f5f40e0abfc3033ee",
2978			[55] = "582fca95baf4c0b18befc9aa5b09aff4",
2979			[56] = "34fb770293ff0559e3d8568784d3794f",
2980			[57] = "62e847fb9f593dbe7d2f1a5c74594670",
2981			[58] = "1c85e173426916ea88c889b950bd5d96",
2982			[59] = "13e4d1ad2ef6d69c758826e554d3fce7",
2983			[60] = "5c71c09a7dd2acbfbea71dc9243dc7e1",
2984			[61] = "5bd4d7bf50d72c7642321ac648a41207",
2985			[62] = "4d543e0b7cb7a087f6c6820871402203",
2986			[63] = "684b47d1b6d0c900dc1b3be920e5f133",
2987			[64] = "8",
2988			[65] = "4720271c07130a09c11989006d5b65b7",
2989			[66] = "27c5c5d3ef4be7d25b799ea455ff933",
2990			[67] = "563c042e90bd60de622c83b96aad46f3",
2991			[68] = "56ab276205c05e082517a5198764000d",
2992			[69] = "40aabad2f12469f355cbd0e524021817",
2993			[70] = "69f41210ae2c64ebbbfb9cc4436b121b",
2994			[71] = "2495fdd3e3ee43c51d78a037f2af961",
2995			[72] = "68c3e4258877bcefccf04bdc82577789",
2996			[73] = "a54afbfe8d22b43dba10c45c3e1945a",
2997			[74] = "387797174f3bf5d6281fe71ea18676e1",
2998			[75] = "81635b1ae17cb7420576f6f4b6f571",
2999			[76] = "13c9199d90e6ac3662b4130188138522",
3000			[77] = "2095521a5b009be0acd08b5ee47fa519",
3001			[78] = "2bdce5c6e97146d22fd25f4abb3bfa49",
3002			[79] = "15d3c2c27cdc4411498596c20ef7d174",
3003			[80] = "6b0effa47761be46f912cc24dadaf3fc",
3004			[81] = "9",
3005			[82] = "12af1ddc568bab9c8609a1069ad98974",
3006			[83] = "4ba992f528674a24e7d11121eb88af39",
3007			[84] = "5e946440523580881e745966bb1d1e98",
3008			[85] = "1a0d8dbdac9222fddfacbae62f73dc50",
3009			[86] = "4040b1fc21cc440034ac36b0e9eb9c90",
3010			[87] = "1203e4b669c80a95eb2a5134436217aa",
3011			[88] = "431f0ad09ac6f17ed521a0561f29b822",
3012			[89] = "62aa36cb4434c129d65d92ff25a9c3c4",
3013			[90] = "30f5fa5615d91043d4b5421262ff96f",
3014			[91] = "2b64e196026445e615b7c019aafc52c4",
3015			[92] = "514778795028c0d1c3597c3edf58e6a1",
3016			[93] = "25eb81b5dcc44f0a8bcf7fb909690c50",
3017			[94] = "48e96bc3845c7d38eb06fdf2d9274207",
3018			[95] = "18ae0da0ae22f6cdee901b535977cfe",
3019			[96] = "1069e025680b9a41250354b65472e2db",
3020			[97] = "6bc184c777e6c859c4ce144eb68d6bef",
3021			[98] = "5648dc4c32ed15b79d16185e1b0c7769",
3022			[99] = "1ba38364843f97fc20a60d4df1dd141b",
3023		},
3024	},
3025	{
3026		.p = "ed2ca93a2b8b7053b5cbfbfc164284d9",
3027		.first_non_square = 83,
3028		.sqrt = {
3029			[0] = "0",
3030			[1] = "1",
3031			[2] = "3a3c6e5ea115faa8be69eac1c177f698",
3032			[3] = "2748dedd33f6c6a09f84973f2f862922",
3033			[4] = "2",
3034			[5] = "d7607decaa9bfe5ec031537ce343ed0",
3035			[6] = "401d83de7c83456c0bee28fd25829dd5",
3036			[7] = "21f72780e6f6789259086212c3e9538c",
3037			[8] = "7478dcbd422bf5517cd3d58382efed30",
3038			[9] = "3",
3039			[10] = "28f8f6227299e5883b1a59e07b4cdec",
3040			[11] = "4b557ee20b98bd00344c14563ca8f839",
3041			[12] = "4e91bdba67ed8d413f092e7e5f0c5244",
3042			[13] = "10242586b3f9e2ca74409066950b0dc",
3043			[14] = "a4bfde50f20b288cf44d40af83abd84",
3044			[15] = "43fffde1b3477313dd57b9cd7261cdc3",
3045			[16] = "4",
3046			[17] = "524907a08de4e5c0c153c544c87bf9ce",
3047			[18] = "3e775e1e484980597a8e3bb6d1daa111",
3048			[19] = "427441618f7df01a97f7435904162b4d",
3049			[20] = "1aec0fbd95537fcbd8062a6f9c687da0",
3050			[21] = "6cb69f443aa14ed65113febd0cfbdf66",
3051			[22] = "7311499cc97a3d0f4a9c0597b2c761ec",
3052			[23] = "2e4c8606309b68cd815085fb51529a9c",
3053			[24] = "6cf1a17d3284e57b9defaa01cb3d492f",
3054			[25] = "5",
3055			[26] = "3565c3eaf0daac1e3a2c028657569676",
3056			[27] = "75da9c979be453e1de8dc5bd8e927b66",
3057			[28] = "43ee4f01cdecf124b210c42587d2a718",
3058			[29] = "35864fac94ecba016620c63c0ccc5f56",
3059			[30] = "3c85a120dba23570cc87f22b973f1654",
3060			[31] = "6838d8565fcbbc5dbf597fb37a1f5406",
3061			[32] = "43aefbfa73385b0bc2450f51062aa79",
3062			[33] = "45bc0d05b45e92a9ec86fdb68d4d8b6d",
3063			[34] = "617de3651efcd26b6524a971fc68398c",
3064			[35] = "4101878d7ace3b9fb358dad9ace0a5c8",
3065			[36] = "6",
3066			[37] = "673a3026784b7a41328bac018550b86f",
3067			[38] = "2b23c1a47cab7f8fcd0105546e230715",
3068			[39] = "4e915dc6234ac56a095df35c40ea4907",
3069			[40] = "51f1ec44e533cb107634b3c0f699bd8",
3070			[41] = "3360c9282c4fdef670b93037989ff143",
3071			[42] = "35e69c414ce1d44b024bcd9a7225a5c1",
3072			[43] = "2e48de0b4bd10c05fbfb2f9719b20e69",
3073			[44] = "5681ab761459f6534d33d34f9cf09467",
3074			[45] = "2862179c5ffd3fb1c4093fa76a9cbc70",
3075			[46] = "643d5c5c9b5af336e504f41726dfc0d3",
3076			[47] = "3e98383357bcacf462c70cc9351a91a0",
3077			[48] = "50092dc55bb055d137b99eff5829e051",
3078			[49] = "7",
3079			[50] = "36017e9ef9e274f8024599ccb1154c1f",
3080			[51] = "5bf023ca007e263e4b5a030838af810c",
3081			[52] = "20484b0d67f3c594e88120cd2a161b8",
3082			[53] = "2b9e8a3b3ed1ed9329bede411f92778c",
3083			[54] = "2cd41d9eb601a00f92018104a5baab5a",
3084			[55] = "5bec2e51e71bb1f1a852e3e56d43a184",
3085			[56] = "1497fbca1e4165119e89a815f0757b08",
3086			[57] = "63423607948c915df58134dba2f29d07",
3087			[58] = "18d9afef351887618e7bb9e3cfb0211",
3088			[59] = "3ea4eee3e48e677c53aa0f392d896490",
3089			[60] = "652cad76c4fc8a2bfb1c8861317ee953",
3090			[61] = "66fbaa07b40873c3ac00b38cb100f017",
3091			[62] = "6a018a4798e4a471a9ff4fb9dac762f",
3092			[63] = "65e57682b4e369b70b1926384bbbfaa4",
3093			[64] = "8",
3094			[65] = "6188263fe8ff27e6249f9fb45efc8a9",
3095			[66] = "3cff332519838822fd763253838bf932",
3096			[67] = "4c83bbd2d19d60743a698d36db22c917",
3097			[68] = "489a99f90fc1a4d233247172854a913d",
3098			[69] = "38607b0f81008cc1a1dd707a16fc4d28",
3099			[70] = "4eecbfcfce6b4da4c456d606983c3ef4",
3100			[71] = "303995f9d14e1722b14e98314f7064ca",
3101			[72] = "703decfd9af86fa0c0af848e728d42b7",
3102			[73] = "17b2676a1150040ad999fbcd06f41d3a",
3103			[74] = "1a7989bf779d64cf9a301debf4fec091",
3104			[75] = "28c04ee827b98f30983507c028a3b72f",
3105			[76] = "684426770c8f901e85dd754a0e162e3f",
3106			[77] = "2b5c61ea91f69b1c7c7ebaeefb3240c5",
3107			[78] = "568763066059e114d011688b51121883",
3108			[79] = "a43ac4b02b98857c9d659c953154885",
3109			[80] = "35d81f7b2aa6ff97b00c54df38d0fb40",
3110			[81] = "9",
3111			[82] = "d688cbf38d1530c3d11285f8a829bc3",
3112			[84] = "13bf6ab1b648d2a713a3fe81fc4ac60d",
3113			[85] = "4760657d9d6c47c60833c08573e79b80",
3114			[86] = "3532206ae6f0f9a9721be80adf3b3df4",
3115			[87] = "755e6970bfe25e6ac8bf805cf22b7343",
3116			[88] = "70a16009896f6352093f0ccb0b3c101",
3117			[90] = "7aeae26757cdb098b14f0da171e69c4",
3118			[91] = "2bbeb474b349124e3ef6c222b62ad7b3",
3119			[92] = "5c990c0c6136d19b02a10bf6a2a53538",
3120			[93] = "46e5aa500f60629978168938a0c01682",
3121			[94] = "228459bf06f9dfb15baf8ac31efe34c1",
3122			[95] = "69e2c2104da63c9b919341b9013db3b7",
3123			[96] = "1349663fc681a55c79eca7f87fc7f27b",
3124			[97] = "39c6a22fb3f9d6c91f40fc217241c45e",
3125			[98] = "42b24dddef7d060a36b28cabe23d4b8a",
3126			[99] = "b2c2c9408c1395318e7bef960479c2e",
3127		},
3128	},
3129	{
3130		.p = "f9df802d991ea5ebaed8d3b9a42cf101",
3131		.first_non_square = 59,
3132		.sqrt = {
3133			[0] = "0",
3134			[1] = "1",
3135			[2] = "9b87b93bb96389be7801b89dc1652d8",
3136			[3] = "59e13489928842f26ae2886d9310b8f3",
3137			[4] = "2",
3138			[5] = "4c5c3af3b9fab5886e65b82402dad66f",
3139			[6] = "69e583a41fd4c41fad8dfafe1d64ce80",
3140			[7] = "2226e4abbf4dabfbc798cafda99b0c40",
3141			[8] = "1370f727772c7137cf003713b82ca5b0",
3142			[9] = "3",
3143			[10] = "56069730d91a5cc07e2a98a6a68b7202",
3144			[11] = "3f7c0d6dd412594787118d6095384c3a",
3145			[12] = "461d171a740e2006d913c2de7e0b7f1b",
3146			[13] = "40b3ccbea21d3d72c74263ab6879d65f",
3147			[14] = "119ec14e3683163583a5553d2a0e9311",
3148			[15] = "2aa84242c307fd827f2ab90abc5e7d0e",
3149			[16] = "4",
3150			[17] = "79b4a0e036f6d7ac8945c382d3135b5d",
3151			[18] = "1d2972bb32c2a9d3b680529d9442f888",
3152			[19] = "4fc091a564105b66fd19904959dd1c2b",
3153			[20] = "61270a4625293adad20d63719e774423",
3154			[21] = "5a0e8b4c8c5c042b55235a9cb7adaf60",
3155			[22] = "35a1aa98a855b5d2c77f916145f41758",
3156			[23] = "72a841aa741cb731c7986c8eee1af3b",
3157			[24] = "261478e559751dac53bcddbd69635401",
3158			[25] = "5",
3159			[26] = "47e09b3873557e6bc1ceadd3969fbe88",
3160			[27] = "13c41d6f1e7a22eb91cec58f150539d8",
3161			[28] = "444dc9577e9b57f78f3195fb53361880",
3162			[29] = "57798532e4e9404df4b67adf52c37099",
3163			[30] = "3590327cc41d87a9e09fd8d9619c06c6",
3164			[31] = "e15fec88e2da65f950f0a29275df452",
3165			[32] = "26e1ee4eee58e26f9e006e2770594b60",
3166			[33] = "614bdf992ff880c1f9092b13cdc354f2",
3167			[34] = "16f4ebd0bea0a507679dfed7c67cfa36",
3168			[35] = "84b3b3b80ffec8c1d8269511ac835ac",
3169			[36] = "6",
3170			[37] = "7533be777b68bc56c672a6970f2021d4",
3171			[38] = "66d2c23bdb3236d9d65c761f5cd0b606",
3172			[39] = "68bdd47cfdfa7a81e2550461aae74818",
3173			[40] = "4dd251cbe6e9ec6ab283a26c57160cfd",
3174			[41] = "38d5408abd422d8fcf19e8cf070d342d",
3175			[42] = "358408a1b5fa21b4ad7eaeab5970dd7d",
3176			[43] = "395a8a9786765fcc10641a5932985fac",
3177			[44] = "7ae76551f0f9f35ca0b5b8f879bc588d",
3178			[45] = "14cacf526b2e855263a7ab4d9b9c6db4",
3179			[46] = "fefca61affd696e5b8c9179dc6ea1b5",
3180			[47] = "70c9d4ca66eb1683ef376ed8e27f78de",
3181			[48] = "6da551f8b10265ddfcb14dfca815f2cb",
3182			[49] = "7",
3183			[50] = "309a69e2a9ef1b0b858089b14c6f9e38",
3184			[51] = "2f7c7a1a80c51f68ca01ad786d31730a",
3185			[52] = "7877e6b054e42b0620540c62d3394443",
3186			[53] = "10cd478dce3a9dc19548ee40ca0c2b0",
3187			[54] = "43d10abec65fa67359d11d40b4017a7f",
3188			[55] = "528ec8c6e928f443382d5537ef5e4844",
3189			[56] = "233d829c6d062c6b074aaa7a541d2622",
3190			[57] = "72bd2260fffce41b2fceb568f468cd5f",
3191			[58] = "7159169c936f53e5d9e62a97f2c7fcaa",
3192			[60] = "55508485860ffb04fe55721578bcfa1c",
3193			[62] = "549a3f9a716d2b96a14ac143160611cc",
3194			[63] = "6674ae033de903f356ca60f8fcd124c0",
3195			[64] = "8",
3196			[65] = "645b10018a4ad21e827fe92a1e59f098",
3197			[66] = "bdb26c2d680b416a65bbcdbccc495f0",
3198			[68] = "6763e6d2b30f6929c4d4cb3fe063a47",
3199			[69] = "5b40ed33d02f5dc35137a11e753e982b",
3200			[70] = "30c34c8e71a415dbbb1f090970f44828",
3201			[71] = "13e6bbfca6921f5a4856c934c5d6e3c5",
3202			[72] = "3a52e576658553a76d00a53b2885f110",
3203			[74] = "3c65617b9a3fcb1c3f7296ea850efa7",
3204			[75] = "3258f9ab5593fd1b4744fd4f69064543",
3205			[76] = "5a5e5ce2d0fdef1db4a5b326f072b8ab",
3206			[77] = "3552f699dfaa4c271b0eeda26ed29d78",
3207			[78] = "58976ff498c84c33a271944f973ae216",
3208			[80] = "37916ba14ecc30360abe0cd6673e68bb",
3209			[81] = "9",
3210			[82] = "5a9d0c87e518c6cb13a811c0ebbca59c",
3211			[83] = "5ef2cb8d6cb52a4627e5c105c143c922",
3212			[84] = "45c2699480669d9504921e8034d19241",
3213			[85] = "4bba44a6872d99a6cd89235b86fd6796",
3214			[86] = "5632d46186d2d1e32be4c3055231edaf",
3215			[87] = "531f902b8fb73220ef988a46ca801f16",
3216			[88] = "6b43553150ab6ba58eff22c28be82eb0",
3217			[90] = "8344564f2307055cba6f63a4f756505",
3218			[91] = "76240705743b992bad77b0ecb5569616",
3219			[92] = "e5508354e8396e638f30d91ddc35e76",
3220			[93] = "154d0dac17c4a150f8fc0c8c1ae2021e",
3221			[94] = "6713d7b3635f41a9a0bee026abfdddb0",
3222			[95] = "64321552a81000b462142ecd1287bc36",
3223			[96] = "4c28f1cab2ea3b58a779bb7ad2c6a802",
3224			[98] = "440b610a211b8c435480c0c5049c43e8",
3225			[99] = "3b6b57e41ce79a1519a42b97e4840c53",
3226		},
3227	},
3228	{
3229		.p = "e74738af4ed4cdd4b646d73096a2ccc1",
3230		.first_non_square = 73,
3231		.sqrt = {
3232			[0] = "0",
3233			[1] = "1",
3234			[2] = "6ac4647c98cf7af7efe36371c9840eaf",
3235			[3] = "21f4d6a5034093c1707e59226887fd48",
3236			[4] = "2",
3237			[5] = "548a6d10aee79ac83c925efab62b6a1b",
3238			[6] = "67066dfb891738c460a2e75221d367c5",
3239			[7] = "1953c6191d849b93d1aab79fa4cda95",
3240			[8] = "11be6fb61d35d7e4d680104d039aaf63",
3241			[9] = "3",
3242			[10] = "180026ae5dbe974e7eb06b324927eaf0",
3243			[11] = "1f9a4dff72cd9019164b73b04505333c",
3244			[12] = "43e9ad4a06812782e0fcb244d10ffa90",
3245			[13] = "643262a816c65c4721ec5f69b3669844",
3246			[14] = "233636554b325c46cbad926a62d900d6",
3247			[15] = "2b886afec0a6d18648114e84a91330c4",
3248			[16] = "4",
3249			[17] = "25046e4d32a4c22cb9f8afba3f3ceffb",
3250			[18] = "5905f4c67b99a31319635324c5e95f4c",
3251			[19] = "369e8c7fda6cf7c0d54f91eff4932e14",
3252			[20] = "3e325e8df10598443d22193b2a4bf88b",
3253			[21] = "70a98d624f107a23b9291ed17c65e708",
3254			[22] = "48e20c07cccf03cc10d026cd8f1ef8d8",
3255			[23] = "39ac71be3dfc7f2469a7df772ca4a372",
3256			[24] = "193a5cb83ca65c4bf501088c52fbfd37",
3257			[25] = "5",
3258			[26] = "8c353e6ed18c48d8d54754f51d9522",
3259			[27] = "65de83ef09c1bb44517b0b673997f7d8",
3260			[28] = "32a78c323b093727a3556f3f499b52a",
3261			[29] = "4ec6fa6a98995394f71e0b2207f371a9",
3262			[30] = "13107997fc19873b1902a2a615da9376",
3263			[31] = "51dc60db382d37d1cd141b86b4154757",
3264			[32] = "237cdf6c3a6bafc9ad00209a07355ec6",
3265			[33] = "25640e49e12fb784a6ac33b6d27d6e77",
3266			[34] = "25f4ab6cd383cb4026bffd362b15d7f",
3267			[35] = "411f7f296f7fac0ef30960fd99f42d43",
3268			[36] = "6",
3269			[37] = "2feabe9655a9641a8fa1f87f22531049",
3270			[38] = "720bb70b21823e069d150e3e64d26b7b",
3271			[39] = "177beb203ec9b72d675ca269eab76fd5",
3272			[40] = "30004d5cbb7d2e9cfd60d664924fd5e0",
3273			[41] = "382967f0e5f5feb1984360723a0c4f82",
3274			[42] = "22468c3c9efc7faffb5d3e8dd251fc40",
3275			[43] = "2de84badd9bff0944b460f3b8d0458e",
3276			[44] = "3f349bfee59b20322c96e7608a0a6678",
3277			[45] = "16580e82bde20283ff7045bf8bdf7190",
3278			[46] = "456c8f05a1da32e653cc5b839fa9b9e3",
3279			[47] = "1092ae6dfcff9bf2b3292f357aca1c05",
3280			[48] = "5f73de1b41d27ecef44d72a6f482d7a1",
3281			[49] = "7",
3282			[50] = "474785105e63cb2e42e342d7c24eafe9",
3283			[51] = "4b16b51a17a20de39e3f2a36fc8c9abd",
3284			[52] = "1ee2735f21481546726e185d2fd59c39",
3285			[53] = "2be013c5a5285182d8f04af39b1d6fef",
3286			[54] = "4dcc11434c70dc786ba1dec5ced76a8e",
3287			[55] = "542fb8ff09b332e95786de3e3ec8a568",
3288			[56] = "466c6caa9664b88d975b24d4c5b201ac",
3289			[57] = "5a3d33318760312855953f24bffd9ced",
3290			[58] = "469159fcdc46912a4e3fcab24a5ef2ac",
3291			[59] = "25635a436530a1238a7f4b2f0025e32b",
3292			[60] = "5710d5fd814da30c90229d0952266188",
3293			[61] = "3deb808b5ad9f2cb409d268e094918af",
3294			[62] = "2dbc7a4f609cc9466560d9177a45bfbb",
3295			[63] = "4bfb524b588dd2bb750026deee68fbf",
3296			[64] = "8",
3297			[65] = "235c214fd9dc61623c9955f87db2b12",
3298			[66] = "463c486bc87316cf7424a483bf537d38",
3299			[67] = "41be254c0da85d290b883c6b08421178",
3300			[68] = "4a08dc9a6549845973f15f747e79dff6",
3301			[69] = "1632bc546d2fa40a63b66c9c0b10399",
3302			[70] = "1de0640a5afe477f5b35616ff7a4cf41",
3303			[71] = "52b9f4585f7d01646e479ec08cff289e",
3304			[72] = "353b4f2257a187ae838030e70ad00e29",
3305			[74] = "233e33da1bb170db78a61f5463dea41c",
3306			[75] = "3d7f07763e91eb0d83cf19848bfada59",
3307			[76] = "6d3d18ffb4d9ef81aa9f23dfe9265c28",
3308			[77] = "a8291ed9a50df270c807f51fd931ec",
3309			[78] = "10d7025482f44ccf3b15f625e68fa814",
3310			[80] = "6ae27b936cc99d4c3c02a4ba420adbab",
3311			[81] = "9",
3312			[82] = "10a7130308b2012359b349defd48bb7c",
3313			[84] = "5f41deab0b3d98d43f4998d9dd6feb1",
3314			[85] = "593575a6c6f3d3defc4139e083a23789",
3315			[86] = "14bb748ced6ace4ce9ba942b124e9978",
3316			[87] = "54085d04c4746201ca5df23ce9c207b8",
3317			[88] = "5583209fb536c63c94a689957864db11",
3318			[90] = "4800740b193bc5eb7c114196db77c0d0",
3319			[91] = "3ccce2be9baf4d2f5575efc5d8bcaf5d",
3320			[92] = "7358e37c7bf8fe48d34fbeee594946e4",
3321			[93] = "5f7b21557f767e363b43f867baf4921c",
3322			[94] = "25f9463099ba6747ef039591b8a24142",
3323			[95] = "618ad1c02988e0f3f4ecc2dff670aac2",
3324			[96] = "3274b970794cb897ea021118a5f7fa6e",
3325			[98] = "3589155a412df3496c63328abeb40086",
3326			[99] = "5ecee9fe5868b04b42e25b10cf0f99b4",
3327		},
3328	},
3329	{
3330		.p = "d3a1b64e241479381932df4745621009",
3331		.first_non_square = 53,
3332		.sqrt = {
3333			[0] = "0",
3334			[1] = "1",
3335			[2] = "3256df5d0e4054ee1c708a8c2a94ce21",
3336			[3] = "1aceb5e620540ea3c8e28ff09e65a03e",
3337			[4] = "2",
3338			[5] = "4a920722c3d286a0acf498eb88a17407",
3339			[6] = "59c0e022516ddfc6f750aed84fc5ae70",
3340			[7] = "123de903d6dc595ff3db324dee5f1a27",
3341			[8] = "64adbeba1c80a9dc38e1151855299c42",
3342			[9] = "3",
3343			[10] = "10fb193db4a2e4fb1183cb7aa4488898",
3344			[11] = "f4ee6591467dcf7223ee39a1828d8a6",
3345			[12] = "359d6bcc40a81d4791c51fe13ccb407c",
3346			[13] = "3259920bf856147b6d524ea42d74cd0d",
3347			[14] = "5a72ba66b8b0b50d7dfc78997218456f",
3348			[15] = "41028b2be43eda537b3de57589b190bf",
3349			[16] = "4",
3350			[17] = "62de61e0af734f1d89f10bc4ac9ae273",
3351			[18] = "3c9d1836f9537a6dc3e13fa2c5a3a5a6",
3352			[19] = "4eacea5adabc97af905b65f1f32a67d6",
3353			[20] = "3e7da8089c6f6bf6bf49ad70341f27fb",
3354			[21] = "665de344f793cfcf0d8851eeaa979209",
3355			[22] = "4ab0fe70c9af2e359407cfb7a9284d2e",
3356			[23] = "55a3bad41617c6c316d63b172d065de3",
3357			[24] = "201ff6098138b9aa2a918196a5d6b329",
3358			[25] = "5",
3359			[26] = "13519dc6a212b6970dbdfa5c48317dde",
3360			[27] = "506c21b260fc2beb5aa7afd1db30e0ba",
3361			[28] = "247bd207adb8b2bfe7b6649bdcbe344e",
3362			[29] = "a108bd629d894d7d4ae6b94fc533244",
3363			[30] = "25de096124247dca639e5b4bdb451969",
3364			[31] = "3d7f485499372a399679f8a3ad2cb393",
3365			[32] = "a4638d9eb13257fa770b5169b0ed785",
3366			[33] = "63142ce93321793c61bc51c04ef70535",
3367			[34] = "ddef86ef8e2539ebeca14b526f44b5",
3368			[35] = "4ce13194f399e69fa318bb4bb8f7ea7b",
3369			[36] = "6",
3370			[37] = "9228193d6c0e38073c07cdf448de5ee",
3371			[38] = "11c081d52a1f27b9dafd424384c59554",
3372			[39] = "5006ac3ae7fc06103b81937bc75a2b33",
3373			[40] = "21f6327b6945c9f6230796f548911130",
3374			[41] = "3f455b8cd2f901c587b0598a682b583f",
3375			[42] = "1df60d29d9e20a850f71ff40123437c1",
3376			[43] = "2382b8ce194e6c36c92a0b3faadaaa52",
3377			[44] = "1e9dccb228cfb9ee447dc7343051b14c",
3378			[45] = "c145f1a27631aa9edaaeb7b54824c0c",
3379			[46] = "671467f745d92daf13ebb67ecf24fca3",
3380			[47] = "264506f56045c3502ef62170be528551",
3381			[48] = "6866deb5a2c43ea8f5a89f84cbcb8f11",
3382			[49] = "7",
3383			[50] = "2810a683232d2f6e74ffd5758f85f69c",
3384			[51] = "1ebedbfc86ece8fe5b90062a149969f8",
3385			[52] = "64b32417f0ac28f6daa49d485ae99a1a",
3386			[54] = "39a0ea18d035261cccbf2d41a9eefb47",
3387			[55] = "694639a2f3d08884ecb2affda5ee61e3",
3388			[56] = "1ebc4180b2b30f1d1d39ee146131852b",
3389			[57] = "5d2cec4ee0c2ce79bf81a15df81ceb4f",
3390			[58] = "2ce9fcc748ecf7848e9dcf2211e67206",
3391			[60] = "519c9ff65b96c49122b7145c31feee8b",
3392			[62] = "12685eaa555f8cb49a90178a0a6015fc",
3393			[63] = "36b9bb0b84950c1fdb9196e9cb1d4e75",
3394			[64] = "8",
3395			[65] = "4de278e7a145b79c2419db6e07e791f",
3396			[66] = "379ddde1c4ac6a9e5ca97ef7aba7a6c",
3397			[67] = "37c6a10abcd0fe2aa60f330f989550ca",
3398			[68] = "de4f28cc52ddafd0550c7bdec2c4b23",
3399			[69] = "2769cef201b1aac7821d582d2d2e8780",
3400			[70] = "639e469a7c754f5cd697dab32f90d07",
3401			[71] = "2c68191bf87dfe5cef79f5f62b726623",
3402			[72] = "5a6785e0316d845c91706001ba1ac4bd",
3403			[73] = "3a6fe5f9d81eb2fe4353d17adde7346f",
3404			[74] = "1576149deacfc14d26864a3cc3e17600",
3405			[75] = "4d9828cf827030052cc60f942d65eed3",
3406			[76] = "3647e1986e9b49d8f87c13635f0d405d",
3407			[77] = "630c6e7117790a971af1517d57363f28",
3408			[78] = "6856e68603816f2c27fdc4c7d5016934",
3409			[80] = "56a6663ceb35a14a9a9f8466dd23c013",
3410			[81] = "9",
3411			[82] = "59830bfb04b7677115c088282226682f",
3412			[84] = "6e5efc434ecd999fe223b69f032ebf7",
3413			[85] = "59925907902ef6ef57cd520278a260c5",
3414			[86] = "632a92f87db0fc76ab82a2d352768c19",
3415			[87] = "16d7959610ea9badc85fb36603a94879",
3416			[88] = "3e3fb96c90b61cccf1233fd7f31175ad",
3417			[89] = "13088ca71d4342c41581472612636828",
3418			[90] = "32f14bb91de8aef1348b626fecd999c8",
3419			[91] = "5c0a55b7b9d58943b809015a4aa020ff",
3420			[92] = "285a40a5f7e4ebb1eb866918eb555443",
3421			[93] = "1592a85e0341d9c9825096e1976e192b",
3422			[94] = "2fb36c59090a20bbaa092c8aa8992ac2",
3423			[95] = "2e74a563b5f9c6a6b01d52288f9c0d6b",
3424			[96] = "403fec13027173545523032d4bad6652",
3425			[98] = "46e35110e4669fed6b51f4b960b27d2b",
3426			[99] = "2decb30b3d3796e566bcaace487a89f2",
3427		},
3428	},
3429	{
3430		.p = "d7da4ea4510511593950179f8f711349",
3431		.first_non_square = 59,
3432		.sqrt = {
3433			[0] = "0",
3434			[1] = "1",
3435			[2] = "959d1dbbc442f0c03fab00d7b74bc39",
3436			[3] = "54011c029cc999cc59490b7ee97eeab5",
3437			[4] = "2",
3438			[5] = "27a5f203b507150a1470c9475067a7a9",
3439			[6] = "5b106a2f61672bff1fc84537031bb8bf",
3440			[7] = "c1c26a4d8728d54300851fec2a6c397",
3441			[8] = "12b3a3b778885e1807f5601af6e97872",
3442			[9] = "3",
3443			[10] = "5454e217bab81e821a0b173196678210",
3444			[11] = "1682f9cf7225b6fd06af37171fe3fde1",
3445			[12] = "2fd8169f1771ddc086be00a1bc733ddf",
3446			[13] = "217f7c4618539196631e3abcf5fe454d",
3447			[14] = "46176a55e55c6e8920b06a348e37c612",
3448			[15] = "43fc3e63a8bbe3e9e702986f4f1ed133",
3449			[16] = "4",
3450			[17] = "19453763a8648666e6d09e4de90b0333",
3451			[18] = "1c0d759334cc8d240bf01028725e34ab",
3452			[19] = "119bcbb7bff3e1badada7f4d83e36e67",
3453			[20] = "4f4be4076a0e2a1428e1928ea0cf4f52",
3454			[21] = "1d5498842ef5c553b8ef2d356bcc6eab",
3455			[22] = "15b78a01b3f6097e3cf9b453f141e9ed",
3456			[23] = "980e6f8411b4639e84cd6c712a9cba1",
3457			[24] = "21b97a458e36b95af9bf8d318939a1cb",
3458			[25] = "5",
3459			[26] = "20dcca93e1306a7f700b99170fbce6c7",
3460			[27] = "242905638557bc0bd28b0add2d0bacd6",
3461			[28] = "18384d49b0e51aa86010a3fd854d872e",
3462			[29] = "5a6e09373884c6bfa72122a486a177b3",
3463			[30] = "12e5df3ef102359d598724a0811ba203",
3464			[31] = "5c85b8dbe7a3ff15fcc9eb57067b82bc",
3465			[32] = "2567476ef110bc300feac035edd2f0e4",
3466			[33] = "6b8e76260fca9eefcef94f3f2d12200f",
3467			[34] = "3b36f3d67d8463ece78ac1e3396d148e",
3468			[35] = "394b72ee77c8734547637275946556da",
3469			[36] = "6",
3470			[37] = "4b64318604f4ae445368e8876704e136",
3471			[38] = "c3a81ce44aaa2db666a3d16b0201d09",
3472			[39] = "1e45b92f0be82f1042ad3fe274ff0c88",
3473			[40] = "2f308a74db94d4550539e93c62a20f29",
3474			[41] = "3e9c285ed90c12fe79cf4ba4128f6185",
3475			[42] = "2025ee1dd9e72c7313b99e9f1c90d856",
3476			[43] = "3a3dbbf0e96a1a3ce316b144b7826682",
3477			[44] = "2d05f39ee44b6dfa0d5e6e2e3fc7fbc2",
3478			[45] = "60e8789931efd23afbfdbbc99e3a1c4e",
3479			[46] = "fee50de01be07f792ac6f5b9b5de4b7",
3480			[47] = "8b0f0ef7048f8d3e4c9ba6d4ef80f6f",
3481			[48] = "5fb02d3e2ee3bb810d7c014378e67bbe",
3482			[49] = "7",
3483			[50] = "2ec1194aad54eb3c13e570436947ad1d",
3484			[51] = "17e29b58202c9cefddc75b5fafc7e372",
3485			[52] = "42fef88c30a7232cc63c7579ebfc8a9a",
3486			[53] = "3a0c58a5ec20f119c262f12ae5183157",
3487			[54] = "3956efe9d33072a42608b80579e216f4",
3488			[55] = "2be21c25e83850a25db71abbc4a48100",
3489			[56] = "4bab79f8864c3446f7ef433673018725",
3490			[57] = "5386749f14c9429c39b8d9d424f075b5",
3491			[58] = "360395662a2d98180968961c84e61588",
3492			[60] = "4fe1d1dcff8d49856b4ae6c0f13370e3",
3493			[61] = "4238404aca0d8514e461aa1b212a5af6",
3494			[62] = "629800208ccbf1d82b7b1b43ec19118c",
3495			[63] = "245473ee8957a7fc9018f5fc47f44ac5",
3496			[64] = "8",
3497			[65] = "6b2bef42c7770064af9022b31d103d5c",
3498			[66] = "20454e81a6a03a241dbc136180e8c664",
3499			[68] = "328a6ec750c90ccdcda13c9bd2160666",
3500			[69] = "160e654845d6518f69ca871d43a32123",
3501			[70] = "1bb310d630d1bc146d36acc51d7abf11",
3502			[72] = "381aeb2669991a4817e02050e4bc6956",
3503			[73] = "472e264b5e0edc8ec4a88d77a050dc04",
3504			[74] = "49a4a35f203f4e4d29034e654752f75",
3505			[75] = "baf113b921a21b4b432f5c48f679109",
3506			[76] = "2337976f7fe7c375b5b4fe9b07c6dcce",
3507			[77] = "28caa6a79c150442aa8ad26a6a293d6b",
3508			[78] = "1ea04d76bcb64865c84cbabc0eef714b",
3509			[80] = "394286957ce8bd30e78cf2824dd274a5",
3510			[81] = "9",
3511			[82] = "f4596207cde9bd65f928c1c6ad96fe",
3512			[83] = "56f024a084a7418b7fbb56a3398cdf40",
3513			[84] = "3aa931085deb8aa771de5a6ad798dd56",
3514			[85] = "5f4260a2d155f008378db93f90204793",
3515			[86] = "140253b4201d75301a986809baed51d8",
3516			[87] = "f5d00583106340970471bc36ca2d0d7",
3517			[88] = "2b6f140367ec12fc79f368a7e283d3da",
3518			[89] = "6adb209ecb5bcd002bef5b6bee7f253a",
3519			[90] = "252457a2df234a2d14d12df533c572e7",
3520			[91] = "1c21f090707344b4d211c183e4e5bd60",
3521			[92] = "1301cdf082368c73d099ad8e25539742",
3522			[93] = "4c8047a783cda4682655dc2f757b35bb",
3523			[94] = "6eaa3447c9e7a4f0b0afe99836c88ee",
3524			[95] = "69c7233d4237d40d65ac836ac27e305a",
3525			[96] = "4372f48b1c6d72b5f37f1a6312734396",
3526			[98] = "4174bd0225dd49541bdad05e6031258f",
3527			[99] = "4388ed6e567124f7140da5455fabf9a3",
3528		},
3529	},
3530	{
3531		.p = "e4ad8bf1a7b946d591595a7347b15f71",
3532		.first_non_square = 53,
3533		.sqrt = {
3534			[0] = "0",
3535			[1] = "1",
3536			[2] = "4c49d878822cfbe76fb4b402caaed4fd",
3537			[3] = "3c37757e7487b01dfbc37216d844db99",
3538			[4] = "2",
3539			[5] = "5aeece5c7ed9ca8c1ed52da45babc777",
3540			[6] = "40713762535e9a0c57f602473ff52998",
3541			[7] = "3ecda635990f5dea2acb9b1a9fdefbf5",
3542			[8] = "4c19db00a35f4f06b1eff26db253b577",
3543			[9] = "3",
3544			[10] = "91ce7bde461ea19843dc9847de90e4",
3545			[11] = "125b241be577156bc1797be7208ee62b",
3546			[12] = "6c3ea0f4bea9e69999d276459727a83f",
3547			[13] = "425700a36490fb859641b2b08a7eae0a",
3548			[14] = "10f1f9d70043a045d55a6d116c2a6f31",
3549			[15] = "469981b6614fca719735f3d6d9dcb656",
3550			[16] = "4",
3551			[17] = "72796d6db8598786ae34c9df885233b",
3552			[18] = "2ffd77decdace0bdc4c195185b1f86",
3553			[19] = "1dcf29a92bb5b16be3ff967d956e78c1",
3554			[20] = "2ecfef38aa05b1bd53aeff2a9059d083",
3555			[21] = "417e0eec0ee9eab8893e2c6432f1410f",
3556			[22] = "65551d126459325ddff4e27e0e154850",
3557			[23] = "3394ef48c3876261e519f07c5cc22838",
3558			[24] = "63cb1d2d00fc12bce16d55e4c7c70c41",
3559			[25] = "5",
3560			[26] = "10772742d4d9fbe450d15ef5ffc3fe71",
3561			[27] = "30072b764a22367b9e0f042ebee2cca6",
3562			[28] = "67123f86759a8b013bc2243e07f36787",
3563			[29] = "5cc3d6327e652a41154770644a38b969",
3564			[30] = "4ad60c254ddec972fae777b256a7c5d5",
3565			[31] = "2e00a145ed5a04009a8355499ce70919",
3566			[32] = "4c79d5f060faa8c82d797597e309f483",
3567			[33] = "5cf3346d66af0589ba6cc2ca64333c79",
3568			[34] = "4a3aaa0b4b8c6ede15bc17190bdada64",
3569			[35] = "71363966ddc55278fda04d8b9c1ae94b",
3570			[36] = "6",
3571			[37] = "1b3a4a911ed3a3c94924fa36bb0b2ee9",
3572			[38] = "28e73aa747bd0f9c9a9bc913df016115",
3573			[39] = "6f8a1ed7db16005ca5df3eddb25eacbb",
3574			[40] = "1239cf7bc8c3d433087b9308fbd21c8",
3575			[41] = "6a7533c0bc1acd73a3b48be478dd13a2",
3576			[42] = "9e55812741e9524ca166ce7bff9be9e",
3577			[43] = "6244c591bd3277fca7ec50e93b69221c",
3578			[44] = "24b64837caee2ad782f2f7ce411dcc56",
3579			[45] = "2c1edf23d4d418cecb262e79cb51f6f4",
3580			[46] = "e3c5e20bd259295570a71eec9ecd768",
3581			[47] = "4cf99eaa49470e4938c90a22bc4ccb88",
3582			[48] = "c304a082a6579a25db46de819620ef3",
3583			[49] = "7",
3584			[50] = "4be9dd88c491a225f42b30d899f895f1",
3585			[51] = "3467e2afaf03823c26a922d43928cc08",
3586			[52] = "5fff8aaade974fca64d5f51232b4035d",
3587			[54] = "2359e5caad9d78b08977539d87d1e2a9",
3588			[55] = "bd103977e456b841e966a74aad0e057",
3589			[56] = "21e3f3ae0087408baab4da22d854de62",
3590			[57] = "2c4fbdbb74128aab91bd39e1913a3f27",
3591			[58] = "3371407d6491e3ec1977f1b775823de2",
3592			[60] = "577a8884e519b1f262ed72c593f7f2c5",
3593			[61] = "3ee45bf8835e5badafeb6df43185f5bc",
3594			[62] = "56cb5291a6e682ffcaf3ff8b4150c72e",
3595			[63] = "28449950dc8b2d1710f6892368146b92",
3596			[64] = "8",
3597			[65] = "143912b856d247f8c39d24c1c062491",
3598			[66] = "3c15ad8b379ebaff4763bab01a9bcda9",
3599			[68] = "e4f2dadb70b30f0d5c6993bf10a4676",
3600			[69] = "635cd56cb6cb00cf27fa36b7aedfbc53",
3601			[70] = "43c04f20e4e9ac170210fc23ab9c2dc2",
3602			[72] = "5ffaefbd9b59c17b89832a30b63f0c",
3603			[74] = "bfdaba577a3472dd49bfd77fd19918f",
3604			[75] = "4867bf869eed29c05977dffef1a6ea8c",
3605			[76] = "3b9e5352576b62d7c7ff2cfb2adcf182",
3606			[77] = "2006ed422b0a69dc4d57d750f38d34ab",
3607			[78] = "4b050d62afd87d0f33db026adbb1c115",
3608			[80] = "5d9fde71540b637aa75dfe5520b3a106",
3609			[81] = "9",
3610			[82] = "b0dc8230270044d0edf3ab1ad97b16d",
3611			[84] = "61b16e1989e571647edd01aae1cedd53",
3612			[85] = "46e0143233ee83c76c0b13168f19a07a",
3613			[86] = "52a1b3caadecf3720ef1d80d467e74bc",
3614			[87] = "14589812286e6d6f123be7173952a95c",
3615			[88] = "1a0351ccdf06e219d16f95772b86ced1",
3616			[89] = "539cf0fd123cf0a349f1fa6ffdfc4a68",
3617			[90] = "1b56b739ad25be4c8cb95c8d79bb2ac",
3618			[91] = "5662acc7560be428cb14e9cc5a4e2128",
3619			[92] = "6729de91870ec4c3ca33e0f8b9845070",
3620			[93] = "5cb5d378c21458c2912dd06deb1a7735",
3621			[94] = "552aec748d185891ca356d1379aed772",
3622			[95] = "4fc9e390534febdb6c6ec3fea343b79c",
3623			[96] = "1d175197a5c1215bce7eaea9b82346ef",
3624			[98] = "4ca9d3683fc855a8eb3e372cfb651409",
3625			[99] = "37116c53b0654043446c73b561acb281",
3626		},
3627	},
3628	{
3629		.p = "cbcabb1f226a0c65460ae623608b1ad9",
3630		.first_non_square = 59,
3631		.sqrt = {
3632			[0] = "0",
3633			[1] = "1",
3634			[2] = "20aa56375597d8cdab6a03b709d4a278",
3635			[3] = "49d44e3b109e23292d3d13445b9b8eea",
3636			[4] = "2",
3637			[5] = "1e0e210eb335cae047c35d767f674637",
3638			[6] = "625c5c0f38eca85e2ecb80174fa4a95e",
3639			[7] = "3745673b54e841a6a4fb1a8a3759b8bf",
3640			[8] = "4154ac6eab2fb19b56d4076e13a944f0",
3641			[9] = "3",
3642			[10] = "4f0396e7b9df52bac992b43575c33c35",
3643			[11] = "4d679981c0acbe4a8e305ca2cc963ef9",
3644			[12] = "38221ea9012dc612eb90bf9aa953fd05",
3645			[13] = "6596f0c8f4a91c4a17e751f02c81a82f",
3646			[14] = "20d6292a2fdef5fadd66420ecd85cbd3",
3647			[15] = "266647395842faa57f249c38db0f1eb1",
3648			[16] = "4",
3649			[17] = "3cba2f5354d5ba2192012e780019d728",
3650			[18] = "61ff02a600c78a69023e0b251d7de768",
3651			[19] = "577f304041afec01a5c075ab05175217",
3652			[20] = "3c1c421d666b95c08f86baecfece8c6e",
3653			[21] = "28429bbbd4c6513ad4f08b5ea351f8a",
3654			[22] = "29cf35616a805dd926e7cdcbe6d63680",
3655			[23] = "55d452f7467ccbaa62afc2985787cf17",
3656			[24] = "7120300b090bba8e873e5f4c141c81d",
3657			[25] = "5",
3658			[26] = "29e4c4e321eced80ec26e6133bf20af6",
3659			[27] = "11b22f920f705d1641ac53a9b24791e5",
3660			[28] = "5d3feca878998917fc14b10ef1d7a95b",
3661			[29] = "5b4b3eed097bd01db9cd0c7a288b56c3",
3662			[30] = "3575cde15467aaaae6e0187e24d6d2ee",
3663			[31] = "5840337f0dc69197ea45a3a340700304",
3664			[32] = "49216241cc0aa92e9862d747393890f9",
3665			[33] = "54002bd7d536884838b4eeda47283774",
3666			[34] = "4951e9a1bd020bb682f868df70b4bfbc",
3667			[35] = "376b66fcc1a223932d2b34a06781ff17",
3668			[36] = "6",
3669			[37] = "3f93f4d11e213ad8cdab598763039e7b",
3670			[38] = "324d3ab2b47ec5393ef6070e5374bb34",
3671			[39] = "261e82ec98f3c07d5dc28a1484db4146",
3672			[40] = "2dc38d4faeab66efb2e57db87504a26f",
3673			[41] = "1976a2ea6012d0647da3523808d36740",
3674			[42] = "42de54dbb74f15f8e3186afc44a48501",
3675			[43] = "4f751abc9fe3a2f84f1ccb3fd63bd3f6",
3676			[44] = "30fb881ba1108fd029aa2cddc75e9ce7",
3677			[45] = "5a2a632c19a160a0d74a18637e35d2a5",
3678			[46] = "494db3f0b07d25c8a30faeec07f9b5e8",
3679			[47] = "182d2c235507872a1e99c776b83ccfbe",
3680			[48] = "5b867dcd200e803f6ee966ee0de320cf",
3681			[49] = "7",
3682			[50] = "28770c0a7672d060ecf8d3902f63ee81",
3683			[51] = "d05c776625315a66187a12849c70f79",
3684			[52] = "9cd98d3917d3d1163c42430787ca7b",
3685			[53] = "286f9d986059b7f9938b43ead8c8d654",
3686			[54] = "5b4a590e885becb546579a228e62e141",
3687			[55] = "51aa04d6a5d11b6edc1a6fe2233eee6b",
3688			[56] = "41ac52545fbdebf5bacc841d9b0b97a6",
3689			[57] = "5aa5e71f1dfc8b3cc0e026612f7e1fb6",
3690			[58] = "35533f553747e464072c4440bac52a0e",
3691			[60] = "4ccc8e72b085f54afe493871b61e3d62",
3692			[61] = "24551bf46096d057148ef425467a9ba9",
3693			[62] = "3e52033154f120b235978178d647c143",
3694			[63] = "25fa856d23b1477157199684ba7df09c",
3695			[64] = "8",
3696			[65] = "563a6e8eb33b076dbe065396eb315574",
3697			[66] = "5e864cca82f747ea276994780ac8a19d",
3698			[68] = "52565c7878be98222208893360576c89",
3699			[69] = "5ce922cd0c1b446c1e4ca6c4e0f24df8",
3700			[70] = "11f934d12f2ffcc38b0a891a84025b50",
3701			[72] = "7ccb5d320daf793418ecfd9258f4c09",
3702			[73] = "52a7a870244bba2a55519bf744ebed05",
3703			[74] = "ad23956ae428025f0a0257bf2dda72f",
3704			[75] = "266fef16f1bd68fca9e46bf0f70c6b20",
3705			[76] = "1ccc5a9e9f0a3461fa89facd565c76ab",
3706			[77] = "14072fe6875f3477f254a09d386e4654",
3707			[78] = "38f4c4a6b86698a0480425b350bdbebe",
3708			[80] = "539236e45592e0e426fd704962ee01fd",
3709			[81] = "9",
3710			[82] = "3f7b778244278ec4835d885d4839b2b4",
3711			[84] = "50853777a98ca275a9e116bd46a3f14",
3712			[85] = "22d770096f8b019cc1dbe271c8d798b8",
3713			[86] = "50718b1afe946781b22c7ce102fd4243",
3714			[87] = "50259cceac8c1f8b42544d960fee46fb",
3715			[88] = "539e6ac2d500bbb24dcf9b97cdac6d00",
3716			[90] = "214009980b33ebcb16ad367d00be99c6",
3717			[91] = "2df48de5831087e5fa6d5f4b545beb59",
3718			[92] = "202215309570751080ab60f2b17b7cab",
3719			[93] = "384da52f8b0dd624357002ef2753ab23",
3720			[94] = "2d9c483316aab53053292ffc1364a199",
3721			[95] = "17d3a3a478758dcb2d715b6a6c291770",
3722			[96] = "e24060161217751d0e7cbe98283903a",
3723			[98] = "18dda06434bce13a69db33dde445566f",
3724			[99] = "1c6c11661f9c2e7a64862fc50537a212",
3725		},
3726	},
3727	{
3728		.p = "fe4140ab1703f4636f45c48bfb0068a1",
3729		.first_non_square = 53,
3730		.sqrt = {
3731			[0] = "0",
3732			[1] = "1",
3733			[2] = "7ba6780b0fed766515a7f52780bc9293",
3734			[3] = "6149de094ae83131a239de5a6df50f3d",
3735			[4] = "2",
3736			[5] = "8e08f47c68cea90d366ed88b052dc0d",
3737			[6] = "712eb140f38d2eda5c637e54d10bef43",
3738			[7] = "647ecb433b6c7bac3b1d2f9d6054d0ba",
3739			[8] = "6f45094f729079943f5da3cf987437b",
3740			[9] = "3",
3741			[10] = "329e80ca3b64fa4f1155f9c270b8f4ce",
3742			[11] = "24c5b58cbd45b14e27fb39d98513e861",
3743			[12] = "3bad8498813392002ad207d71f164a27",
3744			[13] = "30b405638cc9503430b6aa41495bb61",
3745			[14] = "2f1bc9fc42ecee2906bb9cb2c4b48844",
3746			[15] = "1060959a729316d3567679f61abc49af",
3747			[16] = "4",
3748			[17] = "2743cff56b8c8f8ee97f7446ae99739e",
3749			[18] = "74b2277618c46ecbd1b21aea87354f18",
3750			[19] = "3fbbfcdfd2487c9b851129505f179076",
3751			[20] = "11c11e8f8d19d521a6cddb1160a5b81a",
3752			[21] = "6fc009527f629afe432b1f4f1e4b1fea",
3753			[22] = "3f01ff2d6c6d833d28056e6072b25e60",
3754			[23] = "506f5b0f98fa595bed0cbc10ab7c5ee5",
3755			[24] = "1be3de292fe996aeb67ec7e258e88a1b",
3756			[25] = "5",
3757			[26] = "10be4164d8254ac55662322c7ddcf6fe",
3758			[27] = "259c5970c9b49f317767d6834edec516",
3759			[28] = "3543aa24a02afd0af90b65513a56c72d",
3760			[29] = "5e4f3f1a728ca81e0562ea16d3b3cffd",
3761			[30] = "5f7adf9503c5bf6b2ed871ee578d7f7f",
3762			[31] = "5a732eeb6c03d753dce4cbca35427431",
3763			[32] = "de8a129ee520f3287ebb479f30e86f6",
3764			[33] = "515718e3cde407eb2f1f134140cb21fe",
3765			[34] = "58f96aeb670e2022511ae47d9ecba760",
3766			[35] = "7b8229e2856880ab02cd93d5da144228",
3767			[36] = "6",
3768			[37] = "6b81b8e27b6cf32c0457ca6fdadea755",
3769			[38] = "b8e8b04539168fe235d3def1490dad8",
3770			[39] = "15bf17346ca8088e3cce95dfb9c418f7",
3771			[40] = "653d019476c9f49e22abf384e171e99c",
3772			[41] = "70c50f028034d998186c4fa9b24ec776",
3773			[42] = "4025367c12a3595db005c840e28fca2f",
3774			[43] = "10bd851db1dbc8acea1e2f5c9a539027",
3775			[44] = "498b6b197a8b629c4ff673b30a27d0c2",
3776			[45] = "1aa1add753a6bfb27a34c89a10f89427",
3777			[46] = "2f0c4d81e381d9b019bf8094b3eecee6",
3778			[47] = "15534147c6ebf56b2ecc5c10e0770e14",
3779			[48] = "775b09310267240055a40fae3e2c944e",
3780			[49] = "7",
3781			[50] = "6dbdd6e1219b67328dbc40ad8dae0b9d",
3782			[51] = "70e70926d41fd03e102a5a44ce1229f9",
3783			[52] = "61680ac71992a068616d548292b76c2",
3784			[54] = "554ad317c3a3982ba5e4b67278236528",
3785			[55] = "1459f9f6ec22944520f4871412088d85",
3786			[56] = "5e3793f885d9dc520d77396589691088",
3787			[57] = "341ef10187760d3c36d527145b4ad817",
3788			[58] = "529922ce1cc858cb8a2b30f4684aa9fd",
3789			[59] = "37be2dfe9028978862327c01c89586e2",
3790			[60] = "20c12b34e5262da6acecf3ec3578935e",
3791			[62] = "6ecd16e975917832f0959b6c9542da42",
3792			[63] = "2f3b211e9b417ea14211ca4c25fe098d",
3793			[64] = "8",
3794			[65] = "7345a2c482c5a9588f299989ac40ecad",
3795			[66] = "18770759a8b2f26d1a24dba6c2d52a07",
3796			[68] = "4e879fead7191f1dd2fee88d5d32e73c",
3797			[69] = "3a0988799c07916f61906d56b5afe5ec",
3798			[70] = "1d94b3814a59d9cd691f356c42e05881",
3799			[72] = "14dcf1bee57b16cbcbe18eb6ec95ca71",
3800			[74] = "1d13c613cdf866cb5b13e4a51dc7ebe3",
3801			[75] = "16112b27b77ef2ceb36a3153d0378511",
3802			[76] = "7ec946eb7272fb2c652371eb3cd147b5",
3803			[77] = "3ea093d7619691c048b296bdc0d37662",
3804			[78] = "3af49044c061c8aad58fc0604c081c2c",
3805			[80] = "23823d1f1a33aa434d9bb622c14b7034",
3806			[81] = "9",
3807			[82] = "21662760541dd24c3115bfa4f0b2f76d",
3808			[84] = "1ec12e06183ebe66e8ef85edbe6a28cd",
3809			[85] = "34b4035b5edce75b16326453cc7b7c59",
3810			[86] = "67f099b3ac6c1e2285f800c1169f3e74",
3811			[87] = "28d2792fa43528197df02a2ab64f10b4",
3812			[88] = "7e03fe5ad8db067a500adcc0e564bcc0",
3813			[89] = "131cea5295f0f890d408cd55292baa9a",
3814			[90] = "6665be4c64d505763b43d744a8d58a37",
3815			[91] = "6166d2bbeaabb0fc8f2a7f54155dba4c",
3816			[92] = "5d628a8be50f41ab952c4c6aa407aad7",
3817			[93] = "5d9415660fcce03cc4807ceb85b729c0",
3818			[94] = "63b43ba1ab89508e123048325aa02be5",
3819			[95] = "453ec81c6776384522e1ecda1b6ddee5",
3820			[96] = "37c7bc525fd32d5d6cfd8fc4b1d11436",
3821			[98] = "66c9864c2a725f9949c666709426c822",
3822			[99] = "6e5120a637d113ea77f1ad8c8f3bb923",
3823		},
3824	},
3825	{
3826		.p = "c952099317697fbee819206f51261769",
3827		.first_non_square = 61,
3828		.sqrt = {
3829			[0] = "0",
3830			[1] = "1",
3831			[2] = "1030ca5f555429e4df1a0364d52ed574",
3832			[3] = "1c008a94d898f5934cc6768dc4aa9e7",
3833			[4] = "2",
3834			[5] = "6453a0cada2df423a5cadbfdb1f7a43a",
3835			[6] = "4ead969961f9970cc0957f4c1997a2eb",
3836			[7] = "9516aa771b15128eb5879ba5cbbcb6c",
3837			[8] = "206194beaaa853c9be3406c9aa5daae8",
3838			[9] = "3",
3839			[10] = "218b5770aff5df5ee5dea41f84d956f8",
3840			[11] = "2e5ad00f8babb3bf597470ccdefa6904",
3841			[12] = "38011529b131eb26998ced1b89553ce",
3842			[13] = "5b7093eeeaabe2273d89ed1269e95a8d",
3843			[14] = "150e9ff34aebd4279f3f194d0b008b9a",
3844			[15] = "52f554395146f4e92284fd0195f3da81",
3845			[16] = "4",
3846			[17] = "e87f72fca45eea33de5b19bdc8598a6",
3847			[18] = "30925f1dfffc7dae9d4e0a2e7f8c805c",
3848			[19] = "dbbf4eb69d3d3d80113b9c179dbdf14",
3849			[20] = "aac7fd630d97779c836873ed36cef5",
3850			[21] = "343a4efea6c533ef26fbc9c0455bba4b",
3851			[22] = "561d91e30353cd92dad551df29b34330",
3852			[23] = "1c46770900025779e503a37fbf3652f",
3853			[24] = "2bf6dc60537651a566ee21d71df6d193",
3854			[25] = "5",
3855			[26] = "d8061aede379d718c4477b0c72eeb0b",
3856			[27] = "54019fbe89cae0b9e65363a94dffdb5",
3857			[28] = "12a2d54ee362a251d6b0f374b97796d8",
3858			[29] = "1a00dd8133c4574015541507f34fa2a2",
3859			[30] = "354823c12c93d938a6150ca543c49001",
3860			[31] = "2c50d713847df4e0e6c8092bbb7ff748",
3861			[32] = "40c3297d5550a7937c680d9354bb55d0",
3862			[33] = "1dadd4e7aed55d1dee86fa9fbec2b5f9",
3863			[34] = "495c10a814ec41ca882fd0a3db20dae0",
3864			[35] = "e02ae2c2ae827bcbcb8d5cee71ce245",
3865			[36] = "6",
3866			[37] = "48666c8d4ae91cdb3baa3faaf209f863",
3867			[38] = "1348689ee8394ec3c373f58427071294",
3868			[39] = "22ebc3a88ac979c4cb232cb96ef56c3d",
3869			[40] = "4316aee15febbebdcbbd483f09b2adf0",
3870			[41] = "5d6e17005c737be1d08b4c361e7c38aa",
3871			[42] = "63bdca4c2bc7704338cb6b9040f977bc",
3872			[43] = "bbcd28418772487d60fa0e99ee30f4e",
3873			[44] = "5cb5a01f1757677eb2e8e199bdf4d208",
3874			[45] = "63a8d8cd77205cac09477389c4c0d545",
3875			[46] = "27626a82bfa70599fc17246961bdadd0",
3876			[47] = "e64fa81b1411430a01be20a26516d3",
3877			[48] = "70022a536263d64d3319da3712aa79c",
3878			[49] = "7",
3879			[50] = "50f3f3dcaaa4d1785b8210f829ea2b44",
3880			[51] = "4573f3634cf8d8277095b591bba6eb32",
3881			[52] = "1270e1b54211bb706d05464a7d53624f",
3882			[53] = "4b910f3075773d693fc6320490320417",
3883			[54] = "22b6ba390e83456759a75d74fba0d158",
3884			[55] = "43d64c3a87c506ed9f669fb02a34490f",
3885			[56] = "2a1d3fe695d7a84f3e7e329a16011734",
3886			[57] = "f9eab4f7d57e3626e924cb0a2ed38d1",
3887			[58] = "2c268106581c388b69a240d04f41ddb3",
3888			[59] = "5468c6518f3cc44a8b95e3bebafe1160",
3889			[60] = "2367612074db95eca30f266c253e6267",
3890			[62] = "45bc5f2b116bb2147e21226906d83f5e",
3891			[63] = "1bf43ff65513f37ac2096d2f16336244",
3892			[64] = "8",
3893			[65] = "3a05b5275ba2635e914620a14673f977",
3894			[66] = "1a17a7a83581669f72accc1078c3b313",
3895			[68] = "1d0fee5f948bdd467bcb6337b90b314c",
3896			[69] = "212575df2c4a30476197bbdee2f94cc7",
3897			[70] = "a3f6dea37e9f80dc82f120598fd4bf",
3898			[71] = "f488a226be605e99163987425d9d390",
3899			[72] = "6124be3bfff8fb5d3a9c145cff1900b8",
3900			[74] = "13d134042559929d1edc56f26b66f3b",
3901			[75] = "8c02b4e83afccbe07fe050c4d755183",
3902			[76] = "1b77e9d6d3a7a7b002277382f3b7be28",
3903			[77] = "173a062e52c9d7f72af37a962c86bc64",
3904			[78] = "564a72f1159c013f5c9bad4a81a1e2e2",
3905			[79] = "4398a271233b37edbd0ff6c5bc3dba1",
3906			[80] = "1558ffac61b2eef3906d0e7da6d9dea",
3907			[81] = "9",
3908			[82] = "360ac3f246c2a2011620260c69e306ee",
3909			[84] = "60dd6b95c9df17e09a218ceec66ea2d3",
3910			[85] = "1042e7ab08c6e4551896de0fc918b9a7",
3911			[86] = "bf0a7212c4ed469c981a78d7c6c7e86",
3912			[87] = "4e6d3d71bd2dca40b63270d75cb33802",
3913			[88] = "1d16e5cd10c1e499326e7cb0fdbf9109",
3914			[90] = "64a206520fe19e1cb19bec5e8e8c04e8",
3915			[91] = "53cbd73f05e4d2cdd9ea452367ba48a3",
3916			[92] = "388cee120004aef3ca0746ff7e6ca5e",
3917			[93] = "5068af97e0ba758c38264b3fb6aaba9c",
3918			[94] = "3d7f4045e3fa05122e1616448e2b059f",
3919			[95] = "2b0448ad5e65cf7b24cc311cd17c2e1e",
3920			[96] = "57edb8c0a6eca34acddc43ae3beda326",
3921			[97] = "49893d9e5a5a5c7bb1c62e154d45677a",
3922			[98] = "57fc80f7c21c5a7cce6308ad7cde413d",
3923			[99] = "3e41996474666480dbbbce08b436dc5d",
3924		},
3925	},
3926	{
3927		.p = "c4ed76cc85621982d0467c08b185a479",
3928		.first_non_square = 53,
3929		.sqrt = {
3930			[0] = "0",
3931			[1] = "1",
3932			[2] = "3f8cc442a5387175ec9f6de0eb3fcfe6",
3933			[3] = "5904ffdcb4ae08d74f449e78de9eab94",
3934			[4] = "2",
3935			[5] = "259e201e5d0138c02f3566bfd710b661",
3936			[6] = "32b732707de2692db32c7ea095415db8",
3937			[7] = "65daac5f051d65191914b053e23ef41",
3938			[8] = "45d3ee473af13696f707a046db0604ad",
3939			[9] = "3",
3940			[10] = "40b664afaf338d62876013bbf2850e05",
3941			[11] = "4939a174028adff8511dd38caf5f62fa",
3942			[12] = "12e377131c0607d431bd3f16f4484d51",
3943			[13] = "4ed277339c1cddb3c56b926ece26e9b3",
3944			[14] = "52db8f0f6f42d7552ccd23ca9d43c858",
3945			[15] = "5da61b91394552f37eea84e6e9b9e447",
3946			[16] = "4",
3947			[17] = "3263fc1c526565e2ffed7234ab9ede85",
3948			[18] = "6472a0495b8c5210a683265efc634c7",
3949			[19] = "20ffb9b29d785211f5fb2761e31d1051",
3950			[20] = "4b3c403cba0271805e6acd7fae216cc2",
3951			[21] = "4e785976b5b051b1b2e78ffcc9067f4e",
3952			[22] = "2e284efd9784af8211500f8c36f5a70e",
3953			[23] = "594077cd6306cf9a454adc544da4d3d6",
3954			[24] = "5f7f11eb899d472769ed7ec78702e909",
3955			[25] = "5",
3956			[26] = "2e2ba3ff7ddf95e9b6def6042acaea23",
3957			[27] = "462188c998a801031d875f61ea565e43",
3958			[28] = "cbb558be0a3aca32322960a7c47de82",
3959			[29] = "3fdb558ea0ae7f05f9623ff54ff6c31",
3960			[30] = "399eecae8ad427718879430013cbaead",
3961			[31] = "1cc235d349911eb835346be57f23afd4",
3962			[32] = "39459a3e0f7fac54e2373b7afb799b1f",
3963			[33] = "3ee92e429c7167e910ad8d9e907ce9e6",
3964			[34] = "9a58bf423affc176de6871c6946427f",
3965			[35] = "217de1bb8bb1ab729df5ceb28cc237",
3966			[36] = "6",
3967			[37] = "4a7d3127acb1d9d63fbb12d1998acbcd",
3968			[38] = "37a1b1cc5ce5955e6927b8a0be607672",
3969			[39] = "67dc5debbe41df6e4f625aa1282f90d",
3970			[40] = "4380ad6d26fafebdc1865490cc7b886f",
3971			[41] = "59027e0c78b977e07824ad3f13d8fb83",
3972			[42] = "37abc1ab524a3fa6426e7699e79ed055",
3973			[43] = "1f5889733073ba0dbc15699a91e9ce77",
3974			[44] = "327a33e4804c59922e0ad4ef52c6de85",
3975			[45] = "541316716e5e6f4242a647c92c538156",
3976			[46] = "1045c1a86d83c28384cc59075121c424",
3977			[47] = "4e57a3fbf4a57fb46047b4ab5a9d9e13",
3978			[48] = "25c6ee26380c0fa8637a7e2de8909aa2",
3979			[49] = "7",
3980			[50] = "4c1b184bd0a9fbb8016fd2accacc3974",
3981			[51] = "5f3dc1f5436670ae7db2a3697e96fc1",
3982			[52] = "274888654d285e1b456f572b1537d113",
3983			[54] = "2cc7df7b0bbaddf9b6c10026f1c18b51",
3984			[55] = "5f18346aeb83dd5f3d12ba08d2626129",
3985			[56] = "1f3658ada6dc6ad876ac347376fe13c9",
3986			[57] = "1322a9c3b403434ff5f0844599617ca7",
3987			[58] = "35387bde818eb63ada2200a8961719d1",
3988			[59] = "f15241a33b0cfb446f6b396297ffbf3",
3989			[60] = "9a13faa12d7739bd271723ade11dbeb",
3990			[62] = "45c11c41de0139f08cc806b248eeea7d",
3991			[63] = "13190051d0f582f4b4b3e10fba6bcdc3",
3992			[64] = "8",
3993			[65] = "2f44ee31ef11f1e041c5dc4734a05708",
3994			[66] = "4acbc94b0fd58ca158900d5ce645bec",
3995			[68] = "60257e93e0974dbcd06b979f5a47e76f",
3996			[69] = "4cdf1a7305f09d090eaeda3aeae4a635",
3997			[70] = "4ae10ea94a44e9be9451a847e77a3936",
3998			[72] = "c8e54092b718a4214d064cbdf8c698e",
3999			[74] = "3444a9a3dc80764eb53f9202edb24a12",
4000			[75] = "333e11b67ca1f92eebca204af60e10f2",
4001			[76] = "41ff73653af0a423ebf64ec3c63a20a2",
4002			[77] = "33f489c7462d8f1ae74f1c038423686",
4003			[78] = "1770c4abd4023f184ba032ba66c8ade3",
4004			[79] = "3c4c81760ef85c7b571b4f891649e64f",
4005			[80] = "2e74f653115d36821370e1095542caf5",
4006			[81] = "9",
4007			[82] = "55eb50263e7b6e913814c68ba433a0b3",
4008			[84] = "27fcc3df1a01761f6a775c0f1f78a5dd",
4009			[85] = "444699a6ec75af134e8304bf932e79db",
4010			[86] = "2a80de463669824da6b3253c088d97e5",
4011			[87] = "51bb41a01003857029b5fb4020e9c1d7",
4012			[88] = "5c509dfb2f095f0422a01f186deb4e1c",
4013			[89] = "1923d478504b67b59ec8ae1a154654ff",
4014			[90] = "2ca48bd77c7715b3a2640d4d9f67a6a",
4015			[91] = "ca61e8231f3b59f1a97cedd8768fbc6",
4016			[92] = "126c8731bf547a4e45b0c360163bfccd",
4017			[93] = "479c97732d6fac4a0c4ad8964b95adf7",
4018			[94] = "356870d65524375c5802aac1ff4c506a",
4019			[95] = "63840baecb9ce0a51a270159bc79796",
4020			[96] = "5ef52f572278b33fc6b7e79a37fd267",
4021			[97] = "3610283097aedf2a259556d93489ea97",
4022			[98] = "32fe703979c6e733d7cf09150bb36658",
4023			[99] = "16bf6d8f823e86662312fe9d5c988475",
4024		},
4025	},
4026	{
4027		.p = "edf5623aef85b0b731e8f3e4c9e8d089",
4028		.first_non_square = 53,
4029		.sqrt = {
4030			[0] = "0",
4031			[1] = "1",
4032			[2] = "16fcdbe33357a001d4fc47a63b82b779",
4033			[3] = "1ecf4968a0192536a7749d06021eb42d",
4034			[4] = "2",
4035			[5] = "20a67fac9adbaf3e3780a6234ab6822e",
4036			[6] = "2af9620e1f106e9a9051afc7aad33623",
4037			[7] = "6ca9e7acb8e5b669c9b88ca94e76fdb",
4038			[8] = "2df9b7c666af4003a9f88f4c77056ef2",
4039			[9] = "3",
4040			[10] = "4b00db7c853c5b4f00c6644aad3be157",
4041			[11] = "2d736e49f3108641e7452d9978126b30",
4042			[12] = "3d9e92d140324a6d4ee93a0c043d685a",
4043			[13] = "43cac0cde7a35ba38264df5cbcbb4cd5",
4044			[14] = "41a304d2883c6a82d4fb6b2c3079e110",
4045			[15] = "67b91838119086d8078fd5be1bc8080c",
4046			[16] = "4",
4047			[17] = "5bd9ce3ab9d83d23da97a992ad7057d5",
4048			[18] = "44f693a99a06e0057ef4d6f2b288266b",
4049			[19] = "6bf0939c5e1638d3f76312968f659bd3",
4050			[20] = "414cff5935b75e7c6f014c46956d045c",
4051			[21] = "597b55effbb87b39e16b6d017bf7b30e",
4052			[22] = "2c06cac16e38fca86d4478f9c87c625d",
4053			[23] = "3c68a5b1ddb3dde1e92ccd7ec30a0b59",
4054			[24] = "55f2c41c3e20dd3520a35f8f55a66c46",
4055			[25] = "5",
4056			[26] = "15af5f9e777e5614e2b9c15efe617ffa",
4057			[27] = "5c6ddc39e04b6fa3f65dd712065c1c87",
4058			[28] = "d953cf5971cb6cd3937119529cedfb6",
4059			[29] = "2715ddb62536c46c4eea2bc625137fcd",
4060			[30] = "212c5620fd99f5f09808644e22c79c32",
4061			[31] = "6b577ba061d38d163ed349282302a120",
4062			[32] = "5bf36f8ccd5e800753f11e98ee0adde4",
4063			[33] = "13aa3aa2e45a174e92d9731e834dd329",
4064			[34] = "5f856c5a327c79f10ea1e2a8d7703c3c",
4065			[35] = "2dc1e3e916a6334eb3477947df87b8ae",
4066			[36] = "6",
4067			[37] = "2ce03f825cbb1e23600f9aa78fd89284",
4068			[38] = "f0756eb9a9c43ad60272f73d2f20934",
4069			[39] = "312aa19e77e6fef0afd8ad15ba1059ba",
4070			[40] = "57f3ab41e50cfa19305c2b4f6f710ddb",
4071			[41] = "56fb9e4458d3ec5aa118b9631c581c61",
4072			[42] = "6a4cd4bfebe6ce666facf556c29ab9e",
4073			[43] = "36c0e5bef8ace24e6a9b6a35dc24b702",
4074			[44] = "5ae6dc93e6210c83ce8a5b32f024d660",
4075			[45] = "61f37f05d0930dbaa681f269e023868a",
4076			[46] = "35dab1813560b2e575205b9c85ba76ce",
4077			[47] = "5037067f108024661ae1aa2c5c3228cd",
4078			[48] = "72b83c986f211bdc94167fccc16dffd5",
4079			[49] = "7",
4080			[50] = "72f04b7000b6200928ed663f298d955d",
4081			[51] = "f5a4507c2325355cdb0dadb2b2bce2c",
4082			[52] = "665fe09f203ef9702d1f352b507236df",
4083			[54] = "6d093c10925464e780f3e48dc96f2e20",
4084			[55] = "3eca2d8e6904692c541d73928b4b8451",
4085			[56] = "6aaf5895df0cdbb187f21d8c68f50e69",
4086			[57] = "27423a9ff36f3d4ef62ac239f3ac9262",
4087			[58] = "4d1eab01cec65f80ea32b0606b44490",
4088			[60] = "1e8331cacc64a30722c948689258c071",
4089			[61] = "274990b8bb86788b18d8567d7cf13f7f",
4090			[62] = "2012553a6ccaec6d59c20d078ad45a53",
4091			[63] = "145fdb7062ab1233d5d29a5fbeb64f91",
4092			[64] = "8",
4093			[65] = "2323facf1d23fd1dca99c58dcf9f51d1",
4094			[66] = "abb680a9971a272a8ea46b2364fc14a",
4095			[68] = "3641c5c57bd5366f7cb9a0bf6f0820df",
4096			[69] = "6fe190bed95ca359eb6734e670f50c4a",
4097			[70] = "15c4010e04617c35f94feed5c2417719",
4098			[72] = "64083ae7bb77f0ac33ff45ff64d883b3",
4099			[73] = "6bee761e1205d462392ce8e9c95c7da8",
4100			[74] = "596eca3cd2371ce3ec9ffca3b68bc077",
4101			[75] = "53e8f32fcf07f6a5eca1e2c6bf4f4ba8",
4102			[76] = "16143b0233593f0f4322ceb7ab1d98e3",
4103			[77] = "71702a65ae7de31ccb0de3444caf69af",
4104			[78] = "114dfd1ba42d0cdda59bb8d4845e6f6d",
4105			[80] = "6b5b63888416f3be53e65b579f0ec7d1",
4106			[81] = "9",
4107			[82] = "2ca2b887752daa4e112076a9f94ee2a4",
4108			[84] = "3afeb65af814ba436f1219e1d1f96a6d",
4109			[85] = "584290bf297fad6e90ca21b3a654a2ea",
4110			[86] = "579d6f1c2105e88017132be6c7046179",
4111			[87] = "272af66060f7c2226c9cf2d1b97a9396",
4112			[88] = "580d9582dc71f950da88f1f390f8c4ba",
4113			[90] = "cf2cfc55fd09eca2f95c704c2352c84",
4114			[91] = "305a0b4b9244b27f0fac4d3f66cb1493",
4115			[92] = "752416d7341df4f35f8f58e743d4b9d7",
4116			[93] = "14764518d2fa770b40d7b124c1028271",
4117			[94] = "12413e5231c1fbf54bf1ae472e0be00e",
4118			[95] = "73033d976e08cf57e754d4502cee064f",
4119			[96] = "420fda027343f64cf0a234c61e9bf7fd",
4120			[98] = "4d0b5f04882050aa5f02fe592955cc3a",
4121			[99] = "659b175d16541df17c196b1861b18ef9",
4122		},
4123	},
4124	{
4125		.p = "f216567317bd6168b283b35efdeb6e01",
4126		.first_non_square = 61,
4127		.sqrt = {
4128			[0] = "0",
4129			[1] = "1",
4130			[2] = "480d3cc58db85c317fd3ca162a7ef31",
4131			[3] = "751e72f645812eae49b9e8f43808b53c",
4132			[4] = "2",
4133			[5] = "66a75882537b0fd3e89cfaf5a83e5caf",
4134			[6] = "47664935d814e997186d42dfa98dd547",
4135			[7] = "4da889482696f681bdbef67c7ac1796e",
4136			[8] = "901a798b1b70b862ffa7942c54fde62",
4137			[9] = "3",
4138			[10] = "57d17116e7de4d7c7380b35d174c50fe",
4139			[11] = "692649e1555a93b8fa42eafb084cf8a1",
4140			[12] = "7d970868cbb040c1f0fe1768dda0389",
4141			[13] = "3209b67f7292b1ffb4371dc03ba01083",
4142			[14] = "148d5a6790f3e04b3568bf944c02fe61",
4143			[15] = "5520d9f992eb5c8c8881685999651f93",
4144			[16] = "4",
4145			[17] = "57d481f0380db09125d31dc6dfd1d9c9",
4146			[18] = "d827b650a92914947f7b5e427f7cd93",
4147			[19] = "69962be7fbbdd6eb3f9293403a845b10",
4148			[20] = "24c7a56e70c741c0e149bd73ad6eb4a3",
4149			[21] = "4ce832377d3bc8b2e4d6a23d6f5dd99f",
4150			[22] = "331c2415f14f2d68991cf9c2e2fc696a",
4151			[23] = "52c3351f96e116c602e2ca5e4298e8a7",
4152			[24] = "6349c40767938e3a81a92d9faacfc373",
4153			[25] = "5",
4154			[26] = "14d036065850428ccb1ba5e425fa304f",
4155			[27] = "6d45026fb8c62aa22aaa077daa2eb1b3",
4156			[28] = "56c543e2ca8f74653705c66608687b25",
4157			[29] = "29f9490f6684ea66db901d68cce1cdb1",
4158			[30] = "576da7973e26fea493d4f7b7d53fb53",
4159			[31] = "192cd4b66179a4082118574bfc148b27",
4160			[32] = "12034f31636e170c5ff4f2858a9fbcc4",
4161			[33] = "23224092a600150201ba52b3424456d7",
4162			[34] = "5f9b7eb636b189b226aac177355abc25",
4163			[35] = "733b83f9abd4bc87d247385c96040338",
4164			[36] = "6",
4165			[37] = "3d5cdd23a2a5a3f9d4d323b3f874ca9b",
4166			[38] = "657de6d78704b86d6df714f94c9596b7",
4167			[39] = "25a875a44f870578858989b880e1d053",
4168			[40] = "427374454800c66fcb824ca4cf52cc05",
4169			[41] = "5bed9dc9cb362674bda905c0aac4335",
4170			[42] = "f12748e2759fd3766c92ead058963ce",
4171			[43] = "9ccd7e40b4b4dbe60c0e14bbe7f12cc",
4172			[44] = "1fc9c2b06d0839f6bdfddd68ed517cbf",
4173			[45] = "41dfb313e2b3ce1307533d81facfa80c",
4174			[46] = "4cc8c3b03683a8d1853c9e55ec8d52e8",
4175			[47] = "3f765db35fcf6e1a387d4ecc26efd1e5",
4176			[48] = "fb2e10d197608183e1fc2ed1bb40712",
4177			[49] = "7",
4178			[50] = "168422fdbc499ccf77f22f26ed47abf5",
4179			[51] = "2e3b00d48ee6701ed7f985e0698e7e1e",
4180			[52] = "64136cfee52563ff686e3b8077402106",
4181			[53] = "6f4feac060b10c8f42797ff7f442ea12",
4182			[54] = "1be37ad18f7ea4a3693beac00141ee2c",
4183			[55] = "769f25532938ca79dd2823b747b11e1e",
4184			[56] = "291ab4cf21e7c0966ad17f289805fcc2",
4185			[57] = "3a8c4047c4ddf27d1e5e917d9185a6b",
4186			[58] = "69a0f3549b38d0265f39e4d632238958",
4187			[59] = "16b4266e9fcb5601a88ba6a1eee156b1",
4188			[60] = "47d4a27ff1e6a84fa180e2abcb212edb",
4189			[62] = "158d6e26917f81791039a0a8358c9866",
4190			[63] = "91cba9aa3f87de37946cfe98da701b7",
4191			[64] = "8",
4192			[65] = "cbe13f6bfadaee035d56a39bf98bfad",
4193			[66] = "6604d1e998f3793831782f4d99b1bd84",
4194			[68] = "426d5292a7a2004666dd77d13e47ba6f",
4195			[69] = "1b280a5d865f3099592b6d469a6f3ac",
4196			[70] = "167dd1d604c01acd4591c8a2c13e301f",
4197			[71] = "271e22c50a6918cd603a20c2872a8b59",
4198			[72] = "1b04f6ca152522928fef6bc84fef9b26",
4199			[73] = "11a5924dfa463201c0cc2c515c1f0bf1",
4200			[74] = "60091028fb4a74808bad9094366d9379",
4201			[75] = "656b91e92c0b26960b9a26071c54ae2a",
4202			[76] = "1ee9fea32041b392335e8cde88e2b7e1",
4203			[77] = "2bdf95db0fa53563fe363c057dd8bd33",
4204			[78] = "3df809dc85028674ec0781daa86cdc8c",
4205			[79] = "2b5c1a1ba7726ca49bdb8ffb265cebc7",
4206			[80] = "498f4adce18e8381c2937ae75add6946",
4207			[81] = "9",
4208			[82] = "4fbde7f74ad09eca78d83d64e54c9a30",
4209			[83] = "26e0943fdb9849c21d9f0cccdee7b474",
4210			[84] = "5845f2041d45d002e8d66ee41f2fbac3",
4211			[85] = "1742e5ddddcdc922680c7ccb36f25999",
4212			[86] = "3db8bbcd65fc815230dc101898dd51f9",
4213			[87] = "77f93b086452981199e093f1112ac36",
4214			[88] = "6638482be29e5ad13239f385c5f8d2d4",
4215			[90] = "155dfcd19fdd870ca7fe66b847f984f9",
4216			[91] = "8bf6d293b0a33d416f2d8765850281a",
4217			[92] = "4c8fec33e9fb33dcacbe1ea278b99cb3",
4218			[93] = "16b76f5c478034b02d3a2455278766b0",
4219			[94] = "54aada5a9d62cf663caa710a4fa9265",
4220			[95] = "564288cd696118b6fb7a77938d8329f6",
4221			[96] = "2b82ce64489644f3af31581fa84be71b",
4222			[98] = "1f85ca966e00a855a7eca869b2978a57",
4223			[99] = "495c8730e85259c23c450d921afb7be2",
4224		},
4225	},
4226	{
4227		.p = "d5b3e02a00ec37238b8739f3ab1bed99",
4228		.first_non_square = 67,
4229		.sqrt = {
4230			[0] = "0",
4231			[1] = "1",
4232			[2] = "45029faf1a073c8cb536f5eda7fd1560",
4233			[3] = "f768c37c2f57a1a9c226ff461c562b",
4234			[4] = "2",
4235			[5] = "65b4689cf2d75db16dcd3105953ce3c6",
4236			[6] = "5684c6ba43a113848a8969d2fb6ca23a",
4237			[7] = "1ff8e09fcaf051326e5c632e0cd4f823",
4238			[8] = "4baea0cbccddbe0a21194e185b21c2d9",
4239			[9] = "3",
4240			[10] = "4285c184615d84354cf9a87345e9d1bb",
4241			[11] = "e970057e6c9a32e07738b0ab78d90ba",
4242			[12] = "1eed186f85eaf4353844dfe8c38ac56",
4243			[13] = "67cc0965e6dd98513e4d39d0b090df81",
4244			[14] = "1ab1e5e513662050b68d92f8f531b05d",
4245			[15] = "281851578e9af5ae568a5b6f1c9147fd",
4246			[16] = "4",
4247			[17] = "1889951f21b30e2095ab76c87fcf9ba5",
4248			[18] = "6ac011cb2d6817d6be2582ab324ad79",
4249			[19] = "5eb623f1739f6fdc336ee0e74b3511ca",
4250			[20] = "a4b0ef01b3d7bc0afecd7e880a2260d",
4251			[21] = "5df17f78bd0ed66c6837513486b31cc5",
4252			[22] = "606ae7b931bdba98f04c5fe37af4ff6b",
4253			[23] = "148d44e0e884ce444c99b6cd437c575e",
4254			[24] = "28aa52b579aa101a7674664db442a925",
4255			[25] = "5",
4256			[26] = "325e9911c86ae631a6bc1f5b699c7e31",
4257			[27] = "2e63a4a748e06e4fd4674fdd2550281",
4258			[28] = "3ff1c13f95e0a264dcb8c65c19a9f046",
4259			[29] = "38fcfd8cec4b90a0de1c4c38cedc15b9",
4260			[30] = "2f6ec8019c1949b8d7f7ce76ff9fa69b",
4261			[31] = "e6ca869dfb345ffd59ace43b3792685",
4262			[32] = "3e569e926730bb0f49549dc2f4d867e7",
4263			[33] = "579bee988ae90b7ccc3e68e0c54d9e2f",
4264			[34] = "569b25c035de96b42221456fa925c7f5",
4265			[35] = "1f830a9c274bf0424f04e1dc96fba083",
4266			[36] = "6",
4267			[37] = "56a04e969e561d11e819e3f0999b2ec3",
4268			[38] = "1399392aaee18717002eebf72a4f2714",
4269			[39] = "184fa0b19872dbc03cc003fb7ef0a647",
4270			[40] = "50a85d213e312eb8f193e90d1f484a23",
4271			[41] = "32edb4d05e11465009b98a6710278c1",
4272			[42] = "1a8d7edc19c5bfc9ffd61781bccc9691",
4273			[43] = "22c80c569d45bb4a9f05877846f790f3",
4274			[44] = "1d2e00afcd93465c0ee716156f1b2174",
4275			[45] = "5b6959acd799e1f0bde0591d149abdb9",
4276			[46] = "21456a4847a1103ea0c239e574779197",
4277			[47] = "47bfe557af21dc9c64152430cf6cf25c",
4278			[48] = "3dda30df0bd5e86a7089bfd187158ac",
4279			[49] = "7",
4280			[50] = "525aa1e87fb43f878cfba6430e467052",
4281			[51] = "68bd2ad79d20ea7312ed693d62c8d008",
4282			[52] = "61bcd5e333106810eecc65249fa2e97",
4283			[53] = "81bd0dba2601145e75e1d77f1d04844",
4284			[54] = "2dda7404c9f7036a141503854729f915",
4285			[55] = "68e4b71490938a9f48933bde86807125",
4286			[56] = "3563cbca26cc40a16d1b25f1ea6360ba",
4287			[57] = "4f2d5569b091a5a79ab7e16a6ba25362",
4288			[58] = "55c448979b854e6bb106146571f68426",
4289			[59] = "302a3d80209e0026e0fecb63e2ce75dd",
4290			[60] = "5030a2af1d35eb5cad14b6de39228ffa",
4291			[61] = "2b92f6a2d393e7a4259eb1cb017f2b00",
4292			[62] = "5a261ada71bcb91ccb1a04c49d16c6e9",
4293			[63] = "5feaa1df60d0f3974b15298a267ee869",
4294			[64] = "8",
4295			[65] = "6181cb54bab42602fb979953302dbe36",
4296			[66] = "610168cbd024ca65f82099abc21d6efd",
4297			[68] = "31132a3e43661c412b56ed90ff9f374a",
4298			[69] = "4835741318cf28d4227c2137b4c5613c",
4299			[70] = "209bda2b3602ef01ac5d0be10bfad042",
4300			[71] = "40ba51b46a55058308aec51c587fc6fe",
4301			[72] = "d58023965ad02fad7c4b05566495af2",
4302			[74] = "d230d76484819d75b87a4216ee67233",
4303			[75] = "4d50bd16cecb62850cac2fc5e8daed7",
4304			[76] = "1847984719ad576b24a9782514b1ca05",
4305			[77] = "3c0c6536905353924fb4f8abc19e281b",
4306			[78] = "3d0dff19927ac726586098881fb096ea",
4307			[80] = "14961de0367af7815fd9afd101444c1a",
4308			[81] = "9",
4309			[82] = "1bccdc1adcd9e6f574bab3fd655d69df",
4310			[83] = "18d4bce73268207ac84da046587f3c06",
4311			[84] = "19d0e13886ce8a4abb18978a9db5b40f",
4312			[85] = "4b9978cf3d8230ed3cadc49a74d5368",
4313			[86] = "128b08847198de2b1645ac717643a123",
4314			[87] = "63caad9c66c7cf88bcaf13f4ec88588a",
4315			[88] = "14de10b79d70c1f1aaee7a2cb531eec3",
4316			[90] = "e229b9cdcd3aa83a49a4099d95e7868",
4317			[91] = "636ffea27582b5e892f407d04f9dfc9",
4318			[92] = "291a89c1d1099c8899336d9a86f8aebc",
4319			[93] = "26be0f04da5bbe43fd72738163315128",
4320			[94] = "2978cccfee4c80269a3463e3bebb5dc8",
4321			[95] = "36c57b7d41260e361126830cb6b5c75f",
4322			[96] = "5154a56af3542034ece8cc9b6885524a",
4323			[98] = "37aa9d75b45a3991dd72459841b3ba6e",
4324			[99] = "2bc50107b45ce98a165aa12026a8b22e",
4325		},
4326	},
4327	{
4328		.p = "ebad0be3a536493da57f0fe644b4e021",
4329		.first_non_square = 61,
4330		.sqrt = {
4331			[0] = "0",
4332			[1] = "1",
4333			[2] = "123db297cea699fb0344c1a1a1f186f3",
4334			[3] = "bf6436b702b833d17678ccfe261262f",
4335			[4] = "2",
4336			[5] = "70f8ee4ff65e26fb5773b23de20012cf",
4337			[6] = "5dee45725830feb3edd2b0e1513d9316",
4338			[7] = "66a976a6da314fb8c0e2017aa49b4aaa",
4339			[8] = "247b652f9d4d33f60689834343e30de6",
4340			[9] = "3",
4341			[10] = "3b0561b1c9001e576bf37ae3e029d215",
4342			[11] = "2a4ac9391e3061d7182f14f088c62564",
4343			[12] = "17ec86d6e057067a2ecf199fc4c24c5e",
4344			[13] = "3648df5a9ba7ba504370d498d59fd9a1",
4345			[14] = "6481962d0448c2db2aa4e42a481786f3",
4346			[15] = "1af1cbdc9ef10ecc8382347a181e34cc",
4347			[16] = "4",
4348			[17] = "3f172b01dabd178cca0bc966f1fdf6f3",
4349			[18] = "36b917c76bf3cdf109ce44e4e5d494d9",
4350			[19] = "65ef4e2e99d2781eb82b88fe04e6f1f5",
4351			[20] = "9bb2f43b879fb46f697ab6a80b4ba83",
4352			[21] = "18e1abe04941114658e9e6f21f47dd08",
4353			[22] = "5f978475f36f4e4ce77c522191208b3",
4354			[23] = "357fa88c030974a0bc36f851f0795e64",
4355			[24] = "2fd080fef4d44bd5c9d9ae23a239b9f5",
4356			[25] = "5",
4357			[26] = "408935d3281810e0ce90b4f2985fcf5e",
4358			[27] = "23e2ca42508289b74636a66fa723728d",
4359			[28] = "1e5a1e95f0d3a9cc23bb0cf0fb7e4acd",
4360			[29] = "5f2c0d7368f0b6b1d2a16643a705a279",
4361			[30] = "17549d7da5e5b8bd89b2849403020df0",
4362			[31] = "7210f7c02ab70af02f0c665461b42f9c",
4363			[32] = "48f6ca5f3a9a67ec0d13068687c61bcc",
4364			[33] = "4951d8bebbe35c3f19483f7c871c8ee2",
4365			[34] = "5a7a0a5f2d5f90c936cee2e1f1448983",
4366			[35] = "2d5cc3d220d762d0bafed021e3b701f7",
4367			[36] = "6",
4368			[37] = "4eb91be8674d073b7cad4f89d9b90fd9",
4369			[38] = "223270fd99acd27c3e6ca67c60efee95",
4370			[39] = "2c8220ca14a994690d2737863449596e",
4371			[40] = "75a2488013360c8ecd981a1e84613bf7",
4372			[41] = "67b2177c12aabd92026438a46ab4cb61",
4373			[42] = "5d34f549c9252d13b2e417b1dda2793d",
4374			[43] = "4710ac452532ca6122daeacc47ada339",
4375			[44] = "549592723c60c3ae305e29e1118c4ac8",
4376			[45] = "673dbf0c3de42bb460dc06d3614b584c",
4377			[46] = "600d79740b8a279419d8716358bdcff8",
4378			[47] = "6bb1a8ff33f37594bad6958999635634",
4379			[48] = "2fd90dadc0ae0cf45d9e333f898498bc",
4380			[49] = "7",
4381			[50] = "5b347cf7094101e71057c82829b7a2bf",
4382			[51] = "fb13b5a54b5f9a85079f05cd8dbc210",
4383			[52] = "6c91beb5374f74a086e1a931ab3fb342",
4384			[53] = "5c04393e2792c7f52e5ea35e49daf887",
4385			[54] = "2e1dc473635cb2de23f902bdaf03d921",
4386			[55] = "59c9e5d019f3c45d7bd67877148f7b0b",
4387			[56] = "22a9df899ca4c38750354791b485d23b",
4388			[57] = "1cbf6261b5e6f70d8b62240aca1404c0",
4389			[58] = "6df943332998c675130fe1ea5965661",
4390			[59] = "3931526869d8069ffab62e14f7463ebc",
4391			[60] = "35e397b93de21d99070468f4303c6998",
4392			[62] = "71287677776721bbb63d7a47e3d3271f",
4393			[63] = "484f5810e95da5ec9d26f489a91cffdd",
4394			[64] = "8",
4395			[65] = "24f66f45952f7b1a8a788adf0b988dd8",
4396			[66] = "55358e335092c9ad35db80f42dbda41a",
4397			[67] = "541c13cfadd2c6e4a3e57237c33e2b6e",
4398			[68] = "6d7eb5dfefbc1a2411677d1860b8f23b",
4399			[69] = "5bd017f4178d6d06fb91e3dd0daee5de",
4400			[70] = "bce4858fe7d92a437b916d8525a45b0",
4401			[71] = "2f318248a0091aa2094717d79179c32f",
4402			[72] = "6d722f8ed7e79be2139c89c9cba929b2",
4403			[74] = "5979aa2335b2e6800722423a6dce7cc8",
4404			[75] = "3bcf511930d990317505c00f6be5beeb",
4405			[76] = "1fce6f86719159003527fdea3ae6fc37",
4406			[77] = "3548cedb5a44367e61e396e1b9fbccd7",
4407			[78] = "3820cfa14dd428ff95f92b750c0af8fa",
4408			[79] = "1b610761a0faff110434c44da3056ad",
4409			[80] = "13765e8770f3f68ded2f56d501697506",
4410			[81] = "9",
4411			[82] = "4f0934854d6129caf0f3268c2b6b9ba1",
4412			[84] = "31c357c09282228cb1d3cde43e8fba10",
4413			[85] = "6528c8fcf5a00c45c1a742a924dc6105",
4414			[86] = "40948b6c8dacf9307d00643172b10021",
4415			[87] = "58f0cbf88142db86d306e56d7ca053ab",
4416			[88] = "bf2f08ebe6de9c99cef8a4432241166",
4417			[90] = "3a9ce6ce4a35ee3761a49f3aa43769e2",
4418			[91] = "61e94c9be16d9115fcf3d10de819b796",
4419			[92] = "6aff51180612e941786df0a3e0f2bcc8",
4420			[93] = "70e2effd74ee8238a346798baf98f88",
4421			[94] = "27630a3037b0748d160c9f0d0b6446ae",
4422			[95] = "3ab1e5b6243a976461a7c25ebc9b6933",
4423			[96] = "5fa101fde9a897ab93b35c47447373ea",
4424			[98] = "6bfd29bcfea813608e9dc47ad71a2f7c",
4425			[99] = "6cccb0384aa523b85cf1d114aa626ff5",
4426		},
4427	},
4428};
4429
4430#define N_P_IS_1_MOD_8_TESTS \
4431    (sizeof(p_is_1_mod_8_tests) / sizeof(p_is_1_mod_8_tests[0]))
4432
4433static int
4434bn_mod_sqrt_p_is_1_mod_8_test(const struct p_is_1_mod_8_tests *test,
4435    BN_CTX *ctx)
4436{
4437	BIGNUM *a, *p, *want, *got, *diff;
4438	const char *const *sqrts = test->sqrt;
4439	int i;
4440	int failed = 0;
4441
4442	BN_CTX_start(ctx);
4443
4444	if ((a = BN_CTX_get(ctx)) == NULL)
4445		errx(1, "a = BN_CTX_get()");
4446	if ((p = BN_CTX_get(ctx)) == NULL)
4447		errx(1, "p = BN_CTX_get()");
4448	if ((want = BN_CTX_get(ctx)) == NULL)
4449		errx(1, "want = BN_CTX_get()");
4450	if ((got = BN_CTX_get(ctx)) == NULL)
4451		errx(1, "got = BN_CTX_get()");
4452	if ((diff = BN_CTX_get(ctx)) == NULL)
4453		errx(1, "diff = BN_CTX_get()");
4454
4455	if (!BN_hex2bn(&p, test->p))
4456		errx(1, "BN_hex2bn");
4457
4458	for (i = 0; i < N_SMALL_SQUARE_TESTS; i++) {
4459		if (!BN_set_word(a, i))
4460			errx(1, "BN_set_word");
4461
4462		if (BN_mod_sqrt(got, a, p, ctx) == NULL) {
4463			if (i < test->first_non_square || sqrts[i] != NULL) {
4464				fprintf(stderr, "no sqrt(%d) (mod %s)?\n",
4465				    i, test->p);
4466				failed |= 1;
4467			}
4468			continue;
4469		}
4470
4471		if (sqrts[i] == NULL) {
4472			fprintf(stderr, "sqrt(%d) (mod %s): ", i, test->p);
4473			BN_print_fp(stderr, got);
4474			fprintf(stderr, "?\n");
4475			failed |= 1;
4476			continue;
4477		}
4478
4479		if (!BN_hex2bn(&want, sqrts[i]))
4480			errx(1, "BN_hex2bn");
4481
4482		if (!BN_mod_sub(diff, want, got, p, ctx))
4483			errx(1, "BN_mod_sub() failed\n");
4484
4485		if (!BN_is_zero(diff)) {
4486			fprintf(stderr, "a: %d\n", i);
4487			fprintf(stderr, "p: %s\n", test->p);
4488			fprintf(stderr, "want: %s\n", sqrts[i]);
4489			fprintf(stderr, "got:  ");
4490			BN_print_fp(stderr, got);
4491			fprintf(stderr, "\n\n");
4492
4493			failed |= 1;
4494			continue;
4495		}
4496	}
4497
4498	BN_CTX_end(ctx);
4499
4500	return failed;
4501}
4502
4503static int
4504bn_mod_sqrt_p_is_1_mod_8(void)
4505{
4506	BN_CTX *ctx;
4507	size_t i;
4508	int failed = 0;
4509
4510	if ((ctx = BN_CTX_new()) == NULL)
4511		errx(1, "BN_CTX_new");
4512
4513	for (i = 0; i < N_P_IS_1_MOD_8_TESTS; i++) {
4514		const struct p_is_1_mod_8_tests *test = &p_is_1_mod_8_tests[i];
4515
4516		failed |= bn_mod_sqrt_p_is_1_mod_8_test(test, ctx);
4517	}
4518
4519	BN_CTX_free(ctx);
4520
4521	return failed;
4522}
4523
4524int
4525main(void)
4526{
4527	int failed = 0;
4528
4529	failed |= bn_mod_sqrt_test();
4530	failed |= bn_mod_sqrt_p_is_1_mod_8();
4531
4532	return failed;
4533}
4534