Verifieable FHE(VFHE):使用Plonky2来证明Zama TFHE的“Bootstrapping的正确执行”

1. 引言

Zama团队2024年论文Towards Verifiable FHE in Practice: Proving Correct Execution of TFHE’s Bootstrapping using plonky2 中:

  • 首次阐述了,在实践中,将整个FHE bootstrapping操作,使用SNARK来证明。
  • 在其相应的https://github.com/zama-ai/verifiable-fhe-paper(Rust,Plonky2)开源代码实现中,为该bootstrapping操作设计了算术电路,并使用Plonky2进行了证明:
    • 在保证功能完整和安全的情况下,对TFHE的programmable bootstrapping中的操作进行了少量调整,使其能在算术电路中更高效地表示。
    • 在AWS C6i.metal实例上,证明该电路用时20分钟。
    • proof size约为200kB。
    • 验证该proof用时少于10ms。
    • 为实现memory-efficient,利用了(bootstrapping操作)该计算的结构化优势,以及,Plonky2的递归IVC能力,实现了递归证明。

Fully Homomorphic Encryption (FHE) 全同态加密技术:

  • 支持对密文输入做任意计算,生成密文输出。
  • 对密文输出解密的结果,等于,直接对明文输入做相应计算的结果。

Succinct Non-interactive ARguments of Knowledge (SNARKs) 密码学技术:

  • 支持Prover,让Verifier信服,某任意计算执行正确。【数据必须是明文的】

FHE和SNARKs各有所短:

  • FHE自身无法保证该计算的正确性,因此也无法提供任何计算完整性保证,使得在真实世界的FHE部署时,存在可疑的隐私攻击问题。
  • SNARKs可保证计算完整性,但需要知悉数据的明文信息,来证明基于这些数据的计算是正确的,对于某些特定隐私保护应用场景,是命令禁止提供数据明文信息的。

FHE和SNARKs相结合:

  • 可获得verifiable FHE(VFHE):支持Prover,让Verifier信服,基于密文数据的任意计算执行正确。

VFHE的迷人之处在于,可将该技术用于如下场景:

  • 改进区块链协议,以支持私有交易。
  • 解决计算外包中的安全问题,可用于替换安全硬件模块,将对硬件厂商的信任,转移至,对密码学假设的信任。

尽管这在理论上听起来不错,但实践中的核心问题在于:

  • 相比于明文运算,FHE会引入大量的开销。
  • 相比于待证明的计算本身,SNARKs Prover计算量要贵得多。

因此,核心在于:

  • 如何让VFHE具备实用性

经典FHE方案包括:

  • 1)密文操作:对明文的同态运算。通常可高效计算,且可使用SNARK证明。
  • 2)bootstrapping操作:最昂贵的操作。

若不熟悉FHE,可能对bootstrapping操作不了解,详情可参看:

可简单将bootstrapping操作看成是:

  • 一种密文管理操作。
  • 支持某program基于密文数据做无限计算。

bootstrapping操作通常为FHE方案中最昂贵的操作,因此,实现真正实用VFHE系统的最大障碍在于:

  • bootstrapping操作。

因此,VFHE系统实用性的关键,在于:

  • 对于FHE真实参数(而不是toy参数),使用SNARK,高效证明bootstrapping,的能力。

基于此动机,Zama团队2024年研究并发布了论文Towards Verifiable FHE in Practice: Proving Correct Execution of TFHE’s Bootstrapping using plonky2

Zama团队专注于TFHE:

  • TFHE提供了非常轻量级的programmable bootstrapping (PBS)。

尽管TFHE的bootstrapping,比其它FHE方案中的bootstrapping,计算开销更低,但其也足够复杂,使得若直观对其做SNARK-ifying操作,将导致Prover需要巨大的内存,对大多数应用来说是不切实际的。

  • Zama团队曾实践过,使用FHE toy参数(不是真实参数),在具有128GB RAM的AWS实例上运行,直接内存溢出。

这就意味着,直接对TFHE的bootstrapping做SNARK-ifying操作,不是高效的方案。为此,Zama团队专注于利用bootstrapping操作中的结构化特性:

  • TFHE的PBS中,包含一个具有多次(约600到700次)迭代的循环
  • SNARKs技术可使用Incrementally Verifiable Computation(IVC) 来高效证明该循环,而不是将该循环展开为一个大的电路。所谓IVC,是指一次证明一个迭代,而不是一次证明所有迭代。

Zama团队开源代码https://github.com/zama-ai/verifiable-fhe-paper(Rust,Plonky2)中,使用Plonky2实现了基于递归的IVC方案,并将该IVC方案用于了TFHE PBS。其中Plonky2支持非常高效的递归,适用于本场景。

  • 1)每次迭代中,会生成单个proof,该单个proof对应为:
    • 1.1)该次迭代的实际计算
    • 1.2)之前迭代的proof的verification
  • 2)在循环的最后一次迭代,所生成的final proof,可让Verifier信服,之前的中间态proof均是正确生成和验证通过的。

因此,可将传统PBS计算的循环操作,转换为统一算术电路格式——可使用IVC来证明该统一格式的算术电路。

Zama团队对其TFHE进行了少量调整,使其更适合于基于有限域的算术电路模型。如:

  • 将密文的modulus,修改为Plonky2原生使用的素数
  • 修改了key switch,使得可通过external product来执行

需要调整参数,但确保这些参数仍是正确的且是安全的(目标是128-bit安全性)。PBS的循环迭代电路,如下图所示:【其中忽略了检查之前迭代proof的verifier电路】
在这里插入图片描述
该电路会从前一迭代中接收loop counter n n n,以及前一迭代的结果,作为输入。该loop counter n n n值,决定了对前一迭代结果应用什么函数。该函数:

  • 要么为:简单的negacyclic polynomial rotation (“Rotate Poly”)
  • 要么为:在该input及其negacyclic rotation 之间有一个密文multiplexer(“Rotate Poly” + “External Product”)
  • 要么为:某key switching操作(通过“External Product”)。

该PBS中包含了以上3种操作。其中:

  • 对negacyclic polynomial rotation (“Rotate Poly”) 的子电路,以及,对external product的子电路,支配了整个电路size,从而支配了Prover开销。

详细的实现,可参看论文Towards Verifiable FHE in Practice: Proving Correct Execution of TFHE’s Bootstrapping using plonky2

借助基于IVC的实现,所需内存量降了一个量级,使得消费级笔记本也可运行该Prover。在经典AWS示例中,计算proof需约20分钟,仍相对较长,但已接近实用水平了。

SystemProver Time (min)Verifier Time (ms)
M2 MacBook Pro - 8 cores, 24GB485
Hpc7a.96xlarge - 192 cores, 768GB188

同时,Zama团队将其Plonky2 IVC实现,与通用zkVMs(RISC0和SP1)对比发现,Zama团队的IVC方案性能要高2个数量级。

因此,Zama团队认为:

  • VFHE处于实用化的边缘。
  • 证明FHE方案中最困难部分(bootstrapping),可使用具有非常合理计算资源的SNARK来证明。
  • 这是一个重要的里程碑,也是一个开始。
  • 仍有许多途径待探索,如:
    • 如何将Prover,由PBS电路,扩展到,完整的FHE电路?
    • 是否有改进基于通用zkVM的实现的技术?是否有更适合FHE的zkVM?
    • 使用基于folding的IVC(如见2024年论文Mangrove: A Scalable Framework for Folding-based SNARKs),而不是基于递归的IVC,能否获得更好的效果?
  • 坚信VFHE方案将对隐私技术产生巨大影响,并将解锁众多惠及所有人的应用程序。

对于https://github.com/zama-ai/verifiable-fhe-paper(Rust,Plonky2)开源代码,取N=8cargo test --release vtfhe::ivc_based_vpbs::tests::test_ivc_blind_rot -- --nocapture,有:【详情讨论见:test_ivc_blind_rot failed? #1

running 1 test
s_lwe: [0]
testv: Poly { coeffs: [0, 1, 2, 3, 4, 5, 6, 7] }
message: 1152921504338411520 * 5 = 5764607521692057600
[15867200709616863128, 5764607521692057600]
loop 0
output ct: Glwe { polys: [Poly { coeffs: [16621805488470470919, 11001388870199871977, 17008987430416786551, 16147348535979598551, 13265828607249851081, 13748633947610489670, 2508574215093643914, 13118715609136570061] }, Poly { coeffs: [5, 6, 7, 0, 18446744069414584320, 18446744069414584319, 18446744069414584318, 18446744069414584317] }] }
output poly: Poly { coeffs: [5, 6, 7, 0, 18446744069414584320, 18446744069414584319, 18446744069414584318, 18446744069414584317] }
in: 5 out: 5
test vtfhe::ivc_based_vpbs::tests::test_ivc_blind_rot ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 21 filtered out; finished in 3.40s

N=1024时:

running 1 test
s_lwe: [1]
testv: Poly { coeffs: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023] }
message: 9007199252643840 * 354 = 3188548535435919360
[9578725295714614607, 12767273831150533967]
loop 0
output ct: Glwe { polys: [Poly { coeffs: [13732662884147905133, 10505343977948328787, 16720040225573592761, 6133686766428726666, 16366684678741172804, 14564193882415981131, 2867758873975767144, 8959026677022613747, 7225343734936999, 816237187835066099, 5876063628113561066, 12130969668225609166, 15505549379036363360, 18185368879884062957, 13847775765388893549, 13087025659516485355, 15751825734646521297, 16285417029084219058, 2920311513997206280, 2975818727731149611, 16839691254868608833, 11315321154163574368, 9132928822579467443, 4145738328842370238, 6459266655651784675, 3637543199749089380, 4945147888841955678, 1328033834976122343, 10176184963166698070, 6986665851680569855, 8827809720612319550, 3063982434242908761, 16935227003995879060, 8532424300837407164, 8664998471217228126, 16030869274473939914, 2675086986523532834, 3972173507451675494, 3359561573579596776, 4820042605595419508, 13191568352052621845, 5568597318092488240, 5268338188140138266, 3067330342835991899, 6738741614043540318, 4446924262265214732, 2644420474557695272, 12047398893478654185, 497189627171079900, 17725726850163616077, 8415396105272633885, 11614979938191520017, 14874110099963711511, 11743039721394730434, 16456108188356119011, 8260688282019296854, 6158988977010805789, 9711565771939467010, 6945379041676798480, 2952312831637155127, 17355899921375787881, 5363279941693195133, 2364218386698482278, 8288416245969413113, 6438980452619379064, 11098200378493965398, 7637681631953055783, 16456016507859588503, 847102627515566108, 4877276938431664532, 7549611555511356833, 9947149613028826312, 12117892842490115138, 16505466249268485060, 1591414732522220103, 13823809179943944182, 1366761880488632052, 17623792261882172267, 10240443454207829100, 5127448689317787634, 4164078346878131101, 13595954582733688187, 10081647576645928611, 10196384443402126639, 12574077758900865898, 15619085374029401957, 3647114881697505030, 995381602390511169, 4053403796133991588, 10436604248032948940, 100783367905540289, 4518572422636965139, 6542841644999468065, 9246645847848413746, 766676307844956237, 3452069975569028094, 17941834346091801349, 8290314305523356536, 16601790585448668289, 14398379234693396671, 7355878351904065303, 2964708581196625742, 9166837360024999208, 80012046312826305, 11010099494519870045, 6387942086487388401, 2995637364482116444, 13307914446075498951, 16899947869789452337, 13559145669966550643, 15131141537048562108, 15273881770339268327, 8272931076203037276, 10046348429899744109, 13521970896934961347, 1891693127206515040, 1432475945915586474, 6052217917297526783, 6122320894104937753, 6356950358169597706, 3913297621751424413, 18303509504212026576, 12084291691401937052, 11973851654817966676, 9263597358649798078, 12722342176485497773, 15135738727501799956, 9097654558730861981, 15249468601887544638, 4523771688405618267, 6376094405783552593, 5856639531476388984, 12448197566607513608, 14755204615071330113, 18222476026554965137, 6445249335090133316, 11959565896987762342, 10670647713520381719, 1742601379954991272, 11000608211898322760, 639988978369679832, 10772825887864317516, 6342837832441153055, 16058337701628323233, 12625761042060675062, 9092699652961756166, 15183326368189117512, 7831656226082434678, 7669341652579396747, 12143526300932233083, 6475041142408475911, 8873259809138270329, 5050385037379633353, 18425761729746601437, 3366362683291446273, 9524615021726347068, 2396092369919562457, 5504593440836154385, 2611800262541837009, 14606866785071883398, 12998817230409296281, 15096256700059727730, 15070271889418736584, 2404799599284940966, 17891362685609715088, 6398686234525617177, 1149711152290760108, 10561425058704511409, 18146884434668722529, 7160456133563952294, 11738970297640696456, 12990669417658153083, 7216438509447723349, 933199487311225436, 12745097349922869285, 8241371820857480687, 5584509913647495098, 16589155273668595958, 3941963449985575037, 7654489681899684234, 10525588087964216786, 14610047826394161701, 17219540028198453458, 1466537305338307219, 18253043724124364718, 11153190949665664312, 11309433104721893778, 5829514807226639240, 5975648329723593264, 3046159530719010637, 2877783552821551560, 173966191406408483, 541093288335855150, 9770227023390938256, 1981248091607520236, 4875123048331189063, 4619514251300191629, 5594396973213807177, 13987501087503573334, 6826812391778090009, 7169250974341911338, 15105488344365435889, 11371162467310744231, 12376394379801621477, 17972935607802900667, 1383868079918498543, 12014141095277038234, 1577844054143623844, 17260024733352622507, 16187045921680818921, 3027556966483067492, 3528315429167964114, 40482787665658984, 4904862185490083573, 9633556976664573433, 16507738377154320286, 14257031152767222354, 15343198727133354626, 2057268031357250233, 2367413181597323083, 13463912065448136070, 11855424673905114229, 7628794510477827830, 16857287565543696724, 14489703232208642082, 1270146398954552140, 282149161431311206, 10073421057541695113, 13257135573496724638, 10813395003775671124, 12613807135975487539, 1704981252485489551, 1255149338367602436, 12180129656790864007, 15140150956675184908, 9855813197621678603, 10857487435615505034, 17607580494619592433, 13079786338730601786, 5432818819416724952, 7884544311809427387, 9092003915705897595, 9825898739684562386, 17211170162129963785, 11796984674122154808, 4453306352206608246, 11971955831979348714, 15778127154883672054, 6780173280956228665, 6987390403690070781, 11245747223864232630, 1245975705425559025, 17993942112342687665, 16269542321662845975, 4098223107313399478, 13669345757063606709, 2304339250346493959, 3304406251460061726, 4970640198393060435, 18403594797092704784, 7828842375611880562, 8702740630591578119, 3877031092001238174, 3015131328568444587, 6376272950384033814, 5747574949197205539, 17263312455213105921, 4638705979644131231, 1420526510517602336, 5132249992219328912, 7602950871456518550, 5475232270773121442, 4875065799083769749, 7776969540655279141, 11672349973128054315, 3203631291297342696, 10022849869612977127, 12303964862020370874, 2223465669178758021, 10979614805454807643, 17089711771920518727, 2496389061175023564, 2776705282946787290, 16932362772835317480, 14474402679248103768, 18442240482108873812, 4999779124858245211, 18402473907142325019, 4643599070628289187, 12094081255240087617, 16030336818775127325, 13354672145773960104, 15725144670805859693, 11326166740056411785, 8308096988230707198, 13998917281796719075, 13563930439007456782, 15608852294561881519, 17003697991314284929, 5822624930255768446, 14775644440141121726, 15725235380591697079, 10656952159976766310, 5333145119722967875, 18289211113405932831, 10680317962902857999, 11765544512809668677, 14125492764606935930, 9316226135713632959, 12168959676587062796, 8516395624522392903, 12788338008171442528, 7263429841817724656, 4028680609531154639, 2956142055557843046, 9039887463615095944, 11947193944034334167, 4603854461443839406, 11739635859048483950, 9369785166316881359, 11836954607269706233, 7303735508968768565, 17357637330373030870, 11697879236570691795, 7772376695822467398, 13847864061641033492, 15209574815988612127, 14889109606659822613, 3255390681415133417, 5565204444806408528, 13515436758386393678, 8451131185043976900, 8332556264361707367, 10435395936191213451, 15945383463373209667, 13974123114705312721, 5203052992685124331, 14301166822331858335, 7613554464734989330, 17231310049211619525, 934211766884188528, 4260699207862089446, 1702305948002043267, 2457913096804134985, 17887676520287540489, 10951091534481385429, 12311091678773082261, 7509997673854346929, 6369609340516675184, 5424314699857339476, 13009517425296203148, 6325312949699291726, 3907442449816830292, 3457671190696737491, 17451373197655423364, 14240786238467506903, 6411807465924926202, 15119714228844744107, 14376370662701675097, 207854663814800022, 12725721402431897448, 14828375389164235780, 10838315525801309541, 3681827415486059712, 9067237134812064799, 2893726471469359953, 10191456740704869887, 8379335860913285495, 12581589811560772925, 12643586427616378411, 8313453116911747903, 4107692687099944979, 5421194012845257612, 4562944634691807977, 16936134429512065313, 11648627384005667829, 6855799095997459579, 11069612777258683942, 3723786126322880697, 255803778956090933, 8144505346267814082, 8426804299758216121, 12917771831403059151, 16180263136064114397, 14128561365643829432, 12560828657542998406, 2106593459835653568, 6268037284688225266, 867589950100477378, 15758345826856807690, 7734851125737823985, 11061763241686952498, 7773947019152252284, 17161772611524567144, 13294879072309650870, 8873439012565505310, 3886353258285981598, 4569945643556445002, 12006134957190231432, 743427947312520867, 17323128668482676586, 10994208087382228915, 7215554392189763901, 5696407701527645974, 9116422515798246105, 3059494384162928811, 13968623822517474010, 12416049137916993450, 16739509316631286192, 9164258419559817830, 10904227292678510586, 17500915205283688174, 17914923197039092255, 8851220128113392534, 151997335679413904, 12708215344535756064, 8225705178163323225, 17566895165872958470, 16427008597157511715, 7077367701798812715, 6210139724560505033, 5806744778050148715, 690862808038208455, 3557162889630942752, 8109824321545440078, 6234626338896876669, 1491469489325458969, 10762351518893389468, 6422644226448476831, 600144482198571365, 9995973250047526082, 11592058349539611465, 13653077302958862824, 7885189804391651490, 7690649192384860334, 9884273247555739965, 13534929647117559978, 18259281110895551726, 3921946903834025612, 2567002422869806034, 14726247836424918482, 1706460618383448240, 4680036013275141599, 7904552325022201911, 7100227289355539379, 10611862188255768768, 9689432144518636534, 14167791076149110527, 9932829949061057366, 743884177697773612, 12728875086286758181, 11288359813225121848, 16454049603253805066, 11173078026353038446, 10602750362019286294, 258234257320655318, 564820040999219610, 6582198293497135010, 9377217512602947828, 10165067646245789658, 16143228268247186716, 16024118093890676222, 17347396462239431004, 11589278121866663912, 1170869778375330781, 3813472861500501969, 14092980723443364796, 9423178569631048138, 9687039024860139687, 14417861998262155056, 7347491223318076940, 480090185976938432, 16515975092618671612, 7042116302403327920, 12781866188049729414, 11103054190642696027, 17134891609485637112, 13802199520766960516, 13348063678045627140, 7939151889972826508, 962043414494382277, 17382552801172334575, 1849726616226987319, 1894936860288170263, 10226613277563716084, 4113182678013389805, 2877446494449368641, 7302522821526613993, 5784085686384223510, 7308840975908562443, 18019668662450126988, 16763227109522060226, 6398261018496296708, 15148848059407946097, 3714128966717738686, 9754495778863049568, 13855297545947161063, 17062307135983312469, 10914652124228485706, 7651290254742987649, 14844347479883621426, 10849584705089751732, 9043107851754261886, 4325776957962299629, 9068363185828012743, 9129682021343106756, 6066541138297694717, 11474219890094687731, 10655186299518994154, 502303976229400705, 14686167523150469245, 12944656991389946300, 426064413601723259, 11945256260456636993, 14972045558131538421, 3296038514043691305, 5212028029505736349, 984767553123315812, 12395191804972035022, 2102939658362101968, 5047459358845376538, 16563694134289347842, 17317968322608714054, 10689028630931499352, 17778489577294953630, 17565708574264380792, 3074014450828958181, 8793794530970021815, 3325339519665842236, 2797620152476316608, 2420763249011702139, 16375566060882815612, 372337426890017563, 18337090001348132028, 14160145039178761048, 1352744030099436119, 12277803625567951483, 10561303483952048838, 4580945206584788078, 4380586056238447659, 16795024798151640323, 4989466692361235332, 12843798869659725642, 460401312804126485, 17150532775171924739, 241361993257223241, 6636326448845051027, 16068601900283957116, 1714186352639672615, 5104884316661217362, 2324890904723983170, 11670037854546570307, 15250260622765980381, 5033757874055452876, 13258736761170055737, 13211503303387289287, 2831691183463563612, 14633241293437693762, 1436602774003865868, 11205991743272887775, 4593956398025279638, 2618400382107849190, 14851729409814167200, 11058698344104240198, 13795127326394356571, 5671522205574139330, 7286962050577942641, 11617604837241780343, 11018928156063073127, 3421382040776947356, 16354715862279155275, 15543633105049674798, 12222690684721084284, 7575179826362095564, 13101064564131502969, 15209338718592798436, 13942850022629356449, 704829629504866395, 6399134611701045753, 17441001804352014310, 3944992195302038994, 1998674678802034238, 15271877275259863243, 14947481001639702439, 5913857519038419619, 188386984197528836, 7101144262860300836, 7411786703910752325, 6846222416805727513, 11900184117503164392, 600433181605999461, 9862999162021077075, 16866356658983387278, 1488692932573620217, 14142222592434761901, 4382826181777042553, 6696369574767094844, 4564379724595542796, 17014819872572201575, 491866558588412705, 5367163830851263913, 3235541722578579106, 15032716787243287015, 11672479168321185855, 6707567876718576141, 1152614598143719959, 7949098291457428251, 14486187340243000687, 78859115000053447, 10914366486862984744, 17178667478245846873, 16168658607351869513, 4556051275614157305, 7407744414048067900, 17195091642814262532, 7026671153500858288, 8279546151841725815, 14463204039638570992, 4537681244113377520, 7119068276166194887, 11522379042894751519, 3801701525035755874, 2765800700524998827, 8112234877475154485, 6909891685707208109, 18322697840961948226, 11242922378673845797, 6230438108763338134, 12088301233074014393, 13759602668069091850, 5489366138468216395, 6478592297389159536, 5953048273138447256, 4995181112578846459, 10421123420652834214, 5023565388608076522, 5896528103819099450, 2604429121065134494, 13483829408621936649, 5286172119649975736, 3114407069411246742, 3140259802574138883, 10686446264212684555, 12383196627404269057, 8256283763259485054, 7345350917541756545, 17287289862683973963, 17903307666426071141, 7266515404940657225, 12139470015404662878, 10493400237152363189, 2586434038901671916, 9791754945144318823, 8626697966209031426, 1129350340494076651, 11556301682130271729, 12558248330756550532, 12488216872677558060, 16575622021677835935, 14368605188486308545, 9077675136771311189, 1332068159886045753, 7008542991037101135, 3286352028160785519, 7782325269442281853, 9807677310448678013, 13613201401497635107, 14464497097869833299, 14908887633636988036, 18001034140024182417, 18249747238763515349, 4113767301523288843, 13520772685566393234, 6929628323788036273, 8951689134242312446, 1400116497154147927, 3029534487558368616, 16861165437220975404, 1593022704987519896, 12218414342849139007, 6994081641245234011, 15033470087586953035, 12909360311165161586, 15958816506381242005, 16220005811263830231, 8093185790118521324, 6600066120980949332, 3909637465404843500, 9915331864645388917, 5800091908267775884, 12019431619375333828, 12388164777680869237, 7288793069117590058, 4624126385226661642, 11779615448781196406, 1467291323330727257, 14661106556968726297, 17777334705103964781, 9589484549820563924, 70504083527715144, 14718836422898303878, 3429419473192188930, 15290491843257010373, 14279127495233566946, 12543443411457532038, 12949351718428138981, 301152696541430468, 2632638277386769407, 15244941215066322900, 4628857525204012815, 17539718940913718240, 15255648327154368234, 12490293888873674283, 11682072512340788562, 1684640552109449199, 9027576823665808236, 2933337365010014488, 17253002784812900641, 17125299618787141013, 13845379623379664408, 16050117199937238343, 1744926972954764897, 617523236372625360, 5597003746221191801, 9432363528775928409, 8471176146404792988, 4424685851885115440, 18148752698887327224, 6516177728155630019, 9098342451182364350, 1236604644767356345, 4609907238700586701, 13390164265956046163, 12383664470755563648, 18013773555589649064, 13967524134329033746, 701454235242835395, 946719732841093011, 13503220819217762937, 3655845340724211507, 11112096289411364048, 6585955616365836906, 2871620592744410963, 13019586185367107165, 7710483643974291156, 13163575739672032465, 17401211949142397774, 9943260244898313675, 11297099036054802198, 12613787295806721802, 3822440450581382269, 18432009534054605309, 3797314056347885798, 8579814754954151015, 16215543392962746324, 11621918212882855390, 6513437896950690673, 9325187915565440011, 13274440910514413101, 10138114643247612137, 1584470671227121223, 11019216236009919077, 5263697767353561075, 577677275277700901, 17560551444087864337, 8563062124313376839, 1095348218835794458, 11077848596739236897, 18024847741034882219, 7097796611631904425, 9435001344379817675, 8825966881907126112, 9959731368835809254, 748703370471698659, 11772514134176237920, 8082355839866392702, 6727054359752057184, 9841651481882099340, 696246739016867394, 12487190350161554998, 15625968718952237794, 16607220500825168967, 14114337172896112343, 1277069014473028029, 14401328893139798853, 15193515981232282004, 2782534227069340388, 1113401858223830484, 463050700001344474, 12853016733019278412, 8421993582946830526, 11860917358878890616, 922244003827041883, 15740749743601800215, 17104307272152742282, 2665123955385613630, 3931696299011101412, 12627818855583747420, 14581093852153161648, 2377724509819077846, 7037425101384191671, 8139548800820607086, 8832770298122663355, 651769412057537148, 14066588383041809127, 12945377109767541556, 16492497165994253880, 16661020760467243126, 9814446630608029155, 10543344213955544896, 11812346795693685420, 9107332185754842129, 1450635299700163209, 15529787534089786996, 14075027900270449265, 12066127434996956474, 2487634355597891604, 9404373069440344629, 2343821708967393497, 11647005028679252215, 7989066454180321563, 5068562334499868159, 11625344922303522960, 14994608066897680417, 9233356889755262386, 4852524607907047273, 16708373073357967184, 9931500192867107108, 9517381693360632585, 13285570329829579083, 10352289895582386711, 677929589439062207, 9403914629772577227, 15915650281238470232, 10508128854940079718, 16043291865173505800, 4232644068217664623, 2197300377621628559, 9963590157248867291, 11382001440878743971, 9433242626756606437, 1557521889046820650, 12959548968333866515, 14748448851111335704, 1066899931030157457, 14572829591604766442, 3264202724885951920, 16955420730680460204, 15470201531910303138, 17286009599722837949, 4334929928159029220, 1410320253215323089, 13834795339784448176, 541146823318694493, 15279320163902266179, 1450434906280527388, 18424194786756727585, 14725649045840171490, 13777703495669337245, 3389169260144062896, 2243004779646554205, 1313914282867448235, 15491326242448559976, 9914675644280012017, 4680898200252821743, 14381220901140863577, 13564148282655940767, 8179239297659240960, 6658531916820247674, 15319987625677583575, 17231190076068838680, 2368335330183236295, 16553995030272112949, 7468056492342506365, 10209852826096104802, 9538703763240120353, 2880726407598218408, 17397945879969078170, 14978977660590038481, 7983031616569675107, 14107750847696528357, 7019569183560728355, 15158149981074439163, 7895813961798513937, 16228684411616151157, 13395121232282065437, 17846019690658564832, 18282470643589572017, 4248182999958260834, 4502057755315370825, 11574128019882525626, 4964327751911427017, 4374975283045933941, 17063104990913991449, 12509570993647375947, 1345146322608658496, 15506275825817680335, 8365532856943313930, 9475812042204293935, 165250978196700855, 7284816500549814729, 3672891676770248109, 14227411896720756566, 4138604145991305795, 4752720027081193686, 5357116911905222427, 14507456718694673774, 368146845173615585, 3572913305497032175, 4554870875712192127, 18426291228072071658, 1424672101049420703, 13216399662206384774, 15973059394792520966, 7889627320783645787, 4867317550358499814, 13304287346100560077, 3914215324094934693, 2172974853178698185, 7334062673395504243, 15762497185703111371, 6356360217859335644, 15827167720866237090, 12601638713490956459, 5199916695178735119, 3125246859015441790, 18268725933576764414, 17212015572365459029, 6345872250390251655, 7346159677141386051, 15233630545696343724, 7821403509064144087, 11225110251898765850, 5429870398682478615, 13847568227124039043, 15674869977651900248, 11815865412232751175, 3160357030774859550, 2726548357702336732, 15310667851149701330, 18271359147057600961, 4796672393711484445, 17709376958057084018, 8907468902465803411, 2463318701851402419, 32790996877486613, 6380545384434583185, 3413314808588770581, 11084135072893167874, 694243724869650482, 4880073707172545444, 18371809861647271696, 2753433329470549558, 6994938010960609776, 10065015924992146103, 11033026526706453750, 5690959387926869082, 13272530231594369241, 2310916243888893872, 11674296710885949736, 15884022959939727531, 3877724219330670709, 243919994352706293, 474694101611577571, 8171812506364841662, 790242264689801792, 10022682180304724284, 568662294884010855, 2778697581022661506, 9403860758004840619, 323511608863379376, 15042476068182206416, 7859296556520116886, 8940890299585865709, 10220909575451030322, 8618682700895629172, 17479758423444063884, 4820298482142075503, 8429983768168303458, 12231972635421075589, 8625446880588519786, 1842866414899080000, 15227749810196193795, 7373678055112808278, 16199319047110547932, 6509666024482640412, 7571809301100873945, 10568248631109449112, 14305091739399765112, 13478117081441224840, 16969312377938259253, 18016530632986716444, 901223259452262043, 9912052551641483146, 54161628512435611, 12179167952228260888, 12248082445397121296, 13182373856692974161, 8282551329833763673, 14336294246717729060, 9599539752445442266, 2381066630570237534, 8957122293812918157, 12511086068710358774, 16093516795856131203, 16653776448210708219, 18302907659249693893, 1072674569074634822, 3261483076848248954, 496846412675355298, 6319193858679153180, 5094748793169463842, 6859417627751903820, 11539963995694510867, 12489809136422544527, 7706455194568119957, 665891876176406756, 12872914773859127405, 9199847883912158586, 11424137286392664024, 1621941929993519093, 6628235981357967542, 13391758442772211962, 2157421312358723811] }, Poly { coeffs: [13732662884147905487, 10505343977948329142, 16720040225573593117, 6133686766428727023, 16366684678741173162, 14564193882415981490, 2867758873975767504, 8959026677022614108, 7225343734937361, 816237187835066462, 5876063628113561430, 12130969668225609531, 15505549379036363726, 18185368879884063324, 13847775765388893917, 13087025659516485724, 15751825734646521667, 16285417029084219429, 2920311513997206652, 2975818727731149984, 16839691254868609207, 11315321154163574743, 9132928822579467819, 4145738328842370615, 6459266655651785053, 3637543199749089759, 4945147888841956058, 1328033834976122724, 10176184963166698452, 6986665851680570238, 8827809720612319934, 3063982434242909146, 16935227003995879446, 8532424300837407551, 8664998471217228514, 16030869274473940303, 2675086986523533224, 3972173507451675885, 3359561573579597168, 4820042605595419901, 13191568352052622239, 5568597318092488635, 5268338188140138662, 3067330342835992296, 6738741614043540716, 4446924262265215131, 2644420474557695672, 12047398893478654586, 497189627171080302, 17725726850163616480, 8415396105272634289, 11614979938191520422, 14874110099963711917, 11743039721394730841, 16456108188356119419, 8260688282019297263, 6158988977010806199, 9711565771939467421, 6945379041676798892, 2952312831637155540, 17355899921375788295, 5363279941693195548, 2364218386698482694, 8288416245969413530, 6438980452619379482, 11098200378493965817, 7637681631953056203, 16456016507859588924, 847102627515566530, 4877276938431664955, 7549611555511357257, 9947149613028826737, 12117892842490115564, 16505466249268485487, 1591414732522220531, 13823809179943944611, 1366761880488632482, 17623792261882172698, 10240443454207829532, 5127448689317788067, 4164078346878131535, 13595954582733688622, 10081647576645929047, 10196384443402127076, 12574077758900866336, 15619085374029402396, 3647114881697505470, 995381602390511610, 4053403796133992030, 10436604248032949383, 100783367905540733, 4518572422636965584, 6542841644999468511, 9246645847848414193, 766676307844956685, 3452069975569028543, 17941834346091801799, 8290314305523356987, 16601790585448668741, 14398379234693397124, 7355878351904065757, 2964708581196626197, 9166837360024999664, 80012046312826762, 11010099494519870503, 6387942086487388860, 2995637364482116904, 13307914446075499412, 16899947869789452799, 13559145669966551106, 15131141537048562572, 15273881770339268792, 8272931076203037742, 10046348429899744576, 13521970896934961815, 1891693127206515509, 1432475945915586944, 6052217917297527254, 6122320894104938225, 6356950358169598179, 3913297621751424887, 18303509504212027051, 12084291691401937528, 11973851654817967153, 9263597358649798556, 12722342176485498252, 15135738727501800436, 9097654558730862462, 15249468601887545120, 4523771688405618750, 6376094405783553077, 5856639531476389469, 12448197566607514094, 14755204615071330600, 18222476026554965625, 6445249335090133805, 11959565896987762832, 10670647713520382210, 1742601379954991764, 11000608211898323253, 639988978369680326, 10772825887864318011, 6342837832441153551, 16058337701628323730, 12625761042060675560, 9092699652961756665, 15183326368189118012, 7831656226082435179, 7669341652579397249, 12143526300932233586, 6475041142408476415, 8873259809138270834, 5050385037379633859, 18425761729746601944, 3366362683291446781, 9524615021726347577, 2396092369919562967, 5504593440836154896, 2611800262541837521, 14606866785071883911, 12998817230409296795, 15096256700059728245, 15070271889418737100, 2404799599284941483, 17891362685609715606, 6398686234525617696, 1149711152290760628, 10561425058704511930, 18146884434668723051, 7160456133563952817, 11738970297640696980, 12990669417658153608, 7216438509447723875, 933199487311225963, 12745097349922869813, 8241371820857481216, 5584509913647495628, 16589155273668596489, 3941963449985575569, 7654489681899684767, 10525588087964217320, 14610047826394162236, 17219540028198453994, 1466537305338307756, 18253043724124365256, 11153190949665664851, 11309433104721894318, 5829514807226639781, 5975648329723593806, 3046159530719011180, 2877783552821552104, 173966191406409028, 541093288335855696, 9770227023390938803, 1981248091607520784, 4875123048331189612, 4619514251300192179, 5594396973213807728, 13987501087503573886, 6826812391778090562, 7169250974341911892, 15105488344365436444, 11371162467310744787, 12376394379801622034, 17972935607802901225, 1383868079918499102, 12014141095277038794, 1577844054143624405, 17260024733352623069, 16187045921680819484, 3027556966483068056, 3528315429167964679, 40482787665659550, 4904862185490084140, 9633556976664574001, 16507738377154320855, 14257031152767222924, 15343198727133355197, 2057268031357250805, 2367413181597323656, 13463912065448136644, 11855424673905114804, 7628794510477828406, 16857287565543697301, 14489703232208642660, 1270146398954552719, 282149161431311786, 10073421057541695694, 13257135573496725220, 10813395003775671707, 12613807135975488123, 1704981252485490136, 1255149338367603022, 12180129656790864594, 15140150956675185496, 9855813197621679192, 10857487435615505624, 17607580494619593024, 13079786338730602378, 5432818819416725545, 7884544311809427981, 9092003915705898190, 9825898739684562982, 17211170162129964382, 11796984674122155406, 4453306352206608845, 11971955831979349314, 15778127154883672655, 6780173280956229267, 6987390403690071384, 11245747223864233234, 1245975705425559630, 17993942112342688271, 16269542321662846582, 4098223107313400086, 13669345757063607318, 2304339250346494569, 3304406251460062337, 4970640198393061047, 18403594797092705397, 7828842375611881176, 8702740630591578734, 3877031092001238790, 3015131328568445204, 6376272950384034432, 5747574949197206158, 17263312455213106541, 4638705979644131852, 1420526510517602958, 5132249992219329535, 7602950871456519174, 5475232270773122067, 4875065799083770375, 7776969540655279768, 11672349973128054943, 3203631291297343325, 10022849869612977757, 12303964862020371505, 2223465669178758653, 10979614805454808276, 17089711771920519361, 2496389061175024199, 2776705282946787926, 16932362772835318117, 14474402679248104406, 18442240482108874451, 4999779124858245851, 18402473907142325660, 4643599070628289829, 12094081255240088260, 16030336818775127969, 13354672145773960749, 15725144670805860339, 11326166740056412432, 8308096988230707846, 13998917281796719724, 13563930439007457432, 15608852294561882170, 17003697991314285581, 5822624930255769099, 14775644440141122380, 15725235380591697734, 10656952159976766966, 5333145119722968532, 18289211113405933489, 10680317962902858658, 11765544512809669337, 14125492764606936591, 9316226135713633621, 12168959676587063459, 8516395624522393567, 12788338008171443193, 7263429841817725322, 4028680609531155306, 2956142055557843714, 9039887463615096613, 11947193944034334837, 4603854461443840077, 11739635859048484622, 9369785166316882032, 11836954607269706907, 7303735508968769240, 17357637330373031546, 11697879236570692472, 7772376695822468076, 13847864061641034171, 15209574815988612807, 14889109606659823294, 3255390681415134099, 5565204444806409211, 13515436758386394362, 8451131185043977585, 8332556264361708053, 10435395936191214138, 15945383463373210355, 13974123114705313410, 5203052992685125021, 14301166822331859026, 7613554464734990022, 17231310049211620218, 934211766884189222, 4260699207862090141, 1702305948002043963, 2457913096804135682, 17887676520287541187, 10951091534481386128, 12311091678773082961, 7509997673854347630, 6369609340516675886, 5424314699857340179, 13009517425296203852, 6325312949699292431, 3907442449816830998, 3457671190696738198, 17451373197655424072, 14240786238467507612, 6411807465924926912, 15119714228844744818, 14376370662701675809, 207854663814800735, 12725721402431898162, 14828375389164236495, 10838315525801310257, 3681827415486060429, 9067237134812065517, 2893726471469360672, 10191456740704870607, 8379335860913286216, 12581589811560773647, 12643586427616379134, 8313453116911748627, 4107692687099945704, 5421194012845258338, 4562944634691808704, 16936134429512066041, 11648627384005668558, 6855799095997460309, 11069612777258684673, 3723786126322881429, 255803778956091666, 8144505346267814816, 8426804299758216856, 12917771831403059887, 16180263136064115134, 14128561365643830170, 12560828657542999145, 2106593459835654308, 6268037284688226007, 867589950100478120, 15758345826856808433, 7734851125737824729, 11061763241686953243, 7773947019152253030, 17161772611524567891, 13294879072309651618, 8873439012565506059, 3886353258285982348, 4569945643556445753, 12006134957190232184, 743427947312521620, 17323128668482677340, 10994208087382229670, 7215554392189764657, 5696407701527646731, 9116422515798246863, 3059494384162929570, 13968623822517474770, 12416049137916994211, 16739509316631286954, 9164258419559818593, 10904227292678511350, 17500915205283688939, 17914923197039093021, 8851220128113393301, 151997335679414672, 12708215344535756833, 8225705178163323995, 17566895165872959241, 16427008597157512487, 7077367701798813488, 6210139724560505807, 5806744778050149490, 690862808038209231, 3557162889630943529, 8109824321545440856, 6234626338896877448, 1491469489325459749, 10762351518893390249, 6422644226448477613, 600144482198572148, 9995973250047526866, 11592058349539612250, 13653077302958863610, 7885189804391652277, 7690649192384861122, 9884273247555740754, 13534929647117560768, 18259281110895552517, 3921946903834026404, 2567002422869806827, 14726247836424919276, 1706460618383449035, 4680036013275142395, 7904552325022202708, 7100227289355540177, 10611862188255769567, 9689432144518637334, 14167791076149111328, 9932829949061058168, 743884177697774415, 12728875086286758985, 11288359813225122653, 16454049603253805872, 11173078026353039253, 10602750362019287102, 258234257320656127, 564820040999220420, 6582198293497135821, 9377217512602948640, 10165067646245790471, 16143228268247187530, 16024118093890677037, 17347396462239431820, 11589278121866664729, 1170869778375331599, 3813472861500502788, 14092980723443365616, 9423178569631048959, 9687039024860140509, 14417861998262155879, 7347491223318077764, 480090185976939257, 16515975092618672438, 7042116302403328747, 12781866188049730242, 11103054190642696856, 17134891609485637942, 13802199520766961347, 13348063678045627972, 7939151889972827341, 962043414494383111, 17382552801172335410, 1849726616226988155, 1894936860288171100, 10226613277563716922, 4113182678013390644, 2877446494449369481, 7302522821526614834, 5784085686384224352, 7308840975908563286, 18019668662450127832, 16763227109522061071, 6398261018496297554, 15148848059407946944, 3714128966717739534, 9754495778863050417, 13855297545947161913, 17062307135983313320, 10914652124228486558, 7651290254742988502, 14844347479883622280, 10849584705089752587, 9043107851754262742, 4325776957962300486, 9068363185828013601, 9129682021343107615, 6066541138297695577, 11474219890094688592, 10655186299518995016, 502303976229401568, 14686167523150470109, 12944656991389947165, 426064413601724125, 11945256260456637860, 14972045558131539289, 3296038514043692174, 5212028029505737219, 984767553123316683, 12395191804972035894, 2102939658362102841, 5047459358845377412, 16563694134289348717, 17317968322608714930, 10689028630931500229, 17778489577294954508, 17565708574264381671, 3074014450828959061, 8793794530970022696, 3325339519665843118, 2797620152476317491, 2420763249011703023, 16375566060882816497, 372337426890018449, 18337090001348132915, 14160145039178761936, 1352744030099437008, 12277803625567952373, 10561303483952049729, 4580945206584788970, 4380586056238448552, 16795024798151641217, 4989466692361236227, 12843798869659726538, 460401312804127382, 17150532775171925637, 241361993257224140, 6636326448845051927, 16068601900283958017, 1714186352639673517, 5104884316661218265, 2324890904723984074, 11670037854546571212, 15250260622765981287, 5033757874055453783, 13258736761170056645, 13211503303387290196, 2831691183463564522, 14633241293437694673, 1436602774003866780, 11205991743272888688, 4593956398025280552, 2618400382107850105, 14851729409814168116, 11058698344104241115, 13795127326394357489, 5671522205574140249, 7286962050577943561, 11617604837241781264, 11018928156063074049, 3421382040776948279, 16354715862279156199, 15543633105049675723, 12222690684721085210, 7575179826362096491, 13101064564131503897, 15209338718592799365, 13942850022629357379, 704829629504867326, 6399134611701046685, 17441001804352015243, 3944992195302039928, 1998674678802035173, 15271877275259864179, 14947481001639703376, 5913857519038420557, 188386984197529775, 7101144262860301776, 7411786703910753266, 6846222416805728455, 11900184117503165335, 600433181606000405, 9862999162021078020, 16866356658983388224, 1488692932573621164, 14142222592434762849, 4382826181777043502, 6696369574767095794, 4564379724595543747, 17014819872572202527, 491866558588413658, 5367163830851264867, 3235541722578580061, 15032716787243287971, 11672479168321186812, 6707567876718577099, 1152614598143720918, 7949098291457429211, 14486187340243001648, 78859115000054409, 10914366486862985707, 17178667478245847837, 16168658607351870478, 4556051275614158271, 7407744414048068867, 17195091642814263500, 7026671153500859257, 8279546151841726785, 14463204039638571963, 4537681244113378492, 7119068276166195860, 11522379042894752493, 3801701525035756849, 2765800700524999803, 8112234877475155462, 6909891685707209087, 18322697840961949205, 11242922378673846777, 6230438108763339115, 12088301233074015375, 13759602668069092833, 5489366138468217379, 6478592297389160521, 5953048273138448242, 4995181112578847446, 10421123420652835202, 5023565388608077511, 5896528103819100440, 2604429121065135485, 13483829408621937641, 5286172119649976729, 3114407069411247736, 3140259802574139878, 10686446264212685551, 12383196627404270054, 8256283763259486052, 7345350917541757544, 17287289862683974963, 17903307666426072142, 7266515404940658227, 12139470015404663881, 10493400237152364193, 2586434038901672921, 9791754945144319829, 8626697966209032433, 1129350340494077659, 11556301682130272738, 12558248330756551542, 12488216872677559071, 16575622021677836947, 14368605188486309558, 9077675136771312203, 1332068159886046768, 7008542991037102151, 3286352028160786536, 7782325269442282871, 9807677310448679032, 13613201401497636127, 14464497097869834320, 14908887633636989058, 18001034140024183440, 18249747238763515349, 4113767301523288842, 13520772685566393232, 6929628323788036270, 8951689134242312442, 1400116497154147922, 3029534487558368610, 16861165437220975397, 1593022704987519888, 12218414342849138998, 6994081641245234001, 15033470087586953024, 12909360311165161574, 15958816506381241992, 16220005811263830217, 8093185790118521309, 6600066120980949316, 3909637465404843483, 9915331864645388899, 5800091908267775865, 12019431619375333808, 12388164777680869216, 7288793069117590036, 4624126385226661619, 11779615448781196382, 1467291323330727232, 14661106556968726271, 17777334705103964754, 9589484549820563896, 70504083527715115, 14718836422898303848, 3429419473192188899, 15290491843257010341, 14279127495233566913, 12543443411457532004, 12949351718428138946, 301152696541430432, 2632638277386769370, 15244941215066322862, 4628857525204012776, 17539718940913718200, 15255648327154368193, 12490293888873674241, 11682072512340788519, 1684640552109449155, 9027576823665808191, 2933337365010014442, 17253002784812900594, 17125299618787140965, 13845379623379664359, 16050117199937238293, 1744926972954764846, 617523236372625308, 5597003746221191748, 9432363528775928355, 8471176146404792933, 4424685851885115384, 18148752698887327167, 6516177728155629961, 9098342451182364291, 1236604644767356285, 4609907238700586640, 13390164265956046101, 12383664470755563585, 18013773555589649000, 13967524134329033681, 701454235242835329, 946719732841092944, 13503220819217762869, 3655845340724211438, 11112096289411363978, 6585955616365836835, 2871620592744410891, 13019586185367107092, 7710483643974291082, 13163575739672032390, 17401211949142397698, 9943260244898313598, 11297099036054802120, 12613787295806721723, 3822440450581382189, 18432009534054605228, 3797314056347885716, 8579814754954150932, 16215543392962746240, 11621918212882855305, 6513437896950690587, 9325187915565439924, 13274440910514413013, 10138114643247612048, 1584470671227121133, 11019216236009918986, 5263697767353560983, 577677275277700808, 17560551444087864243, 8563062124313376744, 1095348218835794362, 11077848596739236800, 18024847741034882121, 7097796611631904326, 9435001344379817575, 8825966881907126011, 9959731368835809152, 748703370471698556, 11772514134176237816, 8082355839866392597, 6727054359752057078, 9841651481882099233, 696246739016867286, 12487190350161554889, 15625968718952237684, 16607220500825168856, 14114337172896112231, 1277069014473027916, 14401328893139798739, 15193515981232281889, 2782534227069340272, 1113401858223830367, 463050700001344356, 12853016733019278293, 8421993582946830406, 11860917358878890495, 922244003827041761, 15740749743601800092, 17104307272152742158, 2665123955385613505, 3931696299011101286, 12627818855583747293, 14581093852153161520, 2377724509819077717, 7037425101384191541, 8139548800820606955, 8832770298122663223, 651769412057537015, 14066588383041808993, 12945377109767541421, 16492497165994253744, 16661020760467242989, 9814446630608029017, 10543344213955544757, 11812346795693685280, 9107332185754841988, 1450635299700163067, 15529787534089786853, 14075027900270449121, 12066127434996956329, 2487634355597891458, 9404373069440344482, 2343821708967393349, 11647005028679252066, 7989066454180321413, 5068562334499868008, 11625344922303522808, 14994608066897680264, 9233356889755262232, 4852524607907047118, 16708373073357967028, 9931500192867106951, 9517381693360632427, 13285570329829578924, 10352289895582386551, 677929589439062046, 9403914629772577065, 15915650281238470069, 10508128854940079554, 16043291865173505635, 4232644068217664457, 2197300377621628392, 9963590157248867123, 11382001440878743802, 9433242626756606267, 1557521889046820479, 12959548968333866343, 14748448851111335531, 1066899931030157283, 14572829591604766267, 3264202724885951744, 16955420730680460027, 15470201531910302960, 17286009599722837770, 4334929928159029040, 1410320253215322908, 13834795339784447994, 541146823318694310, 15279320163902265995, 1450434906280527203, 18424194786756727399, 14725649045840171303, 13777703495669337057, 3389169260144062707, 2243004779646554015, 1313914282867448044, 15491326242448559784, 9914675644280011824, 4680898200252821549, 14381220901140863382, 13564148282655940571, 8179239297659240763, 6658531916820247476, 15319987625677583376, 17231190076068838480, 2368335330183236094, 16553995030272112747, 7468056492342506162, 10209852826096104598, 9538703763240120148, 2880726407598218202, 17397945879969077963, 14978977660590038273, 7983031616569674898, 14107750847696528147, 7019569183560728144, 15158149981074438951, 7895813961798513724, 16228684411616150943, 13395121232282065222, 17846019690658564616, 18282470643589571800, 4248182999958260616, 4502057755315370606, 11574128019882525406, 4964327751911426796, 4374975283045933719, 17063104990913991226, 12509570993647375723, 1345146322608658271, 15506275825817680109, 8365532856943313703, 9475812042204293707, 165250978196700626, 7284816500549814499, 3672891676770247878, 14227411896720756334, 4138604145991305562, 4752720027081193452, 5357116911905222192, 14507456718694673538, 368146845173615348, 3572913305497031937, 4554870875712191888, 18426291228072071418, 1424672101049420462, 13216399662206384532, 15973059394792520723, 7889627320783645543, 4867317550358499569, 13304287346100559831, 3914215324094934446, 2172974853178697937, 7334062673395503994, 15762497185703111121, 6356360217859335393, 15827167720866236838, 12601638713490956206, 5199916695178734865, 3125246859015441535, 18268725933576764158, 17212015572365458772, 6345872250390251397, 7346159677141385792, 15233630545696343464, 7821403509064143826, 11225110251898765588, 5429870398682478352, 13847568227124038779, 15674869977651899983, 11815865412232750909, 3160357030774859283, 2726548357702336464, 15310667851149701061, 18271359147057600691, 4796672393711484174, 17709376958057083746, 8907468902465803138, 2463318701851402145, 32790996877486338, 6380545384434582909, 3413314808588770304, 11084135072893167596, 694243724869650203, 4880073707172545164, 18371809861647271415, 2753433329470549276, 6994938010960609493, 10065015924992145819, 11033026526706453465, 5690959387926868796, 13272530231594368954, 2310916243888893584, 11674296710885949447, 15884022959939727241, 3877724219330670418, 243919994352706001, 474694101611577278, 8171812506364841368, 790242264689801497, 10022682180304723988, 568662294884010558, 2778697581022661208, 9403860758004840320, 323511608863379076, 15042476068182206115, 7859296556520116584, 8940890299585865406, 10220909575451030018, 8618682700895628867, 17479758423444063578, 4820298482142075196, 8429983768168303150, 12231972635421075280, 8625446880588519476, 1842866414899079689, 15227749810196193483, 7373678055112807965, 16199319047110547618, 6509666024482640097, 7571809301100873629, 10568248631109448795, 14305091739399764794, 13478117081441224521, 16969312377938258933, 18016530632986716123, 901223259452261721, 9912052551641482823, 54161628512435287, 12179167952228260563, 12248082445397120970, 13182373856692973834, 8282551329833763345, 14336294246717728731, 9599539752445441936, 2381066630570237203, 8957122293812917825, 12511086068710358441, 16093516795856130869, 16653776448210707884, 18302907659249693557, 1072674569074634485, 3261483076848248616, 496846412675354959, 6319193858679152840, 5094748793169463501, 6859417627751903478, 11539963995694510524, 12489809136422544183, 7706455194568119612, 665891876176406410, 12872914773859127058, 9199847883912158238, 11424137286392663675, 1621941929993518743, 6628235981357967191, 13391758442772211610, 2157421312358723458] }] }
output poly: Poly { coeffs: [354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 0, 18446744069414584320, 18446744069414584319, 18446744069414584318, 18446744069414584317, 18446744069414584316, 18446744069414584315, 18446744069414584314, 18446744069414584313, 18446744069414584312, 18446744069414584311, 18446744069414584310, 18446744069414584309, 18446744069414584308, 18446744069414584307, 18446744069414584306, 18446744069414584305, 18446744069414584304, 18446744069414584303, 18446744069414584302, 18446744069414584301, 18446744069414584300, 18446744069414584299, 18446744069414584298, 18446744069414584297, 18446744069414584296, 18446744069414584295, 18446744069414584294, 18446744069414584293, 18446744069414584292, 18446744069414584291, 18446744069414584290, 18446744069414584289, 18446744069414584288, 18446744069414584287, 18446744069414584286, 18446744069414584285, 18446744069414584284, 18446744069414584283, 18446744069414584282, 18446744069414584281, 18446744069414584280, 18446744069414584279, 18446744069414584278, 18446744069414584277, 18446744069414584276, 18446744069414584275, 18446744069414584274, 18446744069414584273, 18446744069414584272, 18446744069414584271, 18446744069414584270, 18446744069414584269, 18446744069414584268, 18446744069414584267, 18446744069414584266, 18446744069414584265, 18446744069414584264, 18446744069414584263, 18446744069414584262, 18446744069414584261, 18446744069414584260, 18446744069414584259, 18446744069414584258, 18446744069414584257, 18446744069414584256, 18446744069414584255, 18446744069414584254, 18446744069414584253, 18446744069414584252, 18446744069414584251, 18446744069414584250, 18446744069414584249, 18446744069414584248, 18446744069414584247, 18446744069414584246, 18446744069414584245, 18446744069414584244, 18446744069414584243, 18446744069414584242, 18446744069414584241, 18446744069414584240, 18446744069414584239, 18446744069414584238, 18446744069414584237, 18446744069414584236, 18446744069414584235, 18446744069414584234, 18446744069414584233, 18446744069414584232, 18446744069414584231, 18446744069414584230, 18446744069414584229, 18446744069414584228, 18446744069414584227, 18446744069414584226, 18446744069414584225, 18446744069414584224, 18446744069414584223, 18446744069414584222, 18446744069414584221, 18446744069414584220, 18446744069414584219, 18446744069414584218, 18446744069414584217, 18446744069414584216, 18446744069414584215, 18446744069414584214, 18446744069414584213, 18446744069414584212, 18446744069414584211, 18446744069414584210, 18446744069414584209, 18446744069414584208, 18446744069414584207, 18446744069414584206, 18446744069414584205, 18446744069414584204, 18446744069414584203, 18446744069414584202, 18446744069414584201, 18446744069414584200, 18446744069414584199, 18446744069414584198, 18446744069414584197, 18446744069414584196, 18446744069414584195, 18446744069414584194, 18446744069414584193, 18446744069414584192, 18446744069414584191, 18446744069414584190, 18446744069414584189, 18446744069414584188, 18446744069414584187, 18446744069414584186, 18446744069414584185, 18446744069414584184, 18446744069414584183, 18446744069414584182, 18446744069414584181, 18446744069414584180, 18446744069414584179, 18446744069414584178, 18446744069414584177, 18446744069414584176, 18446744069414584175, 18446744069414584174, 18446744069414584173, 18446744069414584172, 18446744069414584171, 18446744069414584170, 18446744069414584169, 18446744069414584168, 18446744069414584167, 18446744069414584166, 18446744069414584165, 18446744069414584164, 18446744069414584163, 18446744069414584162, 18446744069414584161, 18446744069414584160, 18446744069414584159, 18446744069414584158, 18446744069414584157, 18446744069414584156, 18446744069414584155, 18446744069414584154, 18446744069414584153, 18446744069414584152, 18446744069414584151, 18446744069414584150, 18446744069414584149, 18446744069414584148, 18446744069414584147, 18446744069414584146, 18446744069414584145, 18446744069414584144, 18446744069414584143, 18446744069414584142, 18446744069414584141, 18446744069414584140, 18446744069414584139, 18446744069414584138, 18446744069414584137, 18446744069414584136, 18446744069414584135, 18446744069414584134, 18446744069414584133, 18446744069414584132, 18446744069414584131, 18446744069414584130, 18446744069414584129, 18446744069414584128, 18446744069414584127, 18446744069414584126, 18446744069414584125, 18446744069414584124, 18446744069414584123, 18446744069414584122, 18446744069414584121, 18446744069414584120, 18446744069414584119, 18446744069414584118, 18446744069414584117, 18446744069414584116, 18446744069414584115, 18446744069414584114, 18446744069414584113, 18446744069414584112, 18446744069414584111, 18446744069414584110, 18446744069414584109, 18446744069414584108, 18446744069414584107, 18446744069414584106, 18446744069414584105, 18446744069414584104, 18446744069414584103, 18446744069414584102, 18446744069414584101, 18446744069414584100, 18446744069414584099, 18446744069414584098, 18446744069414584097, 18446744069414584096, 18446744069414584095, 18446744069414584094, 18446744069414584093, 18446744069414584092, 18446744069414584091, 18446744069414584090, 18446744069414584089, 18446744069414584088, 18446744069414584087, 18446744069414584086, 18446744069414584085, 18446744069414584084, 18446744069414584083, 18446744069414584082, 18446744069414584081, 18446744069414584080, 18446744069414584079, 18446744069414584078, 18446744069414584077, 18446744069414584076, 18446744069414584075, 18446744069414584074, 18446744069414584073, 18446744069414584072, 18446744069414584071, 18446744069414584070, 18446744069414584069, 18446744069414584068, 18446744069414584067, 18446744069414584066, 18446744069414584065, 18446744069414584064, 18446744069414584063, 18446744069414584062, 18446744069414584061, 18446744069414584060, 18446744069414584059, 18446744069414584058, 18446744069414584057, 18446744069414584056, 18446744069414584055, 18446744069414584054, 18446744069414584053, 18446744069414584052, 18446744069414584051, 18446744069414584050, 18446744069414584049, 18446744069414584048, 18446744069414584047, 18446744069414584046, 18446744069414584045, 18446744069414584044, 18446744069414584043, 18446744069414584042, 18446744069414584041, 18446744069414584040, 18446744069414584039, 18446744069414584038, 18446744069414584037, 18446744069414584036, 18446744069414584035, 18446744069414584034, 18446744069414584033, 18446744069414584032, 18446744069414584031, 18446744069414584030, 18446744069414584029, 18446744069414584028, 18446744069414584027, 18446744069414584026, 18446744069414584025, 18446744069414584024, 18446744069414584023, 18446744069414584022, 18446744069414584021, 18446744069414584020, 18446744069414584019, 18446744069414584018, 18446744069414584017, 18446744069414584016, 18446744069414584015, 18446744069414584014, 18446744069414584013, 18446744069414584012, 18446744069414584011, 18446744069414584010, 18446744069414584009, 18446744069414584008, 18446744069414584007, 18446744069414584006, 18446744069414584005, 18446744069414584004, 18446744069414584003, 18446744069414584002, 18446744069414584001, 18446744069414584000, 18446744069414583999, 18446744069414583998, 18446744069414583997, 18446744069414583996, 18446744069414583995, 18446744069414583994, 18446744069414583993, 18446744069414583992, 18446744069414583991, 18446744069414583990, 18446744069414583989, 18446744069414583988, 18446744069414583987, 18446744069414583986, 18446744069414583985, 18446744069414583984, 18446744069414583983, 18446744069414583982, 18446744069414583981, 18446744069414583980, 18446744069414583979, 18446744069414583978, 18446744069414583977, 18446744069414583976, 18446744069414583975, 18446744069414583974, 18446744069414583973, 18446744069414583972, 18446744069414583971, 18446744069414583970, 18446744069414583969, 18446744069414583968] }
in: 354 out: 354
test vtfhe::ivc_based_vpbs::tests::test_ivc_blind_rot ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 21 filtered out; finished in 29.96s

参考资料

[1] Zama团队2024年5月5日博客 Verifiable FHE Bootstrapping using SNARKs
[2] Zama团队2024年论文Towards Verifiable FHE in Practice: Proving Correct Execution of TFHE’s Bootstrapping using plonky2

FHE系列博客

  • 28
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值