Check-in [198759586b]
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:update curl to version 7.69.0
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 198759586b4f6d88548caf2ad9557b8c55b7c1ba
User & Date: chw 2020-03-05 06:44:56.041
Context
2020-03-07
09:10
add tcl upstream changes check-in: af28079f4a user: chw tags: trunk
2020-03-05
06:45
merge with trunk check-in: 056d8d6828 user: chw tags: wtf-8-experiment
06:44
update curl to version 7.69.0 check-in: 198759586b user: chw tags: trunk
06:24
add tcl upstream changes check-in: c175eb2e69 user: chw tags: trunk
Changes
Unified Diff Ignore Whitespace Patch
Changes to jni/curl/CHANGES.
1
2
3
4
5
6
7




























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































8
9
10
11
12
13
14
                                  _   _ ____  _
                              ___| | | |  _ \| |
                             / __| | | | |_) | |
                            | (__| |_| |  _ <| |___
                             \___|\___/|_| \_\_____|

                                  Changelog





























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































Version 7.68.0 (8 Jan 2020)

Daniel Stenberg (8 Jan 2020)
- RELEASE-NOTES: 7.68.0

- THANKS: updated with names from the 7.68.0 release







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
                                  _   _ ____  _
                              ___| | | |  _ \| |
                             / __| | | | |_) | |
                            | (__| |_| |  _ <| |___
                             \___|\___/|_| \_\_____|

                                  Changelog

Version 7.69.0 (4 Mar 2020)

Daniel Stenberg (4 Mar 2020)
- RELEASE-NOTES: 7.69.0

- THANKS: from 7.69.0
  
  Now sorted case insensitive

Marc Hoersken (3 Mar 2020)
- ci/tests: fix escaping of testnames and disable proxy for CI APIs
  
  Follow up to ada581f and c0d8b96
  Closes #5031

Jay Satiro (3 Mar 2020)
- cmake: Show HTTPS-proxy in the features output
  
  - Show HTTPS-proxy in the features output for those backends that
    support it: OpenSSL, GnuTLS and NSS.
  
  Prior to this change HTTPS-proxy was missing from the cmake features
  output even if curl was built with it. Only cmake output was affected.
  Both the library and tool correctly reported the feature.
  
  Bug: https://curl.haxx.se/mail/lib-2020-03/0008.html
  Reported-by: David Lopes
  
  Closes https://github.com/curl/curl/pull/5025

Marc Hoersken (3 Mar 2020)
- ci/tests: Make it possible to still run but ignore failing tests
  
  This enables the development of a solution for the failing tests by
  running them on CI while ignoring their result for the overall status.
  
  Closes #4994

- README.md: add Azure DevOps Pipelines build status badge

- ci/tests: Move CI test result creation above environment setup
  
  This avoids using our test servers as proxy to the AppVeyor API.
  
  Closes #5022

- ci/tests: Send test results to AppVeyor for status overview
  
  Closes #5021

Daniel Stenberg (3 Mar 2020)
- Revert "sha256: Added SecureTransport implementation"
  
  This reverts commit 4feb38deed33fed14ff7c370a6a9153c661dbb9c (from #4956)
  
  That commit broke test 1610 on macos builds without TLS.
  
  Closes #5027

- dist: include tests/azure.pm in the tarball
  
  Bug: https://github.com/curl/curl/commit/ada581f2cc32f48c1629b729707ac19208435b27#commitcomment-37601589
  Reported-by: Marcel Raad

Steve Holme (3 Mar 2020)
- configure.ac: Disable metalink if mbedTLS is specified
  
  Follow up to cdcc9df1 and #5006. Even though I mentioned mbedTLS as
  being one of the backends that metalink needs to be disabled for, I
  seem to have included it in the list of allowed SSL/TLS backends in
  comnfigure.ac :(
  
  Closes #5013

- sha256: Tidy up following recent changes
  
  Reviewed-by: Daniel Stenberg
  Closes #4956

- sha256: Added WinCrypt implementation

- sha256: Added SecureTransport implementation

- sha256: Added mbedtls implementation

- sha256: Added GNU TLS gcrypt implementation

- sha256: Added GNU TLS Nettle implementation

Jay Satiro (2 Mar 2020)
- curl_escape.3: Add a link to curl_free
  
  Ref: https://github.com/curl/curl/pull/5016#issuecomment-593628582

- curl_getenv.3: Fix the memory handling description
  
  - Tell the user to call curl_free() to free the pointer returned by
    curl_getenv().
  
  Prior to this change the user was directed to call free(), but that
  would not work in cases where the library and application use separate C
  runtimes and therefore have separate heap memory management.
  
  Closes https://github.com/curl/curl/pull/5016

Daniel Stenberg (2 Mar 2020)
- [Nick Zitzmann brought this change]

  md4: use init/update/final functions in Secure Transport
  
  We can use CC_MD4_Init/Update/Final without having to allocate memory
  directly.
  
  Closes #4979

Marc Hoersken (2 Mar 2020)
- ci/tests: some MacOS builds randomly take longer than 20min

Daniel Stenberg (2 Mar 2020)
- multi_wait: stop loop when sread() returns zero
  
  It's unclear why it would ever return zero here, but this change fixes
  Robert's problem and it shouldn't loop forever...
  
  Reported-by: Robert Dunaj
  Bug: https://curl.haxx.se/mail/archive-2020-02/0011.html
  Closes #5019

- http: mark POSTs with no body as "upload done" from the start
  
  As we have logic that checks if we get a >= 400 reponse code back before
  the upload is done, which then got confused since it wasn't "done" but
  yet there was no data to send!
  
  Reported-by: IvanoG on github
  Fixes #4996
  Closes #5002

- tests: disable 962, 963 and 964 on Windows
  
  These tests are also doing UTF-8 SMTP.
  
  Follow-up to df207d2dd93b9e73

Marc Hoersken (2 Mar 2020)
- ci/tests: fine-tune Azure Pipeline timeouts with a small puffer

Daniel Stenberg (2 Mar 2020)
- configure: bump the AC_COPYRIGHT year range

- [Steve Holme brought this change]

  tests: disable SMTP UTF-8 tests on Windows
  
  Fixes #4988
  Closes #4992

- formdata/mime: copyright year range update
  
  Due to the merge/revert cycle

- Revert "mime: latch last read callback status."
  
  This reverts commit 87869e38d7afdec3ef1bb4965711458b088e254f.
  
  Fixes #5014
  Closes #5015
  Reopens #4833

- Revert "mime: do not perform more than one read in a row"
  
  This reverts commit ed0f357f7d25566110d4302f33759f4ffb5a6f83.

- Revert "mime: fix the binary encoder to handle large data properly"
  
  This reverts commit b2caaa0681f329eed317ffb6ae6927f4a539f0c1.

- altsvc: both h3 backends now speak h3-27
  
  ... also updated the HTTP3 build description for ngtcp2 accordingly.

- [Patrick Monnerat brought this change]

  mime: fix the binary encoder to handle large data properly
  
  New test 666 checks this is effective.
  As upload buffer size is significant in this kind of tests, shorten it
  in similar test 652.
  
  Fixes #4860
  Reported-by: RuurdBeerstra on github

- [Patrick Monnerat brought this change]

  mime: do not perform more than one read in a row
  
  Input buffer filling may delay the data sending if data reads are slow.
  To overcome this problem, file and callback data reads do not accumulate
  in buffer anymore. All other data (memory data and mime framing) are
  considered as fast and still concatenated in buffer.
  As this may highly impact performance in terms of data overhead, an early
  end of part data check is added to spare a read call.
  When encoding a part's data, an encoder may require more bytes than made
  available by a single read. In this case, the above rule does not apply
  and reads are performed until the encoder is able to deliver some data.
  
  Tests 643, 644, 645, 650 and 654 have been adapted to the output data
  changes, with test data size reduced to avoid the boredom of long lists of
  1-byte chunks in verification data.
  New test 664 checks mimepost using single-byte read callback with encoder.
  New test 665 checks the end of part data early detection.
  
  Fixes #4826
  Reported-by: MrdUkk on github

- [Patrick Monnerat brought this change]

  mime: latch last read callback status.
  
  In case a read callback returns a status (pause, abort, eof,
  error) instead of a byte count, drain the bytes read so far but
  remember this status for further processing.
  Takes care of not losing data when pausing, and properly resume a
  paused mime structure when requested.
  New tests 670-673 check unpausing cases, with easy or multi
  interface and mime or form api.
  
  Fixes #4813
  Reported-by: MrdUkk on github
  Closes #4833

Steve Holme (1 Mar 2020)
- unit1651: Fixed conversion compilation warning
  
  371:17: warning: conversion to 'unsigned char' from 'int' may alter its
          value [-Wconversion]
  
  Closes #5008

- configure.ac: Disable metalink support if an incompatible SSL/TLS specified
  
  tool_metalink only supports cryptography from OpenSSL, GnuTLS, NSS,
  The Win32 Crypto library and Apple's Common Crypto library.
  
  If an TLS backend such as mbedTLS or WolfSSL is specified then the
  following error is given during compilation along, with a load of
  unresolved extern errors:
  
  Can't compile METALINK support without a crypto library.
  
  Reviewed-by: Daniel Stenberg
  Closes #5006

Marc Hoersken (1 Mar 2020)
- ci/tests: Update Azure DevOps pipeline job display names
  
  Make the configure step more descriptive and align others.

- ci/tests: Fix typo in previous commit 597cf2

- ci/tests: Make sure that the AZURE_ACCESS_TOKEN is available
  
  For security reasons the access token is not available to PR builds.
  Therefore we should not try to use the DevOps API with an empty token.

Daniel Stenberg (1 Mar 2020)
- build: remove all HAVE_OPENSSL_ENGINE_H defines
  
  ... as there's nothing in the code that actually uses the define! The
  last reference was removed in 38203f158.
  
  Closes #5007

Jay Satiro (29 Feb 2020)
- [Rolf Eike Beer brought this change]

  CMake: clean up and improve build procedures
  
  - remove check for unsupported old CMake versions
  
  - do not link to c-ares library twice
  
  - modernize custom Find modules
  
      - FindLibSSH2:
          - pass version to FPHSA to show it in the output
          - use LIBSSH2_VERSION define to extract the version number in
            one shot. This variable exists in the header for 10 years.
          - remove unneeded code
  
      - FindNGHTTP2.cmake:
          - drop needless FPHSA argument
          - mark found variables as advanced
  
      - FindNSS.cmake:
          - show version number
  
      - FindCARES.cmake:
          - drop default paths
          - use FPHSA instead of checking things by hand
  
  - remove needless explict variable dereference
  
  - simplify count_true()
  
  - allow all policies up to version 3.16 to be set to NEW
  
  - do not rerun check for -Wstrict-aliasing=3 every time
  
  In contrast to every other compiler flag this has a = in it, which CMake
  can't have in a variable name.
  
  - only read the interesting strings from curlver.h
  
  Reviewed-by: Peter Wu
  
  Closes https://github.com/curl/curl/pull/4975

- runtests: fix output to command log
  
  - Record only the command of the most recently ran test in the command
    log.
  
  This is a follow-up to 02988b7 from several weeks ago which fixed
  writing to the command log, however it saved all commands for all tests
  instead of just the most recently ran test as we would now expect.
  
  Fixes https://github.com/curl/curl/commit/02988b7#commitcomment-37546876
  Closes https://github.com/curl/curl/pull/5001

Steve Holme (1 Mar 2020)
- polarssl: Additional removal
  
  Follow up to 6357a19f.
  
  Reviewed-by: Daniel Stenberg
  Closes #5004

- [Jonathan Cardoso Machado brought this change]

  docs: fix typo on CURLINFO_RETRY_AFTER - alwaus -> always
  
  Reviewed-by: Steve Holme
  Closes #5005

- md5: Added implementation for mbedTLS
  
  Reviewed-by: Jay Satiro
  Closes #4980

- md5: Use pointer notation for array parameters in GnuTLS implementation

- md4: Use non-deprecated functions in mbedTLS >= 2.7.0
  
  Closes #4983

Marc Hoersken (29 Feb 2020)
- ci/tests: Send test results to Azure DevOps for reporting

Daniel Stenberg (29 Feb 2020)
- pause: force-drain the transfer on unpause
  
  ... since the socket might not actually be readable anymore when for
  example the data is already buffered in the TLS layer.
  
  Fixes #4966
  Reported-by: Anders Berg
  Closes #5000

- TODO: curl --proxycommand
  
  Suggested-by: Kristian Mide
  Closes #4941

- smtp: overwriting 'from' leaks memory
  
  Detected by Coverity. CID 1418139.
  
  Also, make sure to return error if the new 'from' allocation fails.
  
  Closes #4997

- CIfuzz: switch off 'dry_run' mode
  
  Follow-up from #4960: now make it fail if it detects problems.
  
  Closes #4998

Marc Hoersken (28 Feb 2020)
- ci/tests: Increase timeouts of Windows builds due to new tests
  
  Recently added tests increased their runtime above the limit of 60min.

- ci/tests: align Azure Pipeline job names with each other

- ci/tests: Add Windows builds via Azure Pipelines using Docker

- tests: fix Python 3 compatibility of smbserver.py

Daniel Stenberg (27 Feb 2020)
- runtests: restore the command log
  
  The log file with all command lines for the invoked command lines is now
  called logs/commands.log
  
  Fixes #4911
  Closes #4989

- smtp: fix memory leak on exit path
  
  Detected by Coverity. CID 1418139. "leaked_storage: Variable 'from'
  going out of scope leaks the storage it points to"
  
  Closes #4990

Steve Holme (27 Feb 2020)
- gtls: Fixed compilation when using GnuTLS < 3.5.0
  
  Reverts the functionality from 41fcb4f when compiling with GnuTLS older
  than 3.5.0.
  
  Reviewed-by: Daniel Stenberg
  Closes #4984

- RELEASE-NOTES: Corrected the link to issue #4892

Daniel Stenberg (27 Feb 2020)
- Curl_is_ASCII_name: handle a NULL argument
  
  Make the function tolerate a NULL pointer input to avoid dereferencing
  that pointer.
  
  Follow-up to efce3ea5a85126d
  Detected by OSS-Fuzz
  Reviewed-By: Steve Holme
  Bug: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=20907
  Fixes #4985
  Closes #4986

- RELEASE-NOTES: synced

- http2: make pausing/unpausing set/clear local stream window
  
  This reduces the HTTP/2 window size to 32 MB since libcurl might have to
  buffer up to this amount of data in memory and yet we don't want it set
  lower to potentially impact tranfer performance on high speed networks.
  
  Requires nghttp2 commit b3f85e2daa629
  (https://github.com/nghttp2/nghttp2/pull/1444) to work properly, to end
  up in the next release after 1.40.0.
  
  Fixes #4939
  Closes #4940

- [Anderson Toshiyuki Sasaki brought this change]

  libssh: improve known hosts handling
  
  Previously, it was not possible to get a known hosts file entry due to
  the lack of an API.  ssh_session_get_known_hosts_entry(), introduced in
  libssh-0.9.0, allows libcurl to obtain such information and behave the
  same as when compiled with libssh2.
  
  This also tries to avoid the usage of deprecated functions when the
  replacements are available.  The behaviour will not change if versions
  older than libssh-0.8.0 are used.
  
  Signed-off-by: Anderson Toshiyuki Sasaki <ansasaki@redhat.com>
  
  Fixes #4953
  Closes #4962

Steve Holme (27 Feb 2020)
- tests: Automatically deduce the tool name from the test case for unit tests
  
  It is still possible to override the executable to run during the test,
  using the <tool> tag, but this patch removes the requirement that the
  tag must be present for unit tests.
  
  It also removes the possibility of human error when existing test cases
  are used as the basis for new tests, as recently witnessed in 81c37124.
  
  Reviewed-by: Daniel Stenberg
  Closes #4976

- test1323: Added the missing 'unit test' feature requirement in the test case

Daniel Stenberg (26 Feb 2020)
- cookie: remove unnecessary check for 'out != 0'
  
  ... as it will always be non-NULL at this point.
  
  Detected by Coverity: CID 1459009

- http: added 417 response treatment
  
  When doing a request with a body + Expect: 100-continue and the server
  responds with a 417, the same request will be retried immediately
  without the Expect: header.
  
  Added test 357 to verify.
  
  Also added a control instruction to tell the sws test server to not read
  the request body if Expect: is present, which the new test 357 uses.
  
  Reported-by: bramus on github
  Fixes #4949
  Closes #4964

Steve Holme (26 Feb 2020)
- smtp: Tidy up, following recent changes, to maintain the coding style
  
  Closes #4892

- smtp: Support the SMTPUTF8 extension for the EXPN command
  
  Simply notify the server we support the SMTPUTF8 extension if it does.

- smtp: Support the SMTPUTF8 extension in the VRFY command

- smtp: Support the SMTPUTF8 extension in the RCPT TO command
  
  Note: The RCPT TO command isn't required to advertise to the server that
  it contains UTF-8 characters, instead the server is told that a mail may
  contain UTF-8 in any envelope command via the MAIL command.

- smtp: Support the SMTPUTF8 extension in the MAIL command
  
  Support the SMTPUTF8 extension when sending mailbox information in the
  MAIL command (FROM and AUTH parameters). Non-ASCII domain names will
  be ACE encoded, if IDN is supported, whilst non-ASCII characters in
  the local address part are passed to the server.
  
  Reported-by: ygthien on github
  Fixes #4828

- smtp: Detect server support for the UTF-8 extension as defined in RFC-6531

- smtp: Support UTF-8 based host names in the VRFY command

- smtp: Support UTF-8 based host names in the RCPT TO command

- smtp: Support UTF-8 based host names in the MAIL command
  
  Non-ASCII host names will be ACE encoded if IDN is supported.

- url: Make the IDN conversion functions available to others

- smtp: Added UTF-8 mailbox tests to verify existing behaviour

- ftpserver: Updated VRFY_smtp() so the response isn't necessary in the test case

- ftpserver: Corrected the e-mail address regex in MAIL_smtp() and RCTP_smtp()
  
  The dot character between the host and the tld was not being escaped,
  which meant it specified a match of 'any' character rather than an
  explicit dot separator.
  
  Additionally removed the dot character from the host name as it allowed
  the following to be specified as a valid address in our test cases:
  
  <bad@example......com>
  
  Both are typos from 98f7ca7 and 8880f84 :(
  
  I can't remember whether my intention was to allow sub-domains to be
  specified in the host or not with these additional dots, but by placing
  it outside of the host means it can only be specified once per domain
  and by placing a + after the new grouping support for sub-domains is
  kept.
  
  Closes #4912

- hmac: Added a unit test for the HMAC hash generation
  
  Closes #4973

- ntlm: Moved the HMAC MD5 function into the HMAC module as a generic function

- tests: Added a unit test for MD4 digest generation
  
  Closes #4970

- md4: Use const for the length input parameter
  
  This keeps the interface the same as md5 and sha256.

- test1610: Fixed the link to the unit test
  
  Typo from 81c37124.

- ntlm: Removed the dependency on the TLS libaries when using MD5
  
  As we have our own MD5 implementation use the MD5 wrapper to remove the
  TLS dependency.
  
  Closes #4967

- md5/sha256: Updated the functions to allow non-string data to be hashed

- digest: Corrected the name of the local HTTP digest function
  
  Follow up to 2b5b37cb. Local static functions do not require the Curl
  prefix.

- tests: Added a unit test for SHA256 digest generation
  
  Follow up to 2b5b37c.
  
  Closes #4968

- md4: Fixed compilation issues when using GNU TLS gcrypt
  
  * Don't include 'struct' in the gcrypt MD4_CTX typedef
  * The call to gcry_md_read() should use a dereferenced ctx
  * The call to gcry_md_close() should use a dereferenced ctx
  
  Additional minor whitespace issue in the USE_WIN32_CRYPTO code.
  
  Closes #4959

Daniel Stenberg (21 Feb 2020)
- RELEASE-NOTES: synced

- http2: now require nghttp2 >= 1.12.0
  
  To simplify our code and since earlier versions lack important function
  calls libcurl needs to function correctly.
  
  nghttp2 1.12.0 was relased on June 26, 2016.
  
  Closes #4961

- gtls: fix the copyright year
  
  Follow-up from 41fcb4f609

- [jethrogb brought this change]

  GnuTLS: Always send client cert
  
  TLS servers may request a certificate from the client. This request
  includes a list of 0 or more acceptable issuer DNs. The client may use
  this list to determine which certificate to send. GnuTLS's default
  behavior is to not send a client certificate if there is no
  match. However, OpenSSL's default behavior is to send the configured
  certificate. The `GNUTLS_FORCE_CLIENT_CERT` flag mimics OpenSSL
  behavior.
  
  Authored-by: jethrogb on github
  Fixes #1411
  Closes #4958

- [Leo Neat brought this change]

  github action: add CIFuzz
  
  Closes #4960

- cleanup: comment typos
  
  Spotted by 'codespell'
  
  Closes #4957

Steve Holme (20 Feb 2020)
- win32: USE_WIN32_CRYPTO to enable Win32 based MD4, MD5 and SHA256 functions
  
  Whilst lib\md4.c used this pre-processor, lib\md5.c and
  src\tool_metalink.c did not and simply relied on the WIN32
  pre-processor directive.
  
  Reviewed-by: Marcel Raad
  Closes #4955

Daniel Stenberg (19 Feb 2020)
- connect: remove some spurious infof() calls
  
  As they were added primarily for debugging, they provide little use for
  users.
  
  Closes #4951

- HTTP-COOKIES: mention that a trailing newline is required
  
  ... so that we know we got the whole and not a partial line.
  
  Also, changed the formatting of the fields away from a table again since
  the table format requires a github-markdown tool version that we don't
  run on the web server atm.
  
  Reported-by: Sunny Bean
  Fixes #4946
  Closes #4947

- nit: Copyright year out of date
  
  Follow-up to 1fc0617dcc

Jay Satiro (18 Feb 2020)
- tool_util: Improve Windows version of tvnow()
  
  - Change tool_util.c tvnow() for Windows to match more closely to
    timeval.c Curl_now().
  
  - Create a win32 init function for the tool, since some initialization
    is required for the tvnow() changes.
  
  Prior to this change the monotonic time function used by curl in Windows
  was determined at build-time and not runtime. That was a problem because
  when curl was built targeted for compatibility with old versions of
  Windows (eg _WIN32_WINNT < 0x0600) it would use GetTickCount which wraps
  every 49.7 days that Windows has been running.
  
  This change makes curl behave similar to libcurl's tvnow function, which
  determines at runtime whether the OS is Vista+ and if so calls
  QueryPerformanceCounter instead. (Note QueryPerformanceCounter is used
  because it has higher resolution than the more obvious candidate
  GetTickCount64). The changes to tvnow are basically a copy and paste but
  the types in some cases are different.
  
  Ref: https://github.com/curl/curl/issues/3309
  
  Closes https://github.com/curl/curl/pull/4847

Daniel Stenberg (18 Feb 2020)
- SOCKS: fix typo in printf formatting
  
  Follow-up to 4a4b63daa
  
  Reported-by: Peter Piekarski
  Bug: https://github.com/curl/curl/commit/4a4b63daaa01ef59b131d91e8e6e6dfe275c0f08#r37351330

- CURLOPT_REDIR_PROTOCOLS.3: update the DEFAULT section
  
  to be in sync with the description above
  
  Reported-by: Joonas Kuorilehto
  Fixes #4943
  Closes #4945

- docs/GOVERNANCE: refreshed + added "donations" and "commercial support"

- altsvc: make saving the cache an atomic operation
  
  ... by writing the file to temp name then rename to the final when done.
  
  Assisted-by: Jay Satiro
  Fixes #4936
  Closes #4942

- rename: a new file for Curl_rename()
  
  And make the cookie save function use it.

- cookies: make saving atomic with a rename
  
  Saves the file as "[filename].[8 random hex digits].tmp" and renames
  away the extension when done.
  
  Co-authored-by: Jay Satiro
  Reported-by: Mike Frysinger
  Fixes #4914
  Closes #4926

- RELEASE-NOTES: synced

- socks: make the connect phase non-blocking
  
  Removes two entries from KNOWN_BUGS.
  
  Closes #4907

- multi: if Curl_readwrite sets 'comeback' use expire, not loop
  
  Otherwise, a very fast single transfer ricks starving out other
  concurrent transfers.
  
  Closes #4927

- ftp: convert 'sock_accepted' to a plain boolean
  
  This was an array indexed with sockindex but it was only ever used for
  the secondary socket.
  
  Closes #4929

Jay Satiro (15 Feb 2020)
- CURLINFO_COOKIELIST.3: Fix example
  
  Prior to this change the example would try to import cookies from stdin,
  which wasn't what was intended.
  
  Reported-by: 3dyd@users.noreply.github.com
  
  Fixes https://github.com/curl/curl/issues/4930

Daniel Stenberg (14 Feb 2020)
- TODO: Paged searches on LDAP server
  
  Closes #4452

- TODO: CURLOPT_SSL_CTX_FUNCTION for LDAPS
  
  Closes #4108

- azure: disable brotli on the macos debug-builds
  
  Because of:
  
  brotli/decode.h:204:33: error: variable length array used [-Werror,-Wvla]
      const uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(encoded_size)],
  
  Closes #4925

Steve Holme (13 Feb 2020)
- tool_home: Fix the copyright year being out of date
  
  Follow up to 9dc350b6.

Jay Satiro (12 Feb 2020)
- tool_homedir: Change GetEnv() to use libcurl's curl_getenv()
  
  - Deduplicate GetEnv() code.
  
  - On Windows change ultimate call to use Windows API
    GetEnvironmentVariable() instead of C runtime getenv().
  
  Prior to this change both libcurl and the tool had their own GetEnv
  which over time diverged. Now the tool's GetEnv is a wrapper around
  curl_getenv (libcurl API function which is itself a wrapper around
  libcurl's GetEnv).
  
  Furthermore this change fixes a bug in that Windows API
  GetEnvironmentVariable() is called instead of C runtime getenv() to get
  the environment variable since some changes aren't always visible to the
  latter.
  
  Reported-by: Christoph M. Becker
  
  Fixes https://github.com/curl/curl/issues/4774
  Closes https://github.com/curl/curl/pull/4863

Daniel Stenberg (12 Feb 2020)
- strerror.h: Copyright year out of date
  
  Follow-up to 1c4fa67e8a8fcf6

Jay Satiro (12 Feb 2020)
- strerror: Increase STRERROR_LEN 128 -> 256
  
  STRERROR_LEN is the constant used throughout the library to set the size
  of the buffer on the stack that the curl strerror functions write to.
  
  Prior to this change some extended length Windows error messages could
  be truncated.
  
  Closes https://github.com/curl/curl/pull/4920

- multi: fix outdated comment
  
  - Do not say that conn->data is "cleared" by multi_done().
  
  If the connection is in use then multi_done assigns another easy handle
  still using the connection to conn->data, therefore in that case it is
  not cleared.
  
  Closes https://github.com/curl/curl/pull/4901

- easy: remove dead code
  
  multi is already assigned to data->multi by curl_multi_add_handle.
  
  Closes https://github.com/curl/curl/pull/4900

Daniel Stenberg (12 Feb 2020)
- create-dirs.d: mention the mode
  
  Reported-by: Dan Jacobson
  Fixes #4766
  Closes #4916

- CURLOPT_ALTSVC_CTRL.3: fix the DEFAULT wording
  
  Assisted-by: Jay Satiro
  Reported-by: Craig Andrews
  Fixes #4909
  Closes #4910

- RELEASE-NOTES: synced

Steve Holme (9 Feb 2020)
- smtp: Simplify the MAIL command and avoid a duplication of send strings
  
  This avoids the duplication of strings when the optional AUTH and SIZE
  parameters are required. It also assists with the modifications that
  are part of #4892.
  
  Closes #4903

Daniel Stenberg (9 Feb 2020)
- altsvc: keep a copy of the file name to survive handle reset
  
  The alt-svc cache survives a call to curl_easy_reset fine, but the file
  name to use for saving the cache was cleared. Now the alt-svc cache has
  a copy of the file name to survive handle resets.
  
  Added test 1908 to verify.
  
  Reported-by: Craig Andrews
  Fixes #4898
  Closes #4902

Steve Holme (9 Feb 2020)
- url: Include the failure reason when curl_win32_idn_to_ascii() fails
  
  Provide the failure reason in the failf() info just as we do for the
  libidn2 version of code.
  
  Closes #4899

Jay Satiro (9 Feb 2020)
- asyn-thread: remove dead code

Daniel Stenberg (8 Feb 2020)
- [Emil Engler brought this change]

  github: Instructions to post "uname -a" on Unix systems in issues
  
  Closes #4896

- [Cristian Greco brought this change]

  configure.ac: fix comments about --with-quiche
  
  A simple s/nghttp3/quiche in some comments of --with-quiche.
  Looks like a copy-paste error from --with-nghttp3.
  
  Closes #4897

Steve Holme (7 Feb 2020)
- checksrc.bat: Fix not being able to run script from the main curl directory
  
  If the script was ran from the main curl directory rather then the
  projects directory then the script would simply exit without error:
  
  C:\url> projects\checksrc.bat
  
  The user would either need to change to the projects directory,
  explicitly specify the current working directory, or perform a
  oneline hacky workaround:
  
  C:\url> cd projects
  C:\url\projects> checksrc.bat
  
  C:\url> checksrc.bat %cd%
  
  C:\url> pushd projects & checksrc.bat & popd
  
  Closes #4894

Daniel Stenberg (7 Feb 2020)
- [Pierre-Yves Bigourdan brought this change]

  digest: Do not quote algorithm in HTTP authorisation
  
  RFC 7616 section 3.4 (The Authorization Header Field) states that "For
  historical reasons, a sender MUST NOT generate the quoted string syntax
  for the following parameters: algorithm, qop, and nc". This removes the
  quoting for the algorithm parameter.
  
  Reviewed-by: Steve Holme
  Closes #4890

- ftp: remove the duplicated user/password struct fields
  
  Closes #4887

- ftp: remove superfluous checking for crlf in user or pwd
  
  ... as this is already done much earlier in the URL parser.
  
  Also add test case 894 that verifies that pop3 with an encodedd CR in
  the user name is rejected.
  
  Closes #4887

Steve Holme (6 Feb 2020)
- ntlm_wb: Use Curl_socketpair() for greater portability
  
  Reported-by: Daniel Stenberg
  Closes #4886

Daniel Stenberg (5 Feb 2020)
- [Frank Gevaerts brought this change]

  contributors: Also include people who contributed to curl-www
  
  Closes #4884

- [Frank Gevaerts brought this change]

  contrithanks: Use the most recent tag by default
  
  (similar to 5296abe)
  
  Closes #4883

- scripts: use last set tag if none given
  
  Makes 'delta' and 'contributors.sh' easier to use.
  
  Make the delta script invoke contrithanks to get current number of
  contributors instead of counting THANKS, for accuracy.
  
  Closes #4881

- ftp: shrink temp buffers used for PORT
  
  These two stack based buffers only need to be 46 + 66 bytes instead of
  256 + 1024.
  
  Closes #4880

- curl: error on --alt-svc use w/o support
  
  Make the tool check for alt-svc support at run-time and return error
  accordingly if not present when the option is used.
  
  Reported-by: Harry Sintonen
  Closes #4878

- docs/HTTP3: add --enable-alt-svc to curl's configure

- RELEASE-PROCEDURE: feature win is closed post-release a few days
  
  We've tried to uphold this already but let's make it official by
  publicly stating this is the way we do it.
  
  Closes #4877

- altsvc: set h3 version at a common single spot
  
  ... and move the #ifdefs out of the functions. Addresses the fact they
  were different before this change.
  
  Reported-by: Harry Sintonen
  Closes #4876

- [Harry Sintonen brought this change]

  altsvc: improved header parser
  
  - Fixed the flag parsing to apply to specific alternative entry only, as
  per RFC. The earlier code would also get totally confused by
  multiprotocol header, parsing flags from the wrong part of the header.
  
  - Fixed the parser terminating on unknown protocols, instead of skipping
  them.
  
  - Fixed a busyloop when protocol-id was present without an equal sign.
  
  Closes #4875

- [Harry Sintonen brought this change]

  ngtcp2: fixed to only use AF_INET6 when ENABLE_IPV6

- docs/HTTP3: update the OpenSSL branch to use for ngtcp2
  
  Reported-by: James Fuller

Steve Holme (4 Feb 2020)
- ntlm: Pass the Curl_easy structure to the private winbind functions
  
  ...rather than the full conndata structure.

Daniel Stenberg (4 Feb 2020)
- RELEASE-NOTES: synced

- tool_operhlp: Copyright year out of date, should be 2020
  
  Follow-up from 2bc373740a3

- [Orgad Shaneh brought this change]

  curl: avoid using strlen for testing if a string is empty
  
  Closes #4873

Steve Holme (3 Feb 2020)
- ntlm: Ensure the HTTP header data is not stored in the challenge/response

Marcel Raad (3 Feb 2020)
- openssl: remove redundant assignment
  
  Fixes a scan-build failure on Bionic.
  
  Closes https://github.com/curl/curl/pull/4872

- travis: update non-OpenSSL Linux jobs to Bionic
  
  For the OpenSSL builds, test 323 [TLS-SRP to non-TLS-SRP server] is
  failing with "curl returned 52, when expecting 35".
  
  Closes https://github.com/curl/curl/pull/4872

Dan Fandrich (3 Feb 2020)
- cirrus: Add some missing semicolons
  
  Newlines aren't preserved in this section so they're needed to separate
  commands. The exports luckily worked anyway as a single long line, but
  erroneously exported a variable called "export"
  [skip ci]

Daniel Gustafsson (2 Feb 2020)
- [Pedro Monreal brought this change]

  cleanup: fix typos and wording in docs and comments
  
  Closes #4869
  Reviewed-by: Emil Engler and Daniel Gustafsson

Steve Holme (2 Feb 2020)
- ntlm: Move the winbind data into the NTLM data structure
  
  To assist with adding winbind support to the SASL NTLM authentication,
  move the winbind specific data out of conndata into ntlmdata.

Daniel Stenberg (30 Jan 2020)
- quiche: Copyright year out of date
  
  Follow-up to 7fc63d72333a

- altsvc: use h3-25
  
  Closes #4868

- [Alessandro Ghedini brought this change]

  quiche: update to draft-25
  
  Closes #4867

- ngtcp2: update to git master and its draft-25 support
  
  Closes #4865

- cookie: check __Secure- and __Host- case sensitively
  
  While most keywords in cookies are case insensitive, these prefixes are
  specified explicitly to get checked "with a case-sensitive match".
  
  (From the 6265bis document in progress)
  
  Ref: https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-04
  Closes #4864

- KNOWN_BUGS: Multiple methods in a single WWW-Authenticate: header

- oauth2-bearer.d: works for HTTP too
  
  Reported-by: Mischa Salle
  Bug: https://curl.haxx.se/mail/lib-2020-01/0070.html
  Closes #4862

- multi_done: if multiplexed, make conn->data point to another transfer
  
  ... since the current transfer is being killed. Setting to NULL is
  wrong, leaving it pointing to 'data' is wrong since that handle might be
  about to get freed.
  
  Fixes #4845
  Closes #4858
  Reported-by: dmitrmax on github

- location.d: the method change is from POST to GET only
  
  Not from generic non-GET to GET.
  
  Reported-by: Andrius Merkys
  Ref: #4859
  Closes #4861

- urlapi: guess scheme correct even with credentials given
  
  In the "scheme-less" parsing case, we need to strip off credentials
  first before we guess scheme based on the host name!
  
  Assisted-by: Jay Satiro
  Fixes #4856
  Closes #4857

- global_init: move the IPv6 works status bool to multi handle
  
  Previously it was stored in a global state which contributed to
  curl_global_init's thread unsafety. This boolean is now instead figured
  out in curl_multi_init() and stored in the multi handle. Less effective,
  but thread safe.
  
  Closes #4851

- [Jay Satiro brought this change]

  README: mention that the docs is in docs/
  
  Reported-by: Austin Green
  Fixes #4830
  Closes #4853

- curl.h: define CURL_WIN32 on windows
  
  ... so that the subsequent logic below can use a single known define to know
  when built on Windows (as we don't define WIN32 anymore).
  
  Follow-up to 1adebe7886ddf20b
  
  Reported-by: crazydef on github
  Assisted-by: Marcel Raad
  Fixes #4854
  Closes #4855

- RELEASE-NOTES: synced

- [Jon Rumsey brought this change]

  urldata: do string enums without #ifdefs for build scripts
  
  ... and check for inconsistencies for OS400 at build time with the new
  chkstrings tool.
  
  Closes #4822

- curl: make the -# spaceship bar not wrap the line
  
  The fixed-point math made us lose precision and thus a too high index
  value could be used for outputting the hashtags which could overwrite
  the newline.
  
  The fix increases the precision in the sine table (*100) and the
  associated position math.
  
  Reported-by: Andrew Potter
  Fixes #4849
  Closes #4850

- global_init: assume the EINTR bit by default
  
  - Removed from global_init since it isn't thread-safe. The symbol will
    still remain to not break compiles, it just won't have any effect going
    forward.
  
  - make the internals NOT loop on EINTR (the opposite from previously).
    It only risks returning from the select/poll/wait functions early, and that
    should be risk-free.
  
  Closes #4840

- [Peter Piekarski brought this change]

  conn: do not reuse connection if SOCKS proxy credentials differ
  
  Closes #4835

- llist: removed unused Curl_llist_move()
  
  (and the corresponding unit test)
  
  Closes #4842

- conncache: removed unused Curl_conncache_bundle_size()

- strcase: turn Curl_raw_tolower into static
  
  Only ever used from within this file.

- singleuse.pl: support new API functions, fix curl_dbg_ handling

- wolfssh: make it init properly via Curl_ssh_init()
  
  Closes #4846

- [Aron Rotteveel brought this change]

  form.d: fix two minor typos
  
  Closes #4843

- openssl: make CURLINFO_CERTINFO not truncate x509v3 fields
  
  Avoid "reparsing" the content and instead deliver more exactly what is
  provided in the certificate and avoid truncating the data after 512
  bytes as done previously. This no longer removes embedded newlines.
  
  Fixes #4837
  Reported-by: bnfp on github
  Closes #4841

Jay Satiro (23 Jan 2020)
- CURLOPT_PROXY_SSL_OPTIONS.3: Sync with CURLOPT_SSL_OPTIONS.3
  
  - Copy CURLOPT_SSL_OPTIONS.3 description to CURLOPT_PROXY_SSL_OPTIONS.3.
  
  Prior to this change CURLSSLOPT_NO_PARTIALCHAIN was missing from the
  CURLOPT_PROXY_SSL_OPTIONS description.

Daniel Stenberg (22 Jan 2020)
- mk-ca-bundle: add support for CKA_NSS_SERVER_DISTRUST_AFTER
  
  For now, no cert in the bundle actually sets a date there...
  
  Co-Authored-by: Jay Satiro
  Reported-by: Christian Heimes
  Fixes #4834
  Closes #4836

- RELEASE-NOTES: synced

- [Pavel Volgarev brought this change]

  smtp: Allow RCPT TO command to fail for some recipients
  
  Introduces CURLOPT_MAIL_RCPT_ALLLOWFAILS.
  
  Verified with the new tests 3002-3007
  
  Closes #4816

- copyright: fix year ranges
  
  follow-up from dea17b519d (one of these days I'll learn to check before
  I push)

- [nao brought this change]

  http: move "oauth_bearer" from connectdata to Curl_easy
  
  Fixes the bug where oauth_bearer gets deallocated when we re-use a
  connection.
  
  Closes #4824

- [Emil Engler brought this change]

  curl: Let -D merge headers in one file again
  
  Closes #4762
  Fixes #4753

- data.d: remove "Multiple files can also be specified"
  
  It is superfluous and could even be misleading.
  
  Bug: https://curl.haxx.se/mail/archive-2020-01/0016.html
  Reported-by: Mike Norton
  Closes #4832

Marcel Raad (20 Jan 2020)
- CMake: support specifying the target Windows version
  
  Previously, it was only possible to set it to Windows Vista or XP by
  setting the option `ENABLE_INET_PTON` to `ON` resp. `OFF`.
  Use a new cache variable `CURL_TARGET_WINDOWS_VERSION` to be able to
  explicitly set the target Windows version. `ENABLE_INET_PTON` is
  ignored in this case.
  
  Ref: https://github.com/curl/curl/pull/1639#issuecomment-313039352
  Ref: https://github.com/curl/curl/pull/4607#issuecomment-557541456
  Closes https://github.com/curl/curl/pull/4815

Daniel Stenberg (20 Jan 2020)
- http.h: Copyright year out of date, should be 2020
  
  Follow-up to 7ff9222ced8c

- [加藤郁之 brought this change]

  HTTP: increase EXPECT_100_THRESHOLD to 1Mb
  
  Mentioned: https://curl.haxx.se/mail/lib-2020-01/0050.html
  
  Closes #4814

- ROADMAP: thread-safe `curl_global_init()`
  
  I'd like to see this happen.

- RELEASE-NOTES: synced

- wolfssl: use the wc-prefixed symbol alternatives
  
  The symbols without wc_ prefix are not always provided.
  
  Ref: https://github.com/wolfSSL/wolfssl/issues/2744
  
  Closes #4827

- polarssl: removed
  
  As detailed in DEPRECATE.md, the polarssl support is now removed after
  having been disabled for 6 months and nobody has missed it.
  
  The threadlock files used by mbedtls are renamed to an 'mbedtls' prefix
  instead of the former 'polarssl' and the common functions that
  previously were shared between mbedtls and polarssl and contained the
  name 'polarssl' have now all been renamed to instead say 'mbedtls'.
  
  Closes #4825

Marcel Raad (16 Jan 2020)
- libssh2: fix variable type
  
  This led to a conversion warning on 64-bit MinGW, which has 32-bit
  `long` but 64-bit `size_t`.
  
  Closes https://github.com/curl/curl/pull/4823

Daniel Stenberg (16 Jan 2020)
- curl:progressbarinit: ignore column width from terminals < 20
  
  To avoid division by zero - or other issues.
  
  Reported-by: Daniel Marjamäki
  Closes #4818

- wolfssh: set the password correctly for PASSWORD auth

- wolfssh: remove fprintf() calls (and uses of __func__)

Marcel Raad (14 Jan 2020)
- CMake: use check_symbol_exists also for inet_pton
  
  It doesn't make much sense to only check if the function can be linked
  when it's not declared in any header and that is treated as an error.
  With the correct target Windows version set, the function is declared
  in ws2tcpip.h and the comment above the modified block is invalid.
  
  Also, move the definition of `_WIN32_WINNT` up to before all symbol
  availability checks so that we don't have to care which ones must be
  done after it.
  
  Tested with Visual Studio 2019 and current MinGW-w64.
  
  Closes https://github.com/curl/curl/pull/4808

Jay Satiro (13 Jan 2020)
- schannel_verify: Fix alt names manual verify for UNICODE builds
  
  Follow-up to 29e40a6 from two days ago, which added that feature for
  Windows 7 and earlier. The bug only occurred in same.
  
  Ref: https://github.com/curl/curl/pull/4761

Daniel Stenberg (13 Jan 2020)
- HTTP-COOKIES.md: describe the cookie file format
  
  ... and refer to that file from from CURLOPT_COOKIEFILE.3 and
  CURLOPT_COOKIELIST.3
  
  Assisted-by: Jay Satiro
  Reported-by: bsammon on github
  Fixes #4805
  Closes #4806

- [Tobias Hieta brought this change]

  CMake: Add support for CMAKE_LTO option.
  
  This enables Link Time Optimization. LTO is a proven technique for
  optimizing across compilation units.
  
  Closes #4799

- RELEASE-NOTES: synced

- ConnectionExists: respect the max_concurrent_streams limits
  
  A regression made the code use 'multiplexed' as a boolean instead of the
  counter it is intended to be. This made curl try to "over-populate"
  connections with new streams.
  
  This regression came with 41fcdf71a1, shipped in curl 7.65.0.
  
  Also, respect the CURLMOPT_MAX_CONCURRENT_STREAMS value in the same
  check.
  
  Reported-by: Kunal Ekawde
  Fixes #4779
  Closes #4784

- curl: make #0 not output the full URL
  
  It was not intended nor documented!
  
  Added test 1176 to verify.
  
  Reported-by: vshmuk on hackerone
  
  Closes #4812

- wolfSSH: new SSH backend
  
  Adds support for SFTP (not SCP) using WolfSSH.
  
  Closes #4231

- curl: remove 'config' field from OutStruct
  
  As it was just unnecessary duplicated information already stored in the
  'per_transfer' struct and that's around mostly anyway.
  
  The duplicated pointer caused problems when the code flow was aborted
  before the dupe was filled in and could cause a NULL pointer access.
  
  Reported-by: Brian Carpenter
  Fixes #4807
  Closes #4810

- misc: Copyright year out of date, should be 2020
  
  Follow-up to recent commits
  
  [skip ci]

Jay Satiro (11 Jan 2020)
- [Santino Keupp brought this change]

  libssh2: add support for forcing a hostkey type
  
  - Allow forcing the host's key type found in the known_hosts file.
  
  Currently, curl (with libssh2) does not take keys from your known_hosts
  file into account when talking to a server. With this patch the
  known_hosts file will be searched for an entry matching the hostname
  and, if found, libssh2 will be told to claim this key type from the
  server.
  
  Closes https://github.com/curl/curl/pull/4747

- [Nicolas Guillier brought this change]

  cmake: Improve libssh2 check on Windows
  
  - Add "libssh2" name to FindLibSSH2 library search.
  
  On Windows systems, libSSH2 CMake installation may name the library
  "LibSSH2".
  
  Prior to this change cmake only checked for name "ssh2". On Linux that
  works fine because it will prepend the "lib", but it doesn't do that on
  Windows.
  
  Closes https://github.com/curl/curl/pull/4804

- [Faizur Rahman brought this change]

  schannel: Make CURLOPT_CAINFO work better on Windows 7
  
  - Support hostname verification via alternative names (SAN) in the
    peer certificate when CURLOPT_CAINFO is used in Windows 7 and earlier.
  
  CERT_NAME_SEARCH_ALL_NAMES_FLAG doesn't exist before Windows 8. As a
  result CertGetNameString doesn't quite work on those versions of
  Windows. This change provides an alternative solution for
  CertGetNameString by iterating through CERT_ALT_NAME_INFO for earlier
  versions of Windows.
  
  Prior to this change many certificates failed the hostname validation
  when CURLOPT_CAINFO was used in Windows 7 and earlier. Most certificates
  now represent multiple hostnames and rely on the alternative names field
  exclusively to represent their hostnames.
  
  Reported-by: Jeroen Ooms
  
  Fixes https://github.com/curl/curl/issues/3711
  Closes https://github.com/curl/curl/pull/4761

- [Emil Engler brought this change]

  ngtcp2: Add an error code for QUIC connection errors
  
  - Add new error code CURLE_QUIC_CONNECT_ERROR for QUIC connection
    errors.
  
  Prior to this change CURLE_FAILED_INIT was used, but that was not
  correct.
  
  Closes https://github.com/curl/curl/pull/4754

- multi: Change curl_multi_wait/poll to error on negative timeout
  
  - Add new error CURLM_BAD_FUNCTION_ARGUMENT and return that error when
    curl_multi_wait/poll is passed timeout param < 0.
  
  Prior to this change passing a negative value to curl_multi_wait/poll
  such as -1 could cause the function to wait forever.
  
  Reported-by: hamstergene@users.noreply.github.com
  
  Fixes https://github.com/curl/curl/issues/4763
  
  Closes https://github.com/curl/curl/pull/4765

- [Marc Aldorasi brought this change]

  cmake: Enable SMB for Windows builds
  
  - Define USE_WIN32_CRYPTO by default. This enables SMB.
  
  - Show whether SMB is enabled in the "Enabled features" output.
  
  - Fix mingw compiler warning for call to CryptHashData by casting away
    const param. mingw CryptHashData prototype is wrong.
  
  Closes https://github.com/curl/curl/pull/4717

- vtls: Refactor Curl_multissl_version to make the code clearer
  
  Reported-by: Johannes Schindelin
  
  Ref: https://github.com/curl/curl/pull/3863#pullrequestreview-241395121
  
  Closes https://github.com/curl/curl/pull/4803

Daniel Stenberg (10 Jan 2020)
- fix: Copyright year out of date, should be 2020
  
  Follow-up to 875314ed0bf3b

Marcel Raad (10 Jan 2020)
- hostip: move code to resolve IP address literals to `Curl_resolv`
  
  The code was duplicated in the various resolver backends.
  
  Also, it was called after the call to `Curl_ipvalid`, which matters in
  case of `CURLRES_IPV4` when called from `connect.c:bindlocal`. This
  caused test 1048 to fail on classic MinGW.
  
  The code ignores `conn->ip_version` as done previously in the
  individual resolver backends.
  
  Move the call to the `resolver_start` callback up to appease test 655,
  which wants it to be called also for literal addresses.
  
  Closes https://github.com/curl/curl/pull/4798

Daniel Stenberg (9 Jan 2020)
- scripts/delta: adapt to new public header layout

- test1167: verify global symbols in public headers are curl prefixed
  
  ... using the new badsymbols.pl perl script
  
  Fixes #4793
  Closes #4794

- libtest/mk-lib1521: adapt to new public header layout

- include: remove non-curl prefixed defines
  
  ...requires some rearranging of the setup of CURLOPT_ and CURLMOPT_
  enums.

- curl.h: remove WIN32 define
  
  It isn't our job to define this in a public header - and it defines a
  name outside of our naming scope.

- tool_dirhie.c: fix the copyright year range
  
  Follow-up to: 4027bd72d9

- bump: work towards 7.69.0 is started

Jay Satiro (9 Jan 2020)
- tool_dirhie: Allow directory traversal during creation
  
  - When creating a directory hierarchy do not error when mkdir fails due
    to error EACCESS (13) "access denied".
  
  Some file systems allow for directory traversal; in this case that it
  should be possible to create child directories when permission to the
  parent directory is restricted.
  
  This is a regression caused by me in f16bed0 (precedes curl-7_61_1).
  Basically I had assumed that if a directory already existed it would
  fail only with error EEXIST, and not error EACCES. The latter may
  happen if the directory exists but has certain restricted permissions.
  
  Reported-by: mbeifuss@users.noreply.github.com
  
  Fixes https://github.com/curl/curl/issues/4796
  Closes https://github.com/curl/curl/pull/4797

Daniel Stenberg (9 Jan 2020)
- KNOWN_BUGS: AUTH PLAIN for SMTP is not working on all servers
  
  Closes #4080

- docs/RELEASE-PROCEDURE.md: pushed some release dates
  
  Ref: https://curl.haxx.se/mail/lib-2020-01/0031.html

- runtests: make random seed fixed for a month
  
  When using randomized features of runtests (-R and --shallow) it is
  useful to have a fixed random seed to make sure for example extra
  commits in a branch or a rebase won't change the seed that would make
  repeated runs work differently.
  
  As it is also useful to change seed sometimes, the default seed is now
  determined based on the current month (and first line curl -V
  output). When the month changes, so will the random seed.
  
  The specific seed is also shown in the standard test suite top header
  and it can be set explictly with the new --seed=[num] option so that the
  exact order of a previous run can be achieved.
  
  Closes #4734

- RELEASE-PROCEDURE.md: fix next release date (Feb 26)
  
  [skip ci]

Version 7.68.0 (8 Jan 2020)

Daniel Stenberg (8 Jan 2020)
- RELEASE-NOTES: 7.68.0

- THANKS: updated with names from the 7.68.0 release
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130

Daniel Stenberg (27 May 2019)
- [Maksim Stsepanenka brought this change]

  tests: make test 1420 and 1406 work with rtsp-disabled libcurl
  
  Closes #3948

Kamil Dudka (27 May 2019)
- [Hubert Kario brought this change]

  nss: allow to specify TLS 1.3 ciphers if supported by NSS
  
  Closes #3916

Daniel Stenberg (26 May 2019)
- RELEASE-NOTES: synced

- [Jay Satiro brought this change]

  Revert all SASL authzid (new feature) commits
  
  - Revert all commits related to the SASL authzid feature since the next
    release will be a patch release, 7.65.1.
  
  Prior to this change CURLOPT_SASL_AUTHZID  / --sasl-authzid was destined
  for the next release, assuming it would be a feature release 7.66.0.
  However instead the next release will be a patch release, 7.65.1 and
  will not contain any new features.
  
  After the patch release after the reverted commits can be restored by
  using cherry-pick:
  
  git cherry-pick a14d72c a9499ff 8c1cc36 c2a8d52 0edf690
  
  Details for all reverted commits:
  
  Revert "os400: take care of CURLOPT_SASL_AUTHZID in curl_easy_setopt_ccsid()."
  
  This reverts commit 0edf6907ae37e2020722e6f61229d8ec64095b0a.
  
  Revert "tests: Fix the line endings for the SASL alt-auth tests"
  
  This reverts commit c2a8d52a1356a722ff9f4aeb983cd4eaf80ef221.
  
  Revert "examples: Added SASL PLAIN authorisation identity (authzid) examples"
  
  This reverts commit 8c1cc369d0c7163c6dcc91fd38edfea1f509ae75.
  
  Revert "curl: --sasl-authzid added to support CURLOPT_SASL_AUTHZID from the tool"
  
  This reverts commit a9499ff136d89987af885e2d7dff0a066a3e5817.
  
  Revert "sasl: Implement SASL authorisation identity via CURLOPT_SASL_AUTHZID"
  
  This reverts commit a14d72ca2fec5d4eb5a043936e4f7ce08015c177.

- [dbrowndan brought this change]

  FAQ: more minor updates and spelling fixes
  
  Closes #3937

- RELEASE-NOTES: synced

- sectransp: handle errSSLPeerAuthCompleted from SSLRead()
  
  Reported-by: smuellerDD on github
  Fixes #3932
  Closes #3933

GitHub (24 May 2019)
- [Gisle Vanem brought this change]

  Fix typo.

Daniel Stenberg (23 May 2019)
- tool_setopt: for builds with disabled-proxy, skip all proxy setopts()
  
  Reported-by: Marcel Raad
  Fixes #3926
  Closes #3929

Steve Holme (23 May 2019)
- winbuild: Use two space indentation
  
  Closes #3930

GitHub (23 May 2019)
- [Gisle Vanem brought this change]

  tool_parse_cfg: Avoid 2 fopen() for WIN32
  
  Using the memdebug.h mem-leak feature, I noticed 2 calls like:
    FILE tool_parsecfg.c:70 fopen("c:\Users\Gisle\AppData\Roaming\_curlrc","rt")
    FILE tool_parsecfg.c:114 fopen("c:\Users\Gisle\AppData\Roaming\_curlrc","rt")
  
  No need for 'fopen(), 'fclose()' and a 'fopen()' yet again.

Daniel Stenberg (23 May 2019)
- md4: include the mbedtls config.h to get the MD4 info

- md4: build correctly with openssl without MD4
  
  Reported-by: elsamuko at github
  Fixes #3921
  Closes #3922

Patrick Monnerat (23 May 2019)
- os400: take care of CURLOPT_SASL_AUTHZID in curl_easy_setopt_ccsid().

Daniel Stenberg (23 May 2019)
- .github/FUNDING: mention our opencollective "home" [ci skip]

Marcel Raad (23 May 2019)
- [Zenju brought this change]

  config-win32: add support for if_nametoindex and getsockname
  
  Closes https://github.com/curl/curl/pull/3923

Jay Satiro (23 May 2019)
- tests: Fix the line endings for the SASL alt-auth tests
  
  - Change data and protocol sections to CRLF line endings.
  
  Prior to this change the tests would fail or hang, which is because
  certain sections such as protocol require CRLF line endings.
  
  Follow-up to a9499ff from today which added the tests.
  
  Ref: https://github.com/curl/curl/pull/3790

Daniel Stenberg (23 May 2019)
- url: fix bad #ifdef
  
  Regression since e91e48161235272ff485.
  
  Reported-by: Tom Greenslade
  Fixes #3924
  Closes #3925

- Revert "progress: CURL_DISABLE_PROGRESS_METER"
  
  This reverts commit 3b06e68b7734cb10a555f9d7e804dd5d808236a4.
  
  Clearly this change wasn't good enough as it broke CURLOPT_LOW_SPEED_LIMIT +
  CURLOPT_LOW_SPEED_TIME
  
  Reported-by: Dave Reisner
  
  Fixes #3927
  Closes #3928

Steve Holme (22 May 2019)
- examples: Added SASL PLAIN authorisation identity (authzid) examples

- curl: --sasl-authzid added to support CURLOPT_SASL_AUTHZID from the tool

- sasl: Implement SASL authorisation identity via CURLOPT_SASL_AUTHZID
  
  Added the ability for the calling program to specify the authorisation
  identity (authzid), the identity to act as, in addition to the
  authentication identity (authcid) and password when using SASL PLAIN
  authentication.
  
  Fixed #3653
  Closes #3790

Marc Hoersken (22 May 2019)
- tests: add support to test against OpenSSH for Windows
  
  Testing against OpenSSH for Windows requires v7.7.0.0 or newer
  due to the use of AllowUsers and DenyUsers. For more info see:
  https://github.com/PowerShell/Win32-OpenSSH/wiki/sshd_config

Daniel Stenberg (22 May 2019)
- bump: start on the next release

Marcel Raad (22 May 2019)
- examples: fix "clarify calculation precedence" warnings
  
  Closes https://github.com/curl/curl/pull/3919

- hiperfifo: remove unused variable
  
  Closes https://github.com/curl/curl/pull/3919

- examples: remove dead variable stores
  
  Closes https://github.com/curl/curl/pull/3919

- examples: reduce variable scopes
  
  Closes https://github.com/curl/curl/pull/3919

- http2-download: fix format specifier
  
  Closes https://github.com/curl/curl/pull/3919

Daniel Stenberg (22 May 2019)
- PolarSSL: deprecate support step 1. Removed from configure.
  
  Also removed mentions from most docs.
  
  Discussed: https://curl.haxx.se/mail/lib-2019-05/0045.html
  
  Closes #3888

- configure/cmake: check for if_nametoindex()
  
  - adds the check to cmake
  
  - fixes the configure check to work for cross-compiled windows builds
  
  Closes #3917

- parse_proxy: use the IPv6 zone id if given
  
  If the proxy string is given as an IPv6 numerical address with a zone
  id, make sure to use that for the connect to the proxy.
  
  Reported-by: Edmond Yu
  
  Fixes #3482
  Closes #3918

Version 7.65.0 (22 May 2019)

Daniel Stenberg (22 May 2019)
- RELEASE-NOTES: 7.65.0 release

- THANKS: from the 7.65.0 release-notes

- url: convert the zone id from a IPv6 URL to correct scope id
  
  Reported-by: GitYuanQu on github
  Fixes #3902
  Closes #3914

- configure: detect getsockname and getpeername on windows too
  
  Made detection macros for these two functions in the same style as other
  functions possibly in winsock in the hope this will work better to
  detect these functions when cross-compiling for Windows.
  
  Follow-up to e91e4816123
  
  Fixes #3913
  Closes #3915

Marcel Raad (21 May 2019)
- examples: remove unused variables
  
  Fixes Codacy/CppCheck warnings.
  
  Closes

Daniel Gustafsson (21 May 2019)
- udpateconninfo: mark variable unused
  
  When compiling without getpeername() or getsockname(), the sockfd
  paramter to Curl_udpateconninfo() became unused after commit e91e481612
  added ifdef guards.
  
  Closes #3910
  Fixes https://curl.haxx.se/dev/log.cgi?id=20190520172441-32196
  Reviewed-by: Marcel Raad, Daniel Stenberg

- ftp: move ftp_ccc in under featureflag
  
  Commit e91e48161235272ff485ff32bd048c53af731f43 moved ftp_ccc in under
  the FTP featureflag in the UserDefined struct, but vtls callsites were
  still using it unprotected.
  
  Closes #3912
  Fixes: https://curl.haxx.se/dev/log.cgi?id=20190520044705-29865
  Reviewed-by: Daniel Stenberg, Marcel Raad

Daniel Stenberg (20 May 2019)
- curl: report error for "--no-" on non-boolean options
  
  Reported-by: Olen Andoni
  Fixes #3906
  Closes #3907

- [Guy Poizat brought this change]

  mbedtls: enable use of EC keys
  
  Closes #3892

- lib1560: add tests for parsing URL with too long scheme
  
  Ref: #3905

- [Omar Ramadan brought this change]

  urlapi: increase supported scheme length to 40 bytes
  
  The longest currently registered URI scheme at IANA is 36 bytes long.
  
  Closes #3905
  Closes #3900

Marcel Raad (20 May 2019)
- lib: reduce variable scopes
  
  Fixes Codacy/CppCheck warnings.
  
  Closes https://github.com/curl/curl/pull/3872

- tool_formparse: remove redundant assignment
  
  Just initialize word_begin with the correct value.
  
  Closes https://github.com/curl/curl/pull/3873

- ssh: move variable declaration to where it's used
  
  This way, we need only one call to free.
  
  Closes https://github.com/curl/curl/pull/3873

- ssh-libssh: remove unused variable
  
  sock was only used to be assigned to fd_read.
  
  Closes https://github.com/curl/curl/pull/3873

Daniel Stenberg (20 May 2019)
- test332: verify the blksize fix

- tftp: use the current blksize for recvfrom()
  
  bug: https://curl.haxx.se/docs/CVE-2019-5436.html
  Reported-by: l00p3r on hackerone
  CVE-2019-5436

Daniel Gustafsson (19 May 2019)
- version: make ssl_version buffer match for multi_ssl
  
  When running a multi TLS backend build the version string needs more
  buffer space. Make the internal ssl_buffer stack buffer match the one
  in Curl_multissl_version() to allow for the longer string. For single
  TLS backend builds there is no use in extended to buffer. This is a
  fallout from #3863 which fixes up the multi_ssl string generation to
  avoid a buffer overflow when the buffer is too small.
  
  Closes #3875
  Reviewed-by: Daniel Stenberg <daniel@haxx.se>

Steve Holme (18 May 2019)
- http_ntlm_wb: Handle auth for only a single request
  
  Currently when the server responds with 401 on NTLM authenticated
  connection (re-used) we consider it to have failed.  However this is
  legitimate and may happen when for example IIS is set configured to
  'authPersistSingleRequest' or when the request goes thru a proxy (with
  'via' header).
  
  Implemented by imploying an additional state once a connection is
  re-used to indicate that if we receive 401 we need to restart
  authentication.
  
  Missed in fe6049f0.

- http_ntlm_wb: Cleanup handshake after clean NTLM failure
  
  Missed in 50b87c4e.

- http_ntlm_wb: Return the correct error on receiving an empty auth message
  
  Missed in fe20826b as it wasn't implemented in http.c in b4d6db83.
  
  Closes #3894

Daniel Stenberg (18 May 2019)
- curl: make code work with protocol-disabled libcurl
  
  Closes #3844

- libcurl: #ifdef away more code for disabled features/protocols

- progress: CURL_DISABLE_PROGRESS_METER

- hostip: CURL_DISABLE_SHUFFLE_DNS

- netrc: CURL_DISABLE_NETRC

Viktor Szakats (16 May 2019)
- docs: Markdown and misc improvements [ci skip]
  
  Approved-by: Daniel Stenberg
  Closes #3896

- docs/RELEASE-PROCEDURE: link to live iCalendar [ci skip]
  
  Ref: https://github.com/curl/curl/commit/0af41b40b2c7bd379b2251cbe7cd618e21fa0ea1#commitcomment-33563135
  Approved-by: Daniel Stenberg
  Closes #3895

Daniel Stenberg (16 May 2019)
- travis: add an osx http-only build
  
  Closes #3887

- cleanup: remove FIXME and TODO comments
  
  They serve very little purpose and mostly just add noise. Most of them
  have been around for a very long time. I read them all before removing
  or rephrasing them.
  
  Ref: #3876
  Closes #3883

- curl: don't set FTP options for FTP-disabled builds
  
  ... since libcurl has started to be totally unaware of options for
  disabled protocols they now return error.
  
  Bug: https://github.com/curl/curl/commit/c9c5304dd4747cbe75d2f24be85920d572fcb5b8#commitcomment-33533937
  
  Reported-by: Marcel Raad
  Closes #3886

Steve Holme (16 May 2019)
- http_ntlm_wb: Move the type-2 message processing into a dedicated function
  
  This brings the code inline with the other HTTP authentication mechanisms.
  
  Closes #3890

Daniel Stenberg (15 May 2019)
- RELEASE-NOTES: synced

- docs/RELEASE-PROCEDURE: updated coming releases dates [ci skip]

- CURLOPT_READFUNCTION.3: see also CURLOPT_UPLOAD_BUFFERSIZE [ci skip]
  
  Reported-by: Roy Bellingan
  Bug: #3885

- parse_proxy: use the URL parser API
  
  As we treat a given proxy as a URL we should use the unified URL parser
  to extract the parts out of it.
  
  Closes #3878

Steve Holme (15 May 2019)
- http_negotiate: Move the Negotiate state out of the negotiatedata structure
  
  Given that this member variable is not used by the SASL based protocols
  there is no need to have it here.
  
  Closes #3882

- http_ntlm: Move the NTLM state out of the ntlmdata structure
  
  Given that this member variable is not used by the SASL based protocols
  there is no need to have it here.

- url: Move the negotiate state type into a dedicated enum

- url: Remove duplicate clean up of the winbind variables in conn_shutdown()
  
  Given that Curl_disconnect() calls Curl_http_auth_cleanup_ntlm() prior
  to calling conn_shutdown() and it in turn performs this, there is no
  need to perform the same action in conn_shutdown().
  
  Closes #3881

Daniel Stenberg (14 May 2019)
- urlapi: require a non-zero host name length when parsing URL
  
  Updated test 1560 to verify.
  
  Closes #3880

- configure: error out if OpenSSL wasn't detected when asked for
  
  If --with-ssl is used and configure still couldn't enable SSL this
  creates an error instead of just silently ignoring the fact.
  
  Suggested-by: Isaiah Norton
  Fixes #3824
  Closes #3830

Daniel Gustafsson (14 May 2019)
- imap: Fix typo in comment

Steve Holme (14 May 2019)
- url: Remove unnecessary initialisation from allocate_conn()
  
  No need to set variables to zero as calloc() does this for us.
  
  Closes #3879

Daniel Stenberg (14 May 2019)
- CURLOPT_CAINFO.3: with Schannel, you want Windows 8 or later [ci skip]
  
  Clues-provided-by: Jay Satiro
  Clues-provided-by: Jeroen Ooms
  Fixes #3711
  Closes #3874

Daniel Gustafsson (13 May 2019)
- vtls: fix potential ssl_buffer stack overflow
  
  In Curl_multissl_version() it was possible to overflow the passed in
  buffer if the generated version string exceeded the size of the buffer.
  Fix by inverting the logic, and also make sure to not exceed the local
  buffer during the string generation.
  
  Closes #3863
  Reported-by: nevv on HackerOne/curl
  Reviewed-by: Jay Satiro
  Reviewed-by: Daniel Stenberg

Daniel Stenberg (13 May 2019)
- RELEASE-NOTES: synced

- appveyor: also build "/ci" branches like travis

- pingpong: disable more when no pingpong enabled

- proxy: acknowledge DISABLE_PROXY more

- parsedate: CURL_DISABLE_PARSEDATE

- sasl: only enable if there's a protocol enabled using it

- mime: acknowledge CURL_DISABLE_MIME

- wildcard: disable from build when FTP isn't present

- http: CURL_DISABLE_HTTP_AUTH

- base64: build conditionally if there are users

- doh: CURL_DISABLE_DOH

Steve Holme (12 May 2019)
- auth: Rename the various authentication clean up functions
  
  For consistency and to a avoid confusion.
  
  Closes #3869

Daniel Stenberg (12 May 2019)
- [Jay Satiro brought this change]

  docs/INSTALL: fix broken link [ci skip]
  
  Reported-by: Joombalaya on github
  Fixes #3818

Marcel Raad (12 May 2019)
- easy: fix another "clarify calculation precedence" warning
  
  I missed this one in commit 6b3dde7fe62ea5a557fd1fd323fac2bcd0c2e9be.

- build: fix "clarify calculation precedence" warnings
  
  Codacy/CppCheck warns about this. Consistently use parentheses as we
  already do in some places to silence the warning.
  
  Closes https://github.com/curl/curl/pull/3866

- cmake: restore C89 compatibility of CurlTests.c
  
  I broke it in d1b5cf830bfe169745721b21245d2217d2c2453e and
  97de97daefc2ed084c91eff34af2426f2e55e134.
  
  Reported-by: Viktor Szakats
  Ref: https://github.com/curl/curl/commit/97de97daefc2ed084c91eff34af2426f2e55e134#commitcomment-33499044
  Closes https://github.com/curl/curl/pull/3868

Steve Holme (11 May 2019)
- http_ntlm: Corrected the name of the include guard
  
  Missed in f0bdd72c.
  
  Closes #3867

- http_digest: Don't expose functions when HTTP and Crypto Auth are disabled
  
  Closes #3861

- http_negotiate: Don't expose functions when HTTP is disabled

Daniel Stenberg (11 May 2019)
- SECURITY-PROCESS: fix links [ci skip]

Marcel Raad (11 May 2019)
- CMake: suppress unused variable warnings
  
  I missed these in commit d1b5cf830bfe169745721b21245d2217d2c2453e.

Daniel Stenberg (11 May 2019)
- doh: disable DOH for the cases it doesn't work
  
  Due to limitations in Curl_resolver_wait_resolv(), it doesn't work for
  DOH resolves. This fix disables DOH for those.
  
  Limitation added to KNOWN_BUGS.
  
  Fixes #3850
  Closes #3857

Jay Satiro (11 May 2019)
- checksrc.bat: Ignore snprintf warnings in docs/examples
  
  .. because we allow snprintf use in docs/examples.
  
  Closes https://github.com/curl/curl/pull/3862

Steve Holme (10 May 2019)
- vauth: Fix incorrect function description for Curl_auth_user_contains_domain()
  
  ...and misalignment of these comments. From a78c61a4.
  
  Closes #3860

Jay Satiro (10 May 2019)
- Revert "multi: support verbose conncache closure handle"
  
  This reverts commit b0972bc.
  
  - No longer show verbose output for the conncache closure handle.
  
  The offending commit was added so that the conncache closure handle
  would inherit verbose mode from the user's easy handle. (Note there is
  no way for the user to set options for the closure handle which is why
  that was necessary.) Other debug settings such as the debug function
  were not also inherited since we determined that could lead to crashes
  if the user's per-handle private data was used on an unexpected handle.
  
  The reporter here says he has a debug function to capture the verbose
  output, and does not expect or want any output to stderr; however
  because the conncache closure handle does not inherit the debug function
  the verbose output for that handle does go to stderr.
  
  There are other plausible scenarios as well such as the user redirects
  stderr on their handle, which is also not inherited since it could lead
  to crashes when used on an unexpected handle.
  
  Short of allowing the user to set options for the conncache closure
  handle I don't think there's much we can safely do except no longer
  inherit the verbose setting.
  
  Bug: https://curl.haxx.se/mail/lib-2019-05/0021.html
  Reported-by: Kristoffer Gleditsch
  
  Ref: https://github.com/curl/curl/pull/3598
  Ref: https://github.com/curl/curl/pull/3618
  
  Closes https://github.com/curl/curl/pull/3856

Steve Holme (10 May 2019)
- ntlm: Fix misaligned function comments for Curl_auth_ntlm_cleanup()
  
  From 6012fa5a.
  
  Closes #3858

Daniel Stenberg (9 May 2019)
- BUG-BOUNTY: minor formatting fixes [ci skip]

- RELEASE-NOTES: synced

- BUG-BOUNTY.md: add the Dropbox "bonus" extra payout ability [ci skip]
  
  Closes #3839

Kamil Dudka (9 May 2019)
- http_negotiate: do not treat failure of gss_init_sec_context() as fatal
  
  Fixes #3726
  Closes #3849

- spnego_gssapi: fix return code on gss_init_sec_context() failure
  
  Fixes #3726
  Closes #3849

Steve Holme (9 May 2019)
- gen_resp_file.bat: Removed unnecessary @ from all but the first command
  
  There is need to use @ on every command once echo has been turned off.
  
  Closes #3854

Jay Satiro (8 May 2019)
- http: Ignore HTTP/2 prior knowledge setting for HTTP proxies
  
  - Do not switch to HTTP/2 for an HTTP proxy that is not tunnelling to
    the destination host.
  
  We already do something similar for HTTPS proxies by not sending h2. [1]
  
  Prior to this change setting CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE would
  incorrectly use HTTP/2 to talk to the proxy, which is not something we
  support (yet?). Also it's debatable whether or not that setting should
  apply to HTTP/2 proxies.
  
  [1]: https://github.com/curl/curl/commit/17c5d05
  
  Bug: https://github.com/curl/curl/issues/3570
  Bug: https://github.com/curl/curl/issues/3832
  
  Closes https://github.com/curl/curl/pull/3853

Marcel Raad (8 May 2019)
- travis: update mesalink build to xenial
  
  Closes https://github.com/curl/curl/pull/3842

Daniel Stenberg (8 May 2019)
- [Ricky Leverence brought this change]

  OpenSSL: Report -fips in version if OpenSSL is built with FIPS
  
  Older versions of OpenSSL report FIPS availabilty via an OPENSSL_FIPS
  define. It uses this define to determine whether to publish -fips at
  the end of the version displayed. Applications that utilize the version
  reported by OpenSSL will see a mismatch if they compare it to what curl
  reports, as curl is not modifying the version in the same way. This
  change simply adds a check to see if OPENSSL_FIPS is defined, and will
  alter the reported version to match what OpenSSL itself provides. This
  only appears to be applicable in versions of OpenSSL <1.1.1
  
  Closes #3771

Kamil Dudka (7 May 2019)
- [Frank Gevaerts brought this change]

  nss: allow fifos and character devices for certificates.
  
  Currently you can do things like --cert <(cat ./cert.crt) with (at least) the
  openssl backend, but that doesn't work for nss because is_file rejects fifos.
  
  I don't actually know if this is sufficient, nss might do things internally
  (like seeking back) that make this not work, so actual testing is needed.
  
  Closes #3807

Daniel Gustafsson (6 May 2019)
- test2100: Fix typos in test description

Daniel Stenberg (6 May 2019)
- ssh: define USE_SSH if SSH is enabled (any backend)
  
  Closes #3846

Steve Holme (5 May 2019)
- winbuild: Add our standard copyright header to the winbuild batch files

- makedebug: Fix ERRORLEVEL detection after running where.exe
  
  Closes #3838

Daniel Stenberg (5 May 2019)
- urlapi: add CURLUPART_ZONEID to set and get
  
  The zoneid can be used with IPv6 numerical addresses.
  
  Updated test 1560 to verify.
  
  Closes #3834

- [Taiyu Len brought this change]

  WRITEFUNCTION: add missing set_in_callback around callback
  
  Closes #3837

- RELEASE-NOTES: synced

- CURLMOPT_TIMERFUNCTION.3: warn about the recursive risk [ci skip]
  
  Reported-by: Ricardo Gomes
  
  Bug: #3537
  Closes #3836

- CURLOPT_CHUNK_BGN_FUNCTION.3: document the struct and time value
  
  The time field in the curl_fileinfo struct will always be zero. No code
  was ever implemented to actually convert the date string to a time_t.
  
  Fixes #3829
  Closes #3835

- OS400/ccsidcurl.c: code style fixes

- OS400/ccsidcurl: replace use of Curl_vsetopt
  
  (and make the code style comply)
  
  Fixes #3833

- urlapi: strip off scope id from numerical IPv6 addresses
  
  ... to make the host name "usable". Store the scope id and put it back
  when extracting a URL out of it.
  
  Also makes curl_url_set() syntax check CURLUPART_HOST.
  
  Fixes #3817
  Closes #3822

- RELEASE-NOTES: synced

- multiif.h: remove unused protos
  
  ... for functions related to pipelining. Those functions were removed in
  2f44e94efb3df.
  
  Closes #3828

- [Yiming Jing brought this change]

  travis: mesalink: temporarily disable test 3001
  
  ... due to SHA-1 signatures in test certs

- [Yiming Jing brought this change]

  travis: upgrade the MesaLink TLS backend to v1.0.0
  
  Closes #3823
  Closes #3776

- ConnectionExists: improve non-multiplexing use case
  
  - better log output
  
  - make sure multiplex is enabled for it to be used

- multi: provide Curl_multiuse_state to update information
  
  As soon as a TLS backend gets ALPN conformation about the specific HTTP
  version it can now set the multiplex situation for the "bundle" and
  trigger moving potentially queued up transfers to the CONNECT state.

- process_pending_handles: mark queued transfers as previously pending
  
  With transfers being queued up, we only move one at a a time back to the
  CONNECT state but now we mark moved transfers so that when a moved
  transfer is confirmed "successful" (it connected) it will trigger the
  move of another pending transfer. Previously, it would otherwise wait
  until the transfer was done before doing this. This makes queued up
  pending transfers get processed (much) faster.

- http: mark bundle as not for multiuse on < HTTP/2 response
  
  Fixes #3813
  Closes #3815

Daniel Gustafsson (1 May 2019)
- cookie: Guard against possible NULL ptr deref
  
  In case the name pointer isn't set (due to memory pressure most likely)
  we need to skip the prefix matching and reject with a badcookie to avoid
  a possible NULL pointer dereference.
  
  Closes #3820 #3821
  Reported-by: Jonathan Moerman
  Reviewed-by: Daniel Stenberg <daniel@haxx.se>

Patrick Monnerat (30 Apr 2019)
- os400: Add CURLOPT_MAXAGE_CONN to ILE/RPG bindings

Kamil Dudka (29 Apr 2019)
- nss: provide more specific error messages on failed init
  
  Closes #3808

Daniel Stenberg (29 Apr 2019)
- [Reed Loden brought this change]

  docs: minor polish to the bug bounty / security docs
  
  Closes #3811

- CURL_MAX_INPUT_LENGTH: largest acceptable string input size
  
  This limits all accepted input strings passed to libcurl to be less than
  CURL_MAX_INPUT_LENGTH (8000000) bytes, for these API calls:
  curl_easy_setopt() and curl_url_set().
  
  The 8000000 number is arbitrary picked and is meant to detect mistakes
  or abuse, not to limit actual practical use cases. By limiting the
  acceptable string lengths we also reduce the risk of integer overflows
  all over.
  
  NOTE: This does not apply to `CURLOPT_POSTFIELDS`.
  
  Test 1559 verifies.
  
  Closes #3805

- [Tseng Jun brought this change]

  curlver.h: use parenthesis in CURL_VERSION_BITS macro
  
  Closes #3809

Marcel Raad (27 Apr 2019)
- [Simon Warta brought this change]

  cmake: rename CMAKE_USE_DARWINSSL to CMAKE_USE_SECTRANSP
  
  Closes https://github.com/curl/curl/pull/3769

Steve Holme (23 Apr 2019)
- ntlm: Missed pre-processor || (or) during rebase for cd15acd0

- ntlm: Support the NT response in the type-3 when OpenSSL doesn't include MD4
  
  Just like we do for mbed TLS, use our local implementation of MD4 when
  OpenSSL doesn't support it. This allows a type-3 message to include the
  NT response.

Daniel Gustafsson (23 Apr 2019)
- INTERNALS: fix misindentation of ToC item
  
  Kerberos was incorrectly indented as a subsection under FTP, which is
  incorrect as they are both top level sections. A fix for this was first
  attempted in commit fef38a0898322f285401c5ff2f5e7c90dbf3be63 but that
  was a few paddles short of being complete.

- [Aron Bergman brought this change]

  INTERNALS: Add structs to ToC
  
  Add the subsections under "Structs in libcurl" to the table of contents.
  
  Reviewed-by: Daniel Stenberg <daniel@haxx.se>
  Reviewed-by: Daniel Gustafsson <daniel@yesql.se>

- [Aron Bergman brought this change]

  INTERNALS: Add code highlighting
  
  Make all struct members under the Curl_handler section
  print in monospace font.
  
  Closes #3801
  Reviewed-by: Daniel Stenberg <daniel@haxx.se>
  Reviewed-by: Daniel Gustafsson <daniel@yesql.se>

Daniel Stenberg (22 Apr 2019)
- docs/BUG-BOUNTY: bug bounty time [skip ci]
  
  Introducing the curl bug bounty program on hackerone. We now recommend
  filing security issues directly in the hackerone ticket system which
  only is readable to curl security team members.
  
  Assisted-by: Daniel Gustafsson
  
  Closes #3488

Steve Holme (22 Apr 2019)
- sasl: Don't send authcid as authzid for the PLAIN mechanism as per RFC 4616
  
  RFC 4616 specifies the authzid is optional in the client authentication
  message and that the server will derive the authorisation identity
  (authzid) from the authentication identity (authcid) when not specified
  by the client.

Jay Satiro (22 Apr 2019)
- [Gisle Vanem brought this change]

  memdebug: fix variable name
  
  Follow-up to 76b6348 which renamed logfile as curl_dbg_logfile.
  
  Ref: https://github.com/curl/curl/commit/76b6348#r33259088

Steve Holme (21 Apr 2019)
- vauth/cleartext: Don't send the authzid if it is empty
  
  Follow up to 762a292f.

Daniel Stenberg (21 Apr 2019)
- test 196,197,198: add 'retry' keyword [skip ci]

- RELEASE-NOTES: synced

- CURLOPT_MAXAGE_CONN: set the maximum allowed age for conn reuse
  
  ... and disconnect too old ones instead of trying to reuse.
  
  Default max age is set to 118 seconds.
  
  Ref: #3722
  Closes #3782

Daniel Gustafsson (20 Apr 2019)
- [Po-Chuan Hsieh brought this change]

  altsvc: Fix building with cookies disables
  
  ALTSVC requires Curl_get_line which is defined in lib/cookie.c inside a #if
  check of HTTP and COOKIES. That makes Curl_get_line undefined if COOKIES is
  disabled. Fix by splitting out the function into a separate file which can
  be included where needed.
  
  Closes #3717
  Reviewed-by: Daniel Gustafsson <daniel@yesql.se>
  Reviewed-by: Marcel Raad <Marcel.Raad@teamviewer.com>

Daniel Stenberg (20 Apr 2019)
- test1002: correct the name [skip ci]

- test660: verify CONNECT_ONLY with IMAP
  
  which basically just makes sure LOGOUT is *not* issued on disconnect

- Curl_disconnect: treat all CONNECT_ONLY connections as "dead"
  
  Since the connection has been used by the "outside" we don't know the
  state of it anymore and curl should not use it anymore.
  
  Bug: https://curl.haxx.se/mail/lib-2019-04/0052.html
  
  Closes #3795

- multi: fix the statenames (follow-up fix from 2f44e94efb3df8e)
  
  The list of names must be in sync with the defined states in the header
  file!

Steve Holme (16 Apr 2019)
- openvms: Remove pre-processors for Windows as VMS cannot support them

- openvms: Remove pre-processor for SecureTransport as VMS cannot support it
  
  Fixes #3768
  Closes #3785

Jay Satiro (16 Apr 2019)
- TODO: Add issue link to an existing entry

Daniel Stenberg (16 Apr 2019)
- RELEASE-NOTES: synced

Jay Satiro (16 Apr 2019)
- tool_help: Warn if curl and libcurl versions do not match
  
  .. because functionality may be affected if the versions differ.
  
  This commit implements TODO 18.7 "warning if curl version is not in sync
  with libcurl version".
  
  Ref: https://github.com/curl/curl/blob/curl-7_64_1/docs/TODO#L1028-L1033
  
  Closes https://github.com/curl/curl/pull/3774

Steve Holme (16 Apr 2019)
- md5: Update the function signature following d84da52d

- md5: Forgot to update the code alignment in d84da52d

- md5: Return CURLcode from the internally accessible functions
  
  Following 28f826b3 to return CURLE_OK instead of numeric 0.

Daniel Gustafsson (15 Apr 2019)
- tests: Run global cleanup at end of tests
  
  Make sure to run curl_global_cleanup() when shutting down the test
  suite to release any resources allocated in the SSL setup. This is
  clearly visible when running tests with PolarSSL where the thread
  lock calloc() memory which isn't released when not running cleanup.
  Below is an excerpt from the autobuild logs:
  
    ==12368== 96 bytes in 1 blocks are possibly lost in loss record 1 of 2
    ==12368== at 0x4837B65: calloc (vg_replace_malloc.c:752)
    ==12368== by 0x11A76E: curl_dbg_calloc (memdebug.c:205)
    ==12368== by 0x145CDF: Curl_polarsslthreadlock_thread_setup
                           (polarssl_threadlock.c:54)
    ==12368== by 0x145B37: Curl_polarssl_init (polarssl.c:865)
    ==12368== by 0x14129D: Curl_ssl_init (vtls.c:171)
    ==12368== by 0x118B4C: global_init (easy.c:158)
    ==12368== by 0x118BF5: curl_global_init (easy.c:221)
    ==12368== by 0x118D0B: curl_easy_init (easy.c:299)
    ==12368== by 0x114E96: test (lib1906.c:32)
    ==12368== by 0x115495: main (first.c:174)
  
  Closes #3783
  Reviewed-by: Marcel Raad <Marcel.Raad@teamviewer.com>
  Reviewed-by: Daniel Stenberg <daniel@haxx.se>

Marcel Raad (15 Apr 2019)
- travis: use mbedtls from Xenial
  
  No need to build it from source anymore.
  
  Closes https://github.com/curl/curl/pull/3779

- travis: use libpsl from Xenial
  
  This makes building libpsl and libidn2 from source unnecessary and
  removes the need for the autopoint and libunistring-dev packages.
  
  Closes https://github.com/curl/curl/pull/3779

Daniel Stenberg (15 Apr 2019)
- runtests: start socksd like other servers
  
  ... without a $srcdir prefix. Triggered by the failures in several
  autobuilds.
  
  Closes #3781

Daniel Gustafsson (14 Apr 2019)
- socksd: Fix typos
  
  Reviewed-by: Daniel Stenberg <daniel@haxx.se>

- socksd: Properly decorate static variables
  
  Mark global variables static to avoid compiler warning in Clang when
  using -Wmissing-variable-declarations.
  
  Closes #3778
  Reviewed-by: Daniel Stenberg <daniel@haxx.se>

Steve Holme (14 Apr 2019)
- md(4|5): Fixed indentation oddities with the importation of replacement code
  
  The indentation from 211d5329 and 57d6d253 was a little strange as
  parts didn't align correctly, uses 4 spaces rather than 2. Checked
  the indentation of the original source so it aligns, albeit, using
  curl style.

- md5: Code style to return CURLE_OK rather than numeric 0

- md5: Corrected code style for some pointer arguments

Marcel Raad (13 Apr 2019)
- travis: update some builds to xenial
  
  Xenial comes with more up-to-date software versions and more available
  packages, some of which we currently build from source. Unfortunately,
  some builds would fail with Xenial because of assertion failures in
  Valgrind when using OpenSSL, so leave these at Trusty.
  
  Closes https://github.com/curl/curl/pull/3777

Daniel Stenberg (13 Apr 2019)
- test: make tests and test scripts use socksd for SOCKS
  
  Make all SOCKS tests use socksd instead of ssh.

- socksd: new SOCKS 4+5 server for tests
  
  Closes #3752

- singleipconnect: show port in the verbose "Trying ..." message
  
  To aid debugging better.

- [tmilburn brought this change]

  CURLOPT_ADDRESS_SCOPE: fix range check and more
  
  Commit 9081014 fixed most of the confusing issues between scope id and
  scope however 844896d added bad limits checking assuming that the scope
  is being set and not the scope id.
  
  I have fixed the documentation so it all refers to scope ids.
  
  In addition Curl_if2ip refered to the scope id as remote_scope_id which
  is incorrect, so I renamed it to local_scope_id.
  
  Adjusted-by: Daniel Stenberg
  
  Closes #3655
  Closes #3765
  Fixes #3713

- urlapi: stricter CURLUPART_PORT parsing
  
  Only allow well formed decimal numbers in the input.
  
  Document that the number MUST be between 1 and 65535.
  
  Add tests to test 1560 to verify the above.
  
  Ref: https://github.com/curl/curl/issues/3753
  Closes #3762

Jay Satiro (13 Apr 2019)
- [Jan Ehrhardt brought this change]

  winbuild: Support MultiSSL builds
  
  - Remove the lines in winbuild/Makefile.vc that generate an error with
    multiple SSL backends.
  
  - Add /DCURL_WITH_MULTI_SSL in winbuild/MakefileBuild.vc if multiple SSL
    backends are set.
  
  Closes https://github.com/curl/curl/pull/3772

Daniel Stenberg (12 Apr 2019)
- travis: remove mesalink builds (temporarily?)
  
  Since the mesalink build started to fail on travis, even though we build
  a fixed release version, we disable it to prevent it from blocking
  progress.
  
  Closes #3767

- openssl: mark connection for close on TLS close_notify
  
  Without this, detecting and avoid reusing a closed TLS connection
  (without a previous GOAWAY) when doing HTTP/2 is tricky.
  
  Reported-by: Tom van der Woerdt
  Fixes #3750
  Closes #3763

- RELEASE-NOTES: synced

Steve Holme (11 Apr 2019)
- vauth/cleartext: Update the PLAIN login function signature to match RFC 4616
  
  Functionally this doesn't change anything as we still use the username
  for both the authorisation identity and the authentication identity.
  
  Closes #3757

Daniel Stenberg (11 Apr 2019)
- test1906: verify CURLOPT_CURLU + CURLOPT_PORT usage
  
  Based-on-code-by: Poul T Lomholt

- url: always clone the CUROPT_CURLU handle
  
  Since a few code paths actually update that data.
  
  Fixes #3753
  Closes #3761
  
  Reported-by: Poul T Lomholt

- CURLOPT_DNS_USE_GLOBAL_CACHE: remove
  
  Remove the code too. The functionality has been disabled in code since
  7.62.0. Setting this option will from now on simply be ignored and have
  no function.
  
  Closes #3654

Marcel Raad (11 Apr 2019)
- travis: install libgnutls28-dev only for --with-gnutls build
  
  Reduces the time needed for the other jobs a little.
  
  Closes https://github.com/curl/curl/pull/3721

- travis: install libnss3-dev only for --with-nss build
  
  Reduces the time needed for the other jobs a little.
  
  Closes https://github.com/curl/curl/pull/3721

- travis: install libssh2-dev only for --with-libssh2 build
  
  Reduces the time needed for the other jobs a little.
  
  Closes https://github.com/curl/curl/pull/3721

- travis: install libssh-dev only for --with-libssh build
  
  Reduces the time needed for the other jobs a little.
  
  Closes https://github.com/curl/curl/pull/3721

- travis: install krb5-user only for --with-gssapi build
  
  Reduces the time needed for the other jobs a little.
  
  Closes https://github.com/curl/curl/pull/3721

- travis: install lcov only for the coverage job
  
  Reduces the time needed for the other jobs a little.
  
  Closes https://github.com/curl/curl/pull/3721

- travis: install clang only when needed
  
  This reduces the GCC job runtimes a little and it's needed to
  selectively update clang builds to xenial.
  
  Closes https://github.com/curl/curl/pull/3721

- AppVeyor: enable testing for WinSSL build
  
  Closes https://github.com/curl/curl/pull/3725

- build: fix Codacy/CppCheck warnings
  
  - remove unused variables
  - declare conditionally used variables conditionally
  - suppress unused variable warnings in the CMake tests
  - remove dead variable stores
  - consistently use WIN32 macro to detect Windows
  
  Closes https://github.com/curl/curl/pull/3739

- polarssl_threadlock: remove conditionally unused code
  
  Make functions no-ops if neither both USE_THREADS_POSIX and
  HAVE_PTHREAD_H nor both USE_THREADS_WIN32 and HAVE_PROCESS_H are
  defined. Previously, if only one of them was defined, there was either
  code compiled that did nothing useful or the wrong header included for
  the functions used.
  
  Also, move POLARSSL_MUTEX_T define to implementation file as it's not
  used externally.
  
  Closes https://github.com/curl/curl/pull/3739

- lib557: initialize variables
  
  These variables are only conditionally initialized.
  
  Closes https://github.com/curl/curl/pull/3739

- lib509: add missing include for strdup
  
  Closes https://github.com/curl/curl/pull/3739

- README.md: fix no-consecutive-blank-lines Codacy warning
  
  Consistently use one blank line between blocks.
  
  Closes https://github.com/curl/curl/pull/3739

- tests/server/util: fix Windows Unicode build
  
  Always use the ANSI version of FormatMessage as we don't have the
  curl_multibyte gear available here.
  
  Closes https://github.com/curl/curl/pull/3758

Daniel Stenberg (11 Apr 2019)
- curl_easy_getinfo.3: fix minor formatting mistake

Daniel Gustafsson (11 Apr 2019)
- xattr: skip unittest on unsupported platforms
  
  The stripcredentials unittest fails to compile on platforms without
  xattr support, for example the Solaris member in the buildfarm which
  fails with the following:
  
    CC unit1621-unit1621.o
    CC ../libtest/unit1621-first.o
    CCLD unit1621
    Undefined first referenced
    symbol in file
    stripcredentials unit1621-unit1621.o
    goto problem 2
    ld: fatal: symbol referencing errors. No output written to .libs/unit1621
    collect2: error: ld returned 1 exit status
    gmake[2]: *** [Makefile:996: unit1621] Error 1
  
  Fix by excluding the test on such platforms by using the reverse
  logic from where stripcredentials() is defined.
  
  Closes #3759
  Reviewed-by: Daniel Stenberg <daniel@haxx.se>

Steve Holme (11 Apr 2019)
- emailL Added reference to RFC8314 for implicit TLS

- README: Schannel, stop calling it "winssl"
  
  Stick to "Schannel" everywhere - follow up to 180501cb.

Jakub Zakrzewski (10 Apr 2019)
- cmake: clear CMAKE_REQUIRED_LIBRARIES after each use
  
  This fixes GSSAPI builds with the libraries in a non-standard location.
  The testing for recv() were failing because it failed to link
  the Kerberos libraries, which are not needed for this or subsequent
  tests.
  
  fixes #3743
  closes #3744

- cmake: avoid linking executable for some tests with cmake 3.6+
  
  With CMAKE_TRY_COMPILE_TARGET_TYPE set to STATIC_LIBRARY, the try_compile()
  (which is used by check_c_source_compiles()) will build static library
  instead of executable. This avoids linking additional libraries in and thus
  speeds up those checks a little.
  
  This commit also avoids #3743 (GSSAPI build errors) on itself with cmake
  3.6 or above. That issue was fixed separately for all versions.
  
  Ref: #3744

- cmake: minor cleanup
  
  - Remove nneeded include_regular_expression.
    It was setting what is already a default.
  
  - Remove duplicated include.
  
  - Don't check for pre-3.0.0 CMake version.
    We already require at least 3.0.0, so it's just clutter.
  
  Ref: #3744

Steve Holme (8 Apr 2019)
- build-openssl.bat: Fixed support for OpenSSL v1.1.0+

- build-openssl.bat: Perfer the use of if statements rather than goto (where possible)

- build-openssl.bat: Perform the install for each build type directly after the build

- build-openssl.bat: Split the install of static and shared build types

- build-openssl.bat: Split the building of static and shared build types

- build-openssl.bat: Move the installation into a separate function

- build-openssl.bat: Move the build step into a separate function

- build-openssl.bat: Move the OpenSSL configuration into a separate function

- build-openssl.bat: Fixed the BUILD_CONFIG variable not being initialised
  
  Should the parent environment set this variable then the build might
  not be performed as the user intended.

Daniel Stenberg (8 Apr 2019)
- socks: fix error message

- config.d: clarify that initial : and = might need quoting [skip ci]
  
  Fixes #3738
  Closes #3749

- RELEASE-NOTES: synced
  
  bumped to 7.65.0 for next release

- socks5: user name and passwords must be shorter than 256
  
  bytes... since the protocol needs to store the length in a single byte field.
  
  Reported-by: XmiliaH on github
  Fixes #3737
  Closes #3740

- [Jakub Zakrzewski brought this change]

  test: urlapi: urlencode characters above 0x7f correctly

- [Jakub Zakrzewski brought this change]

  urlapi: urlencode characters above 0x7f correctly
  
  fixes #3741
  Closes #3742

- [Even Rouault brought this change]

  multi_runsingle(): fix use-after-free
  
  Fixes #3745
  Closes #3746
  
  The following snippet
  ```
  
  int main()
  {
      CURL* hCurlHandle = curl_easy_init();
      curl_easy_setopt(hCurlHandle, CURLOPT_URL, "http://example.com");
      curl_easy_setopt(hCurlHandle, CURLOPT_PROXY, "1");
      curl_easy_perform(hCurlHandle);
      curl_easy_cleanup(hCurlHandle);
      return 0;
  }
  ```
  triggers the following Valgrind warning
  
  ```
  ==4125== Invalid read of size 8
  ==4125==    at 0x4E7D1EE: Curl_llist_remove (llist.c:97)
  ==4125==    by 0x4E7EF5C: detach_connnection (multi.c:798)
  ==4125==    by 0x4E80545: multi_runsingle (multi.c:1451)
  ==4125==    by 0x4E8197C: curl_multi_perform (multi.c:2072)
  ==4125==    by 0x4E766A0: easy_transfer (easy.c:625)
  ==4125==    by 0x4E76915: easy_perform (easy.c:719)
  ==4125==    by 0x4E7697C: curl_easy_perform (easy.c:738)
  ==4125==    by 0x4008BE: main (in /home/even/curl/test)
  ==4125==  Address 0x9b3d1d0 is 1,120 bytes inside a block of size 1,600 free'd
  ==4125==    at 0x4C2ECF0: free (vg_replace_malloc.c:530)
  ==4125==    by 0x4E62C36: conn_free (url.c:756)
  ==4125==    by 0x4E62D34: Curl_disconnect (url.c:818)
  ==4125==    by 0x4E48DF9: Curl_once_resolved (hostip.c:1097)
  ==4125==    by 0x4E8052D: multi_runsingle (multi.c:1446)
  ==4125==    by 0x4E8197C: curl_multi_perform (multi.c:2072)
  ==4125==    by 0x4E766A0: easy_transfer (easy.c:625)
  ==4125==    by 0x4E76915: easy_perform (easy.c:719)
  ==4125==    by 0x4E7697C: curl_easy_perform (easy.c:738)
  ==4125==    by 0x4008BE: main (in /home/even/curl/test)
  ==4125==  Block was alloc'd at
  ==4125==    at 0x4C2F988: calloc (vg_replace_malloc.c:711)
  ==4125==    by 0x4E6438E: allocate_conn (url.c:1654)
  ==4125==    by 0x4E685B4: create_conn (url.c:3496)
  ==4125==    by 0x4E6968F: Curl_connect (url.c:4023)
  ==4125==    by 0x4E802E7: multi_runsingle (multi.c:1368)
  ==4125==    by 0x4E8197C: curl_multi_perform (multi.c:2072)
  ==4125==    by 0x4E766A0: easy_transfer (easy.c:625)
  ==4125==    by 0x4E76915: easy_perform (easy.c:719)
  ==4125==    by 0x4E7697C: curl_easy_perform (easy.c:738)
  ==4125==    by 0x4008BE: main (in /home/even/curl/test)
  ```
  
  This has been bisected to commit 2f44e94
  
  Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=14109
  Credit to OSS Fuzz

- pipelining: removed
  
  As previously planned and documented in DEPRECATE.md, all pipelining
  code is removed.
  
  Closes #3651

- [cclauss brought this change]

  tests: make Impacket (SMB server) Python 3 compatible
  
  Closes #3731
  Fixes #3289

Marcel Raad (6 Apr 2019)
- [Simon Warta brought this change]

  cmake: set SSL_BACKENDS
  
  This groups all SSL backends into the feature "SSL" and sets the
  SSL_BACKENDS analogue to configure.ac
  
  Closes https://github.com/curl/curl/pull/3736

- [Simon Warta brought this change]

  cmake: don't run SORT on empty list
  
  In case of an empty list, SORTing leads to the cmake error "list
  sub-command SORT requires list to be present."
  
  Closes https://github.com/curl/curl/pull/3736

Daniel Gustafsson (5 Apr 2019)
- [Eli Schwartz brought this change]

  configure: fix default location for fish completions
  
  Fish defines a vendor completions directory for completions that are not
  installed as part of the fish project itself, and the vendor completions
  are preferred if they exist. This prevents trying to overwrite the
  builtin curl.fish completion (or creating file conflicts in distro
  packaging).
  
  Prefer the pkg-config defined location exported by fish, if it can be
  found, and fall back to the correct directory defined by most systems.
  
  Closes #3723
  Reviewed-by: Daniel Gustafsson

Marcel Raad (5 Apr 2019)
- ftplistparser: fix LGTM alert "Empty block without comment"
  
  Removing the block is consistent with line 954/957.
  
  Closes https://github.com/curl/curl/pull/3732

- transfer: fix LGTM alert "Comparison is always true"
  
  Just remove the redundant condition, which also makes it clear that
  k->buf is always 0-terminated if this break is not hit.
  
  Closes https://github.com/curl/curl/pull/3732

Jay Satiro (4 Apr 2019)
- [Rikard Falkeborn brought this change]

  smtp: fix compiler warning
  
  - Fix clang string-plus-int warning.
  
  Clang 8 warns about adding a string to an int does not append to the
  string. Indeed it doesn't, but that was not the intention either. Use
  array indexing as suggested to silence the warning. There should be no
  functional changes.
  
  (In other words clang warns about "foo"+2 but not &"foo"[2] so use the
  latter.)
  
  smtp.c:1221:29: warning: adding 'int' to a string does not append to the
  string [-Wstring-plus-int]
        eob = strdup(SMTP_EOB + 2);
              ~~~~~~~~~~~~~~~~^~~~
  
  Closes https://github.com/curl/curl/pull/3729







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
7233
7234
7235
7236
7237
7238
7239
















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































Daniel Stenberg (27 May 2019)
- [Maksim Stsepanenka brought this change]

  tests: make test 1420 and 1406 work with rtsp-disabled libcurl
  
  Closes #3948















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































Changes to jni/curl/CMake/CurlSymbolHiding.cmake.
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
include(CheckCSourceCompiles)

option(CURL_HIDDEN_SYMBOLS "Set to ON to hide libcurl internal symbols (=hide all symbols that aren't officially external)." ON)
mark_as_advanced(CURL_HIDDEN_SYMBOLS)

if(CURL_HIDDEN_SYMBOLS)
  set(SUPPORTS_SYMBOL_HIDING FALSE)

  if(CMAKE_C_COMPILER_ID MATCHES "Clang")
    set(SUPPORTS_SYMBOL_HIDING TRUE)
    set(_SYMBOL_EXTERN "__attribute__ ((__visibility__ (\"default\")))")
    set(_CFLAG_SYMBOLS_HIDE "-fvisibility=hidden")
  elseif(CMAKE_COMPILER_IS_GNUCC)
    if(NOT CMAKE_VERSION VERSION_LESS 2.8.10)
      set(GCC_VERSION ${CMAKE_C_COMPILER_VERSION})
    else()
      execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion
                      OUTPUT_VARIABLE GCC_VERSION)
    endif()
    if(NOT GCC_VERSION VERSION_LESS 3.4)
      # note: this is considered buggy prior to 4.0 but the autotools don't care, so let's ignore that fact
      set(SUPPORTS_SYMBOL_HIDING TRUE)
      set(_SYMBOL_EXTERN "__attribute__ ((__visibility__ (\"default\")))")
      set(_CFLAG_SYMBOLS_HIDE "-fvisibility=hidden")
    endif()
  elseif(CMAKE_C_COMPILER_ID MATCHES "SunPro" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 8.0)
    set(SUPPORTS_SYMBOL_HIDING TRUE)













<
<
<
<
<
<
|







1
2
3
4
5
6
7
8
9
10
11
12
13






14
15
16
17
18
19
20
21
include(CheckCSourceCompiles)

option(CURL_HIDDEN_SYMBOLS "Set to ON to hide libcurl internal symbols (=hide all symbols that aren't officially external)." ON)
mark_as_advanced(CURL_HIDDEN_SYMBOLS)

if(CURL_HIDDEN_SYMBOLS)
  set(SUPPORTS_SYMBOL_HIDING FALSE)

  if(CMAKE_C_COMPILER_ID MATCHES "Clang")
    set(SUPPORTS_SYMBOL_HIDING TRUE)
    set(_SYMBOL_EXTERN "__attribute__ ((__visibility__ (\"default\")))")
    set(_CFLAG_SYMBOLS_HIDE "-fvisibility=hidden")
  elseif(CMAKE_COMPILER_IS_GNUCC)






    if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.4)
      # note: this is considered buggy prior to 4.0 but the autotools don't care, so let's ignore that fact
      set(SUPPORTS_SYMBOL_HIDING TRUE)
      set(_SYMBOL_EXTERN "__attribute__ ((__visibility__ (\"default\")))")
      set(_CFLAG_SYMBOLS_HIDE "-fvisibility=hidden")
    endif()
  elseif(CMAKE_C_COMPILER_ID MATCHES "SunPro" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 8.0)
    set(SUPPORTS_SYMBOL_HIDING TRUE)
Changes to jni/curl/CMake/FindCARES.cmake.
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
# - Find c-ares
# Find the c-ares includes and library
# This module defines
#  CARES_INCLUDE_DIR, where to find ares.h, etc.
#  CARES_LIBRARIES, the libraries needed to use c-ares.
#  CARES_FOUND, If false, do not try to use c-ares.
# also defined, but not for general use are
# CARES_LIBRARY, where to find the c-ares library.

find_path(CARES_INCLUDE_DIR ares.h
  /usr/local/include
  /usr/include
  )

set(CARES_NAMES ${CARES_NAMES} cares)
find_library(CARES_LIBRARY
  NAMES ${CARES_NAMES}
  PATHS /usr/lib /usr/local/lib
  )

if(CARES_LIBRARY AND CARES_INCLUDE_DIR)
  set(CARES_LIBRARIES ${CARES_LIBRARY})
  set(CARES_FOUND "YES")
else()
  set(CARES_FOUND "NO")
endif()


if(CARES_FOUND)
  if(NOT CARES_FIND_QUIETLY)
    message(STATUS "Found c-ares: ${CARES_LIBRARIES}")
  endif()
else()
  if(CARES_FIND_REQUIRED)
    message(FATAL_ERROR "Could not find c-ares library")
  endif()
endif()

mark_as_advanced(
  CARES_LIBRARY
  CARES_INCLUDE_DIR
  )









|
<
<
<




<


<
<
<
<
<
<
|
|
<
<
|
<
<
<
<
<
<





1
2
3
4
5
6
7
8
9
10



11
12
13
14

15
16






17
18


19






20
21
22
23
24
# - Find c-ares
# Find the c-ares includes and library
# This module defines
#  CARES_INCLUDE_DIR, where to find ares.h, etc.
#  CARES_LIBRARIES, the libraries needed to use c-ares.
#  CARES_FOUND, If false, do not try to use c-ares.
# also defined, but not for general use are
# CARES_LIBRARY, where to find the c-ares library.

find_path(CARES_INCLUDE_DIR ares.h)




set(CARES_NAMES ${CARES_NAMES} cares)
find_library(CARES_LIBRARY
  NAMES ${CARES_NAMES}

  )







include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(CARES


    REQUIRED_VARS CARES_LIBRARY CARES_INCLUDE_DIR)







mark_as_advanced(
  CARES_LIBRARY
  CARES_INCLUDE_DIR
  )
Changes to jni/curl/CMake/FindLibSSH2.cmake.
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
# - Try to find the libssh2 library
# Once done this will define
#
# LIBSSH2_FOUND - system has the libssh2 library
# LIBSSH2_INCLUDE_DIR - the libssh2 include directory
# LIBSSH2_LIBRARY - the libssh2 library name

if(LIBSSH2_INCLUDE_DIR AND LIBSSH2_LIBRARY)
  set(LibSSH2_FIND_QUIETLY TRUE)
endif()

find_path(LIBSSH2_INCLUDE_DIR libssh2.h
)

find_library(LIBSSH2_LIBRARY NAMES ssh2
)

if(LIBSSH2_INCLUDE_DIR)
  file(STRINGS "${LIBSSH2_INCLUDE_DIR}/libssh2.h" libssh2_version_str REGEX "^#define[\t ]+LIBSSH2_VERSION_NUM[\t ]+0x[0-9][0-9][0-9][0-9][0-9][0-9].*")

  string(REGEX REPLACE "^.*LIBSSH2_VERSION_NUM[\t ]+0x([0-9][0-9]).*$" "\\1" LIBSSH2_VERSION_MAJOR "${libssh2_version_str}")
  string(REGEX REPLACE "^.*LIBSSH2_VERSION_NUM[\t ]+0x[0-9][0-9]([0-9][0-9]).*$" "\\1" LIBSSH2_VERSION_MINOR  "${libssh2_version_str}")
  string(REGEX REPLACE "^.*LIBSSH2_VERSION_NUM[\t ]+0x[0-9][0-9][0-9][0-9]([0-9][0-9]).*$" "\\1" LIBSSH2_VERSION_PATCH "${libssh2_version_str}")

  string(REGEX REPLACE "^0(.+)" "\\1" LIBSSH2_VERSION_MAJOR "${LIBSSH2_VERSION_MAJOR}")
  string(REGEX REPLACE "^0(.+)" "\\1" LIBSSH2_VERSION_MINOR "${LIBSSH2_VERSION_MINOR}")
  string(REGEX REPLACE "^0(.+)" "\\1" LIBSSH2_VERSION_PATCH "${LIBSSH2_VERSION_PATCH}")

  set(LIBSSH2_VERSION "${LIBSSH2_VERSION_MAJOR}.${LIBSSH2_VERSION_MINOR}.${LIBSSH2_VERSION_PATCH}")
endif()

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(LibSSH2 DEFAULT_MSG LIBSSH2_INCLUDE_DIR LIBSSH2_LIBRARY )



mark_as_advanced(LIBSSH2_INCLUDE_DIR LIBSSH2_LIBRARY LIBSSH2_VERSION_MAJOR LIBSSH2_VERSION_MINOR LIBSSH2_VERSION_PATCH LIBSSH2_VERSION)







<
<
<
<
|
|
<
|
|
<

|
|
<
<
<
<
<
<
<
<
<



|
>
>

|
1
2
3
4
5
6
7




8
9

10
11

12
13
14









15
16
17
18
19
20
21
22
# - Try to find the libssh2 library
# Once done this will define
#
# LIBSSH2_FOUND - system has the libssh2 library
# LIBSSH2_INCLUDE_DIR - the libssh2 include directory
# LIBSSH2_LIBRARY - the libssh2 library name





find_path(LIBSSH2_INCLUDE_DIR libssh2.h)


find_library(LIBSSH2_LIBRARY NAMES ssh2 libssh2)


if(LIBSSH2_INCLUDE_DIR)
  file(STRINGS "${LIBSSH2_INCLUDE_DIR}/libssh2.h" libssh2_version_str REGEX "^#define[\t ]+LIBSSH2_VERSION[\t ]+\"(.*)\"")
  string(REGEX REPLACE "^.*\"([^\"]+)\"" "\\1"  LIBSSH2_VERSION "${libssh2_version_str}")









endif()

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(LibSSH2
    REQUIRED_VARS LIBSSH2_LIBRARY LIBSSH2_INCLUDE_DIR
    VERSION_VAR LIBSSH2_VERSION)

mark_as_advanced(LIBSSH2_INCLUDE_DIR LIBSSH2_LIBRARY)
Changes to jni/curl/CMake/FindNGHTTP2.cmake.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18


include(FindPackageHandleStandardArgs)

find_path(NGHTTP2_INCLUDE_DIR "nghttp2/nghttp2.h")

find_library(NGHTTP2_LIBRARY NAMES nghttp2)

find_package_handle_standard_args(NGHTTP2
    FOUND_VAR
      NGHTTP2_FOUND
    REQUIRED_VARS
      NGHTTP2_LIBRARY
      NGHTTP2_INCLUDE_DIR
    FAIL_MESSAGE
      "Could NOT find NGHTTP2"
)

set(NGHTTP2_INCLUDE_DIRS ${NGHTTP2_INCLUDE_DIR})
set(NGHTTP2_LIBRARIES ${NGHTTP2_LIBRARY})














<
<




>
>
1
2
3
4
5
6
7
8
9
10
11
12


13
14
15
16
17
18
include(FindPackageHandleStandardArgs)

find_path(NGHTTP2_INCLUDE_DIR "nghttp2/nghttp2.h")

find_library(NGHTTP2_LIBRARY NAMES nghttp2)

find_package_handle_standard_args(NGHTTP2
    FOUND_VAR
      NGHTTP2_FOUND
    REQUIRED_VARS
      NGHTTP2_LIBRARY
      NGHTTP2_INCLUDE_DIR


)

set(NGHTTP2_INCLUDE_DIRS ${NGHTTP2_INCLUDE_DIR})
set(NGHTTP2_LIBRARIES ${NGHTTP2_LIBRARY})

mark_as_advanced(NGHTTP2_INCLUDE_DIRS NGHTTP2_LIBRARIES)
Changes to jni/curl/CMake/OtherTests.cmake.
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

check_c_source_compiles("${_source_epilogue}
int main(void) {
    recv(0, 0, 0, 0);
    return 0;
}" curl_cv_recv)
if(curl_cv_recv)
  if(NOT DEFINED curl_cv_func_recv_args OR "${curl_cv_func_recv_args}" STREQUAL "unknown")
    foreach(recv_retv "int" "ssize_t" )
      foreach(recv_arg1 "SOCKET" "int" )
        foreach(recv_arg2 "char *" "void *" )
          foreach(recv_arg3 "int" "size_t" "socklen_t" "unsigned int")
            foreach(recv_arg4 "int" "unsigned int")
              if(NOT curl_cv_func_recv_done)
                unset(curl_cv_func_recv_test CACHE)







|







28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

check_c_source_compiles("${_source_epilogue}
int main(void) {
    recv(0, 0, 0, 0);
    return 0;
}" curl_cv_recv)
if(curl_cv_recv)
  if(NOT DEFINED curl_cv_func_recv_args OR curl_cv_func_recv_args STREQUAL "unknown")
    foreach(recv_retv "int" "ssize_t" )
      foreach(recv_arg1 "SOCKET" "int" )
        foreach(recv_arg2 "char *" "void *" )
          foreach(recv_arg3 "int" "size_t" "socklen_t" "unsigned int")
            foreach(recv_arg4 "int" "unsigned int")
              if(NOT curl_cv_func_recv_done)
                unset(curl_cv_func_recv_test CACHE)
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
    string(REGEX REPLACE "^([^,]*),[^,]*,[^,]*,[^,]*,[^,]*$" "\\1" RECV_TYPE_ARG1 "${curl_cv_func_recv_args}")
    string(REGEX REPLACE "^[^,]*,([^,]*),[^,]*,[^,]*,[^,]*$" "\\1" RECV_TYPE_ARG2 "${curl_cv_func_recv_args}")
    string(REGEX REPLACE "^[^,]*,[^,]*,([^,]*),[^,]*,[^,]*$" "\\1" RECV_TYPE_ARG3 "${curl_cv_func_recv_args}")
    string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,([^,]*),[^,]*$" "\\1" RECV_TYPE_ARG4 "${curl_cv_func_recv_args}")
    string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,[^,]*,([^,]*)$" "\\1" RECV_TYPE_RETV "${curl_cv_func_recv_args}")
  endif()

  if("${curl_cv_func_recv_args}" STREQUAL "unknown")
    message(FATAL_ERROR "Cannot find proper types to use for recv args")
  endif()
else()
  message(FATAL_ERROR "Unable to link function recv")
endif()
set(curl_cv_func_recv_args "${curl_cv_func_recv_args}" CACHE INTERNAL "Arguments for recv")
set(HAVE_RECV 1)







|







77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
    string(REGEX REPLACE "^([^,]*),[^,]*,[^,]*,[^,]*,[^,]*$" "\\1" RECV_TYPE_ARG1 "${curl_cv_func_recv_args}")
    string(REGEX REPLACE "^[^,]*,([^,]*),[^,]*,[^,]*,[^,]*$" "\\1" RECV_TYPE_ARG2 "${curl_cv_func_recv_args}")
    string(REGEX REPLACE "^[^,]*,[^,]*,([^,]*),[^,]*,[^,]*$" "\\1" RECV_TYPE_ARG3 "${curl_cv_func_recv_args}")
    string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,([^,]*),[^,]*$" "\\1" RECV_TYPE_ARG4 "${curl_cv_func_recv_args}")
    string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,[^,]*,([^,]*)$" "\\1" RECV_TYPE_RETV "${curl_cv_func_recv_args}")
  endif()

  if(curl_cv_func_recv_args STREQUAL "unknown")
    message(FATAL_ERROR "Cannot find proper types to use for recv args")
  endif()
else()
  message(FATAL_ERROR "Unable to link function recv")
endif()
set(curl_cv_func_recv_args "${curl_cv_func_recv_args}" CACHE INTERNAL "Arguments for recv")
set(HAVE_RECV 1)
Changes to jni/curl/CMake/Utilities.cmake.
1
2
3
4
5
6
7
8
9
10
11
12
13
# File containing various utilities

# Returns a list of arguments that evaluate to true
function(count_true output_count_var)
  set(lst)
  foreach(option_var IN LISTS ARGN)
    if(${option_var})
      list(APPEND lst ${option_var})
    endif()
  endforeach()
  list(LENGTH lst lst_len)
  set(${output_count_var} ${lst_len} PARENT_SCOPE)
endfunction()




|


|


<


1
2
3
4
5
6
7
8
9
10

11
12
# File containing various utilities

# Returns a list of arguments that evaluate to true
function(count_true output_count_var)
  set(lst_len 0)
  foreach(option_var IN LISTS ARGN)
    if(${option_var})
      math(EXPR lst_len "${lst_len} + 1")
    endif()
  endforeach()

  set(${output_count_var} ${lst_len} PARENT_SCOPE)
endfunction()
Changes to jni/curl/CMakeLists.txt.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
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
#  - curl-specific tests (the ones that are in m4/curl-*.m4 files);
#  - (most obvious thing:) curl version numbers.
# Add documentation subproject
#
# To check:
# (From Daniel Stenberg) The cmake build selected to run gcc with -fPIC on my box while the plain configure script did not.
# (From Daniel Stenberg) The gcc command line use neither -g nor any -O options. As a developer, I also treasure our configure scripts's --enable-debug option that sets a long range of "picky" compiler options.
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)

set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}")
include(Utilities)
include(Macros)
include(CMakeDependentOption)
include(CheckCCompilerFlag)

project(CURL C)

message(WARNING "the curl cmake build system is poorly maintained. Be aware")

file(READ ${CURL_SOURCE_DIR}/include/curl/curlver.h CURL_VERSION_H_CONTENTS)
string(REGEX MATCH "#define LIBCURL_VERSION \"[^\"]*"
  CURL_VERSION ${CURL_VERSION_H_CONTENTS})
string(REGEX REPLACE "[^\"]+\"" "" CURL_VERSION ${CURL_VERSION})
string(REGEX MATCH "#define LIBCURL_VERSION_NUM 0x[0-9a-fA-F]+"
  CURL_VERSION_NUM ${CURL_VERSION_H_CONTENTS})
string(REGEX REPLACE "[^0]+0x" "" CURL_VERSION_NUM ${CURL_VERSION_NUM})








|
>










|







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
#  - curl-specific tests (the ones that are in m4/curl-*.m4 files);
#  - (most obvious thing:) curl version numbers.
# Add documentation subproject
#
# To check:
# (From Daniel Stenberg) The cmake build selected to run gcc with -fPIC on my box while the plain configure script did not.
# (From Daniel Stenberg) The gcc command line use neither -g nor any -O options. As a developer, I also treasure our configure scripts's --enable-debug option that sets a long range of "picky" compiler options.
cmake_minimum_required(VERSION 3.0...3.16 FATAL_ERROR)

set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}")
include(Utilities)
include(Macros)
include(CMakeDependentOption)
include(CheckCCompilerFlag)

project(CURL C)

message(WARNING "the curl cmake build system is poorly maintained. Be aware")

file(STRINGS ${CURL_SOURCE_DIR}/include/curl/curlver.h CURL_VERSION_H_CONTENTS REGEX "#define LIBCURL_VERSION( |_NUM )")
string(REGEX MATCH "#define LIBCURL_VERSION \"[^\"]*"
  CURL_VERSION ${CURL_VERSION_H_CONTENTS})
string(REGEX REPLACE "[^\"]+\"" "" CURL_VERSION ${CURL_VERSION})
string(REGEX MATCH "#define LIBCURL_VERSION_NUM 0x[0-9a-fA-F]+"
  CURL_VERSION_NUM ${CURL_VERSION_H_CONTENTS})
string(REGEX REPLACE "[^0]+0x" "" CURL_VERSION_NUM ${CURL_VERSION_NUM})

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
option(PICKY_COMPILER "Enable picky compiler options" ON)
option(BUILD_CURL_EXE "Set to ON to build curl executable." ON)
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
option(ENABLE_ARES "Set to ON to enable c-ares support" OFF)
if(WIN32)
  option(CURL_STATIC_CRT "Set to ON to build libcurl with static CRT on Windows (/MT)." OFF)
  option(ENABLE_INET_PTON "Set to OFF to prevent usage of inet_pton when building against modern SDKs while still requiring compatibility with older Windows versions, such as Windows XP, Windows Server 2003 etc." ON)









endif()



cmake_dependent_option(ENABLE_THREADED_RESOLVER "Set to ON to enable threaded DNS lookup"
        ON "NOT ENABLE_ARES"
        OFF)

option(ENABLE_DEBUG "Set to ON to enable curl debug features" OFF)
option(ENABLE_CURLDEBUG "Set to ON to build with TrackMemory feature enabled" OFF)

if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG)
  if(PICKY_COMPILER)
    foreach(_CCOPT -pedantic -Wall -W -Wpointer-arith -Wwrite-strings -Wunused -Wshadow -Winline -Wnested-externs -Wmissing-declarations -Wmissing-prototypes -Wno-long-long -Wfloat-equal -Wno-multichar -Wsign-compare -Wundef -Wno-format-nonliteral -Wendif-labels -Wstrict-prototypes -Wdeclaration-after-statement -Wstrict-aliasing=3 -Wcast-align -Wtype-limits -Wold-style-declaration -Wmissing-parameter-type -Wempty-body -Wclobbered -Wignored-qualifiers -Wconversion -Wno-sign-conversion -Wvla -Wdouble-promotion -Wno-system-headers -Wno-pedantic-ms-format)
      # surprisingly, CHECK_C_COMPILER_FLAG needs a new variable to store each new
      # test result in.

      check_c_compiler_flag(${_CCOPT} OPT${_CCOPT})
      if(OPT${_CCOPT})
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_CCOPT}")
      endif()
    endforeach()
  endif()
endif()

if(ENABLE_DEBUG)







>
>
>
>
>
>
>
>
>
|
>
>













>
|
|







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
option(PICKY_COMPILER "Enable picky compiler options" ON)
option(BUILD_CURL_EXE "Set to ON to build curl executable." ON)
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
option(ENABLE_ARES "Set to ON to enable c-ares support" OFF)
if(WIN32)
  option(CURL_STATIC_CRT "Set to ON to build libcurl with static CRT on Windows (/MT)." OFF)
  option(ENABLE_INET_PTON "Set to OFF to prevent usage of inet_pton when building against modern SDKs while still requiring compatibility with older Windows versions, such as Windows XP, Windows Server 2003 etc." ON)
  set(CURL_TARGET_WINDOWS_VERSION "" CACHE STRING "Minimum target Windows version as hex string")
  if(CURL_TARGET_WINDOWS_VERSION)
    add_definitions(-D_WIN32_WINNT=${CURL_TARGET_WINDOWS_VERSION})
  elseif(ENABLE_INET_PTON)
    # _WIN32_WINNT_VISTA (0x0600)
    add_definitions(-D_WIN32_WINNT=0x0600)
  else()
    # _WIN32_WINNT_WINXP (0x0501)
    add_definitions(-D_WIN32_WINNT=0x0501)
  endif()
endif()
option(CURL_LTO "Turn on compiler Link Time Optimizations" OFF)

cmake_dependent_option(ENABLE_THREADED_RESOLVER "Set to ON to enable threaded DNS lookup"
        ON "NOT ENABLE_ARES"
        OFF)

option(ENABLE_DEBUG "Set to ON to enable curl debug features" OFF)
option(ENABLE_CURLDEBUG "Set to ON to build with TrackMemory feature enabled" OFF)

if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG)
  if(PICKY_COMPILER)
    foreach(_CCOPT -pedantic -Wall -W -Wpointer-arith -Wwrite-strings -Wunused -Wshadow -Winline -Wnested-externs -Wmissing-declarations -Wmissing-prototypes -Wno-long-long -Wfloat-equal -Wno-multichar -Wsign-compare -Wundef -Wno-format-nonliteral -Wendif-labels -Wstrict-prototypes -Wdeclaration-after-statement -Wstrict-aliasing=3 -Wcast-align -Wtype-limits -Wold-style-declaration -Wmissing-parameter-type -Wempty-body -Wclobbered -Wignored-qualifiers -Wconversion -Wno-sign-conversion -Wvla -Wdouble-promotion -Wno-system-headers -Wno-pedantic-ms-format)
      # surprisingly, CHECK_C_COMPILER_FLAG needs a new variable to store each new
      # test result in.
      string(MAKE_C_IDENTIFIER "OPT${_CCOPT}" _optvarname)
      check_c_compiler_flag(${_CCOPT} ${_optvarname})
      if(${_optvarname})
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_CCOPT}")
      endif()
    endforeach()
  endif()
endif()

if(ENABLE_DEBUG)
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# initialize CURL_LIBS
set(CURL_LIBS "")

if(ENABLE_ARES)
  set(USE_ARES 1)
  find_package(CARES REQUIRED)
  list(APPEND CURL_LIBS ${CARES_LIBRARY})
  set(CURL_LIBS ${CURL_LIBS} ${CARES_LIBRARY})
endif()

include(CurlSymbolHiding)

option(HTTP_ONLY "disables all protocols except HTTP (This overrides all CURL_DISABLE_* options)" OFF)
mark_as_advanced(HTTP_ONLY)
option(CURL_DISABLE_FTP "disables FTP" OFF)







<







132
133
134
135
136
137
138

139
140
141
142
143
144
145
# initialize CURL_LIBS
set(CURL_LIBS "")

if(ENABLE_ARES)
  set(USE_ARES 1)
  find_package(CARES REQUIRED)
  list(APPEND CURL_LIBS ${CARES_LIBRARY})

endif()

include(CurlSymbolHiding)

option(HTTP_ONLY "disables all protocols except HTTP (This overrides all CURL_DISABLE_* options)" OFF)
mark_as_advanced(HTTP_ONLY)
option(CURL_DISABLE_FTP "disables FTP" OFF)
168
169
170
171
172
173
174

175
176
177
178
179
180
181
  set(CURL_DISABLE_TELNET ON)
  set(CURL_DISABLE_DICT ON)
  set(CURL_DISABLE_FILE ON)
  set(CURL_DISABLE_TFTP ON)
  set(CURL_DISABLE_RTSP ON)
  set(CURL_DISABLE_POP3 ON)
  set(CURL_DISABLE_IMAP ON)

  set(CURL_DISABLE_SMTP ON)
  set(CURL_DISABLE_GOPHER ON)
endif()

option(CURL_DISABLE_COOKIES "to disable cookies support" OFF)
mark_as_advanced(CURL_DISABLE_COOKIES)








>







180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
  set(CURL_DISABLE_TELNET ON)
  set(CURL_DISABLE_DICT ON)
  set(CURL_DISABLE_FILE ON)
  set(CURL_DISABLE_TFTP ON)
  set(CURL_DISABLE_RTSP ON)
  set(CURL_DISABLE_POP3 ON)
  set(CURL_DISABLE_IMAP ON)
  set(CURL_DISABLE_SMB ON)
  set(CURL_DISABLE_SMTP ON)
  set(CURL_DISABLE_GOPHER ON)
endif()

option(CURL_DISABLE_COOKIES "to disable cookies support" OFF)
mark_as_advanced(CURL_DISABLE_COOKIES)

281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
if(WIN32)
  check_library_exists_concat("ws2_32" getch        HAVE_LIBWS2_32)
  check_library_exists_concat("winmm"  getch        HAVE_LIBWINMM)
  list(APPEND CURL_LIBS "advapi32")
endif()

# check SSL libraries
# TODO support GNUTLS, POLARSSL, CYASSL

if(APPLE)
  option(CMAKE_USE_SECTRANSP "enable Apple OS native SSL/TLS" OFF)
endif()
if(WIN32)
  option(CMAKE_USE_WINSSL "enable Windows native SSL/TLS" OFF)
  cmake_dependent_option(CURL_WINDOWS_SSPI "Use windows libraries to allow NTLM authentication without openssl" ON







|







294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
if(WIN32)
  check_library_exists_concat("ws2_32" getch        HAVE_LIBWS2_32)
  check_library_exists_concat("winmm"  getch        HAVE_LIBWINMM)
  list(APPEND CURL_LIBS "advapi32")
endif()

# check SSL libraries
# TODO support GnuTLS and WolfSSL

if(APPLE)
  option(CMAKE_USE_SECTRANSP "enable Apple OS native SSL/TLS" OFF)
endif()
if(WIN32)
  option(CMAKE_USE_WINSSL "enable Windows native SSL/TLS" OFF)
  cmake_dependent_option(CURL_WINDOWS_SSPI "Use windows libraries to allow NTLM authentication without openssl" ON
407
408
409
410
411
412
413




414
415
416
417
418
419
420

option(USE_NGHTTP2 "Use Nghttp2 library" OFF)
if(USE_NGHTTP2)
  find_package(NGHTTP2 REQUIRED)
  include_directories(${NGHTTP2_INCLUDE_DIRS})
  list(APPEND CURL_LIBS ${NGHTTP2_LIBRARIES})
endif()





if(NOT CURL_DISABLE_LDAP)
  if(WIN32)
    option(USE_WIN32_LDAP "Use Windows LDAP implementation" ON)
    if(USE_WIN32_LDAP)
      check_library_exists_concat("wldap32" cldap_open HAVE_WLDAP32)
      if(NOT HAVE_WLDAP32)







>
>
>
>







420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437

option(USE_NGHTTP2 "Use Nghttp2 library" OFF)
if(USE_NGHTTP2)
  find_package(NGHTTP2 REQUIRED)
  include_directories(${NGHTTP2_INCLUDE_DIRS})
  list(APPEND CURL_LIBS ${NGHTTP2_LIBRARIES})
endif()

if(WIN32)
  set(USE_WIN32_CRYPTO ON)
endif()

if(NOT CURL_DISABLE_LDAP)
  if(WIN32)
    option(USE_WIN32_LDAP "Use Windows LDAP implementation" ON)
    if(USE_WIN32_LDAP)
      check_library_exists_concat("wldap32" cldap_open HAVE_WLDAP32)
      if(NOT HAVE_WLDAP32)
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
check_symbol_exists(setlocale      "${CURL_INCLUDES}" HAVE_SETLOCALE)
check_symbol_exists(setmode        "${CURL_INCLUDES}" HAVE_SETMODE)
check_symbol_exists(setrlimit      "${CURL_INCLUDES}" HAVE_SETRLIMIT)
check_symbol_exists(fcntl          "${CURL_INCLUDES}" HAVE_FCNTL)
check_symbol_exists(ioctl          "${CURL_INCLUDES}" HAVE_IOCTL)
check_symbol_exists(setsockopt     "${CURL_INCLUDES}" HAVE_SETSOCKOPT)
check_function_exists(mach_absolute_time HAVE_MACH_ABSOLUTE_TIME)

# symbol exists in win32, but function does not.
if(WIN32)
  if(ENABLE_INET_PTON)
    check_function_exists(inet_pton HAVE_INET_PTON)
    # _WIN32_WINNT_VISTA (0x0600)
    add_definitions(-D_WIN32_WINNT=0x0600)
  else()
    # _WIN32_WINNT_WINXP (0x0501)
    add_definitions(-D_WIN32_WINNT=0x0501)
  endif()
else()
  check_function_exists(inet_pton HAVE_INET_PTON)
endif()

check_symbol_exists(fsetxattr "${CURL_INCLUDES}" HAVE_FSETXATTR)
if(HAVE_FSETXATTR)
  foreach(CURL_TEST HAVE_FSETXATTR_5 HAVE_FSETXATTR_6)
    curl_internal_test(${CURL_TEST})
  endforeach()
endif()







|
<
<
<
<
<
<
<
<
<
<
<
<
<







936
937
938
939
940
941
942
943













944
945
946
947
948
949
950
check_symbol_exists(setlocale      "${CURL_INCLUDES}" HAVE_SETLOCALE)
check_symbol_exists(setmode        "${CURL_INCLUDES}" HAVE_SETMODE)
check_symbol_exists(setrlimit      "${CURL_INCLUDES}" HAVE_SETRLIMIT)
check_symbol_exists(fcntl          "${CURL_INCLUDES}" HAVE_FCNTL)
check_symbol_exists(ioctl          "${CURL_INCLUDES}" HAVE_IOCTL)
check_symbol_exists(setsockopt     "${CURL_INCLUDES}" HAVE_SETSOCKOPT)
check_function_exists(mach_absolute_time HAVE_MACH_ABSOLUTE_TIME)
check_symbol_exists(inet_pton      "${CURL_INCLUDES}" HAVE_INET_PTON)














check_symbol_exists(fsetxattr "${CURL_INCLUDES}" HAVE_FSETXATTR)
if(HAVE_FSETXATTR)
  foreach(CURL_TEST HAVE_FSETXATTR_5 HAVE_FSETXATTR_6)
    curl_internal_test(${CURL_TEST})
  endforeach()
endif()
1155
1156
1157
1158
1159
1160
1161

















1162
1163
1164
1165
1166
1167
1168
  if(MSVC_VERSION)
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /WX")
  else()
    # this assumes clang or gcc style options
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
  endif()
endif()


















# Ugly (but functional) way to include "Makefile.inc" by transforming it (= regenerate it).
function(transform_makefile_inc INPUT_FILE OUTPUT_FILE)
  file(READ ${INPUT_FILE} MAKEFILE_INC_TEXT)
  string(REPLACE "$(top_srcdir)"   "\${CURL_SOURCE_DIR}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
  string(REPLACE "$(top_builddir)" "\${CURL_BINARY_DIR}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})








>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
  if(MSVC_VERSION)
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /WX")
  else()
    # this assumes clang or gcc style options
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
  endif()
endif()

if(CURL_LTO)
  if(CMAKE_VERSION VERSION_LESS 3.9)
    message(FATAL_ERROR "Requested LTO but your cmake version ${CMAKE_VERSION} is to old. You need at least 3.9")
  endif()

  cmake_policy(SET CMP0069 NEW)

  include(CheckIPOSupported)
  check_ipo_supported(RESULT CURL_HAS_LTO OUTPUT CURL_LTO_ERROR LANGUAGES C)
  if(CURL_HAS_LTO)
    message(STATUS "LTO supported and enabled")
  else()
    message(FATAL_ERROR "LTO was requested - but compiler doesn't support it\n${CURL_LTO_ERROR}")
  endif()
endif()


# Ugly (but functional) way to include "Makefile.inc" by transforming it (= regenerate it).
function(transform_makefile_inc INPUT_FILE OUTPUT_FILE)
  file(READ ${INPUT_FILE} MAKEFILE_INC_TEXT)
  string(REPLACE "$(top_srcdir)"   "\${CURL_SOURCE_DIR}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})
  string(REPLACE "$(top_builddir)" "\${CURL_BINARY_DIR}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT})

1194
1195
1196
1197
1198
1199
1200








1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
  add_subdirectory(src)
endif()

include(CTest)
if(BUILD_TESTING)
  add_subdirectory(tests)
endif()









# Helper to populate a list (_items) with a label when conditions (the remaining
# args) are satisfied
function(_add_if label)
  # TODO need to disable policy CMP0054 (CMake 3.1) to allow this indirection
  if(${ARGN})
    set(_items ${_items} "${label}" PARENT_SCOPE)
  endif()
endfunction()

# Clear list and try to detect available features
set(_items)
_add_if("SSL"           SSL_ENABLED)
_add_if("IPv6"          ENABLE_IPV6)
_add_if("unix-sockets"  USE_UNIX_SOCKETS)
_add_if("libz"          HAVE_LIBZ)







>
>
>
>
>
>
>
>



|
|

|

|







1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
  add_subdirectory(src)
endif()

include(CTest)
if(BUILD_TESTING)
  add_subdirectory(tests)
endif()

# NTLM support requires crypto function adaptions from various SSL libs
# TODO alternative SSL libs tests for SSP1, GNUTLS, NSS
if(NOT CURL_DISABLE_CRYPTO_AUTH AND (USE_OPENSSL OR USE_WINDOWS_SSPI OR USE_DARWINSSL OR USE_MBEDTLS OR USE_WIN32_CRYPTO))
  set(use_ntlm ON)
else()
  set(use_ntlm OFF)
endif()

# Helper to populate a list (_items) with a label when conditions (the remaining
# args) are satisfied
macro(_add_if label)
  # needs to be a macro to allow this indirection
  if(${ARGN})
    set(_items ${_items} "${label}")
  endif()
endmacro()

# Clear list and try to detect available features
set(_items)
_add_if("SSL"           SSL_ENABLED)
_add_if("IPv6"          ENABLE_IPV6)
_add_if("unix-sockets"  USE_UNIX_SOCKETS)
_add_if("libz"          HAVE_LIBZ)
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239

1240
1241
1242
1243
1244
1245
1246
# TODO SSP1 missing for SPNEGO
_add_if("SPNEGO"        NOT CURL_DISABLE_CRYPTO_AUTH AND
                        (HAVE_GSSAPI OR USE_WINDOWS_SSPI))
_add_if("Kerberos"      NOT CURL_DISABLE_CRYPTO_AUTH AND
                        (HAVE_GSSAPI OR USE_WINDOWS_SSPI))
# NTLM support requires crypto function adaptions from various SSL libs
# TODO alternative SSL libs tests for SSP1, GNUTLS, NSS
if(NOT CURL_DISABLE_CRYPTO_AUTH AND (USE_OPENSSL OR USE_WINDOWS_SSPI OR USE_SECTRANSP OR USE_MBEDTLS OR USE_NSS))
  _add_if("NTLM"        1)
  # TODO missing option (autoconf: --enable-ntlm-wb)
  _add_if("NTLM_WB"     NOT CURL_DISABLE_HTTP AND NTLM_WB_ENABLED)
endif()
# TODO missing option (--enable-tls-srp), depends on GNUTLS_SRP/OPENSSL_SRP
_add_if("TLS-SRP"       USE_TLS_SRP)
# TODO option --with-nghttp2 tests for nghttp2 lib and nghttp2/nghttp2.h header
_add_if("HTTP2"         USE_NGHTTP2)

string(REPLACE ";" " " SUPPORT_FEATURES "${_items}")
message(STATUS "Enabled features: ${SUPPORT_FEATURES}")

# Clear list and try to detect available protocols
set(_items)
_add_if("HTTP"          NOT CURL_DISABLE_HTTP)
_add_if("HTTPS"         NOT CURL_DISABLE_HTTP AND SSL_ENABLED)







<
|
|
|
<




>







1253
1254
1255
1256
1257
1258
1259

1260
1261
1262

1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
# TODO SSP1 missing for SPNEGO
_add_if("SPNEGO"        NOT CURL_DISABLE_CRYPTO_AUTH AND
                        (HAVE_GSSAPI OR USE_WINDOWS_SSPI))
_add_if("Kerberos"      NOT CURL_DISABLE_CRYPTO_AUTH AND
                        (HAVE_GSSAPI OR USE_WINDOWS_SSPI))
# NTLM support requires crypto function adaptions from various SSL libs
# TODO alternative SSL libs tests for SSP1, GNUTLS, NSS

_add_if("NTLM"        use_ntlm)
# TODO missing option (autoconf: --enable-ntlm-wb)
_add_if("NTLM_WB"     use_ntlm AND NOT CURL_DISABLE_HTTP AND NTLM_WB_ENABLED)

# TODO missing option (--enable-tls-srp), depends on GNUTLS_SRP/OPENSSL_SRP
_add_if("TLS-SRP"       USE_TLS_SRP)
# TODO option --with-nghttp2 tests for nghttp2 lib and nghttp2/nghttp2.h header
_add_if("HTTP2"         USE_NGHTTP2)
_add_if("HTTPS-proxy"   SSL_ENABLED AND (USE_OPENSSL OR USE_GNUTLS OR USE_NSS))
string(REPLACE ";" " " SUPPORT_FEATURES "${_items}")
message(STATUS "Enabled features: ${SUPPORT_FEATURES}")

# Clear list and try to detect available protocols
set(_items)
_add_if("HTTP"          NOT CURL_DISABLE_HTTP)
_add_if("HTTPS"         NOT CURL_DISABLE_HTTP AND SSL_ENABLED)
1257
1258
1259
1260
1261
1262
1263


1264
1265
1266
1267
1268
1269
1270
_add_if("DICT"          NOT CURL_DISABLE_DICT)
_add_if("TFTP"          NOT CURL_DISABLE_TFTP)
_add_if("GOPHER"        NOT CURL_DISABLE_GOPHER)
_add_if("POP3"          NOT CURL_DISABLE_POP3)
_add_if("POP3S"         NOT CURL_DISABLE_POP3 AND SSL_ENABLED)
_add_if("IMAP"          NOT CURL_DISABLE_IMAP)
_add_if("IMAPS"         NOT CURL_DISABLE_IMAP AND SSL_ENABLED)


_add_if("SMTP"          NOT CURL_DISABLE_SMTP)
_add_if("SMTPS"         NOT CURL_DISABLE_SMTP AND SSL_ENABLED)
_add_if("SCP"           USE_LIBSSH2)
_add_if("SFTP"          USE_LIBSSH2)
_add_if("RTSP"          NOT CURL_DISABLE_RTSP)
_add_if("RTMP"          USE_LIBRTMP)
if(_items)







>
>







1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
_add_if("DICT"          NOT CURL_DISABLE_DICT)
_add_if("TFTP"          NOT CURL_DISABLE_TFTP)
_add_if("GOPHER"        NOT CURL_DISABLE_GOPHER)
_add_if("POP3"          NOT CURL_DISABLE_POP3)
_add_if("POP3S"         NOT CURL_DISABLE_POP3 AND SSL_ENABLED)
_add_if("IMAP"          NOT CURL_DISABLE_IMAP)
_add_if("IMAPS"         NOT CURL_DISABLE_IMAP AND SSL_ENABLED)
_add_if("SMB"           NOT CURL_DISABLE_SMB AND use_ntlm)
_add_if("SMBS"          NOT CURL_DISABLE_SMB AND SSL_ENABLED AND use_ntlm)
_add_if("SMTP"          NOT CURL_DISABLE_SMTP)
_add_if("SMTPS"         NOT CURL_DISABLE_SMTP AND SSL_ENABLED)
_add_if("SCP"           USE_LIBSSH2)
_add_if("SFTP"          USE_LIBSSH2)
_add_if("RTSP"          NOT CURL_DISABLE_RTSP)
_add_if("RTMP"          USE_LIBRTMP)
if(_items)
Changes to jni/curl/Makefile.in.
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is







|







39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
443
444
445
446
447
448
449

450
451
452
453
454
455
456
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@

USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@







>







443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
USE_WOLFSSH = @USE_WOLFSSH@
USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
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
LIB_VAUTH_CFILES = vauth/vauth.c vauth/cleartext.c vauth/cram.c         \
  vauth/digest.c vauth/digest_sspi.c vauth/krb5_gssapi.c                \
  vauth/krb5_sspi.c vauth/ntlm.c vauth/ntlm_sspi.c vauth/oauth2.c       \
  vauth/spnego_gssapi.c vauth/spnego_sspi.c

LIB_VAUTH_HFILES = vauth/vauth.h vauth/digest.h vauth/ntlm.h
LIB_VTLS_CFILES = vtls/openssl.c vtls/gtls.c vtls/vtls.c vtls/nss.c     \
  vtls/polarssl.c vtls/polarssl_threadlock.c                            \
  vtls/wolfssl.c vtls/schannel.c vtls/schannel_verify.c                 \
  vtls/sectransp.c vtls/gskit.c vtls/mbedtls.c vtls/mesalink.c          \
  vtls/bearssl.c

LIB_VTLS_HFILES = vtls/openssl.h vtls/vtls.h vtls/gtls.h                \
  vtls/nssg.h vtls/polarssl.h vtls/polarssl_threadlock.h                \
  vtls/wolfssl.h vtls/schannel.h vtls/sectransp.h vtls/gskit.h          \
  vtls/mbedtls.h vtls/mesalink.h vtls/bearssl.h

LIB_VQUIC_CFILES = vquic/ngtcp2.c vquic/quiche.c
LIB_VQUIC_HFILES = vquic/ngtcp2.h vquic/quiche.h
LIB_VSSH_CFILES = vssh/libssh2.c vssh/libssh.c
LIB_VSSH_HFILES = vssh/ssh.h
LIB_CFILES = file.c timeval.c base64.c hostip.c progress.c formdata.c   \
  cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c       \
  ldap.c version.c getenv.c escape.c mprintf.c telnet.c netrc.c         \
  getinfo.c transfer.c strcase.c easy.c security.c curl_fnmatch.c       \
  fileinfo.c ftplistparser.c wildcard.c krb5.c memdebug.c http_chunks.c \
  strtok.c connect.c llist.c hash.c multi.c content_encoding.c share.c  \
  http_digest.c md4.c md5.c http_negotiate.c inet_pton.c strtoofft.c    \
  strerror.c amigaos.c hostasyn.c hostip4.c hostip6.c hostsyn.c         \
  inet_ntop.c parsedate.c select.c tftp.c splay.c strdup.c socks.c      \
  curl_addrinfo.c socks_gssapi.c socks_sspi.c                           \
  curl_sspi.c slist.c nonblock.c curl_memrchr.c imap.c pop3.c smtp.c    \
  pingpong.c rtsp.c curl_threads.c warnless.c hmac.c curl_rtmp.c        \
  openldap.c curl_gethostname.c gopher.c idn_win32.c                    \
  http_proxy.c non-ascii.c asyn-ares.c asyn-thread.c curl_gssapi.c      \
  http_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_sasl.c rand.c        \
  curl_multibyte.c hostcheck.c conncache.c dotdot.c                     \
  x509asn1.c http2.c smb.c curl_endian.c curl_des.c system_win32.c      \
  mime.c sha256.c setopt.c curl_path.c curl_ctype.c curl_range.c psl.c  \
  doh.c urlapi.c curl_get_line.c altsvc.c socketpair.c

LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \
  formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h if2ip.h         \
  speedcheck.h urldata.h curl_ldap.h escape.h telnet.h getinfo.h        \
  strcase.h curl_sec.h memdebug.h http_chunks.h curl_fnmatch.h          \
  wildcard.h fileinfo.h ftplistparser.h strtok.h connect.h llist.h      \
  hash.h content_encoding.h share.h curl_md4.h curl_md5.h http_digest.h \
  http_negotiate.h inet_pton.h amigaos.h strtoofft.h strerror.h         \
  inet_ntop.h curlx.h curl_memory.h curl_setup.h transfer.h select.h    \
  easyif.h multiif.h parsedate.h tftp.h sockaddr.h splay.h strdup.h     \
  socks.h curl_base64.h curl_addrinfo.h curl_sspi.h                     \
  slist.h nonblock.h curl_memrchr.h imap.h pop3.h smtp.h pingpong.h     \
  rtsp.h curl_threads.h warnless.h curl_hmac.h curl_rtmp.h              \
  curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h           \
  http_ntlm.h curl_gssapi.h curl_ntlm_wb.h curl_ntlm_core.h             \
  curl_sasl.h curl_multibyte.h hostcheck.h conncache.h                  \
  curl_setup_once.h multihandle.h setup-vms.h dotdot.h                  \
  x509asn1.h http2.h sigpipe.h smb.h curl_endian.h curl_des.h           \
  curl_printf.h system_win32.h rand.h mime.h curl_sha256.h setopt.h     \
  curl_path.h curl_ctype.h curl_range.h psl.h doh.h urlapi-int.h        \
  curl_get_line.h altsvc.h quic.h socketpair.h

LIB_RCFILES = libcurl.rc
CSOURCES = $(LIB_CFILES) $(LIB_VAUTH_CFILES) $(LIB_VTLS_CFILES) \
  $(LIB_VQUIC_CFILES) $(LIB_VSSH_CFILES)

HHEADERS = $(LIB_HFILES) $(LIB_VAUTH_HFILES) $(LIB_VTLS_HFILES) \
  $(LIB_VQUIC_HFILES) $(LIB_VSSH_HFILES)







<
|
|
|

|
|
|
|



|



















|




















|







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
LIB_VAUTH_CFILES = vauth/vauth.c vauth/cleartext.c vauth/cram.c         \
  vauth/digest.c vauth/digest_sspi.c vauth/krb5_gssapi.c                \
  vauth/krb5_sspi.c vauth/ntlm.c vauth/ntlm_sspi.c vauth/oauth2.c       \
  vauth/spnego_gssapi.c vauth/spnego_sspi.c

LIB_VAUTH_HFILES = vauth/vauth.h vauth/digest.h vauth/ntlm.h
LIB_VTLS_CFILES = vtls/openssl.c vtls/gtls.c vtls/vtls.c vtls/nss.c     \

  vtls/mbedtls_threadlock.c vtls/wolfssl.c vtls/schannel.c              \
  vtls/schannel_verify.c vtls/sectransp.c vtls/gskit.c vtls/mbedtls.c   \
  vtls/mesalink.c vtls/bearssl.c

LIB_VTLS_HFILES = vtls/openssl.h vtls/vtls.h vtls/gtls.h vtls/nssg.h    \
  vtls/mbedtls_threadlock.h vtls/wolfssl.h vtls/schannel.h              \
  vtls/sectransp.h vtls/gskit.h vtls/mbedtls.h vtls/mesalink.h          \
  vtls/bearssl.h

LIB_VQUIC_CFILES = vquic/ngtcp2.c vquic/quiche.c
LIB_VQUIC_HFILES = vquic/ngtcp2.h vquic/quiche.h
LIB_VSSH_CFILES = vssh/libssh2.c vssh/libssh.c vssh/wolfssh.c
LIB_VSSH_HFILES = vssh/ssh.h
LIB_CFILES = file.c timeval.c base64.c hostip.c progress.c formdata.c   \
  cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c       \
  ldap.c version.c getenv.c escape.c mprintf.c telnet.c netrc.c         \
  getinfo.c transfer.c strcase.c easy.c security.c curl_fnmatch.c       \
  fileinfo.c ftplistparser.c wildcard.c krb5.c memdebug.c http_chunks.c \
  strtok.c connect.c llist.c hash.c multi.c content_encoding.c share.c  \
  http_digest.c md4.c md5.c http_negotiate.c inet_pton.c strtoofft.c    \
  strerror.c amigaos.c hostasyn.c hostip4.c hostip6.c hostsyn.c         \
  inet_ntop.c parsedate.c select.c tftp.c splay.c strdup.c socks.c      \
  curl_addrinfo.c socks_gssapi.c socks_sspi.c                           \
  curl_sspi.c slist.c nonblock.c curl_memrchr.c imap.c pop3.c smtp.c    \
  pingpong.c rtsp.c curl_threads.c warnless.c hmac.c curl_rtmp.c        \
  openldap.c curl_gethostname.c gopher.c idn_win32.c                    \
  http_proxy.c non-ascii.c asyn-ares.c asyn-thread.c curl_gssapi.c      \
  http_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_sasl.c rand.c        \
  curl_multibyte.c hostcheck.c conncache.c dotdot.c                     \
  x509asn1.c http2.c smb.c curl_endian.c curl_des.c system_win32.c      \
  mime.c sha256.c setopt.c curl_path.c curl_ctype.c curl_range.c psl.c  \
  doh.c urlapi.c curl_get_line.c altsvc.c socketpair.c rename.c

LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \
  formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h if2ip.h         \
  speedcheck.h urldata.h curl_ldap.h escape.h telnet.h getinfo.h        \
  strcase.h curl_sec.h memdebug.h http_chunks.h curl_fnmatch.h          \
  wildcard.h fileinfo.h ftplistparser.h strtok.h connect.h llist.h      \
  hash.h content_encoding.h share.h curl_md4.h curl_md5.h http_digest.h \
  http_negotiate.h inet_pton.h amigaos.h strtoofft.h strerror.h         \
  inet_ntop.h curlx.h curl_memory.h curl_setup.h transfer.h select.h    \
  easyif.h multiif.h parsedate.h tftp.h sockaddr.h splay.h strdup.h     \
  socks.h curl_base64.h curl_addrinfo.h curl_sspi.h                     \
  slist.h nonblock.h curl_memrchr.h imap.h pop3.h smtp.h pingpong.h     \
  rtsp.h curl_threads.h warnless.h curl_hmac.h curl_rtmp.h              \
  curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h           \
  http_ntlm.h curl_gssapi.h curl_ntlm_wb.h curl_ntlm_core.h             \
  curl_sasl.h curl_multibyte.h hostcheck.h conncache.h                  \
  curl_setup_once.h multihandle.h setup-vms.h dotdot.h                  \
  x509asn1.h http2.h sigpipe.h smb.h curl_endian.h curl_des.h           \
  curl_printf.h system_win32.h rand.h mime.h curl_sha256.h setopt.h     \
  curl_path.h curl_ctype.h curl_range.h psl.h doh.h urlapi-int.h        \
  curl_get_line.h altsvc.h quic.h socketpair.h rename.h

LIB_RCFILES = libcurl.rc
CSOURCES = $(LIB_CFILES) $(LIB_VAUTH_CFILES) $(LIB_VTLS_CFILES) \
  $(LIB_VQUIC_CFILES) $(LIB_VSSH_CFILES)

HHEADERS = $(LIB_HFILES) $(LIB_VAUTH_HFILES) $(LIB_VTLS_HFILES) \
  $(LIB_VQUIC_HFILES) $(LIB_VSSH_HFILES)
Changes to jni/curl/README.
16
17
18
19
20
21
22


23
24
25
26
27
28
29
  learn how!

  You find answers to the most frequent questions we get in the FAQ document.

  Study the COPYING file for distribution terms and similar. If you distribute
  curl binaries or other binaries that involve libcurl, you might enjoy the
  LICENSE-MIXING document.



CONTACT

  If you have problems, questions, ideas or suggestions, please contact us
  by posting to a suitable mailing list. See https://curl.haxx.se/mail/

  All contributors to the project are listed in the THANKS document.







>
>







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  learn how!

  You find answers to the most frequent questions we get in the FAQ document.

  Study the COPYING file for distribution terms and similar. If you distribute
  curl binaries or other binaries that involve libcurl, you might enjoy the
  LICENSE-MIXING document.

  All of those documents and more can be found in the docs/ directory.

CONTACT

  If you have problems, questions, ideas or suggestions, please contact us
  by posting to a suitable mailing list. See https://curl.haxx.se/mail/

  All contributors to the project are listed in the THANKS document.
Changes to jni/curl/RELEASE-NOTES.
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
curl and libcurl 7.68.0

 Public curl releases:         188
 Command line options:         229
 curl_easy_setopt() options:   269
 Public functions in libcurl:  82
 Contributors:                 2088

This release includes the following changes:

 o TLS: add BearSSL vtls implementation [37]
 o XFERINFOFUNCTION: support CURL_PROGRESSFUNC_CONTINUE [36]
 o curl: add --etag-compare and --etag-save [31]
 o curl: add --parallel-immediate [29]
 o multi: add curl_multi_wakeup() [38]
 o openssl: CURLSSLOPT_NO_PARTIALCHAIN can disable partial cert chains [45]


This release includes the following bugfixes:

 o CVE-2019-15601: file: on Windows, refuse paths that start with \\ [106]
 o Azure Pipelines: add several builds
 o CMake: add support for building with the NSS vtls backend [43]


 o CURL-DISABLE: initial docs for the CURL_DISABLE_* defines [19]
 o CURLOPT_HEADERFUNCTION.3: Document that size is always 1 [100]

 o CURLOPT_QUOTE.3: fix typos [78]
 o CURLOPT_READFUNCTION.3: fix the example [107]
 o CURLOPT_URL.3: "curl supports SMB version 1 (only)"
 o CURLOPT_VERBOSE.3: see also ERRORBUFFER
 o HISTORY: added cmake, HTTP/3 and parallel downloads with curl
 o HISTORY: the SMB(S) support landed in 2014
 o INSTALL.md: provide Android build instructions [10]
 o KNOWN_BUGS: Connection information when using TCP Fast Open [85]
 o KNOWN_BUGS: LDAP on Windows doesn't work correctly [86]

 o KNOWN_BUGS: TLS session cache doesn't work with TFO [56]
 o OPENSOCKETFUNCTION.3: correct the purpose description [48]
 o TrackMemory tests: always remove CR before LF [111]
 o altsvc: bump to h3-24 [6]
 o altsvc: make the save function ignore NULL filenames [67]
 o build: Disable Visual Studio warning "conditional expression is constant" [49]
 o build: fix for CURL_DISABLE_DOH [2]
 o checksrc.bat: Add a check for vquic and vssh directories [40]
 o checksrc: repair the copyrightyear check [25]
 o cirrus-ci: enable clang sanitizers on freebsd 13 [60]
 o cirrus: Drop the FreeBSD 10.4 build
 o config-win32: cpu-machine-OS for Windows on ARM [13]


 o configure: avoid unportable `==' test(1) operator [1]
 o configure: enable IPv6 support without `getaddrinfo` [44]



 o configure: fix typo in help text [4]
 o conncache: CONNECT_ONLY connections assumed always in-use [71]
 o conncache: fix multi-thread use of shared connection cache [61]
 o copyrights: fix copyright year range [25]
 o create_conn: prefer multiplexing to using new connections [76]
 o curl -w: handle a blank input file correctly [105]
 o curl.h: add two missing defines for "pre ISO C" compilers [75]
 o curl/parseconfig: fix mem-leak [81]
 o curl/parseconfig: use curl_free() to free memory allocated by libcurl [80]
 o curl: cleanup multi handle on failure [103]
 o curl: fix --upload-file . hangs if delay in STDIN [35]
 o curl: fix -T globbing [16]
 o curl: improved cleanup in upload error path [69]
 o curl: make a few char pointers point to const char instead [95]
 o curl: properly free mimepost data [104]
 o curl: show better error message when no homedir is found [47]
 o curl: show error for --http3 if libcurl lacks support [108]
 o curl_setup_once: consistently use WHILE_FALSE in macros [54]
 o define: remove HAVE_ENGINE_LOAD_BUILTIN_ENGINES, not used anymore [83]
 o docs: Change 'experiemental' to 'experimental' [30]
 o docs: TLS SRP doesn't work with TLS 1.3 [87]


 o docs: fix several typos [62]


 o docs: mention CURL_MAX_INPUT_LENGTH restrictions [109]
 o doh: improved both encoding and decoding [11]
 o doh: make it behave when built without proxy support [68]
 o examples/postinmemory.c: Call curl_global_cleanup always [101]
 o examples/url2file.c: corrected erroneous comment [102]

 o examples: add multi-poll.c [14]
 o global_init: undo the "intialized" bump in case of failure [52]
 o hostip: suppress compiler warning [64]
 o http_ntlm: Remove duplicate NSS initialisation [55]
 o lib: Move lib/ssh.h -> lib/vssh/ssh.h [9]
 o lib: fix compiler warnings with `CURL_DISABLE_VERBOSE_STRINGS` [93]
 o lib: fix warnings found when porting to NuttX [99]

 o lib: remove ASSIGNWITHINCONDITION exceptions, use our code style [84]
 o lib: remove erroneous +x file permission on some c files [99]
 o libssh2: add support for ECDSA and ed25519 knownhost keys [89]


 o multi.h: remove INITIAL_MAX_CONCURRENT_STREAMS from public header [110]






 o multi: free sockhash on OOM [63]


 o multi_poll: avoid busy-loop when called without easy handles attached [15]
 o ngtcp2: Support the latest update key callback type [92]
 o ngtcp2: fix thread-safety bug in error-handling [33]
 o ngtcp2: free used resources on disconnect [7]
 o ngtcp2: handle key updates as ngtcp2 master branch tells us [8]
 o ngtcp2: increase QUIC window size when data is consumed [12]
 o ngtcp2: use overflow buffer for extra HTTP/3 data [5]


 o ntlm: USE_WIN32_CRYPTO check removed to get USE_NTLM2SESSION set [3]
 o ntlm_wb: fix double-free in OOM [65]

 o openssl: Revert to less sensitivity for SYSCALL errors [26]
 o openssl: improve error message for SYSCALL during connect [27]
 o openssl: prevent recursive function calls from ctx callbacks [18]
 o openssl: retrieve reported LibreSSL version at runtime [50]
 o openssl: set X509_V_FLAG_PARTIAL_CHAIN by default [46]
 o parsedate: offer a getdate_capped() alternative [53]
 o pause: avoid updating socket if done was already called [22]
 o projects: Fix Visual Studio projects SSH builds [41]
 o projects: Fix Visual Studio wolfSSL configurations
 o quiche: reject HTTP/3 headers in the wrong order [17]
 o remove_handle: clear expire timers after multi_done() [20]
 o runtests: --repeat=[num] to repeat tests [91]
 o runtests: introduce --shallow to reduce huge torture tests [70]
 o schannel: fix --tls-max for when min is --tlsv1 or default [39]
 o setopt: Fix ALPN / NPN user option when built without HTTP2 [42]
 o strerror: Add Curl_winapi_strerror for Win API specific errors [51]
 o strerror: Fix an error looking up some Windows error strings
 o strerror: Fix compiler warning "empty expression" [79]
 o system.h: fix for MCST lcc compiler [23]
 o test/sws: search for "Testno:" header unconditionally if no testno [73]
 o test1175: verify symbols-in-versions and libcurl-errors.3 in sync [28]
 o test1270: a basic -w redirect_url test [82]
 o test1456: remove the use of a fixed local port number [77]

 o test1558: use double slash after file: [21]
 o test1560: require IPv6 for IPv6 aware URL parsing [24]
 o tests/lib1557: fix mem-leak in OOM [66]
 o tests/lib1559: fix mem-leak in OOM [66]
 o tests/lib1591: free memory properly on OOM, in the trailers callback [90]
 o tests/unit1607: fix mem-leak in OOM [66]
 o tests/unit1609: fix mem-leak in OOM [66]
 o tests/unit1620: fix bad free in OOM [66]
 o tests: Change NTLM tests to require SSL [96]
 o tests: Fix bounce requests with truncated writes [94]
 o tests: fix build with `CURL_DISABLE_DOH` [64]
 o tests: fix permissions of ssh keys in WSL [58]
 o tests: make it possible to set executable extensions [58]
 o tests: make sure checksrc runs on header files too
 o tests: set LC_ALL=en_US.UTF-8 instead of blank in several tests [74]
 o tests: use DoH feature for DoH tests [64]
 o tests: use \r\n for log messages in WSL [58]
 o tool_operate: fix mem leak when failed config parse [98]
 o travis: Fix error detection [97]

 o travis: abandon coveralls, it is not reliable [57]
 o travis: build ngtcp2 with --enable-lib-only [32]
 o travis: export the CC/CXX variables when set [34]
 o vtls: make BearSSL possible to set with CURL_SSL_BACKEND [72]
 o winbuild: Define CARES_STATICLIB when WITH_CARES=static [59]
 o winbuild: Document CURL_STATICLIB requirement for static libcurl [88]


This release includes the following known bugs:

 o see docs/KNOWN_BUGS (https://curl.haxx.se/docs/knownbugs.html)

This release would not have looked like this without help, code, reports and
advice from friends like these:

  3dyd on github, Anderson Sasaki, Andreas Falkenhahn, Andrew Ishchuk,

  bdry on github, Bjoern Franke, Brian Carpenter, bxac on github,
  Bylon2 on github, Christian Schmitz, Christopher Head, Christopher Reid,
  Christoph M. Becker, Cynthia Coan, Dan Fandrich, Daniel Gustafsson,

  Daniel Stenberg, David Benjamin, Emil Engler, Fernando Muñoz, Frank Gevaerts,
  Geeknik Labs, Gergely Nagy, Gisle Vanem, JanB on github, Javier Blazquez,
  Jeff Mears, Jeffrey Walton, John Schroeder, Kamil Dudka,

  kouzhudong on github, Kunal Ekawde, Leonardo Taccari, Marc Aldorasi,
  Marcel Raad, marc-groundctl on github, Marc Hörsken, Maros Priputen,
  Massimiliano Fantuzzi, Max Kellermann, Melissa Mears, Michael Forney,
  Michael Vittiglio, Mohammad Hasbini, Niall O'Reilly, Paul Groke,

  Paul Hoffman, Paul Joyce, Paulo Roberto Tomasi, Pavel Löbl, Pavel Pavlov,
  Peter Wu, Ram Krushna Mishra, Ray Satiro, Richard Alcock, Richard Bowker,
  Rickard Hallerbäck, Santino Keupp, sayrer on github, Shailesh Kapse,
  Simon Warta, SLDiggie on github, Steve Holme, Tatsuhiro Tsujikawa,
  Tom van der Woerdt, Victor Magierski, Vlastimil Ovčáčík, Wyatt O'Day,
  Xiang Xiao, Xiaoyin Liu,
  (70 contributors)

        Thanks! (and sorry if I forgot to mention someone)

References to bug reports and discussions on issues:

 [1] = https://curl.haxx.se/bug/?i=4567
 [2] = https://curl.haxx.se/bug/?i=4565
 [3] = https://curl.haxx.se/bug/?i=3704
 [4] = https://curl.haxx.se/bug/?i=4570
 [5] = https://curl.haxx.se/bug/?i=4525
 [6] = https://curl.haxx.se/bug/?i=4604
 [7] = https://curl.haxx.se/bug/?i=4614
 [8] = https://curl.haxx.se/bug/?i=4612
 [9] = https://curl.haxx.se/bug/?i=4609
 [10] = https://curl.haxx.se/bug/?i=4606
 [11] = https://curl.haxx.se/bug/?i=4598
 [12] = https://curl.haxx.se/bug/?i=4600
 [13] = https://curl.haxx.se/bug/?i=4590
 [14] = https://curl.haxx.se/bug/?i=4596
 [15] = https://curl.haxx.se/bug/?i=4594
 [16] = https://curl.haxx.se/bug/?i=4588
 [17] = https://curl.haxx.se/bug/?i=4571
 [18] = https://curl.haxx.se/bug/?i=4585
 [19] = https://curl.haxx.se/bug/?i=4545
 [20] = https://curl.haxx.se/bug/?i=4575
 [21] = https://curl.haxx.se/bug/?i=4554
 [22] = https://curl.haxx.se/bug/?i=4563
 [23] = https://curl.haxx.se/bug/?i=4576
 [24] = https://curl.haxx.se/bug/?i=4556
 [25] = https://curl.haxx.se/bug/?i=4549
 [26] = https://curl.haxx.se/bug/?i=4624
 [27] = https://curl.haxx.se/bug/?i=4593
 [28] = https://curl.haxx.se/bug/?i=4628
 [29] = https://curl.haxx.se/bug/?i=4500
 [30] = https://curl.haxx.se/bug/?i=4618
 [31] = https://curl.haxx.se/bug/?i=4543
 [32] = https://curl.haxx.se/bug/?i=4646
 [33] = https://curl.haxx.se/bug/?i=4645
 [34] = https://curl.haxx.se/bug/?i=4637
 [35] = https://curl.haxx.se/bug/?i=2051
 [36] = https://curl.haxx.se/bug/?i=4599
 [37] = https://curl.haxx.se/bug/?i=4597
 [38] = https://curl.haxx.se/bug/?i=4418
 [39] = https://curl.haxx.se/bug/?i=4633
 [40] = https://curl.haxx.se/bug/?i=4607
 [41] = https://curl.haxx.se/bug/?i=4492
 [42] = https://curl.haxx.se/bug/?i=4668
 [43] = https://curl.haxx.se/bug/?i=4663
 [44] = https://curl.haxx.se/bug/?i=4662
 [45] = https://curl.haxx.se/bug/?i=4665
 [46] = https://curl.haxx.se/mail/lib-2019-11/0094.html
 [47] = https://curl.haxx.se/bug/?i=4644
 [48] = https://curl.haxx.se/mail/lib-2019-12/0007.html
 [49] = https://curl.haxx.se/bug/?i=4658
 [50] = https://curl.haxx.se/bug/?i=2425
 [51] = https://curl.haxx.se/bug/?i=4550
 [52] = https://curl.haxx.se/bug/?i=4636
 [53] = https://curl.haxx.se/bug/?i=4152
 [54] = https://curl.haxx.se/bug/?i=4649
 [55] = https://curl.haxx.se/bug/?i=3935
 [56] = https://curl.haxx.se/bug/?i=4301
 [57] = https://curl.haxx.se/bug/?i=4694
 [58] = https://curl.haxx.se/bug/?i=3899
 [59] = https://curl.haxx.se/bug/?i=4688
 [60] = https://curl.haxx.se/bug/?i=4557
 [61] = https://curl.haxx.se/bug/?i=4544
 [62] = https://curl.haxx.se/bug/?i=4680
 [63] = https://curl.haxx.se/bug/?i=4713
 [64] = https://curl.haxx.se/bug/?i=4692
 [65] = https://curl.haxx.se/bug/?i=4710
 [66] = https://curl.haxx.se/bug/?i=4709
 [67] = https://curl.haxx.se/bug/?i=4707
 [68] = https://curl.haxx.se/bug/?i=4704
 [69] = https://curl.haxx.se/bug/?i=4705
 [70] = https://curl.haxx.se/bug/?i=4699
 [71] = https://curl.haxx.se/bug/?i=4369
 [72] = https://curl.haxx.se/bug/?i=4698
 [73] = https://curl.haxx.se/bug/?i=4744
 [74] = https://curl.haxx.se/bug/?i=4738
 [75] = https://curl.haxx.se/bug/?i=4739
 [76] = https://curl.haxx.se/bug/?i=4732
 [77] = https://curl.haxx.se/bug/?i=4733
 [78] = https://curl.haxx.se/bug/?i=4736
 [79] = https://github.com/curl/curl/commit/5b22e1a#r36458547
 [80] = https://curl.haxx.se/bug/?i=4730
 [81] = https://curl.haxx.se/bug/?i=4731
 [82] = https://curl.haxx.se/bug/?i=4728
 [83] = https://curl.haxx.se/bug/?i=4725
 [84] = https://curl.haxx.se/bug/?i=4683
 [85] = https://curl.haxx.se/bug/?i=4296
 [86] = https://curl.haxx.se/bug/?i=4261
 [87] = https://curl.haxx.se/bug/?i=4262
 [88] = https://curl.haxx.se/bug/?i=4721
 [89] = https://curl.haxx.se/bug/?i=4714
 [90] = https://curl.haxx.se/bug/?i=4720
 [91] = https://curl.haxx.se/bug/?i=4715
 [92] = https://curl.haxx.se/bug/?i=4735
 [93] = https://curl.haxx.se/bug/?i=4775
 [94] = https://github.com/curl/curl/pull/4717#issuecomment-570240785
 [95] = https://curl.haxx.se/bug/?i=4771
 [96] = https://curl.haxx.se/bug/?i=4768
 [97] = https://curl.haxx.se/bug/?i=3730
 [98] = https://curl.haxx.se/bug/?i=4767
 [99] = https://curl.haxx.se/bug/?i=4756
 [100] = https://curl.haxx.se/bug/?i=4758
 [101] = https://curl.haxx.se/bug/?i=4751
 [102] = https://curl.haxx.se/bug/?i=4745
 [103] = https://curl.haxx.se/bug/?i=4772
 [104] = https://curl.haxx.se/bug/?i=4781
 [105] = https://curl.haxx.se/bug/?i=4786
 [106] = https://curl.haxx.se/docs/CVE-2019-15601.html
 [107] = https://curl.haxx.se/bug/?i=4787
 [108] = https://curl.haxx.se/bug/?i=4785
 [109] = https://curl.haxx.se/bug/?i=4783
 [110] = https://curl.haxx.se/bug/?i=4790
 [111] = https://curl.haxx.se/bug/?i=4788
|

|
|
|

|



|
<
<
|
<
<
>



|
|
|
>
>
|
<
>
|
|
|
<
|
<
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
>
>
|
|
>
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
|
>
>
|
<
|
<
<
>
|
<
<
|
<
|
<
>
|
|
|
>
>
|
>
>
>
>
>
>
|
>
>
|
|
|
<
<
<
|
>
>
|
|
>
|
<
<
|
<
<
<
|
<
|
<
<
<
<
<
<
<
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
>
|
|
<
|
<
<
>








|
>
|
|
|
>
|
|
<
>
|
|
<
<
>
|
|
|
<
|
<
|





|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
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

curl and libcurl 7.69.0

 Public curl releases:         189
 Command line options:         230
 curl_easy_setopt() options:   270
 Public functions in libcurl:  82
 Contributors:                 2113

This release includes the following changes:

 o polarssl: removed [16]


 o smtp: add CURLOPT_MAIL_RCPT_ALLLOWFAILS and --mail-rcpt-allowfails [23]


 o wolfSSH: new SSH backend [5]

This release includes the following bugfixes:

 o altsvc: improved header parser [63]
 o altsvc: keep a copy of the file name to survive handle reset [50]
 o altsvc: make saving the cache an atomic operation [84]
 o altsvc: use h3-27
 o azure: disable brotli on the macos debug-builds [68]
 o build: remove all HAVE_OPENSSL_ENGINE_H defines [99]

 o checksrc.bat: Fix not being able to run script from the main curl dir [54]
 o cleanup: fix several comment typos [78]
 o cleanup: fix typos and wording in docs and comments [39]
 o cmake: add support for CMAKE_LTO option [22]

 o cmake: clean up and improve build procedures [100]

 o cmake: enable SMB for Windows builds [12]

 o cmake: improve libssh2 check on Windows [8]
 o cmake: Show HTTPS-proxy in the features output [110]
 o cmake: support specifying the target Windows version [27]
 o cmake: use check_symbol_exists also for inet_pton [19]
 o configure.ac: fix comments about --with-quiche [53]
 o configure: disable metalink if mbedTLS is specified [105]
 o configure: disable metalink support for incompatible SSL/TLS [40]
 o conn: do not reuse connection if SOCKS proxy credentials differ [32]
 o conncache: removed unused Curl_conncache_bundle_size() [33]
 o connect: remove some spurious infof() calls [80]
 o connection reuse: respect the max_concurrent_streams limits [3]
 o contributors: also include people who contributed to curl-www [58]
 o contrithanks: use the most recent tag by default [59]
 o cookie: check __Secure- and __Host- case sensitively [43]
 o cookies: make saving atomic with a rename [85]
 o create-dirs.d: mention the mode [73]
 o curl: avoid using strlen for testing if a string is empty [37]
 o curl: error on --alt-svc use w/o support [61]
 o curl: let -D merge headers in one file again [25]
 o curl: make #0 not output the full URL [4]
 o curl: make the -# spaceship bar not wrap the line [30]
 o curl: remove 'config' field from OutStruct [6]
 o curl:progressbarinit: ignore column width from terminals < 20 [18]
 o curl_escape.3: add a link to curl_free [107]
 o curl_getenv.3: fix the memory handling description [107]
 o curl_global_init: assume the EINTR bit by default [31]
 o curl_global_init: move the IPv6 works status bool to multi handle [48]
 o CURLINFO_COOKIELIST.3: Fix example [67]
 o CURLOPT_ALTSVC_CTRL.3: fix the DEFAULT wording [74]
 o CURLOPT_PROXY_SSL_OPTIONS.3: Sync with CURLOPT_SSL_OPTIONS.3
 o CURLOPT_REDIR_PROTOCOLS.3: update the DEFAULT section [83]
 o data.d: remove "Multiple files can also be specified" [26]
 o digest: do not quote algorithm in HTTP authorisation [55]
 o docs/HTTP3: add --enable-alt-svc to curl's configure
 o docs/HTTP3: update the OpenSSL branch to use for ngtcp2
 o docs: fix typo on CURLINFO_RETRY_AFTER [101]
 o easy: remove dead code [72]
 o form.d: fix two minor typos [34]
 o ftp: convert 'sock_accepted' to a plain boolean [66]
 o ftp: remove superfluous checking for crlf in user or pwd [56]
 o ftp: shrink temp buffers used for PORT [60]
 o github action: add CIFuzz [77]
 o github: Instructions to post "uname -a" on Unix systems in issues [52]
 o GnuTLS: always send client cert [76]
 o gtls: fixed compilation when using GnuTLS < 3.5.0 [98]
 o hostip: move code to resolve IP address literals to `Curl_resolv` [13]
 o HTTP-COOKIES: describe the cookie file format [21]
 o HTTP-COOKIES: mention that a trailing newline is required [81]

 o http2: make pausing/unpausing set/clear local stream window [86]


 o http2: now requires nghttp2 >= 1.12.0 [75]
 o http: added 417 response treatment [89]


 o http: increase EXPECT_100_THRESHOLD to 1Mb [28]

 o http: mark POSTs with no body as "upload done" from the start [104]

 o http: move "oauth_bearer" from connectdata to Curl_easy [24]
 o include: remove non-curl prefixed defines [15]
 o KNOWN_BUGS: Multiple methods in a single WWW-Authenticate: header
 o libssh2: add support for forcing a hostkey type [7]
 o libssh2: fix variable type [17]
 o libssh: improve known hosts handling [87]
 o llist: removed unused Curl_llist_move() [33]
 o location.d: the method change is from POST to GET only [46]
 o md4: fixed compilation issues when using GNU TLS gcrypt [95]
 o md4: use init/update/final functions in Secure Transport [108]
 o md5: added implementation for mbedTLS [102]
 o mk-ca-bundle: add support for CKA_NSS_SERVER_DISTRUST_AFTER [36]
 o multi: change curl_multi_wait/poll to error on negative timeout [11]
 o multi: fix outdated comment [71]
 o multi: if Curl_readwrite sets 'comeback' use expire, not loop [65]
 o multi_done: if multiplexed, make conn->data point to another transfer [45]
 o multi_wait: stop loop when sread() returns zero [103]
 o ngtcp2: add error code for QUIC connection errors [10]
 o ngtcp2: fixed to only use AF_INET6 when ENABLE_IPV6 [63]



 o ngtcp2: update to git master and its draft-25 support [42]
 o ntlm: move the winbind data into the NTLM data structure
 o ntlm: pass the Curl_easy structure to the private winbind functions
 o ntlm: removed the dependency on the TLS libaries when using MD5 [93]
 o ntlm_wb: use Curl_socketpair() for greater portability [57]
 o oauth2-bearer.d: works for HTTP too [44]
 o openssl: make CURLINFO_CERTINFO not truncate x509v3 fields [35]


 o openssl: remove redundant assignment [38]



 o os400: fixed the build [29]

 o pause: force-drain the transfer on unpause [96]







 o quiche: update to draft-25 [41]
 o README: mention that the docs is in docs/ [49]
 o RELEASE-PROCEDURE: feature win is closed post-release a few days [62]
 o runtests: make random seed fixed for a month [1]
 o runtests: restore the command log [97]
 o schannel: make CURLOPT_CAINFO work better on Windows 7 [9]
 o schannel_verify: Fix alt names manual verify for UNICODE builds [20]
 o sha256: use crypto implementations when available [106]

 o singleuse.pl: support new API functions, fix curl_dbg_ handling [33]
 o smtp: support the SMTPUTF8 extension [90]
 o smtp: support UTF-8 based host names in MAIL FROM [109]
 o SOCKS: make the connect phase non-blocking [64]
 o strcase: turn Curl_raw_tolower into static [33]
 o strerror: increase STRERROR_LEN 128 -> 256 [70]
 o test1323: added missing 'unit test' feature requirement
 o tests: add a unit test for MD4 digest generation [92]
 o tests: add a unit test for SHA256 digest generation [94]
 o tests: add a unit test for the HMAC hash generation [91]
 o tests: deduce the tool name from the test case for unit tests [88]
 o tests: fix Python 3 compatibility of smbserver.py
 o tool_dirhie: allow directory traversal during creation [2]
 o tool_homedir: change GetEnv() to use libcurl's curl_getenv() [69]

 o tool_util: improve Windows version of tvnow() [82]
 o travis: update non-OpenSSL Linux jobs to Bionic [38]
 o url: include the failure reason when curl_win32_idn_to_ascii() fails [51]
 o urlapi: guess scheme properly with credentials given [47]
 o urldata: do string enums without #ifdefs for build scripts [29]

 o vtls: refactor Curl_multissl_version to make the code clearer [14]


 o win32: USE_WIN32_CRYPTO to enable Win32 based MD4, MD5 and SHA256 [79]

This release includes the following known bugs:

 o see docs/KNOWN_BUGS (https://curl.haxx.se/docs/knownbugs.html)

This release would not have looked like this without help, code, reports and
advice from friends like these:

  3dyd on github, Alessandro Ghedini, Anders Berg, Anderson Toshiyuki Sasaki,
  Andrew Potter, Andrius Merkys, Aron Rotteveel, Austin Green, bnfp on github,
  bramus on github, Brian Carpenter, bsammon on github, Christian Heimes,
  Christoph M. Becker, Craig Andrews, crazydef on github, Cristian Greco,
  Dan Fandrich, Daniel Gustafsson, Daniel Marjamäki, Daniel Stenberg,
  Dan Jacobson, dmitrmax on github, Edgaras Janušauskas, Emil Engler,
  Faizur Rahman, Frank Gevaerts, hamstergene on github, Harry Sintonen,
  IvanoG on github, James Fuller, Jeroen Ooms, jethrogb on github,

  Johannes Schindelin, Jonathan Cardoso Machado, Jon Rumsey, Joonas Kuorilehto,
  Kristian Mide, Kunal Ekawde, Leo Neat, Marc Aldorasi, Marcel Raad,
  Marc Hörsken, mbeifuss on github, Mike Frysinger, Mike Norton, Mischa Salle,


  MrdUkk on github, naost3rn on github, Nick Zitzmann, Nicolas Guillier,
  Orgad Shaneh, Patrick Monnerat, Pavel Volgarev, Pedro Monreal,
  Peter Piekarski, Peter Wu, Pierre-Yves Bigourdan, Ray Satiro, Robert Dunaj,
  Rolf Eike Beer, RuurdBeerstra on github, Santino Keupp, Steve Holme,

  Sunny Bean, Tobias Hieta, vshmuk on hackerone, ygthien on github, 加藤郁之,

  (69 contributors)

        Thanks! (and sorry if I forgot to mention someone)

References to bug reports and discussions on issues:

 [1] = https://curl.haxx.se/bug/?i=4734
 [2] = https://curl.haxx.se/bug/?i=4796
 [3] = https://curl.haxx.se/bug/?i=4779
 [4] = https://curl.haxx.se/bug/?i=4812
 [5] = https://daniel.haxx.se/blog/2020/01/12/curl-even-more-wolfed/
 [6] = https://curl.haxx.se/bug/?i=4807
 [7] = https://curl.haxx.se/bug/?i=4747
 [8] = https://curl.haxx.se/bug/?i=4804
 [9] = https://curl.haxx.se/bug/?i=3711
 [10] = https://curl.haxx.se/bug/?i=4754
 [11] = https://curl.haxx.se/bug/?i=4763
 [12] = https://curl.haxx.se/bug/?i=4717
 [13] = https://curl.haxx.se/bug/?i=4798
 [14] = https://curl.haxx.se/bug/?i=4803
 [15] = https://curl.haxx.se/bug/?i=4793
 [16] = https://curl.haxx.se/bug/?i=4825
 [17] = https://curl.haxx.se/bug/?i=4823
 [18] = https://curl.haxx.se/bug/?i=4818
 [19] = https://curl.haxx.se/bug/?i=4808
 [20] = https://curl.haxx.se/bug/?i=4761
 [21] = https://curl.haxx.se/bug/?i=4805
 [22] = https://curl.haxx.se/bug/?i=4799
 [23] = https://curl.haxx.se/bug/?i=4816
 [24] = https://curl.haxx.se/bug/?i=4824
 [25] = https://curl.haxx.se/bug/?i=4762
 [26] = https://curl.haxx.se/mail/archive-2020-01/0016.html
 [27] = https://curl.haxx.se/bug/?i=4815
 [28] = https://curl.haxx.se/bug/?i=4814
 [29] = https://curl.haxx.se/bug/?i=4822
 [30] = https://curl.haxx.se/bug/?i=4849
 [31] = https://curl.haxx.se/bug/?i=4840
 [32] = https://curl.haxx.se/bug/?i=4835
 [33] = https://curl.haxx.se/bug/?i=4842
 [34] = https://curl.haxx.se/bug/?i=4843
 [35] = https://curl.haxx.se/bug/?i=4837
 [36] = https://curl.haxx.se/bug/?i=4834
 [37] = https://curl.haxx.se/bug/?i=4873
 [38] = https://curl.haxx.se/bug/?i=4872
 [39] = https://curl.haxx.se/bug/?i=4869
 [40] = https://curl.haxx.se/bug/?i=5006
 [41] = https://curl.haxx.se/bug/?i=4867
 [42] = https://curl.haxx.se/bug/?i=4865
 [43] = https://curl.haxx.se/bug/?i=4864
 [44] = https://curl.haxx.se/bug/?i=4862
 [45] = https://curl.haxx.se/bug/?i=4845
 [46] = https://curl.haxx.se/bug/?i=4859
 [47] = https://curl.haxx.se/bug/?i=4856
 [48] = https://curl.haxx.se/bug/?i=4851
 [49] = https://curl.haxx.se/bug/?i=4830
 [50] = https://curl.haxx.se/bug/?i=4898
 [51] = https://curl.haxx.se/bug/?i=4899
 [52] = https://curl.haxx.se/bug/?i=4896
 [53] = https://curl.haxx.se/bug/?i=4897
 [54] = https://curl.haxx.se/bug/?i=4894
 [55] = https://curl.haxx.se/bug/?i=4890
 [56] = https://curl.haxx.se/bug/?i=4887
 [57] = https://curl.haxx.se/bug/?i=4886
 [58] = https://curl.haxx.se/bug/?i=4884
 [59] = https://curl.haxx.se/bug/?i=4883
 [60] = https://curl.haxx.se/bug/?i=4880
 [61] = https://curl.haxx.se/bug/?i=4878
 [62] = https://curl.haxx.se/bug/?i=4877
 [63] = https://curl.haxx.se/bug/?i=4875
 [64] = https://curl.haxx.se/bug/?i=4907
 [65] = https://curl.haxx.se/bug/?i=4927
 [66] = https://curl.haxx.se/bug/?i=4929
 [67] = https://curl.haxx.se/bug/?i=4930
 [68] = https://curl.haxx.se/bug/?i=4925
 [69] = https://curl.haxx.se/bug/?i=4774
 [70] = https://curl.haxx.se/bug/?i=4920
 [71] = https://curl.haxx.se/bug/?i=4901
 [72] = https://curl.haxx.se/bug/?i=4900
 [73] = https://curl.haxx.se/bug/?i=4766
 [74] = https://curl.haxx.se/bug/?i=4909
 [75] = https://curl.haxx.se/bug/?i=4961
 [76] = https://curl.haxx.se/bug/?i=1411
 [77] = https://curl.haxx.se/bug/?i=4960
 [78] = https://curl.haxx.se/bug/?i=4957
 [79] = https://curl.haxx.se/bug/?i=4955
 [80] = https://curl.haxx.se/bug/?i=4951
 [81] = https://curl.haxx.se/bug/?i=4946
 [82] = https://curl.haxx.se/bug/?i=4947
 [83] = https://curl.haxx.se/bug/?i=4943
 [84] = https://curl.haxx.se/bug/?i=4936
 [85] = https://curl.haxx.se/bug/?i=4914
 [86] = https://curl.haxx.se/bug/?i=4939
 [87] = https://curl.haxx.se/bug/?i=4953
 [88] = https://curl.haxx.se/bug/?i=4976
 [89] = https://curl.haxx.se/bug/?i=4949
 [90] = https://curl.haxx.se/bug/?i=4892
 [91] = https://curl.haxx.se/bug/?i=4973
 [92] = https://curl.haxx.se/bug/?i=4970
 [93] = https://curl.haxx.se/bug/?i=4967
 [94] = https://curl.haxx.se/bug/?i=4968
 [95] = https://curl.haxx.se/bug/?i=4959
 [96] = https://curl.haxx.se/bug/?i=4966
 [97] = https://curl.haxx.se/bug/?i=4911
 [98] = https://curl.haxx.se/bug/?i=4984
 [99] = https://curl.haxx.se/bug/?i=5007
 [100] = https://curl.haxx.se/bug/?i=4975
 [101] = https://curl.haxx.se/bug/?i=5005
 [102] = https://curl.haxx.se/bug/?i=4980
 [103] = https://curl.haxx.se/mail/archive-2020-02/0011.html
 [104] = https://curl.haxx.se/bug/?i=4996
 [105] = https://curl.haxx.se/bug/?i=5013
 [106] = https://curl.haxx.se/bug/?i=4956
 [107] = https://curl.haxx.se/bug/?i=5016
 [108] = https://curl.haxx.se/bug/?i=4979
 [109] = https://curl.haxx.se/bug/?i=4928
 [110] = https://curl.haxx.se/bug/?i=5025

Changes to jni/curl/configure.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for curl -.
#
# Report bugs to <a suitable curl mailing list: https://curl.haxx.se/mail/>.
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
#
#
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
#
# Copyright (c) 1998 - 2019 Daniel Stenberg, <daniel@haxx.se>
# This configure script may be copied, distributed and modified under the
# terms of the curl license; see COPYING for more details

## -------------------------------- ##
##  XC_CONFIGURE_PREAMBLE ver: 1.0  ##
## -------------------------------- ##














|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for curl -.
#
# Report bugs to <a suitable curl mailing list: https://curl.haxx.se/mail/>.
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
#
#
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
#
# Copyright (c) 1998 - 2020 Daniel Stenberg, <daniel@haxx.se>
# This configure script may be copied, distributed and modified under the
# terms of the curl license; see COPYING for more details

## -------------------------------- ##
##  XC_CONFIGURE_PREAMBLE ver: 1.0  ##
## -------------------------------- ##

910
911
912
913
914
915
916

917
918
919
920
921
922
923
USE_NGTCP2
USE_NGHTTP2
IDN_ENABLED
CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS_FALSE
CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS_TRUE
CURL_LT_SHLIB_VERSIONED_FLAVOUR
USE_LIBRTMP

USE_LIBSSH
USE_LIBSSH2
LIBMETALINK_CPPFLAGS
LIBMETALINK_LDFLAGS
LIBMETALINK_LIBS
USE_LIBPSL_FALSE
USE_LIBPSL_TRUE







>







910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
USE_NGTCP2
USE_NGHTTP2
IDN_ENABLED
CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS_FALSE
CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS_TRUE
CURL_LT_SHLIB_VERSIONED_FLAVOUR
USE_LIBRTMP
USE_WOLFSSH
USE_LIBSSH
USE_LIBSSH2
LIBMETALINK_CPPFLAGS
LIBMETALINK_LDFLAGS
LIBMETALINK_LIBS
USE_LIBPSL_FALSE
USE_LIBPSL_TRUE
1185
1186
1187
1188
1189
1190
1191

1192
1193
1194
1195
1196
1197
1198
with_ca_bundle
with_ca_path
with_ca_fallback
with_libpsl
with_libmetalink
with_libssh2
with_libssh

with_librtmp
enable_versioned_symbols
with_winidn
with_libidn2
with_nghttp2
with_ngtcp2
with_nghttp3







>







1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
with_ca_bundle
with_ca_path
with_ca_fallback
with_libpsl
with_libmetalink
with_libssh2
with_libssh
with_wolfssh
with_librtmp
enable_versioned_symbols
with_winidn
with_libidn2
with_nghttp2
with_ngtcp2
with_nghttp3
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069





2070
2071
2072
2073
2074
2075
2076
  --with-ca-fallback      Use the built in CA store of the SSL library
  --without-ca-fallback   Don't use the built in CA store of the SSL library
  --without-libpsl        disable support for libpsl cookie checking
  --with-libmetalink=PATH where to look for libmetalink, PATH points to the
                          installation root
  --without-libmetalink   disable libmetalink detection
  --with-libssh2=PATH     Where to look for libssh2, PATH points to the
                          LIBSSH2 installation; when possible, set the
                          PKG_CONFIG_PATH environment variable instead of
                          using this option
  --with-libssh2          enable LIBSSH2
  --with-libssh=PATH      Where to look for libssh, PATH points to the LIBSSH
                          installation; when possible, set the PKG_CONFIG_PATH
                          environment variable instead of using this option
  --with-libssh           enable LIBSSH





  --with-librtmp=PATH     Where to look for librtmp, PATH points to the
                          LIBRTMP installation; when possible, set the
                          PKG_CONFIG_PATH environment variable instead of
                          using this option
  --without-librtmp       disable LIBRTMP
  --with-winidn=PATH      enable Windows native IDN
  --without-winidn        disable Windows native IDN







|


|
|


|
>
>
>
>
>







2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
  --with-ca-fallback      Use the built in CA store of the SSL library
  --without-ca-fallback   Don't use the built in CA store of the SSL library
  --without-libpsl        disable support for libpsl cookie checking
  --with-libmetalink=PATH where to look for libmetalink, PATH points to the
                          installation root
  --without-libmetalink   disable libmetalink detection
  --with-libssh2=PATH     Where to look for libssh2, PATH points to the
                          libssh2 installation; when possible, set the
                          PKG_CONFIG_PATH environment variable instead of
                          using this option
  --with-libssh2          enable libssh2
  --with-libssh=PATH      Where to look for libssh, PATH points to the libssh
                          installation; when possible, set the PKG_CONFIG_PATH
                          environment variable instead of using this option
  --with-libssh           enable libssh
  --with-wolfssh=PATH     Where to look for wolfssh, PATH points to the
                          wolfSSH installation; when possible, set the
                          PKG_CONFIG_PATH environment variable instead of
                          using this option
  --with-wolfssh          enable wolfssh
  --with-librtmp=PATH     Where to look for librtmp, PATH points to the
                          LIBRTMP installation; when possible, set the
                          PKG_CONFIG_PATH environment variable instead of
                          using this option
  --without-librtmp       disable LIBRTMP
  --with-winidn=PATH      enable Windows native IDN
  --without-winidn        disable Windows native IDN
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
curl configure -
generated by GNU Autoconf 2.69

Copyright (C) 2012 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.

Copyright (c) 1998 - 2019 Daniel Stenberg, <daniel@haxx.se>
This configure script may be copied, distributed and modified under the
terms of the curl license; see COPYING for more details
_ACEOF
  exit
fi

## ------------------------ ##







|







2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
curl configure -
generated by GNU Autoconf 2.69

Copyright (C) 2012 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.

Copyright (c) 1998 - 2020 Daniel Stenberg, <daniel@haxx.se>
This configure script may be copied, distributed and modified under the
terms of the curl license; see COPYING for more details
_ACEOF
  exit
fi

## ------------------------ ##
8765
8766
8767
8768
8769
8770
8771
8772
8773
8774
8775
8776
8777
8778
8779
ac_tool_warned=yes ;;
esac
    AR=$ac_ct_AR
  fi
fi

: ${AR=ar}
: ${AR_FLAGS=cru}














|







8772
8773
8774
8775
8776
8777
8778
8779
8780
8781
8782
8783
8784
8785
8786
ac_tool_warned=yes ;;
esac
    AR=$ac_ct_AR
  fi
fi

: ${AR=ar}
: ${AR_FLAGS=cr}







10483
10484
10485
10486
10487
10488
10489
10490
10491
10492
10493
10494
10495
10496
10497
10498
else
  lt_cv_ld_force_load=no
      cat > conftest.c << _LT_EOF
int forced_loaded() { return 2;}
_LT_EOF
      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
      echo "$AR cru libconftest.a conftest.o" >&5
      $AR cru libconftest.a conftest.o 2>&5
      echo "$RANLIB libconftest.a" >&5
      $RANLIB libconftest.a 2>&5
      cat > conftest.c << _LT_EOF
int main() { return 0;}
_LT_EOF
      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err







|
|







10490
10491
10492
10493
10494
10495
10496
10497
10498
10499
10500
10501
10502
10503
10504
10505
else
  lt_cv_ld_force_load=no
      cat > conftest.c << _LT_EOF
int forced_loaded() { return 2;}
_LT_EOF
      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
      echo "$AR cr libconftest.a conftest.o" >&5
      $AR cr libconftest.a conftest.o 2>&5
      echo "$RANLIB libconftest.a" >&5
      $RANLIB libconftest.a 2>&5
      cat > conftest.c << _LT_EOF
int main() { return 0;}
_LT_EOF
      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
26062
26063
26064
26065
26066
26067
26068







26069
26070
26071
26072
26073
26074
26075
      { $as_echo "$as_me:${as_lineno-$LINENO}: libmetalink library defective or too old" >&5
$as_echo "$as_me: libmetalink library defective or too old" >&6;}
      want_metalink="no"

fi
rm -f core conftest.err conftest.$ac_objext \
    conftest$ac_exeext conftest.$ac_ext







    CPPFLAGS="$clean_CPPFLAGS"
    LDFLAGS="$clean_LDFLAGS"
    LIBS="$clean_LIBS"
    if test "$want_metalink" = "yes"; then

$as_echo "#define USE_METALINK 1" >>confdefs.h








>
>
>
>
>
>
>







26069
26070
26071
26072
26073
26074
26075
26076
26077
26078
26079
26080
26081
26082
26083
26084
26085
26086
26087
26088
26089
      { $as_echo "$as_me:${as_lineno-$LINENO}: libmetalink library defective or too old" >&5
$as_echo "$as_me: libmetalink library defective or too old" >&6;}
      want_metalink="no"

fi
rm -f core conftest.err conftest.$ac_objext \
    conftest$ac_exeext conftest.$ac_ext
    if test "x$OPENSSL_ENABLED" != "x1" -a "x$USE_WINDOWS_SSPI" != "x1" \
        -a "x$GNUTLS_ENABLED" != "x1" -a "x$NSS_ENABLED" != "x1" \
        -a "x$SECURETRANSPORT_ENABLED" != "x1"; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: metalink support requires a compatible SSL/TLS backend" >&5
$as_echo "$as_me: WARNING: metalink support requires a compatible SSL/TLS backend" >&2;}
      want_metalink="no"
    fi
    CPPFLAGS="$clean_CPPFLAGS"
    LDFLAGS="$clean_LDFLAGS"
    LIBS="$clean_LIBS"
    if test "$want_metalink" = "yes"; then

$as_echo "#define USE_METALINK 1" >>confdefs.h

26102
26103
26104
26105
26106
26107
26108










26109
26110
26111
26112
26113
26114
26115
# Check whether --with-libssh was given.
if test "${with_libssh+set}" = set; then :
  withval=$with_libssh; OPT_LIBSSH=$withval
else
  OPT_LIBSSH=no
fi












if test X"$OPT_LIBSSH2" != Xno; then
    CLEANLDFLAGS="$LDFLAGS"
  CLEANCPPFLAGS="$CPPFLAGS"
  CLEANLIBS="$LIBS"

  case "$OPT_LIBSSH2" in







>
>
>
>
>
>
>
>
>
>







26116
26117
26118
26119
26120
26121
26122
26123
26124
26125
26126
26127
26128
26129
26130
26131
26132
26133
26134
26135
26136
26137
26138
26139
# Check whether --with-libssh was given.
if test "${with_libssh+set}" = set; then :
  withval=$with_libssh; OPT_LIBSSH=$withval
else
  OPT_LIBSSH=no
fi


OPT_WOLFSSH=off

# Check whether --with-wolfssh was given.
if test "${with_wolfssh+set}" = set; then :
  withval=$with_wolfssh; OPT_WOLFSSH=$withval
else
  OPT_WOLFSSH=no
fi


if test X"$OPT_LIBSSH2" != Xno; then
    CLEANLDFLAGS="$LDFLAGS"
  CLEANCPPFLAGS="$CPPFLAGS"
  CLEANLIBS="$LIBS"

  case "$OPT_LIBSSH2" in
26591
26592
26593
26594
26595
26596
26597











































































26598
26599
26600
26601
26602
26603
26604
       fi
    fi
  else
        LDFLAGS=$CLEANLDFLAGS
    CPPFLAGS=$CLEANCPPFLAGS
    LIBS=$CLEANLIBS
  fi











































































fi


OPT_LIBRTMP=off

# Check whether --with-librtmp was given.
if test "${with_librtmp+set}" = set; then :







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







26615
26616
26617
26618
26619
26620
26621
26622
26623
26624
26625
26626
26627
26628
26629
26630
26631
26632
26633
26634
26635
26636
26637
26638
26639
26640
26641
26642
26643
26644
26645
26646
26647
26648
26649
26650
26651
26652
26653
26654
26655
26656
26657
26658
26659
26660
26661
26662
26663
26664
26665
26666
26667
26668
26669
26670
26671
26672
26673
26674
26675
26676
26677
26678
26679
26680
26681
26682
26683
26684
26685
26686
26687
26688
26689
26690
26691
26692
26693
26694
26695
26696
26697
26698
26699
26700
26701
26702
26703
       fi
    fi
  else
        LDFLAGS=$CLEANLDFLAGS
    CPPFLAGS=$CLEANCPPFLAGS
    LIBS=$CLEANLIBS
  fi
elif test X"$OPT_WOLFSSH" != Xno; then
    CLEANLDFLAGS="$LDFLAGS"
  CLEANCPPFLAGS="$CPPFLAGS"
  CLEANLIBS="$LIBS"


  if test "$OPT_WOLFSSH" != yes; then
     WOLFCONFIG="$OPT_WOLFSSH/bin/wolfssh-config"
     LDFLAGS="$LDFLAGS `$WOLFCONFIG --libs`"
     CPPFLAGS="$CPPFLAGS `$WOLFCONFIG --cflags`"
  fi

  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wolfSSH_Init in -lwolfssh" >&5
$as_echo_n "checking for wolfSSH_Init in -lwolfssh... " >&6; }
if ${ac_cv_lib_wolfssh_wolfSSH_Init+:} false; then :
  $as_echo_n "(cached) " >&6
else
  ac_check_lib_save_LIBS=$LIBS
LIBS="-lwolfssh  $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h.  */


#ifdef __cplusplus
extern "C"
#endif
char wolfSSH_Init ();
int main (void)
{
return wolfSSH_Init ();
 ;
 return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
  ac_cv_lib_wolfssh_wolfSSH_Init=yes
else
  ac_cv_lib_wolfssh_wolfSSH_Init=no
fi
rm -f core conftest.err conftest.$ac_objext \
    conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_wolfssh_wolfSSH_Init" >&5
$as_echo "$ac_cv_lib_wolfssh_wolfSSH_Init" >&6; }
if test "x$ac_cv_lib_wolfssh_wolfSSH_Init" = xyes; then :
  cat >>confdefs.h <<_ACEOF
#define HAVE_LIBWOLFSSH 1
_ACEOF

  LIBS="-lwolfssh $LIBS"

fi


  for ac_header in wolfssh/ssh.h
do :
  ac_fn_c_check_header_mongrel "$LINENO" "wolfssh/ssh.h" "ac_cv_header_wolfssh_ssh_h" "$ac_includes_default"
if test "x$ac_cv_header_wolfssh_ssh_h" = xyes; then :
  cat >>confdefs.h <<_ACEOF
#define HAVE_WOLFSSH_SSH_H 1
_ACEOF
 curl_ssh_msg="enabled (wolfSSH)"
    WOLFSSH_ENABLED=1

$as_echo "#define USE_WOLFSSH 1" >>confdefs.h

    USE_WOLFSSH=1


fi

done


fi


OPT_LIBRTMP=off

# Check whether --with-librtmp was given.
if test "${with_librtmp+set}" = set; then :
27639
27640
27641
27642
27643
27644
27645
27646
27647
27648
27649
27650
27651
27652
27653
27654
27655
27656
27657
27658
27659
27660
27661
27662
27663
27664
27665
27666
27667
27668
27669
27670
27671
27672
27673
27674
27675
27676
27677
27678
27679
27680
27681
27682
27683
27684
27685
27686
27687
27688
    { $as_echo "$as_me:${as_lineno-$LINENO}: -L is $LD_H2" >&5
$as_echo "$as_me: -L is $LD_H2" >&6;}

    LDFLAGS="$LDFLAGS $LD_H2"
    CPPFLAGS="$CPPFLAGS $CPP_H2"
    LIBS="$LIB_H2 $LIBS"

    # use nghttp2_option_set_no_recv_client_magic to require nghttp2
    # >= 1.0.0
    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nghttp2_option_set_no_recv_client_magic in -lnghttp2" >&5
$as_echo_n "checking for nghttp2_option_set_no_recv_client_magic in -lnghttp2... " >&6; }
if ${ac_cv_lib_nghttp2_nghttp2_option_set_no_recv_client_magic+:} false; then :
  $as_echo_n "(cached) " >&6
else
  ac_check_lib_save_LIBS=$LIBS
LIBS="-lnghttp2  $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h.  */


#ifdef __cplusplus
extern "C"
#endif
char nghttp2_option_set_no_recv_client_magic ();
int main (void)
{
return nghttp2_option_set_no_recv_client_magic ();
 ;
 return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
  ac_cv_lib_nghttp2_nghttp2_option_set_no_recv_client_magic=yes
else
  ac_cv_lib_nghttp2_nghttp2_option_set_no_recv_client_magic=no
fi
rm -f core conftest.err conftest.$ac_objext \
    conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nghttp2_nghttp2_option_set_no_recv_client_magic" >&5
$as_echo "$ac_cv_lib_nghttp2_nghttp2_option_set_no_recv_client_magic" >&6; }
if test "x$ac_cv_lib_nghttp2_nghttp2_option_set_no_recv_client_magic" = xyes; then :

       for ac_header in nghttp2/nghttp2.h
do :
  ac_fn_c_check_header_mongrel "$LINENO" "nghttp2/nghttp2.h" "ac_cv_header_nghttp2_nghttp2_h" "$ac_includes_default"
if test "x$ac_cv_header_nghttp2_nghttp2_h" = xyes; then :
  cat >>confdefs.h <<_ACEOF
#define HAVE_NGHTTP2_NGHTTP2_H 1







|
|
|
|
|











|


|





|

|





|
|
|







27738
27739
27740
27741
27742
27743
27744
27745
27746
27747
27748
27749
27750
27751
27752
27753
27754
27755
27756
27757
27758
27759
27760
27761
27762
27763
27764
27765
27766
27767
27768
27769
27770
27771
27772
27773
27774
27775
27776
27777
27778
27779
27780
27781
27782
27783
27784
27785
27786
27787
    { $as_echo "$as_me:${as_lineno-$LINENO}: -L is $LD_H2" >&5
$as_echo "$as_me: -L is $LD_H2" >&6;}

    LDFLAGS="$LDFLAGS $LD_H2"
    CPPFLAGS="$CPPFLAGS $CPP_H2"
    LIBS="$LIB_H2 $LIBS"

    # use nghttp2_session_set_local_window_size to require nghttp2
    # >= 1.12.0
    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nghttp2_session_set_local_window_size in -lnghttp2" >&5
$as_echo_n "checking for nghttp2_session_set_local_window_size in -lnghttp2... " >&6; }
if ${ac_cv_lib_nghttp2_nghttp2_session_set_local_window_size+:} false; then :
  $as_echo_n "(cached) " >&6
else
  ac_check_lib_save_LIBS=$LIBS
LIBS="-lnghttp2  $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h.  */


#ifdef __cplusplus
extern "C"
#endif
char nghttp2_session_set_local_window_size ();
int main (void)
{
return nghttp2_session_set_local_window_size ();
 ;
 return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
  ac_cv_lib_nghttp2_nghttp2_session_set_local_window_size=yes
else
  ac_cv_lib_nghttp2_nghttp2_session_set_local_window_size=no
fi
rm -f core conftest.err conftest.$ac_objext \
    conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nghttp2_nghttp2_session_set_local_window_size" >&5
$as_echo "$ac_cv_lib_nghttp2_nghttp2_session_set_local_window_size" >&6; }
if test "x$ac_cv_lib_nghttp2_nghttp2_session_set_local_window_size" = xyes; then :

       for ac_header in nghttp2/nghttp2.h
do :
  ac_fn_c_check_header_mongrel "$LINENO" "nghttp2/nghttp2.h" "ac_cv_header_nghttp2_nghttp2_h" "$ac_includes_default"
if test "x$ac_cv_header_nghttp2_nghttp2_h" = xyes; then :
  cat >>confdefs.h <<_ACEOF
#define HAVE_NGHTTP2_NGHTTP2_H 1
42934
42935
42936
42937
42938
42939
42940




42941
42942
42943
42944
42945
42946
42947
  fi
fi
if test "x$USE_LIBSSH2" = "x1"; then
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SCP"
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP"
fi
if test "x$USE_LIBSSH" = "x1"; then




  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SCP"
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP"
fi
if test "x$CURL_DISABLE_RTSP" != "x1"; then
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS RTSP"
fi
if test "x$USE_LIBRTMP" = "x1"; then







>
>
>
>







43033
43034
43035
43036
43037
43038
43039
43040
43041
43042
43043
43044
43045
43046
43047
43048
43049
43050
  fi
fi
if test "x$USE_LIBSSH2" = "x1"; then
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SCP"
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP"
fi
if test "x$USE_LIBSSH" = "x1"; then
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SCP"
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP"
fi
if test "x$USE_WOLFSSH" = "x1"; then
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SCP"
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP"
fi
if test "x$CURL_DISABLE_RTSP" != "x1"; then
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS RTSP"
fi
if test "x$USE_LIBRTMP" = "x1"; then
Changes to jni/curl/configure.ac.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
AC_INIT([curl], [-], [a suitable curl mailing list: https://curl.haxx.se/mail/])

XC_OVR_ZZ50
XC_OVR_ZZ60
CURL_OVERRIDE_AUTOCONF

dnl configure script copyright
AC_COPYRIGHT([Copyright (c) 1998 - 2019 Daniel Stenberg, <daniel@haxx.se>
This configure script may be copied, distributed and modified under the
terms of the curl license; see COPYING for more details])

AC_CONFIG_SRCDIR([lib/urldata.h])
AC_CONFIG_HEADERS(lib/curl_config.h)
AC_CONFIG_MACRO_DIR([m4])
AM_MAINTAINER_MODE







|







27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
AC_INIT([curl], [-], [a suitable curl mailing list: https://curl.haxx.se/mail/])

XC_OVR_ZZ50
XC_OVR_ZZ60
CURL_OVERRIDE_AUTOCONF

dnl configure script copyright
AC_COPYRIGHT([Copyright (c) 1998 - 2020 Daniel Stenberg, <daniel@haxx.se>
This configure script may be copied, distributed and modified under the
terms of the curl license; see COPYING for more details])

AC_CONFIG_SRCDIR([lib/urldata.h])
AC_CONFIG_HEADERS(lib/curl_config.h)
AC_CONFIG_MACRO_DIR([m4])
AM_MAINTAINER_MODE
2766
2767
2768
2769
2770
2771
2772






2773
2774
2775
2776
2777
2778
2779
      AC_MSG_RESULT([yes ($version)])
      want_metalink="yes"
    ],[
      AC_MSG_RESULT([no ($version)])
      AC_MSG_NOTICE([libmetalink library defective or too old])
      want_metalink="no"
    ])






    CPPFLAGS="$clean_CPPFLAGS"
    LDFLAGS="$clean_LDFLAGS"
    LIBS="$clean_LIBS"
    if test "$want_metalink" = "yes"; then
      dnl finally libmetalink will be used
      AC_DEFINE(USE_METALINK, 1, [Define to enable metalink support])
      LIBMETALINK_LIBS=$addlib







>
>
>
>
>
>







2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
      AC_MSG_RESULT([yes ($version)])
      want_metalink="yes"
    ],[
      AC_MSG_RESULT([no ($version)])
      AC_MSG_NOTICE([libmetalink library defective or too old])
      want_metalink="no"
    ])
    if test "x$OPENSSL_ENABLED" != "x1" -a "x$USE_WINDOWS_SSPI" != "x1" \
        -a "x$GNUTLS_ENABLED" != "x1" -a "x$NSS_ENABLED" != "x1" \
        -a "x$SECURETRANSPORT_ENABLED" != "x1"; then
      AC_MSG_WARN([metalink support requires a compatible SSL/TLS backend])
      want_metalink="no"
    fi
    CPPFLAGS="$clean_CPPFLAGS"
    LDFLAGS="$clean_LDFLAGS"
    LIBS="$clean_LIBS"
    if test "$want_metalink" = "yes"; then
      dnl finally libmetalink will be used
      AC_DEFINE(USE_METALINK, 1, [Define to enable metalink support])
      LIBMETALINK_LIBS=$addlib
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808






2809
2810
2811
2812
2813
2814
2815
dnl **********************************************************************
dnl Check for the presence of LIBSSH2 libraries and headers
dnl **********************************************************************

dnl Default to compiler & linker defaults for LIBSSH2 files & libraries.
OPT_LIBSSH2=off
AC_ARG_WITH(libssh2,dnl
AC_HELP_STRING([--with-libssh2=PATH],[Where to look for libssh2, PATH points to the LIBSSH2 installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option])
AC_HELP_STRING([--with-libssh2], [enable LIBSSH2]),
  OPT_LIBSSH2=$withval, OPT_LIBSSH2=no)


OPT_LIBSSH=off
AC_ARG_WITH(libssh,dnl
AC_HELP_STRING([--with-libssh=PATH],[Where to look for libssh, PATH points to the LIBSSH installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option])
AC_HELP_STRING([--with-libssh], [enable LIBSSH]),
  OPT_LIBSSH=$withval, OPT_LIBSSH=no)







if test X"$OPT_LIBSSH2" != Xno; then
  dnl backup the pre-libssh2 variables
  CLEANLDFLAGS="$LDFLAGS"
  CLEANCPPFLAGS="$CPPFLAGS"
  CLEANLIBS="$LIBS"

  case "$OPT_LIBSSH2" in







|
|





|
|


>
>
>
>
>
>







2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
dnl **********************************************************************
dnl Check for the presence of LIBSSH2 libraries and headers
dnl **********************************************************************

dnl Default to compiler & linker defaults for LIBSSH2 files & libraries.
OPT_LIBSSH2=off
AC_ARG_WITH(libssh2,dnl
AC_HELP_STRING([--with-libssh2=PATH],[Where to look for libssh2, PATH points to the libssh2 installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option])
AC_HELP_STRING([--with-libssh2], [enable libssh2]),
  OPT_LIBSSH2=$withval, OPT_LIBSSH2=no)


OPT_LIBSSH=off
AC_ARG_WITH(libssh,dnl
AC_HELP_STRING([--with-libssh=PATH],[Where to look for libssh, PATH points to the libssh installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option])
AC_HELP_STRING([--with-libssh], [enable libssh]),
  OPT_LIBSSH=$withval, OPT_LIBSSH=no)

OPT_WOLFSSH=off
AC_ARG_WITH(wolfssh,dnl
AC_HELP_STRING([--with-wolfssh=PATH],[Where to look for wolfssh, PATH points to the wolfSSH installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option])
AC_HELP_STRING([--with-wolfssh], [enable wolfssh]),
  OPT_WOLFSSH=$withval, OPT_WOLFSSH=no)

if test X"$OPT_LIBSSH2" != Xno; then
  dnl backup the pre-libssh2 variables
  CLEANLDFLAGS="$LDFLAGS"
  CLEANCPPFLAGS="$CPPFLAGS"
  CLEANLIBS="$LIBS"

  case "$OPT_LIBSSH2" in
2948
2949
2950
2951
2952
2953
2954






















2955
2956
2957
2958
2959
2960
2961
    fi
  else
    dnl no libssh, revert back to clean variables
    LDFLAGS=$CLEANLDFLAGS
    CPPFLAGS=$CLEANCPPFLAGS
    LIBS=$CLEANLIBS
  fi






















fi

dnl **********************************************************************
dnl Check for the presence of LIBRTMP libraries and headers
dnl **********************************************************************

dnl Default to compiler & linker defaults for LIBRTMP files & libraries.







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
    fi
  else
    dnl no libssh, revert back to clean variables
    LDFLAGS=$CLEANLDFLAGS
    CPPFLAGS=$CLEANCPPFLAGS
    LIBS=$CLEANLIBS
  fi
elif test X"$OPT_WOLFSSH" != Xno; then
  dnl backup the pre-wolfssh variables
  CLEANLDFLAGS="$LDFLAGS"
  CLEANCPPFLAGS="$CPPFLAGS"
  CLEANLIBS="$LIBS"


  if test "$OPT_WOLFSSH" != yes; then
     WOLFCONFIG="$OPT_WOLFSSH/bin/wolfssh-config"
     LDFLAGS="$LDFLAGS `$WOLFCONFIG --libs`"
     CPPFLAGS="$CPPFLAGS `$WOLFCONFIG --cflags`"
  fi

  AC_CHECK_LIB(wolfssh, wolfSSH_Init)

  AC_CHECK_HEADERS(wolfssh/ssh.h,
    curl_ssh_msg="enabled (wolfSSH)"
    WOLFSSH_ENABLED=1
    AC_DEFINE(USE_WOLFSSH, 1, [if wolfSSH is in use])
    AC_SUBST(USE_WOLFSSH, [1])
  )

fi

dnl **********************************************************************
dnl Check for the presence of LIBRTMP libraries and headers
dnl **********************************************************************

dnl Default to compiler & linker defaults for LIBRTMP files & libraries.
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
      $PKGCONFIG --libs-only-L libnghttp2`
    AC_MSG_NOTICE([-L is $LD_H2])

    LDFLAGS="$LDFLAGS $LD_H2"
    CPPFLAGS="$CPPFLAGS $CPP_H2"
    LIBS="$LIB_H2 $LIBS"

    # use nghttp2_option_set_no_recv_client_magic to require nghttp2
    # >= 1.0.0
    AC_CHECK_LIB(nghttp2, nghttp2_option_set_no_recv_client_magic,
      [
       AC_CHECK_HEADERS(nghttp2/nghttp2.h,
          curl_h2_msg="enabled (nghttp2)"
          NGHTTP2_ENABLED=1
          AC_DEFINE(USE_NGHTTP2, 1, [if nghttp2 is in use])
          AC_SUBST(USE_NGHTTP2, [1])
       )







|
|
|







3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
      $PKGCONFIG --libs-only-L libnghttp2`
    AC_MSG_NOTICE([-L is $LD_H2])

    LDFLAGS="$LDFLAGS $LD_H2"
    CPPFLAGS="$CPPFLAGS $CPP_H2"
    LIBS="$LIB_H2 $LIBS"

    # use nghttp2_session_set_local_window_size to require nghttp2
    # >= 1.12.0
    AC_CHECK_LIB(nghttp2, nghttp2_session_set_local_window_size,
      [
       AC_CHECK_HEADERS(nghttp2/nghttp2.h,
          curl_h2_msg="enabled (nghttp2)"
          NGHTTP2_ENABLED=1
          AC_DEFINE(USE_NGHTTP2, 1, [if nghttp2 is in use])
          AC_SUBST(USE_NGHTTP2, [1])
       )
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
      ],
        dnl not found, revert back to clean variables
        LDFLAGS=$CLEANLDFLAGS
        CPPFLAGS=$CLEANCPPFLAGS
        LIBS=$CLEANLIBS
    )
  else
    dnl no nghttp3 pkg-config found, deal with it
    if test X"$want_quiche" != Xdefault; then
      dnl To avoid link errors, we do not allow --with-nghttp3 without
      dnl a pkgconfig file
      AC_MSG_ERROR([--with-quiche was specified but could not find quiche pkg-config file.])
    fi
  fi
fi

dnl **********************************************************************







|

|







3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
      ],
        dnl not found, revert back to clean variables
        LDFLAGS=$CLEANLDFLAGS
        CPPFLAGS=$CLEANCPPFLAGS
        LIBS=$CLEANLIBS
    )
  else
    dnl no quiche pkg-config found, deal with it
    if test X"$want_quiche" != Xdefault; then
      dnl To avoid link errors, we do not allow --with-quiche without
      dnl a pkgconfig file
      AC_MSG_ERROR([--with-quiche was specified but could not find quiche pkg-config file.])
    fi
  fi
fi

dnl **********************************************************************
4754
4755
4756
4757
4758
4759
4760




4761
4762
4763
4764
4765
4766
4767
  fi
fi
if test "x$USE_LIBSSH2" = "x1"; then
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SCP"
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP"
fi
if test "x$USE_LIBSSH" = "x1"; then




  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SCP"
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP"
fi
if test "x$CURL_DISABLE_RTSP" != "x1"; then
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS RTSP"
fi
if test "x$USE_LIBRTMP" = "x1"; then







>
>
>
>







4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
  fi
fi
if test "x$USE_LIBSSH2" = "x1"; then
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SCP"
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP"
fi
if test "x$USE_LIBSSH" = "x1"; then
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SCP"
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP"
fi
if test "x$USE_WOLFSSH" = "x1"; then
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SCP"
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP"
fi
if test "x$CURL_DISABLE_RTSP" != "x1"; then
  SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS RTSP"
fi
if test "x$USE_LIBRTMP" = "x1"; then
Changes to jni/curl/docs/DEPRECATE.md.
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
# Items to be removed from future curl releases

If any of these deprecated features is a cause for concern for you, please
email the curl-library mailing list as soon as possible and explain to us why
this is a problem for you and how your use case can't be satisfied properly
using a work around.

## PolarSSL

The polarssl TLS library has not had an update in over three years. The last
release was done on [January 7
2016](https://tls.mbed.org/tech-updates/releases). This library has been
superseded by the mbedTLS library, which is the current incarnation of
PolarSSL. curl has supported mbedTLS since 2015.

It seems unlikely that this library is a good choice for users to get proper
TLS security and support today and at the same time there are plenty of good
and updated alternatives.

I consider it likely that the existing users of curl + polarssl out there are
stuck on old curl versions and when they eventually manage to update curl they
should also be able to update their TLS library.

### State

In the curl 7.65.2 release (July 17, 2019) the ability to build with this TLS
backend is removed from the configure script. The code remains and can be
built and used going forward, but it has to be manually enabled in a build (or
the configure removal reverted).

### Removal

The support for PolarSSL and all code for it will be completely removed from
the curl code base six months after it ships disabled in configure in a
release. In the release on or near February 27, 2020. (possibly called curl
7.70.0).







<
|
<
<
<
<
<

<
<
<
|
<
<
<
|
<
|
<
<
<
<
<
<
<
<
<
<
<
1
2
3
4
5
6
7

8





9



10



11

12











# Items to be removed from future curl releases

If any of these deprecated features is a cause for concern for you, please
email the curl-library mailing list as soon as possible and explain to us why
this is a problem for you and how your use case can't be satisfied properly
using a work around.


## Past removals









 - Pipelining



 - axTLS

 - PolarSSL











Changes to jni/curl/docs/GOVERNANCE.md.
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
to listen in to what the project and the general user population wants and
expects from us.

## Legal entity

There is no legal entity. The curl project is just a bunch of people scattered
around the globe with the common goal to produce source code that creates
great products.


The copyrights in the project are owned by the individuals and organizations
that wrote those parts of the code.

## Decisions

The curl project is not a democracy, but everyone is entitled to state their
opinion and may argue for their sake within the community.

All and any changes that have been done or will be done are eligible to bring
up for discussion, to object to or to praise. Ideally, we find consensus for
the appropriate way forward in any given situation or challenge.

If there is no obvious consensus, a maintainer who's knowledgeable in the
specific area will take an "executive" decision that they think is the right
for the project.























## Key roles

### Maintainers

A maintainer in the curl project is an individual who has been given
permissions to push commits to one of the git repositories.








|
>

















>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
to listen in to what the project and the general user population wants and
expects from us.

## Legal entity

There is no legal entity. The curl project is just a bunch of people scattered
around the globe with the common goal to produce source code that creates
great products. We are not part of any umbrella organization and we are not
located in any specific country. We are totally independent.

The copyrights in the project are owned by the individuals and organizations
that wrote those parts of the code.

## Decisions

The curl project is not a democracy, but everyone is entitled to state their
opinion and may argue for their sake within the community.

All and any changes that have been done or will be done are eligible to bring
up for discussion, to object to or to praise. Ideally, we find consensus for
the appropriate way forward in any given situation or challenge.

If there is no obvious consensus, a maintainer who's knowledgeable in the
specific area will take an "executive" decision that they think is the right
for the project.

## Donations

Donating plain money to curl is best done to curl's [Open Collective
fund](https://opencollective.com/curl). Open Collective is a US based
non-profit organization that holds on to funds for us. This fund is then used
for paying the curl security bug bounties, to reimburse project related
expenses etc.

Donations to the project can also come in form of server hosting, providing
services and paying for people to work on curl related code etc. Usually, such
donations are services paid for directly by the sponsors.

We grade sponsors in a few different levels and if they meet the criterias,
they can be mentioned on the Sponsors page on the curl web site.

## Commercial Support

The curl project does not do or offer commercial support. It only hosts
mailing lists, runs bug trackers etc to facilitate communication and work.

However, Daniel works for wolfSSL and we offer commercial curl support there.

## Key roles

### Maintainers

A maintainer in the curl project is an individual who has been given
permissions to push commits to one of the git repositories.

104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119

- only merge code that meets our quality and style guide requirements.
- *never* merge code without doing a PR first, unless the change is "trivial"
- if in doubt, ask for input/feedback from others

### Recommendations

- please enable 2fa on your github account to reduce risk of malicious source
  code tampering
- consider enabling signed git commits for additional verification of changes

### Merge advice

When you're merging patches/PRs...

- make sure the commit messages follow our template







|
|







127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142

- only merge code that meets our quality and style guide requirements.
- *never* merge code without doing a PR first, unless the change is "trivial"
- if in doubt, ask for input/feedback from others

### Recommendations

- we require two-factor authentication enabled on your github account to
  reduce risk of malicious source code tampering
- consider enabling signed git commits for additional verification of changes

### Merge advice

When you're merging patches/PRs...

- make sure the commit messages follow our template
Changes to jni/curl/docs/HTTP-COOKIES.md.
39
40
41
42
43
44
45





















46
47
48
49
50
51
52
  The netscape cookie file format stores one cookie per physical line in the
  file with a bunch of associated meta data, each field separated with
  TAB. That file is called the cookiejar in curl terminology.

  When libcurl saves a cookiejar, it creates a file header of its own in which
  there is a URL mention that will link to the web version of this document.






















## Cookies with curl the command line tool

  curl has a full cookie "engine" built in. If you just activate it, you can
  have curl receive and send cookies exactly as mandated in the specs.

  Command line options:








>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
  The netscape cookie file format stores one cookie per physical line in the
  file with a bunch of associated meta data, each field separated with
  TAB. That file is called the cookiejar in curl terminology.

  When libcurl saves a cookiejar, it creates a file header of its own in which
  there is a URL mention that will link to the web version of this document.

## Cookie file format

  The cookie file format is text based and stores one cookie per line. Lines
  that start with `#` are treated as comments.

  Each line that each specifies a single cookie consists of seven text fields
  separated with TAB characters. A valid line must end with a newline
  character.

### Fields in the file

  Field number, what type and example data and the meaning of it:

  0. string `example.com` - the domain name
  1. boolean `FALSE` - include subdomains
  2. string `/foobar/` - path
  3. boolean `TRUE` - send/receive over HTTPS only
  4. number `1462299217` - expires at - seconds since Jan 1st 1970, or 0
  5. string `person` - name of the cookie
  6. string `daniel` - value of the cookie

## Cookies with curl the command line tool

  curl has a full cookie "engine" built in. If you just activate it, you can
  have curl receive and send cookies exactly as mandated in the specs.

  Command line options:

Changes to jni/curl/docs/HTTP3.md.
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

# ngtcp2 version

## Build

Build (patched) OpenSSL

     % git clone --depth 1 -b openssl-quic-draft-23 https://github.com/tatsuhiro-t/openssl
     % cd openssl
     % ./config enable-tls1_3 --prefix=<somewhere1>
     % make
     % make install_sw

Build nghttp3








|







29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

# ngtcp2 version

## Build

Build (patched) OpenSSL

     % git clone --depth 1 -b OpenSSL_1_1_1d-quic-draft-27 https://github.com/tatsuhiro-t/openssl
     % cd openssl
     % ./config enable-tls1_3 --prefix=<somewhere1>
     % make
     % make install_sw

Build nghttp3

61
62
63
64
65
66
67
68
69
70
71
72
73
74
75

Build curl

     % cd ..
     % git clone https://github.com/curl/curl
     % cd curl
     % ./buildconf
     % LDFLAGS="-Wl,-rpath,<somewhere1>/lib" ./configure --with-ssl=<somewhere1> --with-nghttp3=<somewhere2> --with-ngtcp2=<somewhere3>
     % make

# quiche version

## build

Clone quiche and BoringSSL:







|







61
62
63
64
65
66
67
68
69
70
71
72
73
74
75

Build curl

     % cd ..
     % git clone https://github.com/curl/curl
     % cd curl
     % ./buildconf
     % LDFLAGS="-Wl,-rpath,<somewhere1>/lib" ./configure --with-ssl=<somewhere1> --with-nghttp3=<somewhere2> --with-ngtcp2=<somewhere3> --enable-alt-svc
     % make

# quiche version

## build

Clone quiche and BoringSSL:
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
     % ln -s $PWD/include .openssl

Build quiche:

     % cd ../..
     % QUICHE_BSSL_PATH=$PWD/deps/boringssl cargo build --release --features pkg-config-meta

Clone and build curl:

     % cd ..
     % git clone https://github.com/curl/curl
     % cd curl
     % ./buildconf
     % ./configure LDFLAGS="-Wl,-rpath,$PWD/../quiche/target/release" --with-ssl=$PWD/../quiche/deps/boringssl/.openssl --with-quiche=$PWD/../quiche/target/release
     % make

## Run

Use HTTP/3 directly:

    curl --http3 https://nghttp2.org:8443/

Upgrade via Alt-Svc:

    curl --alt-svc altsvc.cache https://quic.aiortc.org/

See this [list of public HTTP/3 servers](https://bagder.github.io/HTTP3-test/)







|





|













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
     % ln -s $PWD/include .openssl

Build quiche:

     % cd ../..
     % QUICHE_BSSL_PATH=$PWD/deps/boringssl cargo build --release --features pkg-config-meta

Build curl:

     % cd ..
     % git clone https://github.com/curl/curl
     % cd curl
     % ./buildconf
     % ./configure LDFLAGS="-Wl,-rpath,$PWD/../quiche/target/release" --with-ssl=$PWD/../quiche/deps/boringssl/.openssl --with-quiche=$PWD/../quiche/target/release --enable-alt-svc
     % make

## Run

Use HTTP/3 directly:

    curl --http3 https://nghttp2.org:8443/

Upgrade via Alt-Svc:

    curl --alt-svc altsvc.cache https://quic.aiortc.org/

See this [list of public HTTP/3 servers](https://bagder.github.io/HTTP3-test/)
Changes to jni/curl/docs/INTERNALS.md.
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
 - wolfSSL      2.0.0
 - openldap     2.0
 - MIT Kerberos 1.2.4
 - GSKit        V5R3M0
 - NSS          3.14.x
 - PolarSSL     1.3.0
 - Heimdal      ?
 - nghttp2      1.0.0

Operating Systems
-----------------

 On systems where configure runs, we aim at working on them all - if they have
 a suitable C compiler. On systems that don't run configure, we strive to keep
 curl running correctly on:







|







93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
 - wolfSSL      2.0.0
 - openldap     2.0
 - MIT Kerberos 1.2.4
 - GSKit        V5R3M0
 - NSS          3.14.x
 - PolarSSL     1.3.0
 - Heimdal      ?
 - nghttp2      1.12.0

Operating Systems
-----------------

 On systems where configure runs, we aim at working on them all - if they have
 a suitable C compiler. On systems that don't run configure, we strive to keep
 curl running correctly on:
Changes to jni/curl/docs/KNOWN_BUGS.
8
9
10
11
12
13
14

15
16
17
18
19
20
21

These are problems and bugs known to exist at the time of this release. Feel
free to join in and help us correct one or more of these! Also be sure to
check the changelog of the current development status, as one or more of these
problems may have been fixed or changed somewhat since this was written!

 1. HTTP

 1.3 STARTTRANSFER time is wrong for HTTP POSTs
 1.4 multipart formposts file name encoding
 1.5 Expect-100 meets 417
 1.6 Unnecessary close when 401 received waiting for 100
 1.7 Deflate error after all content was received
 1.8 DoH isn't used for all name resolves when enabled
 1.9 HTTP/2 frames while in the connection pool kill reuse







>







8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

These are problems and bugs known to exist at the time of this release. Feel
free to join in and help us correct one or more of these! Also be sure to
check the changelog of the current development status, as one or more of these
problems may have been fixed or changed somewhat since this was written!

 1. HTTP
 1.2 Multiple methods in a single WWW-Authenticate: header
 1.3 STARTTRANSFER time is wrong for HTTP POSTs
 1.4 multipart formposts file name encoding
 1.5 Expect-100 meets 417
 1.6 Unnecessary close when 401 received waiting for 100
 1.7 Deflate error after all content was received
 1.8 DoH isn't used for all name resolves when enabled
 1.9 HTTP/2 frames while in the connection pool kill reuse
31
32
33
34
35
36
37
38
39

40
41
42
43
44
45
46
 2.7 Client cert (MTLS) issues with Schannel
 2.8 Schannel disable CURLOPT_SSL_VERIFYPEER and verify hostname
 2.9 TLS session cache doesn't work with TFO

 3. Email protocols
 3.1 IMAP SEARCH ALL truncated response
 3.2 No disconnect command
 3.3 SMTP to multiple recipients
 3.4 POP3 expects "CRLF.CRLF" eob for some single-line responses


 4. Command line
 4.1 -J and -O with %-encoded file names
 4.2 -J with -C - fails
 4.3 --retry and transfer timeouts
 4.4 --upload-file . hang if delay in STDIN
 4.5 Improve --data-urlencode space encoding







<
|
>







32
33
34
35
36
37
38

39
40
41
42
43
44
45
46
47
 2.7 Client cert (MTLS) issues with Schannel
 2.8 Schannel disable CURLOPT_SSL_VERIFYPEER and verify hostname
 2.9 TLS session cache doesn't work with TFO

 3. Email protocols
 3.1 IMAP SEARCH ALL truncated response
 3.2 No disconnect command

 3.3 POP3 expects "CRLF.CRLF" eob for some single-line responses
 3.4 AUTH PLAIN for SMTP is not working on all servers

 4. Command line
 4.1 -J and -O with %-encoded file names
 4.2 -J with -C - fails
 4.3 --retry and transfer timeouts
 4.4 --upload-file . hang if delay in STDIN
 4.5 Improve --data-urlencode space encoding
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
 8.1 TELNET and time limitations don't work
 8.2 Microsoft telnet server

 9. SFTP and SCP
 9.1 SFTP doesn't do CURLOPT_POSTQUOTE correct

 10. SOCKS
 10.1 SOCKS proxy connections are done blocking
 10.2 SOCKS don't support timeouts
 10.3 FTPS over SOCKS
 10.4 active FTP over a SOCKS

 11. Internals
 11.1 Curl leaks .onion hostnames in DNS
 11.2 error buffer not set if connection to multiple addresses fails
 11.3 c-ares deviates from stock resolver on http://1346569778







<
<







83
84
85
86
87
88
89


90
91
92
93
94
95
96
 8.1 TELNET and time limitations don't work
 8.2 Microsoft telnet server

 9. SFTP and SCP
 9.1 SFTP doesn't do CURLOPT_POSTQUOTE correct

 10. SOCKS


 10.3 FTPS over SOCKS
 10.4 active FTP over a SOCKS

 11. Internals
 11.1 Curl leaks .onion hostnames in DNS
 11.2 error buffer not set if connection to multiple addresses fails
 11.3 c-ares deviates from stock resolver on http://1346569778
111
112
113
114
115
116
117







118
119
120
121
122
123
124
 14 DICT
 14.1 DICT responses show the underlying protocol

==============================================================================

1. HTTP








1.3 STARTTRANSFER time is wrong for HTTP POSTs

 Wrong STARTTRANSFER timer accounting for POST requests Timer works fine with
 GET requests, but while using POST the time for CURLINFO_STARTTRANSFER_TIME
 is wrong. While using POST CURLINFO_STARTTRANSFER_TIME minus
 CURLINFO_PRETRANSFER_TIME is near to zero every time.








>
>
>
>
>
>
>







110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
 14 DICT
 14.1 DICT responses show the underlying protocol

==============================================================================

1. HTTP

1.2 Multiple methods in a single WWW-Authenticate: header

 The HTTP responses headers WWW-Authenticate: can provide information about
 multiple authentication methods as multiple headers or as several methods
 within a single header. The latter way, several methods in the same physical
 line, is not supported by libcurl's parser. (For no good reason.)

1.3 STARTTRANSFER time is wrong for HTTP POSTs

 Wrong STARTTRANSFER timer accounting for POST requests Timer works fine with
 GET requests, but while using POST the time for CURLINFO_STARTTRANSFER_TIME
 is wrong. While using POST CURLINFO_STARTTRANSFER_TIME minus
 CURLINFO_PRETRANSFER_TIME is near to zero every time.

139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
 ought to be automatically resent without the Expect:.  A workaround is for
 the client application to redo the transfer after disabling Expect:.
 https://curl.haxx.se/mail/archive-2008-02/0043.html

1.6 Unnecessary close when 401 received waiting for 100

 libcurl closes the connection if an HTTP 401 reply is received while it is
 waiting for the the 100-continue response.
 https://curl.haxx.se/mail/lib-2008-08/0462.html

1.7 Deflate error after all content was received

 There's a situation where we can get an error in a HTTP response that is
 compressed, when that error is detected after all the actual body contents
 have been received and delivered to the application. This is tricky, but is







|







145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
 ought to be automatically resent without the Expect:.  A workaround is for
 the client application to redo the transfer after disabling Expect:.
 https://curl.haxx.se/mail/archive-2008-02/0043.html

1.6 Unnecessary close when 401 received waiting for 100

 libcurl closes the connection if an HTTP 401 reply is received while it is
 waiting for the 100-continue response.
 https://curl.haxx.se/mail/lib-2008-08/0462.html

1.7 Deflate error after all content was received

 There's a situation where we can get an error in a HTTP response that is
 compressed, when that error is detected after all the actual body contents
 have been received and delivered to the application. This is tricky, but is
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
 https://curl.haxx.se/bug/view.cgi?id=1366

3.2 No disconnect command

 The disconnect commands (LOGOUT and QUIT) may not be sent by IMAP, POP3 and
 SMTP if a failure occurs during the authentication phase of a connection.

3.3 SMTP to multiple recipients

 When sending data to multiple recipients, curl will abort and return failure
 if one of the recipients indicate failure (on the "RCPT TO"
 command). Ordinary mail programs would proceed and still send to the ones
 that can receive data. This is subject for change in the future.
 https://curl.haxx.se/bug/view.cgi?id=1116

3.4 POP3 expects "CRLF.CRLF" eob for some single-line responses

 You have to tell libcurl not to expect a body, when dealing with one line
 response commands. Please see the POP3 examples and test cases which show
 this for the NOOP and DELE commands. https://curl.haxx.se/bug/?i=740








4. Command line

4.1 -J and -O with %-encoded file names

 -J/--remote-header-name doesn't decode %-encoded file names. RFC6266 details
 how it should be done. The can of worm is basically that we have no charset







<
<
<
<
<
<
<
<
|





>
>
>
>
>
>







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
 https://curl.haxx.se/bug/view.cgi?id=1366

3.2 No disconnect command

 The disconnect commands (LOGOUT and QUIT) may not be sent by IMAP, POP3 and
 SMTP if a failure occurs during the authentication phase of a connection.









3.3 POP3 expects "CRLF.CRLF" eob for some single-line responses

 You have to tell libcurl not to expect a body, when dealing with one line
 response commands. Please see the POP3 examples and test cases which show
 this for the NOOP and DELE commands. https://curl.haxx.se/bug/?i=740

3.4 AUTH PLAIN for SMTP is not working on all servers

 Specifying "--login-options AUTH=PLAIN" on the command line doesn't seem to
 work correctly.

 See https://github.com/curl/curl/issues/4080

4. Command line

4.1 -J and -O with %-encoded file names

 -J/--remote-header-name doesn't decode %-encoded file names. RFC6266 details
 how it should be done. The can of worm is basically that we have no charset
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
 prematurely. There is a half-baked (busy-looping) patch provided in the bug
 report but it cannot be accepted as-is. See
 https://curl.haxx.se/bug/view.cgi?id=748


10. SOCKS

10.1 SOCKS proxy connections are done blocking

 Both SOCKS5 and SOCKS4 proxy connections are done blocking, which is very bad
 when used with the multi interface.

10.2 SOCKS don't support timeouts

 The SOCKS4 connection codes don't properly acknowledge (connect) timeouts.
 According to bug #1556528, even the SOCKS5 connect code does not do it right:
 https://curl.haxx.se/bug/view.cgi?id=604

 When connecting to a SOCK proxy, the (connect) timeout is not properly
 acknowledged after the actual TCP connect (during the SOCKS "negotiate"
 phase).

10.3 FTPS over SOCKS

 libcurl doesn't support FTPS over a SOCKS proxy.

10.4 active FTP over a SOCKS

 libcurl doesn't support active FTP over a SOCKS proxy







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







615
616
617
618
619
620
621















622
623
624
625
626
627
628
 prematurely. There is a half-baked (busy-looping) patch provided in the bug
 report but it cannot be accepted as-is. See
 https://curl.haxx.se/bug/view.cgi?id=748


10. SOCKS
















10.3 FTPS over SOCKS

 libcurl doesn't support FTPS over a SOCKS proxy.

10.4 active FTP over a SOCKS

 libcurl doesn't support active FTP over a SOCKS proxy
Changes to jni/curl/docs/Makefile.in.
390
391
392
393
394
395
396

397
398
399
400
401
402
403
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@

USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@







>







390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
USE_WOLFSSH = @USE_WOLFSSH@
USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
Changes to jni/curl/docs/RELEASE-PROCEDURE.md.
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
---------

- suitable beverage intake is encouraged for the festivities

curl release scheduling
=======================

Basics
------

We do releases every 8 weeks on Wednesdays. If critical problems arise, we can
insert releases outside of the schedule or we can move the release date - but
this is very rare.

Each 8 week release cycle is split in two 4-week periods.

- During the first 4 weeks after a release, we allow new features and changes
  to curl and libcurl. If we accept any such changes, we bump the minor number
  used for the next release.

- During the second 4-week period we do not merge any features or changes, we
  then only focus on fixing bugs and polishing things to make a solid coming
  release.










Coming dates
------------

Based on the description above, here are some planned release dates (at the
time of this writing):

- January 8, 2020 (moved)
- February 27, 2020
- April 22, 2020
- June 17, 2020
- August 12, 2020
- October 7, 2020
- December 2, 2020
- January 27, 2021

The above (and more) curl-related dates are published in
[iCalendar format](https://calendar.google.com/calendar/ical/c9u5d64odop9js55oltfarjk6g%40group.calendar.google.com/public/basic.ics)
as well.







|
|



|











>
>
>
>
>
>
>
>
>






|
<
|
|
|
|
|
|




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
---------

- suitable beverage intake is encouraged for the festivities

curl release scheduling
=======================

Release Cycle
-------------

We do releases every 8 weeks on Wednesdays. If critical problems arise, we can
insert releases outside of the schedule or we can move the release date - but
this is rare.

Each 8 week release cycle is split in two 4-week periods.

- During the first 4 weeks after a release, we allow new features and changes
  to curl and libcurl. If we accept any such changes, we bump the minor number
  used for the next release.

- During the second 4-week period we do not merge any features or changes, we
  then only focus on fixing bugs and polishing things to make a solid coming
  release.

- After a regular procedure-following release (made on Wednesdays), the
  feature window remains closed until the following Monday in case of special
  actions or patch releases etc.

If a future release date happens to end up on a "bad date", like in the middle
of common public holidays or when the lead release manager is away traveling,
the release date can be moved forwards or backwards a full week. This is then
advertised well in advance.

Coming dates
------------

Based on the description above, here are some planned release dates (at the
time of this writing):

- March 4, 2020 (7.69.0)

- April 29, 2020
- June 24, 2020
- August 19, 2020
- October 14, 2020
- December 9, 2020
- February 3, 2021

The above (and more) curl-related dates are published in
[iCalendar format](https://calendar.google.com/calendar/ical/c9u5d64odop9js55oltfarjk6g%40group.calendar.google.com/public/basic.ics)
as well.
Changes to jni/curl/docs/ROADMAP.md.
23
24
25
26
27
28
29







30
31
32
33
34
35
36
--------------------

 See Daniel's post on [Support of Encrypted
 SNI](https://curl.haxx.se/mail/lib-2019-03/0000.html) on the mailing list.

 Initial work exists in https://github.com/curl/curl/pull/4011








tiny-curl
---------

 There's no immediate action for this but users seem keen on being able to
 building custom minimized versions of libcurl for their products. Make sure
 new features that are "niche" can still be disabled at build-time.








>
>
>
>
>
>
>







23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
--------------------

 See Daniel's post on [Support of Encrypted
 SNI](https://curl.haxx.se/mail/lib-2019-03/0000.html) on the mailing list.

 Initial work exists in https://github.com/curl/curl/pull/4011

thread-safe `curl_global_init()`
--------------------------------

 Fix the libcurl specific parts of the function to be thread-safe. Make sure
 it can be thread-safe if built with thread-safe 3rd party libraries.
 (probably can't include `curl_global_init_mem()` for obvious reasons)

tiny-curl
---------

 There's no immediate action for this but users seem keen on being able to
 building custom minimized versions of libcurl for their products. Make sure
 new features that are "niche" can still be disabled at build-time.

Changes to jni/curl/docs/THANKS.
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
 This project has been alive for many years. Countless people have provided
 feedback that have improved curl. Here follows a list of people that have
 contributed (a-z order).

 If you have contributed but are missing here, please let us know!

"Captain Basil"
"Spoon Man"
1ocalhost on github
3dyd on github
Aaro Koskinen
Aaron Oneal
Aaron Orenstein
Aaron Scarisbrick

Abram Pousada

AceCrow on Github
Adam Barclay
Adam Brown
Adam Coyne
Adam D. Moss
Adam Langley
Adam Light
Adam Marcionek
Adam Piggott
Adam Sampson
Adam Tkac

Adrian Burcea
Adrian Peniak
Adrian Schuur
Adriano Meirelles


Ajit Dhumale
Akhil Kedia
Aki Koskinen
Akos Pasztory
Akshay Vernekar
Alain Danteny
Alan Jenkins
Alan Pinstein
Albert Chin-A-Young
Albert Choy
Alejandro Alvarez Ayllon
Alejandro R. Sedeño
Aleksandar Milivojevic
Aleksey Tulinov
Ales Mlakar
Ales Novak
Alessandro Ghedini
Alessandro Vesely

Alex Baines
Alex Bligh
Alex Chan
Alex Fishman
Alex Grebenschikov
Alex Gruz
Alex Konev
Alex Malinovich
Alex Mayorga
Alex McLellan
Alex Neblett
Alex Nichols
Alex Potapenko
Alex Rousskov
Alex Samorukov
Alex Suykov
Alex Vinnik
Alex aka WindEagle
Alexander Beedie
Alexander Dyagilev
Alexander Elgert
Alexander Klauer
Alexander Kourakos
Alexander Krasnostavsky
Alexander Lazic






<
<






>

>











>




>
>


















>

















<







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
 This project has been alive for many years. Countless people have provided
 feedback that have improved curl. Here follows a list of people that have
 contributed (a-z order).

 If you have contributed but are missing here, please let us know!



1ocalhost on github
3dyd on github
Aaro Koskinen
Aaron Oneal
Aaron Orenstein
Aaron Scarisbrick
aasivov on github
Abram Pousada
accountantM on github
AceCrow on Github
Adam Barclay
Adam Brown
Adam Coyne
Adam D. Moss
Adam Langley
Adam Light
Adam Marcionek
Adam Piggott
Adam Sampson
Adam Tkac
adnn on github
Adrian Burcea
Adrian Peniak
Adrian Schuur
Adriano Meirelles
afrind on github
ahodesuka on github
Ajit Dhumale
Akhil Kedia
Aki Koskinen
Akos Pasztory
Akshay Vernekar
Alain Danteny
Alan Jenkins
Alan Pinstein
Albert Chin-A-Young
Albert Choy
Alejandro Alvarez Ayllon
Alejandro R. Sedeño
Aleksandar Milivojevic
Aleksey Tulinov
Ales Mlakar
Ales Novak
Alessandro Ghedini
Alessandro Vesely
Alex aka WindEagle
Alex Baines
Alex Bligh
Alex Chan
Alex Fishman
Alex Grebenschikov
Alex Gruz
Alex Konev
Alex Malinovich
Alex Mayorga
Alex McLellan
Alex Neblett
Alex Nichols
Alex Potapenko
Alex Rousskov
Alex Samorukov
Alex Suykov
Alex Vinnik

Alexander Beedie
Alexander Dyagilev
Alexander Elgert
Alexander Klauer
Alexander Kourakos
Alexander Krasnostavsky
Alexander Lazic
90
91
92
93
94
95
96

97
98
99
100
101
102
103
Alona Rossen
Amit Katyal
Amol Pattekar
Amr Shahin
Anatol Belski
Anatoli Tubman
Anders Bakken

Anders Gustafsson
Anders Havn
Anders Roxell
Anderson Sasaki
Anderson Toshiyuki Sasaki
Andi Jahja
Andre Guibert de Bruet







>







93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
Alona Rossen
Amit Katyal
Amol Pattekar
Amr Shahin
Anatol Belski
Anatoli Tubman
Anders Bakken
Anders Berg
Anders Gustafsson
Anders Havn
Anders Roxell
Anderson Sasaki
Anderson Toshiyuki Sasaki
Andi Jahja
Andre Guibert de Bruet
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
Andrei Sedoi
Andrei Valeriu BICA
Andrei Virtosu
Andrej E Baranov
Andrew Benham
Andrew Biggs
Andrew Bushnell

Andrew Francis
Andrew Fuller
Andrew Ishchuk
Andrew Krieger
Andrew Kurushin
Andrew Lambert
Andrew Moise

Andrew Robbins
Andrew Wansink
Andrew de los Reyes
Andrey Labunets
Andrii Moiseiev

Andrés García
Andy Cedilnik
Andy Serpa
Andy Tsouladze
Angus Mackay

Anthon Pang
Anthony Avina
Anthony Bryan
Anthony G. Basile
Antoine Aubert
Antoine Calando
Anton Bychkov
Anton Gerasimov
Anton Kalmykov
Anton Malov
Anton Yabchinskiy
Antoni Villalonga
Antonio Larrosa
Antony74 on github
Antti Hätälä

Archangel_SDY on github
Arkadiusz Miskiewicz
Armel Asselin
Arnaud Compan
Arnaud Ebalard
Arnaud Rebillout
Aron Bergman

Artak Galoyan
Arthur Murray
Arve Knudsen
Arvid Norberg

Ashish Shukla
Ask Bjørn Hansen
Askar Safin
Ates Goral
Augustus Saunders

Avery Fay
Axel Tillequin
Ayoub Boudhar
Balaji Parasuram
Balaji S Rao
Balaji Salunke
Balazs Kovacsics
Balint Szilakszi
Barry Abrahamson
Barry Pollard
Bart Whiteley
Bas Mevissen
Bas van Schaik
Bastien Bouclet
Basuke Suzuki


Ben Boeckel
Ben Darnell
Ben Greear
Ben Kohler
Ben Madsen
Ben Noordhuis
Ben Van Hof







>







>


<


>





>















>







>




>





>















>
>







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
Andrei Sedoi
Andrei Valeriu BICA
Andrei Virtosu
Andrej E Baranov
Andrew Benham
Andrew Biggs
Andrew Bushnell
Andrew de los Reyes
Andrew Francis
Andrew Fuller
Andrew Ishchuk
Andrew Krieger
Andrew Kurushin
Andrew Lambert
Andrew Moise
Andrew Potter
Andrew Robbins
Andrew Wansink

Andrey Labunets
Andrii Moiseiev
Andrius Merkys
Andrés García
Andy Cedilnik
Andy Serpa
Andy Tsouladze
Angus Mackay
anshnd on github
Anthon Pang
Anthony Avina
Anthony Bryan
Anthony G. Basile
Antoine Aubert
Antoine Calando
Anton Bychkov
Anton Gerasimov
Anton Kalmykov
Anton Malov
Anton Yabchinskiy
Antoni Villalonga
Antonio Larrosa
Antony74 on github
Antti Hätälä
arainchik on github
Archangel_SDY on github
Arkadiusz Miskiewicz
Armel Asselin
Arnaud Compan
Arnaud Ebalard
Arnaud Rebillout
Aron Bergman
Aron Rotteveel
Artak Galoyan
Arthur Murray
Arve Knudsen
Arvid Norberg
asavah on github
Ashish Shukla
Ask Bjørn Hansen
Askar Safin
Ates Goral
Augustus Saunders
Austin Green
Avery Fay
Axel Tillequin
Ayoub Boudhar
Balaji Parasuram
Balaji S Rao
Balaji Salunke
Balazs Kovacsics
Balint Szilakszi
Barry Abrahamson
Barry Pollard
Bart Whiteley
Bas Mevissen
Bas van Schaik
Bastien Bouclet
Basuke Suzuki
baumanj on github
bdry on github
Ben Boeckel
Ben Darnell
Ben Greear
Ben Kohler
Ben Madsen
Ben Noordhuis
Ben Van Hof
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
Bjarni Ingi Gislason
Bjoern Franke
Bjoern Sikora
Bjorn Augustsson
Bjorn Reese
Björn Stenberg
Blaise Potard

Bob Relyea
Bob Richmond
Bob Schader

Bogdan Nicula
Brad Burdick
Brad Fitzpatrick
Brad Harder
Brad Hards
Brad King
Brad Spencer
Bradford Bruce

Brandon Casey
Brandon Dong
Brandon Wang
Brendan Jurd
Brent Beardsley
Brian Akins
Brian Carpenter
Brian Chaplin
Brian Childs
Brian Chrisman
Brian Dessent
Brian E. Gallew
Brian J. Murrell
Brian Prodoehl
Brian R Duffy
Brian Ulm
Brock Noland
Bru Rom
Bruce Mitchener
Bruce Stephens

Bruno Grasselli
Bruno Thomsen
Bruno de Carvalho
Bryan Henderson
Bryan Kemp



Bylon2 on github
Byrial Jensen
Caleb Raitto
Cameron Kaiser
Cameron MacMinn
Camille Moncelier
Caolan McNamara

Carie Pointer
Carlo Cannas
Carlo Marcelo Arenas Belón
Carlo Teubner
Carlo Wood
Carlos ORyan
Carsten Lange
Casey O'Donnell
Catalin Patulea


Chad Monroe
Chandrakant Bagul
Charles Kerr
Charles Romestant
Chen Prog
Chester Liu
Chih-Chung Chang







>



>








>




















>


<


>
>
>







>









>
>







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
Bjarni Ingi Gislason
Bjoern Franke
Bjoern Sikora
Bjorn Augustsson
Bjorn Reese
Björn Stenberg
Blaise Potard
bnfp on github
Bob Relyea
Bob Richmond
Bob Schader
bobmitchell1956 on github
Bogdan Nicula
Brad Burdick
Brad Fitzpatrick
Brad Harder
Brad Hards
Brad King
Brad Spencer
Bradford Bruce
bramus on github
Brandon Casey
Brandon Dong
Brandon Wang
Brendan Jurd
Brent Beardsley
Brian Akins
Brian Carpenter
Brian Chaplin
Brian Childs
Brian Chrisman
Brian Dessent
Brian E. Gallew
Brian J. Murrell
Brian Prodoehl
Brian R Duffy
Brian Ulm
Brock Noland
Bru Rom
Bruce Mitchener
Bruce Stephens
Bruno de Carvalho
Bruno Grasselli
Bruno Thomsen

Bryan Henderson
Bryan Kemp
bsammon on github
buzo-ffm on github
bxac on github
Bylon2 on github
Byrial Jensen
Caleb Raitto
Cameron Kaiser
Cameron MacMinn
Camille Moncelier
Caolan McNamara
Captain Basil
Carie Pointer
Carlo Cannas
Carlo Marcelo Arenas Belón
Carlo Teubner
Carlo Wood
Carlos ORyan
Carsten Lange
Casey O'Donnell
Catalin Patulea
cbartl on github
cclauss on github
Chad Monroe
Chandrakant Bagul
Charles Kerr
Charles Romestant
Chen Prog
Chester Liu
Chih-Chung Chang
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
Christopher Reid
Christopher Stone
Chungtsun Li
Ciprian Badescu
Claes Jakobsson
Clarence Gardner
Claudio Neves

Clemens Gruber
Cliff Crosland
Clifford Wolf
Clint Clayton
Clément Notin


Cody Jones
Cody Mack
Colby Ranger
Colin Blair
Colin Hogben
Colin Watson
Colm Buckley
Constantine Sapuntzakis
Cory Benfield
Cory Nelson
Costya Shulyupin
Craig A West

Craig Davison

Craig Markwardt
Craig de Stigter
Cris Bailiff

Cristian Rodríguez
Curt Bogmine
Cynthia Coan
Cyril B
Cyrill Osterwalder
Cédric Connes
Cédric Deltheil
D. Flinkmann

Da-Yoon Chung

Dag Ekengren
Dagobert Michelsen
Dair Grant
Dambaev Alexander
Damian Dixon
Damien Adant
Damien Vielpeau
Dan Becker
Dan Cristian
Dan Donahue
Dan Fandrich
Dan Jacobson
Dan Johnson
Dan Locks
Dan McNulty
Dan Nelson
Dan Petitt
Dan Torop
Dan Zitter

Daniel Bankhead
Daniel Black
Daniel Cater
Daniel Egger
Daniel Gustafsson
Daniel Hwang
Daniel Jeliński
Daniel Johnson
Daniel Kahn Gillmor
Daniel Krügler
Daniel Lee Hwang
Daniel Lublin

Daniel Melani
Daniel Mentz
Daniel Romero
Daniel Schauenberg
Daniel Seither
Daniel Shahaf
Daniel Silverstone
Daniel Steinberg
Daniel Stenberg
Daniel Theron
Daniel at touchtunes
Daphne Luong
Dario Nieuwenhuis
Dario Weißer
Darryl House
Darshan Mody
Darío Hereñú

Dave Dribin
Dave Halbakken
Dave Hamilton
Dave May
Dave Reisner
Dave Thompson
Dave Vasilevsky







>





>
>












>

>

|

>








>

>



















>












>










<






>







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
Christopher Reid
Christopher Stone
Chungtsun Li
Ciprian Badescu
Claes Jakobsson
Clarence Gardner
Claudio Neves
clbr on github
Clemens Gruber
Cliff Crosland
Clifford Wolf
Clint Clayton
Clément Notin
cmfrolick on github
codesniffer13 on github
Cody Jones
Cody Mack
Colby Ranger
Colin Blair
Colin Hogben
Colin Watson
Colm Buckley
Constantine Sapuntzakis
Cory Benfield
Cory Nelson
Costya Shulyupin
Craig A West
Craig Andrews
Craig Davison
Craig de Stigter
Craig Markwardt
crazydef on github
Cris Bailiff
Cristian Greco
Cristian Rodríguez
Curt Bogmine
Cynthia Coan
Cyril B
Cyrill Osterwalder
Cédric Connes
Cédric Deltheil
D. Flinkmann
d912e3 on github
Da-Yoon Chung
daboul on github
Dag Ekengren
Dagobert Michelsen
Dair Grant
Dambaev Alexander
Damian Dixon
Damien Adant
Damien Vielpeau
Dan Becker
Dan Cristian
Dan Donahue
Dan Fandrich
Dan Jacobson
Dan Johnson
Dan Locks
Dan McNulty
Dan Nelson
Dan Petitt
Dan Torop
Dan Zitter
Daniel at touchtunes
Daniel Bankhead
Daniel Black
Daniel Cater
Daniel Egger
Daniel Gustafsson
Daniel Hwang
Daniel Jeliński
Daniel Johnson
Daniel Kahn Gillmor
Daniel Krügler
Daniel Lee Hwang
Daniel Lublin
Daniel Marjamäki
Daniel Melani
Daniel Mentz
Daniel Romero
Daniel Schauenberg
Daniel Seither
Daniel Shahaf
Daniel Silverstone
Daniel Steinberg
Daniel Stenberg
Daniel Theron

Daphne Luong
Dario Nieuwenhuis
Dario Weißer
Darryl House
Darshan Mody
Darío Hereñú
dasimx on github
Dave Dribin
Dave Halbakken
Dave Hamilton
Dave May
Dave Reisner
Dave Thompson
Dave Vasilevsky
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
David James
David Kalnischkies
David Kierznowski
David Kimdon
David L.
David Lang
David LeBlanc

David Lord
David McCreedy
David Odin
David Phillips
David Rosenstrauch
David Ryskalczyk
David Sanderson
David Schweikert
David Shaw
David Strauss
David Tarendash
David Thiel
David Walser
David Woodhouse
David Wright
David Yan

Dengminwen
Denis Chaplygin
Denis Feklushkin
Denis Ollier
Dennis Clarke
Derek Higgins
Desmond O. Chang

Detlef Schmier
Dheeraj Sangamkar
Didier Brisebourg
Diego Bes
Diego Casorran
Dilyan Palauzov
Dima Barsky
Dima Pasechnik
Dima Tisnek
Dimitar Boevski
Dimitre Dimitrov
Dimitrios Apostolou
Dimitrios Siganos
Dimitris Sarris
Dinar
Dirk Eddelbuettel
Dirk Feytons
Dirk Manske


Dmitri Shubin
Dmitri Tikhonov
Dmitriy Sergeyev

Dmitry Bartsevich
Dmitry Eremin-Solenikov
Dmitry Falko
Dmitry Kostjuchenko
Dmitry Kurochkin
Dmitry Mikhirev
Dmitry Popov
Dmitry Rechkin
Dmitry S. Baikov

Dolbneff A.V
Domenico Andreoli
Dominick Meglio
Dominik Hölzl
Dominique Leuenberger
Don J Olmstead
Dongliang Mu
Doron Behar
Doug Kaufman
Doug Porter
Douglas Creager
Douglas E. Wegscheid
Douglas Kilpatrick
Douglas Mencken
Douglas R. Horner
Douglas Steinwand
Dov Murik

Drake Arconis

Duane Cathey
Duncan Mac-Vicar Prett
Dustin Boswell
Dusty Mabe
Duy Phan Thanh
Dwarakanath Yadavalli
Dylan Ellicott
Dylan Salisbury
Dániel Bakai
Early Ehlinger
Earnestly on github
Eason-Yu on github
Ebenezer Ikonne
Ed Morley

Edin Kadribasic
Edmond Yu
Eduard Bloch
Edward Kimmel
Edward Rudd
Edward Sheldrake
Edward Thomson
Eelco Dolstra
Eetu Ojanen
Egon Eckert
Eldar Zaitov


Eli Schwartz
Elia Tufarolo
Elliot Saba
Ellis Pritchard
Elmira A Semenova

Emanuele Bovisio
Emil Engler
Emil Lerner
Emil Romanus
Emiliano Ida
Emmanuel Tychon
Enrico Scholz







>
















>







>


















>
>



>









>

















>

>














>











>
>





>







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
David James
David Kalnischkies
David Kierznowski
David Kimdon
David L.
David Lang
David LeBlanc
David Lopes
David Lord
David McCreedy
David Odin
David Phillips
David Rosenstrauch
David Ryskalczyk
David Sanderson
David Schweikert
David Shaw
David Strauss
David Tarendash
David Thiel
David Walser
David Woodhouse
David Wright
David Yan
dbrowndan on github
Dengminwen
Denis Chaplygin
Denis Feklushkin
Denis Ollier
Dennis Clarke
Derek Higgins
Desmond O. Chang
destman on github
Detlef Schmier
Dheeraj Sangamkar
Didier Brisebourg
Diego Bes
Diego Casorran
Dilyan Palauzov
Dima Barsky
Dima Pasechnik
Dima Tisnek
Dimitar Boevski
Dimitre Dimitrov
Dimitrios Apostolou
Dimitrios Siganos
Dimitris Sarris
Dinar
Dirk Eddelbuettel
Dirk Feytons
Dirk Manske
dkjjr89 on github
dkwolfe4 on github
Dmitri Shubin
Dmitri Tikhonov
Dmitriy Sergeyev
dmitrmax on github
Dmitry Bartsevich
Dmitry Eremin-Solenikov
Dmitry Falko
Dmitry Kostjuchenko
Dmitry Kurochkin
Dmitry Mikhirev
Dmitry Popov
Dmitry Rechkin
Dmitry S. Baikov
dnivras on github
Dolbneff A.V
Domenico Andreoli
Dominick Meglio
Dominik Hölzl
Dominique Leuenberger
Don J Olmstead
Dongliang Mu
Doron Behar
Doug Kaufman
Doug Porter
Douglas Creager
Douglas E. Wegscheid
Douglas Kilpatrick
Douglas Mencken
Douglas R. Horner
Douglas Steinwand
Dov Murik
dpull on github
Drake Arconis
dtmsecurity on github
Duane Cathey
Duncan Mac-Vicar Prett
Dustin Boswell
Dusty Mabe
Duy Phan Thanh
Dwarakanath Yadavalli
Dylan Ellicott
Dylan Salisbury
Dániel Bakai
Early Ehlinger
Earnestly on github
Eason-Yu on github
Ebenezer Ikonne
Ed Morley
Edgaras Janušauskas
Edin Kadribasic
Edmond Yu
Eduard Bloch
Edward Kimmel
Edward Rudd
Edward Sheldrake
Edward Thomson
Eelco Dolstra
Eetu Ojanen
Egon Eckert
Eldar Zaitov
elelel on github
elephoenix on github
Eli Schwartz
Elia Tufarolo
Elliot Saba
Ellis Pritchard
Elmira A Semenova
elsamuko on github
Emanuele Bovisio
Emil Engler
Emil Lerner
Emil Romanus
Emiliano Ida
Emmanuel Tychon
Enrico Scholz
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
Etienne Simard
Eugene Kotlyarov
Evan Jordan
Even Rouault
Evert Pot
Evgeny Grin
Evgeny Turnaev

Eygene Ryabinkin
Fabian Frank
Fabian Hiernaux
Fabian Keil
Fabian Ruff
Fabrice Fontaine
Fabrizio Ammollo
Fahim Chandurwala

Federico Bianchi
Fedor Karpelevitch
Feist Josselin
Felix Hädicke
Felix Kaiser
Felix Yan
Felix von Leitner
Feng Tu
Fernando Muñoz
Flavio Medeiros
Florian Pritz
Florian Schoppmann
Florian Weimer
Florin Petriuc







>








>





|
|







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
Etienne Simard
Eugene Kotlyarov
Evan Jordan
Even Rouault
Evert Pot
Evgeny Grin
Evgeny Turnaev
eXeC64 on github
Eygene Ryabinkin
Fabian Frank
Fabian Hiernaux
Fabian Keil
Fabian Ruff
Fabrice Fontaine
Fabrizio Ammollo
Fahim Chandurwala
Faizur Rahman
Federico Bianchi
Fedor Karpelevitch
Feist Josselin
Felix Hädicke
Felix Kaiser
Felix von Leitner
Felix Yan
Feng Tu
Fernando Muñoz
Flavio Medeiros
Florian Pritz
Florian Schoppmann
Florian Weimer
Florin Petriuc
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
Gregory Nicholls
Gregory Szorc
Griffin Downs
Grigory Entin
Guenole Bescon
Guido Berhoerster
Guillaume Arluison

Gunter Knauf
Gustaf Hui
Gustavo Grieco
Guy Poizat
GwanYeong Kim
Gwenole Beauchesne
Gökhan Şengün
Götz Babin-Ebell
Hagai Auro
Haibo Huang
Hamish Mackenzie

Han Han
Han Qiao
Hang Kin Lau
Hang Su
Hannes Magnusson
Hanno Böck
Hanno Kranzhoff







>











>







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
Gregory Nicholls
Gregory Szorc
Griffin Downs
Grigory Entin
Guenole Bescon
Guido Berhoerster
Guillaume Arluison
guitared on github
Gunter Knauf
Gustaf Hui
Gustavo Grieco
Guy Poizat
GwanYeong Kim
Gwenole Beauchesne
Gökhan Şengün
Götz Babin-Ebell
Hagai Auro
Haibo Huang
Hamish Mackenzie
hamstergene on github
Han Han
Han Qiao
Hang Kin Lau
Hang Su
Hannes Magnusson
Hanno Böck
Hanno Kranzhoff
725
726
727
728
729
730
731

732
733
734
735
736
737
738
Herve Amblard
Hidemoto Nakada
Ho-chi Chen
Hoi-Ho Chan
Hongli Lai
Howard Blaise
Howard Chu

Hubert Kario
Huzaifa Sidhpurwala
Hzhijun
Ian D Allen
Ian Fette
Ian Ford
Ian Gulliver







>







774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
Herve Amblard
Hidemoto Nakada
Ho-chi Chen
Hoi-Ho Chan
Hongli Lai
Howard Blaise
Howard Chu
hsiao yi
Hubert Kario
Huzaifa Sidhpurwala
Hzhijun
Ian D Allen
Ian Fette
Ian Ford
Ian Gulliver
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
Igor Novoseltsev
Igor Polyakov
Ihor Karpenko
Iida Yosiaki
Ilguiz Latypov
Ilja van Sprundel
Ilya Kosarev

Immanuel Gregoire
Inca R

Ingmar Runge
Ingo Ralf Blum
Ingo Wilken
Irfan Adilovic
Ironbars13 on github
Irving Wolfe
Isaac Boukris
Isaiah Norton
Ishan SinghLevett
Ithubg on github
Ivan Avdeev

Ivo Bellin Salarin

Jack Zhang
Jackarain on github
Jacky Lam
Jacob Barthelmeh
Jacob Meuser
Jacob Moshenko
Jactry Zeng
Jad Chamcham
Jaime Fullaondo

Jakub Wilk
Jakub Zakrzewski
James Atwill
James Brown
James Bursa
James Cheng
James Clancy
James Cone
James Dury

James Gallagher
James Griffiths
James Housley
James Knight
James MacMillan
James Slaughter
Jamie Lokier







>


>











>

>









>









>







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
Igor Novoseltsev
Igor Polyakov
Ihor Karpenko
Iida Yosiaki
Ilguiz Latypov
Ilja van Sprundel
Ilya Kosarev
imilli on github
Immanuel Gregoire
Inca R
infinnovation-dev on github
Ingmar Runge
Ingo Ralf Blum
Ingo Wilken
Irfan Adilovic
Ironbars13 on github
Irving Wolfe
Isaac Boukris
Isaiah Norton
Ishan SinghLevett
Ithubg on github
Ivan Avdeev
IvanoG on github
Ivo Bellin Salarin
iz8mbw on github
Jack Zhang
Jackarain on github
Jacky Lam
Jacob Barthelmeh
Jacob Meuser
Jacob Moshenko
Jactry Zeng
Jad Chamcham
Jaime Fullaondo
jakirkham on github
Jakub Wilk
Jakub Zakrzewski
James Atwill
James Brown
James Bursa
James Cheng
James Clancy
James Cone
James Dury
James Fuller
James Gallagher
James Griffiths
James Housley
James Knight
James MacMillan
James Slaughter
Jamie Lokier
801
802
803
804
805
806
807

808
809
810
811
812
813
814
Jan Van Boghout
JanB on github
Janne Johansson
Jared Jennings
Jared Lundell
Jari Aalto
Jari Sundell

Jason Baietto
Jason Glasgow
Jason Juang
Jason Lee
Jason Liu
Jason McDonald
Jason S. Priebe







>







857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
Jan Van Boghout
JanB on github
Janne Johansson
Jared Jennings
Jared Lundell
Jari Aalto
Jari Sundell
jasal82 on github
Jason Baietto
Jason Glasgow
Jason Juang
Jason Lee
Jason Liu
Jason McDonald
Jason S. Priebe
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
Jerry Krinock
Jerry Wu
Jes Badwal
Jesper Jensen
Jesse Chisholm
Jesse Noller
Jesse Tan

Jie He
Jim Drash
Jim Freeman
Jim Fuller
Jim Hollinger
Jim Meyering
Jimmy Gaussen
Jiri Dvorak
Jiri Hruska
Jiri Jaburek
Jiří Malák

Jocelyn Jaubert
Joe Halpin
Joe Malicki
Joe Mason
Joel Chen
Joel Depooter
Jofell Gallardo







>











>







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
Jerry Krinock
Jerry Wu
Jes Badwal
Jesper Jensen
Jesse Chisholm
Jesse Noller
Jesse Tan
jethrogb on github
Jie He
Jim Drash
Jim Freeman
Jim Fuller
Jim Hollinger
Jim Meyering
Jimmy Gaussen
Jiri Dvorak
Jiri Hruska
Jiri Jaburek
Jiří Malák
jnbr on github
Jocelyn Jaubert
Joe Halpin
Joe Malicki
Joe Mason
Joel Chen
Joel Depooter
Jofell Gallardo
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
John Wilkinson
John-Mark Bell
Johnny Luong
Jojojov on github
Jon DeVree
Jon Grubbs
Jon Nelson

Jon Sargeant
Jon Seymour
Jon Spencer
Jon Torrey
Jon Travis
Jon Turner
Jonas Forsman
Jonas Minnberg
Jonas Schnelli
Jonas Vautherin
Jonatan Lander
Jonatan Vela
Jonathan Cardoso Machado
Jonathan Hseu
Jonathan Moerman
Jonathan Nieder
Jongki Suwandi

Joombalaya on github
Joonas Kuorilehto
Jose Alf
Jose Kahan
Josef Wolf
Josh Bialkowski
Josh Kapell

Joshua Kwan
Joshua Swink
Josie Huddleston
Josue Andrade Gomes
Jozef Kralik
Juan Barreto
Juan F. Codagnone







>

















>







>







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
John Wilkinson
John-Mark Bell
Johnny Luong
Jojojov on github
Jon DeVree
Jon Grubbs
Jon Nelson
Jon Rumsey
Jon Sargeant
Jon Seymour
Jon Spencer
Jon Torrey
Jon Travis
Jon Turner
Jonas Forsman
Jonas Minnberg
Jonas Schnelli
Jonas Vautherin
Jonatan Lander
Jonatan Vela
Jonathan Cardoso Machado
Jonathan Hseu
Jonathan Moerman
Jonathan Nieder
Jongki Suwandi
jonrumsey on github
Joombalaya on github
Joonas Kuorilehto
Jose Alf
Jose Kahan
Josef Wolf
Josh Bialkowski
Josh Kapell
joshhe on github
Joshua Kwan
Joshua Swink
Josie Huddleston
Josue Andrade Gomes
Jozef Kralik
Juan Barreto
Juan F. Codagnone
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
Julian Romero Nieto
Julian Taylor
Julian Z
Julien Chaffraix
Julien Nabet
Julien Royer
Jun-ichiro itojun Hagino

Junho Choi
Jurij Smakov
Juro Bystricky
Justin Clift
Justin Ehlert
Justin Fletcher
Justin Karneges
Justin Maggard


János Fekete
Jérémy Rocher
Jörg Mueller-Tolk
Jörn Hartroth
K. R. Walker

Kai Engert
Kai Noda
Kai Sommerfeld
Kai-Uwe Rommel
Kalle Vahlman
Kamil Dudka
Kang Lin







>








>
>





>







1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
Julian Romero Nieto
Julian Taylor
Julian Z
Julien Chaffraix
Julien Nabet
Julien Royer
Jun-ichiro itojun Hagino
jungle-boogie on github
Junho Choi
Jurij Smakov
Juro Bystricky
Justin Clift
Justin Ehlert
Justin Fletcher
Justin Karneges
Justin Maggard
jveazey on github
jzinn on github
János Fekete
Jérémy Rocher
Jörg Mueller-Tolk
Jörn Hartroth
K. R. Walker
ka7 on github
Kai Engert
Kai Noda
Kai Sommerfeld
Kai-Uwe Rommel
Kalle Vahlman
Kamil Dudka
Kang Lin
1024
1025
1026
1027
1028
1029
1030


1031
1032
1033
1034
1035

1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046

1047
1048
1049
1050
1051
1052
1053
Kjetil Jacobsen
Klaus Stein
Klevtsov Vadim
Kobi Gurkan
Koen Dergent
Konstantin Isakov
Konstantin Kushnir


Kris Kennaway
Krishnendu Majumdar
Krister Johansen
Kristian Gunstone
Kristian Köhntopp

Kristiyan Tsaklev
Kristoffer Gleditsch
Kunal Ekawde
Kurt Fankhauser
Kyle Abramowitz
Kyle Edwards
Kyle J. McKay
Kyle L. Huff
Kyle Sallee
Kyohei Kadota
Kyselgov E.N

Lachlan O'Dea
Ladar Levison
Lance Ware
Larry Campbell
Larry Fahnoe
Larry Lin
Larry Stefani







>
>





>











>







1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
Kjetil Jacobsen
Klaus Stein
Klevtsov Vadim
Kobi Gurkan
Koen Dergent
Konstantin Isakov
Konstantin Kushnir
kouzhudong on github
kreshano on github
Kris Kennaway
Krishnendu Majumdar
Krister Johansen
Kristian Gunstone
Kristian Köhntopp
Kristian Mide
Kristiyan Tsaklev
Kristoffer Gleditsch
Kunal Ekawde
Kurt Fankhauser
Kyle Abramowitz
Kyle Edwards
Kyle J. McKay
Kyle L. Huff
Kyle Sallee
Kyohei Kadota
Kyselgov E.N
l00p3r on Hackerone
Lachlan O'Dea
Ladar Levison
Lance Ware
Larry Campbell
Larry Fahnoe
Larry Lin
Larry Stefani
1069
1070
1071
1072
1073
1074
1075

1076
1077
1078
1079
1080

1081
1082
1083
1084
1085
1086
1087
Leif W
Leigh Purdie
Leith Bade
Len Krause
Len Marinaccio
Lenaic Lefever
Lenny Rachitsky

Leon Breedt
Leon Winter
Leonardo Rosati
Leonardo Taccari
Liam Healy

Lijo Antony
Linas Vepstas
Lindley French
Ling Thio
Linos Giannopoulos
Linus Lewandowski
Linus Nielsen Feltzing







>





>







1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
Leif W
Leigh Purdie
Leith Bade
Len Krause
Len Marinaccio
Lenaic Lefever
Lenny Rachitsky
Leo Neat
Leon Breedt
Leon Winter
Leonardo Rosati
Leonardo Taccari
Liam Healy
lijian996 on github
Lijo Antony
Linas Vepstas
Lindley French
Ling Thio
Linos Giannopoulos
Linus Lewandowski
Linus Nielsen Feltzing
1102
1103
1104
1105
1106
1107
1108

1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121

1122
1123
1124
1125
1126
1127
1128
1129

1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140

1141
1142
1143
1144
1145
1146
1147
Lucas Pardue
Lucas Severo
Ludek Finstrle
Ludovico Cavedon
Ludwig Nussel
Lukas Ruzicka
Lukasz Czekierda

Luke Amery
Luke Call
Luke Dashjr
Luo Jinghua
Luong Dinh Dung
Luz Paz
Luật Nguyễn
Lyman Epp
Lyndon Hill
MAntoniak on github
Maciej Karpiuk
Maciej Puzio
Maciej W. Rozycki

Mahmoud Samir Fayed
Maks Naumov
Maksim Kuzevanov
Maksim Stsepanenka
Mamoru Tasaka
Mamta Upadhyay
Mandy Wu
Manfred Schwarb

Manuel Massing
Marc Aldorasi
Marc Boucher
Marc Deslauriers
Marc Doughty
Marc Hesse
Marc Hörsken
Marc Kleine-Budde
Marc Renault
Marc Schlatter
Marc-Antoine Perennou

Marcel Hernandez
Marcel Raad
Marcel Roelofs
Marcelo Echeverria
Marcelo Juchem
Marcin Adamski
Marcin Gryszkalis







>









<



>








>











>







1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190

1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
Lucas Pardue
Lucas Severo
Ludek Finstrle
Ludovico Cavedon
Ludwig Nussel
Lukas Ruzicka
Lukasz Czekierda
lukaszgn on github
Luke Amery
Luke Call
Luke Dashjr
Luo Jinghua
Luong Dinh Dung
Luz Paz
Luật Nguyễn
Lyman Epp
Lyndon Hill

Maciej Karpiuk
Maciej Puzio
Maciej W. Rozycki
madblobfish on github
Mahmoud Samir Fayed
Maks Naumov
Maksim Kuzevanov
Maksim Stsepanenka
Mamoru Tasaka
Mamta Upadhyay
Mandy Wu
Manfred Schwarb
MAntoniak on github
Manuel Massing
Marc Aldorasi
Marc Boucher
Marc Deslauriers
Marc Doughty
Marc Hesse
Marc Hörsken
Marc Kleine-Budde
Marc Renault
Marc Schlatter
Marc-Antoine Perennou
marc-groundctl on github
Marcel Hernandez
Marcel Raad
Marcel Roelofs
Marcelo Echeverria
Marcelo Juchem
Marcin Adamski
Marcin Gryszkalis
1193
1194
1195
1196
1197
1198
1199

1200
1201
1202
1203
1204
1205
1206
Martin Lemke
Martin Skinner
Martin Staael
Martin Storsjö
Martin Vejnár
Marty Kuhrt
Maruko

Massimiliano Fantuzzi
Massimiliano Ziccardi
Massimo Callegari
Mateusz Loskot
Mathias Axelsson
Mathieu Legare
Mats Lidell







>







1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
Martin Lemke
Martin Skinner
Martin Staael
Martin Storsjö
Martin Vejnár
Marty Kuhrt
Maruko
masbug on github
Massimiliano Fantuzzi
Massimiliano Ziccardi
Massimo Callegari
Mateusz Loskot
Mathias Axelsson
Mathieu Legare
Mats Lidell
1231
1232
1233
1234
1235
1236
1237


1238
1239
1240
1241
1242
1243
1244
Max Khon
Max Savenkov
Maxim Ivanov
Maxim Perenesenko
Maxim Prohorov
Maxime Larocque
Maxime Legros


Mehmet Bozkurt
Mekonikum
Melissa Mears
Mert Yazıcıoğlu
Mettgut Jamalla
Michael Anti
Michael Benedict







>
>







1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
Max Khon
Max Savenkov
Maxim Ivanov
Maxim Perenesenko
Maxim Prohorov
Maxime Larocque
Maxime Legros
mbeifuss on github
mccormickt12 on github
Mehmet Bozkurt
Mekonikum
Melissa Mears
Mert Yazıcıoğlu
Mettgut Jamalla
Michael Anti
Michael Benedict
1280
1281
1282
1283
1284
1285
1286

1287
1288
1289
1290
1291
1292
1293
1294

1295
1296
1297
1298
1299

1300
1301
1302
1303
1304
1305
1306
1307

1308

1309
1310
1311
1312


1313
1314

1315
1316
1317
1318
1319
1320

1321
1322
1323
1324
1325
1326
1327
1328
1329


1330

1331
1332
1333
1334

1335


1336
1337
1338
1339
1340
1341
1342
1343
1344

1345
1346
1347
1348

1349
1350
1351
1352
1353
1354
1355
1356
1357

1358
1359
1360

1361
1362

1363
1364
1365

1366
1367
1368
1369
1370
1371
1372
1373

1374
1375
1376
1377
1378
1379
1380
1381

1382
1383
1384
1385
1386

1387
1388
1389
1390

1391
1392
1393
1394
1395
1396
1397
1398
1399
1400


1401
1402
1403
1404
1405
1406
1407
Michał Janiszewski
Michał Kowalczyk
Michał Piechowski
Michel Promonet
Michele Bini
Miguel Angel
Miguel Diaz

Mihai Ionescu
Mikael Johansson
Mikael Sennerholm
Mikalai Ananenka
Mike Bytnar
Mike Crowe
Mike Dobbs
Mike Dowell

Mike Giancola
Mike Hasselberg
Mike Henshaw
Mike Hommey
Mike Mio

Mike Power
Mike Protts
Mike Revi
Miklos Nemeth
Miloš Ljumović
Mingliang Zhu
Miroslav Franc
Miroslav Spousta

Mitz Wark

Mohamed Lrhazi
Mohammad AlSaleh
Mohammad Hasbini
Mohun Biswas


Mostyn Bramley-Moore
Moti Avrahami

MrSorcus on github
Muz Dima
Myk Taylor
NTMan on Github
Nach M. S.
Nagai H

Nate Prewitt
Nathan Coulter
Nathan O'Sullivan
Nathanael Nerode
Nathaniel J. Smith
Nathaniel Waisbrot
Naveen Chandran
Naveen Noel
Neal Poole


Nehal J Wani

Neil Bowers
Neil Dunbar
Neil Kolban
Neil Spring

Niall O'Reilly


Nic Roets
Nicholas Maniscalco
Nick Draffen
Nick Gimbrone
Nick Humfrey
Nick Miyake
Nick Zitzmann
Nicklas Avén
Nico Baggus

Nicolas Berloquin
Nicolas Croiset
Nicolas François
Nicolas Grekas

Nicolas Morey-Chaisemartin
Niels van Tongeren
Nikita Schmidt
Nikitinskit Dmitriy
Niklas Angebrand
Niklas Hambüchen
Nikolai Kondrashov
Nikos Mavrogiannopoulos
Nikos Tsipinakis

Ning Dong
Nir Soffer
Nis Jorgensen

Nobuhiro Ban
Nodak Sodak

Norbert Frese
Norbert Kett
Norbert Novotny

Octavio Schroeder
Ofer
Okhin Vasilij
Ola Mork
Olaf Flebbe
Olaf Stüben
Oleg Pudeyev
Olen Andoni

Oli Kingshott
Oliver Gondža
Oliver Graute
Oliver Kuckertz
Oliver Schindler
Olivier Berger
Olivier Brunel
Omar Ramadan

Orange Tsai
Oren Souroujon
Oren Tirosh
Orgad Shaneh
Ori Avtalion

Oscar Koeroo
Oscar Norlander
Oskar Liljeblad
Oumph on github

P R Schaffner
Palo Markovic
Paolo Mossino
Paolo Piacentini
Paras Sethia
Pascal Gaudette
Pascal Terjan
Pasha Kuznetsov
Pasi Karkkainen
Pat Ray


Patrice Guerin
Patricia Muscalu
Patrick Bihan-Faou
Patrick Dawson
Patrick McManus
Patrick Monnerat
Patrick Rapin







>








>





>








>

>




>
>


>



<


>









>
>

>




>

>
>









>




>









>



>


>



>








>








>





>




>










>
>







1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403

1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
Michał Janiszewski
Michał Kowalczyk
Michał Piechowski
Michel Promonet
Michele Bini
Miguel Angel
Miguel Diaz
migueljcrum on github
Mihai Ionescu
Mikael Johansson
Mikael Sennerholm
Mikalai Ananenka
Mike Bytnar
Mike Crowe
Mike Dobbs
Mike Dowell
Mike Frysinger
Mike Giancola
Mike Hasselberg
Mike Henshaw
Mike Hommey
Mike Mio
Mike Norton
Mike Power
Mike Protts
Mike Revi
Miklos Nemeth
Miloš Ljumović
Mingliang Zhu
Miroslav Franc
Miroslav Spousta
Mischa Salle
Mitz Wark
mkzero on github
Mohamed Lrhazi
Mohammad AlSaleh
Mohammad Hasbini
Mohun Biswas
momala454 on github
moohoorama on github
Mostyn Bramley-Moore
Moti Avrahami
MrdUkk on github
MrSorcus on github
Muz Dima
Myk Taylor

Nach M. S.
Nagai H
naost3rn on github
Nate Prewitt
Nathan Coulter
Nathan O'Sullivan
Nathanael Nerode
Nathaniel J. Smith
Nathaniel Waisbrot
Naveen Chandran
Naveen Noel
Neal Poole
nedres on github
neex on github
Nehal J Wani
neheb on github
Neil Bowers
Neil Dunbar
Neil Kolban
Neil Spring
nevv on HackerOne/curl
Niall O'Reilly
niallor on github
nianxuejie on github
Nic Roets
Nicholas Maniscalco
Nick Draffen
Nick Gimbrone
Nick Humfrey
Nick Miyake
Nick Zitzmann
Nicklas Avén
Nico Baggus
nico-abram on github
Nicolas Berloquin
Nicolas Croiset
Nicolas François
Nicolas Grekas
Nicolas Guillier
Nicolas Morey-Chaisemartin
Niels van Tongeren
Nikita Schmidt
Nikitinskit Dmitriy
Niklas Angebrand
Niklas Hambüchen
Nikolai Kondrashov
Nikos Mavrogiannopoulos
Nikos Tsipinakis
niner on github
Ning Dong
Nir Soffer
Nis Jorgensen
nk
Nobuhiro Ban
Nodak Sodak
nopjmp on github
Norbert Frese
Norbert Kett
Norbert Novotny
NTMan on Github
Octavio Schroeder
Ofer
Okhin Vasilij
Ola Mork
Olaf Flebbe
Olaf Stüben
Oleg Pudeyev
Olen Andoni
olesteban on github
Oli Kingshott
Oliver Gondža
Oliver Graute
Oliver Kuckertz
Oliver Schindler
Olivier Berger
Olivier Brunel
Omar Ramadan
omau on github
Orange Tsai
Oren Souroujon
Oren Tirosh
Orgad Shaneh
Ori Avtalion
osabc on github
Oscar Koeroo
Oscar Norlander
Oskar Liljeblad
Oumph on github
ovidiu-benea on github
P R Schaffner
Palo Markovic
Paolo Mossino
Paolo Piacentini
Paras Sethia
Pascal Gaudette
Pascal Terjan
Pasha Kuznetsov
Pasi Karkkainen
Pat Ray
patelvivekv1993 on github
patnyb on github
Patrice Guerin
Patricia Muscalu
Patrick Bihan-Faou
Patrick Dawson
Patrick McManus
Patrick Monnerat
Patrick Rapin
1431
1432
1433
1434
1435
1436
1437

1438
1439
1440
1441

1442

1443
1444
1445
1446
1447
1448
1449
Pavel Cenek
Pavel Gushchin
Pavel Löbl
Pavel Orehov
Pavel Pavlov
Pavel Raiskup
Pavel Rochnyak

Pavol Markovic
Pawel A. Gajda
Pawel Kierski
Pedro Larroy

Pedro Neves

Peng Li
Per Lundberg
Per Malmberg
Pete Lomax
Peter Bray
Peter Forret
Peter Frühberger







>




>

>







1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
Pavel Cenek
Pavel Gushchin
Pavel Löbl
Pavel Orehov
Pavel Pavlov
Pavel Raiskup
Pavel Rochnyak
Pavel Volgarev
Pavol Markovic
Pawel A. Gajda
Pawel Kierski
Pedro Larroy
Pedro Monreal
Pedro Neves
pendrek at hackerone
Peng Li
Per Lundberg
Per Malmberg
Pete Lomax
Peter Bray
Peter Forret
Peter Frühberger
1488
1489
1490
1491
1492
1493
1494

1495
1496
1497
1498
1499
1500
1501
1502
1503
1504

1505
1506
1507
1508
1509
1510
1511
Philippe Raoult
Philippe Vaucher
Pierre
Pierre Brico
Pierre Chapuis
Pierre Joye
Pierre Ynard

Piotr Dobrogost
Piotr Komborski
Po-Chuan Hsieh
Pooyan McSporran
Poul T Lomholt
Pramod Sharma
Prash Dush
Praveen Pvs
Priyanka Shah
Przemysław Tomaszewski

Puneet Pawaia
Quagmire
Quanah Gibson-Mount
Quinn Slack
R. Dennis Steed
Radu Simionescu
Rafa Muyo







>










>







1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
Philippe Raoult
Philippe Vaucher
Pierre
Pierre Brico
Pierre Chapuis
Pierre Joye
Pierre Ynard
Pierre-Yves Bigourdan
Piotr Dobrogost
Piotr Komborski
Po-Chuan Hsieh
Pooyan McSporran
Poul T Lomholt
Pramod Sharma
Prash Dush
Praveen Pvs
Priyanka Shah
Przemysław Tomaszewski
pszemus on github
Puneet Pawaia
Quagmire
Quanah Gibson-Mount
Quinn Slack
R. Dennis Steed
Radu Simionescu
Rafa Muyo
1590
1591
1592
1593
1594
1595
1596

1597
1598
1599
1600
1601
1602
1603
Rob Jones
Rob Sanders
Rob Stanzel
Rob Ward
Robert A. Monat
Robert B. Harris
Robert D. Young

Robert Foreman
Robert Iakobashvili
Robert Kolcun
Robert Linden
Robert Olson
Robert Prag
Robert Schumann







>







1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
Rob Jones
Rob Sanders
Rob Stanzel
Rob Ward
Robert A. Monat
Robert B. Harris
Robert D. Young
Robert Dunaj
Robert Foreman
Robert Iakobashvili
Robert Kolcun
Robert Linden
Robert Olson
Robert Prag
Robert Schumann
1633
1634
1635
1636
1637
1638
1639

1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
Roy Bellingan
Roy Shan
Rune Kleveland
Ruslan Baratov
Ruslan Gazizov
Rutger Hofman
Ruurd Beerstra

Ryan Braud
Ryan Chan
Ryan Nelson
Ryan Schmidt
Ryan Scott
Ryan Winograd
Ryuichi KAWAMATA
Rémy Léone
S. Moonesamy
SBKarr on github
SLDiggie on github
Salah-Eddin Shaban
Salvador Dávila
Salvatore Sorrentino
Sam Deane
Sam Hurst
Sam Roth
Sam Schanken







>









<
<







1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759


1760
1761
1762
1763
1764
1765
1766
Roy Bellingan
Roy Shan
Rune Kleveland
Ruslan Baratov
Ruslan Gazizov
Rutger Hofman
Ruurd Beerstra
RuurdBeerstra on github
Ryan Braud
Ryan Chan
Ryan Nelson
Ryan Schmidt
Ryan Scott
Ryan Winograd
Ryuichi KAWAMATA
Rémy Léone
S. Moonesamy


Salah-Eddin Shaban
Salvador Dávila
Salvatore Sorrentino
Sam Deane
Sam Hurst
Sam Roth
Sam Schanken
1666
1667
1668
1669
1670
1671
1672


1673
1674
1675
1676
1677
1678
1679
Santino Keupp
Saqib Ali
Sara Golemon
Saran Neti
Sascha Swiercy
Saul good
Saurav Babu


Scott Bailey
Scott Barrett
Scott Cantor
Scott Davis
Scott McCreary
Sean Boudreau
Sean Burford







>
>







1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
Santino Keupp
Saqib Ali
Sara Golemon
Saran Neti
Sascha Swiercy
Saul good
Saurav Babu
sayrer on github
SBKarr on github
Scott Bailey
Scott Barrett
Scott Cantor
Scott Davis
Scott McCreary
Sean Boudreau
Sean Burford
1711
1712
1713
1714
1715
1716
1717

1718
1719
1720
1721
1722
1723


1724
1725
1726
1727
1728
1729

1730

1731
1732
1733
1734

1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747

1748
1749
1750
1751
1752
1753
1754
Shine Fan
Shiraz Kanga
Shlomi Fish
Shmulik Regev
Siddhartha Prakash Jain
Sidney San Martín
Siegfried Gyuricsko

Simon Dick
Simon H.
Simon Josefsson
Simon Legner
Simon Liu
Simon Warta


Somnath Kundu
Song Ma
Sonia Subramanian
Spacen Jasset
Spezifant on github
Spiridonoff A.V

Spork Schivago

Stadler Stephan
Stan van de Burgt
Stanislav Ivochkin
Stanislav Zidek

Stefan Agner
Stefan Bühler
Stefan Eissing
Stefan Esser
Stefan Grether
Stefan Kanthak
Stefan Krause
Stefan Neis
Stefan Teleman
Stefan Tomanek
Stefan Ulrich
Stefano Simonelli
Steinar H. Gunderson

Stepan Broz
Stephan Bergmann
Stephan Lagerholm
Stephan Mühlstrasser
Stephan Szabo
Stephen Brokenshire
Stephen Collyer







>






>
>






>

>




>













>







1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
Shine Fan
Shiraz Kanga
Shlomi Fish
Shmulik Regev
Siddhartha Prakash Jain
Sidney San Martín
Siegfried Gyuricsko
silveja1 on github
Simon Dick
Simon H.
Simon Josefsson
Simon Legner
Simon Liu
Simon Warta
SLDiggie on github
smuellerDD on github
Somnath Kundu
Song Ma
Sonia Subramanian
Spacen Jasset
Spezifant on github
Spiridonoff A.V
Spoon Man
Spork Schivago
sstruchtrup on github
Stadler Stephan
Stan van de Burgt
Stanislav Ivochkin
Stanislav Zidek
steelman on github
Stefan Agner
Stefan Bühler
Stefan Eissing
Stefan Esser
Stefan Grether
Stefan Kanthak
Stefan Krause
Stefan Neis
Stefan Teleman
Stefan Tomanek
Stefan Ulrich
Stefano Simonelli
Steinar H. Gunderson
steini2000 on github
Stepan Broz
Stephan Bergmann
Stephan Lagerholm
Stephan Mühlstrasser
Stephan Szabo
Stephen Brokenshire
Stephen Collyer
1769
1770
1771
1772
1773
1774
1775

1776
1777
1778

1779
1780
1781
1782
1783
1784

1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795

1796
1797
1798
1799
1800
1801
1802
1803

1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
Steven Bazyl
Steven G. Johnson
Steven Gu
Steven M. Schweda
Steven Parkes
Stian Soiland-Reyes
Stoned Elipot

Stuart Henderson
SumatraPeter on github
Sune Ahlgren

Sunny Purushe
Sven Anders
Sven Blumenstein
Sven Neuhaus
Sven Wegener
Svyatoslav Mishyn

Sylvestre Ledru
Symeon Paraschoudis
Sébastien Willemijns
T. Bharath
T. Yamada
TJ Saunders
Tae Hyoung Ahn
Tae Wong
Taiyu Len
Taneli Vähäkangas
Tanguy Fautre

Tatsuhiro Tsujikawa
Teemu Yli-Elsila
Temprimus
Terri Oda
Terry Wu
The Infinnovation team
TheAssassin on github
Theodore Dubois

Thomas Braun
Thomas Gamper
Thomas Glanzmann
Thomas J. Moore
Thomas Klausner
Thomas L. Shinnick
Thomas Lopatic
Thomas Petazzoni
Thomas Ruecker
Thomas Schwinge
Thomas Tonino
Thomas Vegas
Thomas van Hesteren
Thorsten Schöning
Tiit Pikma
Till Maas
Tim Ansell
Tim Baker
Tim Bartley
Tim Chen







>



>






>





<





>








>











|
|







1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910

1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
Steven Bazyl
Steven G. Johnson
Steven Gu
Steven M. Schweda
Steven Parkes
Stian Soiland-Reyes
Stoned Elipot
stootill on github
Stuart Henderson
SumatraPeter on github
Sune Ahlgren
Sunny Bean
Sunny Purushe
Sven Anders
Sven Blumenstein
Sven Neuhaus
Sven Wegener
Svyatoslav Mishyn
swalkaus at yahoo.com
Sylvestre Ledru
Symeon Paraschoudis
Sébastien Willemijns
T. Bharath
T. Yamada

Tae Hyoung Ahn
Tae Wong
Taiyu Len
Taneli Vähäkangas
Tanguy Fautre
tarek112 on github
Tatsuhiro Tsujikawa
Teemu Yli-Elsila
Temprimus
Terri Oda
Terry Wu
The Infinnovation team
TheAssassin on github
Theodore Dubois
tholin on github
Thomas Braun
Thomas Gamper
Thomas Glanzmann
Thomas J. Moore
Thomas Klausner
Thomas L. Shinnick
Thomas Lopatic
Thomas Petazzoni
Thomas Ruecker
Thomas Schwinge
Thomas Tonino
Thomas van Hesteren
Thomas Vegas
Thorsten Schöning
Tiit Pikma
Till Maas
Tim Ansell
Tim Baker
Tim Bartley
Tim Chen
1833
1834
1835
1836
1837
1838
1839

1840

1841
1842
1843
1844
1845
1846
1847
Tim Tassonis
Tim Verhoeven
Timo Sirainen
Timotej Lazar
Timothe Litt
Timothy Polich
Tinus van den Berg

Tobias Blomberg

Tobias Hintze
Tobias Lindgren
Tobias Markus
Tobias Rundström
Tobias Stoeckmann
Toby Peterson
Todd A Ouska







>

>







1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
Tim Tassonis
Tim Verhoeven
Timo Sirainen
Timotej Lazar
Timothe Litt
Timothy Polich
Tinus van den Berg
TJ Saunders
Tobias Blomberg
Tobias Hieta
Tobias Hintze
Tobias Lindgren
Tobias Markus
Tobias Rundström
Tobias Stoeckmann
Toby Peterson
Todd A Ouska
1856
1857
1858
1859
1860
1861
1862

1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875

1876
1877
1878
1879

1880
1881
1882
1883
1884
1885

1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903

1904
1905
1906
1907
1908
1909
1910
Tom Lee
Tom Mattison
Tom Moers
Tom Mueller
Tom Regner
Tom Seddon
Tom Sparrow

Tom Wright
Tom Zerucha
Tom van der Woerdt
Tomas Hoger
Tomas Jakobsson
Tomas Mlcoch
Tomas Mraz
Tomas Pospisek
Tomas Szepe
Tomas Tomecek
Tomasz Kojm
Tomasz Lacki
Tommie Gannert

Tommy Tam
Ton Voon
Toni Moreno
Tony Kelman

Toon Verwaest
Tor Arntsen
Torben Dannhauer
Torsten Foertsch
Toshio Kuratomi
Toshiyuki Maezawa

Traian Nicolescu
Travis Burtrum
Travis Obenhaus
Trivikram Kamat
Troels Walsted Hansen
Troy Engel
Tseng Jun
Tuomo Rinne
Tupone Alfredo
Tyler Hall
Török Edwin
Ulf Härnhammar
Ulf Samuelsson
Ulrich Doehner
Ulrich Telle
Ulrich Zadow
Valentin David
Valerii Zapodovnikov

Vasiliy Faronov
Vasily Lobaskin
Vasy Okhin
Venkat Akella
Venkataramana Mokkapati
Vicente Garcia
Victor Magierski







>


<










>




>






>


















>







1980
1981
1982
1983
1984
1985
1986
1987
1988
1989

1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
Tom Lee
Tom Mattison
Tom Moers
Tom Mueller
Tom Regner
Tom Seddon
Tom Sparrow
Tom van der Woerdt
Tom Wright
Tom Zerucha

Tomas Hoger
Tomas Jakobsson
Tomas Mlcoch
Tomas Mraz
Tomas Pospisek
Tomas Szepe
Tomas Tomecek
Tomasz Kojm
Tomasz Lacki
Tommie Gannert
tommink[at]post.pl
Tommy Tam
Ton Voon
Toni Moreno
Tony Kelman
tonystz on Github
Toon Verwaest
Tor Arntsen
Torben Dannhauer
Torsten Foertsch
Toshio Kuratomi
Toshiyuki Maezawa
tpaukrt on github
Traian Nicolescu
Travis Burtrum
Travis Obenhaus
Trivikram Kamat
Troels Walsted Hansen
Troy Engel
Tseng Jun
Tuomo Rinne
Tupone Alfredo
Tyler Hall
Török Edwin
Ulf Härnhammar
Ulf Samuelsson
Ulrich Doehner
Ulrich Telle
Ulrich Zadow
Valentin David
Valerii Zapodovnikov
vanillajonathan on github
Vasiliy Faronov
Vasily Lobaskin
Vasy Okhin
Venkat Akella
Venkataramana Mokkapati
Vicente Garcia
Victor Magierski
1928
1929
1930
1931
1932
1933
1934

1935
1936
1937
1938
1939
1940
1941
1942
1943

1944
1945
1946
1947
1948
1949
1950
1951
1952


1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970

1971
1972
1973
1974

1975
1976
1977
1978
1979
1980
1981
1982
1983
1984

1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094

Vladimir Lazarenko
Vlastimil Ovčáčík
Vojtech Janota
Vojtech Minarik
Vojtěch Král
Volker Schmid
Vsevolod Novikov

W. Mark Kubacki
Waldek Kozba
Walter J. Mack
Ward Willats
Warren Menzer
Wayne Haigh
Wenchao Li
Wenxiang Qian
Werner Koch

Wesley Laxton
Wesley Miaw
Wez Furlong
Wham Bang
Wilfredo Sanchez
Will Dietz
Willem Sparreboom
William A. Rowe Jr
William Ahern


Wojciech Zwiefka
Wouter Van Rooy
Wu Yongzheng
Wyatt O'Day
Xavier Bouchoux
XhstormR on github
Xiang Xiao
Xiangbin Li
Xiaoyin Liu
XmiliaH on github
Yaakov Selkowitz
Yang Tse
Yarram Sunil
Yasuharu Yamada
Yasuhiro Matsumoto
Yechiel Kalmenson
Yehezkel Horowitz
Yehoshua Hershberg

Yi Huang
Yiming Jing
Yingwei Liu
Yonggang Luo

Yousuke Kimoto
Yu Xin
Yukihiro Kawada
Yun SangHo
Yuriy Sosov
Yves Arrouye
Yves Lejeune
Zachary Seguin
Zdenek Pavlas
Zekun Ni

Zenju on github
Zero King
Zhao Yisha
Zhaoyang Wu
Zhibiao Wu
Zhouyihai Ding
Zmey Petroff
Zvi Har'El
aasivov on github
accountantM on github
adnn on github
afrind on github
ahodesuka on github
anshnd on github
arainchik on github
asavah on github
baumanj on github
bdry on github
bobmitchell1956 on github
bsammon on github
buzo-ffm on github
bxac on github
cbartl on github
cclauss on github
clbr on github
cmfrolick on github
codesniffer13 on github
d912e3 on github
daboul on github
dasimx on github
dbrowndan on github
destman on github
dkjjr89 on github
dkwolfe4 on github
dnivras on github
dpull on github
dtmsecurity on github
eXeC64 on github
elelel on github
elephoenix on github
elsamuko on github
guitared on github
hsiao yi
imilli on github
infinnovation-dev on github
iz8mbw on github
jakirkham on github
jasal82 on github
jnbr on github
jonrumsey on github
joshhe on github
jungle-boogie on github
jveazey on github
jzinn on github
ka7 on github
kouzhudong on github
kreshano on github
l00p3r on Hackerone
lijian996 on github
lukaszgn on github
madblobfish on github
marc-groundctl on github
masbug on github
mccormickt12 on github
migueljcrum on github
mkzero on github
momala454 on github
moohoorama on github
nedres on github
neex on github
neheb on github
nevv on HackerOne/curl
niallor on github
nianxuejie on github
nico-abram on github
niner on github
nk
nopjmp on github
olesteban on github
omau on github
osabc on github
ovidiu-benea on github
patelvivekv1993 on github
patnyb on github
pendrek at hackerone
pszemus on github
sayrer on github
silveja1 on github
smuellerDD on github
sstruchtrup on github
steelman on github
steini2000 on github
stootill on github
swalkaus at yahoo.com
tarek112 on github
tholin on github
tommink[at]post.pl
tonystz on Github
tpaukrt on github
vanillajonathan on github
wesinator on github
wmsch on github
wncboy on github
youngchopin on github
zelinchen on github
zzq1015 on github
İsmail Dönmez
Łukasz Domeradzki
Štefan Kremeň
Никита Дорохин








>









>









>
>


















>




>










>








<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<





>
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127

































































































2128
2129
2130
2131
2132
2133
Vladimir Lazarenko
Vlastimil Ovčáčík
Vojtech Janota
Vojtech Minarik
Vojtěch Král
Volker Schmid
Vsevolod Novikov
vshmuk on hackerone
W. Mark Kubacki
Waldek Kozba
Walter J. Mack
Ward Willats
Warren Menzer
Wayne Haigh
Wenchao Li
Wenxiang Qian
Werner Koch
wesinator on github
Wesley Laxton
Wesley Miaw
Wez Furlong
Wham Bang
Wilfredo Sanchez
Will Dietz
Willem Sparreboom
William A. Rowe Jr
William Ahern
wmsch on github
wncboy on github
Wojciech Zwiefka
Wouter Van Rooy
Wu Yongzheng
Wyatt O'Day
Xavier Bouchoux
XhstormR on github
Xiang Xiao
Xiangbin Li
Xiaoyin Liu
XmiliaH on github
Yaakov Selkowitz
Yang Tse
Yarram Sunil
Yasuharu Yamada
Yasuhiro Matsumoto
Yechiel Kalmenson
Yehezkel Horowitz
Yehoshua Hershberg
ygthien on github
Yi Huang
Yiming Jing
Yingwei Liu
Yonggang Luo
youngchopin on github
Yousuke Kimoto
Yu Xin
Yukihiro Kawada
Yun SangHo
Yuriy Sosov
Yves Arrouye
Yves Lejeune
Zachary Seguin
Zdenek Pavlas
Zekun Ni
zelinchen on github
Zenju on github
Zero King
Zhao Yisha
Zhaoyang Wu
Zhibiao Wu
Zhouyihai Ding
Zmey Petroff
Zvi Har'El

































































































zzq1015 on github
İsmail Dönmez
Łukasz Domeradzki
Štefan Kremeň
Никита Дорохин
加藤郁之
Changes to jni/curl/docs/TODO.
83
84
85
86
87
88
89


90
91
92
93
94
95
96
 8.2 Enhanced capability support

 9. IMAP
 9.1 Enhanced capability support

 10. LDAP
 10.1 SASL based authentication mechanisms



 11. SMB
 11.1 File listing support
 11.2 Honor file timestamps
 11.3 Use NTLMv2
 11.4 Create remote directories








>
>







83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
 8.2 Enhanced capability support

 9. IMAP
 9.1 Enhanced capability support

 10. LDAP
 10.1 SASL based authentication mechanisms
 10.2 CURLOPT_SSL_CTX_FUNCTION for LDAPS
 10.3 Paged searches on LDAP server

 11. SMB
 11.1 File listing support
 11.2 Honor file timestamps
 11.3 Use NTLMv2
 11.4 Create remote directories

128
129
130
131
132
133
134

135
136
137
138
139
140
141
 17.3 Support better than MD5 hostkey hash
 17.4 Support CURLOPT_PREQUOTE

 18. Command line tool
 18.1 sync
 18.2 glob posts
 18.3 prevent file overwriting

 18.5 UTF-8 filenames in Content-Disposition
 18.7 at least N milliseconds between requests
 18.9 Choose the name of file in braces for complex URLs
 18.10 improve how curl works in a windows console window
 18.11 Windows: set attribute 'archive' for completed downloads
 18.12 keep running, read instructions from pipe/socket
 18.15 --retry should resume







>







130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
 17.3 Support better than MD5 hostkey hash
 17.4 Support CURLOPT_PREQUOTE

 18. Command line tool
 18.1 sync
 18.2 glob posts
 18.3 prevent file overwriting
 18.4 --proxycommand
 18.5 UTF-8 filenames in Content-Disposition
 18.7 at least N milliseconds between requests
 18.9 Choose the name of file in braces for complex URLs
 18.10 improve how curl works in a windows console window
 18.11 Windows: set attribute 'archive' for completed downloads
 18.12 keep running, read instructions from pipe/socket
 18.15 --retry should resume
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413

2.1 More non-blocking

 Make sure we don't ever loop because of non-blocking sockets returning
 EWOULDBLOCK or similar. Blocking cases include:

 - Name resolves on non-windows unless c-ares or the threaded resolver is used
 - SOCKS proxy handshakes
 - file:// transfers
 - TELNET transfers
 - The "DONE" operation (post transfer protocol-specific actions) for the
   protocols SFTP, SMTP, FTP. Fixing Curl_done() for this is a worthy task.

2.2 Better support for same name resolves








<







402
403
404
405
406
407
408

409
410
411
412
413
414
415

2.1 More non-blocking

 Make sure we don't ever loop because of non-blocking sockets returning
 EWOULDBLOCK or similar. Blocking cases include:

 - Name resolves on non-windows unless c-ares or the threaded resolver is used

 - file:// transfers
 - TELNET transfers
 - The "DONE" operation (post transfer protocol-specific actions) for the
   protocols SFTP, SMTP, FTP. Fixing Curl_done() for this is a worthy task.

2.2 Better support for same name resolves

599
600
601
602
603
604
605











606
607
608
609
610
611
612

 Currently the LDAP module only supports ldap_simple_bind_s() in order to bind
 to an LDAP server. However, this function sends username and password details
 using the simple authentication mechanism (as clear text). However, it should
 be possible to use ldap_bind_s() instead specifying the security context
 information ourselves.












11. SMB

11.1 File listing support

Add support for listing the contents of a SMB share. The output should probably
be the same as/similar to FTP.








>
>
>
>
>
>
>
>
>
>
>







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

 Currently the LDAP module only supports ldap_simple_bind_s() in order to bind
 to an LDAP server. However, this function sends username and password details
 using the simple authentication mechanism (as clear text). However, it should
 be possible to use ldap_bind_s() instead specifying the security context
 information ourselves.

10.2 CURLOPT_SSL_CTX_FUNCTION for LDAPS

 CURLOPT_SSL_CTX_FUNCTION works perfectly for HTTPS and email protocols, but
 it has no effect for LDAPS connections.

 https://github.com/curl/curl/issues/4108

10.3 Paged searches on LDAP server

 https://github.com/curl/curl/issues/4452

11. SMB

11.1 File listing support

Add support for listing the contents of a SMB share. The output should probably
be the same as/similar to FTP.

853
854
855
856
857
858
859










860
861
862
863
864
865
866

 Add an option that prevents curl from overwriting existing local files. When
 used, and there already is an existing file with the target file name
 (either -O or -o), a number should be appended (and increased if already
 existing). So that index.html becomes first index.html.1 and then
 index.html.2 etc.











18.5 UTF-8 filenames in Content-Disposition

 RFC 6266 documents how UTF-8 names can be passed to a client in the
 Content-Disposition header, and curl does not support this.

 https://github.com/curl/curl/issues/1888








>
>
>
>
>
>
>
>
>
>







866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889

 Add an option that prevents curl from overwriting existing local files. When
 used, and there already is an existing file with the target file name
 (either -O or -o), a number should be appended (and increased if already
 existing). So that index.html becomes first index.html.1 and then
 index.html.2 etc.

18.4 --proxycommand

 Allow the user to make curl run a command and use its stdio to make requests
 and not do any network connection by itself. Example:

   curl --proxycommand 'ssh pi@raspberrypi.local -W 10.1.1.75 80' \
        http://some/otherwise/unavailable/service.php

 See https://github.com/curl/curl/issues/4941

18.5 UTF-8 filenames in Content-Disposition

 RFC 6266 documents how UTF-8 names can be passed to a client in the
 Content-Disposition header, and curl does not support this.

 https://github.com/curl/curl/issues/1888

Changes to jni/curl/docs/cmdline-opts/Makefile.in.
302
303
304
305
306
307
308

309
310
311
312
313
314
315
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@

USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@







>







302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
USE_WOLFSSH = @USE_WOLFSSH@
USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
Changes to jni/curl/docs/cmdline-opts/alt-svc.d.
10
11
12
13
14
15
16
17
existing alt-svc cache file, that will be used. After a completed transfer,
the cache will be saved to the file name again if it has been modified.

Specify a "" file name (zero length) to avoid loading/saving and make curl
just handle the cache in memory.

If this option is used several times, curl will load contents from all the
files but the the last one will be used for saving.







|
10
11
12
13
14
15
16
17
existing alt-svc cache file, that will be used. After a completed transfer,
the cache will be saved to the file name again if it has been modified.

Specify a "" file name (zero length) to avoid loading/saving and make curl
just handle the cache in memory.

If this option is used several times, curl will load contents from all the
files but the last one will be used for saving.
Changes to jni/curl/docs/cmdline-opts/create-dirs.d.
1
2
3
4
5
6
7


8
9
Long: create-dirs
Help: Create necessary local directory hierarchy
---
When used in conjunction with the --output option, curl will create the
necessary local directory hierarchy as needed. This option creates the dirs
mentioned with the --output option, nothing else. If the --output file name
uses no dir or if the dirs it mentions already exist, no dir will be created.



To create remote directories when using FTP or SFTP, try --ftp-create-dirs.







>
>


1
2
3
4
5
6
7
8
9
10
11
Long: create-dirs
Help: Create necessary local directory hierarchy
---
When used in conjunction with the --output option, curl will create the
necessary local directory hierarchy as needed. This option creates the dirs
mentioned with the --output option, nothing else. If the --output file name
uses no dir or if the dirs it mentions already exist, no dir will be created.

Created dirs are made with mode 0750 on unix style file systems.

To create remote directories when using FTP or SFTP, try --ftp-create-dirs.
Changes to jni/curl/docs/cmdline-opts/data.d.
18
19
20
21
22
23
24
25
26
27
28
29
30


If any of these options is used more than once on the same command line, the
data pieces specified will be merged together with a separating
&-symbol. Thus, using '-d name=daniel -d skill=lousy' would generate a post
chunk that looks like \&'name=daniel&skill=lousy'.

If you start the data with the letter @, the rest should be a file name to
read the data from, or - if you want curl to read the data from
stdin. Multiple files can also be specified. Posting data from a file named
\&'foobar' would thus be done with --data @foobar. When --data is told to read
from a file like that, carriage returns and newlines will be stripped out. If
you don't want the @ character to have a special interpretation use --data-raw
instead.








|
<
|
|
|
<
>
18
19
20
21
22
23
24
25

26
27
28

29

If any of these options is used more than once on the same command line, the
data pieces specified will be merged together with a separating
&-symbol. Thus, using '-d name=daniel -d skill=lousy' would generate a post
chunk that looks like \&'name=daniel&skill=lousy'.

If you start the data with the letter @, the rest should be a file name to
read the data from, or - if you want curl to read the data from stdin. Posting

data from a file named \&'foobar' would thus be done with --data @foobar. When
--data is told to read from a file like that, carriage returns and newlines
will be stripped out. If you don't want the @ character to have a special

interpretation use --data-raw instead.
Changes to jni/curl/docs/cmdline-opts/form.d.
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
by IMAP.

Example: send an image to an HTTP server, where \&'profile' is the name of the
form-field to which the file portrait.jpg will be the input:

 curl -F profile=@portrait.jpg https://example.com/upload.cgi

Example: send a your name and shoe size in two text fields to the server:

 curl -F name=John -F shoesize=11 https://example.com/

Example: send a your essay in a text field to the server. Send it as a plain
text field, but get the contents for it from a local file:

 curl -F "story=<hugefile.txt" https://example.com/

You can also tell curl what Content-Type to use by using 'type=', in a manner
similar to:








|



|







29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
by IMAP.

Example: send an image to an HTTP server, where \&'profile' is the name of the
form-field to which the file portrait.jpg will be the input:

 curl -F profile=@portrait.jpg https://example.com/upload.cgi

Example: send your name and shoe size in two text fields to the server:

 curl -F name=John -F shoesize=11 https://example.com/

Example: send your essay in a text field to the server. Send it as a plain
text field, but get the contents for it from a local file:

 curl -F "story=<hugefile.txt" https://example.com/

You can also tell curl what Content-Type to use by using 'type=', in a manner
similar to:

Changes to jni/curl/docs/cmdline-opts/location.d.
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23


--include or --head, headers from all requested pages will be shown. When
authentication is used, curl only sends its credentials to the initial
host. If a redirect takes curl to a different host, it won't be able to
intercept the user+password. See also --location-trusted on how to change
this. You can limit the amount of redirects to follow by using the
--max-redirs option.

When curl follows a redirect and the request is not a plain GET (for example
POST or PUT), it will do the following request with a GET if the HTTP response
was 301, 302, or 303. If the response code was any other 3xx code, curl will
re-send the following request using the same unmodified method.

You can tell curl to not change the non-GET request method to GET after a 30x
response by using the dedicated options for that: --post301, --post302 and
--post303.









|
|
|
|

|
|
|
>
>
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
--include or --head, headers from all requested pages will be shown. When
authentication is used, curl only sends its credentials to the initial
host. If a redirect takes curl to a different host, it won't be able to
intercept the user+password. See also --location-trusted on how to change
this. You can limit the amount of redirects to follow by using the
--max-redirs option.

When curl follows a redirect and if the request is a POST, it will do the
following request with a GET if the HTTP response was 301, 302, or 303. If the
response code was any other 3xx code, curl will re-send the following request
using the same unmodified method.

You can tell curl to not change POST requests to GET after a 30x response by
using the dedicated options for that: --post301, --post302 and --post303.

The method set with --request overrides the method curl would otherwise select
to use.
Changes to jni/curl/docs/cmdline-opts/oauth2-bearer.d.
1
2
3
4
5
6
7
8
9
10
11
Long: oauth2-bearer
Help: OAuth 2 Bearer Token
Arg: <token>
Protocols: IMAP POP3 SMTP
---
Specify the Bearer Token for OAUTH 2.0 server authentication. The Bearer Token
is used in conjunction with the user name which can be specified as part of
the --url or --user options.

The Bearer Token and user name are formatted according to RFC 6750.




|







1
2
3
4
5
6
7
8
9
10
11
Long: oauth2-bearer
Help: OAuth 2 Bearer Token
Arg: <token>
Protocols: IMAP POP3 SMTP HTTP
---
Specify the Bearer Token for OAUTH 2.0 server authentication. The Bearer Token
is used in conjunction with the user name which can be specified as part of
the --url or --user options.

The Bearer Token and user name are formatted according to RFC 6750.

Changes to jni/curl/docs/curl-config.1.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl-config 1 "November 30, 2017" "Curl 7.68.0" "curl-config manual"

.SH NAME
curl-config \- Get information about a libcurl installation
.SH SYNOPSIS
.B curl-config [options]
.SH DESCRIPTION
.B curl-config







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl-config 1 "November 30, 2017" "Curl 7.69.0" "curl-config manual"

.SH NAME
curl-config \- Get information about a libcurl installation
.SH SYNOPSIS
.B curl-config [options]
.SH DESCRIPTION
.B curl-config
Changes to jni/curl/docs/curl.1.
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.\" DO NOT EDIT. Generated by the curl project gen.pl man page generator.
.\"
.TH curl 1 "November 16, 2016" "Curl 7.68.0" "Curl Manual"

.SH NAME
curl \- transfer a URL
.SH SYNOPSIS
.B curl [options / URLs]
.SH DESCRIPTION
.B curl







|







18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.\" DO NOT EDIT. Generated by the curl project gen.pl man page generator.
.\"
.TH curl 1 "November 16, 2016" "Curl 7.69.0" "Curl Manual"

.SH NAME
curl \- transfer a URL
.SH SYNOPSIS
.B curl [options / URLs]
.SH DESCRIPTION
.B curl
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
existing alt-svc cache file, that will be used. After a completed transfer,
the cache will be saved to the file name again if it has been modified.

Specify a "" file name (zero length) to avoid loading/saving and make curl
just handle the cache in memory.

If this option is used several times, curl will load contents from all the
files but the the last one will be used for saving.

Added in 7.64.1.
.IP "--anyauth"
(HTTP) Tells curl to figure out authentication method by itself, and use the most
secure one the remote site claims to support. This is done by first doing a
request and checking the response-headers, thus possibly inducing an extra
network round-trip. This is used instead of setting a specific authentication







|







153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
existing alt-svc cache file, that will be used. After a completed transfer,
the cache will be saved to the file name again if it has been modified.

Specify a "" file name (zero length) to avoid loading/saving and make curl
just handle the cache in memory.

If this option is used several times, curl will load contents from all the
files but the last one will be used for saving.

Added in 7.64.1.
.IP "--anyauth"
(HTTP) Tells curl to figure out authentication method by itself, and use the most
secure one the remote site claims to support. This is done by first doing a
request and checking the response-headers, thus possibly inducing an extra
network round-trip. This is used instead of setting a specific authentication
456
457
458
459
460
461
462


463
464
465
466
467
468
469
cookies back to a file, so using both \fI-b, --cookie\fP and \fI-c, --cookie-jar\fP in the same
command line is common.
.IP "--create-dirs"
When used in conjunction with the \fI-o, --output\fP option, curl will create the
necessary local directory hierarchy as needed. This option creates the dirs
mentioned with the \fI-o, --output\fP option, nothing else. If the --output file name
uses no dir or if the dirs it mentions already exist, no dir will be created.



To create remote directories when using FTP or SFTP, try \fI--ftp-create-dirs\fP.
.IP "--crlf"
(FTP SMTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).

(SMTP added in 7.40.0)
.IP "--crlfile <file>"







>
>







456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
cookies back to a file, so using both \fI-b, --cookie\fP and \fI-c, --cookie-jar\fP in the same
command line is common.
.IP "--create-dirs"
When used in conjunction with the \fI-o, --output\fP option, curl will create the
necessary local directory hierarchy as needed. This option creates the dirs
mentioned with the \fI-o, --output\fP option, nothing else. If the --output file name
uses no dir or if the dirs it mentions already exist, no dir will be created.

Created dirs are made with mode 0750 on unix style file systems.

To create remote directories when using FTP or SFTP, try \fI--ftp-create-dirs\fP.
.IP "--crlf"
(FTP SMTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).

(SMTP added in 7.40.0)
.IP "--crlfile <file>"
536
537
538
539
540
541
542
543
544
545
546
547
548

549
550
551
552
553
554
555

If any of these options is used more than once on the same command line, the
data pieces specified will be merged together with a separating
&-symbol. Thus, using '-d name=daniel -d skill=lousy' would generate a post
chunk that looks like \&'name=daniel&skill=lousy'.

If you start the data with the letter @, the rest should be a file name to
read the data from, or - if you want curl to read the data from
stdin. Multiple files can also be specified. Posting data from a file named
\&'foobar' would thus be done with \fI-d, --data\fP @foobar. When --data is told to read
from a file like that, carriage returns and newlines will be stripped out. If
you don't want the @ character to have a special interpretation use \fI--data-raw\fP
instead.


See also \fI--data-binary\fP and \fI--data-urlencode\fP and \fI--data-raw\fP. This option overrides \fI-F, --form\fP and \fI-I, --head\fP and \fI-T, --upload-file\fP.
.IP "--delegation <LEVEL>"
(GSS/kerberos) Set LEVEL to tell the server what it is allowed to delegate when it
comes to user credentials.
.RS
.IP "none"







|
<
|
|
|
<
>







538
539
540
541
542
543
544
545

546
547
548

549
550
551
552
553
554
555
556

If any of these options is used more than once on the same command line, the
data pieces specified will be merged together with a separating
&-symbol. Thus, using '-d name=daniel -d skill=lousy' would generate a post
chunk that looks like \&'name=daniel&skill=lousy'.

If you start the data with the letter @, the rest should be a file name to
read the data from, or - if you want curl to read the data from stdin. Posting

data from a file named \&'foobar' would thus be done with \fI-d, --data\fP @foobar. When
\fI-d, --data\fP is told to read from a file like that, carriage returns and newlines
will be stripped out. If you don't want the @ character to have a special

interpretation use \fI--data-raw\fP instead.

See also \fI--data-binary\fP and \fI--data-urlencode\fP and \fI--data-raw\fP. This option overrides \fI-F, --form\fP and \fI-I, --head\fP and \fI-T, --upload-file\fP.
.IP "--delegation <LEVEL>"
(GSS/kerberos) Set LEVEL to tell the server what it is allowed to delegate when it
comes to user credentials.
.RS
.IP "none"
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
by IMAP.

Example: send an image to an HTTP server, where \&'profile' is the name of the
form-field to which the file portrait.jpg will be the input:

 curl -F profile=@portrait.jpg https://example.com/upload.cgi

Example: send a your name and shoe size in two text fields to the server:

 curl -F name=John -F shoesize=11 https://example.com/

Example: send a your essay in a text field to the server. Send it as a plain
text field, but get the contents for it from a local file:

 curl -F "story=<hugefile.txt" https://example.com/

You can also tell curl what Content-Type to use by using 'type=', in a manner
similar to:








|



|







771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
by IMAP.

Example: send an image to an HTTP server, where \&'profile' is the name of the
form-field to which the file portrait.jpg will be the input:

 curl -F profile=@portrait.jpg https://example.com/upload.cgi

Example: send your name and shoe size in two text fields to the server:

 curl -F name=John -F shoesize=11 https://example.com/

Example: send your essay in a text field to the server. Send it as a plain
text field, but get the contents for it from a local file:

 curl -F "story=<hugefile.txt" https://example.com/

You can also tell curl what Content-Type to use by using 'type=', in a manner
similar to:

1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300


1301
1302
1303
1304
1305
1306
1307
\fI-i, --include\fP or \fI-I, --head\fP, headers from all requested pages will be shown. When
authentication is used, curl only sends its credentials to the initial
host. If a redirect takes curl to a different host, it won't be able to
intercept the user+password. See also \fI--location-trusted\fP on how to change
this. You can limit the amount of redirects to follow by using the
\fI--max-redirs\fP option.

When curl follows a redirect and the request is not a plain GET (for example
POST or PUT), it will do the following request with a GET if the HTTP response
was 301, 302, or 303. If the response code was any other 3xx code, curl will
re-send the following request using the same unmodified method.

You can tell curl to not change the non-GET request method to GET after a 30x
response by using the dedicated options for that: \fI--post301\fP, \fI--post302\fP and
\fI--post303\fP.


.IP "--login-options <options>"
(IMAP POP3 SMTP) Specify the login options to use during server authentication.

You can use the login options to specify protocol specific options that may
be used during authentication. At present only IMAP, POP3 and SMTP support
login options. For more information about the login options please see
RFC 2384, RFC 5092 and IETF draft draft-earhart-url-smtp-00.txt







|
|
|
|

|
|
|
>
>







1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
\fI-i, --include\fP or \fI-I, --head\fP, headers from all requested pages will be shown. When
authentication is used, curl only sends its credentials to the initial
host. If a redirect takes curl to a different host, it won't be able to
intercept the user+password. See also \fI--location-trusted\fP on how to change
this. You can limit the amount of redirects to follow by using the
\fI--max-redirs\fP option.

When curl follows a redirect and if the request is a POST, it will do the
following request with a GET if the HTTP response was 301, 302, or 303. If the
response code was any other 3xx code, curl will re-send the following request
using the same unmodified method.

You can tell curl to not change POST requests to GET after a 30x response by
using the dedicated options for that: \fI--post301\fP, \fI--post302\fP and \fI--post303\fP.

The method set with \fI-X, --request\fP overrides the method curl would otherwise select
to use.
.IP "--login-options <options>"
(IMAP POP3 SMTP) Specify the login options to use during server authentication.

You can use the login options to specify protocol specific options that may
be used during authentication. At present only IMAP, POP3 and SMTP support
login options. For more information about the login options please see
RFC 2384, RFC 5092 and IETF draft draft-earhart-url-smtp-00.txt
1315
1316
1317
1318
1319
1320
1321












1322
1323
1324
1325
1326
1327
1328
server.

See also \fI--mail-rcpt\fP and \fI--mail-from\fP. Added in 7.25.0.
.IP "--mail-from <address>"
(SMTP) Specify a single address that the given mail should get sent from.

See also \fI--mail-rcpt\fP and \fI--mail-auth\fP. Added in 7.20.0.












.IP "--mail-rcpt <address>"
(SMTP) Specify a single address, user name or mailing list name. Repeat this
option several times to send to multiple recipients.

When performing a mail transfer, the recipient should specify a valid email
address to send the mail to.








>
>
>
>
>
>
>
>
>
>
>
>







1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
server.

See also \fI--mail-rcpt\fP and \fI--mail-from\fP. Added in 7.25.0.
.IP "--mail-from <address>"
(SMTP) Specify a single address that the given mail should get sent from.

See also \fI--mail-rcpt\fP and \fI--mail-auth\fP. Added in 7.20.0.
.IP "--mail-rcpt-allowfails"
(SMTP) When sending data to multiple recipients, by default curl will abort SMTP
conversation if at least one of the recipients causes RCPT TO command to
return an error.

The default behavior can be changed by passing \fI--mail-rcpt-allowfails\fP
command-line option which will make curl ignore errors and proceed with the
remaining valid recipients.

In case when all recipients cause RCPT TO command to fail, curl will abort SMTP
conversation and return the error received from to the last RCPT TO command.
Added in 7.69.0.
.IP "--mail-rcpt <address>"
(SMTP) Specify a single address, user name or mailing list name. Repeat this
option several times to send to multiple recipients.

When performing a mail transfer, the recipient should specify a valid email
address to send the mail to.

1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
If you want to enable NTLM for your proxy authentication, then use
\fI--proxy-ntlm\fP.

If this option is used several times, only the first one is used.

See also \fI--proxy-ntlm\fP. \fI--ntlm\fP requires that the underlying libcurl was built to support TLS. This option overrides \fI--basic\fP and \fI--negotiate\fP and \fI--digest\fP and \fI--anyauth\fP.
.IP "--oauth2-bearer <token>"
(IMAP POP3 SMTP) Specify the Bearer Token for OAUTH 2.0 server authentication. The Bearer Token
is used in conjunction with the user name which can be specified as part of
the \fI--url\fP or \fI-u, --user\fP options.

The Bearer Token and user name are formatted according to RFC 6750.

If this option is used several times, the last one will be used.
.IP "-o, --output <file>"







|







1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
If you want to enable NTLM for your proxy authentication, then use
\fI--proxy-ntlm\fP.

If this option is used several times, only the first one is used.

See also \fI--proxy-ntlm\fP. \fI--ntlm\fP requires that the underlying libcurl was built to support TLS. This option overrides \fI--basic\fP and \fI--negotiate\fP and \fI--digest\fP and \fI--anyauth\fP.
.IP "--oauth2-bearer <token>"
(IMAP POP3 SMTP HTTP) Specify the Bearer Token for OAUTH 2.0 server authentication. The Bearer Token
is used in conjunction with the user name which can be specified as part of
the \fI--url\fP or \fI-u, --user\fP options.

The Bearer Token and user name are formatted according to RFC 6750.

If this option is used several times, the last one will be used.
.IP "-o, --output <file>"
Changes to jni/curl/docs/examples/Makefile.in.
1132
1133
1134
1135
1136
1137
1138

1139
1140
1141
1142
1143
1144
1145
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@

USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@







>







1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
USE_WOLFSSH = @USE_WOLFSSH@
USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
Changes to jni/curl/docs/libcurl/Makefile.in.
572
573
574
575
576
577
578

579
580
581
582
583
584
585
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@

USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@







>







572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
USE_WOLFSSH = @USE_WOLFSSH@
USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
Changes to jni/curl/docs/libcurl/curl_easy_cleanup.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_cleanup 3 "August 09, 2018" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_easy_cleanup - End a libcurl easy handle
.SH SYNOPSIS
.B #include <curl/curl.h>

.BI "void curl_easy_cleanup(CURL *" handle ");"







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_cleanup 3 "August 09, 2018" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_easy_cleanup - End a libcurl easy handle
.SH SYNOPSIS
.B #include <curl/curl.h>

.BI "void curl_easy_cleanup(CURL *" handle ");"
Changes to jni/curl/docs/libcurl/curl_easy_duphandle.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_easy_duphandle 3 "March 01, 2019" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_easy_duphandle - Clone a libcurl session handle
.SH SYNOPSIS
.B #include <curl/curl.h>

.BI "CURL *curl_easy_duphandle(CURL *"handle ");"







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_easy_duphandle 3 "March 01, 2019" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_easy_duphandle - Clone a libcurl session handle
.SH SYNOPSIS
.B #include <curl/curl.h>

.BI "CURL *curl_easy_duphandle(CURL *"handle ");"
Changes to jni/curl/docs/libcurl/curl_easy_escape.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_escape 3 "August 12, 2017" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_easy_escape - URL encodes the given string
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "char *curl_easy_escape( CURL *" curl ", const char *" string







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_escape 3 "August 12, 2017" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_easy_escape - URL encodes the given string
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "char *curl_easy_escape( CURL *" curl ", const char *" string
Changes to jni/curl/docs/libcurl/curl_easy_getinfo.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_getinfo 3 "August 06, 2019" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_easy_getinfo - extract information from a curl handle
.SH SYNOPSIS
.B #include <curl/curl.h>

.B "CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );"







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_getinfo 3 "August 06, 2019" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_easy_getinfo - extract information from a curl handle
.SH SYNOPSIS
.B #include <curl/curl.h>

.B "CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );"
Changes to jni/curl/docs/libcurl/curl_easy_init.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_easy_init 3 "February 03, 2016" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_easy_init - Start a libcurl easy session
.SH SYNOPSIS
.B #include <curl/curl.h>

.BI "CURL *curl_easy_init( );"







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_easy_init 3 "February 03, 2016" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_easy_init - Start a libcurl easy session
.SH SYNOPSIS
.B #include <curl/curl.h>

.BI "CURL *curl_easy_init( );"
Changes to jni/curl/docs/libcurl/curl_easy_pause.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_easy_pause 3 "May 01, 2016" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_easy_pause - pause and unpause a connection
.SH SYNOPSIS
.B #include <curl/curl.h>

.BI "CURLcode curl_easy_pause(CURL *"handle ", int "bitmask " );"







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_easy_pause 3 "May 01, 2016" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_easy_pause - pause and unpause a connection
.SH SYNOPSIS
.B #include <curl/curl.h>

.BI "CURLcode curl_easy_pause(CURL *"handle ", int "bitmask " );"
Changes to jni/curl/docs/libcurl/curl_easy_perform.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_easy_perform 3 "September 23, 2018" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_easy_perform - perform a blocking file transfer
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_easy_perform(CURL *" easy_handle ");"







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_easy_perform 3 "September 23, 2018" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_easy_perform - perform a blocking file transfer
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_easy_perform(CURL *" easy_handle ");"
Changes to jni/curl/docs/libcurl/curl_easy_recv.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_recv 3 "December 18, 2016" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_easy_recv - receives raw data on an "easy" connection
.SH SYNOPSIS
.B #include <curl/easy.h>
.sp
.BI "CURLcode curl_easy_recv( CURL *" curl ", void *" buffer ","







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_recv 3 "December 18, 2016" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_easy_recv - receives raw data on an "easy" connection
.SH SYNOPSIS
.B #include <curl/easy.h>
.sp
.BI "CURLcode curl_easy_recv( CURL *" curl ", void *" buffer ","
Changes to jni/curl/docs/libcurl/curl_easy_reset.3.
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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_easy_reset 3 "September 23, 2018" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_easy_reset - reset all options of a libcurl session handle
.SH SYNOPSIS
.B #include <curl/curl.h>

.BI "void curl_easy_reset(CURL *"handle ");"

.SH DESCRIPTION
Re-initializes all options previously set on a specified CURL handle to the
default values. This puts back the handle to the same state as it was in when
it was just created with \fIcurl_easy_init(3)\fP.

It does not change the following information kept in the handle: live
connections, the Session ID cache, the DNS cache, the cookies and shares.

.SH AVAILABILITY
This function was added in libcurl 7.12.1
.SH RETURN VALUE
Nothing
.SH "SEE ALSO"
.BR curl_easy_init "(3)," curl_easy_cleanup "(3)," curl_easy_setopt "(3),"
.BR curl_easy_duphandle "(3)"







|













|














|
>







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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_easy_reset 3 "February 09, 2020" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_easy_reset - reset all options of a libcurl session handle
.SH SYNOPSIS
.B #include <curl/curl.h>

.BI "void curl_easy_reset(CURL *"handle ");"

.SH DESCRIPTION
Re-initializes all options previously set on a specified CURL handle to the
default values. This puts back the handle to the same state as it was in when
it was just created with \fIcurl_easy_init(3)\fP.

It does not change the following information kept in the handle: live
connections, the Session ID cache, the DNS cache, the cookies, the shares or
the alt-svc cache.
.SH AVAILABILITY
This function was added in libcurl 7.12.1
.SH RETURN VALUE
Nothing
.SH "SEE ALSO"
.BR curl_easy_init "(3)," curl_easy_cleanup "(3)," curl_easy_setopt "(3),"
.BR curl_easy_duphandle "(3)"
Changes to jni/curl/docs/libcurl/curl_easy_send.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_send 3 "December 18, 2016" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_easy_send - sends raw data over an "easy" connection
.SH SYNOPSIS
.B #include <curl/easy.h>
.sp
.BI "CURLcode curl_easy_send( CURL *" curl ", const void *" buffer ","







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_send 3 "December 18, 2016" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_easy_send - sends raw data over an "easy" connection
.SH SYNOPSIS
.B #include <curl/easy.h>
.sp
.BI "CURLcode curl_easy_send( CURL *" curl ", const void *" buffer ","
Changes to jni/curl/docs/libcurl/curl_easy_setopt.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_setopt 3 "January 05, 2020" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_easy_setopt \- set options for a curl easy handle
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_setopt 3 "January 14, 2020" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_easy_setopt \- set options for a curl easy handle
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter);
354
355
356
357
358
359
360


361
362
363
364
365
366
367
.SH SMTP OPTIONS
.IP CURLOPT_MAIL_FROM
Address of the sender. See \fICURLOPT_MAIL_FROM(3)\fP
.IP CURLOPT_MAIL_RCPT
Address of the recipients. See \fICURLOPT_MAIL_RCPT(3)\fP
.IP CURLOPT_MAIL_AUTH
Authentication address. See \fICURLOPT_MAIL_AUTH(3)\fP


.SH TFTP OPTIONS
.IP CURLOPT_TFTP_BLKSIZE
TFTP block size. See \fICURLOPT_TFTP_BLKSIZE(3)\fP
.IP CURLOPT_TFTP_NO_OPTIONS
Do not send TFTP options requests. See \fICURLOPT_TFTP_NO_OPTIONS(3)\fP
.SH FTP OPTIONS
.IP CURLOPT_FTPPORT







>
>







354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
.SH SMTP OPTIONS
.IP CURLOPT_MAIL_FROM
Address of the sender. See \fICURLOPT_MAIL_FROM(3)\fP
.IP CURLOPT_MAIL_RCPT
Address of the recipients. See \fICURLOPT_MAIL_RCPT(3)\fP
.IP CURLOPT_MAIL_AUTH
Authentication address. See \fICURLOPT_MAIL_AUTH(3)\fP
.IP CURLOPT_MAIL_RCPT_ALLLOWFAILS
Allow RCPT TO command to fail for some recipients. See \fICURLOPT_MAIL_RCPT_ALLLOWFAILS(3)\fP
.SH TFTP OPTIONS
.IP CURLOPT_TFTP_BLKSIZE
TFTP block size. See \fICURLOPT_TFTP_BLKSIZE(3)\fP
.IP CURLOPT_TFTP_NO_OPTIONS
Do not send TFTP options requests. See \fICURLOPT_TFTP_NO_OPTIONS(3)\fP
.SH FTP OPTIONS
.IP CURLOPT_FTPPORT
Changes to jni/curl/docs/libcurl/curl_easy_strerror.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_easy_strerror 3 "February 03, 2016" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_easy_strerror - return string describing error code
.SH SYNOPSIS
#include <curl/curl.h>

const char *curl_easy_strerror(CURLcode errornum);







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_easy_strerror 3 "February 03, 2016" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_easy_strerror - return string describing error code
.SH SYNOPSIS
#include <curl/curl.h>

const char *curl_easy_strerror(CURLcode errornum);
Changes to jni/curl/docs/libcurl/curl_easy_unescape.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_unescape 3 "October 04, 2016" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_easy_unescape - URL decodes the given string
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "char *curl_easy_unescape( CURL *" curl ", const char *" url







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_unescape 3 "October 04, 2016" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_easy_unescape - URL decodes the given string
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "char *curl_easy_unescape( CURL *" curl ", const char *" url
Changes to jni/curl/docs/libcurl/curl_escape.3.
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
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_escape 3 "February 03, 2016" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_escape - URL encodes the given string
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "char *curl_escape( const char *" url ", int "length " );"
.ad
.SH DESCRIPTION
Obsolete function. Use \fIcurl_easy_escape(3)\fP instead!

This function will convert the given input string to an URL encoded string and
return that as a new allocated string. All input characters that are not a-z,
A-Z or 0-9 will be converted to their "URL escaped" version (%NN where NN is a
two-digit hexadecimal number).

If the 'length' argument is set to 0, curl_escape() will use strlen() on the
input 'url' string to find out the size.

You must curl_free() the returned string when you're done with it.
.SH AVAILABILITY
Since 7.15.4, \fIcurl_easy_escape(3)\fP should be used. This function will
be removed in a future release.
.SH RETURN VALUE
A pointer to a zero terminated string or NULL if it failed.
.SH "SEE ALSO"
.BR curl_unescape "(3), " curl_free "(3), " RFC 2396







|



















|







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
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_escape 3 "March 02, 2020" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_escape - URL encodes the given string
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "char *curl_escape( const char *" url ", int "length " );"
.ad
.SH DESCRIPTION
Obsolete function. Use \fIcurl_easy_escape(3)\fP instead!

This function will convert the given input string to an URL encoded string and
return that as a new allocated string. All input characters that are not a-z,
A-Z or 0-9 will be converted to their "URL escaped" version (%NN where NN is a
two-digit hexadecimal number).

If the 'length' argument is set to 0, curl_escape() will use strlen() on the
input 'url' string to find out the size.

You must \fIcurl_free(3)\fP the returned string when you're done with it.
.SH AVAILABILITY
Since 7.15.4, \fIcurl_easy_escape(3)\fP should be used. This function will
be removed in a future release.
.SH RETURN VALUE
A pointer to a zero terminated string or NULL if it failed.
.SH "SEE ALSO"
.BR curl_unescape "(3), " curl_free "(3), " RFC 2396
Changes to jni/curl/docs/libcurl/curl_formadd.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_formadd 3 "December 11, 2018" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_formadd - add a section to a multipart/formdata HTTP POST
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLFORMcode curl_formadd(struct curl_httppost ** " firstitem,







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_formadd 3 "December 11, 2018" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_formadd - add a section to a multipart/formdata HTTP POST
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLFORMcode curl_formadd(struct curl_httppost ** " firstitem,
Changes to jni/curl/docs/libcurl/curl_formfree.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_formfree 3 "August 09, 2018" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_formfree - free a previously build multipart/formdata HTTP POST chain
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "void curl_formfree(struct curl_httppost *" form);







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_formfree 3 "August 09, 2018" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_formfree - free a previously build multipart/formdata HTTP POST chain
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "void curl_formfree(struct curl_httppost *" form);
Changes to jni/curl/docs/libcurl/curl_formget.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_formget 3 "September 02, 2017" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_formget - serialize a previously built multipart/formdata HTTP POST chain
.SH SYNOPSIS
.nf
.B #include <curl/curl.h>








|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_formget 3 "September 02, 2017" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_formget - serialize a previously built multipart/formdata HTTP POST chain
.SH SYNOPSIS
.nf
.B #include <curl/curl.h>

Changes to jni/curl/docs/libcurl/curl_free.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_free 3 "August 09, 2018" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_free - reclaim memory that has been obtained through a libcurl call
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "void curl_free( char *" ptr " );"







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_free 3 "August 09, 2018" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_free - reclaim memory that has been obtained through a libcurl call
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "void curl_free( char *" ptr " );"
Changes to jni/curl/docs/libcurl/curl_getdate.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_getdate 3 "January 18, 2018" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_getdate - Convert a date string to number of seconds
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "time_t curl_getdate(char *" datestring ", time_t *"now " );"







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_getdate 3 "January 18, 2018" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_getdate - Convert a date string to number of seconds
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "time_t curl_getdate(char *" datestring ", time_t *"now " );"
Changes to jni/curl/docs/libcurl/curl_getenv.3.
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
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_getenv 3 "February 03, 2016" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_getenv - return value for environment name
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "char *curl_getenv(const char *" name ");"
.ad
.SH DESCRIPTION
curl_getenv() is a portable wrapper for the getenv() function, meant to
emulate its behaviour and provide an identical interface for all operating
systems libcurl builds on (including win32).


.SH AVAILABILITY
This function will be removed from the public libcurl API in a near future. It
will instead be made "available" by source code access only, and then as
curlx_getenv().
.SH RETURN VALUE
If successful, curl_getenv() returns a pointer to the value of the specified
environment. The memory it refers to is malloc()ed so the application must
free() this when the data is no longer needed. When \fIcurl_getenv(3)\fP fails
to find the specified name, it returns a null pointer.
.SH NOTE
Under unix operating systems, there isn't any point in returning an allocated
memory, although other systems won't work properly if this isn't done. The
unix implementation thus has to suffer slightly from the drawbacks of other
systems.
.SH "SEE ALSO"
.BR getenv "(3C), "







|












>
>





|
<
<
|







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
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_getenv 3 "March 02, 2020" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_getenv - return value for environment name
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "char *curl_getenv(const char *" name ");"
.ad
.SH DESCRIPTION
curl_getenv() is a portable wrapper for the getenv() function, meant to
emulate its behaviour and provide an identical interface for all operating
systems libcurl builds on (including win32).

You must \fIcurl_free(3)\fP the returned string when you're done with it.
.SH AVAILABILITY
This function will be removed from the public libcurl API in a near future. It
will instead be made "available" by source code access only, and then as
curlx_getenv().
.SH RETURN VALUE
A pointer to a zero terminated string or NULL if it failed to find the


specified name.
.SH NOTE
Under unix operating systems, there isn't any point in returning an allocated
memory, although other systems won't work properly if this isn't done. The
unix implementation thus has to suffer slightly from the drawbacks of other
systems.
.SH "SEE ALSO"
.BR getenv "(3C), "
Changes to jni/curl/docs/libcurl/curl_global_cleanup.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_global_cleanup 3 "September 20, 2016" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_global_cleanup - global libcurl cleanup
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "void curl_global_cleanup(void);"







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_global_cleanup 3 "September 20, 2016" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_global_cleanup - global libcurl cleanup
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "void curl_global_cleanup(void);"
Changes to jni/curl/docs/libcurl/curl_global_init.3.
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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_global_init 3 "April 17, 2018" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_global_init - Global libcurl initialisation
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_global_init(long " flags ");"







|













|







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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_global_init 3 "January 23, 2020" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_global_init - Global libcurl initialisation
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_global_init(long " flags ");"
84
85
86
87
88
89
90


91
92
93
94
95
96
97
98
99
100
101
102
of libcurl so there's no need for libcurl to do it again.
.IP CURL_GLOBAL_NOTHING
Initialise nothing extra. This sets no bit.
.IP CURL_GLOBAL_DEFAULT
A sensible default. It will init both SSL and Win32. Right now, this equals
the functionality of the \fBCURL_GLOBAL_ALL\fP mask.
.IP CURL_GLOBAL_ACK_EINTR


When this flag is set, curl will acknowledge EINTR condition when connecting
or when waiting for data.  Otherwise, curl waits until full timeout
elapses. (Added in 7.30.0)
.SH RETURN VALUE
If this function returns non-zero, something went wrong and you cannot use the
other curl functions.
.SH "SEE ALSO"
.BR curl_global_init_mem "(3), "
.BR curl_global_cleanup "(3), "
.BR curl_global_sslset "(3), "
.BR curl_easy_init "(3) "
.BR libcurl "(3) "







>
>
|
|
|









84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
of libcurl so there's no need for libcurl to do it again.
.IP CURL_GLOBAL_NOTHING
Initialise nothing extra. This sets no bit.
.IP CURL_GLOBAL_DEFAULT
A sensible default. It will init both SSL and Win32. Right now, this equals
the functionality of the \fBCURL_GLOBAL_ALL\fP mask.
.IP CURL_GLOBAL_ACK_EINTR
This bit has no point since 7.69.0 but its behavior is instead the default.

Before 7.69.0: when this flag is set, curl will acknowledge EINTR condition
when connecting or when waiting for data.  Otherwise, curl waits until full
timeout elapses. (Added in 7.30.0)
.SH RETURN VALUE
If this function returns non-zero, something went wrong and you cannot use the
other curl functions.
.SH "SEE ALSO"
.BR curl_global_init_mem "(3), "
.BR curl_global_cleanup "(3), "
.BR curl_global_sslset "(3), "
.BR curl_easy_init "(3) "
.BR libcurl "(3) "
Changes to jni/curl/docs/libcurl/curl_global_init_mem.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_global_init_mem 3 "August 11, 2019" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_global_init_mem - Global libcurl initialisation with memory callbacks
.SH SYNOPSIS
.B #include <curl/curl.h>
.nf
.B "CURLcode curl_global_init_mem(long " flags,







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_global_init_mem 3 "August 11, 2019" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_global_init_mem - Global libcurl initialisation with memory callbacks
.SH SYNOPSIS
.B #include <curl/curl.h>
.nf
.B "CURLcode curl_global_init_mem(long " flags,
Changes to jni/curl/docs/libcurl/curl_global_sslset.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_global_sslset 3 "November 07, 2019" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_global_sslset - Select SSL backend to use with libcurl
.SH SYNOPSIS
.B #include <curl/curl.h>
.nf








|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_global_sslset 3 "November 07, 2019" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_global_sslset - Select SSL backend to use with libcurl
.SH SYNOPSIS
.B #include <curl/curl.h>
.nf

Changes to jni/curl/docs/libcurl/curl_mime_addpart.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_addpart 3 "September 22, 2017" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_mime_addpart - append a new empty part to a mime structure
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "curl_mimepart * curl_mime_addpart(curl_mime * " mime ");"







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_addpart 3 "September 22, 2017" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_mime_addpart - append a new empty part to a mime structure
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "curl_mimepart * curl_mime_addpart(curl_mime * " mime ");"
Changes to jni/curl/docs/libcurl/curl_mime_data.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_data 3 "September 22, 2017" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_mime_data - set a mime part's body data from memory
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_data(curl_mimepart * " part ", const char * " data







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_data 3 "September 22, 2017" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_mime_data - set a mime part's body data from memory
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_data(curl_mimepart * " part ", const char * " data
Changes to jni/curl/docs/libcurl/curl_mime_data_cb.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_data_cb 3 "April 17, 2018" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_mime_data_cb - set a callback-based data source for a mime part's body
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
size_t readfunc(char *buffer, size_t size, size_t nitems, void *arg);







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_data_cb 3 "April 17, 2018" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_mime_data_cb - set a callback-based data source for a mime part's body
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
size_t readfunc(char *buffer, size_t size, size_t nitems, void *arg);
Changes to jni/curl/docs/libcurl/curl_mime_encoder.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_encoder 3 "September 05, 2017" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_mime_encoder - set a mime part's encoder and content transfer encoding
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_encoder(curl_mimepart * " part ,







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_encoder 3 "September 05, 2017" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_mime_encoder - set a mime part's encoder and content transfer encoding
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_encoder(curl_mimepart * " part ,
Changes to jni/curl/docs/libcurl/curl_mime_filedata.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_filedata 3 "April 17, 2018" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_mime_filedata - set a mime part's body data from a file contents
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_filedata(curl_mimepart * " part ,







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_filedata 3 "April 17, 2018" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_mime_filedata - set a mime part's body data from a file contents
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_filedata(curl_mimepart * " part ,
Changes to jni/curl/docs/libcurl/curl_mime_filename.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_filename 3 "September 22, 2017" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_mime_filename - set a mime part's remote file name
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_filename(curl_mimepart * " part ,







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_filename 3 "September 22, 2017" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_mime_filename - set a mime part's remote file name
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_filename(curl_mimepart * " part ,
Changes to jni/curl/docs/libcurl/curl_mime_free.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_free 3 "August 09, 2018" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_mime_free - free a previously built mime structure
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "void curl_mime_free(curl_mime *" mime);







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_free 3 "August 09, 2018" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_mime_free - free a previously built mime structure
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "void curl_mime_free(curl_mime *" mime);
Changes to jni/curl/docs/libcurl/curl_mime_headers.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_headers 3 "September 22, 2017" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_mime_headers - set a mime part's custom headers
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_headers(curl_mimepart * " part ,







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_headers 3 "September 22, 2017" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_mime_headers - set a mime part's custom headers
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_headers(curl_mimepart * " part ,
Changes to jni/curl/docs/libcurl/curl_mime_init.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_init 3 "September 22, 2017" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_mime_init - create a mime handle
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "curl_mime * curl_mime_init(CURL * " easy_handle ");"







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_init 3 "September 22, 2017" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_mime_init - create a mime handle
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "curl_mime * curl_mime_init(CURL * " easy_handle ");"
Changes to jni/curl/docs/libcurl/curl_mime_name.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_name 3 "September 22, 2017" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_mime_name - set a mime part's name
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_name(curl_mimepart * " part ", const char * " name ");"







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_name 3 "September 22, 2017" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_mime_name - set a mime part's name
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_name(curl_mimepart * " part ", const char * " name ");"
Changes to jni/curl/docs/libcurl/curl_mime_subparts.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_subparts 3 "September 05, 2017" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_mime_subparts - set subparts of a multipart mime part
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_subparts(curl_mimepart * " part ,







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_subparts 3 "September 05, 2017" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_mime_subparts - set subparts of a multipart mime part
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_subparts(curl_mimepart * " part ,
Changes to jni/curl/docs/libcurl/curl_mime_type.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_type 3 "April 17, 2018" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_mime_type - set a mime part's content type
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_type(curl_mimepart * " part ,







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_type 3 "April 17, 2018" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_mime_type - set a mime part's content type
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_type(curl_mimepart * " part ,
Changes to jni/curl/docs/libcurl/curl_mprintf.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_printf 3 "April 01, 2016" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_maprintf, curl_mfprintf, curl_mprintf, curl_msnprintf, curl_msprintf
curl_mvaprintf, curl_mvfprintf, curl_mvprintf, curl_mvsnprintf,
curl_mvsprintf - formatted output conversion
.SH SYNOPSIS
.B #include <curl/mprintf.h>







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_printf 3 "April 01, 2016" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_maprintf, curl_mfprintf, curl_mprintf, curl_msnprintf, curl_msprintf
curl_mvaprintf, curl_mvfprintf, curl_mvprintf, curl_mvsnprintf,
curl_mvsprintf - formatted output conversion
.SH SYNOPSIS
.B #include <curl/mprintf.h>
Changes to jni/curl/docs/libcurl/curl_multi_add_handle.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_add_handle 3 "June 30, 2018" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_multi_add_handle - add an easy handle to a multi session
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *easy_handle);







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_add_handle 3 "June 30, 2018" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_multi_add_handle - add an easy handle to a multi session
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *easy_handle);
Changes to jni/curl/docs/libcurl/curl_multi_assign.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_assign 3 "February 03, 2016" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_multi_assign \- set data to associate with an internal socket
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_assign(CURLM *multi_handle, curl_socket_t sockfd,







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_assign 3 "February 03, 2016" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_multi_assign \- set data to associate with an internal socket
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_assign(CURLM *multi_handle, curl_socket_t sockfd,
Changes to jni/curl/docs/libcurl/curl_multi_cleanup.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_cleanup 3 "August 09, 2018" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_multi_cleanup - close down a multi session
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLMcode curl_multi_cleanup( CURLM *multi_handle );"







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_cleanup 3 "August 09, 2018" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_multi_cleanup - close down a multi session
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLMcode curl_multi_cleanup( CURLM *multi_handle );"
Changes to jni/curl/docs/libcurl/curl_multi_fdset.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_fdset 3 "November 09, 2017" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_multi_fdset - extracts file descriptor information from a multi handle
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_fdset 3 "November 09, 2017" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_multi_fdset - extracts file descriptor information from a multi handle
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/curl_multi_info_read.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_info_read 3 "February 03, 2016" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_multi_info_read - read multi stack informationals
.SH SYNOPSIS
#include <curl/curl.h>

CURLMsg *curl_multi_info_read( CURLM *multi_handle,







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_info_read 3 "February 03, 2016" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_multi_info_read - read multi stack informationals
.SH SYNOPSIS
#include <curl/curl.h>

CURLMsg *curl_multi_info_read( CURLM *multi_handle,
Changes to jni/curl/docs/libcurl/curl_multi_init.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_init 3 "September 23, 2018" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_multi_init - create a multi handle
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLM *curl_multi_init( );"







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_init 3 "September 23, 2018" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_multi_init - create a multi handle
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLM *curl_multi_init( );"
Changes to jni/curl/docs/libcurl/curl_multi_perform.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_perform 3 "October 31, 2019" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_multi_perform - reads/writes available data from each easy handle
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles);







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_perform 3 "October 31, 2019" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_multi_perform - reads/writes available data from each easy handle
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles);
Changes to jni/curl/docs/libcurl/curl_multi_poll.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_poll 3 "November 17, 2019" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_multi_poll - polls on all easy handles in a multi handle
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_poll 3 "November 17, 2019" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_multi_poll - polls on all easy handles in a multi handle
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/curl_multi_remove_handle.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_remove_handle 3 "February 19, 2019" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_multi_remove_handle - remove an easy handle from a multi session
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL *easy_handle);







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_remove_handle 3 "February 19, 2019" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_multi_remove_handle - remove an easy handle from a multi session
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL *easy_handle);
Changes to jni/curl/docs/libcurl/curl_multi_setopt.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_setopt 3 "September 24, 2019" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_multi_setopt \- set options for a curl multi handle
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM * multi_handle, CURLMoption option, param);







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_setopt 3 "September 24, 2019" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_multi_setopt \- set options for a curl multi handle
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM * multi_handle, CURLMoption option, param);
Changes to jni/curl/docs/libcurl/curl_multi_socket.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_socket 3 "June 30, 2018" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_multi_socket \- reads/writes available data
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLMcode curl_multi_socket(CURLM * multi_handle, curl_socket_t sockfd,







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_socket 3 "June 30, 2018" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_multi_socket \- reads/writes available data
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLMcode curl_multi_socket(CURLM * multi_handle, curl_socket_t sockfd,
Changes to jni/curl/docs/libcurl/curl_multi_socket_action.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_socket_action 3 "June 10, 2019" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_multi_socket_action \- reads/writes available data given an action
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_socket_action 3 "June 10, 2019" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_multi_socket_action \- reads/writes available data given an action
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/curl_multi_strerror.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_strerror 3 "February 03, 2016" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_multi_strerror - return string describing error code
.SH SYNOPSIS
.nf
.B #include <curl/curl.h>
.BI "const char *curl_multi_strerror(CURLMcode " errornum ");"







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_strerror 3 "February 03, 2016" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_multi_strerror - return string describing error code
.SH SYNOPSIS
.nf
.B #include <curl/curl.h>
.BI "const char *curl_multi_strerror(CURLMcode " errornum ");"
Changes to jni/curl/docs/libcurl/curl_multi_timeout.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_timeout 3 "September 23, 2018" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_multi_timeout \- how long to wait for action before proceeding
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_timeout(CURLM *multi_handle, long *timeout);







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_timeout 3 "September 23, 2018" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_multi_timeout \- how long to wait for action before proceeding
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_timeout(CURLM *multi_handle, long *timeout);
Changes to jni/curl/docs/libcurl/curl_multi_wait.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_wait 3 "November 28, 2019" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_multi_wait - polls on all easy handles in a multi handle
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_wait 3 "November 28, 2019" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_multi_wait - polls on all easy handles in a multi handle
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/curl_multi_wakeup.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_wakeup 3 "November 25, 2019" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_multi_wakeup - wakes up a sleeping curl_multi_poll call
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_wakeup(CURLM *multi_handle);







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_wakeup 3 "November 25, 2019" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_multi_wakeup - wakes up a sleeping curl_multi_poll call
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_wakeup(CURLM *multi_handle);
Changes to jni/curl/docs/libcurl/curl_share_cleanup.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_share_cleanup 3 "August 09, 2018" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_share_cleanup - Clean up a shared object
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLSHcode curl_share_cleanup(CURLSH *" share_handle ");"







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_share_cleanup 3 "August 09, 2018" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_share_cleanup - Clean up a shared object
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLSHcode curl_share_cleanup(CURLSH *" share_handle ");"
Changes to jni/curl/docs/libcurl/curl_share_init.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_share_init 3 "September 23, 2018" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_share_init - Create a shared object
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLSH *curl_share_init( );"







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_share_init 3 "September 23, 2018" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_share_init - Create a shared object
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLSH *curl_share_init( );"
Changes to jni/curl/docs/libcurl/curl_share_setopt.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_share_setopt 3 "June 04, 2019" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_share_setopt - Set options for a shared object
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
CURLSHcode curl_share_setopt(CURLSH *share, CURLSHoption option, parameter);







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_share_setopt 3 "June 04, 2019" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_share_setopt - Set options for a shared object
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
CURLSHcode curl_share_setopt(CURLSH *share, CURLSHoption option, parameter);
Changes to jni/curl/docs/libcurl/curl_share_strerror.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_share_strerror 3 "February 03, 2016" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_share_strerror - return string describing error code
.SH SYNOPSIS
.nf
.B #include <curl/curl.h>
.BI "const char *curl_share_strerror(CURLSHcode " errornum ");"







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_share_strerror 3 "February 03, 2016" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_share_strerror - return string describing error code
.SH SYNOPSIS
.nf
.B #include <curl/curl.h>
.BI "const char *curl_share_strerror(CURLSHcode " errornum ");"
Changes to jni/curl/docs/libcurl/curl_slist_append.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_slist_append 3 "January 02, 2019" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_slist_append - add a string to an slist
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "struct curl_slist *curl_slist_append(struct curl_slist *" list,







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_slist_append 3 "January 02, 2019" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_slist_append - add a string to an slist
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "struct curl_slist *curl_slist_append(struct curl_slist *" list,
Changes to jni/curl/docs/libcurl/curl_slist_free_all.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_slist_free_all 3 "September 23, 2018" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_slist_free_all - free an entire curl_slist list
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "void curl_slist_free_all(struct curl_slist *" list);







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_slist_free_all 3 "September 23, 2018" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_slist_free_all - free an entire curl_slist list
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "void curl_slist_free_all(struct curl_slist *" list);
Changes to jni/curl/docs/libcurl/curl_strequal.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_strequal 3 "June 29, 2017" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_strequal, curl_strnequal - case insensitive string comparisons
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "int curl_strequal(char *" str1 ", char *" str2 ");"







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_strequal 3 "June 29, 2017" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_strequal, curl_strnequal - case insensitive string comparisons
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "int curl_strequal(char *" str1 ", char *" str2 ");"
Changes to jni/curl/docs/libcurl/curl_unescape.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_unescape 3 "February 03, 2016" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_unescape - URL decodes the given string
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "char *curl_unescape( const char *" url ", int "length " );"







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_unescape 3 "February 03, 2016" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_unescape - URL decodes the given string
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "char *curl_unescape( const char *" url ", int "length " );"
Changes to jni/curl/docs/libcurl/curl_url.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_url 3 "March 22, 2019" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_url - returns a new CURLU handle
.SH SYNOPSIS
.B #include <curl/curl.h>

CURLU *curl_url();







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_url 3 "March 22, 2019" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_url - returns a new CURLU handle
.SH SYNOPSIS
.B #include <curl/curl.h>

CURLU *curl_url();
Changes to jni/curl/docs/libcurl/curl_url_cleanup.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_url_cleanup 3 "September 08, 2018" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_url_cleanup - free a CURLU handle
.SH SYNOPSIS
.B #include <curl/curl.h>

void curl_url_cleanup(CURLU *handle);







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_url_cleanup 3 "September 08, 2018" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_url_cleanup - free a CURLU handle
.SH SYNOPSIS
.B #include <curl/curl.h>

void curl_url_cleanup(CURLU *handle);
Changes to jni/curl/docs/libcurl/curl_url_dup.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_url_dup 3 "September 08, 2018" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_url_dup - duplicate a CURLU handle
.SH SYNOPSIS
.B #include <curl/curl.h>

CURLU *curl_url_dup(CURLU *inhandle);







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_url_dup 3 "September 08, 2018" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_url_dup - duplicate a CURLU handle
.SH SYNOPSIS
.B #include <curl/curl.h>

CURLU *curl_url_dup(CURLU *inhandle);
Changes to jni/curl/docs/libcurl/curl_url_get.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_url_get 3 "September 25, 2019" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_url_get - extract a part from a URL
.SH SYNOPSIS
.B #include <curl/curl.h>

.nf







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_url_get 3 "September 25, 2019" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_url_get - extract a part from a URL
.SH SYNOPSIS
.B #include <curl/curl.h>

.nf
Changes to jni/curl/docs/libcurl/curl_url_set.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_url_set 3 "January 05, 2020" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_url_set - set a URL part
.SH SYNOPSIS
.B #include <curl/curl.h>

CURLUcode curl_url_set(CURLU *url,







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_url_set 3 "January 05, 2020" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_url_set - set a URL part
.SH SYNOPSIS
.B #include <curl/curl.h>

CURLUcode curl_url_set(CURLU *url,
Changes to jni/curl/docs/libcurl/curl_version.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_version 3 "February 03, 2016" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_version - returns the libcurl version string
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "char *curl_version( );"







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_version 3 "February 03, 2016" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_version - returns the libcurl version string
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "char *curl_version( );"
Changes to jni/curl/docs/libcurl/curl_version_info.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_version_info 3 "August 13, 2019" "libcurl 7.68.0" "libcurl Manual"

.SH NAME
curl_version_info - returns run-time libcurl version info
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "curl_version_info_data *curl_version_info( CURLversion "age ");"







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_version_info 3 "August 13, 2019" "libcurl 7.69.0" "libcurl Manual"

.SH NAME
curl_version_info - returns run-time libcurl version info
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "curl_version_info_data *curl_version_info( CURLversion "age ");"
Changes to jni/curl/docs/libcurl/libcurl-easy.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH libcurl 3 "February 03, 2016" "libcurl 7.68.0" "libcurl easy interface"

.SH NAME
libcurl-easy \- easy interface overview
.SH DESCRIPTION
When using libcurl's "easy" interface you init your session and get a handle
(often referred to as an "easy handle"), which you use as input to the easy
interface functions you use. Use \fIcurl_easy_init(3)\fP to get the handle.







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH libcurl 3 "February 03, 2016" "libcurl 7.69.0" "libcurl easy interface"

.SH NAME
libcurl-easy \- easy interface overview
.SH DESCRIPTION
When using libcurl's "easy" interface you init your session and get a handle
(often referred to as an "easy handle"), which you use as input to the easy
interface functions you use. Use \fIcurl_easy_init(3)\fP to get the handle.
Changes to jni/curl/docs/libcurl/libcurl-env.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH libcurl-env 3 "April 17, 2018" "libcurl 7.68.0" "libcurl environment variables"

.SH NAME
libcurl-env \- environment variables libcurl understands
.SH DESCRIPTION
libcurl reads and understands a set of environment variables that if set will
control and change behaviors. This is the full list of variables to set and
description of what they do. Also note that curl, the command line tool,







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH libcurl-env 3 "April 17, 2018" "libcurl 7.69.0" "libcurl environment variables"

.SH NAME
libcurl-env \- environment variables libcurl understands
.SH DESCRIPTION
libcurl reads and understands a set of environment variables that if set will
control and change behaviors. This is the full list of variables to set and
description of what they do. Also note that curl, the command line tool,
Changes to jni/curl/docs/libcurl/libcurl-errors.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH libcurl-errors 3 "November 17, 2019" "libcurl 7.68.0" "libcurl errors"

.SH NAME
libcurl-errors \- error codes in libcurl
.SH DESCRIPTION
This man page includes most, if not all, available error codes in libcurl.
Why they occur and possibly what you can do to fix the problem are also included.
.SH "CURLcode"







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH libcurl-errors 3 "December 24, 2019" "libcurl 7.69.0" "libcurl errors"

.SH NAME
libcurl-errors \- error codes in libcurl
.SH DESCRIPTION
This man page includes most, if not all, available error codes in libcurl.
Why they occur and possibly what you can do to fix the problem are also included.
.SH "CURLcode"
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
.IP "CURLE_LDAP_SEARCH_FAILED (39)"
LDAP search failed.
.IP "CURLE_FUNCTION_NOT_FOUND (41)"
Function not found. A required zlib function was not found.
.IP "CURLE_ABORTED_BY_CALLBACK (42)"
Aborted by callback. A callback returned "abort" to libcurl.
.IP "CURLE_BAD_FUNCTION_ARGUMENT (43)"
Internal error. A function was called with a bad parameter.
.IP "CURLE_INTERFACE_FAILED (45)"
Interface error. A specified outgoing interface could not be used. Set which
interface to use for outgoing connections' source IP address with
\fICURLOPT_INTERFACE(3)\fP.
.IP "CURLE_TOO_MANY_REDIRECTS (47)"
Too many redirects. When following redirects, libcurl hit the maximum amount.
Set your limit with \fICURLOPT_MAXREDIRS(3)\fP.







|







144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
.IP "CURLE_LDAP_SEARCH_FAILED (39)"
LDAP search failed.
.IP "CURLE_FUNCTION_NOT_FOUND (41)"
Function not found. A required zlib function was not found.
.IP "CURLE_ABORTED_BY_CALLBACK (42)"
Aborted by callback. A callback returned "abort" to libcurl.
.IP "CURLE_BAD_FUNCTION_ARGUMENT (43)"
A function was called with a bad parameter.
.IP "CURLE_INTERFACE_FAILED (45)"
Interface error. A specified outgoing interface could not be used. Set which
interface to use for outgoing connections' source IP address with
\fICURLOPT_INTERFACE(3)\fP.
.IP "CURLE_TOO_MANY_REDIRECTS (47)"
Too many redirects. When following redirects, libcurl hit the maximum amount.
Set your limit with \fICURLOPT_MAXREDIRS(3)\fP.
256
257
258
259
260
261
262



263
264
265
266
267
268
269
.IP "CURLE_RECURSIVE_API_CALL (93)"
An API function was called from inside a callback.
.IP "CURLE_AUTH_ERROR (94)"
An authentication function returned an error.
.IP "CURLE_HTTP3 (95)"
A problem was detected in the HTTP/3 layer. This is somewhat generic and can
be one out of several problems, see the error buffer for details.



.IP "CURLE_OBSOLETE*"
These error codes will never be returned. They were used in an old libcurl
version and are currently unused.
.SH "CURLMcode"
This is the generic return code used by functions in the libcurl multi
interface. Also consider \fIcurl_multi_strerror(3)\fP.
.IP "CURLM_CALL_MULTI_PERFORM (-1)"







>
>
>







256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
.IP "CURLE_RECURSIVE_API_CALL (93)"
An API function was called from inside a callback.
.IP "CURLE_AUTH_ERROR (94)"
An authentication function returned an error.
.IP "CURLE_HTTP3 (95)"
A problem was detected in the HTTP/3 layer. This is somewhat generic and can
be one out of several problems, see the error buffer for details.
.IP "CURLE_QUIC_CONNECT_ERROR (96)"
QUIC connection error. This error may be caused by an SSL library error. QUIC
is the protocol used for HTTP/3 transfers.
.IP "CURLE_OBSOLETE*"
These error codes will never be returned. They were used in an old libcurl
version and are currently unused.
.SH "CURLMcode"
This is the generic return code used by functions in the libcurl multi
interface. Also consider \fIcurl_multi_strerror(3)\fP.
.IP "CURLM_CALL_MULTI_PERFORM (-1)"
296
297
298
299
300
301
302


303
304
305
306
307
308
309
.IP "CURLM_ADDED_ALREADY (7)"
An easy handle already added to a multi handle was attempted to get added a
second time. (Added in 7.32.1)
.IP "CURLM_RECURSIVE_API_CALL (8)"
An API function was called from inside a callback.
.IP "CURLM_WAKEUP_FAILURE (9)"
Wakeup is unavailable or failed.


.SH "CURLSHcode"
The "share" interface will return a CURLSHcode to indicate when an error has
occurred.  Also consider \fIcurl_share_strerror(3)\fP.
.IP "CURLSHE_OK (0)"
All fine. Proceed as usual.
.IP "CURLSHE_BAD_OPTION (1)"
An invalid option was passed to the function.







>
>







299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
.IP "CURLM_ADDED_ALREADY (7)"
An easy handle already added to a multi handle was attempted to get added a
second time. (Added in 7.32.1)
.IP "CURLM_RECURSIVE_API_CALL (8)"
An API function was called from inside a callback.
.IP "CURLM_WAKEUP_FAILURE (9)"
Wakeup is unavailable or failed.
.IP "CURLM_BAD_FUNCTION_ARGUMENT (10)"
A function was called with a bad parameter.
.SH "CURLSHcode"
The "share" interface will return a CURLSHcode to indicate when an error has
occurred.  Also consider \fIcurl_share_strerror(3)\fP.
.IP "CURLSHE_OK (0)"
All fine. Proceed as usual.
.IP "CURLSHE_BAD_OPTION (1)"
An invalid option was passed to the function.
Changes to jni/curl/docs/libcurl/libcurl-multi.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH libcurl-multi 3 "November 28, 2019" "libcurl 7.68.0" "libcurl multi interface"

.SH NAME
libcurl-multi \- how to use the multi interface
.SH DESCRIPTION
This is an overview on how to use the libcurl multi interface in your C
programs. There are specific man pages for each function mentioned in
here. There's also the \fIlibcurl-tutorial(3)\fP man page for a complete







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH libcurl-multi 3 "November 28, 2019" "libcurl 7.69.0" "libcurl multi interface"

.SH NAME
libcurl-multi \- how to use the multi interface
.SH DESCRIPTION
This is an overview on how to use the libcurl multi interface in your C
programs. There are specific man pages for each function mentioned in
here. There's also the \fIlibcurl-tutorial(3)\fP man page for a complete
Changes to jni/curl/docs/libcurl/libcurl-security.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH libcurl-security 3 "July 16, 2019" "libcurl 7.68.0" "libcurl security"

.SH NAME
libcurl-security \- security considerations when using libcurl
.SH "Security"
The libcurl project takes security seriously.  The library is written with
caution and precautions are taken to mitigate many kinds of risks encountered
while operating with potentially malicious servers on the Internet. It is a







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH libcurl-security 3 "July 16, 2019" "libcurl 7.69.0" "libcurl security"

.SH NAME
libcurl-security \- security considerations when using libcurl
.SH "Security"
The libcurl project takes security seriously.  The library is written with
caution and precautions are taken to mitigate many kinds of risks encountered
while operating with potentially malicious servers on the Internet. It is a
Changes to jni/curl/docs/libcurl/libcurl-share.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH libcurl-share 3 "November 27, 2017" "libcurl 7.68.0" "libcurl share interface"

.SH NAME
libcurl-share \- how to use the share interface
.SH DESCRIPTION
This is an overview on how to use the libcurl share interface in your C
programs. There are specific man pages for each function mentioned in
here.







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH libcurl-share 3 "November 27, 2017" "libcurl 7.69.0" "libcurl share interface"

.SH NAME
libcurl-share \- how to use the share interface
.SH DESCRIPTION
This is an overview on how to use the libcurl share interface in your C
programs. There are specific man pages for each function mentioned in
here.
Changes to jni/curl/docs/libcurl/libcurl-symbols.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH libcurl-symbols 3 "Jan  8, 2020" "libcurl 7.41.0" "libcurl symbols"
.SH NAME
libcurl-symbols \- libcurl symbol version information
.SH "libcurl symbols"
This man page details version information for public symbols provided in the
libcurl header files. This lists the first version in which the symbol was
introduced and for some symbols two additional information pieces:








|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH libcurl-symbols 3 "Mar  4, 2020" "libcurl 7.41.0" "libcurl symbols"
.SH NAME
libcurl-symbols \- libcurl symbol version information
.SH "libcurl symbols"
This man page details version information for public symbols provided in the
libcurl header files. This lists the first version in which the symbol was
introduced and for some symbols two additional information pieces:

241
242
243
244
245
246
247


248
249
250
251
252
253
254
Deprecated since 7.17.0
.IP CURLE_OUT_OF_MEMORY
Introduced in 7.1
.IP CURLE_PARTIAL_FILE
Introduced in 7.1
.IP CURLE_PEER_FAILED_VERIFICATION
Introduced in 7.17.1


.IP CURLE_QUOTE_ERROR
Introduced in 7.17.0
.IP CURLE_RANGE_ERROR
Introduced in 7.17.0
.IP CURLE_READ_ERROR
Introduced in 7.1
.IP CURLE_RECURSIVE_API_CALL







>
>







241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
Deprecated since 7.17.0
.IP CURLE_OUT_OF_MEMORY
Introduced in 7.1
.IP CURLE_PARTIAL_FILE
Introduced in 7.1
.IP CURLE_PEER_FAILED_VERIFICATION
Introduced in 7.17.1
.IP CURLE_QUIC_CONNECT_ERROR
Introduced in 7.69.0
.IP CURLE_QUOTE_ERROR
Introduced in 7.17.0
.IP CURLE_RANGE_ERROR
Introduced in 7.17.0
.IP CURLE_READ_ERROR
Introduced in 7.1
.IP CURLE_RECURSIVE_API_CALL
701
702
703
704
705
706
707


708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
Introduced in 7.19.6
.IP CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE
Introduced in 7.30.0
.IP CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE
Introduced in 7.30.0
.IP CURLMOPT_MAXCONNECTS
Introduced in 7.16.3


.IP CURLMOPT_MAX_HOST_CONNECTIONS
Introduced in 7.30.0
.IP CURLMOPT_MAX_PIPELINE_LENGTH
Introduced in 7.30.0
.IP CURLMOPT_MAX_TOTAL_CONNECTIONS
Introduced in 7.30.0
.IP CURLMOPT_MAX_CONCURRENT_STREAMS
Introduced in 7.67.0
.IP CURLMOPT_PIPELINING
Introduced in 7.16.0
.IP CURLMOPT_PIPELINING_SERVER_BL
Introduced in 7.30.0
.IP CURLMOPT_PIPELINING_SITE_BL
Introduced in 7.30.0
.IP CURLMOPT_PUSHDATA







>
>






<
<







703
704
705
706
707
708
709
710
711
712
713
714
715
716
717


718
719
720
721
722
723
724
Introduced in 7.19.6
.IP CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE
Introduced in 7.30.0
.IP CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE
Introduced in 7.30.0
.IP CURLMOPT_MAXCONNECTS
Introduced in 7.16.3
.IP CURLMOPT_MAX_CONCURRENT_STREAMS
Introduced in 7.67.0
.IP CURLMOPT_MAX_HOST_CONNECTIONS
Introduced in 7.30.0
.IP CURLMOPT_MAX_PIPELINE_LENGTH
Introduced in 7.30.0
.IP CURLMOPT_MAX_TOTAL_CONNECTIONS
Introduced in 7.30.0


.IP CURLMOPT_PIPELINING
Introduced in 7.16.0
.IP CURLMOPT_PIPELINING_SERVER_BL
Introduced in 7.30.0
.IP CURLMOPT_PIPELINING_SITE_BL
Introduced in 7.30.0
.IP CURLMOPT_PUSHDATA
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
Introduced in 7.9.6
.IP CURLMSG_NONE
Introduced in 7.9.6
.IP CURLM_ADDED_ALREADY
Introduced in 7.32.1
.IP CURLM_BAD_EASY_HANDLE
Introduced in 7.9.6


.IP CURLM_BAD_HANDLE
Introduced in 7.9.6
.IP CURLM_BAD_SOCKET
Introduced in 7.15.4
.IP CURLM_CALL_MULTI_PERFORM
Introduced in 7.9.6
.IP CURLM_CALL_MULTI_SOCKET
Introduced in 7.15.5
.IP CURLM_INTERNAL_ERROR
Introduced in 7.9.6
.IP CURLM_OK
Introduced in 7.9.6
.IP CURLM_OUT_OF_MEMORY
Introduced in 7.9.6
.IP CURLM_RECURSIVE_API_CALL
Introduced in 7.59.0


.IP CURLM_WAKEUP_FAILURE
Introduced in 7.68.0
.IP CURLM_UNKNOWN_OPTION
Introduced in 7.15.4
.IP CURLOPTTYPE_FUNCTIONPOINT
Introduced in 7.1
.IP CURLOPTTYPE_LONG
Introduced in 7.1
.IP CURLOPTTYPE_OBJECTPOINT
Introduced in 7.1
.IP CURLOPTTYPE_OFF_T
Introduced in 7.11.0
.IP CURLOPTTYPE_STRINGPOINT
Introduced in 7.46.0
.IP CURLOPTTYPE_SLISTPOINT
Introduced in 7.65.2
.IP CURLOPT_ABSTRACT_UNIX_SOCKET
Introduced in 7.53.0
.IP CURLOPT_ACCEPTTIMEOUT_MS
Introduced in 7.24.0
.IP CURLOPT_ACCEPT_ENCODING
Introduced in 7.21.6
.IP CURLOPT_ADDRESS_SCOPE







>
>
















>
>


|
|








|
|
|
|







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
Introduced in 7.9.6
.IP CURLMSG_NONE
Introduced in 7.9.6
.IP CURLM_ADDED_ALREADY
Introduced in 7.32.1
.IP CURLM_BAD_EASY_HANDLE
Introduced in 7.9.6
.IP CURLM_BAD_FUNCTION_ARGUMENT
Introduced in 7.69.0
.IP CURLM_BAD_HANDLE
Introduced in 7.9.6
.IP CURLM_BAD_SOCKET
Introduced in 7.15.4
.IP CURLM_CALL_MULTI_PERFORM
Introduced in 7.9.6
.IP CURLM_CALL_MULTI_SOCKET
Introduced in 7.15.5
.IP CURLM_INTERNAL_ERROR
Introduced in 7.9.6
.IP CURLM_OK
Introduced in 7.9.6
.IP CURLM_OUT_OF_MEMORY
Introduced in 7.9.6
.IP CURLM_RECURSIVE_API_CALL
Introduced in 7.59.0
.IP CURLM_UNKNOWN_OPTION
Introduced in 7.15.4
.IP CURLM_WAKEUP_FAILURE
Introduced in 7.68.0
.IP CURLOPT
Introduced in 7.69.0
.IP CURLOPTTYPE_FUNCTIONPOINT
Introduced in 7.1
.IP CURLOPTTYPE_LONG
Introduced in 7.1
.IP CURLOPTTYPE_OBJECTPOINT
Introduced in 7.1
.IP CURLOPTTYPE_OFF_T
Introduced in 7.11.0
.IP CURLOPTTYPE_SLISTPOINT
Introduced in 7.65.2
.IP CURLOPTTYPE_STRINGPOINT
Introduced in 7.46.0
.IP CURLOPT_ABSTRACT_UNIX_SOCKET
Introduced in 7.53.0
.IP CURLOPT_ACCEPTTIMEOUT_MS
Introduced in 7.24.0
.IP CURLOPT_ACCEPT_ENCODING
Introduced in 7.21.6
.IP CURLOPT_ADDRESS_SCOPE
1016
1017
1018
1019
1020
1021
1022


1023
1024
1025
1026
1027
1028
1029
Introduced in 7.1
.IP CURLOPT_MAIL_AUTH
Introduced in 7.25.0
.IP CURLOPT_MAIL_FROM
Introduced in 7.20.0
.IP CURLOPT_MAIL_RCPT
Introduced in 7.20.0


.IP CURLOPT_MAXAGE_CONN
Introduced in 7.65.0
.IP CURLOPT_MAXCONNECTS
Introduced in 7.7
.IP CURLOPT_MAXFILESIZE
Introduced in 7.10.8
.IP CURLOPT_MAXFILESIZE_LARGE







>
>







1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
Introduced in 7.1
.IP CURLOPT_MAIL_AUTH
Introduced in 7.25.0
.IP CURLOPT_MAIL_FROM
Introduced in 7.20.0
.IP CURLOPT_MAIL_RCPT
Introduced in 7.20.0
.IP CURLOPT_MAIL_RCPT_ALLLOWFAILS
Introduced in 7.69.0
.IP CURLOPT_MAXAGE_CONN
Introduced in 7.65.0
.IP CURLOPT_MAXCONNECTS
Introduced in 7.7
.IP CURLOPT_MAXFILESIZE
Introduced in 7.10.8
.IP CURLOPT_MAXFILESIZE_LARGE
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
Introduced in 7.62.0
.IP CURLU_DISALLOW_USER
Introduced in 7.62.0
.IP CURLU_GUESS_SCHEME
Introduced in 7.62.0
.IP CURLU_NON_SUPPORT_SCHEME
Introduced in 7.62.0
.IP CURLU_NO_DEFAULT_PORT
Introduced in 7.62.0
.IP CURLU_NO_AUTHORITY
Introduced in 7.67.0
.IP CURLU_PATH_AS_IS
Introduced in 7.62.0
.IP CURLU_URLDECODE
Introduced in 7.62.0
.IP CURLU_URLENCODE
Introduced in 7.62.0
.IP CURLVERSION_FIFTH
Introduced in 7.57.0
.IP CURLVERSION_FIRST
Introduced in 7.10
.IP CURLVERSION_FOURTH
Introduced in 7.16.1
.IP CURLVERSION_NOW
Introduced in 7.10
.IP CURLVERSION_SECOND
Introduced in 7.11.1
.IP CURLVERSION_THIRD
Introduced in 7.12.0
.IP CURLVERSION_SIXTH
Introduced in 7.66.0
.IP CURL_CHUNK_BGN_FUNC_FAIL
Introduced in 7.21.0
.IP CURL_CHUNK_BGN_FUNC_OK
Introduced in 7.21.0
.IP CURL_CHUNK_BGN_FUNC_SKIP
Introduced in 7.21.0
.IP CURL_CHUNK_END_FUNC_FAIL







|
|
|
|
















|
|
|
|







1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
Introduced in 7.62.0
.IP CURLU_DISALLOW_USER
Introduced in 7.62.0
.IP CURLU_GUESS_SCHEME
Introduced in 7.62.0
.IP CURLU_NON_SUPPORT_SCHEME
Introduced in 7.62.0
.IP CURLU_NO_AUTHORITY
Introduced in 7.67.0
.IP CURLU_NO_DEFAULT_PORT
Introduced in 7.62.0
.IP CURLU_PATH_AS_IS
Introduced in 7.62.0
.IP CURLU_URLDECODE
Introduced in 7.62.0
.IP CURLU_URLENCODE
Introduced in 7.62.0
.IP CURLVERSION_FIFTH
Introduced in 7.57.0
.IP CURLVERSION_FIRST
Introduced in 7.10
.IP CURLVERSION_FOURTH
Introduced in 7.16.1
.IP CURLVERSION_NOW
Introduced in 7.10
.IP CURLVERSION_SECOND
Introduced in 7.11.1
.IP CURLVERSION_SIXTH
Introduced in 7.66.0
.IP CURLVERSION_THIRD
Introduced in 7.12.0
.IP CURL_CHUNK_BGN_FUNC_FAIL
Introduced in 7.21.0
.IP CURL_CHUNK_BGN_FUNC_OK
Introduced in 7.21.0
.IP CURL_CHUNK_BGN_FUNC_SKIP
Introduced in 7.21.0
.IP CURL_CHUNK_END_FUNC_FAIL
2019
2020
2021
2022
2023
2024
2025


2026
2027
2028
2029
Introduced in 7.40.0
.IP CURL_WAIT_POLLIN
Introduced in 7.28.0
.IP CURL_WAIT_POLLOUT
Introduced in 7.28.0
.IP CURL_WAIT_POLLPRI
Introduced in 7.28.0


.IP CURL_WRITEFUNC_PAUSE
Introduced in 7.18.0
.IP CURL_ZERO_TERMINATED
Introduced in 7.56.0







>
>




2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
Introduced in 7.40.0
.IP CURL_WAIT_POLLIN
Introduced in 7.28.0
.IP CURL_WAIT_POLLOUT
Introduced in 7.28.0
.IP CURL_WAIT_POLLPRI
Introduced in 7.28.0
.IP CURL_WIN32
Introduced in 7.69.0
.IP CURL_WRITEFUNC_PAUSE
Introduced in 7.18.0
.IP CURL_ZERO_TERMINATED
Introduced in 7.56.0
Changes to jni/curl/docs/libcurl/libcurl-thread.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH libcurl-thread 3 "June 30, 2019" "libcurl 7.68.0" "libcurl thread safety"

.SH NAME
libcurl-thread \- libcurl thread safety
.SH "Multi-threading with libcurl"
libcurl is thread safe but has no internal thread synchronization. You may have
to provide your own locking should you meet any of the thread safety exceptions
below.







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH libcurl-thread 3 "June 30, 2019" "libcurl 7.69.0" "libcurl thread safety"

.SH NAME
libcurl-thread \- libcurl thread safety
.SH "Multi-threading with libcurl"
libcurl is thread safe but has no internal thread synchronization. You may have
to provide your own locking should you meet any of the thread safety exceptions
below.
Changes to jni/curl/docs/libcurl/libcurl-tutorial.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH libcurl-tutorial 3 "October 31, 2019" "libcurl 7.68.0" "libcurl programming"

.SH NAME
libcurl-tutorial \- libcurl programming tutorial
.SH "Objective"
This document attempts to describe the general principles and some basic
approaches to consider when programming with libcurl. The text will focus
mainly on the C interface but might apply fairly well on other interfaces as







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH libcurl-tutorial 3 "October 31, 2019" "libcurl 7.69.0" "libcurl programming"

.SH NAME
libcurl-tutorial \- libcurl programming tutorial
.SH "Objective"
This document attempts to describe the general principles and some basic
approaches to consider when programming with libcurl. The text will focus
mainly on the C interface but might apply fairly well on other interfaces as
Changes to jni/curl/docs/libcurl/libcurl-url.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH libcurl 3 "September 10, 2018" "libcurl 7.68.0" "libcurl url interface"

.SH NAME
libcurl-url \- URL interface overview
.SH DESCRIPTION
The URL interface provides a set of functions for parsing and generating URLs.
.SH INCLUDE
You still only include <curl/curl.h> in your code. Note that the URL API was







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH libcurl 3 "September 10, 2018" "libcurl 7.69.0" "libcurl url interface"

.SH NAME
libcurl-url \- URL interface overview
.SH DESCRIPTION
The URL interface provides a set of functions for parsing and generating URLs.
.SH INCLUDE
You still only include <curl/curl.h> in your code. Note that the URL API was
Changes to jni/curl/docs/libcurl/libcurl.3.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH libcurl 3 "July 15, 2017" "libcurl 7.68.0" "libcurl overview"

.SH NAME
libcurl \- client-side URL transfers
.SH DESCRIPTION
This is a short overview on how to use libcurl in your C programs. There are
specific man pages for each function mentioned in here. There are also the
\fIlibcurl-easy(3)\fP man page, the \fIlibcurl-multi(3)\fP man page, the







|







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH libcurl 3 "July 15, 2017" "libcurl 7.69.0" "libcurl overview"

.SH NAME
libcurl \- client-side URL transfers
.SH DESCRIPTION
This is a short overview on how to use libcurl in your C programs. There are
specific man pages for each function mentioned in here. There are also the
\fIlibcurl-easy(3)\fP man page, the \fIlibcurl-multi(3)\fP man page, the
Changes to jni/curl/docs/libcurl/opts/CURLINFO_ACTIVESOCKET.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_ACTIVESOCKET 3 "May 06, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_ACTIVESOCKET \- get the active socket
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_ACTIVESOCKET,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_ACTIVESOCKET 3 "May 06, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_ACTIVESOCKET \- get the active socket
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_ACTIVESOCKET,
Changes to jni/curl/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_APPCONNECT_TIME 3 "August 26, 2019" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_APPCONNECT_TIME \- get the time until the SSL/SSH handshake is completed
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_APPCONNECT_TIME, double *timep);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_APPCONNECT_TIME 3 "August 26, 2019" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_APPCONNECT_TIME \- get the time until the SSL/SSH handshake is completed
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_APPCONNECT_TIME, double *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME_T.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_APPCONNECT_TIME_T 3 "August 26, 2019" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_APPCONNECT_TIME_T \- get the time until the SSL/SSH handshake is completed
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_APPCONNECT_TIME_T, curl_off_t *timep);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_APPCONNECT_TIME_T 3 "August 26, 2019" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_APPCONNECT_TIME_T \- get the time until the SSL/SSH handshake is completed
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_APPCONNECT_TIME_T, curl_off_t *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CERTINFO.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CERTINFO 3 "November 07, 2018" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CERTINFO \- get the TLS certificate chain
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CERTINFO,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CERTINFO 3 "November 07, 2018" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CERTINFO \- get the TLS certificate chain
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CERTINFO,
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONDITION_UNMET 3 "February 23, 2018" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONDITION_UNMET \- get info on unmet time conditional
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONDITION_UNMET, long *unmet);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONDITION_UNMET 3 "February 23, 2018" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONDITION_UNMET \- get info on unmet time conditional
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONDITION_UNMET, long *unmet);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONNECT_TIME.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONNECT_TIME 3 "August 26, 2019" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONNECT_TIME \- get the time until connect
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONNECT_TIME, double *timep);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONNECT_TIME 3 "August 26, 2019" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONNECT_TIME \- get the time until connect
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONNECT_TIME, double *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONNECT_TIME_T.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONNECT_TIME_T 3 "August 26, 2019" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONNECT_TIME_T \- get the time until connect
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONNECT_TIME_T, curl_off_t *timep);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONNECT_TIME_T 3 "August 26, 2019" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONNECT_TIME_T \- get the time until connect
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONNECT_TIME_T, curl_off_t *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONTENT_LENGTH_DOWNLOAD 3 "June 15, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONTENT_LENGTH_DOWNLOAD \- get content-length of download
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONTENT_LENGTH_DOWNLOAD 3 "June 15, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONTENT_LENGTH_DOWNLOAD \- get content-length of download
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD,
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONTENT_LENGTH_DOWNLOAD_T 3 "March 31, 2018" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONTENT_LENGTH_DOWNLOAD_T \- get content-length of download
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONTENT_LENGTH_DOWNLOAD_T 3 "March 31, 2018" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONTENT_LENGTH_DOWNLOAD_T \- get content-length of download
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T,
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONTENT_LENGTH_UPLOAD 3 "June 15, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONTENT_LENGTH_UPLOAD \- get the specified size of the upload
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_UPLOAD,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONTENT_LENGTH_UPLOAD 3 "June 15, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONTENT_LENGTH_UPLOAD \- get the specified size of the upload
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_UPLOAD,
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD_T.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONTENT_LENGTH_UPLOAD_T 3 "March 31, 2018" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONTENT_LENGTH_UPLOAD_T \- get the specified size of the upload
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_UPLOAD_T,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONTENT_LENGTH_UPLOAD_T 3 "March 31, 2018" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONTENT_LENGTH_UPLOAD_T \- get the specified size of the upload
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_UPLOAD_T,
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONTENT_TYPE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONTENT_TYPE 3 "May 06, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONTENT_TYPE \- get Content-Type
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_TYPE, char **ct);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONTENT_TYPE 3 "May 06, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONTENT_TYPE \- get Content-Type
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_TYPE, char **ct);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_COOKIELIST.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_COOKIELIST 3 "March 20, 2018" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_COOKIELIST \- get all known cookies
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_COOKIELIST,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_COOKIELIST 3 "February 15, 2020" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_COOKIELIST \- get all known cookies
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_COOKIELIST,
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
HTTP(S)
.SH EXAMPLE
.nf
CURL *curl = curl_easy_init();
if(curl) {
  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");

  /* enable the cookie engine with a non-existing file */
  curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "-");

  res = curl_easy_perform(curl);

  if(!res) {
    /* extract all known cookies */
    struct curl_slist *cookies = NULL;
    res = curl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies);
    if(!res && cookies) {
      /* a linked list of cookies in cookie file format */
      struct curl_slist *each = cookies;
      while(each) {
        printf("%s", each->data);
        each = each->next;
      }
      /* we must free these cookies when we're done */
      curl_slist_free_all(cookies);
    }
  }
  curl_easy_cleanup(curl);







|
|











|







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
HTTP(S)
.SH EXAMPLE
.nf
CURL *curl = curl_easy_init();
if(curl) {
  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");

  /* enable the cookie engine */
  curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "");

  res = curl_easy_perform(curl);

  if(!res) {
    /* extract all known cookies */
    struct curl_slist *cookies = NULL;
    res = curl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies);
    if(!res && cookies) {
      /* a linked list of cookies in cookie file format */
      struct curl_slist *each = cookies;
      while(each) {
        printf("%s\\n", each->data);
        each = each->next;
      }
      /* we must free these cookies when we're done */
      curl_slist_free_all(cookies);
    }
  }
  curl_easy_cleanup(curl);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_EFFECTIVE_URL 3 "May 04, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_EFFECTIVE_URL \- get the last used URL
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_EFFECTIVE_URL, char **urlp);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_EFFECTIVE_URL 3 "May 04, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_EFFECTIVE_URL \- get the last used URL
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_EFFECTIVE_URL, char **urlp);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_FILETIME.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_FILETIME 3 "January 25, 2018" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_FILETIME \- get the remote time of the retrieved document
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FILETIME, long *timep);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_FILETIME 3 "January 25, 2018" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_FILETIME \- get the remote time of the retrieved document
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FILETIME, long *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_FILETIME_T.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_FILETIME 3 "January 25, 2018" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_FILETIME_T \- get the remote time of the retrieved document
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FILETIME_T, curl_off_t *timep);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_FILETIME 3 "January 25, 2018" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_FILETIME_T \- get the remote time of the retrieved document
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FILETIME_T, curl_off_t *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_FTP_ENTRY_PATH 3 "May 06, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_FTP_ENTRY_PATH \- get entry path in FTP server
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FTP_ENTRY_PATH, char **path);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_FTP_ENTRY_PATH 3 "May 06, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_FTP_ENTRY_PATH \- get entry path in FTP server
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FTP_ENTRY_PATH, char **path);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_HEADER_SIZE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_HEADER_SIZE 3 "May 06, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_HEADER_SIZE \- get size of retrieved headers
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HEADER_SIZE, long *sizep);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_HEADER_SIZE 3 "May 06, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_HEADER_SIZE \- get size of retrieved headers
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HEADER_SIZE, long *sizep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_HTTPAUTH_AVAIL 3 "October 07, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_HTTPAUTH_AVAIL \- get available HTTP authentication methods
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTPAUTH_AVAIL, long *authp);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_HTTPAUTH_AVAIL 3 "October 07, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_HTTPAUTH_AVAIL \- get available HTTP authentication methods
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTPAUTH_AVAIL, long *authp);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_HTTP_CONNECTCODE 3 "May 06, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_HTTP_CONNECTCODE \- get the CONNECT response code
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTP_CONNECTCODE, long *p);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_HTTP_CONNECTCODE 3 "May 06, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_HTTP_CONNECTCODE \- get the CONNECT response code
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTP_CONNECTCODE, long *p);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_HTTP_VERSION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_HTTP_VERSION 3 "August 07, 2019" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_HTTP_VERSION \- get the http version used in the connection
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTP_VERSION, long *p);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_HTTP_VERSION 3 "August 07, 2019" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_HTTP_VERSION \- get the http version used in the connection
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTP_VERSION, long *p);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_LASTSOCKET.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_LASTSOCKET 3 "May 06, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_LASTSOCKET \- get the last socket used
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LASTSOCKET, long *socket);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_LASTSOCKET 3 "May 06, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_LASTSOCKET \- get the last socket used
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LASTSOCKET, long *socket);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_LOCAL_IP.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_LOCAL_IP 3 "May 05, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_LOCAL_IP \- get local IP address of last connection
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LOCAL_IP, char **ip);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_LOCAL_IP 3 "May 05, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_LOCAL_IP \- get local IP address of last connection
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LOCAL_IP, char **ip);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_LOCAL_PORT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_LOCAL_PORT 3 "March 16, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_LOCAL_PORT \- get the latest local port number
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LOCAL_PORT, long *portp);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_LOCAL_PORT 3 "March 16, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_LOCAL_PORT \- get the latest local port number
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LOCAL_PORT, long *portp);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_NAMELOOKUP_TIME 3 "August 26, 2019" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_NAMELOOKUP_TIME \- get the name lookup time
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NAMELOOKUP_TIME, double *timep);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_NAMELOOKUP_TIME 3 "August 26, 2019" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_NAMELOOKUP_TIME \- get the name lookup time
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NAMELOOKUP_TIME, double *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME_T.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_NAMELOOKUP_TIME_T 3 "August 26, 2019" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_NAMELOOKUP_TIME_T \- get the name lookup time in microseconds
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NAMELOOKUP_TIME_T, curl_off_t *timep);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_NAMELOOKUP_TIME_T 3 "August 26, 2019" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_NAMELOOKUP_TIME_T \- get the name lookup time in microseconds
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NAMELOOKUP_TIME_T, curl_off_t *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_NUM_CONNECTS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_NUM_CONNECTS 3 "May 06, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_NUM_CONNECTS \- get number of created connections
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NUM_CONNECTS, long *nump);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_NUM_CONNECTS 3 "May 06, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_NUM_CONNECTS \- get number of created connections
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NUM_CONNECTS, long *nump);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_OS_ERRNO.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_OS_ERRNO 3 "November 07, 2018" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_OS_ERRNO \- get errno number from last connect failure
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_OS_ERRNO, long *errnop);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_OS_ERRNO 3 "November 07, 2018" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_OS_ERRNO \- get errno number from last connect failure
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_OS_ERRNO, long *errnop);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PRETRANSFER_TIME 3 "August 26, 2019" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PRETRANSFER_TIME \- get the time until the file transfer start
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRETRANSFER_TIME, double *timep);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PRETRANSFER_TIME 3 "August 26, 2019" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PRETRANSFER_TIME \- get the time until the file transfer start
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRETRANSFER_TIME, double *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME_T.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PRETRANSFER_TIME_T 3 "August 26, 2019" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PRETRANSFER_TIME_T \- get the time until the file transfer start
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRETRANSFER_TIME_T, curl_off_t *timep);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PRETRANSFER_TIME_T 3 "August 26, 2019" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PRETRANSFER_TIME_T \- get the time until the file transfer start
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRETRANSFER_TIME_T, curl_off_t *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PRIMARY_IP.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PRIMARY_IP 3 "March 22, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PRIMARY_IP \- get IP address of last connection
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIMARY_IP, char **ip);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PRIMARY_IP 3 "March 22, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PRIMARY_IP \- get IP address of last connection
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIMARY_IP, char **ip);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PRIMARY_PORT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PRIMARY_PORT 3 "May 06, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PRIMARY_PORT \- get the latest destination port number
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIMARY_PORT, long *portp);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PRIMARY_PORT 3 "May 06, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PRIMARY_PORT \- get the latest destination port number
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIMARY_PORT, long *portp);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PRIVATE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PRIVATE 3 "May 05, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PRIVATE \- get the private pointer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIVATE, char **private);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PRIVATE 3 "May 05, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PRIVATE \- get the private pointer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIVATE, char **private);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PROTOCOL.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PROTOCOL 3 "April 27, 2018" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PROTOCOL \- get the protocol used in the connection
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROTOCOL, long *p);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PROTOCOL 3 "April 27, 2018" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PROTOCOL \- get the protocol used in the connection
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROTOCOL, long *p);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PROXYAUTH_AVAIL 3 "October 07, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PROXYAUTH_AVAIL \- get available HTTP proxy authentication methods
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXYAUTH_AVAIL, long *authp);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PROXYAUTH_AVAIL 3 "October 07, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PROXYAUTH_AVAIL \- get available HTTP proxy authentication methods
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXYAUTH_AVAIL, long *authp);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PROXY_SSL_VERIFYRESULT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PROXY_SSL_VERIFYRESULT 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PROXY_SSL_VERIFYRESULT \- get the result of the proxy certificate verification
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXY_SSL_VERIFYRESULT, long *result);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PROXY_SSL_VERIFYRESULT 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PROXY_SSL_VERIFYRESULT \- get the result of the proxy certificate verification
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXY_SSL_VERIFYRESULT, long *result);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_REDIRECT_COUNT 3 "May 05, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_REDIRECT_COUNT \- get the number of redirects
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_COUNT, long *countp);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_REDIRECT_COUNT 3 "May 05, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_REDIRECT_COUNT \- get the number of redirects
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_COUNT, long *countp);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_REDIRECT_TIME.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_REDIRECT_TIME 3 "May 17, 2018" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_REDIRECT_TIME \- get the time for all redirection steps
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_TIME, double *timep);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_REDIRECT_TIME 3 "May 17, 2018" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_REDIRECT_TIME \- get the time for all redirection steps
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_TIME, double *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_REDIRECT_TIME_T.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_REDIRECT_TIME_T 3 "May 17, 2018" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_REDIRECT_TIME_T \- get the time for all redirection steps
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_TIME_T, curl_off_t *timep);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_REDIRECT_TIME_T 3 "May 17, 2018" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_REDIRECT_TIME_T \- get the time for all redirection steps
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_TIME_T, curl_off_t *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_REDIRECT_URL.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_REDIRECT_URL 3 "June 24, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_REDIRECT_URL \- get the URL a redirect would go to
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_URL, char **urlp);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_REDIRECT_URL 3 "June 24, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_REDIRECT_URL \- get the URL a redirect would go to
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_URL, char **urlp);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_REQUEST_SIZE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_REQUEST_SIZE 3 "May 06, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_REQUEST_SIZE \- get size of sent request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REQUEST_SIZE, long *sizep);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_REQUEST_SIZE 3 "May 06, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_REQUEST_SIZE \- get size of sent request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REQUEST_SIZE, long *sizep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_RESPONSE_CODE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_RESPONSE_CODE 3 "February 03, 2016" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_RESPONSE_CODE \- get the last response code
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RESPONSE_CODE, long *codep);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_RESPONSE_CODE 3 "February 03, 2016" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_RESPONSE_CODE \- get the last response code
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RESPONSE_CODE, long *codep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_RETRY_AFTER.3.
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
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_RETRY_AFTER 3 "August 06, 2019" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_RETRY_AFTER \- returns the Retry-After retry delay
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RETRY_AFTER, curl_off_t *retry);
.SH DESCRIPTION
Pass a pointer to a curl_off_t variable to receive the number of seconds the
HTTP server suggesets the client should wait until the next request is
issued. The information from the "Retry-After:" header.

While the HTTP header might contain a fixed date string, the
\fICURLINFO_RETRY_AFTER(3)\fP will alwaus return number of seconds to wait -
or zero if there was no header or the header couldn't be parsed.
.SH DEFAULT
Returns zero delay if there was no header.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf







|













|







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
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_RETRY_AFTER 3 "February 29, 2020" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_RETRY_AFTER \- returns the Retry-After retry delay
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RETRY_AFTER, curl_off_t *retry);
.SH DESCRIPTION
Pass a pointer to a curl_off_t variable to receive the number of seconds the
HTTP server suggesets the client should wait until the next request is
issued. The information from the "Retry-After:" header.

While the HTTP header might contain a fixed date string, the
\fICURLINFO_RETRY_AFTER(3)\fP will always return number of seconds to wait -
or zero if there was no header or the header couldn't be parsed.
.SH DEFAULT
Returns zero delay if there was no header.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
Changes to jni/curl/docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_RTSP_CLIENT_CSEQ 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_RTSP_CLIENT_CSEQ \- get the next RTSP client CSeq
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_CLIENT_CSEQ, long *cseq);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_RTSP_CLIENT_CSEQ 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_RTSP_CLIENT_CSEQ \- get the next RTSP client CSeq
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_CLIENT_CSEQ, long *cseq);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_RTSP_CSEQ_RECV 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_RTSP_CSEQ_RECV \- get the recently received CSeq
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_CSEQ_RECV, long *cseq);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_RTSP_CSEQ_RECV 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_RTSP_CSEQ_RECV \- get the recently received CSeq
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_CSEQ_RECV, long *cseq);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_RTSP_SERVER_CSEQ 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_RTSP_SERVER_CSEQ \- get the next RTSP server CSeq
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_SERVER_CSEQ, long *cseq);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_RTSP_SERVER_CSEQ 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_RTSP_SERVER_CSEQ \- get the next RTSP server CSeq
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_SERVER_CSEQ, long *cseq);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_RTSP_SESSION_ID 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_RTSP_SESSION_ID \- get RTSP session ID
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_SESSION_ID, char **id);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_RTSP_SESSION_ID 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_RTSP_SESSION_ID \- get RTSP session ID
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_SESSION_ID, char **id);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SCHEME.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SCHEME 3 "April 08, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SCHEME \- get the URL scheme (sometimes called protocol) used in the connection
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SCHEME, char **scheme);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SCHEME 3 "April 08, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SCHEME \- get the URL scheme (sometimes called protocol) used in the connection
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SCHEME, char **scheme);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SIZE_DOWNLOAD 3 "June 15, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SIZE_DOWNLOAD \- get the number of downloaded bytes
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_DOWNLOAD, double *dlp);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SIZE_DOWNLOAD 3 "June 15, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SIZE_DOWNLOAD \- get the number of downloaded bytes
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_DOWNLOAD, double *dlp);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD_T.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SIZE_DOWNLOAD_T 3 "March 31, 2018" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SIZE_DOWNLOAD_T \- get the number of downloaded bytes
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_DOWNLOAD_T, curl_off_t *dlp);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SIZE_DOWNLOAD_T 3 "March 31, 2018" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SIZE_DOWNLOAD_T \- get the number of downloaded bytes
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_DOWNLOAD_T, curl_off_t *dlp);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SIZE_UPLOAD 3 "June 15, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SIZE_UPLOAD \- get the number of uploaded bytes
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_UPLOAD, double *uploadp);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SIZE_UPLOAD 3 "June 15, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SIZE_UPLOAD \- get the number of uploaded bytes
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_UPLOAD, double *uploadp);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD_T.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SIZE_UPLOAD_T 3 "March 31, 2018" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SIZE_UPLOAD_T \- get the number of uploaded bytes
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_UPLOAD_T, curl_off_t *uploadp);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SIZE_UPLOAD_T 3 "March 31, 2018" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SIZE_UPLOAD_T \- get the number of uploaded bytes
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_UPLOAD_T, curl_off_t *uploadp);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SPEED_DOWNLOAD 3 "June 15, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SPEED_DOWNLOAD \- get download speed
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_DOWNLOAD, double *speed);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SPEED_DOWNLOAD 3 "June 15, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SPEED_DOWNLOAD \- get download speed
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_DOWNLOAD, double *speed);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD_T.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SPEED_DOWNLOAD_T 3 "March 31, 2018" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SPEED_DOWNLOAD_T \- get download speed
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_DOWNLOAD_T, curl_off_t *speed);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SPEED_DOWNLOAD_T 3 "March 31, 2018" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SPEED_DOWNLOAD_T \- get download speed
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_DOWNLOAD_T, curl_off_t *speed);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SPEED_UPLOAD 3 "June 15, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SPEED_UPLOAD \- get upload speed
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_UPLOAD, double *speed);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SPEED_UPLOAD 3 "June 15, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SPEED_UPLOAD \- get upload speed
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_UPLOAD, double *speed);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD_T.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SPEED_UPLOAD_T 3 "March 31, 2018" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SPEED_UPLOAD_T \- get upload speed
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_UPLOAD_T, curl_off_t *speed);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SPEED_UPLOAD_T 3 "March 31, 2018" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SPEED_UPLOAD_T \- get upload speed
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_UPLOAD_T, curl_off_t *speed);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SSL_ENGINES.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SSL_ENGINES 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SSL_ENGINES \- get an slist of OpenSSL crypto-engines
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SSL_ENGINES,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SSL_ENGINES 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SSL_ENGINES \- get an slist of OpenSSL crypto-engines
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SSL_ENGINES,
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SSL_VERIFYRESULT 3 "March 21, 2018" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SSL_VERIFYRESULT \- get the result of the certificate verification
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SSL_VERIFYRESULT, long *result);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SSL_VERIFYRESULT 3 "March 21, 2018" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SSL_VERIFYRESULT \- get the result of the certificate verification
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SSL_VERIFYRESULT, long *result);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_STARTTRANSFER_TIME 3 "August 26, 2019" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_STARTTRANSFER_TIME \- get the time until the first byte is received
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_STARTTRANSFER_TIME, double *timep);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_STARTTRANSFER_TIME 3 "August 26, 2019" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_STARTTRANSFER_TIME \- get the time until the first byte is received
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_STARTTRANSFER_TIME, double *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME_T.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_STARTTRANSFER_TIME_T 3 "August 26, 2019" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_STARTTRANSFER_TIME_T \- get the time until the first byte is received
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_STARTTRANSFER_TIME_T, curl_off_t *timep);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_STARTTRANSFER_TIME_T 3 "August 26, 2019" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_STARTTRANSFER_TIME_T \- get the time until the first byte is received
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_STARTTRANSFER_TIME_T, curl_off_t *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_TLS_SESSION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_TLS_SESSION 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_TLS_SESSION \- get TLS session info
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_TLS_SESSION 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_TLS_SESSION \- get TLS session info
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_TLS_SSL_PTR 3 "July 16, 2019" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_TLS_SESSION, CURLINFO_TLS_SSL_PTR \- get TLS session info
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_TLS_SSL_PTR 3 "July 16, 2019" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_TLS_SESSION, CURLINFO_TLS_SSL_PTR \- get TLS session info
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLINFO_TOTAL_TIME.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_TOTAL_TIME 3 "August 26, 2019" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_TOTAL_TIME \- get total time of previous transfer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TOTAL_TIME, double *timep);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_TOTAL_TIME 3 "August 26, 2019" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_TOTAL_TIME \- get total time of previous transfer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TOTAL_TIME, double *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_TOTAL_TIME_T.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_TOTAL_TIME_T 3 "August 26, 2019" "libcurl 7.68.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_TOTAL_TIME_T \- get total time of previous transfer in microseconds
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TOTAL_TIME_T, curl_off_t *timep);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_TOTAL_TIME_T 3 "August 26, 2019" "libcurl 7.69.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_TOTAL_TIME_T \- get total time of previous transfer in microseconds
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TOTAL_TIME_T, curl_off_t *timep);
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE 3 "April 05, 2019" "libcurl 7.68.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE \- chunk length threshold for pipelining
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, long size);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE 3 "April 05, 2019" "libcurl 7.69.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE \- chunk length threshold for pipelining
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, long size);
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE 3 "April 05, 2019" "libcurl 7.68.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE \- size threshold for pipelining penalty
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, long size);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE 3 "April 05, 2019" "libcurl 7.69.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE \- size threshold for pipelining penalty
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, long size);
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_MAXCONNECTS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_MAXCONNECTS 3 "September 23, 2018" "libcurl 7.68.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_MAXCONNECTS \- set size of connection cache
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAXCONNECTS, long max);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_MAXCONNECTS 3 "September 23, 2018" "libcurl 7.69.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_MAXCONNECTS \- set size of connection cache
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAXCONNECTS, long max);
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_MAX_HOST_CONNECTIONS 3 "May 27, 2017" "libcurl 7.68.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_MAX_HOST_CONNECTIONS \- set max number of connections to a single host
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_HOST_CONNECTIONS, long max);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_MAX_HOST_CONNECTIONS 3 "May 27, 2017" "libcurl 7.69.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_MAX_HOST_CONNECTIONS \- set max number of connections to a single host
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_HOST_CONNECTIONS, long max);
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_MAX_PIPELINE_LENGTH 3 "April 05, 2019" "libcurl 7.68.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_MAX_PIPELINE_LENGTH \- maximum number of requests in a pipeline
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_PIPELINE_LENGTH, long max);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_MAX_PIPELINE_LENGTH 3 "April 05, 2019" "libcurl 7.69.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_MAX_PIPELINE_LENGTH \- maximum number of requests in a pipeline
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_PIPELINE_LENGTH, long max);
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_MAX_TOTAL_CONNECTIONS 3 "May 27, 2017" "libcurl 7.68.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_MAX_TOTAL_CONNECTIONS \- max simultaneously open connections
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_TOTAL_CONNECTIONS, long amount);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_MAX_TOTAL_CONNECTIONS 3 "May 27, 2017" "libcurl 7.69.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_MAX_TOTAL_CONNECTIONS \- max simultaneously open connections
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_TOTAL_CONNECTIONS, long amount);
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_PIPELINING.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_PIPELINING 3 "April 05, 2019" "libcurl 7.68.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_PIPELINING \- enable HTTP pipelining and multiplexing
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING, long bitmask);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_PIPELINING 3 "April 05, 2019" "libcurl 7.69.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_PIPELINING \- enable HTTP pipelining and multiplexing
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING, long bitmask);
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_PIPELINING_SERVER_BL 3 "April 05, 2019" "libcurl 7.68.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_PIPELINING_SERVER_BL \- pipelining server blacklist
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING_SERVER_BL, char **servers);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_PIPELINING_SERVER_BL 3 "April 05, 2019" "libcurl 7.69.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_PIPELINING_SERVER_BL \- pipelining server blacklist
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING_SERVER_BL, char **servers);
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_PIPELINING_SITE_BL 3 "April 05, 2019" "libcurl 7.68.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_PIPELINING_SITE_BL \- pipelining host blacklist
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING_SITE_BL, char **hosts);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_PIPELINING_SITE_BL 3 "April 05, 2019" "libcurl 7.69.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_PIPELINING_SITE_BL \- pipelining host blacklist
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING_SITE_BL, char **hosts);
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_PUSHDATA.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_PUSHDATA 3 "May 27, 2017" "libcurl 7.68.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_PUSHDATA \- pointer to pass to push callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_PUSHDATA 3 "May 27, 2017" "libcurl 7.69.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_PUSHDATA \- pointer to pass to push callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_PUSHFUNCTION 3 "February 03, 2016" "libcurl 7.68.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_PUSHFUNCTION \- callback that approves or denies server pushes
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_PUSHFUNCTION 3 "February 03, 2016" "libcurl 7.69.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_PUSHFUNCTION \- callback that approves or denies server pushes
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLMOPT_SOCKETDATA.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_SOCKETDATA 3 "May 31, 2017" "libcurl 7.68.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_SOCKETDATA \- custom pointer passed to the socket callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_SOCKETDATA 3 "May 31, 2017" "libcurl 7.69.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_SOCKETDATA \- custom pointer passed to the socket callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_SOCKETFUNCTION 3 "June 24, 2019" "libcurl 7.68.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_SOCKETFUNCTION \- callback informed about what to wait for
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_SOCKETFUNCTION 3 "June 24, 2019" "libcurl 7.69.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_SOCKETFUNCTION \- callback informed about what to wait for
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLMOPT_TIMERDATA.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_TIMERDATA 3 "May 27, 2017" "libcurl 7.68.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_TIMERDATA \- custom pointer to pass to timer callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_TIMERDATA 3 "May 27, 2017" "libcurl 7.69.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_TIMERDATA \- custom pointer to pass to timer callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_TIMERFUNCTION 3 "May 03, 2019" "libcurl 7.68.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_TIMERFUNCTION \- set callback to receive timeout values
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_TIMERFUNCTION 3 "May 03, 2019" "libcurl 7.69.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_TIMERFUNCTION \- set callback to receive timeout values
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_ABSTRACT_UNIX_SOCKET.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ABSTRACT_UNIX_SOCKET 3 "January 09, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ABSTRACT_UNIX_SOCKET \- set an abstract Unix domain socket
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ABSTRACT_UNIX_SOCKET, char *path);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ABSTRACT_UNIX_SOCKET 3 "January 09, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ABSTRACT_UNIX_SOCKET \- set an abstract Unix domain socket
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ABSTRACT_UNIX_SOCKET, char *path);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ACCEPTTIMEOUT_MS 3 "March 06, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ACCEPTTIMEOUT_MS \- timeout waiting for FTP server to connect back
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ACCEPTTIMEOUT_MS, long ms);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ACCEPTTIMEOUT_MS 3 "March 06, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ACCEPTTIMEOUT_MS \- timeout waiting for FTP server to connect back
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ACCEPTTIMEOUT_MS, long ms);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ACCEPT_ENCODING 3 "August 27, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ACCEPT_ENCODING \- enables automatic decompression of HTTP downloads
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ACCEPT_ENCODING, char *enc);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ACCEPT_ENCODING 3 "August 27, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ACCEPT_ENCODING \- enables automatic decompression of HTTP downloads
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ACCEPT_ENCODING, char *enc);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ADDRESS_SCOPE 3 "March 07, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ADDRESS_SCOPE \- set scope id for IPv6 addresses
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ADDRESS_SCOPE, long scope);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ADDRESS_SCOPE 3 "March 07, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ADDRESS_SCOPE \- set scope id for IPv6 addresses
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ADDRESS_SCOPE, long scope);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_ALTSVC.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ALTSVC 3 "August 14, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ALTSVC \- set alt-svc cache file name
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ALTSVC 3 "August 14, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ALTSVC \- set alt-svc cache file name
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_ALTSVC_CTRL.3.
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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ALTSVC_CTRL 3 "August 13, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ALTSVC_CTRL \- control alt-svc behavior
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|














|







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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ALTSVC_CTRL 3 "February 11, 2020" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ALTSVC_CTRL \- control alt-svc behavior
.SH SYNOPSIS
.nf
#include <curl/curl.h>

66
67
68
69
70
71
72
73



74
75
76
77
78
79
80
libcurl was also built to actually support HTTP/2, otherwise this bit will be
ignored.
.IP "CURLALTSVC_H3"
Accept alternative services offered over HTTP/3. This will only be used if
libcurl was also built to actually support HTTP/3, otherwise this bit will be
ignored.
.SH DEFAULT
0. No Alt-Svc treatment.



.SH PROTOCOLS
HTTPS
.SH EXAMPLE
.nf
CURL *curl = curl_easy_init();
if(curl) {
  curl_easy_setopt(curl, CURLOPT_ALTSVC_CTRL, CURLALTSVC_H1);







|
>
>
>







66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
libcurl was also built to actually support HTTP/2, otherwise this bit will be
ignored.
.IP "CURLALTSVC_H3"
Accept alternative services offered over HTTP/3. This will only be used if
libcurl was also built to actually support HTTP/3, otherwise this bit will be
ignored.
.SH DEFAULT
Alt-Svc handling is disabled by default. If \fICURLOPT_ALTSVC(3)\fP is set,
\fICURLOPT_ALTSVC_CTRL(3)\fP has a default value corresponding to
CURLALTSVC_H1 | CURLALTSVC_H2 | CURLALTSVC_H3 - the HTTP/2 and HTTP/3 bits are
only set if libcurl was built with support for those versions.
.SH PROTOCOLS
HTTPS
.SH EXAMPLE
.nf
CURL *curl = curl_easy_init();
if(curl) {
  curl_easy_setopt(curl, CURLOPT_ALTSVC_CTRL, CURLALTSVC_H1);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_APPEND.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_APPEND 3 "March 06, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_APPEND \- enable appending to the remote file
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_APPEND, long append);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_APPEND 3 "March 06, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_APPEND \- enable appending to the remote file
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_APPEND, long append);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_AUTOREFERER.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_AUTOREFERER 3 "May 05, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_AUTOREFERER \- automatically update the referer header
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_AUTOREFERER, long autorefer);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_AUTOREFERER 3 "May 05, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_AUTOREFERER \- automatically update the referer header
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_AUTOREFERER, long autorefer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_BUFFERSIZE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_BUFFERSIZE 3 "May 13, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_BUFFERSIZE \- set preferred receive buffer size
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_BUFFERSIZE, long size);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_BUFFERSIZE 3 "May 13, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_BUFFERSIZE \- set preferred receive buffer size
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_BUFFERSIZE, long size);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CAINFO.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CAINFO 3 "June 10, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CAINFO \- path to Certificate Authority (CA) bundle
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CAINFO, char *path);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CAINFO 3 "June 10, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CAINFO \- path to Certificate Authority (CA) bundle
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CAINFO, char *path);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CAPATH.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CAPATH 3 "September 10, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CAPATH \- specify directory holding CA certificates
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CAPATH, char *capath);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CAPATH 3 "September 10, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CAPATH \- specify directory holding CA certificates
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CAPATH, char *capath);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CERTINFO.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CERTINFO 3 "January 29, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CERTINFO \- request SSL certificate information
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CERTINFO, long certinfo);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CERTINFO 3 "January 29, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CERTINFO \- request SSL certificate information
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CERTINFO, long certinfo);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CHUNK_BGN_FUNCTION 3 "May 03, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CHUNK_BGN_FUNCTION \- callback before a transfer with FTP wildcardmatch
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CHUNK_BGN_FUNCTION 3 "May 03, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CHUNK_BGN_FUNCTION \- callback before a transfer with FTP wildcardmatch
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_CHUNK_DATA.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CHUNK_DATA 3 "November 07, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CHUNK_DATA \- custom pointer to the FTP chunk callbacks
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CHUNK_DATA, void *pointer);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CHUNK_DATA 3 "November 07, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CHUNK_DATA \- custom pointer to the FTP chunk callbacks
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CHUNK_DATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CHUNK_END_FUNCTION 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CHUNK_END_FUNCTION \- callback after a transfer with FTP wildcardmatch
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CHUNK_END_FUNCTION 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CHUNK_END_FUNCTION \- callback after a transfer with FTP wildcardmatch
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CLOSESOCKETDATA 3 "November 07, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CLOSESOCKETDATA \- pointer passed to the socket close callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CLOSESOCKETDATA, void *pointer);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CLOSESOCKETDATA 3 "November 07, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CLOSESOCKETDATA \- pointer passed to the socket close callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CLOSESOCKETDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CLOSESOCKETFUNCTION 3 "November 07, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CLOSESOCKETFUNCTION \- callback to socket close replacement function
.SH SYNOPSIS
#include <curl/curl.h>

int closesocket_callback(void *clientp, curl_socket_t item);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CLOSESOCKETFUNCTION 3 "November 07, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CLOSESOCKETFUNCTION \- callback to socket close replacement function
.SH SYNOPSIS
#include <curl/curl.h>

int closesocket_callback(void *clientp, curl_socket_t item);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CONNECTTIMEOUT 3 "October 03, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CONNECTTIMEOUT \- timeout for the connect phase
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECTTIMEOUT, long timeout);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CONNECTTIMEOUT 3 "October 03, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CONNECTTIMEOUT \- timeout for the connect phase
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECTTIMEOUT, long timeout);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CONNECTTIMEOUT_MS 3 "September 23, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CONNECTTIMEOUT_MS \- timeout for the connect phase
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECTTIMEOUT_MS, long timeout);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CONNECTTIMEOUT_MS 3 "September 23, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CONNECTTIMEOUT_MS \- timeout for the connect phase
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECTTIMEOUT_MS, long timeout);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CONNECT_ONLY 3 "February 18, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CONNECT_ONLY \- stop when connected to target server
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECT_ONLY, long only);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CONNECT_ONLY 3 "February 18, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CONNECT_ONLY \- stop when connected to target server
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECT_ONLY, long only);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CONNECT_TO.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CONNECT_TO 3 "May 05, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CONNECT_TO \- Connect to a specific host and port instead of the URL's host and port
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CONNECT_TO 3 "May 05, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CONNECT_TO \- Connect to a specific host and port instead of the URL's host and port
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CONV_FROM_NETWORK_FUNCTION 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CONV_FROM_NETWORK_FUNCTION \- convert data from network to host encoding
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CONV_FROM_NETWORK_FUNCTION 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CONV_FROM_NETWORK_FUNCTION \- convert data from network to host encoding
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CONV_FROM_UTF8_FUNCTION 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CONV_FROM_UTF8_FUNCTION \- convert data from UTF8 to host encoding
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CONV_FROM_UTF8_FUNCTION 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CONV_FROM_UTF8_FUNCTION \- convert data from UTF8 to host encoding
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CONV_TO_NETWORK_FUNCTION 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CONV_TO_NETWORK_FUNCTION \- convert data to network from host encoding
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CONV_TO_NETWORK_FUNCTION 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CONV_TO_NETWORK_FUNCTION \- convert data to network from host encoding
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_COOKIE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_COOKIE 3 "December 21, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_COOKIE \- set contents of HTTP Cookie header
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIE, char *cookie);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_COOKIE 3 "December 21, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_COOKIE \- set contents of HTTP Cookie header
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIE, char *cookie);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_COOKIEFILE.3.
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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_COOKIEFILE 3 "March 13, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_COOKIEFILE \- file name to read cookies from
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIEFILE, char *filename);







|














|







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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_COOKIEFILE 3 "January 10, 2020" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_COOKIEFILE \- file name to read cookies from
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIEFILE, char *filename);
72
73
74
75
76
77
78




79
80
81
82
83
84
  curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookies.txt");

  ret = curl_easy_perform(curl);

  curl_easy_cleanup(curl);
}
.fi




.SH AVAILABILITY
As long as HTTP is supported
.SH RETURN VALUE
Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
.BR CURLOPT_COOKIE "(3), " CURLOPT_COOKIEJAR "(3), "







>
>
>
>






72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
  curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookies.txt");

  ret = curl_easy_perform(curl);

  curl_easy_cleanup(curl);
}
.fi
.SH "Cookie file format"
The cookie file format and general cookie concepts in curl are described in
the HTTP-COOKIES.md file, also hosted online here:
https://curl.haxx.se/docs/http-cookies.html
.SH AVAILABILITY
As long as HTTP is supported
.SH RETURN VALUE
Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
.BR CURLOPT_COOKIE "(3), " CURLOPT_COOKIEJAR "(3), "
Changes to jni/curl/docs/libcurl/opts/CURLOPT_COOKIEJAR.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_COOKIEJAR 3 "May 05, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_COOKIEJAR \- file name to store cookies to
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIEJAR, char *filename);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_COOKIEJAR 3 "May 05, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_COOKIEJAR \- file name to store cookies to
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIEJAR, char *filename);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_COOKIELIST.3.
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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_COOKIELIST 3 "April 26, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_COOKIELIST \- add to or manipulate cookies held in memory
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|














|







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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_COOKIELIST 3 "January 10, 2020" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_COOKIELIST \- add to or manipulate cookies held in memory
.SH SYNOPSIS
.nf
#include <curl/curl.h>

101
102
103
104
105
106
107




108
109
110
111
112
113
114
*/
curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookies.txt");  /* export */

curl_easy_perform(curl);  /* cookies imported from cookies.txt */

curl_easy_cleanup(curl);  /* cookies exported to cookies.txt */
.fi




.SH AVAILABILITY
ALL was added in 7.14.1

SESS was added in 7.15.4

FLUSH was added in 7.17.1








>
>
>
>







101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
*/
curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookies.txt");  /* export */

curl_easy_perform(curl);  /* cookies imported from cookies.txt */

curl_easy_cleanup(curl);  /* cookies exported to cookies.txt */
.fi
.SH "Cookie file format"
The cookie file format and general cookie concepts in curl are described in
the HTTP-COOKIES.md file, also hosted online here:
https://curl.haxx.se/docs/http-cookies.html
.SH AVAILABILITY
ALL was added in 7.14.1

SESS was added in 7.15.4

FLUSH was added in 7.17.1

Changes to jni/curl/docs/libcurl/opts/CURLOPT_COOKIESESSION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_COOKIESESSION 3 "May 05, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_COOKIESESSION \- start a new cookie session
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIESESSION, long init);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_COOKIESESSION 3 "May 05, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_COOKIESESSION \- start a new cookie session
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIESESSION, long init);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_COPYPOSTFIELDS 3 "February 03, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_COPYPOSTFIELDS \- have libcurl copy data to POST
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COPYPOSTFIELDS, char *data);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_COPYPOSTFIELDS 3 "February 03, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_COPYPOSTFIELDS \- have libcurl copy data to POST
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COPYPOSTFIELDS, char *data);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CRLF.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CRLF 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CRLF \- enable/disable CRLF conversion
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CRLF, long conv);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CRLF 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CRLF \- enable/disable CRLF conversion
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CRLF, long conv);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CRLFILE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CRLFILE 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CRLFILE \- specify a Certificate Revocation List file
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CRLFILE, char *file);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CRLFILE 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CRLFILE \- specify a Certificate Revocation List file
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CRLFILE, char *file);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CURLU.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CURLU 3 "October 31, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CURLU \- set URL with CURLU *
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CURLU, void *pointer);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CURLU 3 "October 31, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CURLU \- set URL with CURLU *
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CURLU, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CUSTOMREQUEST 3 "April 17, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CUSTOMREQUEST \- custom string for request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CUSTOMREQUEST, char *request);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CUSTOMREQUEST 3 "April 17, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CUSTOMREQUEST \- custom string for request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CUSTOMREQUEST, char *request);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DEBUGDATA.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DEBUGDATA 3 "February 03, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DEBUGDATA \- custom pointer for debug callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEBUGDATA, void *pointer);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DEBUGDATA 3 "February 03, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DEBUGDATA \- custom pointer for debug callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEBUGDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DEBUGFUNCTION 3 "October 06, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DEBUGFUNCTION \- debug callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DEBUGFUNCTION 3 "October 06, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DEBUGFUNCTION \- debug callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DEFAULT_PROTOCOL 3 "December 21, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DEFAULT_PROTOCOL \- default protocol to use if the URL is missing a
scheme name
.SH SYNOPSIS
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DEFAULT_PROTOCOL 3 "December 21, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DEFAULT_PROTOCOL \- default protocol to use if the URL is missing a
scheme name
.SH SYNOPSIS
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_DIRLISTONLY.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DIRLISTONLY 3 "May 05, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DIRLISTONLY \- ask for names only in a directory listing
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DIRLISTONLY, long listonly);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DIRLISTONLY 3 "May 05, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DIRLISTONLY \- ask for names only in a directory listing
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DIRLISTONLY, long listonly);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DISALLOW_USERNAME_IN_URL.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DISALLOW_USERNAME_IN_URL 3 "February 25, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DISALLOW_USERNAME_IN_URL \- disallow specifying username in the url
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DISALLOW_USERNAME_IN_URL, long disallow);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DISALLOW_USERNAME_IN_URL 3 "February 25, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DISALLOW_USERNAME_IN_URL \- disallow specifying username in the url
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DISALLOW_USERNAME_IN_URL, long disallow);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DNS_CACHE_TIMEOUT 3 "December 09, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DNS_CACHE_TIMEOUT \- set life-time for DNS cache entries
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_CACHE_TIMEOUT, long age);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DNS_CACHE_TIMEOUT 3 "December 09, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DNS_CACHE_TIMEOUT \- set life-time for DNS cache entries
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_CACHE_TIMEOUT, long age);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DNS_INTERFACE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DNS_INTERFACE 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DNS_INTERFACE \- set interface to speak DNS over
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_INTERFACE, char *ifname);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DNS_INTERFACE 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DNS_INTERFACE \- set interface to speak DNS over
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_INTERFACE, char *ifname);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DNS_LOCAL_IP4 3 "December 10, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DNS_LOCAL_IP4 \- IPv4 address to bind DNS resolves to
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_LOCAL_IP4, char *address);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DNS_LOCAL_IP4 3 "December 10, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DNS_LOCAL_IP4 \- IPv4 address to bind DNS resolves to
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_LOCAL_IP4, char *address);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DNS_LOCAL_IP6 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DNS_LOCAL_IP6 \- IPv6 address to bind DNS resolves to
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_LOCAL_IP6, char *address);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DNS_LOCAL_IP6 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DNS_LOCAL_IP6 \- IPv6 address to bind DNS resolves to
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_LOCAL_IP6, char *address);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DNS_SERVERS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DNS_SERVERS 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DNS_SERVERS \- set preferred DNS servers
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_SERVERS, char *servers);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DNS_SERVERS 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DNS_SERVERS \- set preferred DNS servers
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_SERVERS, char *servers);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DNS_SHUFFLE_ADDRESSES.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DNS_SHUFFLE_ADDRESSES 3 "March 17, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DNS_SHUFFLE_ADDRESSES \- Shuffle addresses when a hostname returns more than one
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DNS_SHUFFLE_ADDRESSES 3 "March 17, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DNS_SHUFFLE_ADDRESSES \- Shuffle addresses when a hostname returns more than one
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DNS_USE_GLOBAL_CACHE 3 "March 07, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DNS_USE_GLOBAL_CACHE \- enable/disable global DNS cache
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_USE_GLOBAL_CACHE,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DNS_USE_GLOBAL_CACHE 3 "March 07, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DNS_USE_GLOBAL_CACHE \- enable/disable global DNS cache
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_USE_GLOBAL_CACHE,
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DOH_URL.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DOH_URL 3 "September 06, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DOH_URL \- provide the DNS-over-HTTPS URL
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DOH_URL, char *URL);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DOH_URL 3 "September 06, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DOH_URL \- provide the DNS-over-HTTPS URL
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DOH_URL, char *URL);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_EGDSOCKET.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_EGDSOCKET 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_EGDSOCKET \- set EGD socket path
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_EGDSOCKET, char *path);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_EGDSOCKET 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_EGDSOCKET \- set EGD socket path
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_EGDSOCKET, char *path);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_ERRORBUFFER.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ERRORBUFFER 3 "March 13, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ERRORBUFFER \- set error buffer for error messages
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ERRORBUFFER, char *buf);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ERRORBUFFER 3 "March 13, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ERRORBUFFER \- set error buffer for error messages
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ERRORBUFFER, char *buf);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_EXPECT_100_TIMEOUT_MS 3 "April 17, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_EXPECT_100_TIMEOUT_MS \- timeout for Expect: 100-continue response
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_EXPECT_100_TIMEOUT_MS 3 "April 17, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_EXPECT_100_TIMEOUT_MS \- timeout for Expect: 100-continue response
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_FAILONERROR.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FAILONERROR 3 "April 17, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FAILONERROR \- request failure on HTTP response >= 400
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FAILONERROR, long fail);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FAILONERROR 3 "April 17, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FAILONERROR \- request failure on HTTP response >= 400
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FAILONERROR, long fail);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FILETIME.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FILETIME 3 "April 03, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FILETIME \- get the modification time of the remote resource
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FILETIME, long gettime);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FILETIME 3 "April 03, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FILETIME \- get the modification time of the remote resource
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FILETIME, long gettime);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FNMATCH_DATA.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FNMATCH_DATA 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FNMATCH_DATA \- custom pointer to fnmatch callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FNMATCH_DATA 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FNMATCH_DATA \- custom pointer to fnmatch callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FNMATCH_FUNCTION 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FNMATCH_FUNCTION \- wildcard matching function callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FNMATCH_FUNCTION 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FNMATCH_FUNCTION \- wildcard matching function callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.3.
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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FOLLOWLOCATION 3 "October 31, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FOLLOWLOCATION \- follow HTTP 3xx redirects
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FOLLOWLOCATION, long enable);







|














|







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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FOLLOWLOCATION 3 "January 28, 2020" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FOLLOWLOCATION \- follow HTTP 3xx redirects
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FOLLOWLOCATION, long enable);
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
will allow HTTP, HTTPS, FTP and FTPS on redirect (7.65.2). Older versions of
libcurl allowed all protocols on redirect except those disabled for security
reasons: Since 7.19.4 FILE and SCP are disabled, and since 7.40.0 SMB and SMBS
are also disabled.

When following a Location:, the 3xx response code that redirected it also
dictates which request method it will use in the subsequent request: For 301,
302 and 303 responses libcurl will switch method to GET unless
\fICURLOPT_POSTREDIR(3)\fP instructs libcurl otherwise. All other 3xx codes
will make libcurl send the same method again.

For users who think the existing location following is too naive, too simple
or just lacks features, it is very easy to instead implement your own redirect
follow logic with the use of \fIcurl_easy_getinfo(3)\fP's
\fICURLINFO_REDIRECT_URL(3)\fP option instead of using







|







43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
will allow HTTP, HTTPS, FTP and FTPS on redirect (7.65.2). Older versions of
libcurl allowed all protocols on redirect except those disabled for security
reasons: Since 7.19.4 FILE and SCP are disabled, and since 7.40.0 SMB and SMBS
are also disabled.

When following a Location:, the 3xx response code that redirected it also
dictates which request method it will use in the subsequent request: For 301,
302 and 303 responses libcurl will switch method from POST to GET unless
\fICURLOPT_POSTREDIR(3)\fP instructs libcurl otherwise. All other 3xx codes
will make libcurl send the same method again.

For users who think the existing location following is too naive, too simple
or just lacks features, it is very easy to instead implement your own redirect
follow logic with the use of \fIcurl_easy_getinfo(3)\fP's
\fICURLINFO_REDIRECT_URL(3)\fP option instead of using
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FORBID_REUSE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FORBID_REUSE 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FORBID_REUSE \- make connection get closed at once after use
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FORBID_REUSE, long close);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FORBID_REUSE 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FORBID_REUSE \- make connection get closed at once after use
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FORBID_REUSE, long close);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FRESH_CONNECT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FRESH_CONNECT 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FRESH_CONNECT \- force a new connection to be used
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FRESH_CONNECT, long fresh);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FRESH_CONNECT 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FRESH_CONNECT \- force a new connection to be used
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FRESH_CONNECT, long fresh);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTPPORT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTPPORT 3 "May 30, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTPPORT \- make FTP transfer active
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTPPORT, char *spec);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTPPORT 3 "May 30, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTPPORT \- make FTP transfer active
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTPPORT, char *spec);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTPSSLAUTH.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTPSSLAUTH 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTPSSLAUTH \- set order in which to attempt TLS vs SSL when using FTP
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTPSSLAUTH, long order);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTPSSLAUTH 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTPSSLAUTH \- set order in which to attempt TLS vs SSL when using FTP
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTPSSLAUTH, long order);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_ACCOUNT 3 "May 05, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_ACCOUNT \- set account info for FTP
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_ACCOUNT, char *account);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_ACCOUNT 3 "May 05, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_ACCOUNT \- set account info for FTP
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_ACCOUNT, char *account);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_ALTERNATIVE_TO_USER 3 "May 05, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_ALTERNATIVE_TO_USER \- command to use instead of USER with FTP
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_ALTERNATIVE_TO_USER 3 "May 05, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_ALTERNATIVE_TO_USER \- command to use instead of USER with FTP
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_CREATE_MISSING_DIRS 3 "May 05, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_CREATE_MISSING_DIRS \- create missing dirs for FTP and SFTP
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_CREATE_MISSING_DIRS 3 "May 05, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_CREATE_MISSING_DIRS \- create missing dirs for FTP and SFTP
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_FILEMETHOD 3 "May 05, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_FILEMETHOD \- select directory traversing method for FTP
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_FILEMETHOD 3 "May 05, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_FILEMETHOD \- select directory traversing method for FTP
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_RESPONSE_TIMEOUT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_RESPONSE_TIMEOUT 3 "October 03, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_RESPONSE_TIMEOUT \- time allowed to wait for FTP response
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_RESPONSE_TIMEOUT, long timeout);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_RESPONSE_TIMEOUT 3 "October 03, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_RESPONSE_TIMEOUT \- time allowed to wait for FTP response
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_RESPONSE_TIMEOUT, long timeout);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_SKIP_PASV_IP 3 "May 05, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_SKIP_PASV_IP \- ignore the IP address in the PASV response
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_SKIP_PASV_IP, long skip);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_SKIP_PASV_IP 3 "May 05, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_SKIP_PASV_IP \- ignore the IP address in the PASV response
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_SKIP_PASV_IP, long skip);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_SSL_CCC 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_SSL_CCC \- switch off SSL again with FTP after auth
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_SSL_CCC,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_SSL_CCC 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_SSL_CCC \- switch off SSL again with FTP after auth
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_SSL_CCC,
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_USE_EPRT 3 "February 03, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_USE_EPRT \- enable/disable use of EPRT with FTP
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_USE_EPRT, long enabled);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_USE_EPRT 3 "February 03, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_USE_EPRT \- enable/disable use of EPRT with FTP
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_USE_EPRT, long enabled);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_USE_EPSV 3 "May 05, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_USE_EPSV \- enable/disable use of EPSV
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_USE_EPSV, long epsv);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_USE_EPSV 3 "May 05, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_USE_EPSV \- enable/disable use of EPSV
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_USE_EPSV, long epsv);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_USE_PRET.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_USE_PRET 3 "May 05, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_USE_PRET \- enable the PRET command
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_USE_PRET, long enable);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_USE_PRET 3 "May 05, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_USE_PRET \- enable the PRET command
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_USE_PRET, long enable);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_GSSAPI_DELEGATION 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_GSSAPI_DELEGATION \- set allowed GSS-API delegation
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_GSSAPI_DELEGATION, long level);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_GSSAPI_DELEGATION 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_GSSAPI_DELEGATION \- set allowed GSS-API delegation
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_GSSAPI_DELEGATION, long level);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS 3 "February 21, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS \- head start for ipv6 for happy eyeballs
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS, long timeout);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS 3 "February 21, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS \- head start for ipv6 for happy eyeballs
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS, long timeout);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HAPROXYPROTOCOL.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HAPROXYPROTOCOL 3 "May 18, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HAPROXYPROTOCOL \- send HAProxy PROXY protocol v1 header
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HAPROXYPROTOCOL,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HAPROXYPROTOCOL 3 "May 18, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HAPROXYPROTOCOL \- send HAProxy PROXY protocol v1 header
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HAPROXYPROTOCOL,
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HEADER.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HEADER 3 "October 03, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HEADER \- pass headers to the data stream
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADER, long onoff);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HEADER 3 "October 03, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HEADER \- pass headers to the data stream
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADER, long onoff);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HEADERDATA.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HEADERDATA 3 "May 05, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HEADERDATA \- pointer to pass to header callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADERDATA, void *pointer);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HEADERDATA 3 "May 05, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HEADERDATA \- pointer to pass to header callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADERDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HEADERFUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HEADERFUNCTION 3 "December 26, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HEADERFUNCTION \- callback that receives header data
.SH SYNOPSIS
#include <curl/curl.h>

size_t header_callback(char *buffer,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HEADERFUNCTION 3 "December 26, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HEADERFUNCTION \- callback that receives header data
.SH SYNOPSIS
#include <curl/curl.h>

size_t header_callback(char *buffer,
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HEADEROPT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HEADEROPT 3 "October 31, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HEADEROPT \- set how to send HTTP headers
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADEROPT, long bitmask);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HEADEROPT 3 "October 31, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HEADEROPT \- set how to send HTTP headers
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADEROPT, long bitmask);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTP09_ALLOWED.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTP09_ALLOWED 3 "August 05, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTP09 \- allow HTTP/0.9 response
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP09_ALLOWED, long allowed);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTP09_ALLOWED 3 "August 05, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTP09 \- allow HTTP/0.9 response
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP09_ALLOWED, long allowed);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTP200ALIASES.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTP200ALIASES 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTP200ALIASES \- specify alternative matches for HTTP 200 OK
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTP200ALIASES 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTP200ALIASES \- specify alternative matches for HTTP 200 OK
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTPAUTH.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTPAUTH 3 "June 15, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTPAUTH \- set HTTP server authentication methods to try
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTPAUTH 3 "June 15, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTPAUTH \- set HTTP server authentication methods to try
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTPGET.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTPGET 3 "May 21, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTPGET \- ask for an HTTP GET request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPGET, long useget);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTPGET 3 "May 21, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTPGET \- ask for an HTTP GET request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPGET, long useget);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTPHEADER.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTPHEADER 3 "December 30, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTPHEADER \- set custom HTTP headers
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPHEADER, struct curl_slist *headers);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTPHEADER 3 "December 30, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTPHEADER \- set custom HTTP headers
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPHEADER, struct curl_slist *headers);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTPPOST.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTPPOST 3 "September 02, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTPPOST \- specify the multipart formpost content
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTPPOST 3 "September 02, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTPPOST \- specify the multipart formpost content
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTPPROXYTUNNEL 3 "April 17, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTPPROXYTUNNEL \- tunnel through HTTP proxy
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPPROXYTUNNEL, long tunnel);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTPPROXYTUNNEL 3 "April 17, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTPPROXYTUNNEL \- tunnel through HTTP proxy
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPPROXYTUNNEL, long tunnel);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTP_CONTENT_DECODING 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTP_CONTENT_DECODING \- enable/disable HTTP content decoding
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTP_CONTENT_DECODING 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTP_CONTENT_DECODING \- enable/disable HTTP content decoding
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTP_TRANSFER_DECODING 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTP_TRANSFER_DECODING \- enable/disable HTTP transfer decoding
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTP_TRANSFER_DECODING 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTP_TRANSFER_DECODING \- enable/disable HTTP transfer decoding
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTP_VERSION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTP_VERSION 3 "September 14, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTP_VERSION \- specify HTTP protocol version to use
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP_VERSION, long version);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTP_VERSION 3 "September 14, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTP_VERSION \- specify HTTP protocol version to use
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP_VERSION, long version);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_IGNORE_CONTENT_LENGTH 3 "February 03, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_IGNORE_CONTENT_LENGTH \- ignore content length
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_IGNORE_CONTENT_LENGTH 3 "February 03, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_IGNORE_CONTENT_LENGTH \- ignore content length
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_INFILESIZE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_INFILESIZE 3 "February 03, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_INFILESIZE \- set size of the input file to send off
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INFILESIZE, long filesize);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_INFILESIZE 3 "February 03, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_INFILESIZE \- set size of the input file to send off
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INFILESIZE, long filesize);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_INFILESIZE_LARGE 3 "September 23, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_INFILESIZE_LARGE \- set size of the input file to send off
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_INFILESIZE_LARGE 3 "September 23, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_INFILESIZE_LARGE \- set size of the input file to send off
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_INTERFACE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_INTERFACE 3 "June 18, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_INTERFACE \- source interface for outgoing traffic
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INTERFACE, char *interface);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_INTERFACE 3 "June 18, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_INTERFACE \- source interface for outgoing traffic
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INTERFACE, char *interface);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_INTERLEAVEDATA 3 "September 15, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_INTERLEAVEDATA \- custom pointer passed to RTSP interleave callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INTERLEAVEDATA, void *pointer);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_INTERLEAVEDATA 3 "September 15, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_INTERLEAVEDATA \- custom pointer passed to RTSP interleave callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INTERLEAVEDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_INTERLEAVEFUNCTION 3 "August 11, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_INTERLEAVEFUNCTION \- callback function for RTSP interleaved data
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_INTERLEAVEFUNCTION 3 "August 11, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_INTERLEAVEFUNCTION \- callback function for RTSP interleaved data
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_IOCTLDATA.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_IOCTLDATA 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_IOCTLDATA \- custom pointer passed to I/O callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IOCTLDATA, void *pointer);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_IOCTLDATA 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_IOCTLDATA \- custom pointer passed to I/O callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IOCTLDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_IOCTLFUNCTION 3 "April 17, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_IOCTLFUNCTION \- callback for I/O operations
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_IOCTLFUNCTION 3 "April 17, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_IOCTLFUNCTION \- callback for I/O operations
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_IPRESOLVE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_IPRESOLVE 3 "May 05, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_IPRESOLVE \- specify which IP protocol version to use
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IPRESOLVE, long resolve);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_IPRESOLVE 3 "May 05, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_IPRESOLVE \- specify which IP protocol version to use
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IPRESOLVE, long resolve);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_ISSUERCERT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ISSUERCERT 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ISSUERCERT \- issuer SSL certificate filename
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ISSUERCERT, char *file);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ISSUERCERT 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ISSUERCERT \- issuer SSL certificate filename
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ISSUERCERT, char *file);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_KEEP_SENDING_ON_ERROR.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_KEEP_SENDING_ON_ERROR 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_KEEP_SENDING_ON_ERROR \- keep sending on early HTTP response >= 300
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_KEEP_SENDING_ON_ERROR,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_KEEP_SENDING_ON_ERROR 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_KEEP_SENDING_ON_ERROR \- keep sending on early HTTP response >= 300
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_KEEP_SENDING_ON_ERROR,
Changes to jni/curl/docs/libcurl/opts/CURLOPT_KEYPASSWD.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_KEYPASSWD 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_KEYPASSWD \- set passphrase to private key
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_KEYPASSWD, char *pwd);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_KEYPASSWD 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_KEYPASSWD \- set passphrase to private key
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_KEYPASSWD, char *pwd);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_KRBLEVEL.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_KRBLEVEL 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_KRBLEVEL \- set FTP kerberos security level
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_KRBLEVEL, char *level);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_KRBLEVEL 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_KRBLEVEL \- set FTP kerberos security level
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_KRBLEVEL, char *level);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_LOCALPORT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_LOCALPORT 3 "October 31, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_LOCALPORT \- set local port number to use for socket
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOCALPORT, long port);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_LOCALPORT 3 "October 31, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_LOCALPORT \- set local port number to use for socket
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOCALPORT, long port);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_LOCALPORTRANGE 3 "October 31, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_LOCALPORTRANGE \- number of additional local ports to try
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOCALPORTRANGE,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_LOCALPORTRANGE 3 "October 31, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_LOCALPORTRANGE \- number of additional local ports to try
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOCALPORTRANGE,
Changes to jni/curl/docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_LOGIN_OPTIONS 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_LOGIN_OPTIONS \- set login options
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOGIN_OPTIONS, char *options);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_LOGIN_OPTIONS 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_LOGIN_OPTIONS \- set login options
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOGIN_OPTIONS, char *options);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_LOW_SPEED_LIMIT 3 "May 06, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_LOW_SPEED_LIMIT \- set low speed limit in bytes per second
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOW_SPEED_LIMIT, long speedlimit);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_LOW_SPEED_LIMIT 3 "May 06, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_LOW_SPEED_LIMIT \- set low speed limit in bytes per second
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOW_SPEED_LIMIT, long speedlimit);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_LOW_SPEED_TIME 3 "May 06, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_LOW_SPEED_TIME \- set low speed limit time period
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOW_SPEED_TIME, long speedtime);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_LOW_SPEED_TIME 3 "May 06, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_LOW_SPEED_TIME \- set low speed limit time period
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOW_SPEED_TIME, long speedtime);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAIL_AUTH.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAIL_AUTH 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAIL_AUTH \- SMTP authentication address
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAIL_AUTH, char *auth);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAIL_AUTH 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAIL_AUTH \- SMTP authentication address
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAIL_AUTH, char *auth);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAIL_FROM.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAIL_FROM 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAIL_FROM \- SMTP sender address
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAIL_FROM, char *from);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAIL_FROM 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAIL_FROM \- SMTP sender address
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAIL_FROM, char *from);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAIL_RCPT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAIL_RCPT 3 "July 16, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAIL_RCPT \- list of SMTP mail recipients
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAIL_RCPT 3 "July 16, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAIL_RCPT \- list of SMTP mail recipients
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Added jni/curl/docs/libcurl/opts/CURLOPT_MAIL_RCPT_ALLLOWFAILS.3.
















































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAIL_RCPT_ALLLOWFAILS 3 "January 14, 2020" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAIL_RCPT_ALLLOWFAILS \- allow RCPT TO command to fail for some recipients
.SH SYNOPSIS
.nf
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAIL_RCPT_ALLLOWFAILS,
                          long allow);
.SH DESCRIPTION
If \fIallow\fP is set to 1L, allow RCPT TO command to fail for some recipients.

When sending data to multiple recipients, by default curl will abort SMTP
conversation if at least one of the recipients causes RCPT TO command to
return an error.

The default behavior can be changed by setting \fIignore\fP to 1L which will
make curl ignore errors and proceed with the remaining valid recipients.

In case when all recipients cause RCPT TO command to fail, curl will abort SMTP
conversation and return the error received from to the last RCPT TO command.
.SH DEFAULT
0
.SH PROTOCOLS
SMTP
.SH EXAMPLE
.nf
CURL *curl = curl_easy_init();
if(curl) {
  struct curl_slist *list;

  /* Adding one valid and one invalid email address */
  list = curl_slist_append(NULL, "person@example.com");
  list = curl_slist_append(list, "invalidemailaddress");

  curl_easy_setopt(curl, CURLOPT_URL, "smtp://example.com/");
  curl_easy_setopt(curl, CURLOPT_MAIL_RCPT_ALLLOWFAILS, 1L);

  ret = curl_easy_perform(curl);
  curl_slist_free_all(list);
  curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
Added in 7.69.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
.BR CURLOPT_MAIL_FROM "(3), " CURLOPT_MAIL_RCPT "(3), "
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAXAGE_CONN.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAXAGE_CONN 3 "April 14, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAXAGE_CONN \- max idle time allowed for reusing a connection
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXAGE_CONN, long maxage);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAXAGE_CONN 3 "April 14, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAXAGE_CONN \- max idle time allowed for reusing a connection
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXAGE_CONN, long maxage);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAXCONNECTS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAXCONNECTS 3 "May 30, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAXCONNECTS \- maximum connection cache size
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXCONNECTS, long amount);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAXCONNECTS 3 "May 30, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAXCONNECTS \- maximum connection cache size
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXCONNECTS, long amount);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAXFILESIZE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAXFILESIZE 3 "May 30, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAXFILESIZE \- maximum file size allowed to download
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXFILESIZE, long size);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAXFILESIZE 3 "May 30, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAXFILESIZE \- maximum file size allowed to download
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXFILESIZE, long size);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAXFILESIZE_LARGE 3 "May 30, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAXFILESIZE_LARGE \- maximum file size allowed to download
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAXFILESIZE_LARGE 3 "May 30, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAXFILESIZE_LARGE \- maximum file size allowed to download
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAXREDIRS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAXREDIRS 3 "February 03, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAXREDIRS \- maximum number of redirects allowed
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXREDIRS, long amount);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAXREDIRS 3 "February 03, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAXREDIRS \- maximum number of redirects allowed
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXREDIRS, long amount);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAX_RECV_SPEED_LARGE 3 "May 30, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAX_RECV_SPEED_LARGE \- rate limit data download speed
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAX_RECV_SPEED_LARGE 3 "May 30, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAX_RECV_SPEED_LARGE \- rate limit data download speed
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAX_SEND_SPEED_LARGE 3 "May 30, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAX_SEND_SPEED_LARGE \- rate limit data upload speed
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAX_SEND_SPEED_LARGE 3 "May 30, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAX_SEND_SPEED_LARGE \- rate limit data upload speed
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_MIMEPOST.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MIMEPOST 3 "September 04, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MIMEPOST \- set post/send data from mime structure
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MIMEPOST 3 "September 04, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MIMEPOST \- set post/send data from mime structure
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_NETRC.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NETRC 3 "November 03, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NETRC \- request that .netrc is used
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NETRC, long level);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NETRC 3 "November 03, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NETRC \- request that .netrc is used
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NETRC, long level);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_NETRC_FILE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NETRC_FILE 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NETRC_FILE \- file name to read .netrc info from
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NETRC_FILE, char *file);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NETRC_FILE 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NETRC_FILE \- file name to read .netrc info from
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NETRC_FILE, char *file);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NEW_DIRECTORY_PERMS 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NEW_DIRECTORY_PERMS \- permissions for remotely created directories
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NEW_DIRECTORY_PERMS 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NEW_DIRECTORY_PERMS \- permissions for remotely created directories
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NEW_FILE_PERMS 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NEW_FILE_PERMS \- permissions for remotely created files
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NEW_FILE_PERMS 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NEW_FILE_PERMS \- permissions for remotely created files
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_NOBODY.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NOBODY 3 "June 21, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NOBODY \- do the download request without getting the body
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOBODY, long opt);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NOBODY 3 "June 21, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NOBODY \- do the download request without getting the body
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOBODY, long opt);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_NOPROGRESS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NOPROGRESS 3 "October 09, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NOPROGRESS \- switch off the progress meter
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOPROGRESS, long onoff);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NOPROGRESS 3 "October 09, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NOPROGRESS \- switch off the progress meter
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOPROGRESS, long onoff);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_NOPROXY.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NOPROXY 3 "August 24, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NOPROXY \- disable proxy use for specific hosts
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOPROXY, char *noproxy);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NOPROXY 3 "August 24, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NOPROXY \- disable proxy use for specific hosts
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOPROXY, char *noproxy);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_NOSIGNAL.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NOSIGNAL 3 "February 03, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NOSIGNAL \- skip all signal handling
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOSIGNAL, long onoff);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NOSIGNAL 3 "February 03, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NOSIGNAL \- skip all signal handling
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOSIGNAL, long onoff);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_OPENSOCKETDATA 3 "May 15, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_OPENSOCKETDATA \- custom pointer passed to open socket callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_OPENSOCKETDATA, void *pointer);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_OPENSOCKETDATA 3 "May 15, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_OPENSOCKETDATA \- custom pointer passed to open socket callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_OPENSOCKETDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_OPENSOCKETFUNCTION 3 "December 03, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_OPENSOCKETFUNCTION \- set callback for opening sockets
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_OPENSOCKETFUNCTION 3 "December 03, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_OPENSOCKETFUNCTION \- set callback for opening sockets
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_PASSWORD.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PASSWORD 3 "September 23, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PASSWORD \- password to use in authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PASSWORD, char *pwd);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PASSWORD 3 "September 23, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PASSWORD \- password to use in authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PASSWORD, char *pwd);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PATH_AS_IS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PATH_AS_IS 3 "September 23, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PATH_AS_IS \- do not handle dot dot sequences
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PATH_AS_IS, long leaveit);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PATH_AS_IS 3 "September 23, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PATH_AS_IS \- do not handle dot dot sequences
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PATH_AS_IS, long leaveit);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PINNEDPUBLICKEY 3 "June 02, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PINNEDPUBLICKEY \- set pinned public key
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PINNEDPUBLICKEY, char *pinnedpubkey);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PINNEDPUBLICKEY 3 "June 02, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PINNEDPUBLICKEY \- set pinned public key
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PINNEDPUBLICKEY, char *pinnedpubkey);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PIPEWAIT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PIPEWAIT 3 "May 01, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PIPEWAIT \- wait for pipelining/multiplexing
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PIPEWAIT, long wait);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PIPEWAIT 3 "May 01, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PIPEWAIT \- wait for pipelining/multiplexing
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PIPEWAIT, long wait);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PORT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PORT 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PORT \- set remote port number to work with
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PORT, long number);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PORT 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PORT \- set remote port number to work with
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PORT, long number);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_POST.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_POST 3 "July 22, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_POST \- request an HTTP POST
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POST, long post);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_POST 3 "July 22, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_POST \- request an HTTP POST
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POST, long post);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_POSTFIELDS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_POSTFIELDS 3 "May 21, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_POSTFIELDS \- specify data to POST to server
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTFIELDS, char *postdata);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_POSTFIELDS 3 "January 14, 2020" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_POSTFIELDS \- specify data to POST to server
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTFIELDS, char *postdata);
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
If \fICURLOPT_POSTFIELDS(3)\fP is explicitly set to NULL then libcurl will get
the POST data from the read callback. If you want to send a zero-byte POST set
\fICURLOPT_POSTFIELDS(3)\fP to an empty string, or set \fICURLOPT_POST(3)\fP to
1 and \fICURLOPT_POSTFIELDSIZE(3)\fP to 0.

Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header,
and libcurl will add that header automatically if the POST is either known to
be larger than 1024 bytes or if the expected size is unknown. You can disable
this header with \fICURLOPT_HTTPHEADER(3)\fP as usual.

To make multipart/formdata posts (aka RFC2388-posts), check out the
\fICURLOPT_HTTPPOST(3)\fP option combined with \fIcurl_formadd(3)\fP.
.SH DEFAULT
NULL
.SH PROTOCOLS
HTTP







|
|







51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
If \fICURLOPT_POSTFIELDS(3)\fP is explicitly set to NULL then libcurl will get
the POST data from the read callback. If you want to send a zero-byte POST set
\fICURLOPT_POSTFIELDS(3)\fP to an empty string, or set \fICURLOPT_POST(3)\fP to
1 and \fICURLOPT_POSTFIELDSIZE(3)\fP to 0.

Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header,
and libcurl will add that header automatically if the POST is either known to
be larger than 1MB or if the expected size is unknown. You can disable this
header with \fICURLOPT_HTTPHEADER(3)\fP as usual.

To make multipart/formdata posts (aka RFC2388-posts), check out the
\fICURLOPT_HTTPPOST(3)\fP option combined with \fIcurl_formadd(3)\fP.
.SH DEFAULT
NULL
.SH PROTOCOLS
HTTP
Changes to jni/curl/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_POSTFIELDSIZE 3 "February 03, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_POSTFIELDSIZE \- size of POST data pointed to
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTFIELDSIZE, long size);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_POSTFIELDSIZE 3 "February 03, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_POSTFIELDSIZE \- size of POST data pointed to
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTFIELDSIZE, long size);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_POSTFIELDSIZE_LARGE 3 "February 03, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_POSTFIELDSIZE_LARGE \- size of POST data pointed to
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_POSTFIELDSIZE_LARGE 3 "February 03, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_POSTFIELDSIZE_LARGE \- size of POST data pointed to
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_POSTQUOTE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_POSTQUOTE 3 "December 18, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_POSTQUOTE \- (S)FTP commands to run after the transfer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTQUOTE, struct curl_slist *cmds);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_POSTQUOTE 3 "December 18, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_POSTQUOTE \- (S)FTP commands to run after the transfer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTQUOTE, struct curl_slist *cmds);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_POSTREDIR.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_POSTREDIR 3 "April 17, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_POSTREDIR \- how to act on an HTTP POST redirect
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_POSTREDIR 3 "April 17, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_POSTREDIR \- how to act on an HTTP POST redirect
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_PREQUOTE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PREQUOTE 3 "December 18, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PREQUOTE \- commands to run before an FTP transfer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PREQUOTE,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PREQUOTE 3 "December 18, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PREQUOTE \- commands to run before an FTP transfer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PREQUOTE,
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PRE_PROXY.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PRE_PROXY 3 "September 23, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PRE_PROXY \- set pre-proxy to use
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PRE_PROXY, char *preproxy);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PRE_PROXY 3 "September 23, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PRE_PROXY \- set pre-proxy to use
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PRE_PROXY, char *preproxy);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PRIVATE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PRIVATE 3 "December 08, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PRIVATE \- store a private pointer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PRIVATE, void *pointer);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PRIVATE 3 "December 08, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PRIVATE \- store a private pointer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PRIVATE, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROGRESSDATA.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROGRESSDATA 3 "February 03, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROGRESSDATA \- custom pointer passed to the progress callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROGRESSDATA, void *pointer);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROGRESSDATA 3 "February 03, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROGRESSDATA \- custom pointer passed to the progress callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROGRESSDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROGRESSFUNCTION 3 "November 26, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROGRESSFUNCTION \- callback to progress meter function
.SH SYNOPSIS
#include <curl/curl.h>

int progress_callback(void *clientp,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROGRESSFUNCTION 3 "November 26, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROGRESSFUNCTION \- callback to progress meter function
.SH SYNOPSIS
#include <curl/curl.h>

int progress_callback(void *clientp,
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROTOCOLS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROTOCOLS 3 "February 03, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROTOCOLS \- set allowed protocols
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROTOCOLS, long bitmask);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROTOCOLS 3 "February 03, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROTOCOLS \- set allowed protocols
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROTOCOLS, long bitmask);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY 3 "August 24, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY \- set proxy to use
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY, char *proxy);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY 3 "August 24, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY \- set proxy to use
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY, char *proxy);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXYAUTH.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXYAUTH 3 "May 30, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXYAUTH \- set HTTP proxy authentication methods to try
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYAUTH, long bitmask);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXYAUTH 3 "May 30, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXYAUTH \- set HTTP proxy authentication methods to try
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYAUTH, long bitmask);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXYHEADER.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXYHEADER 3 "May 30, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXYHEADER \- custom HTTP headers to pass to proxy
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXYHEADER 3 "May 30, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXYHEADER \- custom HTTP headers to pass to proxy
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXYPASSWORD.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXYPASSWORD 3 "May 30, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXYPASSWORD \- password to use with proxy authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYPASSWORD, char *pwd);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXYPASSWORD 3 "May 30, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXYPASSWORD \- password to use with proxy authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYPASSWORD, char *pwd);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXYPORT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXYPORT 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXYPORT \- port number the proxy listens on
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYPORT, long port);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXYPORT 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXYPORT \- port number the proxy listens on
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYPORT, long port);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXYTYPE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXYTYPE 3 "May 30, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXYTYPE \- proxy protocol type
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYTYPE, long type);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXYTYPE 3 "May 30, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXYTYPE \- proxy protocol type
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYTYPE, long type);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXYUSERNAME.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXYUSERNAME 3 "May 30, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXYUSERNAME \- user name to use for proxy authentication
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXYUSERNAME 3 "May 30, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXYUSERNAME \- user name to use for proxy authentication
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXYUSERPWD.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXYUSERPWD 3 "May 30, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXYUSERPWD \- user name and password to use for proxy authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYUSERPWD, char *userpwd);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXYUSERPWD 3 "May 30, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXYUSERPWD \- user name and password to use for proxy authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYUSERPWD, char *userpwd);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_CAINFO.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_CAINFO 3 "April 17, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_CAINFO \- path to proxy Certificate Authority (CA) bundle
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_CAINFO, char *path);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_CAINFO 3 "April 17, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_CAINFO \- path to proxy Certificate Authority (CA) bundle
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_CAINFO, char *path);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_CAPATH.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_CAPATH 3 "May 15, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_CAPATH \- specify directory holding proxy CA certificates
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_CAPATH, char *capath);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_CAPATH 3 "May 15, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_CAPATH \- specify directory holding proxy CA certificates
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_CAPATH, char *capath);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_CRLFILE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_CRLFILE 3 "April 17, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_CRLFILE \- specify a proxy Certificate Revocation List file
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_CRLFILE, char *file);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_CRLFILE 3 "April 17, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_CRLFILE \- specify a proxy Certificate Revocation List file
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_CRLFILE, char *file);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_KEYPASSWD.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_KEYPASSWD 3 "April 17, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_KEYPASSWD \- set passphrase to proxy private key
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_KEYPASSWD, char *pwd);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_KEYPASSWD 3 "April 17, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_KEYPASSWD \- set passphrase to proxy private key
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_KEYPASSWD, char *pwd);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_PINNEDPUBLICKEY.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_PINNEDPUBLICKEY 3 "May 15, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_PINNEDPUBLICKEY \- set pinned public key for https proxy
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_PINNEDPUBLICKEY, char *pinnedpubkey);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_PINNEDPUBLICKEY 3 "May 15, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_PINNEDPUBLICKEY \- set pinned public key for https proxy
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_PINNEDPUBLICKEY, char *pinnedpubkey);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SERVICE_NAME 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SERVICE_NAME \- proxy authentication service name
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SERVICE_NAME, char *name);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SERVICE_NAME 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SERVICE_NAME \- proxy authentication service name
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SERVICE_NAME, char *name);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSLCERT 3 "April 17, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSLCERT \- set SSL proxy client certificate
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLCERT, char *cert);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSLCERT 3 "April 17, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSLCERT \- set SSL proxy client certificate
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLCERT, char *cert);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSLCERTTYPE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSLCERTTYPE 3 "April 17, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSLCERTTYPE \- specify type of the proxy client SSL certificate
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLCERTTYPE, char *type);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSLCERTTYPE 3 "April 17, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSLCERTTYPE \- specify type of the proxy client SSL certificate
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLCERTTYPE, char *type);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSLKEY 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSLKEY \- specify private keyfile for TLS and SSL proxy client cert
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLKEY, char *keyfile);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSLKEY 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSLKEY \- specify private keyfile for TLS and SSL proxy client cert
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLKEY, char *keyfile);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSLKEYTYPE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSLKEYTYPE 3 "April 17, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSLKEYTYPE \- set type of the proxy private key file
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLKEYTYPE, char *type);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSLKEYTYPE 3 "April 17, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSLKEYTYPE \- set type of the proxy private key file
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLKEYTYPE, char *type);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSLVERSION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSLVERSION 3 "October 31, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSLVERSION \- set preferred proxy TLS/SSL version
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLVERSION, long version);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSLVERSION 3 "October 31, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSLVERSION \- set preferred proxy TLS/SSL version
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLVERSION, long version);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSL_CIPHER_LIST.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSL_CIPHER_LIST 3 "October 10, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSL_CIPHER_LIST \- specify ciphers to use for proxy TLS
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_CIPHER_LIST, char *list);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSL_CIPHER_LIST 3 "October 10, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSL_CIPHER_LIST \- specify ciphers to use for proxy TLS
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_CIPHER_LIST, char *list);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSL_OPTIONS.3.
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
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSL_OPTIONS 3 "July 16, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSL_OPTIONS \- set proxy SSL behavior options
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_OPTIONS, long bitmask);
.SH DESCRIPTION
Pass a long with a bitmask to tell libcurl about specific SSL behaviors.

\fICURLSSLOPT_ALLOW_BEAST\fP tells libcurl to not attempt to use any
workarounds for a security flaw in the SSL3 and TLS1.0 protocols.  If this
option isn't used or this bit is set to 0, the SSL layer libcurl uses may use

a work-around for this flaw although it might cause interoperability problems
with some (older) SSL implementations. WARNING: avoiding this work-around
lessens the security, and by setting this option to 1 you ask for exactly
that.  This option is only supported for DarwinSSL, NSS and OpenSSL.

\fICURLSSLOPT_NO_REVOKE\fP tells libcurl to disable certificate revocation
checks for those SSL backends where such behavior is present. This option is
only supported for Schannel (the native Windows SSL library), with an
exception in the case of Windows' Untrusted Publishers blacklist which it
seems can't be bypassed.






.SH DEFAULT
0
.SH PROTOCOLS
All
.SH AVAILABLE
Added in 7.52.0
.SH EXAMPLE
.nf
CURL *curl = curl_easy_init();
if(curl) {
  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");







|








|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
<
>
>
>
>
>
>



|







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
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSL_OPTIONS 3 "January 23, 2020" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSL_OPTIONS \- set proxy SSL behavior options
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_OPTIONS, long bitmask);
.SH DESCRIPTION
Pass a long with a bitmask to tell libcurl about specific SSL
behaviors. Available bits:
.IP CURLSSLOPT_ALLOW_BEAST
Tells libcurl to not attempt to use any workarounds for a security flaw in the
SSL3 and TLS1.0 protocols.  If this option isn't used or this bit is set to 0,
the SSL layer libcurl uses may use a work-around for this flaw although it
might cause interoperability problems with some (older) SSL
implementations. WARNING: avoiding this work-around lessens the security, and
by setting this option to 1 you ask for exactly that.  This option is only
supported for DarwinSSL, NSS and OpenSSL.
.IP CURLSSLOPT_NO_REVOKE
Tells libcurl to disable certificate revocation checks for those SSL backends
where such behavior is present. This option is only supported for Schannel
(the native Windows SSL library), with an exception in the case of Windows'
Untrusted Publishers blacklist which it seems can't be bypassed. (Added in

7.44.0)
.IP CURLSSLOPT_NO_PARTIALCHAIN
Tells libcurl to not accept "partial" certificate chains, which it otherwise
does by default. This option is only supported for OpenSSL and will fail the
certificate verification if the chain ends with an intermediate certificate
and not with a root cert. (Added in 7.68.0)
.SH DEFAULT
0
.SH PROTOCOLS
All TLS-based protocols
.SH AVAILABLE
Added in 7.52.0
.SH EXAMPLE
.nf
CURL *curl = curl_easy_init();
if(curl) {
  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYHOST.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSL_VERIFYHOST 3 "August 20, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSL_VERIFYHOST \- verify the proxy certificate's name against host
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_VERIFYHOST, long verify);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSL_VERIFYHOST 3 "August 20, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSL_VERIFYHOST \- verify the proxy certificate's name against host
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_VERIFYHOST, long verify);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYPEER.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSL_VERIFYPEER 3 "December 16, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSL_VERIFYPEER \- verify the proxy's SSL certificate
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_VERIFYPEER, long verify);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSL_VERIFYPEER 3 "December 16, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSL_VERIFYPEER \- verify the proxy's SSL certificate
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_VERIFYPEER, long verify);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_TLS13_CIPHERS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_TLS13_CIPHERS 3 "October 31, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_TLS13_CIPHERS \- ciphers suites for proxy TLS 1.3
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLS13_CIPHERS, char *list);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_TLS13_CIPHERS 3 "October 31, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_TLS13_CIPHERS \- ciphers suites for proxy TLS 1.3
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLS13_CIPHERS, char *list);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_PASSWORD.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_TLSAUTH_PASSWORD 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_TLSAUTH_PASSWORD \- password to use for proxy TLS authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLSAUTH_PASSWORD, char *pwd);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_TLSAUTH_PASSWORD 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_TLSAUTH_PASSWORD \- password to use for proxy TLS authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLSAUTH_PASSWORD, char *pwd);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_TYPE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_TLSAUTH_TYPE 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_TLSAUTH_TYPE \- set proxy TLS authentication methods
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLSAUTH_TYPE, char *type);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_TLSAUTH_TYPE 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_TLSAUTH_TYPE \- set proxy TLS authentication methods
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLSAUTH_TYPE, char *type);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_USERNAME.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_TLSAUTH_USERNAME 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_TLSAUTH_USERNAME \- user name to use for proxy TLS authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLSAUTH_USERNAME, char *user);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_TLSAUTH_USERNAME 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_TLSAUTH_USERNAME \- user name to use for proxy TLS authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLSAUTH_USERNAME, char *user);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_TRANSFER_MODE 3 "April 17, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_TRANSFER_MODE \- append FTP transfer mode to URL for proxy
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TRANSFER_MODE, long enabled);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_TRANSFER_MODE 3 "April 17, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_TRANSFER_MODE \- append FTP transfer mode to URL for proxy
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TRANSFER_MODE, long enabled);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PUT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PUT 3 "April 17, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PUT \- make an HTTP PUT request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PUT, long put);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PUT 3 "April 17, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PUT \- make an HTTP PUT request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PUT, long put);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_QUOTE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_QUOTE 3 "December 18, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_QUOTE \- (S)FTP commands to run before transfer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_QUOTE, struct curl_slist *cmds);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_QUOTE 3 "December 18, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_QUOTE \- (S)FTP commands to run before transfer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_QUOTE, struct curl_slist *cmds);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RANDOM_FILE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RANDOM_FILE 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RANDOM_FILE \- specify a source for random data
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RANDOM_FILE, char *path);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RANDOM_FILE 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RANDOM_FILE \- specify a source for random data
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RANDOM_FILE, char *path);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RANGE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RANGE 3 "October 31, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RANGE \- set byte range to request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RANGE, char *range);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RANGE 3 "October 31, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RANGE \- set byte range to request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RANGE, char *range);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_READDATA.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_READDATA 3 "August 11, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_READDATA \- custom pointer passed to the read callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_READDATA, void *pointer);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_READDATA 3 "August 11, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_READDATA \- custom pointer passed to the read callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_READDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_READFUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_READFUNCTION 3 "January 06, 2020" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_READFUNCTION \- read callback for data uploads
.SH SYNOPSIS
#include <curl/curl.h>

size_t read_callback(char *buffer, size_t size, size_t nitems, void *userdata);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_READFUNCTION 3 "January 06, 2020" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_READFUNCTION \- read callback for data uploads
.SH SYNOPSIS
#include <curl/curl.h>

size_t read_callback(char *buffer, size_t size, size_t nitems, void *userdata);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.3.
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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_REDIR_PROTOCOLS 3 "October 31, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_REDIR_PROTOCOLS \- set protocols allowed to redirect to
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_REDIR_PROTOCOLS, long bitmask);







|














|







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
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_REDIR_PROTOCOLS 3 "February 18, 2020" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_REDIR_PROTOCOLS \- set protocols allowed to redirect to
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_REDIR_PROTOCOLS, long bitmask);
72
73
74
75
76
77
78


79

80
81
82
83
84
85
86
CURLPROTO_SMBS
CURLPROTO_SMTP
CURLPROTO_SMTPS
CURLPROTO_TELNET
CURLPROTO_TFTP
.fi
.SH DEFAULT


All protocols except for FILE, SCP and since 7.40.0 SMB and SMBS.

.SH PROTOCOLS
All
.SH EXAMPLE
.nf
curl = curl_easy_init();
if(curl) {
  /* pass in the URL from an external source */







>
>
|
>







72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
CURLPROTO_SMBS
CURLPROTO_SMTP
CURLPROTO_SMTPS
CURLPROTO_TELNET
CURLPROTO_TFTP
.fi
.SH DEFAULT
HTTP, HTTPS, FTP and FTPS (Since 7.65.2).

Older versions defaulted to all protocols except FILE, SCP and since 7.40.0
SMB and SMBS.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
curl = curl_easy_init();
if(curl) {
  /* pass in the URL from an external source */
Changes to jni/curl/docs/libcurl/opts/CURLOPT_REFERER.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_REFERER 3 "December 21, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_REFERER \- set the HTTP referer header
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_REFERER, char *where);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_REFERER 3 "December 21, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_REFERER \- set the HTTP referer header
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_REFERER, char *where);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_REQUEST_TARGET.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_REQUEST_TARGET 3 "June 21, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_REQUEST_TARGET \- specify an alternative target for this request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_REQUEST_TARGET, string);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_REQUEST_TARGET 3 "June 21, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_REQUEST_TARGET \- specify an alternative target for this request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_REQUEST_TARGET, string);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RESOLVE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RESOLVE 3 "May 30, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RESOLVE \- provide custom host name to IP address resolves
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RESOLVE 3 "May 30, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RESOLVE \- provide custom host name to IP address resolves
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_RESOLVER_START_DATA.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RESOLVER_START_DATA 3 "February 14, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RESOLVER_START_DATA \- custom pointer passed to the resolver start callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RESOLVER_START_DATA, void *pointer);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RESOLVER_START_DATA 3 "February 14, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RESOLVER_START_DATA \- custom pointer passed to the resolver start callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RESOLVER_START_DATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RESOLVER_START_FUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RESOLVER_START_FUNCTION 3 "February 14, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RESOLVER_START_FUNCTION \- set callback to be called before a new resolve request is started
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RESOLVER_START_FUNCTION 3 "February 14, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RESOLVER_START_FUNCTION \- set callback to be called before a new resolve request is started
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_RESUME_FROM.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RESUME_FROM 3 "February 03, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RESUME_FROM \- set a point to resume transfer from
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RESUME_FROM, long from);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RESUME_FROM 3 "February 03, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RESUME_FROM \- set a point to resume transfer from
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RESUME_FROM, long from);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RESUME_FROM_LARGE 3 "February 03, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RESUME_FROM_LARGE \- set a point to resume transfer from
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RESUME_FROM_LARGE 3 "February 03, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RESUME_FROM_LARGE \- set a point to resume transfer from
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RTSP_CLIENT_CSEQ 3 "April 17, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RTSP_CLIENT_CSEQ \- set the RTSP client CSEQ number
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_CLIENT_CSEQ, long cseq);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RTSP_CLIENT_CSEQ 3 "April 17, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RTSP_CLIENT_CSEQ \- set the RTSP client CSEQ number
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_CLIENT_CSEQ, long cseq);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RTSP_REQUEST.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RTSP_REQUEST 3 "July 16, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RTSP_REQUEST \- specify RTSP request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_REQUEST, long request);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RTSP_REQUEST 3 "July 16, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RTSP_REQUEST \- specify RTSP request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_REQUEST, long request);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RTSP_SERVER_CSEQ 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RTSP_SERVER_CSEQ \- set the RTSP server CSEQ number
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_SERVER_CSEQ, long cseq);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RTSP_SERVER_CSEQ 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RTSP_SERVER_CSEQ \- set the RTSP server CSEQ number
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_SERVER_CSEQ, long cseq);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RTSP_SESSION_ID 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RTSP_SESSION_ID \- set RTSP session ID
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_SESSION_ID, char *id);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RTSP_SESSION_ID 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RTSP_SESSION_ID \- set RTSP session ID
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_SESSION_ID, char *id);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RTSP_STREAM_URI 3 "July 16, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RTSP_STREAM_URI \- set RTSP stream URI
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_STREAM_URI, char *URI);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RTSP_STREAM_URI 3 "July 16, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RTSP_STREAM_URI \- set RTSP stream URI
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_STREAM_URI, char *URI);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RTSP_TRANSPORT 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RTSP_TRANSPORT \- set RTSP Transport: header
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RTSP_TRANSPORT 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RTSP_TRANSPORT \- set RTSP Transport: header
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_SASL_IR.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SASL_IR 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SASL_IR \- enable sending initial response in first packet
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SASL_IR, long enable);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SASL_IR 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SASL_IR \- enable sending initial response in first packet
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SASL_IR, long enable);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SEEKDATA.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SEEKDATA 3 "October 31, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SEEKDATA \- custom pointer passed to the seek callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SEEKDATA, void *pointer);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SEEKDATA 3 "October 31, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SEEKDATA \- custom pointer passed to the seek callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SEEKDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SEEKFUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SEEKFUNCTION 3 "April 17, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SEEKFUNCTION \- user callback for seeking in input stream
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SEEKFUNCTION 3 "April 17, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SEEKFUNCTION \- user callback for seeking in input stream
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_SERVICE_NAME.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SERVICE_NAME 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SERVICE_NAME \- authentication service name
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SERVICE_NAME, char *name);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SERVICE_NAME 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SERVICE_NAME \- authentication service name
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SERVICE_NAME, char *name);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SHARE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SHARE 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SHARE \- specify share handle to use
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SHARE, CURLSH *share);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SHARE 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SHARE \- specify share handle to use
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SHARE, CURLSH *share);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SOCKOPTDATA.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SOCKOPTDATA 3 "May 15, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SOCKOPTDATA \- custom pointer to pass to sockopt callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKOPTDATA, void *pointer);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SOCKOPTDATA 3 "May 15, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SOCKOPTDATA \- custom pointer to pass to sockopt callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKOPTDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SOCKOPTFUNCTION 3 "May 15, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SOCKOPTFUNCTION \- set callback for setting socket options
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SOCKOPTFUNCTION 3 "May 15, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SOCKOPTFUNCTION \- set callback for setting socket options
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_SOCKS5_AUTH.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SOCKS5_AUTH 3 "April 27, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SOCKS5_AUTH \- set allowed methods for SOCKS5 proxy authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKS5_AUTH, long bitmask);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SOCKS5_AUTH 3 "April 27, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SOCKS5_AUTH \- set allowed methods for SOCKS5 proxy authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKS5_AUTH, long bitmask);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SOCKS5_GSSAPI_NEC 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SOCKS5_GSSAPI_NEC \- set socks proxy gssapi negotiation protection
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKS5_GSSAPI_NEC, long nec);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SOCKS5_GSSAPI_NEC 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SOCKS5_GSSAPI_NEC \- set socks proxy gssapi negotiation protection
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKS5_GSSAPI_NEC, long nec);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SOCKS5_GSSAPI_SERVICE 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SOCKS5_GSSAPI_SERVICE \- SOCKS5 proxy authentication service name
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKS5_GSSAPI_SERVICE, char *name);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SOCKS5_GSSAPI_SERVICE 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SOCKS5_GSSAPI_SERVICE \- SOCKS5 proxy authentication service name
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKS5_GSSAPI_SERVICE, char *name);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_AUTH_TYPES 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_AUTH_TYPES \- set desired auth types for SFTP and SCP
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_AUTH_TYPES, long bitmask);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_AUTH_TYPES 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_AUTH_TYPES \- set desired auth types for SFTP and SCP
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_AUTH_TYPES, long bitmask);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_COMPRESSION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_COMPRESSION 3 "August 10, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_COMPRESSION \- enables compression / decompression of SSH traffic
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_COMPRESSION, long enable);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_COMPRESSION 3 "August 10, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_COMPRESSION \- enables compression / decompression of SSH traffic
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_COMPRESSION, long enable);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 \- checksum of SSH server public key
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 \- checksum of SSH server public key
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_KEYDATA.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_KEYDATA 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_KEYDATA \- pointer to pass to the SSH key callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_KEYDATA, void *pointer);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_KEYDATA 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_KEYDATA \- pointer to pass to the SSH key callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_KEYDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_KEYFUNCTION 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_KEYFUNCTION \- callback for known host matching logic
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_KEYFUNCTION 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_KEYFUNCTION \- callback for known host matching logic
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_KNOWNHOSTS 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_KNOWNHOSTS \- file name holding the SSH known hosts
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_KNOWNHOSTS, char *fname);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_KNOWNHOSTS 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_KNOWNHOSTS \- file name holding the SSH known hosts
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_KNOWNHOSTS, char *fname);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_PRIVATE_KEYFILE 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_PRIVATE_KEYFILE \- set private key file for SSH auth
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_PRIVATE_KEYFILE 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_PRIVATE_KEYFILE \- set private key file for SSH auth
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_PUBLIC_KEYFILE 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_PUBLIC_KEYFILE \- set public key file for SSH auth
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_PUBLIC_KEYFILE 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_PUBLIC_KEYFILE \- set public key file for SSH auth
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSLCERT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSLCERT 3 "January 29, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSLCERT \- set SSL client certificate
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLCERT, char *cert);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSLCERT 3 "January 29, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSLCERT \- set SSL client certificate
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLCERT, char *cert);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSLCERTTYPE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSLCERTTYPE 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSLCERTTYPE \- specify type of the client SSL certificate
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLCERTTYPE, char *type);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSLCERTTYPE 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSLCERTTYPE \- specify type of the client SSL certificate
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLCERTTYPE, char *type);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSLENGINE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSLENGINE 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSLENGINE \- set SSL engine identifier
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLENGINE, char *id);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSLENGINE 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSLENGINE \- set SSL engine identifier
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLENGINE, char *id);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSLENGINE_DEFAULT 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSLENGINE_DEFAULT \- make SSL engine default
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLENGINE_DEFAULT, long val);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSLENGINE_DEFAULT 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSLENGINE_DEFAULT \- make SSL engine default
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLENGINE_DEFAULT, long val);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSLKEY.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSLKEY 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSLKEY \- specify private keyfile for TLS and SSL client cert
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLKEY, char *keyfile);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSLKEY 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSLKEY \- specify private keyfile for TLS and SSL client cert
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLKEY, char *keyfile);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSLKEYTYPE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSLKEYTYPE 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSLKEYTYPE \- set type of the private key file
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLKEYTYPE, char *type);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSLKEYTYPE 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSLKEYTYPE \- set type of the private key file
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLKEYTYPE, char *type);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSLVERSION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSLVERSION 3 "October 31, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSLVERSION \- set preferred TLS/SSL version
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLVERSION, long version);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSLVERSION 3 "October 31, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSLVERSION \- set preferred TLS/SSL version
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLVERSION, long version);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_CIPHER_LIST 3 "October 10, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_CIPHER_LIST \- specify ciphers to use for TLS
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_CIPHER_LIST, char *list);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_CIPHER_LIST 3 "October 10, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_CIPHER_LIST \- specify ciphers to use for TLS
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_CIPHER_LIST, char *list);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_CTX_DATA 3 "June 02, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_CTX_DATA \- custom pointer passed to ssl_ctx callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_CTX_DATA, void *pointer);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_CTX_DATA 3 "June 02, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_CTX_DATA \- custom pointer passed to ssl_ctx callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_CTX_DATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_CTX_FUNCTION 3 "June 02, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_CTX_FUNCTION \- SSL context callback for OpenSSL, wolfSSL or mbedTLS
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_CTX_FUNCTION 3 "June 02, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_CTX_FUNCTION \- SSL context callback for OpenSSL, wolfSSL or mbedTLS
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_ENABLE_ALPN 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_ENABLE_ALPN \- enable ALPN
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_ENABLE_ALPN, long npn);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_ENABLE_ALPN 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_ENABLE_ALPN \- enable ALPN
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_ENABLE_ALPN, long npn);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_ENABLE_NPN 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_ENABLE_NPN \- enable NPN
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_ENABLE_NPN, long npn);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_ENABLE_NPN 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_ENABLE_NPN \- enable NPN
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_ENABLE_NPN, long npn);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_FALSESTART.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_FALSESTART 3 "May 15, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_FALSESTART \- enable TLS false start
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_FALSESTART, long enable);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_FALSESTART 3 "May 15, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_FALSESTART \- enable TLS false start
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_FALSESTART, long enable);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_OPTIONS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_OPTIONS 3 "December 02, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_OPTIONS \- set SSL behavior options
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_OPTIONS, long bitmask);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_OPTIONS 3 "December 02, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_OPTIONS \- set SSL behavior options
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_OPTIONS, long bitmask);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_SESSIONID_CACHE 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_SESSIONID_CACHE \- enable/disable use of the SSL session-ID cache
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_SESSIONID_CACHE 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_SESSIONID_CACHE \- enable/disable use of the SSL session-ID cache
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_VERIFYHOST 3 "August 20, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_VERIFYHOST \- verify the certificate's name against host
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_VERIFYHOST, long verify);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_VERIFYHOST 3 "August 20, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_VERIFYHOST \- verify the certificate's name against host
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_VERIFYHOST, long verify);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_VERIFYPEER 3 "June 24, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_VERIFYPEER \- verify the peer's SSL certificate
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_VERIFYPEER, long verify);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_VERIFYPEER 3 "June 24, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_VERIFYPEER \- verify the peer's SSL certificate
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_VERIFYPEER, long verify);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_VERIFYSTATUS 3 "October 09, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_VERIFYSTATUS \- verify the certificate's status
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_VERIFYSTATUS, long verify);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_VERIFYSTATUS 3 "October 09, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_VERIFYSTATUS \- verify the certificate's status
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_VERIFYSTATUS, long verify);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_STDERR.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_STDERR 3 "February 03, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_STDERR \- redirect stderr to another stream
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STDERR, FILE *stream);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_STDERR 3 "February 03, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_STDERR \- redirect stderr to another stream
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STDERR, FILE *stream);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_STREAM_DEPENDS 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_STREAM_DEPENDS \- set stream this transfer depends on
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STREAM_DEPENDS, CURL *dephandle);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_STREAM_DEPENDS 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_STREAM_DEPENDS \- set stream this transfer depends on
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STREAM_DEPENDS, CURL *dephandle);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_STREAM_DEPENDS_E 3 "April 17, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_STREAM_DEPENDS_E \- set stream this transfer depends on exclusively
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STREAM_DEPENDS_E, CURL *dephandle);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_STREAM_DEPENDS_E 3 "April 17, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_STREAM_DEPENDS_E \- set stream this transfer depends on exclusively
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STREAM_DEPENDS_E, CURL *dephandle);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_STREAM_WEIGHT 3 "April 17, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_STREAM_WEIGHT \- set numerical stream weight
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STREAM_WEIGHT, long weight);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_STREAM_WEIGHT 3 "April 17, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_STREAM_WEIGHT \- set numerical stream weight
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STREAM_WEIGHT, long weight);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SUPPRESS_CONNECT_HEADERS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SUPPRESS_CONNECT_HEADERS 3 "April 28, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SUPPRESS_CONNECT_HEADERS \- Suppress proxy CONNECT response headers from user callbacks
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SUPPRESS_CONNECT_HEADERS 3 "April 28, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SUPPRESS_CONNECT_HEADERS \- Suppress proxy CONNECT response headers from user callbacks
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TCP_FASTOPEN 3 "May 15, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TCP_FASTOPEN \- enable TCP Fast Open
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_FASTOPEN, long enable);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TCP_FASTOPEN 3 "May 15, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TCP_FASTOPEN \- enable TCP Fast Open
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_FASTOPEN, long enable);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TCP_KEEPALIVE 3 "February 03, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TCP_KEEPALIVE \- enable TCP keep-alive probing
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPALIVE, long probe);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TCP_KEEPALIVE 3 "February 03, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TCP_KEEPALIVE \- enable TCP keep-alive probing
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPALIVE, long probe);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TCP_KEEPIDLE 3 "January 02, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TCP_KEEPIDLE \- set TCP keep-alive idle time wait
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPIDLE, long delay);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TCP_KEEPIDLE 3 "January 02, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TCP_KEEPIDLE \- set TCP keep-alive idle time wait
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPIDLE, long delay);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TCP_KEEPINTVL 3 "January 02, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TCP_KEEPINTVL \- set TCP keep-alive interval
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPINTVL, long interval);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TCP_KEEPINTVL 3 "January 02, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TCP_KEEPINTVL \- set TCP keep-alive interval
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPINTVL, long interval);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TCP_NODELAY.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TCP_NODELAY 3 "January 15, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TCP_NODELAY \- set the TCP_NODELAY option
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_NODELAY, long nodelay);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TCP_NODELAY 3 "January 15, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TCP_NODELAY \- set the TCP_NODELAY option
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_NODELAY, long nodelay);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TELNETOPTIONS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TELNETOPTIONS 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TELNETOPTIONS \- custom telnet options
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TELNETOPTIONS,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TELNETOPTIONS 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TELNETOPTIONS \- custom telnet options
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TELNETOPTIONS,
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TFTP_BLKSIZE 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TFTP_BLKSIZE \- TFTP block size
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TFTP_BLKSIZE, long blocksize);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TFTP_BLKSIZE 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TFTP_BLKSIZE \- TFTP block size
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TFTP_BLKSIZE, long blocksize);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TFTP_NO_OPTIONS 3 "April 06, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TFTP_NO_OPTIONS \- Do not send TFTP options requests.
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TFTP_NO_OPTIONS, long onoff);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TFTP_NO_OPTIONS 3 "April 06, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TFTP_NO_OPTIONS \- Do not send TFTP options requests.
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TFTP_NO_OPTIONS, long onoff);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TIMECONDITION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TIMECONDITION 3 "April 03, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TIMECONDITION \- select condition for a time request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMECONDITION, long cond);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TIMECONDITION 3 "April 03, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TIMECONDITION \- select condition for a time request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMECONDITION, long cond);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TIMEOUT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TIMEOUT 3 "October 15, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TIMEOUT \- set maximum time the request is allowed to take
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEOUT, long timeout);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TIMEOUT 3 "October 15, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TIMEOUT \- set maximum time the request is allowed to take
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEOUT, long timeout);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TIMEOUT_MS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TIMEOUT_MS 3 "September 23, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TIMEOUT_MS \- set maximum time the request is allowed to take
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEOUT_MS, long timeout);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TIMEOUT_MS 3 "September 23, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TIMEOUT_MS \- set maximum time the request is allowed to take
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEOUT_MS, long timeout);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TIMEVALUE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TIMEVALUE 3 "January 25, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TIMEVALUE \- set time value for conditional
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEVALUE, long val);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TIMEVALUE 3 "January 25, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TIMEVALUE \- set time value for conditional
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEVALUE, long val);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TIMEVALUE_LARGE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TIMEVALUE_LARGE 3 "January 25, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TIMEVALUE_LARGE \- set time value for conditional
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEVALUE_LARGE, curl_off_t val);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TIMEVALUE_LARGE 3 "January 25, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TIMEVALUE_LARGE \- set time value for conditional
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEVALUE_LARGE, curl_off_t val);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TLS13_CIPHERS.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TLS13_CIPHERS 3 "October 31, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TLS13_CIPHERS \- specify ciphers suites to use for TLS 1.3
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLS13_CIPHERS, char *list);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TLS13_CIPHERS 3 "October 31, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TLS13_CIPHERS \- specify ciphers suites to use for TLS 1.3
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLS13_CIPHERS, char *list);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TLSAUTH_PASSWORD 3 "December 16, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TLSAUTH_PASSWORD \- password to use for TLS authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLSAUTH_PASSWORD, char *pwd);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TLSAUTH_PASSWORD 3 "December 16, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TLSAUTH_PASSWORD \- password to use for TLS authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLSAUTH_PASSWORD, char *pwd);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TLSAUTH_TYPE 3 "December 16, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TLSAUTH_TYPE \- set TLS authentication methods
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLSAUTH_TYPE, char *type);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TLSAUTH_TYPE 3 "December 16, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TLSAUTH_TYPE \- set TLS authentication methods
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLSAUTH_TYPE, char *type);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TLSAUTH_USERNAME 3 "December 16, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TLSAUTH_USERNAME \- user name to use for TLS authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLSAUTH_USERNAME, char *user);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TLSAUTH_USERNAME 3 "December 16, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TLSAUTH_USERNAME \- user name to use for TLS authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLSAUTH_USERNAME, char *user);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TRAILERDATA.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TRAILERDATA 3 "October 31, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TRAILERDATA \- Custom pointer passed to the trailing headers callback
.SH SYNOPSIS
#include <curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TRAILERDATA, void *userdata);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TRAILERDATA 3 "October 31, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TRAILERDATA \- Custom pointer passed to the trailing headers callback
.SH SYNOPSIS
#include <curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TRAILERDATA, void *userdata);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TRAILERFUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TRAILERFUNCTION 3 "October 31, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TRAILERFUNCTION \- Set callback for sending trailing headers
.SH SYNOPSIS
#include <curl.h>

int curl_trailer_callback(struct curl_slist ** list, void *userdata);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TRAILERFUNCTION 3 "October 31, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TRAILERFUNCTION \- Set callback for sending trailing headers
.SH SYNOPSIS
#include <curl.h>

int curl_trailer_callback(struct curl_slist ** list, void *userdata);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TRANSFERTEXT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TRANSFERTEXT 3 "May 31, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TRANSFERTEXT \- request a text based transfer for FTP
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TRANSFERTEXT, long text);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TRANSFERTEXT 3 "May 31, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TRANSFERTEXT \- request a text based transfer for FTP
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TRANSFERTEXT, long text);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TRANSFER_ENCODING 3 "May 15, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TRANSFER_ENCODING \- ask for HTTP Transfer Encoding
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TRANSFER_ENCODING, long enable);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TRANSFER_ENCODING 3 "May 15, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TRANSFER_ENCODING \- ask for HTTP Transfer Encoding
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TRANSFER_ENCODING, long enable);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_UNIX_SOCKET_PATH 3 "April 17, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_UNIX_SOCKET_PATH \- set Unix domain socket
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UNIX_SOCKET_PATH, char *path);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_UNIX_SOCKET_PATH 3 "April 17, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_UNIX_SOCKET_PATH \- set Unix domain socket
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UNIX_SOCKET_PATH, char *path);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_UNRESTRICTED_AUTH 3 "May 15, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_UNRESTRICTED_AUTH \- send credentials to other hosts too
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_UNRESTRICTED_AUTH 3 "May 15, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_UNRESTRICTED_AUTH \- send credentials to other hosts too
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_UPLOAD.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_UPLOAD 3 "April 17, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_UPLOAD \- enable data upload
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UPLOAD, long upload);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_UPLOAD 3 "April 17, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_UPLOAD \- enable data upload
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UPLOAD, long upload);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_UPLOAD_BUFFERSIZE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_UPLOAD_BUFFERSIZE 3 "August 18, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_UPLOAD_BUFFERSIZE \- set preferred upload buffer size
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UPLOAD_BUFFERSIZE, long size);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_UPLOAD_BUFFERSIZE 3 "August 18, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_UPLOAD_BUFFERSIZE \- set preferred upload buffer size
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UPLOAD_BUFFERSIZE, long size);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_URL.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_URL 3 "December 18, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_URL \- provide the URL to use in the request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_URL, char *URL);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_URL 3 "December 18, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_URL \- provide the URL to use in the request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_URL, char *URL);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_USERAGENT.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_USERAGENT 3 "December 21, 2016" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_USERAGENT \- set HTTP user-agent header
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USERAGENT, char *ua);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_USERAGENT 3 "December 21, 2016" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_USERAGENT \- set HTTP user-agent header
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USERAGENT, char *ua);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_USERNAME.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_USERNAME 3 "May 05, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_USERNAME \- user name to use in authentication
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_USERNAME 3 "May 05, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_USERNAME \- user name to use in authentication
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_USERPWD.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_USERPWD 3 "August 24, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_USERPWD \- user name and password to use in authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USERPWD, char *userpwd);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_USERPWD 3 "August 24, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_USERPWD \- user name and password to use in authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USERPWD, char *userpwd);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_USE_SSL.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_USE_SSL 3 "October 10, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_USE_SSL \- request using SSL / TLS for the transfer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USE_SSL, long level);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_USE_SSL 3 "October 10, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_USE_SSL \- request using SSL / TLS for the transfer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USE_SSL, long level);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_VERBOSE.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_VERBOSE 3 "December 04, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_VERBOSE \- set verbose mode on/off
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_VERBOSE, long onoff);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_VERBOSE 3 "December 04, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_VERBOSE \- set verbose mode on/off
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_VERBOSE, long onoff);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_WILDCARDMATCH.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_WILDCARDMATCH 3 "May 18, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_WILDCARDMATCH \- enable directory wildcard transfers
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WILDCARDMATCH, long onoff);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_WILDCARDMATCH 3 "May 18, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_WILDCARDMATCH \- enable directory wildcard transfers
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WILDCARDMATCH, long onoff);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_WRITEDATA.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_WRITEDATA 3 "August 11, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_WRITEDATA \- custom pointer passed to the write callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WRITEDATA, void *pointer);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_WRITEDATA 3 "August 11, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_WRITEDATA \- custom pointer passed to the write callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WRITEDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_WRITEFUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_WRITEFUNCTION 3 "November 23, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_WRITEFUNCTION \- set callback for writing received data
.SH SYNOPSIS
.nf
#include <curl/curl.h>








|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_WRITEFUNCTION 3 "November 23, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_WRITEFUNCTION \- set callback for writing received data
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_XFERINFODATA.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_XFERINFODATA 3 "October 09, 2017" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_XFERINFODATA \- custom pointer passed to the progress callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_XFERINFODATA, void *pointer);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_XFERINFODATA 3 "October 09, 2017" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_XFERINFODATA \- custom pointer passed to the progress callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_XFERINFODATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_XFERINFOFUNCTION 3 "November 26, 2019" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_XFERINFOFUNCTION \- callback to progress meter function
.SH SYNOPSIS
#include <curl/curl.h>

int progress_callback(void *clientp,







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_XFERINFOFUNCTION 3 "November 26, 2019" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_XFERINFOFUNCTION \- callback to progress meter function
.SH SYNOPSIS
#include <curl/curl.h>

int progress_callback(void *clientp,
Changes to jni/curl/docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.3.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_XOAUTH2_BEARER 3 "May 22, 2018" "libcurl 7.68.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_XOAUTH2_BEARER \- specify OAuth 2.0 access token
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_XOAUTH2_BEARER, char *token);







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_XOAUTH2_BEARER 3 "May 22, 2018" "libcurl 7.69.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_XOAUTH2_BEARER \- specify OAuth 2.0 access token
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_XOAUTH2_BEARER, char *token);
Changes to jni/curl/docs/libcurl/opts/Makefile.in.
332
333
334
335
336
337
338

339
340
341
342
343
344
345
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@

USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@







>







332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
USE_WOLFSSH = @USE_WOLFSSH@
USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
581
582
583
584
585
586
587

588
589
590
591
592
593
594
  CURLOPT_LOCALPORTRANGE.3                      \
  CURLOPT_LOGIN_OPTIONS.3                       \
  CURLOPT_LOW_SPEED_LIMIT.3                     \
  CURLOPT_LOW_SPEED_TIME.3                      \
  CURLOPT_MAIL_AUTH.3                           \
  CURLOPT_MAIL_FROM.3                           \
  CURLOPT_MAIL_RCPT.3                           \

  CURLOPT_MAXAGE_CONN.3                         \
  CURLOPT_MAXCONNECTS.3                         \
  CURLOPT_MAXFILESIZE.3                         \
  CURLOPT_MAXFILESIZE_LARGE.3                   \
  CURLOPT_MAXREDIRS.3                           \
  CURLOPT_MAX_RECV_SPEED_LARGE.3                \
  CURLOPT_MAX_SEND_SPEED_LARGE.3                \







>







582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
  CURLOPT_LOCALPORTRANGE.3                      \
  CURLOPT_LOGIN_OPTIONS.3                       \
  CURLOPT_LOW_SPEED_LIMIT.3                     \
  CURLOPT_LOW_SPEED_TIME.3                      \
  CURLOPT_MAIL_AUTH.3                           \
  CURLOPT_MAIL_FROM.3                           \
  CURLOPT_MAIL_RCPT.3                           \
  CURLOPT_MAIL_RCPT_ALLLOWFAILS.3               \
  CURLOPT_MAXAGE_CONN.3                         \
  CURLOPT_MAXCONNECTS.3                         \
  CURLOPT_MAXFILESIZE.3                         \
  CURLOPT_MAXFILESIZE_LARGE.3                   \
  CURLOPT_MAXREDIRS.3                           \
  CURLOPT_MAX_RECV_SPEED_LARGE.3                \
  CURLOPT_MAX_SEND_SPEED_LARGE.3                \
Changes to jni/curl/docs/libcurl/opts/Makefile.inc.
184
185
186
187
188
189
190

191
192
193
194
195
196
197
  CURLOPT_LOCALPORTRANGE.3                      \
  CURLOPT_LOGIN_OPTIONS.3                       \
  CURLOPT_LOW_SPEED_LIMIT.3                     \
  CURLOPT_LOW_SPEED_TIME.3                      \
  CURLOPT_MAIL_AUTH.3                           \
  CURLOPT_MAIL_FROM.3                           \
  CURLOPT_MAIL_RCPT.3                           \

  CURLOPT_MAXAGE_CONN.3                         \
  CURLOPT_MAXCONNECTS.3                         \
  CURLOPT_MAXFILESIZE.3                         \
  CURLOPT_MAXFILESIZE_LARGE.3                   \
  CURLOPT_MAXREDIRS.3                           \
  CURLOPT_MAX_RECV_SPEED_LARGE.3                \
  CURLOPT_MAX_SEND_SPEED_LARGE.3                \







>







184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
  CURLOPT_LOCALPORTRANGE.3                      \
  CURLOPT_LOGIN_OPTIONS.3                       \
  CURLOPT_LOW_SPEED_LIMIT.3                     \
  CURLOPT_LOW_SPEED_TIME.3                      \
  CURLOPT_MAIL_AUTH.3                           \
  CURLOPT_MAIL_FROM.3                           \
  CURLOPT_MAIL_RCPT.3                           \
  CURLOPT_MAIL_RCPT_ALLLOWFAILS.3               \
  CURLOPT_MAXAGE_CONN.3                         \
  CURLOPT_MAXCONNECTS.3                         \
  CURLOPT_MAXFILESIZE.3                         \
  CURLOPT_MAXFILESIZE_LARGE.3                   \
  CURLOPT_MAXREDIRS.3                           \
  CURLOPT_MAX_RECV_SPEED_LARGE.3                \
  CURLOPT_MAX_SEND_SPEED_LARGE.3                \
Changes to jni/curl/docs/libcurl/symbols-in-versions.
101
102
103
104
105
106
107

108
109
110
111
112
113
114
CURLE_NO_CONNECTION_AVAILABLE   7.30.0
CURLE_OK                        7.1
CURLE_OPERATION_TIMEDOUT        7.10.2
CURLE_OPERATION_TIMEOUTED       7.1           7.17.0
CURLE_OUT_OF_MEMORY             7.1
CURLE_PARTIAL_FILE              7.1
CURLE_PEER_FAILED_VERIFICATION  7.17.1

CURLE_QUOTE_ERROR               7.17.0
CURLE_RANGE_ERROR               7.17.0
CURLE_READ_ERROR                7.1
CURLE_RECURSIVE_API_CALL        7.59.0
CURLE_RECV_ERROR                7.10
CURLE_REMOTE_ACCESS_DENIED      7.17.0
CURLE_REMOTE_DISK_FULL          7.17.0







>







101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
CURLE_NO_CONNECTION_AVAILABLE   7.30.0
CURLE_OK                        7.1
CURLE_OPERATION_TIMEDOUT        7.10.2
CURLE_OPERATION_TIMEOUTED       7.1           7.17.0
CURLE_OUT_OF_MEMORY             7.1
CURLE_PARTIAL_FILE              7.1
CURLE_PEER_FAILED_VERIFICATION  7.17.1
CURLE_QUIC_CONNECT_ERROR        7.69.0
CURLE_QUOTE_ERROR               7.17.0
CURLE_RANGE_ERROR               7.17.0
CURLE_READ_ERROR                7.1
CURLE_RECURSIVE_API_CALL        7.59.0
CURLE_RECV_ERROR                7.10
CURLE_REMOTE_ACCESS_DENIED      7.17.0
CURLE_REMOTE_DISK_FULL          7.17.0
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
CURLKHTYPE_ED25519              7.58.0
CURLKHTYPE_RSA                  7.19.6
CURLKHTYPE_RSA1                 7.19.6
CURLKHTYPE_UNKNOWN              7.19.6
CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE 7.30.0
CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE 7.30.0
CURLMOPT_MAXCONNECTS            7.16.3

CURLMOPT_MAX_HOST_CONNECTIONS   7.30.0
CURLMOPT_MAX_PIPELINE_LENGTH    7.30.0
CURLMOPT_MAX_TOTAL_CONNECTIONS  7.30.0
CURLMOPT_MAX_CONCURRENT_STREAMS  7.67.0
CURLMOPT_PIPELINING             7.16.0
CURLMOPT_PIPELINING_SERVER_BL   7.30.0
CURLMOPT_PIPELINING_SITE_BL     7.30.0
CURLMOPT_PUSHDATA               7.44.0
CURLMOPT_PUSHFUNCTION           7.44.0
CURLMOPT_SOCKETDATA             7.15.4
CURLMOPT_SOCKETFUNCTION         7.15.4
CURLMOPT_TIMERDATA              7.16.0
CURLMOPT_TIMERFUNCTION          7.16.0
CURLMSG_DONE                    7.9.6
CURLMSG_NONE                    7.9.6
CURLM_ADDED_ALREADY             7.32.1
CURLM_BAD_EASY_HANDLE           7.9.6

CURLM_BAD_HANDLE                7.9.6
CURLM_BAD_SOCKET                7.15.4
CURLM_CALL_MULTI_PERFORM        7.9.6
CURLM_CALL_MULTI_SOCKET         7.15.5
CURLM_INTERNAL_ERROR            7.9.6
CURLM_OK                        7.9.6
CURLM_OUT_OF_MEMORY             7.9.6
CURLM_RECURSIVE_API_CALL        7.59.0

CURLM_WAKEUP_FAILURE            7.68.0
CURLM_UNKNOWN_OPTION            7.15.4
CURLOPTTYPE_FUNCTIONPOINT       7.1
CURLOPTTYPE_LONG                7.1
CURLOPTTYPE_OBJECTPOINT         7.1
CURLOPTTYPE_OFF_T               7.11.0
CURLOPTTYPE_STRINGPOINT         7.46.0
CURLOPTTYPE_SLISTPOINT          7.65.2

CURLOPT_ABSTRACT_UNIX_SOCKET    7.53.0
CURLOPT_ACCEPTTIMEOUT_MS        7.24.0
CURLOPT_ACCEPT_ENCODING         7.21.6
CURLOPT_ADDRESS_SCOPE           7.19.0
CURLOPT_ALTSVC                  7.64.1
CURLOPT_ALTSVC_CTRL             7.64.1
CURLOPT_APPEND                  7.17.0







>



<













>








>

|




<

>







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
CURLKHTYPE_ED25519              7.58.0
CURLKHTYPE_RSA                  7.19.6
CURLKHTYPE_RSA1                 7.19.6
CURLKHTYPE_UNKNOWN              7.19.6
CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE 7.30.0
CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE 7.30.0
CURLMOPT_MAXCONNECTS            7.16.3
CURLMOPT_MAX_CONCURRENT_STREAMS  7.67.0
CURLMOPT_MAX_HOST_CONNECTIONS   7.30.0
CURLMOPT_MAX_PIPELINE_LENGTH    7.30.0
CURLMOPT_MAX_TOTAL_CONNECTIONS  7.30.0

CURLMOPT_PIPELINING             7.16.0
CURLMOPT_PIPELINING_SERVER_BL   7.30.0
CURLMOPT_PIPELINING_SITE_BL     7.30.0
CURLMOPT_PUSHDATA               7.44.0
CURLMOPT_PUSHFUNCTION           7.44.0
CURLMOPT_SOCKETDATA             7.15.4
CURLMOPT_SOCKETFUNCTION         7.15.4
CURLMOPT_TIMERDATA              7.16.0
CURLMOPT_TIMERFUNCTION          7.16.0
CURLMSG_DONE                    7.9.6
CURLMSG_NONE                    7.9.6
CURLM_ADDED_ALREADY             7.32.1
CURLM_BAD_EASY_HANDLE           7.9.6
CURLM_BAD_FUNCTION_ARGUMENT     7.69.0
CURLM_BAD_HANDLE                7.9.6
CURLM_BAD_SOCKET                7.15.4
CURLM_CALL_MULTI_PERFORM        7.9.6
CURLM_CALL_MULTI_SOCKET         7.15.5
CURLM_INTERNAL_ERROR            7.9.6
CURLM_OK                        7.9.6
CURLM_OUT_OF_MEMORY             7.9.6
CURLM_RECURSIVE_API_CALL        7.59.0
CURLM_UNKNOWN_OPTION            7.15.4
CURLM_WAKEUP_FAILURE            7.68.0
CURLOPT                         7.69.0
CURLOPTTYPE_FUNCTIONPOINT       7.1
CURLOPTTYPE_LONG                7.1
CURLOPTTYPE_OBJECTPOINT         7.1
CURLOPTTYPE_OFF_T               7.11.0

CURLOPTTYPE_SLISTPOINT          7.65.2
CURLOPTTYPE_STRINGPOINT         7.46.0
CURLOPT_ABSTRACT_UNIX_SOCKET    7.53.0
CURLOPT_ACCEPTTIMEOUT_MS        7.24.0
CURLOPT_ACCEPT_ENCODING         7.21.6
CURLOPT_ADDRESS_SCOPE           7.19.0
CURLOPT_ALTSVC                  7.64.1
CURLOPT_ALTSVC_CTRL             7.64.1
CURLOPT_APPEND                  7.17.0
464
465
466
467
468
469
470

471
472
473
474
475
476
477
CURLOPT_LOCALPORTRANGE          7.15.2
CURLOPT_LOGIN_OPTIONS           7.34.0
CURLOPT_LOW_SPEED_LIMIT         7.1
CURLOPT_LOW_SPEED_TIME          7.1
CURLOPT_MAIL_AUTH               7.25.0
CURLOPT_MAIL_FROM               7.20.0
CURLOPT_MAIL_RCPT               7.20.0

CURLOPT_MAXAGE_CONN             7.65.0
CURLOPT_MAXCONNECTS             7.7
CURLOPT_MAXFILESIZE             7.10.8
CURLOPT_MAXFILESIZE_LARGE       7.11.0
CURLOPT_MAXREDIRS               7.5
CURLOPT_MAX_RECV_SPEED_LARGE    7.15.5
CURLOPT_MAX_SEND_SPEED_LARGE    7.15.5







>







467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
CURLOPT_LOCALPORTRANGE          7.15.2
CURLOPT_LOGIN_OPTIONS           7.34.0
CURLOPT_LOW_SPEED_LIMIT         7.1
CURLOPT_LOW_SPEED_TIME          7.1
CURLOPT_MAIL_AUTH               7.25.0
CURLOPT_MAIL_FROM               7.20.0
CURLOPT_MAIL_RCPT               7.20.0
CURLOPT_MAIL_RCPT_ALLLOWFAILS   7.69.0
CURLOPT_MAXAGE_CONN             7.65.0
CURLOPT_MAXCONNECTS             7.7
CURLOPT_MAXFILESIZE             7.10.8
CURLOPT_MAXFILESIZE_LARGE       7.11.0
CURLOPT_MAXREDIRS               7.5
CURLOPT_MAX_RECV_SPEED_LARGE    7.15.5
CURLOPT_MAX_SEND_SPEED_LARGE    7.15.5
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
CURLUSESSL_TRY                  7.17.0
CURLU_APPENDQUERY               7.62.0
CURLU_DEFAULT_PORT              7.62.0
CURLU_DEFAULT_SCHEME            7.62.0
CURLU_DISALLOW_USER             7.62.0
CURLU_GUESS_SCHEME              7.62.0
CURLU_NON_SUPPORT_SCHEME        7.62.0
CURLU_NO_DEFAULT_PORT           7.62.0
CURLU_NO_AUTHORITY              7.67.0

CURLU_PATH_AS_IS                7.62.0
CURLU_URLDECODE                 7.62.0
CURLU_URLENCODE                 7.62.0
CURLVERSION_FIFTH               7.57.0
CURLVERSION_FIRST               7.10
CURLVERSION_FOURTH              7.16.1
CURLVERSION_NOW                 7.10
CURLVERSION_SECOND              7.11.1
CURLVERSION_THIRD               7.12.0
CURLVERSION_SIXTH               7.66.0

CURL_CHUNK_BGN_FUNC_FAIL        7.21.0
CURL_CHUNK_BGN_FUNC_OK          7.21.0
CURL_CHUNK_BGN_FUNC_SKIP        7.21.0
CURL_CHUNK_END_FUNC_FAIL        7.21.0
CURL_CHUNK_END_FUNC_OK          7.21.0
CURL_CSELECT_ERR                7.16.3
CURL_CSELECT_IN                 7.16.3







<

>








<

>







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
CURLUSESSL_TRY                  7.17.0
CURLU_APPENDQUERY               7.62.0
CURLU_DEFAULT_PORT              7.62.0
CURLU_DEFAULT_SCHEME            7.62.0
CURLU_DISALLOW_USER             7.62.0
CURLU_GUESS_SCHEME              7.62.0
CURLU_NON_SUPPORT_SCHEME        7.62.0

CURLU_NO_AUTHORITY              7.67.0
CURLU_NO_DEFAULT_PORT           7.62.0
CURLU_PATH_AS_IS                7.62.0
CURLU_URLDECODE                 7.62.0
CURLU_URLENCODE                 7.62.0
CURLVERSION_FIFTH               7.57.0
CURLVERSION_FIRST               7.10
CURLVERSION_FOURTH              7.16.1
CURLVERSION_NOW                 7.10
CURLVERSION_SECOND              7.11.1

CURLVERSION_SIXTH               7.66.0
CURLVERSION_THIRD               7.12.0
CURL_CHUNK_BGN_FUNC_FAIL        7.21.0
CURL_CHUNK_BGN_FUNC_OK          7.21.0
CURL_CHUNK_BGN_FUNC_SKIP        7.21.0
CURL_CHUNK_END_FUNC_FAIL        7.21.0
CURL_CHUNK_END_FUNC_OK          7.21.0
CURL_CSELECT_ERR                7.16.3
CURL_CSELECT_IN                 7.16.3
952
953
954
955
956
957
958

959
960
CURL_VERSION_SSL                7.10
CURL_VERSION_SSPI               7.13.2
CURL_VERSION_TLSAUTH_SRP        7.21.4
CURL_VERSION_UNIX_SOCKETS       7.40.0
CURL_WAIT_POLLIN                7.28.0
CURL_WAIT_POLLOUT               7.28.0
CURL_WAIT_POLLPRI               7.28.0

CURL_WRITEFUNC_PAUSE            7.18.0
CURL_ZERO_TERMINATED            7.56.0







>


956
957
958
959
960
961
962
963
964
965
CURL_VERSION_SSL                7.10
CURL_VERSION_SSPI               7.13.2
CURL_VERSION_TLSAUTH_SRP        7.21.4
CURL_VERSION_UNIX_SOCKETS       7.40.0
CURL_WAIT_POLLIN                7.28.0
CURL_WAIT_POLLOUT               7.28.0
CURL_WAIT_POLLPRI               7.28.0
CURL_WIN32                      7.69.0
CURL_WRITEFUNC_PAUSE            7.18.0
CURL_ZERO_TERMINATED            7.56.0
Changes to jni/curl/include/Makefile.in.
338
339
340
341
342
343
344

345
346
347
348
349
350
351
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@

USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@







>







338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
USE_WOLFSSH = @USE_WOLFSSH@
USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
Changes to jni/curl/include/curl/Makefile.in.
325
326
327
328
329
330
331

332
333
334
335
336
337
338
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@

USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@







>







325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
USE_WOLFSSH = @USE_WOLFSSH@
USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
Changes to jni/curl/include/curl/curl.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef CURLINC_CURL_H
#define CURLINC_CURL_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef CURLINC_CURL_H
#define CURLINC_CURL_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
#define CURL_STRICTER
#endif

#include "curlver.h"         /* libcurl version defines   */
#include "system.h"          /* determine things run-time */

/*
 * Define WIN32 when build target is Win32 API
 */

#if (defined(_WIN32) || defined(__WIN32__)) && \
     !defined(WIN32) && !defined(__SYMBIAN32__)
#define WIN32
#endif

#include <stdio.h>
#include <limits.h>

#if defined(__FreeBSD__) && (__FreeBSD__ >= 2)
/* Needed for __FreeBSD_version symbol definition */
#include <osreldate.h>
#endif

/* The include stuff here below is mainly for time_t! */
#include <sys/types.h>
#include <time.h>

#if defined(WIN32) && !defined(_WIN32_WCE) && !defined(__CYGWIN__)
#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H) || \
      defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H))
/* The check above prevents the winsock2 inclusion if winsock.h already was
   included, since they can't co-exist without problems */
#include <winsock2.h>
#include <ws2tcpip.h>
#endif
#endif

/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish
   libc5-based Linux systems. Only include it on systems that are known to
   require it! */
#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \
    defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \
    defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \
    defined(__CYGWIN__) || \
   (defined(__FreeBSD_version) && (__FreeBSD_version < 800000))
#include <sys/select.h>
#endif

#if !defined(WIN32) && !defined(_WIN32_WCE)
#include <sys/socket.h>
#endif

#if !defined(WIN32) && !defined(__WATCOMC__) && !defined(__VXWORKS__)
#include <sys/time.h>
#endif

#ifdef __BEOS__
#include <support/SupportDefs.h>
#endif








|


|
|
|














|




















|



|







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
#define CURL_STRICTER
#endif

#include "curlver.h"         /* libcurl version defines   */
#include "system.h"          /* determine things run-time */

/*
 * Define CURL_WIN32 when build target is Win32 API
 */

#if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) &&        \
  !defined(__SYMBIAN32__)
#define CURL_WIN32
#endif

#include <stdio.h>
#include <limits.h>

#if defined(__FreeBSD__) && (__FreeBSD__ >= 2)
/* Needed for __FreeBSD_version symbol definition */
#include <osreldate.h>
#endif

/* The include stuff here below is mainly for time_t! */
#include <sys/types.h>
#include <time.h>

#if defined(CURL_WIN32) && !defined(_WIN32_WCE) && !defined(__CYGWIN__)
#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H) || \
      defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H))
/* The check above prevents the winsock2 inclusion if winsock.h already was
   included, since they can't co-exist without problems */
#include <winsock2.h>
#include <ws2tcpip.h>
#endif
#endif

/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish
   libc5-based Linux systems. Only include it on systems that are known to
   require it! */
#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \
    defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \
    defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \
    defined(__CYGWIN__) || \
   (defined(__FreeBSD_version) && (__FreeBSD_version < 800000))
#include <sys/select.h>
#endif

#if !defined(CURL_WIN32) && !defined(_WIN32_WCE)
#include <sys/socket.h>
#endif

#if !defined(CURL_WIN32) && !defined(__WATCOMC__) && !defined(__VXWORKS__)
#include <sys/time.h>
#endif

#ifdef __BEOS__
#include <support/SupportDefs.h>
#endif

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

/*
 * libcurl external API function linkage decorations.
 */

#ifdef CURL_STATICLIB
#  define CURL_EXTERN
#elif defined(WIN32) || defined(__SYMBIAN32__) || \
     (__has_declspec_attribute(dllexport) && \
      __has_declspec_attribute(dllimport))
#  if defined(BUILDING_LIBCURL)
#    define CURL_EXTERN  __declspec(dllexport)
#  else
#    define CURL_EXTERN  __declspec(dllimport)
#  endif
#elif defined(BUILDING_LIBCURL) && defined(CURL_HIDDEN_SYMBOLS)
#  define CURL_EXTERN CURL_EXTERN_SYMBOL
#else
#  define CURL_EXTERN
#endif

#ifndef curl_socket_typedef
/* socket typedef */
#if defined(WIN32) && !defined(__LWIP_OPT_H__) && !defined(LWIP_HDR_OPT_H)
typedef SOCKET curl_socket_t;
#define CURL_SOCKET_BAD INVALID_SOCKET
#else
typedef int curl_socket_t;
#define CURL_SOCKET_BAD -1
#endif
#define curl_socket_typedef







|















|







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

/*
 * libcurl external API function linkage decorations.
 */

#ifdef CURL_STATICLIB
#  define CURL_EXTERN
#elif defined(CURL_WIN32) || defined(__SYMBIAN32__) || \
     (__has_declspec_attribute(dllexport) && \
      __has_declspec_attribute(dllimport))
#  if defined(BUILDING_LIBCURL)
#    define CURL_EXTERN  __declspec(dllexport)
#  else
#    define CURL_EXTERN  __declspec(dllimport)
#  endif
#elif defined(BUILDING_LIBCURL) && defined(CURL_HIDDEN_SYMBOLS)
#  define CURL_EXTERN CURL_EXTERN_SYMBOL
#else
#  define CURL_EXTERN
#endif

#ifndef curl_socket_typedef
/* socket typedef */
#if defined(CURL_WIN32) && !defined(__LWIP_OPT_H__) && !defined(LWIP_HDR_OPT_H)
typedef SOCKET curl_socket_t;
#define CURL_SOCKET_BAD INVALID_SOCKET
#else
typedef int curl_socket_t;
#define CURL_SOCKET_BAD -1
#endif
#define curl_socket_typedef
605
606
607
608
609
610
611

612
613
614
615
616
617
618
  CURLE_HTTP2_STREAM,            /* 92 - stream error in HTTP/2 framing layer
                                    */
  CURLE_RECURSIVE_API_CALL,      /* 93 - an api function was called from
                                    inside a callback */
  CURLE_AUTH_ERROR,              /* 94 - an authentication function returned an
                                    error */
  CURLE_HTTP3,                   /* 95 - An HTTP/3 layer problem */

  CURL_LAST /* never use! */
} CURLcode;

#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
                          the obsolete stuff removed! */

/* Previously obsolete error code re-used in 7.38.0 */







>







605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
  CURLE_HTTP2_STREAM,            /* 92 - stream error in HTTP/2 framing layer
                                    */
  CURLE_RECURSIVE_API_CALL,      /* 93 - an api function was called from
                                    inside a callback */
  CURLE_AUTH_ERROR,              /* 94 - an authentication function returned an
                                    error */
  CURLE_HTTP3,                   /* 95 - An HTTP/3 layer problem */
  CURLE_QUIC_CONNECT_ERROR,      /* 96 - QUIC connection error */
  CURL_LAST /* never use! */
} CURLcode;

#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
                          the obsolete stuff removed! */

/* Previously obsolete error code re-used in 7.38.0 */
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
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119

1120
1121


1122


1123


1124


1125


1126


1127


1128

1129
1130

1131
1132
1133
1134
1135
1136

1137
1138


1139

1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198

1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271

1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576

1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940

1941


1942
1943
1944
1945
1946
1947
1948
#define CURLOPTTYPE_OBJECTPOINT   10000
#define CURLOPTTYPE_FUNCTIONPOINT 20000
#define CURLOPTTYPE_OFF_T         30000

/* *STRINGPOINT is an alias for OBJECTPOINT to allow tools to extract the
   string options from the header file */

/* name is uppercase CURLOPT_<name>,
   type is one of the defined CURLOPTTYPE_<type>
   number is unique identifier */
#ifdef CINIT
#undef CINIT
#endif

#ifdef CURL_ISOCPP
#define CINIT(na,t,nu) CURLOPT_ ## na = CURLOPTTYPE_ ## t + nu
#else
/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
#define LONG          CURLOPTTYPE_LONG
#define OBJECTPOINT   CURLOPTTYPE_OBJECTPOINT
#define STRINGPOINT   CURLOPTTYPE_OBJECTPOINT
#define SLISTPOINT    CURLOPTTYPE_OBJECTPOINT
#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT
#define OFF_T         CURLOPTTYPE_OFF_T
#define CINIT(name,type,number) CURLOPT_/**/name = type + number
#endif

/* handy aliases that make no run-time difference */
#define CURLOPTTYPE_STRINGPOINT  CURLOPTTYPE_OBJECTPOINT
#define CURLOPTTYPE_SLISTPOINT  CURLOPTTYPE_OBJECTPOINT

/*
 * This macro-mania below setups the CURLOPT_[what] enum, to be used with
 * curl_easy_setopt(). The first argument in the CINIT() macro is the [what]
 * word.
 */

typedef enum {
  /* This is the FILE * or void * the regular output should be written to. */
  CINIT(WRITEDATA, OBJECTPOINT, 1),

  /* The full URL to get/put */
  CINIT(URL, STRINGPOINT, 2),

  /* Port number to connect to, if other than default. */
  CINIT(PORT, LONG, 3),

  /* Name of proxy to use. */
  CINIT(PROXY, STRINGPOINT, 4),

  /* "user:password;options" to use when fetching. */
  CINIT(USERPWD, STRINGPOINT, 5),

  /* "user:password" to use with proxy. */
  CINIT(PROXYUSERPWD, STRINGPOINT, 6),

  /* Range to get, specified as an ASCII string. */
  CINIT(RANGE, STRINGPOINT, 7),

  /* not used */

  /* Specified file stream to upload from (use as input): */
  CINIT(READDATA, OBJECTPOINT, 9),

  /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE
   * bytes big. */
  CINIT(ERRORBUFFER, OBJECTPOINT, 10),

  /* Function that will be called to store the output (instead of fwrite). The
   * parameters will use fwrite() syntax, make sure to follow them. */
  CINIT(WRITEFUNCTION, FUNCTIONPOINT, 11),

  /* Function that will be called to read the input (instead of fread). The
   * parameters will use fread() syntax, make sure to follow them. */
  CINIT(READFUNCTION, FUNCTIONPOINT, 12),

  /* Time-out the read operation after this amount of seconds */
  CINIT(TIMEOUT, LONG, 13),

  /* If the CURLOPT_INFILE is used, this can be used to inform libcurl about
   * how large the file being sent really is. That allows better error
   * checking and better verifies that the upload was successful. -1 means
   * unknown size.
   *
   * For large file support, there is also a _LARGE version of the key
   * which takes an off_t type, allowing platforms with larger off_t
   * sizes to handle larger files.  See below for INFILESIZE_LARGE.
   */
  CINIT(INFILESIZE, LONG, 14),

  /* POST static input fields. */
  CINIT(POSTFIELDS, OBJECTPOINT, 15),

  /* Set the referrer page (needed by some CGIs) */
  CINIT(REFERER, STRINGPOINT, 16),

  /* Set the FTP PORT string (interface name, named or numerical IP address)
     Use i.e '-' to use default address. */
  CINIT(FTPPORT, STRINGPOINT, 17),

  /* Set the User-Agent string (examined by some CGIs) */
  CINIT(USERAGENT, STRINGPOINT, 18),

  /* If the download receives less than "low speed limit" bytes/second
   * during "low speed time" seconds, the operations is aborted.
   * You could i.e if you have a pretty high speed connection, abort if
   * it is less than 2000 bytes/sec during 20 seconds.
   */

  /* Set the "low speed limit" */
  CINIT(LOW_SPEED_LIMIT, LONG, 19),

  /* Set the "low speed time" */
  CINIT(LOW_SPEED_TIME, LONG, 20),

  /* Set the continuation offset.
   *
   * Note there is also a _LARGE version of this key which uses
   * off_t types, allowing for large file offsets on platforms which
   * use larger-than-32-bit off_t's.  Look below for RESUME_FROM_LARGE.
   */
  CINIT(RESUME_FROM, LONG, 21),

  /* Set cookie in request: */
  CINIT(COOKIE, STRINGPOINT, 22),

  /* This points to a linked list of headers, struct curl_slist kind. This
     list is also used for RTSP (in spite of its name) */
  CINIT(HTTPHEADER, SLISTPOINT, 23),

  /* This points to a linked list of post entries, struct curl_httppost */
  CINIT(HTTPPOST, OBJECTPOINT, 24),

  /* name of the file keeping your private SSL-certificate */
  CINIT(SSLCERT, STRINGPOINT, 25),

  /* password for the SSL or SSH private key */
  CINIT(KEYPASSWD, STRINGPOINT, 26),

  /* send TYPE parameter? */
  CINIT(CRLF, LONG, 27),

  /* send linked-list of QUOTE commands */
  CINIT(QUOTE, SLISTPOINT, 28),

  /* send FILE * or void * to store headers to, if you use a callback it
     is simply passed to the callback unmodified */
  CINIT(HEADERDATA, OBJECTPOINT, 29),

  /* point to a file to read the initial cookies from, also enables
     "cookie awareness" */
  CINIT(COOKIEFILE, STRINGPOINT, 31),

  /* What version to specifically try to use.
     See CURL_SSLVERSION defines below. */
  CINIT(SSLVERSION, LONG, 32),

  /* What kind of HTTP time condition to use, see defines */
  CINIT(TIMECONDITION, LONG, 33),

  /* Time to use with the above condition. Specified in number of seconds
     since 1 Jan 1970 */
  CINIT(TIMEVALUE, LONG, 34),

  /* 35 = OBSOLETE */

  /* Custom request, for customizing the get command like
     HTTP: DELETE, TRACE and others
     FTP: to use a different list command
     */
  CINIT(CUSTOMREQUEST, STRINGPOINT, 36),

  /* FILE handle to use instead of stderr */
  CINIT(STDERR, OBJECTPOINT, 37),

  /* 38 is not used */

  /* send linked-list of post-transfer QUOTE commands */
  CINIT(POSTQUOTE, SLISTPOINT, 39),

  CINIT(OBSOLETE40, OBJECTPOINT, 40), /* OBSOLETE, do not use! */


  CINIT(VERBOSE, LONG, 41),      /* talk a lot */


  CINIT(HEADER, LONG, 42),       /* throw the header out too */


  CINIT(NOPROGRESS, LONG, 43),   /* shut off the progress meter */


  CINIT(NOBODY, LONG, 44),       /* use HEAD to get http document */


  CINIT(FAILONERROR, LONG, 45),  /* no output on http error codes >= 400 */


  CINIT(UPLOAD, LONG, 46),       /* this is an upload */


  CINIT(POST, LONG, 47),         /* HTTP POST method */


  CINIT(DIRLISTONLY, LONG, 48),  /* bare names when listing directories */


  CINIT(APPEND, LONG, 50),       /* Append instead of overwrite on upload! */


  /* Specify whether to read the user+password from the .netrc or the URL.
   * This must be one of the CURL_NETRC_* enums below. */
  CINIT(NETRC, LONG, 51),

  CINIT(FOLLOWLOCATION, LONG, 52),  /* use Location: Luke! */


  CINIT(TRANSFERTEXT, LONG, 53), /* transfer data in text/ASCII format */


  CINIT(PUT, LONG, 54),          /* HTTP PUT */


  /* 55 = OBSOLETE */

  /* DEPRECATED
   * Function that will be called instead of the internal progress display
   * function. This function should be defined as the curl_progress_callback
   * prototype defines. */
  CINIT(PROGRESSFUNCTION, FUNCTIONPOINT, 56),

  /* Data passed to the CURLOPT_PROGRESSFUNCTION and CURLOPT_XFERINFOFUNCTION
     callbacks */
  CINIT(PROGRESSDATA, OBJECTPOINT, 57),
#define CURLOPT_XFERINFODATA CURLOPT_PROGRESSDATA

  /* We want the referrer field set automatically when following locations */
  CINIT(AUTOREFERER, LONG, 58),

  /* Port of the proxy, can be set in the proxy string as well with:
     "[host]:[port]" */
  CINIT(PROXYPORT, LONG, 59),

  /* size of the POST input data, if strlen() is not good to use */
  CINIT(POSTFIELDSIZE, LONG, 60),

  /* tunnel non-http operations through a HTTP proxy */
  CINIT(HTTPPROXYTUNNEL, LONG, 61),

  /* Set the interface string to use as outgoing network interface */
  CINIT(INTERFACE, STRINGPOINT, 62),

  /* Set the krb4/5 security level, this also enables krb4/5 awareness.  This
   * is a string, 'clear', 'safe', 'confidential' or 'private'.  If the string
   * is set but doesn't match one of these, 'private' will be used.  */
  CINIT(KRBLEVEL, STRINGPOINT, 63),

  /* Set if we should verify the peer in ssl handshake, set 1 to verify. */
  CINIT(SSL_VERIFYPEER, LONG, 64),

  /* The CApath or CAfile used to validate the peer certificate
     this option is used only if SSL_VERIFYPEER is true */
  CINIT(CAINFO, STRINGPOINT, 65),

  /* 66 = OBSOLETE */
  /* 67 = OBSOLETE */

  /* Maximum number of http redirects to follow */
  CINIT(MAXREDIRS, LONG, 68),

  /* Pass a long set to 1 to get the date of the requested document (if
     possible)! Pass a zero to shut it off. */
  CINIT(FILETIME, LONG, 69),

  /* This points to a linked list of telnet options */
  CINIT(TELNETOPTIONS, SLISTPOINT, 70),

  /* Max amount of cached alive connections */
  CINIT(MAXCONNECTS, LONG, 71),

  CINIT(OBSOLETE72, LONG, 72), /* OBSOLETE, do not use! */


  /* 73 = OBSOLETE */

  /* Set to explicitly use a new connection for the upcoming transfer.
     Do not use this unless you're absolutely sure of this, as it makes the
     operation slower and is less friendly for the network. */
  CINIT(FRESH_CONNECT, LONG, 74),

  /* Set to explicitly forbid the upcoming transfer's connection to be re-used
     when done. Do not use this unless you're absolutely sure of this, as it
     makes the operation slower and is less friendly for the network. */
  CINIT(FORBID_REUSE, LONG, 75),

  /* Set to a file name that contains random data for libcurl to use to
     seed the random engine when doing SSL connects. */
  CINIT(RANDOM_FILE, STRINGPOINT, 76),

  /* Set to the Entropy Gathering Daemon socket pathname */
  CINIT(EGDSOCKET, STRINGPOINT, 77),

  /* Time-out connect operations after this amount of seconds, if connects are
     OK within this time, then fine... This only aborts the connect phase. */
  CINIT(CONNECTTIMEOUT, LONG, 78),

  /* Function that will be called to store headers (instead of fwrite). The
   * parameters will use fwrite() syntax, make sure to follow them. */
  CINIT(HEADERFUNCTION, FUNCTIONPOINT, 79),

  /* Set this to force the HTTP request to get back to GET. Only really usable
     if POST, PUT or a custom request have been used first.
   */
  CINIT(HTTPGET, LONG, 80),

  /* Set if we should verify the Common name from the peer certificate in ssl
   * handshake, set 1 to check existence, 2 to ensure that it matches the
   * provided hostname. */
  CINIT(SSL_VERIFYHOST, LONG, 81),

  /* Specify which file name to write all known cookies in after completed
     operation. Set file name to "-" (dash) to make it go to stdout. */
  CINIT(COOKIEJAR, STRINGPOINT, 82),

  /* Specify which SSL ciphers to use */
  CINIT(SSL_CIPHER_LIST, STRINGPOINT, 83),

  /* Specify which HTTP version to use! This must be set to one of the
     CURL_HTTP_VERSION* enums set below. */
  CINIT(HTTP_VERSION, LONG, 84),

  /* Specifically switch on or off the FTP engine's use of the EPSV command. By
     default, that one will always be attempted before the more traditional
     PASV command. */
  CINIT(FTP_USE_EPSV, LONG, 85),

  /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */
  CINIT(SSLCERTTYPE, STRINGPOINT, 86),

  /* name of the file keeping your private SSL-key */
  CINIT(SSLKEY, STRINGPOINT, 87),

  /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */
  CINIT(SSLKEYTYPE, STRINGPOINT, 88),

  /* crypto engine for the SSL-sub system */
  CINIT(SSLENGINE, STRINGPOINT, 89),

  /* set the crypto engine for the SSL-sub system as default
     the param has no meaning...
   */
  CINIT(SSLENGINE_DEFAULT, LONG, 90),

  /* Non-zero value means to use the global dns cache */
  CINIT(DNS_USE_GLOBAL_CACHE, LONG, 91), /* DEPRECATED, do not use! */


  /* DNS cache timeout */
  CINIT(DNS_CACHE_TIMEOUT, LONG, 92),

  /* send linked-list of pre-transfer QUOTE commands */
  CINIT(PREQUOTE, SLISTPOINT, 93),

  /* set the debug function */
  CINIT(DEBUGFUNCTION, FUNCTIONPOINT, 94),

  /* set the data for the debug function */
  CINIT(DEBUGDATA, OBJECTPOINT, 95),

  /* mark this as start of a cookie session */
  CINIT(COOKIESESSION, LONG, 96),

  /* The CApath directory used to validate the peer certificate
     this option is used only if SSL_VERIFYPEER is true */
  CINIT(CAPATH, STRINGPOINT, 97),

  /* Instruct libcurl to use a smaller receive buffer */
  CINIT(BUFFERSIZE, LONG, 98),

  /* Instruct libcurl to not use any signal/alarm handlers, even when using
     timeouts. This option is useful for multi-threaded applications.
     See libcurl-the-guide for more background information. */
  CINIT(NOSIGNAL, LONG, 99),

  /* Provide a CURLShare for mutexing non-ts data */
  CINIT(SHARE, OBJECTPOINT, 100),

  /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default),
     CURLPROXY_HTTPS, CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and
     CURLPROXY_SOCKS5. */
  CINIT(PROXYTYPE, LONG, 101),

  /* Set the Accept-Encoding string. Use this to tell a server you would like
     the response to be compressed. Before 7.21.6, this was known as
     CURLOPT_ENCODING */
  CINIT(ACCEPT_ENCODING, STRINGPOINT, 102),

  /* Set pointer to private data */
  CINIT(PRIVATE, OBJECTPOINT, 103),

  /* Set aliases for HTTP 200 in the HTTP Response header */
  CINIT(HTTP200ALIASES, SLISTPOINT, 104),

  /* Continue to send authentication (user+password) when following locations,
     even when hostname changed. This can potentially send off the name
     and password to whatever host the server decides. */
  CINIT(UNRESTRICTED_AUTH, LONG, 105),

  /* Specifically switch on or off the FTP engine's use of the EPRT command (
     it also disables the LPRT attempt). By default, those ones will always be
     attempted before the good old traditional PORT command. */
  CINIT(FTP_USE_EPRT, LONG, 106),

  /* Set this to a bitmask value to enable the particular authentications
     methods you like. Use this in combination with CURLOPT_USERPWD.
     Note that setting multiple bits may cause extra network round-trips. */
  CINIT(HTTPAUTH, LONG, 107),

  /* Set the ssl context callback function, currently only for OpenSSL or
     WolfSSL ssl_ctx, or mbedTLS mbedtls_ssl_config in the second argument.
     The function must match the curl_ssl_ctx_callback prototype. */
  CINIT(SSL_CTX_FUNCTION, FUNCTIONPOINT, 108),

  /* Set the userdata for the ssl context callback function's third
     argument */
  CINIT(SSL_CTX_DATA, OBJECTPOINT, 109),

  /* FTP Option that causes missing dirs to be created on the remote server.
     In 7.19.4 we introduced the convenience enums for this option using the
     CURLFTP_CREATE_DIR prefix.
  */
  CINIT(FTP_CREATE_MISSING_DIRS, LONG, 110),

  /* Set this to a bitmask value to enable the particular authentications
     methods you like. Use this in combination with CURLOPT_PROXYUSERPWD.
     Note that setting multiple bits may cause extra network round-trips. */
  CINIT(PROXYAUTH, LONG, 111),

  /* FTP option that changes the timeout, in seconds, associated with
     getting a response.  This is different from transfer timeout time and
     essentially places a demand on the FTP server to acknowledge commands
     in a timely manner. */
  CINIT(FTP_RESPONSE_TIMEOUT, LONG, 112),
#define CURLOPT_SERVER_RESPONSE_TIMEOUT CURLOPT_FTP_RESPONSE_TIMEOUT

  /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to
     tell libcurl to resolve names to those IP versions only. This only has
     affect on systems with support for more than one, i.e IPv4 _and_ IPv6. */
  CINIT(IPRESOLVE, LONG, 113),

  /* Set this option to limit the size of a file that will be downloaded from
     an HTTP or FTP server.

     Note there is also _LARGE version which adds large file support for
     platforms which have larger off_t sizes.  See MAXFILESIZE_LARGE below. */
  CINIT(MAXFILESIZE, LONG, 114),

  /* See the comment for INFILESIZE above, but in short, specifies
   * the size of the file being uploaded.  -1 means unknown.
   */
  CINIT(INFILESIZE_LARGE, OFF_T, 115),

  /* Sets the continuation offset.  There is also a LONG version of this;
   * look above for RESUME_FROM.
   */
  CINIT(RESUME_FROM_LARGE, OFF_T, 116),

  /* Sets the maximum size of data that will be downloaded from
   * an HTTP or FTP server.  See MAXFILESIZE above for the LONG version.
   */
  CINIT(MAXFILESIZE_LARGE, OFF_T, 117),

  /* Set this option to the file name of your .netrc file you want libcurl
     to parse (using the CURLOPT_NETRC option). If not set, libcurl will do
     a poor attempt to find the user's home directory and check for a .netrc
     file in there. */
  CINIT(NETRC_FILE, STRINGPOINT, 118),

  /* Enable SSL/TLS for FTP, pick one of:
     CURLUSESSL_TRY     - try using SSL, proceed anyway otherwise
     CURLUSESSL_CONTROL - SSL for the control connection or fail
     CURLUSESSL_ALL     - SSL for all communication or fail
  */
  CINIT(USE_SSL, LONG, 119),

  /* The _LARGE version of the standard POSTFIELDSIZE option */
  CINIT(POSTFIELDSIZE_LARGE, OFF_T, 120),

  /* Enable/disable the TCP Nagle algorithm */
  CINIT(TCP_NODELAY, LONG, 121),

  /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
  /* 123 OBSOLETE. Gone in 7.16.0 */
  /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
  /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
  /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
  /* 127 OBSOLETE. Gone in 7.16.0 */
  /* 128 OBSOLETE. Gone in 7.16.0 */

  /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option
     can be used to change libcurl's default action which is to first try
     "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK
     response has been received.

     Available parameters are:
     CURLFTPAUTH_DEFAULT - let libcurl decide
     CURLFTPAUTH_SSL     - try "AUTH SSL" first, then TLS
     CURLFTPAUTH_TLS     - try "AUTH TLS" first, then SSL
  */
  CINIT(FTPSSLAUTH, LONG, 129),

  CINIT(IOCTLFUNCTION, FUNCTIONPOINT, 130),
  CINIT(IOCTLDATA, OBJECTPOINT, 131),

  /* 132 OBSOLETE. Gone in 7.16.0 */
  /* 133 OBSOLETE. Gone in 7.16.0 */

  /* zero terminated string for pass on to the FTP server when asked for
     "account" info */
  CINIT(FTP_ACCOUNT, STRINGPOINT, 134),

  /* feed cookie into cookie engine */
  CINIT(COOKIELIST, STRINGPOINT, 135),

  /* ignore Content-Length */
  CINIT(IGNORE_CONTENT_LENGTH, LONG, 136),

  /* Set to non-zero to skip the IP address received in a 227 PASV FTP server
     response. Typically used for FTP-SSL purposes but is not restricted to
     that. libcurl will then instead use the same IP address it used for the
     control connection. */
  CINIT(FTP_SKIP_PASV_IP, LONG, 137),

  /* Select "file method" to use when doing FTP, see the curl_ftpmethod
     above. */
  CINIT(FTP_FILEMETHOD, LONG, 138),

  /* Local port number to bind the socket to */
  CINIT(LOCALPORT, LONG, 139),

  /* Number of ports to try, including the first one set with LOCALPORT.
     Thus, setting it to 1 will make no additional attempts but the first.
  */
  CINIT(LOCALPORTRANGE, LONG, 140),

  /* no transfer, set up connection and let application use the socket by
     extracting it with CURLINFO_LASTSOCKET */
  CINIT(CONNECT_ONLY, LONG, 141),

  /* Function that will be called to convert from the
     network encoding (instead of using the iconv calls in libcurl) */
  CINIT(CONV_FROM_NETWORK_FUNCTION, FUNCTIONPOINT, 142),

  /* Function that will be called to convert to the
     network encoding (instead of using the iconv calls in libcurl) */
  CINIT(CONV_TO_NETWORK_FUNCTION, FUNCTIONPOINT, 143),

  /* Function that will be called to convert from UTF8
     (instead of using the iconv calls in libcurl)
     Note that this is used only for SSL certificate processing */
  CINIT(CONV_FROM_UTF8_FUNCTION, FUNCTIONPOINT, 144),

  /* if the connection proceeds too quickly then need to slow it down */
  /* limit-rate: maximum number of bytes per second to send or receive */
  CINIT(MAX_SEND_SPEED_LARGE, OFF_T, 145),
  CINIT(MAX_RECV_SPEED_LARGE, OFF_T, 146),

  /* Pointer to command string to send if USER/PASS fails. */
  CINIT(FTP_ALTERNATIVE_TO_USER, STRINGPOINT, 147),

  /* callback function for setting socket options */
  CINIT(SOCKOPTFUNCTION, FUNCTIONPOINT, 148),
  CINIT(SOCKOPTDATA, OBJECTPOINT, 149),

  /* set to 0 to disable session ID re-use for this transfer, default is
     enabled (== 1) */
  CINIT(SSL_SESSIONID_CACHE, LONG, 150),

  /* allowed SSH authentication methods */
  CINIT(SSH_AUTH_TYPES, LONG, 151),

  /* Used by scp/sftp to do public/private key authentication */
  CINIT(SSH_PUBLIC_KEYFILE, STRINGPOINT, 152),
  CINIT(SSH_PRIVATE_KEYFILE, STRINGPOINT, 153),

  /* Send CCC (Clear Command Channel) after authentication */
  CINIT(FTP_SSL_CCC, LONG, 154),

  /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */
  CINIT(TIMEOUT_MS, LONG, 155),
  CINIT(CONNECTTIMEOUT_MS, LONG, 156),

  /* set to zero to disable the libcurl's decoding and thus pass the raw body
     data to the application even when it is encoded/compressed */
  CINIT(HTTP_TRANSFER_DECODING, LONG, 157),
  CINIT(HTTP_CONTENT_DECODING, LONG, 158),

  /* Permission used when creating new files and directories on the remote
     server for protocols that support it, SFTP/SCP/FILE */
  CINIT(NEW_FILE_PERMS, LONG, 159),
  CINIT(NEW_DIRECTORY_PERMS, LONG, 160),

  /* Set the behaviour of POST when redirecting. Values must be set to one
     of CURL_REDIR* defines below. This used to be called CURLOPT_POST301 */
  CINIT(POSTREDIR, LONG, 161),

  /* used by scp/sftp to verify the host's public key */
  CINIT(SSH_HOST_PUBLIC_KEY_MD5, STRINGPOINT, 162),

  /* Callback function for opening socket (instead of socket(2)). Optionally,
     callback is able change the address or refuse to connect returning
     CURL_SOCKET_BAD.  The callback should have type
     curl_opensocket_callback */
  CINIT(OPENSOCKETFUNCTION, FUNCTIONPOINT, 163),
  CINIT(OPENSOCKETDATA, OBJECTPOINT, 164),

  /* POST volatile input fields. */
  CINIT(COPYPOSTFIELDS, OBJECTPOINT, 165),

  /* set transfer mode (;type=<a|i>) when doing FTP via an HTTP proxy */
  CINIT(PROXY_TRANSFER_MODE, LONG, 166),

  /* Callback function for seeking in the input stream */
  CINIT(SEEKFUNCTION, FUNCTIONPOINT, 167),
  CINIT(SEEKDATA, OBJECTPOINT, 168),

  /* CRL file */
  CINIT(CRLFILE, STRINGPOINT, 169),

  /* Issuer certificate */
  CINIT(ISSUERCERT, STRINGPOINT, 170),

  /* (IPv6) Address scope */
  CINIT(ADDRESS_SCOPE, LONG, 171),

  /* Collect certificate chain info and allow it to get retrievable with
     CURLINFO_CERTINFO after the transfer is complete. */
  CINIT(CERTINFO, LONG, 172),

  /* "name" and "pwd" to use when fetching. */
  CINIT(USERNAME, STRINGPOINT, 173),
  CINIT(PASSWORD, STRINGPOINT, 174),

    /* "name" and "pwd" to use with Proxy when fetching. */
  CINIT(PROXYUSERNAME, STRINGPOINT, 175),
  CINIT(PROXYPASSWORD, STRINGPOINT, 176),

  /* Comma separated list of hostnames defining no-proxy zones. These should
     match both hostnames directly, and hostnames within a domain. For
     example, local.com will match local.com and www.local.com, but NOT
     notlocal.com or www.notlocal.com. For compatibility with other
     implementations of this, .local.com will be considered to be the same as
     local.com. A single * is the only valid wildcard, and effectively
     disables the use of proxy. */
  CINIT(NOPROXY, STRINGPOINT, 177),

  /* block size for TFTP transfers */
  CINIT(TFTP_BLKSIZE, LONG, 178),

  /* Socks Service */
  CINIT(SOCKS5_GSSAPI_SERVICE, STRINGPOINT, 179), /* DEPRECATED, do not use! */


  /* Socks Service */
  CINIT(SOCKS5_GSSAPI_NEC, LONG, 180),

  /* set the bitmask for the protocols that are allowed to be used for the
     transfer, which thus helps the app which takes URLs from users or other
     external inputs and want to restrict what protocol(s) to deal
     with. Defaults to CURLPROTO_ALL. */
  CINIT(PROTOCOLS, LONG, 181),

  /* set the bitmask for the protocols that libcurl is allowed to follow to,
     as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs
     to be set in both bitmasks to be allowed to get redirected to. */
  CINIT(REDIR_PROTOCOLS, LONG, 182),

  /* set the SSH knownhost file name to use */
  CINIT(SSH_KNOWNHOSTS, STRINGPOINT, 183),

  /* set the SSH host key callback, must point to a curl_sshkeycallback
     function */
  CINIT(SSH_KEYFUNCTION, FUNCTIONPOINT, 184),

  /* set the SSH host key callback custom pointer */
  CINIT(SSH_KEYDATA, OBJECTPOINT, 185),

  /* set the SMTP mail originator */
  CINIT(MAIL_FROM, STRINGPOINT, 186),

  /* set the list of SMTP mail receiver(s) */
  CINIT(MAIL_RCPT, SLISTPOINT, 187),

  /* FTP: send PRET before PASV */
  CINIT(FTP_USE_PRET, LONG, 188),

  /* RTSP request method (OPTIONS, SETUP, PLAY, etc...) */
  CINIT(RTSP_REQUEST, LONG, 189),

  /* The RTSP session identifier */
  CINIT(RTSP_SESSION_ID, STRINGPOINT, 190),

  /* The RTSP stream URI */
  CINIT(RTSP_STREAM_URI, STRINGPOINT, 191),

  /* The Transport: header to use in RTSP requests */
  CINIT(RTSP_TRANSPORT, STRINGPOINT, 192),

  /* Manually initialize the client RTSP CSeq for this handle */
  CINIT(RTSP_CLIENT_CSEQ, LONG, 193),

  /* Manually initialize the server RTSP CSeq for this handle */
  CINIT(RTSP_SERVER_CSEQ, LONG, 194),

  /* The stream to pass to INTERLEAVEFUNCTION. */
  CINIT(INTERLEAVEDATA, OBJECTPOINT, 195),

  /* Let the application define a custom write method for RTP data */
  CINIT(INTERLEAVEFUNCTION, FUNCTIONPOINT, 196),

  /* Turn on wildcard matching */
  CINIT(WILDCARDMATCH, LONG, 197),

  /* Directory matching callback called before downloading of an
     individual file (chunk) started */
  CINIT(CHUNK_BGN_FUNCTION, FUNCTIONPOINT, 198),

  /* Directory matching callback called after the file (chunk)
     was downloaded, or skipped */
  CINIT(CHUNK_END_FUNCTION, FUNCTIONPOINT, 199),

  /* Change match (fnmatch-like) callback for wildcard matching */
  CINIT(FNMATCH_FUNCTION, FUNCTIONPOINT, 200),

  /* Let the application define custom chunk data pointer */
  CINIT(CHUNK_DATA, OBJECTPOINT, 201),

  /* FNMATCH_FUNCTION user pointer */
  CINIT(FNMATCH_DATA, OBJECTPOINT, 202),

  /* send linked-list of name:port:address sets */
  CINIT(RESOLVE, SLISTPOINT, 203),

  /* Set a username for authenticated TLS */
  CINIT(TLSAUTH_USERNAME, STRINGPOINT, 204),

  /* Set a password for authenticated TLS */
  CINIT(TLSAUTH_PASSWORD, STRINGPOINT, 205),

  /* Set authentication type for authenticated TLS */
  CINIT(TLSAUTH_TYPE, STRINGPOINT, 206),

  /* Set to 1 to enable the "TE:" header in HTTP requests to ask for
     compressed transfer-encoded responses. Set to 0 to disable the use of TE:
     in outgoing requests. The current default is 0, but it might change in a
     future libcurl release.

     libcurl will ask for the compressed methods it knows of, and if that
     isn't any, it will not ask for transfer-encoding at all even if this
     option is set to 1.

  */
  CINIT(TRANSFER_ENCODING, LONG, 207),

  /* Callback function for closing socket (instead of close(2)). The callback
     should have type curl_closesocket_callback */
  CINIT(CLOSESOCKETFUNCTION, FUNCTIONPOINT, 208),
  CINIT(CLOSESOCKETDATA, OBJECTPOINT, 209),

  /* allow GSSAPI credential delegation */
  CINIT(GSSAPI_DELEGATION, LONG, 210),

  /* Set the name servers to use for DNS resolution */
  CINIT(DNS_SERVERS, STRINGPOINT, 211),

  /* Time-out accept operations (currently for FTP only) after this amount
     of milliseconds. */
  CINIT(ACCEPTTIMEOUT_MS, LONG, 212),

  /* Set TCP keepalive */
  CINIT(TCP_KEEPALIVE, LONG, 213),

  /* non-universal keepalive knobs (Linux, AIX, HP-UX, more) */
  CINIT(TCP_KEEPIDLE, LONG, 214),
  CINIT(TCP_KEEPINTVL, LONG, 215),

  /* Enable/disable specific SSL features with a bitmask, see CURLSSLOPT_* */
  CINIT(SSL_OPTIONS, LONG, 216),

  /* Set the SMTP auth originator */
  CINIT(MAIL_AUTH, STRINGPOINT, 217),

  /* Enable/disable SASL initial response */
  CINIT(SASL_IR, LONG, 218),

  /* Function that will be called instead of the internal progress display
   * function. This function should be defined as the curl_xferinfo_callback
   * prototype defines. (Deprecates CURLOPT_PROGRESSFUNCTION) */
  CINIT(XFERINFOFUNCTION, FUNCTIONPOINT, 219),

  /* The XOAUTH2 bearer token */
  CINIT(XOAUTH2_BEARER, STRINGPOINT, 220),

  /* Set the interface string to use as outgoing network
   * interface for DNS requests.
   * Only supported by the c-ares DNS backend */
  CINIT(DNS_INTERFACE, STRINGPOINT, 221),

  /* Set the local IPv4 address to use for outgoing DNS requests.
   * Only supported by the c-ares DNS backend */
  CINIT(DNS_LOCAL_IP4, STRINGPOINT, 222),

  /* Set the local IPv6 address to use for outgoing DNS requests.
   * Only supported by the c-ares DNS backend */
  CINIT(DNS_LOCAL_IP6, STRINGPOINT, 223),

  /* Set authentication options directly */
  CINIT(LOGIN_OPTIONS, STRINGPOINT, 224),

  /* Enable/disable TLS NPN extension (http2 over ssl might fail without) */
  CINIT(SSL_ENABLE_NPN, LONG, 225),

  /* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */
  CINIT(SSL_ENABLE_ALPN, LONG, 226),

  /* Time to wait for a response to a HTTP request containing an
   * Expect: 100-continue header before sending the data anyway. */
  CINIT(EXPECT_100_TIMEOUT_MS, LONG, 227),

  /* This points to a linked list of headers used for proxy requests only,
     struct curl_slist kind */
  CINIT(PROXYHEADER, SLISTPOINT, 228),

  /* Pass in a bitmask of "header options" */
  CINIT(HEADEROPT, LONG, 229),

  /* The public key in DER form used to validate the peer public key
     this option is used only if SSL_VERIFYPEER is true */
  CINIT(PINNEDPUBLICKEY, STRINGPOINT, 230),

  /* Path to Unix domain socket */
  CINIT(UNIX_SOCKET_PATH, STRINGPOINT, 231),

  /* Set if we should verify the certificate status. */
  CINIT(SSL_VERIFYSTATUS, LONG, 232),

  /* Set if we should enable TLS false start. */
  CINIT(SSL_FALSESTART, LONG, 233),

  /* Do not squash dot-dot sequences */
  CINIT(PATH_AS_IS, LONG, 234),

  /* Proxy Service Name */
  CINIT(PROXY_SERVICE_NAME, STRINGPOINT, 235),

  /* Service Name */
  CINIT(SERVICE_NAME, STRINGPOINT, 236),

  /* Wait/don't wait for pipe/mutex to clarify */
  CINIT(PIPEWAIT, LONG, 237),

  /* Set the protocol used when curl is given a URL without a protocol */
  CINIT(DEFAULT_PROTOCOL, STRINGPOINT, 238),

  /* Set stream weight, 1 - 256 (default is 16) */
  CINIT(STREAM_WEIGHT, LONG, 239),

  /* Set stream dependency on another CURL handle */
  CINIT(STREAM_DEPENDS, OBJECTPOINT, 240),

  /* Set E-xclusive stream dependency on another CURL handle */
  CINIT(STREAM_DEPENDS_E, OBJECTPOINT, 241),

  /* Do not send any tftp option requests to the server */
  CINIT(TFTP_NO_OPTIONS, LONG, 242),

  /* Linked-list of host:port:connect-to-host:connect-to-port,
     overrides the URL's host:port (only for the network layer) */
  CINIT(CONNECT_TO, SLISTPOINT, 243),

  /* Set TCP Fast Open */
  CINIT(TCP_FASTOPEN, LONG, 244),

  /* Continue to send data if the server responds early with an
   * HTTP status code >= 300 */
  CINIT(KEEP_SENDING_ON_ERROR, LONG, 245),

  /* The CApath or CAfile used to validate the proxy certificate
     this option is used only if PROXY_SSL_VERIFYPEER is true */
  CINIT(PROXY_CAINFO, STRINGPOINT, 246),

  /* The CApath directory used to validate the proxy certificate
     this option is used only if PROXY_SSL_VERIFYPEER is true */
  CINIT(PROXY_CAPATH, STRINGPOINT, 247),

  /* Set if we should verify the proxy in ssl handshake,
     set 1 to verify. */
  CINIT(PROXY_SSL_VERIFYPEER, LONG, 248),

  /* Set if we should verify the Common name from the proxy certificate in ssl
   * handshake, set 1 to check existence, 2 to ensure that it matches
   * the provided hostname. */
  CINIT(PROXY_SSL_VERIFYHOST, LONG, 249),

  /* What version to specifically try to use for proxy.
     See CURL_SSLVERSION defines below. */
  CINIT(PROXY_SSLVERSION, LONG, 250),

  /* Set a username for authenticated TLS for proxy */
  CINIT(PROXY_TLSAUTH_USERNAME, STRINGPOINT, 251),

  /* Set a password for authenticated TLS for proxy */
  CINIT(PROXY_TLSAUTH_PASSWORD, STRINGPOINT, 252),

  /* Set authentication type for authenticated TLS for proxy */
  CINIT(PROXY_TLSAUTH_TYPE, STRINGPOINT, 253),

  /* name of the file keeping your private SSL-certificate for proxy */
  CINIT(PROXY_SSLCERT, STRINGPOINT, 254),

  /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") for
     proxy */
  CINIT(PROXY_SSLCERTTYPE, STRINGPOINT, 255),

  /* name of the file keeping your private SSL-key for proxy */
  CINIT(PROXY_SSLKEY, STRINGPOINT, 256),

  /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") for
     proxy */
  CINIT(PROXY_SSLKEYTYPE, STRINGPOINT, 257),

  /* password for the SSL private key for proxy */
  CINIT(PROXY_KEYPASSWD, STRINGPOINT, 258),

  /* Specify which SSL ciphers to use for proxy */
  CINIT(PROXY_SSL_CIPHER_LIST, STRINGPOINT, 259),

  /* CRL file for proxy */
  CINIT(PROXY_CRLFILE, STRINGPOINT, 260),

  /* Enable/disable specific SSL features with a bitmask for proxy, see
     CURLSSLOPT_* */
  CINIT(PROXY_SSL_OPTIONS, LONG, 261),

  /* Name of pre proxy to use. */
  CINIT(PRE_PROXY, STRINGPOINT, 262),

  /* The public key in DER form used to validate the proxy public key
     this option is used only if PROXY_SSL_VERIFYPEER is true */
  CINIT(PROXY_PINNEDPUBLICKEY, STRINGPOINT, 263),

  /* Path to an abstract Unix domain socket */
  CINIT(ABSTRACT_UNIX_SOCKET, STRINGPOINT, 264),

  /* Suppress proxy CONNECT response headers from user callbacks */
  CINIT(SUPPRESS_CONNECT_HEADERS, LONG, 265),

  /* The request target, instead of extracted from the URL */
  CINIT(REQUEST_TARGET, STRINGPOINT, 266),

  /* bitmask of allowed auth methods for connections to SOCKS5 proxies */
  CINIT(SOCKS5_AUTH, LONG, 267),

  /* Enable/disable SSH compression */
  CINIT(SSH_COMPRESSION, LONG, 268),

  /* Post MIME data. */
  CINIT(MIMEPOST, OBJECTPOINT, 269),

  /* Time to use with the CURLOPT_TIMECONDITION. Specified in number of
     seconds since 1 Jan 1970. */
  CINIT(TIMEVALUE_LARGE, OFF_T, 270),

  /* Head start in milliseconds to give happy eyeballs. */
  CINIT(HAPPY_EYEBALLS_TIMEOUT_MS, LONG, 271),

  /* Function that will be called before a resolver request is made */
  CINIT(RESOLVER_START_FUNCTION, FUNCTIONPOINT, 272),

  /* User data to pass to the resolver start callback. */
  CINIT(RESOLVER_START_DATA, OBJECTPOINT, 273),

  /* send HAProxy PROXY protocol header? */
  CINIT(HAPROXYPROTOCOL, LONG, 274),

  /* shuffle addresses before use when DNS returns multiple */
  CINIT(DNS_SHUFFLE_ADDRESSES, LONG, 275),

  /* Specify which TLS 1.3 ciphers suites to use */
  CINIT(TLS13_CIPHERS, STRINGPOINT, 276),
  CINIT(PROXY_TLS13_CIPHERS, STRINGPOINT, 277),

  /* Disallow specifying username/login in URL. */
  CINIT(DISALLOW_USERNAME_IN_URL, LONG, 278),

  /* DNS-over-HTTPS URL */
  CINIT(DOH_URL, STRINGPOINT, 279),

  /* Preferred buffer size to use for uploads */
  CINIT(UPLOAD_BUFFERSIZE, LONG, 280),

  /* Time in ms between connection upkeep calls for long-lived connections. */
  CINIT(UPKEEP_INTERVAL_MS, LONG, 281),

  /* Specify URL using CURL URL API. */
  CINIT(CURLU, OBJECTPOINT, 282),

  /* add trailing data just after no more data is available */
  CINIT(TRAILERFUNCTION, FUNCTIONPOINT, 283),

  /* pointer to be passed to HTTP_TRAILER_FUNCTION */
  CINIT(TRAILERDATA, OBJECTPOINT, 284),

  /* set this to 1L to allow HTTP/0.9 responses or 0L to disallow */
  CINIT(HTTP09_ALLOWED, LONG, 285),

  /* alt-svc control bitmask */
  CINIT(ALTSVC_CTRL, LONG, 286),

  /* alt-svc cache file name to possibly read from/write to */
  CINIT(ALTSVC, STRINGPOINT, 287),

  /* maximum age of a connection to consider it for reuse (in seconds) */
  CINIT(MAXAGE_CONN, LONG, 288),

  /* SASL authorisation identity */

  CINIT(SASL_AUTHZID, STRINGPOINT, 289),



  CURLOPT_LASTENTRY /* the last unused */
} CURLoption;

#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
                          the obsolete stuff removed! */








<
<
<
<
<
<

<
|
<
<
<
<
<
<
<
<
<
<






|
<
<




|


|


|


|


|


|


|




|



|



|



|


|










|


|


|



|


|








|


|







|


|



|


|


|


|


|


|



|



|



|


|



|







|


|




|

|
>

|
>
>
|
>
>
|
>
>
|
>
>
|
>
>
|
>
>
|
>
>
|
>

|
>



|

|
>

|
>
>
|
>







|



|



|



|


|


|


|




|


|



|





|



|


|


|

|
>






|




|



|


|



|



|




|




|



|


|



|




|


|


|


|


|




|


|
>


|


|


|


|


|



|


|




|


|




|




|


|


|




|




|




|




|



|





|




|





|





|






|




|

|
|

|




|





|






|


|


|



















|

|
|






|


|


|





|



|


|




|



|



|



|




|



|
|


|


|
|



|


|


|
|


|


|
|



|
|



|
|



|


|





|
|


|


|


|
|


|


|


|



|


|
|


|
|








|


|


|
>


|





|




|


|



|


|


|


|


|


|


|


|


|


|


|


|


|


|



|



|


|


|


|


|


|


|


|











|



|
|


|


|



|


|


|
|


|


|


|




|


|




|



|



|


|


|


|



|



|


|



|


|


|


|


|


|


|


|


|


|


|


|


|



|


|



|



|



|



|




|



|


|


|


|


|



|


|



|


|


|


|



|


|



|


|


|


|


|


|


|



|


|


|


|


|


|


|
|


|


|


|


|


|


|


|


|


|


|


|


>
|
>
>







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
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
#define CURLOPTTYPE_OBJECTPOINT   10000
#define CURLOPTTYPE_FUNCTIONPOINT 20000
#define CURLOPTTYPE_OFF_T         30000

/* *STRINGPOINT is an alias for OBJECTPOINT to allow tools to extract the
   string options from the header file */









#define CURLOPT(na,t,nu) na = t + nu











/* handy aliases that make no run-time difference */
#define CURLOPTTYPE_STRINGPOINT  CURLOPTTYPE_OBJECTPOINT
#define CURLOPTTYPE_SLISTPOINT  CURLOPTTYPE_OBJECTPOINT

/*
 * All CURLOPT_* values.


 */

typedef enum {
  /* This is the FILE * or void * the regular output should be written to. */
  CURLOPT(CURLOPT_WRITEDATA, CURLOPTTYPE_OBJECTPOINT, 1),

  /* The full URL to get/put */
  CURLOPT(CURLOPT_URL, CURLOPTTYPE_STRINGPOINT, 2),

  /* Port number to connect to, if other than default. */
  CURLOPT(CURLOPT_PORT, CURLOPTTYPE_LONG, 3),

  /* Name of proxy to use. */
  CURLOPT(CURLOPT_PROXY, CURLOPTTYPE_STRINGPOINT, 4),

  /* "user:password;options" to use when fetching. */
  CURLOPT(CURLOPT_USERPWD, CURLOPTTYPE_STRINGPOINT, 5),

  /* "user:password" to use with proxy. */
  CURLOPT(CURLOPT_PROXYUSERPWD, CURLOPTTYPE_STRINGPOINT, 6),

  /* Range to get, specified as an ASCII string. */
  CURLOPT(CURLOPT_RANGE, CURLOPTTYPE_STRINGPOINT, 7),

  /* not used */

  /* Specified file stream to upload from (use as input): */
  CURLOPT(CURLOPT_READDATA, CURLOPTTYPE_OBJECTPOINT, 9),

  /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE
   * bytes big. */
  CURLOPT(CURLOPT_ERRORBUFFER, CURLOPTTYPE_OBJECTPOINT, 10),

  /* Function that will be called to store the output (instead of fwrite). The
   * parameters will use fwrite() syntax, make sure to follow them. */
  CURLOPT(CURLOPT_WRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 11),

  /* Function that will be called to read the input (instead of fread). The
   * parameters will use fread() syntax, make sure to follow them. */
  CURLOPT(CURLOPT_READFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 12),

  /* Time-out the read operation after this amount of seconds */
  CURLOPT(CURLOPT_TIMEOUT, CURLOPTTYPE_LONG, 13),

  /* If the CURLOPT_INFILE is used, this can be used to inform libcurl about
   * how large the file being sent really is. That allows better error
   * checking and better verifies that the upload was successful. -1 means
   * unknown size.
   *
   * For large file support, there is also a _LARGE version of the key
   * which takes an off_t type, allowing platforms with larger off_t
   * sizes to handle larger files.  See below for INFILESIZE_LARGE.
   */
  CURLOPT(CURLOPT_INFILESIZE, CURLOPTTYPE_LONG, 14),

  /* POST static input fields. */
  CURLOPT(CURLOPT_POSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 15),

  /* Set the referrer page (needed by some CGIs) */
  CURLOPT(CURLOPT_REFERER, CURLOPTTYPE_STRINGPOINT, 16),

  /* Set the FTP PORT string (interface name, named or numerical IP address)
     Use i.e '-' to use default address. */
  CURLOPT(CURLOPT_FTPPORT, CURLOPTTYPE_STRINGPOINT, 17),

  /* Set the User-Agent string (examined by some CGIs) */
  CURLOPT(CURLOPT_USERAGENT, CURLOPTTYPE_STRINGPOINT, 18),

  /* If the download receives less than "low speed limit" bytes/second
   * during "low speed time" seconds, the operations is aborted.
   * You could i.e if you have a pretty high speed connection, abort if
   * it is less than 2000 bytes/sec during 20 seconds.
   */

  /* Set the "low speed limit" */
  CURLOPT(CURLOPT_LOW_SPEED_LIMIT, CURLOPTTYPE_LONG, 19),

  /* Set the "low speed time" */
  CURLOPT(CURLOPT_LOW_SPEED_TIME, CURLOPTTYPE_LONG, 20),

  /* Set the continuation offset.
   *
   * Note there is also a _LARGE version of this key which uses
   * off_t types, allowing for large file offsets on platforms which
   * use larger-than-32-bit off_t's.  Look below for RESUME_FROM_LARGE.
   */
  CURLOPT(CURLOPT_RESUME_FROM, CURLOPTTYPE_LONG, 21),

  /* Set cookie in request: */
  CURLOPT(CURLOPT_COOKIE, CURLOPTTYPE_STRINGPOINT, 22),

  /* This points to a linked list of headers, struct curl_slist kind. This
     list is also used for RTSP (in spite of its name) */
  CURLOPT(CURLOPT_HTTPHEADER, CURLOPTTYPE_SLISTPOINT, 23),

  /* This points to a linked list of post entries, struct curl_httppost */
  CURLOPT(CURLOPT_HTTPPOST, CURLOPTTYPE_OBJECTPOINT, 24),

  /* name of the file keeping your private SSL-certificate */
  CURLOPT(CURLOPT_SSLCERT, CURLOPTTYPE_STRINGPOINT, 25),

  /* password for the SSL or SSH private key */
  CURLOPT(CURLOPT_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 26),

  /* send TYPE parameter? */
  CURLOPT(CURLOPT_CRLF, CURLOPTTYPE_LONG, 27),

  /* send linked-list of QUOTE commands */
  CURLOPT(CURLOPT_QUOTE, CURLOPTTYPE_SLISTPOINT, 28),

  /* send FILE * or void * to store headers to, if you use a callback it
     is simply passed to the callback unmodified */
  CURLOPT(CURLOPT_HEADERDATA, CURLOPTTYPE_OBJECTPOINT, 29),

  /* point to a file to read the initial cookies from, also enables
     "cookie awareness" */
  CURLOPT(CURLOPT_COOKIEFILE, CURLOPTTYPE_STRINGPOINT, 31),

  /* What version to specifically try to use.
     See CURL_SSLVERSION defines below. */
  CURLOPT(CURLOPT_SSLVERSION, CURLOPTTYPE_LONG, 32),

  /* What kind of HTTP time condition to use, see defines */
  CURLOPT(CURLOPT_TIMECONDITION, CURLOPTTYPE_LONG, 33),

  /* Time to use with the above condition. Specified in number of seconds
     since 1 Jan 1970 */
  CURLOPT(CURLOPT_TIMEVALUE, CURLOPTTYPE_LONG, 34),

  /* 35 = OBSOLETE */

  /* Custom request, for customizing the get command like
     HTTP: DELETE, TRACE and others
     FTP: to use a different list command
     */
  CURLOPT(CURLOPT_CUSTOMREQUEST, CURLOPTTYPE_STRINGPOINT, 36),

  /* FILE handle to use instead of stderr */
  CURLOPT(CURLOPT_STDERR, CURLOPTTYPE_OBJECTPOINT, 37),

  /* 38 is not used */

  /* send linked-list of post-transfer QUOTE commands */
  CURLOPT(CURLOPT_POSTQUOTE, CURLOPTTYPE_SLISTPOINT, 39),

   /* OBSOLETE, do not use! */
  CURLOPT(CURLOPT_OBSOLETE40, CURLOPTTYPE_OBJECTPOINT, 40),

  /* talk a lot */
  CURLOPT(CURLOPT_VERBOSE, CURLOPTTYPE_LONG, 41),

  /* throw the header out too */
  CURLOPT(CURLOPT_HEADER, CURLOPTTYPE_LONG, 42),

  /* shut off the progress meter */
  CURLOPT(CURLOPT_NOPROGRESS, CURLOPTTYPE_LONG, 43),

  /* use HEAD to get http document */
  CURLOPT(CURLOPT_NOBODY, CURLOPTTYPE_LONG, 44),

  /* no output on http error codes >= 400 */
  CURLOPT(CURLOPT_FAILONERROR, CURLOPTTYPE_LONG, 45),

  /* this is an upload */
  CURLOPT(CURLOPT_UPLOAD, CURLOPTTYPE_LONG, 46),

  /* HTTP POST method */
  CURLOPT(CURLOPT_POST, CURLOPTTYPE_LONG, 47),

  /* bare names when listing directories */
  CURLOPT(CURLOPT_DIRLISTONLY, CURLOPTTYPE_LONG, 48),

  /* Append instead of overwrite on upload! */
  CURLOPT(CURLOPT_APPEND, CURLOPTTYPE_LONG, 50),

  /* Specify whether to read the user+password from the .netrc or the URL.
   * This must be one of the CURL_NETRC_* enums below. */
  CURLOPT(CURLOPT_NETRC, CURLOPTTYPE_LONG, 51),

  /* use Location: Luke! */
  CURLOPT(CURLOPT_FOLLOWLOCATION, CURLOPTTYPE_LONG, 52),

   /* transfer data in text/ASCII format */
  CURLOPT(CURLOPT_TRANSFERTEXT, CURLOPTTYPE_LONG, 53),

  /* HTTP PUT */
  CURLOPT(CURLOPT_PUT, CURLOPTTYPE_LONG, 54),

  /* 55 = OBSOLETE */

  /* DEPRECATED
   * Function that will be called instead of the internal progress display
   * function. This function should be defined as the curl_progress_callback
   * prototype defines. */
  CURLOPT(CURLOPT_PROGRESSFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 56),

  /* Data passed to the CURLOPT_PROGRESSFUNCTION and CURLOPT_XFERINFOFUNCTION
     callbacks */
  CURLOPT(CURLOPT_PROGRESSDATA, CURLOPTTYPE_OBJECTPOINT, 57),
#define CURLOPT_XFERINFODATA CURLOPT_PROGRESSDATA

  /* We want the referrer field set automatically when following locations */
  CURLOPT(CURLOPT_AUTOREFERER, CURLOPTTYPE_LONG, 58),

  /* Port of the proxy, can be set in the proxy string as well with:
     "[host]:[port]" */
  CURLOPT(CURLOPT_PROXYPORT, CURLOPTTYPE_LONG, 59),

  /* size of the POST input data, if strlen() is not good to use */
  CURLOPT(CURLOPT_POSTFIELDSIZE, CURLOPTTYPE_LONG, 60),

  /* tunnel non-http operations through a HTTP proxy */
  CURLOPT(CURLOPT_HTTPPROXYTUNNEL, CURLOPTTYPE_LONG, 61),

  /* Set the interface string to use as outgoing network interface */
  CURLOPT(CURLOPT_INTERFACE, CURLOPTTYPE_STRINGPOINT, 62),

  /* Set the krb4/5 security level, this also enables krb4/5 awareness.  This
   * is a string, 'clear', 'safe', 'confidential' or 'private'.  If the string
   * is set but doesn't match one of these, 'private' will be used.  */
  CURLOPT(CURLOPT_KRBLEVEL, CURLOPTTYPE_STRINGPOINT, 63),

  /* Set if we should verify the peer in ssl handshake, set 1 to verify. */
  CURLOPT(CURLOPT_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 64),

  /* The CApath or CAfile used to validate the peer certificate
     this option is used only if SSL_VERIFYPEER is true */
  CURLOPT(CURLOPT_CAINFO, CURLOPTTYPE_STRINGPOINT, 65),

  /* 66 = OBSOLETE */
  /* 67 = OBSOLETE */

  /* Maximum number of http redirects to follow */
  CURLOPT(CURLOPT_MAXREDIRS, CURLOPTTYPE_LONG, 68),

  /* Pass a long set to 1 to get the date of the requested document (if
     possible)! Pass a zero to shut it off. */
  CURLOPT(CURLOPT_FILETIME, CURLOPTTYPE_LONG, 69),

  /* This points to a linked list of telnet options */
  CURLOPT(CURLOPT_TELNETOPTIONS, CURLOPTTYPE_SLISTPOINT, 70),

  /* Max amount of cached alive connections */
  CURLOPT(CURLOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 71),

  /* OBSOLETE, do not use! */
  CURLOPT(CURLOPT_OBSOLETE72, CURLOPTTYPE_LONG, 72),

  /* 73 = OBSOLETE */

  /* Set to explicitly use a new connection for the upcoming transfer.
     Do not use this unless you're absolutely sure of this, as it makes the
     operation slower and is less friendly for the network. */
  CURLOPT(CURLOPT_FRESH_CONNECT, CURLOPTTYPE_LONG, 74),

  /* Set to explicitly forbid the upcoming transfer's connection to be re-used
     when done. Do not use this unless you're absolutely sure of this, as it
     makes the operation slower and is less friendly for the network. */
  CURLOPT(CURLOPT_FORBID_REUSE, CURLOPTTYPE_LONG, 75),

  /* Set to a file name that contains random data for libcurl to use to
     seed the random engine when doing SSL connects. */
  CURLOPT(CURLOPT_RANDOM_FILE, CURLOPTTYPE_STRINGPOINT, 76),

  /* Set to the Entropy Gathering Daemon socket pathname */
  CURLOPT(CURLOPT_EGDSOCKET, CURLOPTTYPE_STRINGPOINT, 77),

  /* Time-out connect operations after this amount of seconds, if connects are
     OK within this time, then fine... This only aborts the connect phase. */
  CURLOPT(CURLOPT_CONNECTTIMEOUT, CURLOPTTYPE_LONG, 78),

  /* Function that will be called to store headers (instead of fwrite). The
   * parameters will use fwrite() syntax, make sure to follow them. */
  CURLOPT(CURLOPT_HEADERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 79),

  /* Set this to force the HTTP request to get back to GET. Only really usable
     if POST, PUT or a custom request have been used first.
   */
  CURLOPT(CURLOPT_HTTPGET, CURLOPTTYPE_LONG, 80),

  /* Set if we should verify the Common name from the peer certificate in ssl
   * handshake, set 1 to check existence, 2 to ensure that it matches the
   * provided hostname. */
  CURLOPT(CURLOPT_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 81),

  /* Specify which file name to write all known cookies in after completed
     operation. Set file name to "-" (dash) to make it go to stdout. */
  CURLOPT(CURLOPT_COOKIEJAR, CURLOPTTYPE_STRINGPOINT, 82),

  /* Specify which SSL ciphers to use */
  CURLOPT(CURLOPT_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 83),

  /* Specify which HTTP version to use! This must be set to one of the
     CURL_HTTP_VERSION* enums set below. */
  CURLOPT(CURLOPT_HTTP_VERSION, CURLOPTTYPE_LONG, 84),

  /* Specifically switch on or off the FTP engine's use of the EPSV command. By
     default, that one will always be attempted before the more traditional
     PASV command. */
  CURLOPT(CURLOPT_FTP_USE_EPSV, CURLOPTTYPE_LONG, 85),

  /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */
  CURLOPT(CURLOPT_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 86),

  /* name of the file keeping your private SSL-key */
  CURLOPT(CURLOPT_SSLKEY, CURLOPTTYPE_STRINGPOINT, 87),

  /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */
  CURLOPT(CURLOPT_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 88),

  /* crypto engine for the SSL-sub system */
  CURLOPT(CURLOPT_SSLENGINE, CURLOPTTYPE_STRINGPOINT, 89),

  /* set the crypto engine for the SSL-sub system as default
     the param has no meaning...
   */
  CURLOPT(CURLOPT_SSLENGINE_DEFAULT, CURLOPTTYPE_LONG, 90),

  /* Non-zero value means to use the global dns cache */
  /* DEPRECATED, do not use! */
  CURLOPT(CURLOPT_DNS_USE_GLOBAL_CACHE, CURLOPTTYPE_LONG, 91),

  /* DNS cache timeout */
  CURLOPT(CURLOPT_DNS_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 92),

  /* send linked-list of pre-transfer QUOTE commands */
  CURLOPT(CURLOPT_PREQUOTE, CURLOPTTYPE_SLISTPOINT, 93),

  /* set the debug function */
  CURLOPT(CURLOPT_DEBUGFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 94),

  /* set the data for the debug function */
  CURLOPT(CURLOPT_DEBUGDATA, CURLOPTTYPE_OBJECTPOINT, 95),

  /* mark this as start of a cookie session */
  CURLOPT(CURLOPT_COOKIESESSION, CURLOPTTYPE_LONG, 96),

  /* The CApath directory used to validate the peer certificate
     this option is used only if SSL_VERIFYPEER is true */
  CURLOPT(CURLOPT_CAPATH, CURLOPTTYPE_STRINGPOINT, 97),

  /* Instruct libcurl to use a smaller receive buffer */
  CURLOPT(CURLOPT_BUFFERSIZE, CURLOPTTYPE_LONG, 98),

  /* Instruct libcurl to not use any signal/alarm handlers, even when using
     timeouts. This option is useful for multi-threaded applications.
     See libcurl-the-guide for more background information. */
  CURLOPT(CURLOPT_NOSIGNAL, CURLOPTTYPE_LONG, 99),

  /* Provide a CURLShare for mutexing non-ts data */
  CURLOPT(CURLOPT_SHARE, CURLOPTTYPE_OBJECTPOINT, 100),

  /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default),
     CURLPROXY_HTTPS, CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and
     CURLPROXY_SOCKS5. */
  CURLOPT(CURLOPT_PROXYTYPE, CURLOPTTYPE_LONG, 101),

  /* Set the Accept-Encoding string. Use this to tell a server you would like
     the response to be compressed. Before 7.21.6, this was known as
     CURLOPT_ENCODING */
  CURLOPT(CURLOPT_ACCEPT_ENCODING, CURLOPTTYPE_STRINGPOINT, 102),

  /* Set pointer to private data */
  CURLOPT(CURLOPT_PRIVATE, CURLOPTTYPE_OBJECTPOINT, 103),

  /* Set aliases for HTTP 200 in the HTTP Response header */
  CURLOPT(CURLOPT_HTTP200ALIASES, CURLOPTTYPE_SLISTPOINT, 104),

  /* Continue to send authentication (user+password) when following locations,
     even when hostname changed. This can potentially send off the name
     and password to whatever host the server decides. */
  CURLOPT(CURLOPT_UNRESTRICTED_AUTH, CURLOPTTYPE_LONG, 105),

  /* Specifically switch on or off the FTP engine's use of the EPRT command (
     it also disables the LPRT attempt). By default, those ones will always be
     attempted before the good old traditional PORT command. */
  CURLOPT(CURLOPT_FTP_USE_EPRT, CURLOPTTYPE_LONG, 106),

  /* Set this to a bitmask value to enable the particular authentications
     methods you like. Use this in combination with CURLOPT_USERPWD.
     Note that setting multiple bits may cause extra network round-trips. */
  CURLOPT(CURLOPT_HTTPAUTH, CURLOPTTYPE_LONG, 107),

  /* Set the ssl context callback function, currently only for OpenSSL or
     WolfSSL ssl_ctx, or mbedTLS mbedtls_ssl_config in the second argument.
     The function must match the curl_ssl_ctx_callback prototype. */
  CURLOPT(CURLOPT_SSL_CTX_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 108),

  /* Set the userdata for the ssl context callback function's third
     argument */
  CURLOPT(CURLOPT_SSL_CTX_DATA, CURLOPTTYPE_OBJECTPOINT, 109),

  /* FTP Option that causes missing dirs to be created on the remote server.
     In 7.19.4 we introduced the convenience enums for this option using the
     CURLFTP_CREATE_DIR prefix.
  */
  CURLOPT(CURLOPT_FTP_CREATE_MISSING_DIRS, CURLOPTTYPE_LONG, 110),

  /* Set this to a bitmask value to enable the particular authentications
     methods you like. Use this in combination with CURLOPT_PROXYUSERPWD.
     Note that setting multiple bits may cause extra network round-trips. */
  CURLOPT(CURLOPT_PROXYAUTH, CURLOPTTYPE_LONG, 111),

  /* FTP option that changes the timeout, in seconds, associated with
     getting a response.  This is different from transfer timeout time and
     essentially places a demand on the FTP server to acknowledge commands
     in a timely manner. */
  CURLOPT(CURLOPT_FTP_RESPONSE_TIMEOUT, CURLOPTTYPE_LONG, 112),
#define CURLOPT_SERVER_RESPONSE_TIMEOUT CURLOPT_FTP_RESPONSE_TIMEOUT

  /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to
     tell libcurl to resolve names to those IP versions only. This only has
     affect on systems with support for more than one, i.e IPv4 _and_ IPv6. */
  CURLOPT(CURLOPT_IPRESOLVE, CURLOPTTYPE_LONG, 113),

  /* Set this option to limit the size of a file that will be downloaded from
     an HTTP or FTP server.

     Note there is also _LARGE version which adds large file support for
     platforms which have larger off_t sizes.  See MAXFILESIZE_LARGE below. */
  CURLOPT(CURLOPT_MAXFILESIZE, CURLOPTTYPE_LONG, 114),

  /* See the comment for INFILESIZE above, but in short, specifies
   * the size of the file being uploaded.  -1 means unknown.
   */
  CURLOPT(CURLOPT_INFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 115),

  /* Sets the continuation offset.  There is also a CURLOPTTYPE_LONG version
   * of this; look above for RESUME_FROM.
   */
  CURLOPT(CURLOPT_RESUME_FROM_LARGE, CURLOPTTYPE_OFF_T, 116),

  /* Sets the maximum size of data that will be downloaded from
   * an HTTP or FTP server.  See MAXFILESIZE above for the LONG version.
   */
  CURLOPT(CURLOPT_MAXFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 117),

  /* Set this option to the file name of your .netrc file you want libcurl
     to parse (using the CURLOPT_NETRC option). If not set, libcurl will do
     a poor attempt to find the user's home directory and check for a .netrc
     file in there. */
  CURLOPT(CURLOPT_NETRC_FILE, CURLOPTTYPE_STRINGPOINT, 118),

  /* Enable SSL/TLS for FTP, pick one of:
     CURLUSESSL_TRY     - try using SSL, proceed anyway otherwise
     CURLUSESSL_CONTROL - SSL for the control connection or fail
     CURLUSESSL_ALL     - SSL for all communication or fail
  */
  CURLOPT(CURLOPT_USE_SSL, CURLOPTTYPE_LONG, 119),

  /* The _LARGE version of the standard POSTFIELDSIZE option */
  CURLOPT(CURLOPT_POSTFIELDSIZE_LARGE, CURLOPTTYPE_OFF_T, 120),

  /* Enable/disable the TCP Nagle algorithm */
  CURLOPT(CURLOPT_TCP_NODELAY, CURLOPTTYPE_LONG, 121),

  /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
  /* 123 OBSOLETE. Gone in 7.16.0 */
  /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
  /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
  /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
  /* 127 OBSOLETE. Gone in 7.16.0 */
  /* 128 OBSOLETE. Gone in 7.16.0 */

  /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option
     can be used to change libcurl's default action which is to first try
     "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK
     response has been received.

     Available parameters are:
     CURLFTPAUTH_DEFAULT - let libcurl decide
     CURLFTPAUTH_SSL     - try "AUTH SSL" first, then TLS
     CURLFTPAUTH_TLS     - try "AUTH TLS" first, then SSL
  */
  CURLOPT(CURLOPT_FTPSSLAUTH, CURLOPTTYPE_LONG, 129),

  CURLOPT(CURLOPT_IOCTLFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 130),
  CURLOPT(CURLOPT_IOCTLDATA, CURLOPTTYPE_OBJECTPOINT, 131),

  /* 132 OBSOLETE. Gone in 7.16.0 */
  /* 133 OBSOLETE. Gone in 7.16.0 */

  /* zero terminated string for pass on to the FTP server when asked for
     "account" info */
  CURLOPT(CURLOPT_FTP_ACCOUNT, CURLOPTTYPE_STRINGPOINT, 134),

  /* feed cookie into cookie engine */
  CURLOPT(CURLOPT_COOKIELIST, CURLOPTTYPE_STRINGPOINT, 135),

  /* ignore Content-Length */
  CURLOPT(CURLOPT_IGNORE_CONTENT_LENGTH, CURLOPTTYPE_LONG, 136),

  /* Set to non-zero to skip the IP address received in a 227 PASV FTP server
     response. Typically used for FTP-SSL purposes but is not restricted to
     that. libcurl will then instead use the same IP address it used for the
     control connection. */
  CURLOPT(CURLOPT_FTP_SKIP_PASV_IP, CURLOPTTYPE_LONG, 137),

  /* Select "file method" to use when doing FTP, see the curl_ftpmethod
     above. */
  CURLOPT(CURLOPT_FTP_FILEMETHOD, CURLOPTTYPE_LONG, 138),

  /* Local port number to bind the socket to */
  CURLOPT(CURLOPT_LOCALPORT, CURLOPTTYPE_LONG, 139),

  /* Number of ports to try, including the first one set with LOCALPORT.
     Thus, setting it to 1 will make no additional attempts but the first.
  */
  CURLOPT(CURLOPT_LOCALPORTRANGE, CURLOPTTYPE_LONG, 140),

  /* no transfer, set up connection and let application use the socket by
     extracting it with CURLINFO_LASTSOCKET */
  CURLOPT(CURLOPT_CONNECT_ONLY, CURLOPTTYPE_LONG, 141),

  /* Function that will be called to convert from the
     network encoding (instead of using the iconv calls in libcurl) */
  CURLOPT(CURLOPT_CONV_FROM_NETWORK_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 142),

  /* Function that will be called to convert to the
     network encoding (instead of using the iconv calls in libcurl) */
  CURLOPT(CURLOPT_CONV_TO_NETWORK_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 143),

  /* Function that will be called to convert from UTF8
     (instead of using the iconv calls in libcurl)
     Note that this is used only for SSL certificate processing */
  CURLOPT(CURLOPT_CONV_FROM_UTF8_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 144),

  /* if the connection proceeds too quickly then need to slow it down */
  /* limit-rate: maximum number of bytes per second to send or receive */
  CURLOPT(CURLOPT_MAX_SEND_SPEED_LARGE, CURLOPTTYPE_OFF_T, 145),
  CURLOPT(CURLOPT_MAX_RECV_SPEED_LARGE, CURLOPTTYPE_OFF_T, 146),

  /* Pointer to command string to send if USER/PASS fails. */
  CURLOPT(CURLOPT_FTP_ALTERNATIVE_TO_USER, CURLOPTTYPE_STRINGPOINT, 147),

  /* callback function for setting socket options */
  CURLOPT(CURLOPT_SOCKOPTFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 148),
  CURLOPT(CURLOPT_SOCKOPTDATA, CURLOPTTYPE_OBJECTPOINT, 149),

  /* set to 0 to disable session ID re-use for this transfer, default is
     enabled (== 1) */
  CURLOPT(CURLOPT_SSL_SESSIONID_CACHE, CURLOPTTYPE_LONG, 150),

  /* allowed SSH authentication methods */
  CURLOPT(CURLOPT_SSH_AUTH_TYPES, CURLOPTTYPE_LONG, 151),

  /* Used by scp/sftp to do public/private key authentication */
  CURLOPT(CURLOPT_SSH_PUBLIC_KEYFILE, CURLOPTTYPE_STRINGPOINT, 152),
  CURLOPT(CURLOPT_SSH_PRIVATE_KEYFILE, CURLOPTTYPE_STRINGPOINT, 153),

  /* Send CCC (Clear Command Channel) after authentication */
  CURLOPT(CURLOPT_FTP_SSL_CCC, CURLOPTTYPE_LONG, 154),

  /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */
  CURLOPT(CURLOPT_TIMEOUT_MS, CURLOPTTYPE_LONG, 155),
  CURLOPT(CURLOPT_CONNECTTIMEOUT_MS, CURLOPTTYPE_LONG, 156),

  /* set to zero to disable the libcurl's decoding and thus pass the raw body
     data to the application even when it is encoded/compressed */
  CURLOPT(CURLOPT_HTTP_TRANSFER_DECODING, CURLOPTTYPE_LONG, 157),
  CURLOPT(CURLOPT_HTTP_CONTENT_DECODING, CURLOPTTYPE_LONG, 158),

  /* Permission used when creating new files and directories on the remote
     server for protocols that support it, SFTP/SCP/FILE */
  CURLOPT(CURLOPT_NEW_FILE_PERMS, CURLOPTTYPE_LONG, 159),
  CURLOPT(CURLOPT_NEW_DIRECTORY_PERMS, CURLOPTTYPE_LONG, 160),

  /* Set the behaviour of POST when redirecting. Values must be set to one
     of CURL_REDIR* defines below. This used to be called CURLOPT_POST301 */
  CURLOPT(CURLOPT_POSTREDIR, CURLOPTTYPE_LONG, 161),

  /* used by scp/sftp to verify the host's public key */
  CURLOPT(CURLOPT_SSH_HOST_PUBLIC_KEY_MD5, CURLOPTTYPE_STRINGPOINT, 162),

  /* Callback function for opening socket (instead of socket(2)). Optionally,
     callback is able change the address or refuse to connect returning
     CURL_SOCKET_BAD.  The callback should have type
     curl_opensocket_callback */
  CURLOPT(CURLOPT_OPENSOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 163),
  CURLOPT(CURLOPT_OPENSOCKETDATA, CURLOPTTYPE_OBJECTPOINT, 164),

  /* POST volatile input fields. */
  CURLOPT(CURLOPT_COPYPOSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 165),

  /* set transfer mode (;type=<a|i>) when doing FTP via an HTTP proxy */
  CURLOPT(CURLOPT_PROXY_TRANSFER_MODE, CURLOPTTYPE_LONG, 166),

  /* Callback function for seeking in the input stream */
  CURLOPT(CURLOPT_SEEKFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 167),
  CURLOPT(CURLOPT_SEEKDATA, CURLOPTTYPE_OBJECTPOINT, 168),

  /* CRL file */
  CURLOPT(CURLOPT_CRLFILE, CURLOPTTYPE_STRINGPOINT, 169),

  /* Issuer certificate */
  CURLOPT(CURLOPT_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 170),

  /* (IPv6) Address scope */
  CURLOPT(CURLOPT_ADDRESS_SCOPE, CURLOPTTYPE_LONG, 171),

  /* Collect certificate chain info and allow it to get retrievable with
     CURLINFO_CERTINFO after the transfer is complete. */
  CURLOPT(CURLOPT_CERTINFO, CURLOPTTYPE_LONG, 172),

  /* "name" and "pwd" to use when fetching. */
  CURLOPT(CURLOPT_USERNAME, CURLOPTTYPE_STRINGPOINT, 173),
  CURLOPT(CURLOPT_PASSWORD, CURLOPTTYPE_STRINGPOINT, 174),

    /* "name" and "pwd" to use with Proxy when fetching. */
  CURLOPT(CURLOPT_PROXYUSERNAME, CURLOPTTYPE_STRINGPOINT, 175),
  CURLOPT(CURLOPT_PROXYPASSWORD, CURLOPTTYPE_STRINGPOINT, 176),

  /* Comma separated list of hostnames defining no-proxy zones. These should
     match both hostnames directly, and hostnames within a domain. For
     example, local.com will match local.com and www.local.com, but NOT
     notlocal.com or www.notlocal.com. For compatibility with other
     implementations of this, .local.com will be considered to be the same as
     local.com. A single * is the only valid wildcard, and effectively
     disables the use of proxy. */
  CURLOPT(CURLOPT_NOPROXY, CURLOPTTYPE_STRINGPOINT, 177),

  /* block size for TFTP transfers */
  CURLOPT(CURLOPT_TFTP_BLKSIZE, CURLOPTTYPE_LONG, 178),

  /* Socks Service */
  /* DEPRECATED, do not use! */
  CURLOPT(CURLOPT_SOCKS5_GSSAPI_SERVICE, CURLOPTTYPE_STRINGPOINT, 179),

  /* Socks Service */
  CURLOPT(CURLOPT_SOCKS5_GSSAPI_NEC, CURLOPTTYPE_LONG, 180),

  /* set the bitmask for the protocols that are allowed to be used for the
     transfer, which thus helps the app which takes URLs from users or other
     external inputs and want to restrict what protocol(s) to deal
     with. Defaults to CURLPROTO_ALL. */
  CURLOPT(CURLOPT_PROTOCOLS, CURLOPTTYPE_LONG, 181),

  /* set the bitmask for the protocols that libcurl is allowed to follow to,
     as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs
     to be set in both bitmasks to be allowed to get redirected to. */
  CURLOPT(CURLOPT_REDIR_PROTOCOLS, CURLOPTTYPE_LONG, 182),

  /* set the SSH knownhost file name to use */
  CURLOPT(CURLOPT_SSH_KNOWNHOSTS, CURLOPTTYPE_STRINGPOINT, 183),

  /* set the SSH host key callback, must point to a curl_sshkeycallback
     function */
  CURLOPT(CURLOPT_SSH_KEYFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 184),

  /* set the SSH host key callback custom pointer */
  CURLOPT(CURLOPT_SSH_KEYDATA, CURLOPTTYPE_OBJECTPOINT, 185),

  /* set the SMTP mail originator */
  CURLOPT(CURLOPT_MAIL_FROM, CURLOPTTYPE_STRINGPOINT, 186),

  /* set the list of SMTP mail receiver(s) */
  CURLOPT(CURLOPT_MAIL_RCPT, CURLOPTTYPE_SLISTPOINT, 187),

  /* FTP: send PRET before PASV */
  CURLOPT(CURLOPT_FTP_USE_PRET, CURLOPTTYPE_LONG, 188),

  /* RTSP request method (OPTIONS, SETUP, PLAY, etc...) */
  CURLOPT(CURLOPT_RTSP_REQUEST, CURLOPTTYPE_LONG, 189),

  /* The RTSP session identifier */
  CURLOPT(CURLOPT_RTSP_SESSION_ID, CURLOPTTYPE_STRINGPOINT, 190),

  /* The RTSP stream URI */
  CURLOPT(CURLOPT_RTSP_STREAM_URI, CURLOPTTYPE_STRINGPOINT, 191),

  /* The Transport: header to use in RTSP requests */
  CURLOPT(CURLOPT_RTSP_TRANSPORT, CURLOPTTYPE_STRINGPOINT, 192),

  /* Manually initialize the client RTSP CSeq for this handle */
  CURLOPT(CURLOPT_RTSP_CLIENT_CSEQ, CURLOPTTYPE_LONG, 193),

  /* Manually initialize the server RTSP CSeq for this handle */
  CURLOPT(CURLOPT_RTSP_SERVER_CSEQ, CURLOPTTYPE_LONG, 194),

  /* The stream to pass to INTERLEAVEFUNCTION. */
  CURLOPT(CURLOPT_INTERLEAVEDATA, CURLOPTTYPE_OBJECTPOINT, 195),

  /* Let the application define a custom write method for RTP data */
  CURLOPT(CURLOPT_INTERLEAVEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 196),

  /* Turn on wildcard matching */
  CURLOPT(CURLOPT_WILDCARDMATCH, CURLOPTTYPE_LONG, 197),

  /* Directory matching callback called before downloading of an
     individual file (chunk) started */
  CURLOPT(CURLOPT_CHUNK_BGN_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 198),

  /* Directory matching callback called after the file (chunk)
     was downloaded, or skipped */
  CURLOPT(CURLOPT_CHUNK_END_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 199),

  /* Change match (fnmatch-like) callback for wildcard matching */
  CURLOPT(CURLOPT_FNMATCH_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 200),

  /* Let the application define custom chunk data pointer */
  CURLOPT(CURLOPT_CHUNK_DATA, CURLOPTTYPE_OBJECTPOINT, 201),

  /* FNMATCH_FUNCTION user pointer */
  CURLOPT(CURLOPT_FNMATCH_DATA, CURLOPTTYPE_OBJECTPOINT, 202),

  /* send linked-list of name:port:address sets */
  CURLOPT(CURLOPT_RESOLVE, CURLOPTTYPE_SLISTPOINT, 203),

  /* Set a username for authenticated TLS */
  CURLOPT(CURLOPT_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 204),

  /* Set a password for authenticated TLS */
  CURLOPT(CURLOPT_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 205),

  /* Set authentication type for authenticated TLS */
  CURLOPT(CURLOPT_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 206),

  /* Set to 1 to enable the "TE:" header in HTTP requests to ask for
     compressed transfer-encoded responses. Set to 0 to disable the use of TE:
     in outgoing requests. The current default is 0, but it might change in a
     future libcurl release.

     libcurl will ask for the compressed methods it knows of, and if that
     isn't any, it will not ask for transfer-encoding at all even if this
     option is set to 1.

  */
  CURLOPT(CURLOPT_TRANSFER_ENCODING, CURLOPTTYPE_LONG, 207),

  /* Callback function for closing socket (instead of close(2)). The callback
     should have type curl_closesocket_callback */
  CURLOPT(CURLOPT_CLOSESOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 208),
  CURLOPT(CURLOPT_CLOSESOCKETDATA, CURLOPTTYPE_OBJECTPOINT, 209),

  /* allow GSSAPI credential delegation */
  CURLOPT(CURLOPT_GSSAPI_DELEGATION, CURLOPTTYPE_LONG, 210),

  /* Set the name servers to use for DNS resolution */
  CURLOPT(CURLOPT_DNS_SERVERS, CURLOPTTYPE_STRINGPOINT, 211),

  /* Time-out accept operations (currently for FTP only) after this amount
     of milliseconds. */
  CURLOPT(CURLOPT_ACCEPTTIMEOUT_MS, CURLOPTTYPE_LONG, 212),

  /* Set TCP keepalive */
  CURLOPT(CURLOPT_TCP_KEEPALIVE, CURLOPTTYPE_LONG, 213),

  /* non-universal keepalive knobs (Linux, AIX, HP-UX, more) */
  CURLOPT(CURLOPT_TCP_KEEPIDLE, CURLOPTTYPE_LONG, 214),
  CURLOPT(CURLOPT_TCP_KEEPINTVL, CURLOPTTYPE_LONG, 215),

  /* Enable/disable specific SSL features with a bitmask, see CURLSSLOPT_* */
  CURLOPT(CURLOPT_SSL_OPTIONS, CURLOPTTYPE_LONG, 216),

  /* Set the SMTP auth originator */
  CURLOPT(CURLOPT_MAIL_AUTH, CURLOPTTYPE_STRINGPOINT, 217),

  /* Enable/disable SASL initial response */
  CURLOPT(CURLOPT_SASL_IR, CURLOPTTYPE_LONG, 218),

  /* Function that will be called instead of the internal progress display
   * function. This function should be defined as the curl_xferinfo_callback
   * prototype defines. (Deprecates CURLOPT_PROGRESSFUNCTION) */
  CURLOPT(CURLOPT_XFERINFOFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 219),

  /* The XOAUTH2 bearer token */
  CURLOPT(CURLOPT_XOAUTH2_BEARER, CURLOPTTYPE_STRINGPOINT, 220),

  /* Set the interface string to use as outgoing network
   * interface for DNS requests.
   * Only supported by the c-ares DNS backend */
  CURLOPT(CURLOPT_DNS_INTERFACE, CURLOPTTYPE_STRINGPOINT, 221),

  /* Set the local IPv4 address to use for outgoing DNS requests.
   * Only supported by the c-ares DNS backend */
  CURLOPT(CURLOPT_DNS_LOCAL_IP4, CURLOPTTYPE_STRINGPOINT, 222),

  /* Set the local IPv6 address to use for outgoing DNS requests.
   * Only supported by the c-ares DNS backend */
  CURLOPT(CURLOPT_DNS_LOCAL_IP6, CURLOPTTYPE_STRINGPOINT, 223),

  /* Set authentication options directly */
  CURLOPT(CURLOPT_LOGIN_OPTIONS, CURLOPTTYPE_STRINGPOINT, 224),

  /* Enable/disable TLS NPN extension (http2 over ssl might fail without) */
  CURLOPT(CURLOPT_SSL_ENABLE_NPN, CURLOPTTYPE_LONG, 225),

  /* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */
  CURLOPT(CURLOPT_SSL_ENABLE_ALPN, CURLOPTTYPE_LONG, 226),

  /* Time to wait for a response to a HTTP request containing an
   * Expect: 100-continue header before sending the data anyway. */
  CURLOPT(CURLOPT_EXPECT_100_TIMEOUT_MS, CURLOPTTYPE_LONG, 227),

  /* This points to a linked list of headers used for proxy requests only,
     struct curl_slist kind */
  CURLOPT(CURLOPT_PROXYHEADER, CURLOPTTYPE_SLISTPOINT, 228),

  /* Pass in a bitmask of "header options" */
  CURLOPT(CURLOPT_HEADEROPT, CURLOPTTYPE_LONG, 229),

  /* The public key in DER form used to validate the peer public key
     this option is used only if SSL_VERIFYPEER is true */
  CURLOPT(CURLOPT_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 230),

  /* Path to Unix domain socket */
  CURLOPT(CURLOPT_UNIX_SOCKET_PATH, CURLOPTTYPE_STRINGPOINT, 231),

  /* Set if we should verify the certificate status. */
  CURLOPT(CURLOPT_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 232),

  /* Set if we should enable TLS false start. */
  CURLOPT(CURLOPT_SSL_FALSESTART, CURLOPTTYPE_LONG, 233),

  /* Do not squash dot-dot sequences */
  CURLOPT(CURLOPT_PATH_AS_IS, CURLOPTTYPE_LONG, 234),

  /* Proxy Service Name */
  CURLOPT(CURLOPT_PROXY_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 235),

  /* Service Name */
  CURLOPT(CURLOPT_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 236),

  /* Wait/don't wait for pipe/mutex to clarify */
  CURLOPT(CURLOPT_PIPEWAIT, CURLOPTTYPE_LONG, 237),

  /* Set the protocol used when curl is given a URL without a protocol */
  CURLOPT(CURLOPT_DEFAULT_PROTOCOL, CURLOPTTYPE_STRINGPOINT, 238),

  /* Set stream weight, 1 - 256 (default is 16) */
  CURLOPT(CURLOPT_STREAM_WEIGHT, CURLOPTTYPE_LONG, 239),

  /* Set stream dependency on another CURL handle */
  CURLOPT(CURLOPT_STREAM_DEPENDS, CURLOPTTYPE_OBJECTPOINT, 240),

  /* Set E-xclusive stream dependency on another CURL handle */
  CURLOPT(CURLOPT_STREAM_DEPENDS_E, CURLOPTTYPE_OBJECTPOINT, 241),

  /* Do not send any tftp option requests to the server */
  CURLOPT(CURLOPT_TFTP_NO_OPTIONS, CURLOPTTYPE_LONG, 242),

  /* Linked-list of host:port:connect-to-host:connect-to-port,
     overrides the URL's host:port (only for the network layer) */
  CURLOPT(CURLOPT_CONNECT_TO, CURLOPTTYPE_SLISTPOINT, 243),

  /* Set TCP Fast Open */
  CURLOPT(CURLOPT_TCP_FASTOPEN, CURLOPTTYPE_LONG, 244),

  /* Continue to send data if the server responds early with an
   * HTTP status code >= 300 */
  CURLOPT(CURLOPT_KEEP_SENDING_ON_ERROR, CURLOPTTYPE_LONG, 245),

  /* The CApath or CAfile used to validate the proxy certificate
     this option is used only if PROXY_SSL_VERIFYPEER is true */
  CURLOPT(CURLOPT_PROXY_CAINFO, CURLOPTTYPE_STRINGPOINT, 246),

  /* The CApath directory used to validate the proxy certificate
     this option is used only if PROXY_SSL_VERIFYPEER is true */
  CURLOPT(CURLOPT_PROXY_CAPATH, CURLOPTTYPE_STRINGPOINT, 247),

  /* Set if we should verify the proxy in ssl handshake,
     set 1 to verify. */
  CURLOPT(CURLOPT_PROXY_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 248),

  /* Set if we should verify the Common name from the proxy certificate in ssl
   * handshake, set 1 to check existence, 2 to ensure that it matches
   * the provided hostname. */
  CURLOPT(CURLOPT_PROXY_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 249),

  /* What version to specifically try to use for proxy.
     See CURL_SSLVERSION defines below. */
  CURLOPT(CURLOPT_PROXY_SSLVERSION, CURLOPTTYPE_LONG, 250),

  /* Set a username for authenticated TLS for proxy */
  CURLOPT(CURLOPT_PROXY_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 251),

  /* Set a password for authenticated TLS for proxy */
  CURLOPT(CURLOPT_PROXY_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 252),

  /* Set authentication type for authenticated TLS for proxy */
  CURLOPT(CURLOPT_PROXY_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 253),

  /* name of the file keeping your private SSL-certificate for proxy */
  CURLOPT(CURLOPT_PROXY_SSLCERT, CURLOPTTYPE_STRINGPOINT, 254),

  /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") for
     proxy */
  CURLOPT(CURLOPT_PROXY_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 255),

  /* name of the file keeping your private SSL-key for proxy */
  CURLOPT(CURLOPT_PROXY_SSLKEY, CURLOPTTYPE_STRINGPOINT, 256),

  /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") for
     proxy */
  CURLOPT(CURLOPT_PROXY_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 257),

  /* password for the SSL private key for proxy */
  CURLOPT(CURLOPT_PROXY_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 258),

  /* Specify which SSL ciphers to use for proxy */
  CURLOPT(CURLOPT_PROXY_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 259),

  /* CRL file for proxy */
  CURLOPT(CURLOPT_PROXY_CRLFILE, CURLOPTTYPE_STRINGPOINT, 260),

  /* Enable/disable specific SSL features with a bitmask for proxy, see
     CURLSSLOPT_* */
  CURLOPT(CURLOPT_PROXY_SSL_OPTIONS, CURLOPTTYPE_LONG, 261),

  /* Name of pre proxy to use. */
  CURLOPT(CURLOPT_PRE_PROXY, CURLOPTTYPE_STRINGPOINT, 262),

  /* The public key in DER form used to validate the proxy public key
     this option is used only if PROXY_SSL_VERIFYPEER is true */
  CURLOPT(CURLOPT_PROXY_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 263),

  /* Path to an abstract Unix domain socket */
  CURLOPT(CURLOPT_ABSTRACT_UNIX_SOCKET, CURLOPTTYPE_STRINGPOINT, 264),

  /* Suppress proxy CONNECT response headers from user callbacks */
  CURLOPT(CURLOPT_SUPPRESS_CONNECT_HEADERS, CURLOPTTYPE_LONG, 265),

  /* The request target, instead of extracted from the URL */
  CURLOPT(CURLOPT_REQUEST_TARGET, CURLOPTTYPE_STRINGPOINT, 266),

  /* bitmask of allowed auth methods for connections to SOCKS5 proxies */
  CURLOPT(CURLOPT_SOCKS5_AUTH, CURLOPTTYPE_LONG, 267),

  /* Enable/disable SSH compression */
  CURLOPT(CURLOPT_SSH_COMPRESSION, CURLOPTTYPE_LONG, 268),

  /* Post MIME data. */
  CURLOPT(CURLOPT_MIMEPOST, CURLOPTTYPE_OBJECTPOINT, 269),

  /* Time to use with the CURLOPT_TIMECONDITION. Specified in number of
     seconds since 1 Jan 1970. */
  CURLOPT(CURLOPT_TIMEVALUE_LARGE, CURLOPTTYPE_OFF_T, 270),

  /* Head start in milliseconds to give happy eyeballs. */
  CURLOPT(CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS, CURLOPTTYPE_LONG, 271),

  /* Function that will be called before a resolver request is made */
  CURLOPT(CURLOPT_RESOLVER_START_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 272),

  /* User data to pass to the resolver start callback. */
  CURLOPT(CURLOPT_RESOLVER_START_DATA, CURLOPTTYPE_OBJECTPOINT, 273),

  /* send HAProxy PROXY protocol header? */
  CURLOPT(CURLOPT_HAPROXYPROTOCOL, CURLOPTTYPE_LONG, 274),

  /* shuffle addresses before use when DNS returns multiple */
  CURLOPT(CURLOPT_DNS_SHUFFLE_ADDRESSES, CURLOPTTYPE_LONG, 275),

  /* Specify which TLS 1.3 ciphers suites to use */
  CURLOPT(CURLOPT_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 276),
  CURLOPT(CURLOPT_PROXY_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 277),

  /* Disallow specifying username/login in URL. */
  CURLOPT(CURLOPT_DISALLOW_USERNAME_IN_URL, CURLOPTTYPE_LONG, 278),

  /* DNS-over-HTTPS URL */
  CURLOPT(CURLOPT_DOH_URL, CURLOPTTYPE_STRINGPOINT, 279),

  /* Preferred buffer size to use for uploads */
  CURLOPT(CURLOPT_UPLOAD_BUFFERSIZE, CURLOPTTYPE_LONG, 280),

  /* Time in ms between connection upkeep calls for long-lived connections. */
  CURLOPT(CURLOPT_UPKEEP_INTERVAL_MS, CURLOPTTYPE_LONG, 281),

  /* Specify URL using CURL URL API. */
  CURLOPT(CURLOPT_CURLU, CURLOPTTYPE_OBJECTPOINT, 282),

  /* add trailing data just after no more data is available */
  CURLOPT(CURLOPT_TRAILERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 283),

  /* pointer to be passed to HTTP_TRAILER_FUNCTION */
  CURLOPT(CURLOPT_TRAILERDATA, CURLOPTTYPE_OBJECTPOINT, 284),

  /* set this to 1L to allow HTTP/0.9 responses or 0L to disallow */
  CURLOPT(CURLOPT_HTTP09_ALLOWED, CURLOPTTYPE_LONG, 285),

  /* alt-svc control bitmask */
  CURLOPT(CURLOPT_ALTSVC_CTRL, CURLOPTTYPE_LONG, 286),

  /* alt-svc cache file name to possibly read from/write to */
  CURLOPT(CURLOPT_ALTSVC, CURLOPTTYPE_STRINGPOINT, 287),

  /* maximum age of a connection to consider it for reuse (in seconds) */
  CURLOPT(CURLOPT_MAXAGE_CONN, CURLOPTTYPE_LONG, 288),

  /* SASL authorisation identity */
  CURLOPT(CURLOPT_SASL_AUTHZID, CURLOPTTYPE_STRINGPOINT, 289),

  /* allow RCPT TO command to fail for some recipients */
  CURLOPT(CURLOPT_MAIL_RCPT_ALLLOWFAILS, CURLOPTTYPE_LONG, 290),

  CURLOPT_LASTENTRY /* the last unused */
} CURLoption;

#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
                          the obsolete stuff removed! */

2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
 *
 * Set mime part headers.
 */
CURL_EXTERN CURLcode curl_mime_headers(curl_mimepart *part,
                                       struct curl_slist *headers,
                                       int take_ownership);

/* Old form API. */
/* name is uppercase CURLFORM_<name> */
#ifdef CFINIT
#undef CFINIT
#endif

#ifdef CURL_ISOCPP
#define CFINIT(name) CURLFORM_ ## name
#else
/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
#define CFINIT(name) CURLFORM_/**/name
#endif

typedef enum {
  CFINIT(NOTHING),        /********* the first one is unused ************/

  /*  */
  CFINIT(COPYNAME),
  CFINIT(PTRNAME),
  CFINIT(NAMELENGTH),
  CFINIT(COPYCONTENTS),
  CFINIT(PTRCONTENTS),
  CFINIT(CONTENTSLENGTH),
  CFINIT(FILECONTENT),
  CFINIT(ARRAY),
  CFINIT(OBSOLETE),
  CFINIT(FILE),

  CFINIT(BUFFER),
  CFINIT(BUFFERPTR),
  CFINIT(BUFFERLENGTH),

  CFINIT(CONTENTTYPE),
  CFINIT(CONTENTHEADER),
  CFINIT(FILENAME),
  CFINIT(END),
  CFINIT(OBSOLETE2),

  CFINIT(STREAM),
  CFINIT(CONTENTLEN), /* added in 7.46.0, provide a curl_off_t length */

  CURLFORM_LASTENTRY /* the last unused */
} CURLformoption;

#undef CFINIT /* done */

/* structure to be used as parameter for CURLFORM_ARRAY */
struct curl_forms {
  CURLformoption option;
  const char     *value;
};

/* use this for multipart formpost building */







<
<
<
<
<
<
<
<
<
<
<
<
<

|
<
<
|
|
|
|
|
|
|
|
|
|

|
|
|

|
|
|
|
|

|
|




<
<







2225
2226
2227
2228
2229
2230
2231













2232
2233


2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260


2261
2262
2263
2264
2265
2266
2267
 *
 * Set mime part headers.
 */
CURL_EXTERN CURLcode curl_mime_headers(curl_mimepart *part,
                                       struct curl_slist *headers,
                                       int take_ownership);














typedef enum {
  CURLFORM_NOTHING,        /********* the first one is unused ************/


  CURLFORM_COPYNAME,
  CURLFORM_PTRNAME,
  CURLFORM_NAMELENGTH,
  CURLFORM_COPYCONTENTS,
  CURLFORM_PTRCONTENTS,
  CURLFORM_CONTENTSLENGTH,
  CURLFORM_FILECONTENT,
  CURLFORM_ARRAY,
  CURLFORM_OBSOLETE,
  CURLFORM_FILE,

  CURLFORM_BUFFER,
  CURLFORM_BUFFERPTR,
  CURLFORM_BUFFERLENGTH,

  CURLFORM_CONTENTTYPE,
  CURLFORM_CONTENTHEADER,
  CURLFORM_FILENAME,
  CURLFORM_END,
  CURLFORM_OBSOLETE2,

  CURLFORM_STREAM,
  CURLFORM_CONTENTLEN, /* added in 7.46.0, provide a curl_off_t length */

  CURLFORM_LASTENTRY /* the last unused */
} CURLformoption;



/* structure to be used as parameter for CURLFORM_ARRAY */
struct curl_forms {
  CURLformoption option;
  const char     *value;
};

/* use this for multipart formpost building */
Changes to jni/curl/include/curl/curlver.h.
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
#ifndef CURLINC_CURLVER_H
#define CURLINC_CURLVER_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

/* This header file contains nothing but libcurl version info, generated by
   a script at release-time. This was made its own header file in 7.11.2 */

/* This is the global package copyright */
#define LIBCURL_COPYRIGHT "1996 - 2019 Daniel Stenberg, <daniel@haxx.se>."

/* This is the version number of the libcurl package from which this header
   file origins: */
#define LIBCURL_VERSION "7.68.0"

/* The numeric version number is also available "in parts" by using these
   defines: */
#define LIBCURL_VERSION_MAJOR 7
#define LIBCURL_VERSION_MINOR 68
#define LIBCURL_VERSION_PATCH 0

/* This is the numeric version of the libcurl version number, meant for easier
   parsing and comparions by programs. The LIBCURL_VERSION_NUM define will
   always follow this syntax:

         0xXXYYZZ









|


















|



|




|







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
#ifndef CURLINC_CURLVER_H
#define CURLINC_CURLVER_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

/* This header file contains nothing but libcurl version info, generated by
   a script at release-time. This was made its own header file in 7.11.2 */

/* This is the global package copyright */
#define LIBCURL_COPYRIGHT "1996 - 2020 Daniel Stenberg, <daniel@haxx.se>."

/* This is the version number of the libcurl package from which this header
   file origins: */
#define LIBCURL_VERSION "7.69.0"

/* The numeric version number is also available "in parts" by using these
   defines: */
#define LIBCURL_VERSION_MAJOR 7
#define LIBCURL_VERSION_MINOR 69
#define LIBCURL_VERSION_PATCH 0

/* This is the numeric version of the libcurl version number, meant for easier
   parsing and comparions by programs. The LIBCURL_VERSION_NUM define will
   always follow this syntax:

         0xXXYYZZ
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
   and it is always a greater number in a more recent release. It makes
   comparisons with greater than and less than work.

   Note: This define is the full hex number and _does not_ use the
   CURL_VERSION_BITS() macro since curl's own configure script greps for it
   and needs it to contain the full number.
*/
#define LIBCURL_VERSION_NUM 0x074400

/*
 * This is the date and time when the full source package was created. The
 * timestamp is not stored in git, as the timestamp is properly set in the
 * tarballs by the maketgz script.
 *
 * The format of the date follows this template:
 *
 * "2007-11-23"
 */
#define LIBCURL_TIMESTAMP "2020-01-08"

#define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|(z))
#define CURL_AT_LEAST_VERSION(x,y,z) \
  (LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z))

#endif /* CURLINC_CURLVER_H */







|










|






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
   and it is always a greater number in a more recent release. It makes
   comparisons with greater than and less than work.

   Note: This define is the full hex number and _does not_ use the
   CURL_VERSION_BITS() macro since curl's own configure script greps for it
   and needs it to contain the full number.
*/
#define LIBCURL_VERSION_NUM 0x074500

/*
 * This is the date and time when the full source package was created. The
 * timestamp is not stored in git, as the timestamp is properly set in the
 * tarballs by the maketgz script.
 *
 * The format of the date follows this template:
 *
 * "2007-11-23"
 */
#define LIBCURL_TIMESTAMP "2020-03-04"

#define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|(z))
#define CURL_AT_LEAST_VERSION(x,y,z) \
  (LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z))

#endif /* CURLINC_CURLVER_H */
Changes to jni/curl/include/curl/multi.h.
68
69
70
71
72
73
74
75

76
77
78
79
80
81
82
  CURLM_INTERNAL_ERROR,  /* this is a libcurl bug */
  CURLM_BAD_SOCKET,      /* the passed in socket argument did not match */
  CURLM_UNKNOWN_OPTION,  /* curl_multi_setopt() with unsupported option */
  CURLM_ADDED_ALREADY,   /* an easy handle already added to a multi handle was
                            attempted to get added - again */
  CURLM_RECURSIVE_API_CALL, /* an api function was called from inside a
                               callback */
  CURLM_WAKEUP_FAILURE, /* wakeup is unavailable or failed */

  CURLM_LAST
} CURLMcode;

/* just to make code nicer when using curl_multi_socket() you can now check
   for CURLM_CALL_MULTI_SOCKET too in the same style it works for
   curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */
#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM







|
>







68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
  CURLM_INTERNAL_ERROR,  /* this is a libcurl bug */
  CURLM_BAD_SOCKET,      /* the passed in socket argument did not match */
  CURLM_UNKNOWN_OPTION,  /* curl_multi_setopt() with unsupported option */
  CURLM_ADDED_ALREADY,   /* an easy handle already added to a multi handle was
                            attempted to get added - again */
  CURLM_RECURSIVE_API_CALL, /* an api function was called from inside a
                               callback */
  CURLM_WAKEUP_FAILURE,  /* wakeup is unavailable or failed */
  CURLM_BAD_FUNCTION_ARGUMENT,  /* function called with a bad parameter */
  CURLM_LAST
} CURLMcode;

/* just to make code nicer when using curl_multi_socket() you can now check
   for CURLM_CALL_MULTI_SOCKET too in the same style it works for
   curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */
#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM
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
 *          called (to allow libcurl's timed events to take place).
 *
 * Returns: CURLM error code.
 */
CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle,
                                         long *milliseconds);

#undef CINIT /* re-using the same name as in curl.h */

#ifdef CURL_ISOCPP
#define CINIT(name,type,num) CURLMOPT_ ## name = CURLOPTTYPE_ ## type + num
#else
/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
#define LONG          CURLOPTTYPE_LONG
#define OBJECTPOINT   CURLOPTTYPE_OBJECTPOINT
#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT
#define OFF_T         CURLOPTTYPE_OFF_T
#define CINIT(name,type,number) CURLMOPT_/**/name = type + number
#endif

typedef enum {
  /* This is the socket callback function pointer */
  CINIT(SOCKETFUNCTION, FUNCTIONPOINT, 1),

  /* This is the argument passed to the socket callback */
  CINIT(SOCKETDATA, OBJECTPOINT, 2),

    /* set to 1 to enable pipelining for this multi handle */
  CINIT(PIPELINING, LONG, 3),

   /* This is the timer callback function pointer */
  CINIT(TIMERFUNCTION, FUNCTIONPOINT, 4),

  /* This is the argument passed to the timer callback */
  CINIT(TIMERDATA, OBJECTPOINT, 5),

  /* maximum number of entries in the connection cache */
  CINIT(MAXCONNECTS, LONG, 6),

  /* maximum number of (pipelining) connections to one host */
  CINIT(MAX_HOST_CONNECTIONS, LONG, 7),

  /* maximum number of requests in a pipeline */
  CINIT(MAX_PIPELINE_LENGTH, LONG, 8),

  /* a connection with a content-length longer than this
     will not be considered for pipelining */
  CINIT(CONTENT_LENGTH_PENALTY_SIZE, OFF_T, 9),

  /* a connection with a chunk length longer than this
     will not be considered for pipelining */
  CINIT(CHUNK_LENGTH_PENALTY_SIZE, OFF_T, 10),

  /* a list of site names(+port) that are blacklisted from
     pipelining */
  CINIT(PIPELINING_SITE_BL, OBJECTPOINT, 11),

  /* a list of server types that are blacklisted from
     pipelining */
  CINIT(PIPELINING_SERVER_BL, OBJECTPOINT, 12),

  /* maximum number of open connections in total */
  CINIT(MAX_TOTAL_CONNECTIONS, LONG, 13),

   /* This is the server push callback function pointer */
  CINIT(PUSHFUNCTION, FUNCTIONPOINT, 14),

  /* This is the argument passed to the server push callback */
  CINIT(PUSHDATA, OBJECTPOINT, 15),

  /* maximum number of concurrent streams to support on a connection */
  CINIT(MAX_CONCURRENT_STREAMS, LONG, 16),

  CURLMOPT_LASTENTRY /* the last unused */
} CURLMoption;


/*
 * Name:    curl_multi_setopt()







<
<
<
<
<
<
<
<
<
<
<
<
<


|


|


|


|


|


|


|


|



|



|



|



|


|


|


|


|







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
 *          called (to allow libcurl's timed events to take place).
 *
 * Returns: CURLM error code.
 */
CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle,
                                         long *milliseconds);














typedef enum {
  /* This is the socket callback function pointer */
  CURLOPT(CURLMOPT_SOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 1),

  /* This is the argument passed to the socket callback */
  CURLOPT(CURLMOPT_SOCKETDATA, CURLOPTTYPE_OBJECTPOINT, 2),

    /* set to 1 to enable pipelining for this multi handle */
  CURLOPT(CURLMOPT_PIPELINING, CURLOPTTYPE_LONG, 3),

   /* This is the timer callback function pointer */
  CURLOPT(CURLMOPT_TIMERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 4),

  /* This is the argument passed to the timer callback */
  CURLOPT(CURLMOPT_TIMERDATA, CURLOPTTYPE_OBJECTPOINT, 5),

  /* maximum number of entries in the connection cache */
  CURLOPT(CURLMOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 6),

  /* maximum number of (pipelining) connections to one host */
  CURLOPT(CURLMOPT_MAX_HOST_CONNECTIONS, CURLOPTTYPE_LONG, 7),

  /* maximum number of requests in a pipeline */
  CURLOPT(CURLMOPT_MAX_PIPELINE_LENGTH, CURLOPTTYPE_LONG, 8),

  /* a connection with a content-length longer than this
     will not be considered for pipelining */
  CURLOPT(CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 9),

  /* a connection with a chunk length longer than this
     will not be considered for pipelining */
  CURLOPT(CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 10),

  /* a list of site names(+port) that are blacklisted from
     pipelining */
  CURLOPT(CURLMOPT_PIPELINING_SITE_BL, CURLOPTTYPE_OBJECTPOINT, 11),

  /* a list of server types that are blacklisted from
     pipelining */
  CURLOPT(CURLMOPT_PIPELINING_SERVER_BL, CURLOPTTYPE_OBJECTPOINT, 12),

  /* maximum number of open connections in total */
  CURLOPT(CURLMOPT_MAX_TOTAL_CONNECTIONS, CURLOPTTYPE_LONG, 13),

   /* This is the server push callback function pointer */
  CURLOPT(CURLMOPT_PUSHFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 14),

  /* This is the argument passed to the server push callback */
  CURLOPT(CURLMOPT_PUSHDATA, CURLOPTTYPE_OBJECTPOINT, 15),

  /* maximum number of concurrent streams to support on a connection */
  CURLOPT(CURLMOPT_MAX_CONCURRENT_STREAMS, CURLOPTTYPE_LONG, 16),

  CURLMOPT_LASTENTRY /* the last unused */
} CURLMoption;


/*
 * Name:    curl_multi_setopt()
Changes to jni/curl/lib/CMakeLists.txt.
91
92
93
94
95
96
97






98
99
100
101
102
103
104
  set_property(TARGET ${LIB_NAME} APPEND PROPERTY COMPILE_DEFINITIONS "CURL_HIDDEN_SYMBOLS")
  set_property(TARGET ${LIB_NAME} APPEND PROPERTY COMPILE_FLAGS ${CURL_CFLAG_SYMBOLS_HIDE})
endif()

# Remove the "lib" prefix since the library is already named "libcurl".
set_target_properties(${LIB_NAME} PROPERTIES PREFIX "")
set_target_properties(${LIB_NAME} PROPERTIES IMPORT_PREFIX "")







if(WIN32)
  if(BUILD_SHARED_LIBS)
    # Add "_imp" as a suffix before the extension to avoid conflicting with the statically linked "libcurl.lib"
    set_target_properties(${LIB_NAME} PROPERTIES IMPORT_SUFFIX "_imp.lib")
  endif()
endif()







>
>
>
>
>
>







91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
  set_property(TARGET ${LIB_NAME} APPEND PROPERTY COMPILE_DEFINITIONS "CURL_HIDDEN_SYMBOLS")
  set_property(TARGET ${LIB_NAME} APPEND PROPERTY COMPILE_FLAGS ${CURL_CFLAG_SYMBOLS_HIDE})
endif()

# Remove the "lib" prefix since the library is already named "libcurl".
set_target_properties(${LIB_NAME} PROPERTIES PREFIX "")
set_target_properties(${LIB_NAME} PROPERTIES IMPORT_PREFIX "")

if(CURL_HAS_LTO)
  set_target_properties(${LIB_NAME} PROPERTIES
    INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
    INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE)
endif()

if(WIN32)
  if(BUILD_SHARED_LIBS)
    # Add "_imp" as a suffix before the extension to avoid conflicting with the statically linked "libcurl.lib"
    set_target_properties(${LIB_NAME} PROPERTIES IMPORT_SUFFIX "_imp.lib")
  endif()
endif()
Changes to jni/curl/lib/Makefile.in.
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is







|







17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
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
	libcurl_la-x509asn1.lo libcurl_la-http2.lo libcurl_la-smb.lo \
	libcurl_la-curl_endian.lo libcurl_la-curl_des.lo \
	libcurl_la-system_win32.lo libcurl_la-mime.lo \
	libcurl_la-sha256.lo libcurl_la-setopt.lo \
	libcurl_la-curl_path.lo libcurl_la-curl_ctype.lo \
	libcurl_la-curl_range.lo libcurl_la-psl.lo libcurl_la-doh.lo \
	libcurl_la-urlapi.lo libcurl_la-curl_get_line.lo \
	libcurl_la-altsvc.lo libcurl_la-socketpair.lo

am__dirstamp = $(am__leading_dot)dirstamp
am__objects_2 = vauth/libcurl_la-vauth.lo \
	vauth/libcurl_la-cleartext.lo vauth/libcurl_la-cram.lo \
	vauth/libcurl_la-digest.lo vauth/libcurl_la-digest_sspi.lo \
	vauth/libcurl_la-krb5_gssapi.lo vauth/libcurl_la-krb5_sspi.lo \
	vauth/libcurl_la-ntlm.lo vauth/libcurl_la-ntlm_sspi.lo \
	vauth/libcurl_la-oauth2.lo vauth/libcurl_la-spnego_gssapi.lo \
	vauth/libcurl_la-spnego_sspi.lo
am__objects_3 = vtls/libcurl_la-openssl.lo vtls/libcurl_la-gtls.lo \
	vtls/libcurl_la-vtls.lo vtls/libcurl_la-nss.lo \
	vtls/libcurl_la-polarssl.lo \
	vtls/libcurl_la-polarssl_threadlock.lo \
	vtls/libcurl_la-wolfssl.lo vtls/libcurl_la-schannel.lo \
	vtls/libcurl_la-schannel_verify.lo \
	vtls/libcurl_la-sectransp.lo vtls/libcurl_la-gskit.lo \
	vtls/libcurl_la-mbedtls.lo vtls/libcurl_la-mesalink.lo \
	vtls/libcurl_la-bearssl.lo
am__objects_4 = vquic/libcurl_la-ngtcp2.lo vquic/libcurl_la-quiche.lo
am__objects_5 = vssh/libcurl_la-libssh2.lo vssh/libcurl_la-libssh.lo

am__objects_6 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \
	$(am__objects_4) $(am__objects_5)
am__objects_7 =
am__objects_8 = $(am__objects_7) $(am__objects_7) $(am__objects_7) \
	$(am__objects_7) $(am__objects_7)
am_libcurl_la_OBJECTS = $(am__objects_6) $(am__objects_8)
libcurl_la_OBJECTS = $(am_libcurl_la_OBJECTS)







|
>










|
<






|
>







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
	libcurl_la-x509asn1.lo libcurl_la-http2.lo libcurl_la-smb.lo \
	libcurl_la-curl_endian.lo libcurl_la-curl_des.lo \
	libcurl_la-system_win32.lo libcurl_la-mime.lo \
	libcurl_la-sha256.lo libcurl_la-setopt.lo \
	libcurl_la-curl_path.lo libcurl_la-curl_ctype.lo \
	libcurl_la-curl_range.lo libcurl_la-psl.lo libcurl_la-doh.lo \
	libcurl_la-urlapi.lo libcurl_la-curl_get_line.lo \
	libcurl_la-altsvc.lo libcurl_la-socketpair.lo \
	libcurl_la-rename.lo
am__dirstamp = $(am__leading_dot)dirstamp
am__objects_2 = vauth/libcurl_la-vauth.lo \
	vauth/libcurl_la-cleartext.lo vauth/libcurl_la-cram.lo \
	vauth/libcurl_la-digest.lo vauth/libcurl_la-digest_sspi.lo \
	vauth/libcurl_la-krb5_gssapi.lo vauth/libcurl_la-krb5_sspi.lo \
	vauth/libcurl_la-ntlm.lo vauth/libcurl_la-ntlm_sspi.lo \
	vauth/libcurl_la-oauth2.lo vauth/libcurl_la-spnego_gssapi.lo \
	vauth/libcurl_la-spnego_sspi.lo
am__objects_3 = vtls/libcurl_la-openssl.lo vtls/libcurl_la-gtls.lo \
	vtls/libcurl_la-vtls.lo vtls/libcurl_la-nss.lo \
	vtls/libcurl_la-mbedtls_threadlock.lo \

	vtls/libcurl_la-wolfssl.lo vtls/libcurl_la-schannel.lo \
	vtls/libcurl_la-schannel_verify.lo \
	vtls/libcurl_la-sectransp.lo vtls/libcurl_la-gskit.lo \
	vtls/libcurl_la-mbedtls.lo vtls/libcurl_la-mesalink.lo \
	vtls/libcurl_la-bearssl.lo
am__objects_4 = vquic/libcurl_la-ngtcp2.lo vquic/libcurl_la-quiche.lo
am__objects_5 = vssh/libcurl_la-libssh2.lo vssh/libcurl_la-libssh.lo \
	vssh/libcurl_la-wolfssh.lo
am__objects_6 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \
	$(am__objects_4) $(am__objects_5)
am__objects_7 =
am__objects_8 = $(am__objects_7) $(am__objects_7) $(am__objects_7) \
	$(am__objects_7) $(am__objects_7)
am_libcurl_la_OBJECTS = $(am__objects_6) $(am__objects_8)
libcurl_la_OBJECTS = $(am_libcurl_la_OBJECTS)
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
	libcurlu_la-smb.lo libcurlu_la-curl_endian.lo \
	libcurlu_la-curl_des.lo libcurlu_la-system_win32.lo \
	libcurlu_la-mime.lo libcurlu_la-sha256.lo \
	libcurlu_la-setopt.lo libcurlu_la-curl_path.lo \
	libcurlu_la-curl_ctype.lo libcurlu_la-curl_range.lo \
	libcurlu_la-psl.lo libcurlu_la-doh.lo libcurlu_la-urlapi.lo \
	libcurlu_la-curl_get_line.lo libcurlu_la-altsvc.lo \
	libcurlu_la-socketpair.lo
am__objects_10 = vauth/libcurlu_la-vauth.lo \
	vauth/libcurlu_la-cleartext.lo vauth/libcurlu_la-cram.lo \
	vauth/libcurlu_la-digest.lo vauth/libcurlu_la-digest_sspi.lo \
	vauth/libcurlu_la-krb5_gssapi.lo \
	vauth/libcurlu_la-krb5_sspi.lo vauth/libcurlu_la-ntlm.lo \
	vauth/libcurlu_la-ntlm_sspi.lo vauth/libcurlu_la-oauth2.lo \
	vauth/libcurlu_la-spnego_gssapi.lo \
	vauth/libcurlu_la-spnego_sspi.lo
am__objects_11 = vtls/libcurlu_la-openssl.lo vtls/libcurlu_la-gtls.lo \
	vtls/libcurlu_la-vtls.lo vtls/libcurlu_la-nss.lo \
	vtls/libcurlu_la-polarssl.lo \
	vtls/libcurlu_la-polarssl_threadlock.lo \
	vtls/libcurlu_la-wolfssl.lo vtls/libcurlu_la-schannel.lo \
	vtls/libcurlu_la-schannel_verify.lo \
	vtls/libcurlu_la-sectransp.lo vtls/libcurlu_la-gskit.lo \
	vtls/libcurlu_la-mbedtls.lo vtls/libcurlu_la-mesalink.lo \
	vtls/libcurlu_la-bearssl.lo
am__objects_12 = vquic/libcurlu_la-ngtcp2.lo \
	vquic/libcurlu_la-quiche.lo
am__objects_13 = vssh/libcurlu_la-libssh2.lo \
	vssh/libcurlu_la-libssh.lo
am__objects_14 = $(am__objects_9) $(am__objects_10) $(am__objects_11) \
	$(am__objects_12) $(am__objects_13)
am_libcurlu_la_OBJECTS = $(am__objects_14) $(am__objects_8)
libcurlu_la_OBJECTS = $(am_libcurlu_la_OBJECTS)
libcurlu_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libcurlu_la_CFLAGS) \
	$(CFLAGS) $(libcurlu_la_LDFLAGS) $(LDFLAGS) -o $@







|










|
<








|







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
	libcurlu_la-smb.lo libcurlu_la-curl_endian.lo \
	libcurlu_la-curl_des.lo libcurlu_la-system_win32.lo \
	libcurlu_la-mime.lo libcurlu_la-sha256.lo \
	libcurlu_la-setopt.lo libcurlu_la-curl_path.lo \
	libcurlu_la-curl_ctype.lo libcurlu_la-curl_range.lo \
	libcurlu_la-psl.lo libcurlu_la-doh.lo libcurlu_la-urlapi.lo \
	libcurlu_la-curl_get_line.lo libcurlu_la-altsvc.lo \
	libcurlu_la-socketpair.lo libcurlu_la-rename.lo
am__objects_10 = vauth/libcurlu_la-vauth.lo \
	vauth/libcurlu_la-cleartext.lo vauth/libcurlu_la-cram.lo \
	vauth/libcurlu_la-digest.lo vauth/libcurlu_la-digest_sspi.lo \
	vauth/libcurlu_la-krb5_gssapi.lo \
	vauth/libcurlu_la-krb5_sspi.lo vauth/libcurlu_la-ntlm.lo \
	vauth/libcurlu_la-ntlm_sspi.lo vauth/libcurlu_la-oauth2.lo \
	vauth/libcurlu_la-spnego_gssapi.lo \
	vauth/libcurlu_la-spnego_sspi.lo
am__objects_11 = vtls/libcurlu_la-openssl.lo vtls/libcurlu_la-gtls.lo \
	vtls/libcurlu_la-vtls.lo vtls/libcurlu_la-nss.lo \
	vtls/libcurlu_la-mbedtls_threadlock.lo \

	vtls/libcurlu_la-wolfssl.lo vtls/libcurlu_la-schannel.lo \
	vtls/libcurlu_la-schannel_verify.lo \
	vtls/libcurlu_la-sectransp.lo vtls/libcurlu_la-gskit.lo \
	vtls/libcurlu_la-mbedtls.lo vtls/libcurlu_la-mesalink.lo \
	vtls/libcurlu_la-bearssl.lo
am__objects_12 = vquic/libcurlu_la-ngtcp2.lo \
	vquic/libcurlu_la-quiche.lo
am__objects_13 = vssh/libcurlu_la-libssh2.lo \
	vssh/libcurlu_la-libssh.lo vssh/libcurlu_la-wolfssh.lo
am__objects_14 = $(am__objects_9) $(am__objects_10) $(am__objects_11) \
	$(am__objects_12) $(am__objects_13)
am_libcurlu_la_OBJECTS = $(am__objects_14) $(am__objects_8)
libcurlu_la_OBJECTS = $(am_libcurlu_la_OBJECTS)
libcurlu_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libcurlu_la_CFLAGS) \
	$(CFLAGS) $(libcurlu_la_LDFLAGS) $(LDFLAGS) -o $@
434
435
436
437
438
439
440

441
442
443
444
445
446
447
	./$(DEPDIR)/libcurl_la-nonblock.Plo \
	./$(DEPDIR)/libcurl_la-openldap.Plo \
	./$(DEPDIR)/libcurl_la-parsedate.Plo \
	./$(DEPDIR)/libcurl_la-pingpong.Plo \
	./$(DEPDIR)/libcurl_la-pop3.Plo \
	./$(DEPDIR)/libcurl_la-progress.Plo \
	./$(DEPDIR)/libcurl_la-psl.Plo ./$(DEPDIR)/libcurl_la-rand.Plo \

	./$(DEPDIR)/libcurl_la-rtsp.Plo \
	./$(DEPDIR)/libcurl_la-security.Plo \
	./$(DEPDIR)/libcurl_la-select.Plo \
	./$(DEPDIR)/libcurl_la-sendf.Plo \
	./$(DEPDIR)/libcurl_la-setopt.Plo \
	./$(DEPDIR)/libcurl_la-sha256.Plo \
	./$(DEPDIR)/libcurl_la-share.Plo \







>







434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
	./$(DEPDIR)/libcurl_la-nonblock.Plo \
	./$(DEPDIR)/libcurl_la-openldap.Plo \
	./$(DEPDIR)/libcurl_la-parsedate.Plo \
	./$(DEPDIR)/libcurl_la-pingpong.Plo \
	./$(DEPDIR)/libcurl_la-pop3.Plo \
	./$(DEPDIR)/libcurl_la-progress.Plo \
	./$(DEPDIR)/libcurl_la-psl.Plo ./$(DEPDIR)/libcurl_la-rand.Plo \
	./$(DEPDIR)/libcurl_la-rename.Plo \
	./$(DEPDIR)/libcurl_la-rtsp.Plo \
	./$(DEPDIR)/libcurl_la-security.Plo \
	./$(DEPDIR)/libcurl_la-select.Plo \
	./$(DEPDIR)/libcurl_la-sendf.Plo \
	./$(DEPDIR)/libcurl_la-setopt.Plo \
	./$(DEPDIR)/libcurl_la-sha256.Plo \
	./$(DEPDIR)/libcurl_la-share.Plo \
544
545
546
547
548
549
550

551
552
553
554
555
556
557
	./$(DEPDIR)/libcurlu_la-openldap.Plo \
	./$(DEPDIR)/libcurlu_la-parsedate.Plo \
	./$(DEPDIR)/libcurlu_la-pingpong.Plo \
	./$(DEPDIR)/libcurlu_la-pop3.Plo \
	./$(DEPDIR)/libcurlu_la-progress.Plo \
	./$(DEPDIR)/libcurlu_la-psl.Plo \
	./$(DEPDIR)/libcurlu_la-rand.Plo \

	./$(DEPDIR)/libcurlu_la-rtsp.Plo \
	./$(DEPDIR)/libcurlu_la-security.Plo \
	./$(DEPDIR)/libcurlu_la-select.Plo \
	./$(DEPDIR)/libcurlu_la-sendf.Plo \
	./$(DEPDIR)/libcurlu_la-setopt.Plo \
	./$(DEPDIR)/libcurlu_la-sha256.Plo \
	./$(DEPDIR)/libcurlu_la-share.Plo \







>







545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
	./$(DEPDIR)/libcurlu_la-openldap.Plo \
	./$(DEPDIR)/libcurlu_la-parsedate.Plo \
	./$(DEPDIR)/libcurlu_la-pingpong.Plo \
	./$(DEPDIR)/libcurlu_la-pop3.Plo \
	./$(DEPDIR)/libcurlu_la-progress.Plo \
	./$(DEPDIR)/libcurlu_la-psl.Plo \
	./$(DEPDIR)/libcurlu_la-rand.Plo \
	./$(DEPDIR)/libcurlu_la-rename.Plo \
	./$(DEPDIR)/libcurlu_la-rtsp.Plo \
	./$(DEPDIR)/libcurlu_la-security.Plo \
	./$(DEPDIR)/libcurlu_la-select.Plo \
	./$(DEPDIR)/libcurlu_la-sendf.Plo \
	./$(DEPDIR)/libcurlu_la-setopt.Plo \
	./$(DEPDIR)/libcurlu_la-sha256.Plo \
	./$(DEPDIR)/libcurlu_la-share.Plo \
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
	vauth/$(DEPDIR)/libcurlu_la-vauth.Plo \
	vquic/$(DEPDIR)/libcurl_la-ngtcp2.Plo \
	vquic/$(DEPDIR)/libcurl_la-quiche.Plo \
	vquic/$(DEPDIR)/libcurlu_la-ngtcp2.Plo \
	vquic/$(DEPDIR)/libcurlu_la-quiche.Plo \
	vssh/$(DEPDIR)/libcurl_la-libssh.Plo \
	vssh/$(DEPDIR)/libcurl_la-libssh2.Plo \

	vssh/$(DEPDIR)/libcurlu_la-libssh.Plo \
	vssh/$(DEPDIR)/libcurlu_la-libssh2.Plo \

	vtls/$(DEPDIR)/libcurl_la-bearssl.Plo \
	vtls/$(DEPDIR)/libcurl_la-gskit.Plo \
	vtls/$(DEPDIR)/libcurl_la-gtls.Plo \
	vtls/$(DEPDIR)/libcurl_la-mbedtls.Plo \

	vtls/$(DEPDIR)/libcurl_la-mesalink.Plo \
	vtls/$(DEPDIR)/libcurl_la-nss.Plo \
	vtls/$(DEPDIR)/libcurl_la-openssl.Plo \
	vtls/$(DEPDIR)/libcurl_la-polarssl.Plo \
	vtls/$(DEPDIR)/libcurl_la-polarssl_threadlock.Plo \
	vtls/$(DEPDIR)/libcurl_la-schannel.Plo \
	vtls/$(DEPDIR)/libcurl_la-schannel_verify.Plo \
	vtls/$(DEPDIR)/libcurl_la-sectransp.Plo \
	vtls/$(DEPDIR)/libcurl_la-vtls.Plo \
	vtls/$(DEPDIR)/libcurl_la-wolfssl.Plo \
	vtls/$(DEPDIR)/libcurlu_la-bearssl.Plo \
	vtls/$(DEPDIR)/libcurlu_la-gskit.Plo \
	vtls/$(DEPDIR)/libcurlu_la-gtls.Plo \
	vtls/$(DEPDIR)/libcurlu_la-mbedtls.Plo \

	vtls/$(DEPDIR)/libcurlu_la-mesalink.Plo \
	vtls/$(DEPDIR)/libcurlu_la-nss.Plo \
	vtls/$(DEPDIR)/libcurlu_la-openssl.Plo \
	vtls/$(DEPDIR)/libcurlu_la-polarssl.Plo \
	vtls/$(DEPDIR)/libcurlu_la-polarssl_threadlock.Plo \
	vtls/$(DEPDIR)/libcurlu_la-schannel.Plo \
	vtls/$(DEPDIR)/libcurlu_la-schannel_verify.Plo \
	vtls/$(DEPDIR)/libcurlu_la-sectransp.Plo \
	vtls/$(DEPDIR)/libcurlu_la-vtls.Plo \
	vtls/$(DEPDIR)/libcurlu_la-wolfssl.Plo
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \







>


>




>



<
<









>



<
<







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
	vauth/$(DEPDIR)/libcurlu_la-vauth.Plo \
	vquic/$(DEPDIR)/libcurl_la-ngtcp2.Plo \
	vquic/$(DEPDIR)/libcurl_la-quiche.Plo \
	vquic/$(DEPDIR)/libcurlu_la-ngtcp2.Plo \
	vquic/$(DEPDIR)/libcurlu_la-quiche.Plo \
	vssh/$(DEPDIR)/libcurl_la-libssh.Plo \
	vssh/$(DEPDIR)/libcurl_la-libssh2.Plo \
	vssh/$(DEPDIR)/libcurl_la-wolfssh.Plo \
	vssh/$(DEPDIR)/libcurlu_la-libssh.Plo \
	vssh/$(DEPDIR)/libcurlu_la-libssh2.Plo \
	vssh/$(DEPDIR)/libcurlu_la-wolfssh.Plo \
	vtls/$(DEPDIR)/libcurl_la-bearssl.Plo \
	vtls/$(DEPDIR)/libcurl_la-gskit.Plo \
	vtls/$(DEPDIR)/libcurl_la-gtls.Plo \
	vtls/$(DEPDIR)/libcurl_la-mbedtls.Plo \
	vtls/$(DEPDIR)/libcurl_la-mbedtls_threadlock.Plo \
	vtls/$(DEPDIR)/libcurl_la-mesalink.Plo \
	vtls/$(DEPDIR)/libcurl_la-nss.Plo \
	vtls/$(DEPDIR)/libcurl_la-openssl.Plo \


	vtls/$(DEPDIR)/libcurl_la-schannel.Plo \
	vtls/$(DEPDIR)/libcurl_la-schannel_verify.Plo \
	vtls/$(DEPDIR)/libcurl_la-sectransp.Plo \
	vtls/$(DEPDIR)/libcurl_la-vtls.Plo \
	vtls/$(DEPDIR)/libcurl_la-wolfssl.Plo \
	vtls/$(DEPDIR)/libcurlu_la-bearssl.Plo \
	vtls/$(DEPDIR)/libcurlu_la-gskit.Plo \
	vtls/$(DEPDIR)/libcurlu_la-gtls.Plo \
	vtls/$(DEPDIR)/libcurlu_la-mbedtls.Plo \
	vtls/$(DEPDIR)/libcurlu_la-mbedtls_threadlock.Plo \
	vtls/$(DEPDIR)/libcurlu_la-mesalink.Plo \
	vtls/$(DEPDIR)/libcurlu_la-nss.Plo \
	vtls/$(DEPDIR)/libcurlu_la-openssl.Plo \


	vtls/$(DEPDIR)/libcurlu_la-schannel.Plo \
	vtls/$(DEPDIR)/libcurlu_la-schannel_verify.Plo \
	vtls/$(DEPDIR)/libcurlu_la-sectransp.Plo \
	vtls/$(DEPDIR)/libcurlu_la-vtls.Plo \
	vtls/$(DEPDIR)/libcurlu_la-wolfssl.Plo
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
834
835
836
837
838
839
840

841
842
843
844
845
846
847
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@

USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@







>







836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
USE_WOLFSSH = @USE_WOLFSSH@
USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
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
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
LIB_VAUTH_CFILES = vauth/vauth.c vauth/cleartext.c vauth/cram.c         \
  vauth/digest.c vauth/digest_sspi.c vauth/krb5_gssapi.c                \
  vauth/krb5_sspi.c vauth/ntlm.c vauth/ntlm_sspi.c vauth/oauth2.c       \
  vauth/spnego_gssapi.c vauth/spnego_sspi.c

LIB_VAUTH_HFILES = vauth/vauth.h vauth/digest.h vauth/ntlm.h
LIB_VTLS_CFILES = vtls/openssl.c vtls/gtls.c vtls/vtls.c vtls/nss.c     \
  vtls/polarssl.c vtls/polarssl_threadlock.c                            \
  vtls/wolfssl.c vtls/schannel.c vtls/schannel_verify.c                 \
  vtls/sectransp.c vtls/gskit.c vtls/mbedtls.c vtls/mesalink.c          \
  vtls/bearssl.c

LIB_VTLS_HFILES = vtls/openssl.h vtls/vtls.h vtls/gtls.h                \
  vtls/nssg.h vtls/polarssl.h vtls/polarssl_threadlock.h                \
  vtls/wolfssl.h vtls/schannel.h vtls/sectransp.h vtls/gskit.h          \
  vtls/mbedtls.h vtls/mesalink.h vtls/bearssl.h

LIB_VQUIC_CFILES = vquic/ngtcp2.c vquic/quiche.c
LIB_VQUIC_HFILES = vquic/ngtcp2.h vquic/quiche.h
LIB_VSSH_CFILES = vssh/libssh2.c vssh/libssh.c
LIB_VSSH_HFILES = vssh/ssh.h
LIB_CFILES = file.c timeval.c base64.c hostip.c progress.c formdata.c   \
  cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c       \
  ldap.c version.c getenv.c escape.c mprintf.c telnet.c netrc.c         \
  getinfo.c transfer.c strcase.c easy.c security.c curl_fnmatch.c       \
  fileinfo.c ftplistparser.c wildcard.c krb5.c memdebug.c http_chunks.c \
  strtok.c connect.c llist.c hash.c multi.c content_encoding.c share.c  \
  http_digest.c md4.c md5.c http_negotiate.c inet_pton.c strtoofft.c    \
  strerror.c amigaos.c hostasyn.c hostip4.c hostip6.c hostsyn.c         \
  inet_ntop.c parsedate.c select.c tftp.c splay.c strdup.c socks.c      \
  curl_addrinfo.c socks_gssapi.c socks_sspi.c                           \
  curl_sspi.c slist.c nonblock.c curl_memrchr.c imap.c pop3.c smtp.c    \
  pingpong.c rtsp.c curl_threads.c warnless.c hmac.c curl_rtmp.c        \
  openldap.c curl_gethostname.c gopher.c idn_win32.c                    \
  http_proxy.c non-ascii.c asyn-ares.c asyn-thread.c curl_gssapi.c      \
  http_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_sasl.c rand.c        \
  curl_multibyte.c hostcheck.c conncache.c dotdot.c                     \
  x509asn1.c http2.c smb.c curl_endian.c curl_des.c system_win32.c      \
  mime.c sha256.c setopt.c curl_path.c curl_ctype.c curl_range.c psl.c  \
  doh.c urlapi.c curl_get_line.c altsvc.c socketpair.c

LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \
  formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h if2ip.h         \
  speedcheck.h urldata.h curl_ldap.h escape.h telnet.h getinfo.h        \
  strcase.h curl_sec.h memdebug.h http_chunks.h curl_fnmatch.h          \
  wildcard.h fileinfo.h ftplistparser.h strtok.h connect.h llist.h      \
  hash.h content_encoding.h share.h curl_md4.h curl_md5.h http_digest.h \
  http_negotiate.h inet_pton.h amigaos.h strtoofft.h strerror.h         \
  inet_ntop.h curlx.h curl_memory.h curl_setup.h transfer.h select.h    \
  easyif.h multiif.h parsedate.h tftp.h sockaddr.h splay.h strdup.h     \
  socks.h curl_base64.h curl_addrinfo.h curl_sspi.h                     \
  slist.h nonblock.h curl_memrchr.h imap.h pop3.h smtp.h pingpong.h     \
  rtsp.h curl_threads.h warnless.h curl_hmac.h curl_rtmp.h              \
  curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h           \
  http_ntlm.h curl_gssapi.h curl_ntlm_wb.h curl_ntlm_core.h             \
  curl_sasl.h curl_multibyte.h hostcheck.h conncache.h                  \
  curl_setup_once.h multihandle.h setup-vms.h dotdot.h                  \
  x509asn1.h http2.h sigpipe.h smb.h curl_endian.h curl_des.h           \
  curl_printf.h system_win32.h rand.h mime.h curl_sha256.h setopt.h     \
  curl_path.h curl_ctype.h curl_range.h psl.h doh.h urlapi-int.h        \
  curl_get_line.h altsvc.h quic.h socketpair.h

LIB_RCFILES = libcurl.rc
CSOURCES = $(LIB_CFILES) $(LIB_VAUTH_CFILES) $(LIB_VTLS_CFILES) \
  $(LIB_VQUIC_CFILES) $(LIB_VSSH_CFILES)

HHEADERS = $(LIB_HFILES) $(LIB_VAUTH_HFILES) $(LIB_VTLS_HFILES) \
  $(LIB_VQUIC_HFILES) $(LIB_VSSH_HFILES)







<
|
|
|

|
|
|
|



|



















|




















|







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
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
LIB_VAUTH_CFILES = vauth/vauth.c vauth/cleartext.c vauth/cram.c         \
  vauth/digest.c vauth/digest_sspi.c vauth/krb5_gssapi.c                \
  vauth/krb5_sspi.c vauth/ntlm.c vauth/ntlm_sspi.c vauth/oauth2.c       \
  vauth/spnego_gssapi.c vauth/spnego_sspi.c

LIB_VAUTH_HFILES = vauth/vauth.h vauth/digest.h vauth/ntlm.h
LIB_VTLS_CFILES = vtls/openssl.c vtls/gtls.c vtls/vtls.c vtls/nss.c     \

  vtls/mbedtls_threadlock.c vtls/wolfssl.c vtls/schannel.c              \
  vtls/schannel_verify.c vtls/sectransp.c vtls/gskit.c vtls/mbedtls.c   \
  vtls/mesalink.c vtls/bearssl.c

LIB_VTLS_HFILES = vtls/openssl.h vtls/vtls.h vtls/gtls.h vtls/nssg.h    \
  vtls/mbedtls_threadlock.h vtls/wolfssl.h vtls/schannel.h              \
  vtls/sectransp.h vtls/gskit.h vtls/mbedtls.h vtls/mesalink.h          \
  vtls/bearssl.h

LIB_VQUIC_CFILES = vquic/ngtcp2.c vquic/quiche.c
LIB_VQUIC_HFILES = vquic/ngtcp2.h vquic/quiche.h
LIB_VSSH_CFILES = vssh/libssh2.c vssh/libssh.c vssh/wolfssh.c
LIB_VSSH_HFILES = vssh/ssh.h
LIB_CFILES = file.c timeval.c base64.c hostip.c progress.c formdata.c   \
  cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c       \
  ldap.c version.c getenv.c escape.c mprintf.c telnet.c netrc.c         \
  getinfo.c transfer.c strcase.c easy.c security.c curl_fnmatch.c       \
  fileinfo.c ftplistparser.c wildcard.c krb5.c memdebug.c http_chunks.c \
  strtok.c connect.c llist.c hash.c multi.c content_encoding.c share.c  \
  http_digest.c md4.c md5.c http_negotiate.c inet_pton.c strtoofft.c    \
  strerror.c amigaos.c hostasyn.c hostip4.c hostip6.c hostsyn.c         \
  inet_ntop.c parsedate.c select.c tftp.c splay.c strdup.c socks.c      \
  curl_addrinfo.c socks_gssapi.c socks_sspi.c                           \
  curl_sspi.c slist.c nonblock.c curl_memrchr.c imap.c pop3.c smtp.c    \
  pingpong.c rtsp.c curl_threads.c warnless.c hmac.c curl_rtmp.c        \
  openldap.c curl_gethostname.c gopher.c idn_win32.c                    \
  http_proxy.c non-ascii.c asyn-ares.c asyn-thread.c curl_gssapi.c      \
  http_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_sasl.c rand.c        \
  curl_multibyte.c hostcheck.c conncache.c dotdot.c                     \
  x509asn1.c http2.c smb.c curl_endian.c curl_des.c system_win32.c      \
  mime.c sha256.c setopt.c curl_path.c curl_ctype.c curl_range.c psl.c  \
  doh.c urlapi.c curl_get_line.c altsvc.c socketpair.c rename.c

LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \
  formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h if2ip.h         \
  speedcheck.h urldata.h curl_ldap.h escape.h telnet.h getinfo.h        \
  strcase.h curl_sec.h memdebug.h http_chunks.h curl_fnmatch.h          \
  wildcard.h fileinfo.h ftplistparser.h strtok.h connect.h llist.h      \
  hash.h content_encoding.h share.h curl_md4.h curl_md5.h http_digest.h \
  http_negotiate.h inet_pton.h amigaos.h strtoofft.h strerror.h         \
  inet_ntop.h curlx.h curl_memory.h curl_setup.h transfer.h select.h    \
  easyif.h multiif.h parsedate.h tftp.h sockaddr.h splay.h strdup.h     \
  socks.h curl_base64.h curl_addrinfo.h curl_sspi.h                     \
  slist.h nonblock.h curl_memrchr.h imap.h pop3.h smtp.h pingpong.h     \
  rtsp.h curl_threads.h warnless.h curl_hmac.h curl_rtmp.h              \
  curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h           \
  http_ntlm.h curl_gssapi.h curl_ntlm_wb.h curl_ntlm_core.h             \
  curl_sasl.h curl_multibyte.h hostcheck.h conncache.h                  \
  curl_setup_once.h multihandle.h setup-vms.h dotdot.h                  \
  x509asn1.h http2.h sigpipe.h smb.h curl_endian.h curl_des.h           \
  curl_printf.h system_win32.h rand.h mime.h curl_sha256.h setopt.h     \
  curl_path.h curl_ctype.h curl_range.h psl.h doh.h urlapi-int.h        \
  curl_get_line.h altsvc.h quic.h socketpair.h rename.h

LIB_RCFILES = libcurl.rc
CSOURCES = $(LIB_CFILES) $(LIB_VAUTH_CFILES) $(LIB_VTLS_CFILES) \
  $(LIB_VQUIC_CFILES) $(LIB_VSSH_CFILES)

HHEADERS = $(LIB_HFILES) $(LIB_VAUTH_HFILES) $(LIB_VTLS_HFILES) \
  $(LIB_VQUIC_HFILES) $(LIB_VSSH_HFILES)
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurl_la-gtls.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurl_la-vtls.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurl_la-nss.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurl_la-polarssl.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurl_la-polarssl_threadlock.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurl_la-wolfssl.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurl_la-schannel.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurl_la-schannel_verify.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)







<
<
|







1192
1193
1194
1195
1196
1197
1198


1199
1200
1201
1202
1203
1204
1205
1206
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurl_la-gtls.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurl_la-vtls.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurl_la-nss.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)


vtls/libcurl_la-mbedtls_threadlock.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurl_la-wolfssl.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurl_la-schannel.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurl_la-schannel_verify.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
1230
1231
1232
1233
1234
1235
1236


1237
1238
1239
1240
1241
1242
1243
vssh/$(DEPDIR)/$(am__dirstamp):
	@$(MKDIR_P) vssh/$(DEPDIR)
	@: > vssh/$(DEPDIR)/$(am__dirstamp)
vssh/libcurl_la-libssh2.lo: vssh/$(am__dirstamp) \
	vssh/$(DEPDIR)/$(am__dirstamp)
vssh/libcurl_la-libssh.lo: vssh/$(am__dirstamp) \
	vssh/$(DEPDIR)/$(am__dirstamp)



libcurl.la: $(libcurl_la_OBJECTS) $(libcurl_la_DEPENDENCIES) $(EXTRA_libcurl_la_DEPENDENCIES) 
	$(AM_V_CCLD)$(libcurl_la_LINK) -rpath $(libdir) $(libcurl_la_OBJECTS) $(libcurl_la_LIBADD) $(LIBS)
vauth/libcurlu_la-vauth.lo: vauth/$(am__dirstamp) \
	vauth/$(DEPDIR)/$(am__dirstamp)
vauth/libcurlu_la-cleartext.lo: vauth/$(am__dirstamp) \
	vauth/$(DEPDIR)/$(am__dirstamp)







>
>







1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
vssh/$(DEPDIR)/$(am__dirstamp):
	@$(MKDIR_P) vssh/$(DEPDIR)
	@: > vssh/$(DEPDIR)/$(am__dirstamp)
vssh/libcurl_la-libssh2.lo: vssh/$(am__dirstamp) \
	vssh/$(DEPDIR)/$(am__dirstamp)
vssh/libcurl_la-libssh.lo: vssh/$(am__dirstamp) \
	vssh/$(DEPDIR)/$(am__dirstamp)
vssh/libcurl_la-wolfssh.lo: vssh/$(am__dirstamp) \
	vssh/$(DEPDIR)/$(am__dirstamp)

libcurl.la: $(libcurl_la_OBJECTS) $(libcurl_la_DEPENDENCIES) $(EXTRA_libcurl_la_DEPENDENCIES) 
	$(AM_V_CCLD)$(libcurl_la_LINK) -rpath $(libdir) $(libcurl_la_OBJECTS) $(libcurl_la_LIBADD) $(LIBS)
vauth/libcurlu_la-vauth.lo: vauth/$(am__dirstamp) \
	vauth/$(DEPDIR)/$(am__dirstamp)
vauth/libcurlu_la-cleartext.lo: vauth/$(am__dirstamp) \
	vauth/$(DEPDIR)/$(am__dirstamp)
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurlu_la-gtls.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurlu_la-vtls.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurlu_la-nss.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurlu_la-polarssl.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurlu_la-polarssl_threadlock.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurlu_la-wolfssl.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurlu_la-schannel.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurlu_la-schannel_verify.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)







<
<
|







1267
1268
1269
1270
1271
1272
1273


1274
1275
1276
1277
1278
1279
1280
1281
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurlu_la-gtls.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurlu_la-vtls.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurlu_la-nss.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)


vtls/libcurlu_la-mbedtls_threadlock.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurlu_la-wolfssl.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurlu_la-schannel.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurlu_la-schannel_verify.lo: vtls/$(am__dirstamp) \
	vtls/$(DEPDIR)/$(am__dirstamp)
1292
1293
1294
1295
1296
1297
1298


1299
1300
1301
1302
1303
1304
1305
vquic/libcurlu_la-ngtcp2.lo: vquic/$(am__dirstamp) \
	vquic/$(DEPDIR)/$(am__dirstamp)
vquic/libcurlu_la-quiche.lo: vquic/$(am__dirstamp) \
	vquic/$(DEPDIR)/$(am__dirstamp)
vssh/libcurlu_la-libssh2.lo: vssh/$(am__dirstamp) \
	vssh/$(DEPDIR)/$(am__dirstamp)
vssh/libcurlu_la-libssh.lo: vssh/$(am__dirstamp) \


	vssh/$(DEPDIR)/$(am__dirstamp)

libcurlu.la: $(libcurlu_la_OBJECTS) $(libcurlu_la_DEPENDENCIES) $(EXTRA_libcurlu_la_DEPENDENCIES) 
	$(AM_V_CCLD)$(libcurlu_la_LINK) $(am_libcurlu_la_rpath) $(libcurlu_la_OBJECTS) $(libcurlu_la_LIBADD) $(LIBS)

mostlyclean-compile:
	-rm -f *.$(OBJEXT)







>
>







1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
vquic/libcurlu_la-ngtcp2.lo: vquic/$(am__dirstamp) \
	vquic/$(DEPDIR)/$(am__dirstamp)
vquic/libcurlu_la-quiche.lo: vquic/$(am__dirstamp) \
	vquic/$(DEPDIR)/$(am__dirstamp)
vssh/libcurlu_la-libssh2.lo: vssh/$(am__dirstamp) \
	vssh/$(DEPDIR)/$(am__dirstamp)
vssh/libcurlu_la-libssh.lo: vssh/$(am__dirstamp) \
	vssh/$(DEPDIR)/$(am__dirstamp)
vssh/libcurlu_la-wolfssh.lo: vssh/$(am__dirstamp) \
	vssh/$(DEPDIR)/$(am__dirstamp)

libcurlu.la: $(libcurlu_la_OBJECTS) $(libcurlu_la_DEPENDENCIES) $(EXTRA_libcurlu_la_DEPENDENCIES) 
	$(AM_V_CCLD)$(libcurlu_la_LINK) $(am_libcurlu_la_rpath) $(libcurlu_la_OBJECTS) $(libcurlu_la_LIBADD) $(LIBS)

mostlyclean-compile:
	-rm -f *.$(OBJEXT)
1390
1391
1392
1393
1394
1395
1396

1397
1398
1399
1400
1401
1402
1403
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-openldap.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-parsedate.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-pingpong.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-pop3.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-progress.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-psl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-rand.Plo@am__quote@ # am--include-marker

@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-rtsp.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-security.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-select.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-sendf.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-setopt.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-sha256.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-share.Plo@am__quote@ # am--include-marker







>







1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-openldap.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-parsedate.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-pingpong.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-pop3.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-progress.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-psl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-rand.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-rename.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-rtsp.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-security.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-select.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-sendf.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-setopt.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-sha256.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-share.Plo@am__quote@ # am--include-marker
1501
1502
1503
1504
1505
1506
1507

1508
1509
1510
1511
1512
1513
1514
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-openldap.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-parsedate.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-pingpong.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-pop3.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-progress.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-psl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-rand.Plo@am__quote@ # am--include-marker

@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-rtsp.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-security.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-select.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-sendf.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-setopt.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-sha256.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-share.Plo@am__quote@ # am--include-marker







>







1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-openldap.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-parsedate.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-pingpong.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-pop3.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-progress.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-psl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-rand.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-rename.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-rtsp.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-security.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-select.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-sendf.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-setopt.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-sha256.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-share.Plo@am__quote@ # am--include-marker
1563
1564
1565
1566
1567
1568
1569

1570
1571

1572
1573
1574
1575

1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589

1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
@AMDEP_TRUE@@am__include@ @am__quote@vauth/$(DEPDIR)/libcurlu_la-vauth.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurl_la-ngtcp2.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurl_la-quiche.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurlu_la-ngtcp2.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurlu_la-quiche.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vssh/$(DEPDIR)/libcurl_la-libssh.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vssh/$(DEPDIR)/libcurl_la-libssh2.Plo@am__quote@ # am--include-marker

@AMDEP_TRUE@@am__include@ @am__quote@vssh/$(DEPDIR)/libcurlu_la-libssh.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vssh/$(DEPDIR)/libcurlu_la-libssh2.Plo@am__quote@ # am--include-marker

@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-bearssl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-gskit.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-gtls.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-mbedtls.Plo@am__quote@ # am--include-marker

@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-mesalink.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-nss.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-openssl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-polarssl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-polarssl_threadlock.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-schannel.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-schannel_verify.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-sectransp.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-vtls.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-wolfssl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-bearssl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-gskit.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-gtls.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-mbedtls.Plo@am__quote@ # am--include-marker

@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-mesalink.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-nss.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-openssl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-polarssl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-polarssl_threadlock.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-schannel.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-schannel_verify.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-sectransp.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-vtls.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-wolfssl.Plo@am__quote@ # am--include-marker

$(am__depfiles_remade):







>


>




>



<
<









>



<
<







1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585


1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598


1599
1600
1601
1602
1603
1604
1605
@AMDEP_TRUE@@am__include@ @am__quote@vauth/$(DEPDIR)/libcurlu_la-vauth.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurl_la-ngtcp2.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurl_la-quiche.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurlu_la-ngtcp2.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurlu_la-quiche.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vssh/$(DEPDIR)/libcurl_la-libssh.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vssh/$(DEPDIR)/libcurl_la-libssh2.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vssh/$(DEPDIR)/libcurl_la-wolfssh.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vssh/$(DEPDIR)/libcurlu_la-libssh.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vssh/$(DEPDIR)/libcurlu_la-libssh2.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vssh/$(DEPDIR)/libcurlu_la-wolfssh.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-bearssl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-gskit.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-gtls.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-mbedtls.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-mbedtls_threadlock.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-mesalink.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-nss.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-openssl.Plo@am__quote@ # am--include-marker


@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-schannel.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-schannel_verify.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-sectransp.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-vtls.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-wolfssl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-bearssl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-gskit.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-gtls.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-mbedtls.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-mbedtls_threadlock.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-mesalink.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-nss.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-openssl.Plo@am__quote@ # am--include-marker


@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-schannel.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-schannel_verify.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-sectransp.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-vtls.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-wolfssl.Plo@am__quote@ # am--include-marker

$(am__depfiles_remade):
2401
2402
2403
2404
2405
2406
2407







2408
2409
2410
2411
2412
2413
2414
libcurl_la-socketpair.lo: socketpair.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-socketpair.lo -MD -MP -MF $(DEPDIR)/libcurl_la-socketpair.Tpo -c -o libcurl_la-socketpair.lo `test -f 'socketpair.c' || echo '$(srcdir)/'`socketpair.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-socketpair.Tpo $(DEPDIR)/libcurl_la-socketpair.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='socketpair.c' object='libcurl_la-socketpair.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-socketpair.lo `test -f 'socketpair.c' || echo '$(srcdir)/'`socketpair.c








vauth/libcurl_la-vauth.lo: vauth/vauth.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vauth/libcurl_la-vauth.lo -MD -MP -MF vauth/$(DEPDIR)/libcurl_la-vauth.Tpo -c -o vauth/libcurl_la-vauth.lo `test -f 'vauth/vauth.c' || echo '$(srcdir)/'`vauth/vauth.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vauth/$(DEPDIR)/libcurl_la-vauth.Tpo vauth/$(DEPDIR)/libcurl_la-vauth.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vauth/vauth.c' object='vauth/libcurl_la-vauth.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vauth/libcurl_la-vauth.lo `test -f 'vauth/vauth.c' || echo '$(srcdir)/'`vauth/vauth.c








>
>
>
>
>
>
>







2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
libcurl_la-socketpair.lo: socketpair.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-socketpair.lo -MD -MP -MF $(DEPDIR)/libcurl_la-socketpair.Tpo -c -o libcurl_la-socketpair.lo `test -f 'socketpair.c' || echo '$(srcdir)/'`socketpair.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-socketpair.Tpo $(DEPDIR)/libcurl_la-socketpair.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='socketpair.c' object='libcurl_la-socketpair.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-socketpair.lo `test -f 'socketpair.c' || echo '$(srcdir)/'`socketpair.c

libcurl_la-rename.lo: rename.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-rename.lo -MD -MP -MF $(DEPDIR)/libcurl_la-rename.Tpo -c -o libcurl_la-rename.lo `test -f 'rename.c' || echo '$(srcdir)/'`rename.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-rename.Tpo $(DEPDIR)/libcurl_la-rename.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rename.c' object='libcurl_la-rename.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-rename.lo `test -f 'rename.c' || echo '$(srcdir)/'`rename.c

vauth/libcurl_la-vauth.lo: vauth/vauth.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vauth/libcurl_la-vauth.lo -MD -MP -MF vauth/$(DEPDIR)/libcurl_la-vauth.Tpo -c -o vauth/libcurl_la-vauth.lo `test -f 'vauth/vauth.c' || echo '$(srcdir)/'`vauth/vauth.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vauth/$(DEPDIR)/libcurl_la-vauth.Tpo vauth/$(DEPDIR)/libcurl_la-vauth.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vauth/vauth.c' object='vauth/libcurl_la-vauth.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vauth/libcurl_la-vauth.lo `test -f 'vauth/vauth.c' || echo '$(srcdir)/'`vauth/vauth.c

2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
vtls/libcurl_la-nss.lo: vtls/nss.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vtls/libcurl_la-nss.lo -MD -MP -MF vtls/$(DEPDIR)/libcurl_la-nss.Tpo -c -o vtls/libcurl_la-nss.lo `test -f 'vtls/nss.c' || echo '$(srcdir)/'`vtls/nss.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurl_la-nss.Tpo vtls/$(DEPDIR)/libcurl_la-nss.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vtls/nss.c' object='vtls/libcurl_la-nss.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurl_la-nss.lo `test -f 'vtls/nss.c' || echo '$(srcdir)/'`vtls/nss.c

vtls/libcurl_la-polarssl.lo: vtls/polarssl.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vtls/libcurl_la-polarssl.lo -MD -MP -MF vtls/$(DEPDIR)/libcurl_la-polarssl.Tpo -c -o vtls/libcurl_la-polarssl.lo `test -f 'vtls/polarssl.c' || echo '$(srcdir)/'`vtls/polarssl.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurl_la-polarssl.Tpo vtls/$(DEPDIR)/libcurl_la-polarssl.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vtls/polarssl.c' object='vtls/libcurl_la-polarssl.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurl_la-polarssl.lo `test -f 'vtls/polarssl.c' || echo '$(srcdir)/'`vtls/polarssl.c

vtls/libcurl_la-polarssl_threadlock.lo: vtls/polarssl_threadlock.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vtls/libcurl_la-polarssl_threadlock.lo -MD -MP -MF vtls/$(DEPDIR)/libcurl_la-polarssl_threadlock.Tpo -c -o vtls/libcurl_la-polarssl_threadlock.lo `test -f 'vtls/polarssl_threadlock.c' || echo '$(srcdir)/'`vtls/polarssl_threadlock.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurl_la-polarssl_threadlock.Tpo vtls/$(DEPDIR)/libcurl_la-polarssl_threadlock.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vtls/polarssl_threadlock.c' object='vtls/libcurl_la-polarssl_threadlock.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurl_la-polarssl_threadlock.lo `test -f 'vtls/polarssl_threadlock.c' || echo '$(srcdir)/'`vtls/polarssl_threadlock.c

vtls/libcurl_la-wolfssl.lo: vtls/wolfssl.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vtls/libcurl_la-wolfssl.lo -MD -MP -MF vtls/$(DEPDIR)/libcurl_la-wolfssl.Tpo -c -o vtls/libcurl_la-wolfssl.lo `test -f 'vtls/wolfssl.c' || echo '$(srcdir)/'`vtls/wolfssl.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurl_la-wolfssl.Tpo vtls/$(DEPDIR)/libcurl_la-wolfssl.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vtls/wolfssl.c' object='vtls/libcurl_la-wolfssl.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurl_la-wolfssl.lo `test -f 'vtls/wolfssl.c' || echo '$(srcdir)/'`vtls/wolfssl.c







|
|
|
|

|
<
<
<
<
<
<
<







2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536







2537
2538
2539
2540
2541
2542
2543
vtls/libcurl_la-nss.lo: vtls/nss.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vtls/libcurl_la-nss.lo -MD -MP -MF vtls/$(DEPDIR)/libcurl_la-nss.Tpo -c -o vtls/libcurl_la-nss.lo `test -f 'vtls/nss.c' || echo '$(srcdir)/'`vtls/nss.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurl_la-nss.Tpo vtls/$(DEPDIR)/libcurl_la-nss.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vtls/nss.c' object='vtls/libcurl_la-nss.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurl_la-nss.lo `test -f 'vtls/nss.c' || echo '$(srcdir)/'`vtls/nss.c

vtls/libcurl_la-mbedtls_threadlock.lo: vtls/mbedtls_threadlock.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vtls/libcurl_la-mbedtls_threadlock.lo -MD -MP -MF vtls/$(DEPDIR)/libcurl_la-mbedtls_threadlock.Tpo -c -o vtls/libcurl_la-mbedtls_threadlock.lo `test -f 'vtls/mbedtls_threadlock.c' || echo '$(srcdir)/'`vtls/mbedtls_threadlock.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurl_la-mbedtls_threadlock.Tpo vtls/$(DEPDIR)/libcurl_la-mbedtls_threadlock.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vtls/mbedtls_threadlock.c' object='vtls/libcurl_la-mbedtls_threadlock.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurl_la-mbedtls_threadlock.lo `test -f 'vtls/mbedtls_threadlock.c' || echo '$(srcdir)/'`vtls/mbedtls_threadlock.c








vtls/libcurl_la-wolfssl.lo: vtls/wolfssl.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vtls/libcurl_la-wolfssl.lo -MD -MP -MF vtls/$(DEPDIR)/libcurl_la-wolfssl.Tpo -c -o vtls/libcurl_la-wolfssl.lo `test -f 'vtls/wolfssl.c' || echo '$(srcdir)/'`vtls/wolfssl.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurl_la-wolfssl.Tpo vtls/$(DEPDIR)/libcurl_la-wolfssl.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vtls/wolfssl.c' object='vtls/libcurl_la-wolfssl.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurl_la-wolfssl.lo `test -f 'vtls/wolfssl.c' || echo '$(srcdir)/'`vtls/wolfssl.c
2611
2612
2613
2614
2615
2616
2617







2618
2619
2620
2621
2622
2623
2624
vssh/libcurl_la-libssh.lo: vssh/libssh.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vssh/libcurl_la-libssh.lo -MD -MP -MF vssh/$(DEPDIR)/libcurl_la-libssh.Tpo -c -o vssh/libcurl_la-libssh.lo `test -f 'vssh/libssh.c' || echo '$(srcdir)/'`vssh/libssh.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vssh/$(DEPDIR)/libcurl_la-libssh.Tpo vssh/$(DEPDIR)/libcurl_la-libssh.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vssh/libssh.c' object='vssh/libcurl_la-libssh.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vssh/libcurl_la-libssh.lo `test -f 'vssh/libssh.c' || echo '$(srcdir)/'`vssh/libssh.c








libcurlu_la-file.lo: file.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-file.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-file.Tpo -c -o libcurlu_la-file.lo `test -f 'file.c' || echo '$(srcdir)/'`file.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-file.Tpo $(DEPDIR)/libcurlu_la-file.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='file.c' object='libcurlu_la-file.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-file.lo `test -f 'file.c' || echo '$(srcdir)/'`file.c








>
>
>
>
>
>
>







2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
vssh/libcurl_la-libssh.lo: vssh/libssh.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vssh/libcurl_la-libssh.lo -MD -MP -MF vssh/$(DEPDIR)/libcurl_la-libssh.Tpo -c -o vssh/libcurl_la-libssh.lo `test -f 'vssh/libssh.c' || echo '$(srcdir)/'`vssh/libssh.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vssh/$(DEPDIR)/libcurl_la-libssh.Tpo vssh/$(DEPDIR)/libcurl_la-libssh.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vssh/libssh.c' object='vssh/libcurl_la-libssh.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vssh/libcurl_la-libssh.lo `test -f 'vssh/libssh.c' || echo '$(srcdir)/'`vssh/libssh.c

vssh/libcurl_la-wolfssh.lo: vssh/wolfssh.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vssh/libcurl_la-wolfssh.lo -MD -MP -MF vssh/$(DEPDIR)/libcurl_la-wolfssh.Tpo -c -o vssh/libcurl_la-wolfssh.lo `test -f 'vssh/wolfssh.c' || echo '$(srcdir)/'`vssh/wolfssh.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vssh/$(DEPDIR)/libcurl_la-wolfssh.Tpo vssh/$(DEPDIR)/libcurl_la-wolfssh.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vssh/wolfssh.c' object='vssh/libcurl_la-wolfssh.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vssh/libcurl_la-wolfssh.lo `test -f 'vssh/wolfssh.c' || echo '$(srcdir)/'`vssh/wolfssh.c

libcurlu_la-file.lo: file.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-file.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-file.Tpo -c -o libcurlu_la-file.lo `test -f 'file.c' || echo '$(srcdir)/'`file.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-file.Tpo $(DEPDIR)/libcurlu_la-file.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='file.c' object='libcurlu_la-file.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-file.lo `test -f 'file.c' || echo '$(srcdir)/'`file.c

3388
3389
3390
3391
3392
3393
3394







3395
3396
3397
3398
3399
3400
3401
libcurlu_la-socketpair.lo: socketpair.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-socketpair.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-socketpair.Tpo -c -o libcurlu_la-socketpair.lo `test -f 'socketpair.c' || echo '$(srcdir)/'`socketpair.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-socketpair.Tpo $(DEPDIR)/libcurlu_la-socketpair.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='socketpair.c' object='libcurlu_la-socketpair.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-socketpair.lo `test -f 'socketpair.c' || echo '$(srcdir)/'`socketpair.c








vauth/libcurlu_la-vauth.lo: vauth/vauth.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vauth/libcurlu_la-vauth.lo -MD -MP -MF vauth/$(DEPDIR)/libcurlu_la-vauth.Tpo -c -o vauth/libcurlu_la-vauth.lo `test -f 'vauth/vauth.c' || echo '$(srcdir)/'`vauth/vauth.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vauth/$(DEPDIR)/libcurlu_la-vauth.Tpo vauth/$(DEPDIR)/libcurlu_la-vauth.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vauth/vauth.c' object='vauth/libcurlu_la-vauth.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vauth/libcurlu_la-vauth.lo `test -f 'vauth/vauth.c' || echo '$(srcdir)/'`vauth/vauth.c








>
>
>
>
>
>
>







3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
libcurlu_la-socketpair.lo: socketpair.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-socketpair.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-socketpair.Tpo -c -o libcurlu_la-socketpair.lo `test -f 'socketpair.c' || echo '$(srcdir)/'`socketpair.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-socketpair.Tpo $(DEPDIR)/libcurlu_la-socketpair.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='socketpair.c' object='libcurlu_la-socketpair.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-socketpair.lo `test -f 'socketpair.c' || echo '$(srcdir)/'`socketpair.c

libcurlu_la-rename.lo: rename.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-rename.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-rename.Tpo -c -o libcurlu_la-rename.lo `test -f 'rename.c' || echo '$(srcdir)/'`rename.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-rename.Tpo $(DEPDIR)/libcurlu_la-rename.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='rename.c' object='libcurlu_la-rename.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-rename.lo `test -f 'rename.c' || echo '$(srcdir)/'`rename.c

vauth/libcurlu_la-vauth.lo: vauth/vauth.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vauth/libcurlu_la-vauth.lo -MD -MP -MF vauth/$(DEPDIR)/libcurlu_la-vauth.Tpo -c -o vauth/libcurlu_la-vauth.lo `test -f 'vauth/vauth.c' || echo '$(srcdir)/'`vauth/vauth.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vauth/$(DEPDIR)/libcurlu_la-vauth.Tpo vauth/$(DEPDIR)/libcurlu_la-vauth.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vauth/vauth.c' object='vauth/libcurlu_la-vauth.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vauth/libcurlu_la-vauth.lo `test -f 'vauth/vauth.c' || echo '$(srcdir)/'`vauth/vauth.c

3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
vtls/libcurlu_la-nss.lo: vtls/nss.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vtls/libcurlu_la-nss.lo -MD -MP -MF vtls/$(DEPDIR)/libcurlu_la-nss.Tpo -c -o vtls/libcurlu_la-nss.lo `test -f 'vtls/nss.c' || echo '$(srcdir)/'`vtls/nss.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurlu_la-nss.Tpo vtls/$(DEPDIR)/libcurlu_la-nss.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vtls/nss.c' object='vtls/libcurlu_la-nss.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurlu_la-nss.lo `test -f 'vtls/nss.c' || echo '$(srcdir)/'`vtls/nss.c

vtls/libcurlu_la-polarssl.lo: vtls/polarssl.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vtls/libcurlu_la-polarssl.lo -MD -MP -MF vtls/$(DEPDIR)/libcurlu_la-polarssl.Tpo -c -o vtls/libcurlu_la-polarssl.lo `test -f 'vtls/polarssl.c' || echo '$(srcdir)/'`vtls/polarssl.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurlu_la-polarssl.Tpo vtls/$(DEPDIR)/libcurlu_la-polarssl.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vtls/polarssl.c' object='vtls/libcurlu_la-polarssl.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurlu_la-polarssl.lo `test -f 'vtls/polarssl.c' || echo '$(srcdir)/'`vtls/polarssl.c

vtls/libcurlu_la-polarssl_threadlock.lo: vtls/polarssl_threadlock.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vtls/libcurlu_la-polarssl_threadlock.lo -MD -MP -MF vtls/$(DEPDIR)/libcurlu_la-polarssl_threadlock.Tpo -c -o vtls/libcurlu_la-polarssl_threadlock.lo `test -f 'vtls/polarssl_threadlock.c' || echo '$(srcdir)/'`vtls/polarssl_threadlock.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurlu_la-polarssl_threadlock.Tpo vtls/$(DEPDIR)/libcurlu_la-polarssl_threadlock.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vtls/polarssl_threadlock.c' object='vtls/libcurlu_la-polarssl_threadlock.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurlu_la-polarssl_threadlock.lo `test -f 'vtls/polarssl_threadlock.c' || echo '$(srcdir)/'`vtls/polarssl_threadlock.c

vtls/libcurlu_la-wolfssl.lo: vtls/wolfssl.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vtls/libcurlu_la-wolfssl.lo -MD -MP -MF vtls/$(DEPDIR)/libcurlu_la-wolfssl.Tpo -c -o vtls/libcurlu_la-wolfssl.lo `test -f 'vtls/wolfssl.c' || echo '$(srcdir)/'`vtls/wolfssl.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurlu_la-wolfssl.Tpo vtls/$(DEPDIR)/libcurlu_la-wolfssl.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vtls/wolfssl.c' object='vtls/libcurlu_la-wolfssl.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurlu_la-wolfssl.lo `test -f 'vtls/wolfssl.c' || echo '$(srcdir)/'`vtls/wolfssl.c







|
|
|
|

|
<
<
<
<
<
<
<







3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530







3531
3532
3533
3534
3535
3536
3537
vtls/libcurlu_la-nss.lo: vtls/nss.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vtls/libcurlu_la-nss.lo -MD -MP -MF vtls/$(DEPDIR)/libcurlu_la-nss.Tpo -c -o vtls/libcurlu_la-nss.lo `test -f 'vtls/nss.c' || echo '$(srcdir)/'`vtls/nss.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurlu_la-nss.Tpo vtls/$(DEPDIR)/libcurlu_la-nss.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vtls/nss.c' object='vtls/libcurlu_la-nss.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurlu_la-nss.lo `test -f 'vtls/nss.c' || echo '$(srcdir)/'`vtls/nss.c

vtls/libcurlu_la-mbedtls_threadlock.lo: vtls/mbedtls_threadlock.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vtls/libcurlu_la-mbedtls_threadlock.lo -MD -MP -MF vtls/$(DEPDIR)/libcurlu_la-mbedtls_threadlock.Tpo -c -o vtls/libcurlu_la-mbedtls_threadlock.lo `test -f 'vtls/mbedtls_threadlock.c' || echo '$(srcdir)/'`vtls/mbedtls_threadlock.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurlu_la-mbedtls_threadlock.Tpo vtls/$(DEPDIR)/libcurlu_la-mbedtls_threadlock.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vtls/mbedtls_threadlock.c' object='vtls/libcurlu_la-mbedtls_threadlock.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurlu_la-mbedtls_threadlock.lo `test -f 'vtls/mbedtls_threadlock.c' || echo '$(srcdir)/'`vtls/mbedtls_threadlock.c








vtls/libcurlu_la-wolfssl.lo: vtls/wolfssl.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vtls/libcurlu_la-wolfssl.lo -MD -MP -MF vtls/$(DEPDIR)/libcurlu_la-wolfssl.Tpo -c -o vtls/libcurlu_la-wolfssl.lo `test -f 'vtls/wolfssl.c' || echo '$(srcdir)/'`vtls/wolfssl.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurlu_la-wolfssl.Tpo vtls/$(DEPDIR)/libcurlu_la-wolfssl.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vtls/wolfssl.c' object='vtls/libcurlu_la-wolfssl.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurlu_la-wolfssl.lo `test -f 'vtls/wolfssl.c' || echo '$(srcdir)/'`vtls/wolfssl.c
3598
3599
3600
3601
3602
3603
3604







3605
3606
3607
3608
3609
3610
3611
vssh/libcurlu_la-libssh.lo: vssh/libssh.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vssh/libcurlu_la-libssh.lo -MD -MP -MF vssh/$(DEPDIR)/libcurlu_la-libssh.Tpo -c -o vssh/libcurlu_la-libssh.lo `test -f 'vssh/libssh.c' || echo '$(srcdir)/'`vssh/libssh.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vssh/$(DEPDIR)/libcurlu_la-libssh.Tpo vssh/$(DEPDIR)/libcurlu_la-libssh.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vssh/libssh.c' object='vssh/libcurlu_la-libssh.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vssh/libcurlu_la-libssh.lo `test -f 'vssh/libssh.c' || echo '$(srcdir)/'`vssh/libssh.c








mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs
	-rm -rf vauth/.libs vauth/_libs
	-rm -rf vquic/.libs vquic/_libs







>
>
>
>
>
>
>







3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
vssh/libcurlu_la-libssh.lo: vssh/libssh.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vssh/libcurlu_la-libssh.lo -MD -MP -MF vssh/$(DEPDIR)/libcurlu_la-libssh.Tpo -c -o vssh/libcurlu_la-libssh.lo `test -f 'vssh/libssh.c' || echo '$(srcdir)/'`vssh/libssh.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vssh/$(DEPDIR)/libcurlu_la-libssh.Tpo vssh/$(DEPDIR)/libcurlu_la-libssh.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vssh/libssh.c' object='vssh/libcurlu_la-libssh.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vssh/libcurlu_la-libssh.lo `test -f 'vssh/libssh.c' || echo '$(srcdir)/'`vssh/libssh.c

vssh/libcurlu_la-wolfssh.lo: vssh/wolfssh.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vssh/libcurlu_la-wolfssh.lo -MD -MP -MF vssh/$(DEPDIR)/libcurlu_la-wolfssh.Tpo -c -o vssh/libcurlu_la-wolfssh.lo `test -f 'vssh/wolfssh.c' || echo '$(srcdir)/'`vssh/wolfssh.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) vssh/$(DEPDIR)/libcurlu_la-wolfssh.Tpo vssh/$(DEPDIR)/libcurlu_la-wolfssh.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vssh/wolfssh.c' object='vssh/libcurlu_la-wolfssh.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vssh/libcurlu_la-wolfssh.lo `test -f 'vssh/wolfssh.c' || echo '$(srcdir)/'`vssh/wolfssh.c

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs
	-rm -rf vauth/.libs vauth/_libs
	-rm -rf vquic/.libs vquic/_libs
3824
3825
3826
3827
3828
3829
3830

3831
3832
3833
3834
3835
3836
3837
	-rm -f ./$(DEPDIR)/libcurl_la-openldap.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-parsedate.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-pingpong.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-pop3.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-progress.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-psl.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-rand.Plo

	-rm -f ./$(DEPDIR)/libcurl_la-rtsp.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-security.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-select.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-sendf.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-setopt.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-sha256.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-share.Plo







>







3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
	-rm -f ./$(DEPDIR)/libcurl_la-openldap.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-parsedate.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-pingpong.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-pop3.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-progress.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-psl.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-rand.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-rename.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-rtsp.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-security.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-select.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-sendf.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-setopt.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-sha256.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-share.Plo
3935
3936
3937
3938
3939
3940
3941

3942
3943
3944
3945
3946
3947
3948
	-rm -f ./$(DEPDIR)/libcurlu_la-openldap.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-parsedate.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-pingpong.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-pop3.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-progress.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-psl.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-rand.Plo

	-rm -f ./$(DEPDIR)/libcurlu_la-rtsp.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-security.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-select.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-sendf.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-setopt.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-sha256.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-share.Plo







>







3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
	-rm -f ./$(DEPDIR)/libcurlu_la-openldap.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-parsedate.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-pingpong.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-pop3.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-progress.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-psl.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-rand.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-rename.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-rtsp.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-security.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-select.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-sendf.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-setopt.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-sha256.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-share.Plo
3997
3998
3999
4000
4001
4002
4003

4004
4005

4006
4007
4008
4009

4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023

4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
	-rm -f vauth/$(DEPDIR)/libcurlu_la-vauth.Plo
	-rm -f vquic/$(DEPDIR)/libcurl_la-ngtcp2.Plo
	-rm -f vquic/$(DEPDIR)/libcurl_la-quiche.Plo
	-rm -f vquic/$(DEPDIR)/libcurlu_la-ngtcp2.Plo
	-rm -f vquic/$(DEPDIR)/libcurlu_la-quiche.Plo
	-rm -f vssh/$(DEPDIR)/libcurl_la-libssh.Plo
	-rm -f vssh/$(DEPDIR)/libcurl_la-libssh2.Plo

	-rm -f vssh/$(DEPDIR)/libcurlu_la-libssh.Plo
	-rm -f vssh/$(DEPDIR)/libcurlu_la-libssh2.Plo

	-rm -f vtls/$(DEPDIR)/libcurl_la-bearssl.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-gskit.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-gtls.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-mbedtls.Plo

	-rm -f vtls/$(DEPDIR)/libcurl_la-mesalink.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-nss.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-openssl.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-polarssl.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-polarssl_threadlock.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-schannel.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-schannel_verify.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-sectransp.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-vtls.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-wolfssl.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-bearssl.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-gskit.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-gtls.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-mbedtls.Plo

	-rm -f vtls/$(DEPDIR)/libcurlu_la-mesalink.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-nss.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-openssl.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-polarssl.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-polarssl_threadlock.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-schannel.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-schannel_verify.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-sectransp.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-vtls.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-wolfssl.Plo
	-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \







>


>




>



<
<









>



<
<







4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035


4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048


4049
4050
4051
4052
4053
4054
4055
	-rm -f vauth/$(DEPDIR)/libcurlu_la-vauth.Plo
	-rm -f vquic/$(DEPDIR)/libcurl_la-ngtcp2.Plo
	-rm -f vquic/$(DEPDIR)/libcurl_la-quiche.Plo
	-rm -f vquic/$(DEPDIR)/libcurlu_la-ngtcp2.Plo
	-rm -f vquic/$(DEPDIR)/libcurlu_la-quiche.Plo
	-rm -f vssh/$(DEPDIR)/libcurl_la-libssh.Plo
	-rm -f vssh/$(DEPDIR)/libcurl_la-libssh2.Plo
	-rm -f vssh/$(DEPDIR)/libcurl_la-wolfssh.Plo
	-rm -f vssh/$(DEPDIR)/libcurlu_la-libssh.Plo
	-rm -f vssh/$(DEPDIR)/libcurlu_la-libssh2.Plo
	-rm -f vssh/$(DEPDIR)/libcurlu_la-wolfssh.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-bearssl.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-gskit.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-gtls.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-mbedtls.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-mbedtls_threadlock.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-mesalink.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-nss.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-openssl.Plo


	-rm -f vtls/$(DEPDIR)/libcurl_la-schannel.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-schannel_verify.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-sectransp.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-vtls.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-wolfssl.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-bearssl.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-gskit.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-gtls.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-mbedtls.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-mbedtls_threadlock.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-mesalink.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-nss.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-openssl.Plo


	-rm -f vtls/$(DEPDIR)/libcurlu_la-schannel.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-schannel_verify.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-sectransp.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-vtls.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-wolfssl.Plo
	-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
4151
4152
4153
4154
4155
4156
4157

4158
4159
4160
4161
4162
4163
4164
	-rm -f ./$(DEPDIR)/libcurl_la-openldap.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-parsedate.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-pingpong.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-pop3.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-progress.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-psl.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-rand.Plo

	-rm -f ./$(DEPDIR)/libcurl_la-rtsp.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-security.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-select.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-sendf.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-setopt.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-sha256.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-share.Plo







>







4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
	-rm -f ./$(DEPDIR)/libcurl_la-openldap.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-parsedate.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-pingpong.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-pop3.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-progress.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-psl.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-rand.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-rename.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-rtsp.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-security.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-select.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-sendf.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-setopt.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-sha256.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-share.Plo
4262
4263
4264
4265
4266
4267
4268

4269
4270
4271
4272
4273
4274
4275
	-rm -f ./$(DEPDIR)/libcurlu_la-openldap.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-parsedate.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-pingpong.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-pop3.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-progress.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-psl.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-rand.Plo

	-rm -f ./$(DEPDIR)/libcurlu_la-rtsp.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-security.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-select.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-sendf.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-setopt.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-sha256.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-share.Plo







>







4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
	-rm -f ./$(DEPDIR)/libcurlu_la-openldap.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-parsedate.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-pingpong.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-pop3.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-progress.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-psl.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-rand.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-rename.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-rtsp.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-security.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-select.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-sendf.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-setopt.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-sha256.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-share.Plo
4324
4325
4326
4327
4328
4329
4330

4331
4332

4333
4334
4335
4336

4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350

4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
	-rm -f vauth/$(DEPDIR)/libcurlu_la-vauth.Plo
	-rm -f vquic/$(DEPDIR)/libcurl_la-ngtcp2.Plo
	-rm -f vquic/$(DEPDIR)/libcurl_la-quiche.Plo
	-rm -f vquic/$(DEPDIR)/libcurlu_la-ngtcp2.Plo
	-rm -f vquic/$(DEPDIR)/libcurlu_la-quiche.Plo
	-rm -f vssh/$(DEPDIR)/libcurl_la-libssh.Plo
	-rm -f vssh/$(DEPDIR)/libcurl_la-libssh2.Plo

	-rm -f vssh/$(DEPDIR)/libcurlu_la-libssh.Plo
	-rm -f vssh/$(DEPDIR)/libcurlu_la-libssh2.Plo

	-rm -f vtls/$(DEPDIR)/libcurl_la-bearssl.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-gskit.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-gtls.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-mbedtls.Plo

	-rm -f vtls/$(DEPDIR)/libcurl_la-mesalink.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-nss.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-openssl.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-polarssl.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-polarssl_threadlock.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-schannel.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-schannel_verify.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-sectransp.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-vtls.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-wolfssl.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-bearssl.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-gskit.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-gtls.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-mbedtls.Plo

	-rm -f vtls/$(DEPDIR)/libcurlu_la-mesalink.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-nss.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-openssl.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-polarssl.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-polarssl_threadlock.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-schannel.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-schannel_verify.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-sectransp.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-vtls.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-wolfssl.Plo
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic







>


>




>



<
<









>



<
<







4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364


4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377


4378
4379
4380
4381
4382
4383
4384
	-rm -f vauth/$(DEPDIR)/libcurlu_la-vauth.Plo
	-rm -f vquic/$(DEPDIR)/libcurl_la-ngtcp2.Plo
	-rm -f vquic/$(DEPDIR)/libcurl_la-quiche.Plo
	-rm -f vquic/$(DEPDIR)/libcurlu_la-ngtcp2.Plo
	-rm -f vquic/$(DEPDIR)/libcurlu_la-quiche.Plo
	-rm -f vssh/$(DEPDIR)/libcurl_la-libssh.Plo
	-rm -f vssh/$(DEPDIR)/libcurl_la-libssh2.Plo
	-rm -f vssh/$(DEPDIR)/libcurl_la-wolfssh.Plo
	-rm -f vssh/$(DEPDIR)/libcurlu_la-libssh.Plo
	-rm -f vssh/$(DEPDIR)/libcurlu_la-libssh2.Plo
	-rm -f vssh/$(DEPDIR)/libcurlu_la-wolfssh.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-bearssl.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-gskit.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-gtls.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-mbedtls.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-mbedtls_threadlock.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-mesalink.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-nss.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-openssl.Plo


	-rm -f vtls/$(DEPDIR)/libcurl_la-schannel.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-schannel_verify.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-sectransp.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-vtls.Plo
	-rm -f vtls/$(DEPDIR)/libcurl_la-wolfssl.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-bearssl.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-gskit.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-gtls.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-mbedtls.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-mbedtls_threadlock.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-mesalink.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-nss.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-openssl.Plo


	-rm -f vtls/$(DEPDIR)/libcurlu_la-schannel.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-schannel_verify.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-sectransp.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-vtls.Plo
	-rm -f vtls/$(DEPDIR)/libcurlu_la-wolfssl.Plo
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
Changes to jni/curl/lib/Makefile.inc.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
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
  vauth/digest.c vauth/digest_sspi.c vauth/krb5_gssapi.c                \
  vauth/krb5_sspi.c vauth/ntlm.c vauth/ntlm_sspi.c vauth/oauth2.c       \
  vauth/spnego_gssapi.c vauth/spnego_sspi.c

LIB_VAUTH_HFILES = vauth/vauth.h vauth/digest.h vauth/ntlm.h

LIB_VTLS_CFILES = vtls/openssl.c vtls/gtls.c vtls/vtls.c vtls/nss.c     \
  vtls/polarssl.c vtls/polarssl_threadlock.c                            \
  vtls/wolfssl.c vtls/schannel.c vtls/schannel_verify.c                 \
  vtls/sectransp.c vtls/gskit.c vtls/mbedtls.c vtls/mesalink.c          \
  vtls/bearssl.c

LIB_VTLS_HFILES = vtls/openssl.h vtls/vtls.h vtls/gtls.h                \
  vtls/nssg.h vtls/polarssl.h vtls/polarssl_threadlock.h                \
  vtls/wolfssl.h vtls/schannel.h vtls/sectransp.h vtls/gskit.h          \
  vtls/mbedtls.h vtls/mesalink.h vtls/bearssl.h

LIB_VQUIC_CFILES = vquic/ngtcp2.c vquic/quiche.c

LIB_VQUIC_HFILES = vquic/ngtcp2.h vquic/quiche.h

LIB_VSSH_CFILES = vssh/libssh2.c vssh/libssh.c

LIB_VSSH_HFILES = vssh/ssh.h

LIB_CFILES = file.c timeval.c base64.c hostip.c progress.c formdata.c   \
  cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c       \
  ldap.c version.c getenv.c escape.c mprintf.c telnet.c netrc.c         \
  getinfo.c transfer.c strcase.c easy.c security.c curl_fnmatch.c       \







<
|
|
|

|
|
|
|





|







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
  vauth/digest.c vauth/digest_sspi.c vauth/krb5_gssapi.c                \
  vauth/krb5_sspi.c vauth/ntlm.c vauth/ntlm_sspi.c vauth/oauth2.c       \
  vauth/spnego_gssapi.c vauth/spnego_sspi.c

LIB_VAUTH_HFILES = vauth/vauth.h vauth/digest.h vauth/ntlm.h

LIB_VTLS_CFILES = vtls/openssl.c vtls/gtls.c vtls/vtls.c vtls/nss.c     \

  vtls/mbedtls_threadlock.c vtls/wolfssl.c vtls/schannel.c              \
  vtls/schannel_verify.c vtls/sectransp.c vtls/gskit.c vtls/mbedtls.c   \
  vtls/mesalink.c vtls/bearssl.c

LIB_VTLS_HFILES = vtls/openssl.h vtls/vtls.h vtls/gtls.h vtls/nssg.h    \
  vtls/mbedtls_threadlock.h vtls/wolfssl.h vtls/schannel.h              \
  vtls/sectransp.h vtls/gskit.h vtls/mbedtls.h vtls/mesalink.h          \
  vtls/bearssl.h

LIB_VQUIC_CFILES = vquic/ngtcp2.c vquic/quiche.c

LIB_VQUIC_HFILES = vquic/ngtcp2.h vquic/quiche.h

LIB_VSSH_CFILES = vssh/libssh2.c vssh/libssh.c vssh/wolfssh.c

LIB_VSSH_HFILES = vssh/ssh.h

LIB_CFILES = file.c timeval.c base64.c hostip.c progress.c formdata.c   \
  cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c       \
  ldap.c version.c getenv.c escape.c mprintf.c telnet.c netrc.c         \
  getinfo.c transfer.c strcase.c easy.c security.c curl_fnmatch.c       \
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
  pingpong.c rtsp.c curl_threads.c warnless.c hmac.c curl_rtmp.c        \
  openldap.c curl_gethostname.c gopher.c idn_win32.c                    \
  http_proxy.c non-ascii.c asyn-ares.c asyn-thread.c curl_gssapi.c      \
  http_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_sasl.c rand.c        \
  curl_multibyte.c hostcheck.c conncache.c dotdot.c                     \
  x509asn1.c http2.c smb.c curl_endian.c curl_des.c system_win32.c      \
  mime.c sha256.c setopt.c curl_path.c curl_ctype.c curl_range.c psl.c  \
  doh.c urlapi.c curl_get_line.c altsvc.c socketpair.c

LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \
  formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h if2ip.h         \
  speedcheck.h urldata.h curl_ldap.h escape.h telnet.h getinfo.h        \
  strcase.h curl_sec.h memdebug.h http_chunks.h curl_fnmatch.h          \
  wildcard.h fileinfo.h ftplistparser.h strtok.h connect.h llist.h      \
  hash.h content_encoding.h share.h curl_md4.h curl_md5.h http_digest.h \
  http_negotiate.h inet_pton.h amigaos.h strtoofft.h strerror.h         \
  inet_ntop.h curlx.h curl_memory.h curl_setup.h transfer.h select.h    \
  easyif.h multiif.h parsedate.h tftp.h sockaddr.h splay.h strdup.h     \
  socks.h curl_base64.h curl_addrinfo.h curl_sspi.h                     \
  slist.h nonblock.h curl_memrchr.h imap.h pop3.h smtp.h pingpong.h     \
  rtsp.h curl_threads.h warnless.h curl_hmac.h curl_rtmp.h              \
  curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h           \
  http_ntlm.h curl_gssapi.h curl_ntlm_wb.h curl_ntlm_core.h             \
  curl_sasl.h curl_multibyte.h hostcheck.h conncache.h                  \
  curl_setup_once.h multihandle.h setup-vms.h dotdot.h                  \
  x509asn1.h http2.h sigpipe.h smb.h curl_endian.h curl_des.h           \
  curl_printf.h system_win32.h rand.h mime.h curl_sha256.h setopt.h     \
  curl_path.h curl_ctype.h curl_range.h psl.h doh.h urlapi-int.h        \
  curl_get_line.h altsvc.h quic.h socketpair.h

LIB_RCFILES = libcurl.rc

CSOURCES = $(LIB_CFILES) $(LIB_VAUTH_CFILES) $(LIB_VTLS_CFILES) \
  $(LIB_VQUIC_CFILES) $(LIB_VSSH_CFILES)
HHEADERS = $(LIB_HFILES) $(LIB_VAUTH_HFILES) $(LIB_VTLS_HFILES) \
  $(LIB_VQUIC_HFILES) $(LIB_VSSH_HFILES)







|




















|







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
  pingpong.c rtsp.c curl_threads.c warnless.c hmac.c curl_rtmp.c        \
  openldap.c curl_gethostname.c gopher.c idn_win32.c                    \
  http_proxy.c non-ascii.c asyn-ares.c asyn-thread.c curl_gssapi.c      \
  http_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_sasl.c rand.c        \
  curl_multibyte.c hostcheck.c conncache.c dotdot.c                     \
  x509asn1.c http2.c smb.c curl_endian.c curl_des.c system_win32.c      \
  mime.c sha256.c setopt.c curl_path.c curl_ctype.c curl_range.c psl.c  \
  doh.c urlapi.c curl_get_line.c altsvc.c socketpair.c rename.c

LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \
  formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h if2ip.h         \
  speedcheck.h urldata.h curl_ldap.h escape.h telnet.h getinfo.h        \
  strcase.h curl_sec.h memdebug.h http_chunks.h curl_fnmatch.h          \
  wildcard.h fileinfo.h ftplistparser.h strtok.h connect.h llist.h      \
  hash.h content_encoding.h share.h curl_md4.h curl_md5.h http_digest.h \
  http_negotiate.h inet_pton.h amigaos.h strtoofft.h strerror.h         \
  inet_ntop.h curlx.h curl_memory.h curl_setup.h transfer.h select.h    \
  easyif.h multiif.h parsedate.h tftp.h sockaddr.h splay.h strdup.h     \
  socks.h curl_base64.h curl_addrinfo.h curl_sspi.h                     \
  slist.h nonblock.h curl_memrchr.h imap.h pop3.h smtp.h pingpong.h     \
  rtsp.h curl_threads.h warnless.h curl_hmac.h curl_rtmp.h              \
  curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h           \
  http_ntlm.h curl_gssapi.h curl_ntlm_wb.h curl_ntlm_core.h             \
  curl_sasl.h curl_multibyte.h hostcheck.h conncache.h                  \
  curl_setup_once.h multihandle.h setup-vms.h dotdot.h                  \
  x509asn1.h http2.h sigpipe.h smb.h curl_endian.h curl_des.h           \
  curl_printf.h system_win32.h rand.h mime.h curl_sha256.h setopt.h     \
  curl_path.h curl_ctype.h curl_range.h psl.h doh.h urlapi-int.h        \
  curl_get_line.h altsvc.h quic.h socketpair.h rename.h

LIB_RCFILES = libcurl.rc

CSOURCES = $(LIB_CFILES) $(LIB_VAUTH_CFILES) $(LIB_VTLS_CFILES) \
  $(LIB_VQUIC_CFILES) $(LIB_VSSH_CFILES)
HHEADERS = $(LIB_HFILES) $(LIB_VAUTH_HFILES) $(LIB_VTLS_HFILES) \
  $(LIB_VQUIC_HFILES) $(LIB_VSSH_HFILES)
Changes to jni/curl/lib/Makefile.m32.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1999 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1999 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
      OPENSSL_LIBS = -lcrypto -lssl
    endif
  endif
  ifndef DYN
    OPENSSL_LIBS += -lgdi32 -lcrypt32
  endif
  INCLUDES += -I"$(OPENSSL_INCLUDE)"
  CFLAGS += -DUSE_OPENSSL -DHAVE_OPENSSL_ENGINE_H -DHAVE_OPENSSL_PKCS12_H \
            -DOPENSSL_NO_KRB5
  DLL_LIBS += -L"$(OPENSSL_LIBPATH)" $(OPENSSL_LIBS)
  ifdef SRP
    ifeq "$(wildcard $(OPENSSL_INCLUDE)/openssl/srp.h)" "$(OPENSSL_INCLUDE)/openssl/srp.h"
      CFLAGS += -DHAVE_OPENSSL_SRP -DUSE_TLS_SRP
    endif
  endif







|







266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
      OPENSSL_LIBS = -lcrypto -lssl
    endif
  endif
  ifndef DYN
    OPENSSL_LIBS += -lgdi32 -lcrypt32
  endif
  INCLUDES += -I"$(OPENSSL_INCLUDE)"
  CFLAGS += -DUSE_OPENSSL -DHAVE_OPENSSL_PKCS12_H \
            -DOPENSSL_NO_KRB5
  DLL_LIBS += -L"$(OPENSSL_LIBPATH)" $(OPENSSL_LIBS)
  ifdef SRP
    ifeq "$(wildcard $(OPENSSL_INCLUDE)/openssl/srp.h)" "$(OPENSSL_INCLUDE)/openssl/srp.h"
      CFLAGS += -DHAVE_OPENSSL_SRP -DUSE_TLS_SRP
    endif
  endif
Changes to jni/curl/lib/Makefile.netware.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 2004 - 2015, Guenter Knauf
# Copyright (C) 2001 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is








|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 2004 - 2015, Guenter Knauf
# Copyright (C) 2001 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
	@echo $(DL)#define USE_OPENSSL 1$(DL) >> $@
	@echo $(DL)#define HAVE_OPENSSL_X509_H 1$(DL) >> $@
	@echo $(DL)#define HAVE_OPENSSL_SSL_H 1$(DL) >> $@
	@echo $(DL)#define HAVE_OPENSSL_RSA_H 1$(DL) >> $@
	@echo $(DL)#define HAVE_OPENSSL_PEM_H 1$(DL) >> $@
	@echo $(DL)#define HAVE_OPENSSL_ERR_H 1$(DL) >> $@
	@echo $(DL)#define HAVE_OPENSSL_CRYPTO_H 1$(DL) >> $@
	@echo $(DL)#define HAVE_OPENSSL_ENGINE_H 1$(DL) >> $@
	@echo $(DL)#define OPENSSL_NO_KRB5 1$(DL) >> $@
ifdef WITH_SRP
	@echo $(DL)#define USE_TLS_SRP 1$(DL) >> $@
endif
ifdef WITH_SPNEGO
	@echo $(DL)#define HAVE_SPNEGO 1$(DL) >> $@
endif







<







635
636
637
638
639
640
641

642
643
644
645
646
647
648
	@echo $(DL)#define USE_OPENSSL 1$(DL) >> $@
	@echo $(DL)#define HAVE_OPENSSL_X509_H 1$(DL) >> $@
	@echo $(DL)#define HAVE_OPENSSL_SSL_H 1$(DL) >> $@
	@echo $(DL)#define HAVE_OPENSSL_RSA_H 1$(DL) >> $@
	@echo $(DL)#define HAVE_OPENSSL_PEM_H 1$(DL) >> $@
	@echo $(DL)#define HAVE_OPENSSL_ERR_H 1$(DL) >> $@
	@echo $(DL)#define HAVE_OPENSSL_CRYPTO_H 1$(DL) >> $@

	@echo $(DL)#define OPENSSL_NO_KRB5 1$(DL) >> $@
ifdef WITH_SRP
	@echo $(DL)#define USE_TLS_SRP 1$(DL) >> $@
endif
ifdef WITH_SPNEGO
	@echo $(DL)#define HAVE_SPNEGO 1$(DL) >> $@
endif
Changes to jni/curl/lib/altsvc.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2019 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
#include "urldata.h"
#include "altsvc.h"
#include "curl_get_line.h"
#include "strcase.h"
#include "parsedate.h"
#include "sendf.h"
#include "warnless.h"



/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

#define MAX_ALTSVC_LINE 4095
#define MAX_ALTSVC_DATELENSTR "64"
#define MAX_ALTSVC_DATELEN 64
#define MAX_ALTSVC_HOSTLENSTR "512"
#define MAX_ALTSVC_HOSTLEN 512
#define MAX_ALTSVC_ALPNLENSTR "10"
#define MAX_ALTSVC_ALPNLEN 10







static enum alpnid alpn2alpnid(char *name)
{
  if(strcasecompare(name, "h1"))
    return ALPN_h1;
  if(strcasecompare(name, "h2"))
    return ALPN_h2;
#if (defined(USE_QUICHE) || defined(USE_NGTCP2)) && !defined(UNITTESTS)
  if(strcasecompare(name, "h3-24"))
    return ALPN_h3;
#else
  if(strcasecompare(name, "h3"))
    return ALPN_h3;
#endif
  return ALPN_none; /* unknown, probably rubbish input */
}

/* Given the ALPN ID, return the name */
const char *Curl_alpnid2str(enum alpnid id)
{
  switch(id) {
  case ALPN_h1:
    return "h1";
  case ALPN_h2:
    return "h2";
  case ALPN_h3:
#if (defined(USE_QUICHE) || defined(USE_NGTCP2)) && !defined(UNITTESTS)
    return "h3-24";
#else
    return "h3";
#endif
  default:
    return ""; /* bad */
  }
}


static void altsvc_free(struct altsvc *as)







>
>













>
>
>
>
>
>







<
|

<
<
<
<












<
<
<
|
<







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
#include "urldata.h"
#include "altsvc.h"
#include "curl_get_line.h"
#include "strcase.h"
#include "parsedate.h"
#include "sendf.h"
#include "warnless.h"
#include "rand.h"
#include "rename.h"

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

#define MAX_ALTSVC_LINE 4095
#define MAX_ALTSVC_DATELENSTR "64"
#define MAX_ALTSVC_DATELEN 64
#define MAX_ALTSVC_HOSTLENSTR "512"
#define MAX_ALTSVC_HOSTLEN 512
#define MAX_ALTSVC_ALPNLENSTR "10"
#define MAX_ALTSVC_ALPNLEN 10

#if (defined(USE_QUICHE) || defined(USE_NGTCP2)) && !defined(UNITTESTS)
#define H3VERSION "h3-27"
#else
#define H3VERSION "h3"
#endif

static enum alpnid alpn2alpnid(char *name)
{
  if(strcasecompare(name, "h1"))
    return ALPN_h1;
  if(strcasecompare(name, "h2"))
    return ALPN_h2;

  if(strcasecompare(name, H3VERSION))
    return ALPN_h3;




  return ALPN_none; /* unknown, probably rubbish input */
}

/* Given the ALPN ID, return the name */
const char *Curl_alpnid2str(enum alpnid id)
{
  switch(id) {
  case ALPN_h1:
    return "h1";
  case ALPN_h2:
    return "h2";
  case ALPN_h3:



    return H3VERSION;

  default:
    return ""; /* bad */
  }
}


static void altsvc_free(struct altsvc *as)
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
 * handling to work completely. It will ignore individual syntactical errors
 * etc.
 */
static CURLcode altsvc_load(struct altsvcinfo *asi, const char *file)
{
  CURLcode result = CURLE_OK;
  char *line = NULL;









  FILE *fp = fopen(file, FOPEN_READTEXT);
  if(fp) {
    line = malloc(MAX_ALTSVC_LINE);
    if(!line)
      goto fail;
    while(Curl_get_line(line, MAX_ALTSVC_LINE, fp)) {
      char *lineptr = line;
      while(*lineptr && ISBLANK(*lineptr))
        lineptr++;
      if(*lineptr == '#')
        /* skip commented lines */
        continue;

      altsvc_add(asi, lineptr);
    }
    free(line); /* free the line buffer */
    fclose(fp);
  }
  return result;

  fail:

  free(line);
  fclose(fp);
  return CURLE_OUT_OF_MEMORY;
}

/*
 * Write this single altsvc entry to a single output line







>
>
>
>
>
>
>
>
>
|




















>







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
 * handling to work completely. It will ignore individual syntactical errors
 * etc.
 */
static CURLcode altsvc_load(struct altsvcinfo *asi, const char *file)
{
  CURLcode result = CURLE_OK;
  char *line = NULL;
  FILE *fp;

  /* we need a private copy of the file name so that the altsvc cache file
     name survives an easy handle reset */
  free(asi->filename);
  asi->filename = strdup(file);
  if(!asi->filename)
    return CURLE_OUT_OF_MEMORY;

  fp = fopen(file, FOPEN_READTEXT);
  if(fp) {
    line = malloc(MAX_ALTSVC_LINE);
    if(!line)
      goto fail;
    while(Curl_get_line(line, MAX_ALTSVC_LINE, fp)) {
      char *lineptr = line;
      while(*lineptr && ISBLANK(*lineptr))
        lineptr++;
      if(*lineptr == '#')
        /* skip commented lines */
        continue;

      altsvc_add(asi, lineptr);
    }
    free(line); /* free the line buffer */
    fclose(fp);
  }
  return result;

  fail:
  Curl_safefree(asi->filename);
  free(line);
  fclose(fp);
  return CURLE_OUT_OF_MEMORY;
}

/*
 * Write this single altsvc entry to a single output line
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
  struct curl_llist_element *n;
  if(altsvc) {
    for(e = altsvc->list.head; e; e = n) {
      struct altsvc *as = e->ptr;
      n = e->next;
      altsvc_free(as);
    }

    free(altsvc);
  }
}

/*
 * Curl_altsvc_save() writes the altsvc cache to a file.
 */
CURLcode Curl_altsvc_save(struct altsvcinfo *altsvc, const char *file)

{
  struct curl_llist_element *e;
  struct curl_llist_element *n;
  CURLcode result = CURLE_OK;
  FILE *out;



  if(!altsvc)
    /* no cache activated */
    return CURLE_OK;





  if((altsvc->flags & CURLALTSVC_READONLYFILE) || !file || !file[0])
    /* marked as read-only, no file or zero length file name */
    return CURLE_OK;








  out = fopen(file, FOPEN_WRITETEXT);
  if(!out)
    return CURLE_WRITE_ERROR;

  fputs("# Your alt-svc cache. https://curl.haxx.se/docs/alt-svc.html\n"
        "# This file was generated by libcurl! Edit at your own risk.\n",
        out);
  for(e = altsvc->list.head; e; e = n) {
    struct altsvc *as = e->ptr;
    n = e->next;
    result = altsvc_out(as, out);
    if(result)
      break;
  }
  fclose(out);







  return result;
}

static CURLcode getalnum(const char **ptr, char *alpnbuf, size_t buflen)
{
  size_t len;
  const char *protop;
  const char *p = *ptr;
  while(*p && ISBLANK(*p))
    p++;
  protop = p;
  while(*p && !ISBLANK(*p) && (*p != ';') && (*p != '='))
    p++;
  len = p - protop;


  if(!len || (len >= buflen))
    return CURLE_BAD_FUNCTION_ARGUMENT;
  memcpy(alpnbuf, protop, len);
  alpnbuf[len] = 0;
  *ptr = p;
  return CURLE_OK;
}

/* altsvc_flush() removes all alternatives for this source origin from the
   list */
static void altsvc_flush(struct altsvcinfo *asi, enum alpnid srcalpnid,
                         const char *srchost, unsigned short srcport)







>







|
>





>
>




>
>
>
>




>
>
>
>
>
>
>
>
|

|
>
|
|
|
|
|
|
|
|
|
|
|
>
>
>
>
>
>
>














>





<







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
  struct curl_llist_element *n;
  if(altsvc) {
    for(e = altsvc->list.head; e; e = n) {
      struct altsvc *as = e->ptr;
      n = e->next;
      altsvc_free(as);
    }
    free(altsvc->filename);
    free(altsvc);
  }
}

/*
 * Curl_altsvc_save() writes the altsvc cache to a file.
 */
CURLcode Curl_altsvc_save(struct Curl_easy *data,
                          struct altsvcinfo *altsvc, const char *file)
{
  struct curl_llist_element *e;
  struct curl_llist_element *n;
  CURLcode result = CURLE_OK;
  FILE *out;
  char *tempstore;
  unsigned char randsuffix[9];

  if(!altsvc)
    /* no cache activated */
    return CURLE_OK;

  /* if not new name is given, use the one we stored from the load */
  if(!file && altsvc->filename)
    file = altsvc->filename;

  if((altsvc->flags & CURLALTSVC_READONLYFILE) || !file || !file[0])
    /* marked as read-only, no file or zero length file name */
    return CURLE_OK;

  if(Curl_rand_hex(data, randsuffix, sizeof(randsuffix)))
    return CURLE_FAILED_INIT;

  tempstore = aprintf("%s.%s.tmp", file, randsuffix);
  if(!tempstore)
    return CURLE_OUT_OF_MEMORY;

  out = fopen(tempstore, FOPEN_WRITETEXT);
  if(!out)
    result = CURLE_WRITE_ERROR;
  else {
    fputs("# Your alt-svc cache. https://curl.haxx.se/docs/alt-svc.html\n"
          "# This file was generated by libcurl! Edit at your own risk.\n",
          out);
    for(e = altsvc->list.head; e; e = n) {
      struct altsvc *as = e->ptr;
      n = e->next;
      result = altsvc_out(as, out);
      if(result)
        break;
    }
    fclose(out);
    if(!result && Curl_rename(tempstore, file))
      result = CURLE_WRITE_ERROR;

    if(result)
      unlink(tempstore);
  }
  free(tempstore);
  return result;
}

static CURLcode getalnum(const char **ptr, char *alpnbuf, size_t buflen)
{
  size_t len;
  const char *protop;
  const char *p = *ptr;
  while(*p && ISBLANK(*p))
    p++;
  protop = p;
  while(*p && !ISBLANK(*p) && (*p != ';') && (*p != '='))
    p++;
  len = p - protop;
  *ptr = p;

  if(!len || (len >= buflen))
    return CURLE_BAD_FUNCTION_ARGUMENT;
  memcpy(alpnbuf, protop, len);
  alpnbuf[len] = 0;

  return CURLE_OK;
}

/* altsvc_flush() removes all alternatives for this source origin from the
   list */
static void altsvc_flush(struct altsvcinfo *asi, enum alpnid srcalpnid,
                         const char *srchost, unsigned short srcport)
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

/*
 * Curl_altsvc_parse() takes an incoming alt-svc response header and stores
 * the data correctly in the cache.
 *
 * 'value' points to the header *value*. That's contents to the right of the
 * header name.




 */
CURLcode Curl_altsvc_parse(struct Curl_easy *data,
                           struct altsvcinfo *asi, const char *value,
                           enum alpnid srcalpnid, const char *srchost,
                           unsigned short srcport)
{
  const char *p = value;
  size_t len;
  enum alpnid dstalpnid = srcalpnid; /* the same by default */
  char namebuf[MAX_ALTSVC_HOSTLEN] = "";
  char alpnbuf[MAX_ALTSVC_ALPNLEN] = "";
  struct altsvc *as;
  unsigned short dstport = srcport; /* the same by default */
  const char *semip;
  time_t maxage = 24 * 3600; /* default is 24 hours */
  bool persist = FALSE;
  CURLcode result = getalnum(&p, alpnbuf, sizeof(alpnbuf));
  if(result)

    return result;


  DEBUGASSERT(asi);

  /* Flush all cached alternatives for this source origin, if any */
  altsvc_flush(asi, srcalpnid, srchost, srcport);

  /* "clear" is a magic keyword */
  if(strcasecompare(alpnbuf, "clear")) {
    return CURLE_OK;
  }

  /* The 'ma' and 'persist' flags are annoyingly meant for all alternatives
     but are set after the list on the line. Scan for the semicolons and get
     those fields first! */
  semip = p;
  do {
    semip = strchr(semip, ';');
    if(semip) {
      char option[32];
      unsigned long num;
      char *end_ptr;
      bool quoted = FALSE;
      semip++; /* pass the semicolon */
      result = getalnum(&semip, option, sizeof(option));
      if(result)
        break;
      while(*semip && ISBLANK(*semip))
        semip++;
      if(*semip != '=')
        continue;
      semip++;
      while(*semip && ISBLANK(*semip))
        semip++;
      if(*semip == '\"') {
        /* quoted value */
        semip++;
        quoted = TRUE;
      }
      num = strtoul(semip, &end_ptr, 10);
      if((end_ptr != semip) && num && (num < ULONG_MAX)) {
        if(strcasecompare("ma", option))
          maxage = num;
        else if(strcasecompare("persist", option) && (num == 1))
          persist = TRUE;
        if(quoted && (*end_ptr == '\"'))
          end_ptr++;
      }
      semip = end_ptr;
    }
  } while(semip);

  do {
    if(*p == '=') {
      /* [protocol]="[host][:port]" */
      dstalpnid = alpn2alpnid(alpnbuf);
      if(!dstalpnid) {
        infof(data, "Unknown alt-svc protocol \"%s\", ignoring...\n", alpnbuf);
        return CURLE_OK;
      }
      p++;
      if(*p == '\"') {
        const char *dsthost;







        p++;
        if(*p != ':') {
          /* host name starts here */
          const char *hostp = p;
          while(*p && (ISALNUM(*p) || (*p == '.') || (*p == '-')))
            p++;
          len = p - hostp;
          if(!len || (len >= MAX_ALTSVC_HOSTLEN))
            return CURLE_BAD_FUNCTION_ARGUMENT;



          memcpy(namebuf, hostp, len);
          namebuf[len] = 0;
          dsthost = namebuf;

        }
        else {
          /* no destination name, use source host */
          dsthost = srchost;
        }
        if(*p == ':') {
          /* a port number */
          char *end_ptr;
          unsigned long port = strtoul(++p, &end_ptr, 10);
          if(port > USHRT_MAX || end_ptr == p || *end_ptr != '\"') {
            infof(data, "Unknown alt-svc port number, ignoring...\n");
            return CURLE_OK;
          }
          p = end_ptr;
          dstport = curlx_ultous(port);
        }
        if(*p++ != '\"')



















          return CURLE_BAD_FUNCTION_ARGUMENT;






























        as = altsvc_createid(srchost, dsthost,
                             srcalpnid, dstalpnid,
                             srcport, dstport);
        if(as) {
          /* The expires time also needs to take the Age: value (if any) into
             account. [See RFC 7838 section 3.1] */
          as->expires = maxage + time(NULL);
          as->persist = persist;
          Curl_llist_insert_next(&asi->list, asi->list.tail, as, &as->node);
          asi->num++; /* one more entry */
          infof(data, "Added alt-svc: %s:%d over %s\n", dsthost, dstport,
                Curl_alpnid2str(dstalpnid));
        }
      }







      /* after the double quote there can be a comma if there's another
         string or a semicolon if no more */
      if(*p == ',') {
        /* comma means another alternative is presented */
        p++;
        result = getalnum(&p, alpnbuf, sizeof(alpnbuf));
        if(result)
          /* failed to parse, but since we already did at least one host we
             return OK */
          return CURLE_OK;
      }
    }


  } while(*p && (*p != ';') && (*p != '\n') && (*p != '\r'));

  return CURLE_OK;
}

/*
 * Return TRUE on a match







>
>
>
>













<
<
<

|
>
|
>











<
<
<
<

<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<



<
<
<
<



>
>
>
>
>
>
>







|
|
>
>
>
|
|
|
>







<



|





>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
>
>
>
>
>







<
|
<


>
>







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

/*
 * Curl_altsvc_parse() takes an incoming alt-svc response header and stores
 * the data correctly in the cache.
 *
 * 'value' points to the header *value*. That's contents to the right of the
 * header name.
 *
 * Currently this function rejects invalid data without returning an error.
 * Invalid host name, port number will result in the specific alternative
 * being rejected. Unknown protocols are skipped.
 */
CURLcode Curl_altsvc_parse(struct Curl_easy *data,
                           struct altsvcinfo *asi, const char *value,
                           enum alpnid srcalpnid, const char *srchost,
                           unsigned short srcport)
{
  const char *p = value;
  size_t len;
  enum alpnid dstalpnid = srcalpnid; /* the same by default */
  char namebuf[MAX_ALTSVC_HOSTLEN] = "";
  char alpnbuf[MAX_ALTSVC_ALPNLEN] = "";
  struct altsvc *as;
  unsigned short dstport = srcport; /* the same by default */



  CURLcode result = getalnum(&p, alpnbuf, sizeof(alpnbuf));
  if(result) {
    infof(data, "Excessive alt-svc header, ignoring...\n");
    return CURLE_OK;
  }

  DEBUGASSERT(asi);

  /* Flush all cached alternatives for this source origin, if any */
  altsvc_flush(asi, srcalpnid, srchost, srcport);

  /* "clear" is a magic keyword */
  if(strcasecompare(alpnbuf, "clear")) {
    return CURLE_OK;
  }





  do {




































    if(*p == '=') {
      /* [protocol]="[host][:port]" */
      dstalpnid = alpn2alpnid(alpnbuf);




      p++;
      if(*p == '\"') {
        const char *dsthost;
        const char *value_ptr;
        char option[32];
        unsigned long num;
        char *end_ptr;
        bool quoted = FALSE;
        time_t maxage = 24 * 3600; /* default is 24 hours */
        bool persist = FALSE;
        p++;
        if(*p != ':') {
          /* host name starts here */
          const char *hostp = p;
          while(*p && (ISALNUM(*p) || (*p == '.') || (*p == '-')))
            p++;
          len = p - hostp;
          if(!len || (len >= MAX_ALTSVC_HOSTLEN)) {
            infof(data, "Excessive alt-svc host name, ignoring...\n");
            dstalpnid = ALPN_none;
          }
          else {
            memcpy(namebuf, hostp, len);
            namebuf[len] = 0;
            dsthost = namebuf;
          }
        }
        else {
          /* no destination name, use source host */
          dsthost = srchost;
        }
        if(*p == ':') {
          /* a port number */

          unsigned long port = strtoul(++p, &end_ptr, 10);
          if(port > USHRT_MAX || end_ptr == p || *end_ptr != '\"') {
            infof(data, "Unknown alt-svc port number, ignoring...\n");
            dstalpnid = ALPN_none;
          }
          p = end_ptr;
          dstport = curlx_ultous(port);
        }
        if(*p++ != '\"')
          break;
        /* Handle the optional 'ma' and 'persist' flags. Unknown flags
           are skipped. */
        for(;;) {
          while(*p && ISBLANK(*p) && *p != ';' && *p != ',')
            p++;
          if(!*p || *p == ',')
            break;
          p++; /* pass the semicolon */
          if(!*p)
            break;
          result = getalnum(&p, option, sizeof(option));
          if(result) {
            /* skip option if name is too long */
            option[0] = '\0';
          }
          while(*p && ISBLANK(*p))
            p++;
          if(*p != '=')
            return CURLE_OK;
          p++;
          while(*p && ISBLANK(*p))
            p++;
          if(!*p)
            return CURLE_OK;
          if(*p == '\"') {
            /* quoted value */
            p++;
            quoted = TRUE;
          }
          value_ptr = p;
          if(quoted) {
            while(*p && *p != '\"')
              p++;
            if(!*p++)
              return CURLE_OK;
          }
          else {
            while(*p && !ISBLANK(*p) && *p!= ';' && *p != ',')
              p++;
          }
          num = strtoul(value_ptr, &end_ptr, 10);
          if((end_ptr != value_ptr) && (num < ULONG_MAX)) {
            if(strcasecompare("ma", option))
              maxage = num;
            else if(strcasecompare("persist", option) && (num == 1))
              persist = TRUE;
          }
        }
        if(dstalpnid) {
          as = altsvc_createid(srchost, dsthost,
                               srcalpnid, dstalpnid,
                               srcport, dstport);
          if(as) {
            /* The expires time also needs to take the Age: value (if any) into
               account. [See RFC 7838 section 3.1] */
            as->expires = maxage + time(NULL);
            as->persist = persist;
            Curl_llist_insert_next(&asi->list, asi->list.tail, as, &as->node);
            asi->num++; /* one more entry */
            infof(data, "Added alt-svc: %s:%d over %s\n", dsthost, dstport,
                  Curl_alpnid2str(dstalpnid));
          }
        }
        else {
          infof(data, "Unknown alt-svc protocol \"%s\", skipping...\n",
                alpnbuf);
        }
      }
      else
        break;
      /* after the double quote there can be a comma if there's another
         string or a semicolon if no more */
      if(*p == ',') {
        /* comma means another alternative is presented */
        p++;
        result = getalnum(&p, alpnbuf, sizeof(alpnbuf));
        if(result)

          break;

      }
    }
    else
      break;
  } while(*p && (*p != ';') && (*p != '\n') && (*p != '\r'));

  return CURLE_OK;
}

/*
 * Return TRUE on a match
Changes to jni/curl/lib/altsvc.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_ALTSVC_H
#define HEADER_CURL_ALTSVC_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_ALTSVC_H
#define HEADER_CURL_ALTSVC_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2019 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
55
56
57
58
59
60
61
62

63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
  size_t num; /* number of alt-svc entries */
  long flags; /* the publicly set bitmask */
};

const char *Curl_alpnid2str(enum alpnid id);
struct altsvcinfo *Curl_altsvc_init(void);
CURLcode Curl_altsvc_load(struct altsvcinfo *asi, const char *file);
CURLcode Curl_altsvc_save(struct altsvcinfo *asi, const char *file);

CURLcode Curl_altsvc_ctrl(struct altsvcinfo *asi, const long ctrl);
void Curl_altsvc_cleanup(struct altsvcinfo *altsvc);
CURLcode Curl_altsvc_parse(struct Curl_easy *data,
                           struct altsvcinfo *altsvc, const char *value,
                           enum alpnid srcalpn, const char *srchost,
                           unsigned short srcport);
bool Curl_altsvc_lookup(struct altsvcinfo *asi,
                        enum alpnid srcalpnid, const char *srchost,
                        int srcport,
                        struct altsvc **dstentry,
                        int versions); /* one or more CURLALTSVC_H* bits */
#else
/* disabled */
#define Curl_altsvc_save(a,b)
#endif /* CURL_DISABLE_HTTP || USE_ALTSVC */
#endif /* HEADER_CURL_ALTSVC_H */







|
>










|


|


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
  size_t num; /* number of alt-svc entries */
  long flags; /* the publicly set bitmask */
};

const char *Curl_alpnid2str(enum alpnid id);
struct altsvcinfo *Curl_altsvc_init(void);
CURLcode Curl_altsvc_load(struct altsvcinfo *asi, const char *file);
CURLcode Curl_altsvc_save(struct Curl_easy *data,
                          struct altsvcinfo *asi, const char *file);
CURLcode Curl_altsvc_ctrl(struct altsvcinfo *asi, const long ctrl);
void Curl_altsvc_cleanup(struct altsvcinfo *altsvc);
CURLcode Curl_altsvc_parse(struct Curl_easy *data,
                           struct altsvcinfo *altsvc, const char *value,
                           enum alpnid srcalpn, const char *srchost,
                           unsigned short srcport);
bool Curl_altsvc_lookup(struct altsvcinfo *asi,
                        enum alpnid srcalpnid, const char *srchost,
                        int srcport,
                        struct altsvc **dstentry,
                        const int versions); /* CURLALTSVC_H* bits */
#else
/* disabled */
#define Curl_altsvc_save(a,b,c)
#endif /* CURL_DISABLE_HTTP || USE_ALTSVC */
#endif /* HEADER_CURL_ALTSVC_H */
Changes to jni/curl/lib/asyn-ares.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
Curl_addrinfo *Curl_resolver_getaddrinfo(struct connectdata *conn,
                                         const char *hostname,
                                         int port,
                                         int *waitp)
{
  char *bufp;
  struct Curl_easy *data = conn->data;
  struct in_addr in;
  int family = PF_INET;
#ifdef ENABLE_IPV6 /* CURLRES_IPV6 */
  struct in6_addr in6;
#endif /* CURLRES_IPV6 */

  *waitp = 0; /* default to synchronous response */

  /* First check if this is an IPv4 address string */
  if(Curl_inet_pton(AF_INET, hostname, &in) > 0) {
    /* This is a dotted IP address 123.123.123.123-style */
    return Curl_ip2addr(AF_INET, &in, hostname, port);
  }

#ifdef ENABLE_IPV6 /* CURLRES_IPV6 */
  /* Otherwise, check if this is an IPv6 address string */
  if(Curl_inet_pton (AF_INET6, hostname, &in6) > 0)
    /* This must be an IPv6 address literal.  */
    return Curl_ip2addr(AF_INET6, &in6, hostname, port);

  switch(conn->ip_version) {
  default:
#if ARES_VERSION >= 0x010601
    family = PF_UNSPEC; /* supported by c-ares since 1.6.1, so for older
                           c-ares versions this just falls through and defaults
                           to PF_INET */
    break;







<

<
<
<



<
<
<
<
<
<

<
<
<
<
<







622
623
624
625
626
627
628

629



630
631
632






633





634
635
636
637
638
639
640
Curl_addrinfo *Curl_resolver_getaddrinfo(struct connectdata *conn,
                                         const char *hostname,
                                         int port,
                                         int *waitp)
{
  char *bufp;
  struct Curl_easy *data = conn->data;

  int family = PF_INET;




  *waitp = 0; /* default to synchronous response */







#ifdef ENABLE_IPV6 /* CURLRES_IPV6 */





  switch(conn->ip_version) {
  default:
#if ARES_VERSION >= 0x010601
    family = PF_UNSPEC; /* supported by c-ares since 1.6.1, so for older
                           c-ares versions this just falls through and defaults
                           to PF_INET */
    break;
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
    }
    conn->async.os_specific = res;

    /* initial status - failed */
    res->last_status = ARES_ENOTFOUND;
#ifdef ENABLE_IPV6 /* CURLRES_IPV6 */
    if(family == PF_UNSPEC) {
      if(Curl_ipv6works()) {
        res->num_pending = 2;

        /* areschannel is already setup in the Curl_open() function */
        ares_gethostbyname((ares_channel)data->state.resolver, hostname,
                            PF_INET, query_completed_cb, conn);
        ares_gethostbyname((ares_channel)data->state.resolver, hostname,
                            PF_INET6, query_completed_cb, conn);







|







665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
    }
    conn->async.os_specific = res;

    /* initial status - failed */
    res->last_status = ARES_ENOTFOUND;
#ifdef ENABLE_IPV6 /* CURLRES_IPV6 */
    if(family == PF_UNSPEC) {
      if(Curl_ipv6works(conn)) {
        res->num_pending = 2;

        /* areschannel is already setup in the Curl_open() function */
        ares_gethostbyname((ares_channel)data->state.resolver, hostname,
                            PF_INET, query_completed_cb, conn);
        ares_gethostbyname((ares_channel)data->state.resolver, hostname,
                            PF_INET6, query_completed_cb, conn);
Changes to jni/curl/lib/asyn-thread.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include "sendf.h"
#include "hostip.h"
#include "hash.h"
#include "share.h"
#include "strerror.h"
#include "url.h"
#include "multiif.h"
#include "inet_pton.h"
#include "inet_ntop.h"
#include "curl_threads.h"
#include "connect.h"
#include "socketpair.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"







<







67
68
69
70
71
72
73

74
75
76
77
78
79
80
#include "sendf.h"
#include "hostip.h"
#include "hash.h"
#include "share.h"
#include "strerror.h"
#include "url.h"
#include "multiif.h"

#include "inet_ntop.h"
#include "curl_threads.h"
#include "connect.h"
#include "socketpair.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
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
 * Curl_getaddrinfo() - for platforms without getaddrinfo
 */
Curl_addrinfo *Curl_resolver_getaddrinfo(struct connectdata *conn,
                                         const char *hostname,
                                         int port,
                                         int *waitp)
{
  struct in_addr in;
  struct Curl_easy *data = conn->data;
  struct resdata *reslv = (struct resdata *)data->state.resolver;

  *waitp = 0; /* default to synchronous response */

#ifdef ENABLE_IPV6
  {
    struct in6_addr in6;
    /* check if this is an IPv6 address string */
    if(Curl_inet_pton(AF_INET6, hostname, &in6) > 0)
      /* This is an IPv6 address literal */
      return Curl_ip2addr(AF_INET6, &in6, hostname, port);
  }
#endif /* ENABLE_IPV6 */

  if(Curl_inet_pton(AF_INET, hostname, &in) > 0)
    /* This is a dotted IP address 123.123.123.123-style */
    return Curl_ip2addr(AF_INET, &in, hostname, port);

  reslv->start = Curl_now();

  /* fire up a new resolver thread! */
  if(init_resolve_thread(conn, hostname, port, NULL)) {
    *waitp = 1; /* expect asynchronous response */
    return NULL;
  }







<





<
<
<
<
<
<
<
<
<
<
<
<
<
<







687
688
689
690
691
692
693

694
695
696
697
698














699
700
701
702
703
704
705
 * Curl_getaddrinfo() - for platforms without getaddrinfo
 */
Curl_addrinfo *Curl_resolver_getaddrinfo(struct connectdata *conn,
                                         const char *hostname,
                                         int port,
                                         int *waitp)
{

  struct Curl_easy *data = conn->data;
  struct resdata *reslv = (struct resdata *)data->state.resolver;

  *waitp = 0; /* default to synchronous response */















  reslv->start = Curl_now();

  /* fire up a new resolver thread! */
  if(init_resolve_thread(conn, hostname, port, NULL)) {
    *waitp = 1; /* expect asynchronous response */
    return NULL;
  }
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
 */
Curl_addrinfo *Curl_resolver_getaddrinfo(struct connectdata *conn,
                                         const char *hostname,
                                         int port,
                                         int *waitp)
{
  struct addrinfo hints;
  char sbuf[12];
  int pf = PF_INET;
  struct Curl_easy *data = conn->data;
  struct resdata *reslv = (struct resdata *)data->state.resolver;

  *waitp = 0; /* default to synchronous response */

#ifndef USE_RESOLVE_ON_IPS
  {
    struct in_addr in;
    /* First check if this is an IPv4 address string */
    if(Curl_inet_pton(AF_INET, hostname, &in) > 0)
      /* This is a dotted IP address 123.123.123.123-style */
      return Curl_ip2addr(AF_INET, &in, hostname, port);
  }
#ifdef ENABLE_IPV6
  {
    struct in6_addr in6;
    /* check if this is an IPv6 address string */
    if(Curl_inet_pton(AF_INET6, hostname, &in6) > 0)
      /* This is an IPv6 address literal */
      return Curl_ip2addr(AF_INET6, &in6, hostname, port);
  }
#endif /* ENABLE_IPV6 */
#endif /* !USE_RESOLVE_ON_IPS */

#ifdef CURLRES_IPV6
  /*
   * Check if a limited name resolve has been requested.
   */
  switch(conn->ip_version) {
  case CURL_IPRESOLVE_V4:
    pf = PF_INET;
    break;
  case CURL_IPRESOLVE_V6:
    pf = PF_INET6;
    break;
  default:
    pf = PF_UNSPEC;
    break;
  }

  if((pf != PF_INET) && !Curl_ipv6works())
    /* The stack seems to be a non-IPv6 one */
    pf = PF_INET;
#endif /* CURLRES_IPV6 */

  memset(&hints, 0, sizeof(hints));
  hints.ai_family = pf;
  hints.ai_socktype = (conn->transport == TRNSPRT_TCP)?
    SOCK_STREAM : SOCK_DGRAM;

  msnprintf(sbuf, sizeof(sbuf), "%d", port);

  reslv->start = Curl_now();
  /* fire up a new resolver thread! */
  if(init_resolve_thread(conn, hostname, port, &hints)) {
    *waitp = 1; /* expect asynchronous response */
    return NULL;
  }








<






<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
















|









<
<







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
 */
Curl_addrinfo *Curl_resolver_getaddrinfo(struct connectdata *conn,
                                         const char *hostname,
                                         int port,
                                         int *waitp)
{
  struct addrinfo hints;

  int pf = PF_INET;
  struct Curl_easy *data = conn->data;
  struct resdata *reslv = (struct resdata *)data->state.resolver;

  *waitp = 0; /* default to synchronous response */




















#ifdef CURLRES_IPV6
  /*
   * Check if a limited name resolve has been requested.
   */
  switch(conn->ip_version) {
  case CURL_IPRESOLVE_V4:
    pf = PF_INET;
    break;
  case CURL_IPRESOLVE_V6:
    pf = PF_INET6;
    break;
  default:
    pf = PF_UNSPEC;
    break;
  }

  if((pf != PF_INET) && !Curl_ipv6works(conn))
    /* The stack seems to be a non-IPv6 one */
    pf = PF_INET;
#endif /* CURLRES_IPV6 */

  memset(&hints, 0, sizeof(hints));
  hints.ai_family = pf;
  hints.ai_socktype = (conn->transport == TRNSPRT_TCP)?
    SOCK_STREAM : SOCK_DGRAM;



  reslv->start = Curl_now();
  /* fire up a new resolver thread! */
  if(init_resolve_thread(conn, hostname, port, &hints)) {
    *waitp = 1; /* expect asynchronous response */
    return NULL;
  }

Changes to jni/curl/lib/config-dos.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_CONFIG_DOS_H
#define HEADER_CURL_CONFIG_DOS_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_CONFIG_DOS_H
#define HEADER_CURL_CONFIG_DOS_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
  #define HAVE_ZLIB_H            1
  #define HAVE_LIBZ              1
#endif

/* USE_OPENSSL on cmd-line */
#ifdef USE_OPENSSL
  #define HAVE_CRYPTO_CLEANUP_ALL_EX_DATA 1
  #define HAVE_OPENSSL_ENGINE_H  1
  #define OPENSSL_NO_KRB5        1
#endif

/* to disable LDAP */
#define CURL_DISABLE_LDAP        1

#define in_addr_t  u_long







<







134
135
136
137
138
139
140

141
142
143
144
145
146
147
  #define HAVE_ZLIB_H            1
  #define HAVE_LIBZ              1
#endif

/* USE_OPENSSL on cmd-line */
#ifdef USE_OPENSSL
  #define HAVE_CRYPTO_CLEANUP_ALL_EX_DATA 1

  #define OPENSSL_NO_KRB5        1
#endif

/* to disable LDAP */
#define CURL_DISABLE_LDAP        1

#define in_addr_t  u_long
Changes to jni/curl/lib/config-plan9.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_CONFIG_PLAN9_H
#define HEADER_CURL_CONFIG_PLAN9_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_CONFIG_PLAN9_H
#define HEADER_CURL_CONFIG_PLAN9_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#define HAVE_NETINET_IN_H 1
#define HAVE_NETINET_TCP_H 1
#define HAVE_PWD_H 1
#define HAVE_SYS_SELECT_H 1

#define USE_OPENSSL 1
#define HAVE_OPENSSL_CRYPTO_H 1
#define HAVE_OPENSSL_ENGINE_H 1
#define HAVE_OPENSSL_ERR_H 1
#define HAVE_OPENSSL_PEM_H 1
#define HAVE_OPENSSL_PKCS12_H 1
#define HAVE_OPENSSL_RSA_H 1
#define HAVE_OPENSSL_SSL_H 1
#define HAVE_OPENSSL_X509_H 1








<







134
135
136
137
138
139
140

141
142
143
144
145
146
147
#define HAVE_NETINET_IN_H 1
#define HAVE_NETINET_TCP_H 1
#define HAVE_PWD_H 1
#define HAVE_SYS_SELECT_H 1

#define USE_OPENSSL 1
#define HAVE_OPENSSL_CRYPTO_H 1

#define HAVE_OPENSSL_ERR_H 1
#define HAVE_OPENSSL_PEM_H 1
#define HAVE_OPENSSL_PKCS12_H 1
#define HAVE_OPENSSL_RSA_H 1
#define HAVE_OPENSSL_SSL_H 1
#define HAVE_OPENSSL_X509_H 1

Changes to jni/curl/lib/config-symbian.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_CONFIG_SYMBIAN_H
#define HEADER_CURL_CONFIG_SYMBIAN_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_CONFIG_SYMBIAN_H
#define HEADER_CURL_CONFIG_SYMBIAN_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
/* if you have an old MIT gssapi library, lacking GSS_C_NT_HOSTBASED_SERVICE
   */
/* #undef HAVE_OLD_GSSMIT */

/* Define to 1 if you have the <openssl/crypto.h> header file. */
/*#define HAVE_OPENSSL_CRYPTO_H 1*/

/* Define to 1 if you have the <openssl/engine.h> header file. */
/*#define HAVE_OPENSSL_ENGINE_H 1*/

/* Define to 1 if you have the <openssl/err.h> header file. */
/*#define HAVE_OPENSSL_ERR_H 1*/

/* Define to 1 if you have the <openssl/pem.h> header file. */
/*#define HAVE_OPENSSL_PEM_H 1*/

/* Define to 1 if you have the <openssl/pkcs12.h> header file. */







<
<
<







354
355
356
357
358
359
360



361
362
363
364
365
366
367
/* if you have an old MIT gssapi library, lacking GSS_C_NT_HOSTBASED_SERVICE
   */
/* #undef HAVE_OLD_GSSMIT */

/* Define to 1 if you have the <openssl/crypto.h> header file. */
/*#define HAVE_OPENSSL_CRYPTO_H 1*/




/* Define to 1 if you have the <openssl/err.h> header file. */
/*#define HAVE_OPENSSL_ERR_H 1*/

/* Define to 1 if you have the <openssl/pem.h> header file. */
/*#define HAVE_OPENSSL_PEM_H 1*/

/* Define to 1 if you have the <openssl/pkcs12.h> header file. */
Changes to jni/curl/lib/config-tpf.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_CONFIG_TPF_H
#define HEADER_CURL_CONFIG_TPF_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_CONFIG_TPF_H
#define HEADER_CURL_CONFIG_TPF_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
/* we have no strerror_r() proto */
/* #undef HAVE_NO_STRERROR_R_DECL */

/* Define to 1 if you have the <openssl/crypto.h> header file. */
/* #undef HAVE_OPENSSL_CRYPTO_H */
#define HAVE_OPENSSL_CRYPTO_H 1

/* Define to 1 if you have the <openssl/engine.h> header file. */
/* #undef HAVE_OPENSSL_ENGINE_H */
#define HAVE_OPENSSL_ENGINE_H 1

/* Define to 1 if you have the <openssl/err.h> header file. */
/* #undef HAVE_OPENSSL_ERR_H */
#define HAVE_OPENSSL_ERR_H 1

/* Define to 1 if you have the <openssl/pem.h> header file. */
/* #undef HAVE_OPENSSL_PEM_H */
#define HAVE_OPENSSL_PEM_H 1







<
<
<
<







312
313
314
315
316
317
318




319
320
321
322
323
324
325
/* we have no strerror_r() proto */
/* #undef HAVE_NO_STRERROR_R_DECL */

/* Define to 1 if you have the <openssl/crypto.h> header file. */
/* #undef HAVE_OPENSSL_CRYPTO_H */
#define HAVE_OPENSSL_CRYPTO_H 1





/* Define to 1 if you have the <openssl/err.h> header file. */
/* #undef HAVE_OPENSSL_ERR_H */
#define HAVE_OPENSSL_ERR_H 1

/* Define to 1 if you have the <openssl/pem.h> header file. */
/* #undef HAVE_OPENSSL_PEM_H */
#define HAVE_OPENSSL_PEM_H 1
Changes to jni/curl/lib/config-vxworks.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_CONFIG_VXWORKS_H
#define HEADER_CURL_CONFIG_VXWORKS_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_CONFIG_VXWORKS_H
#define HEADER_CURL_CONFIG_VXWORKS_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
/* if you have an old MIT gssapi library, lacking GSS_C_NT_HOSTBASED_SERVICE
   */
/* #undef HAVE_OLD_GSSMIT */

/* Define to 1 if you have the <openssl/crypto.h> header file. */
#define HAVE_OPENSSL_CRYPTO_H 1

/* Define to 1 if you have the <openssl/engine.h> header file. */
#define HAVE_OPENSSL_ENGINE_H 1

/* Define to 1 if you have the <openssl/err.h> header file. */
#define HAVE_OPENSSL_ERR_H 1

/* Define to 1 if you have the <openssl/pem.h> header file. */
#define HAVE_OPENSSL_PEM_H 1

/* Define to 1 if you have the <openssl/pkcs12.h> header file. */







<
<
<







414
415
416
417
418
419
420



421
422
423
424
425
426
427
/* if you have an old MIT gssapi library, lacking GSS_C_NT_HOSTBASED_SERVICE
   */
/* #undef HAVE_OLD_GSSMIT */

/* Define to 1 if you have the <openssl/crypto.h> header file. */
#define HAVE_OPENSSL_CRYPTO_H 1




/* Define to 1 if you have the <openssl/err.h> header file. */
#define HAVE_OPENSSL_ERR_H 1

/* Define to 1 if you have the <openssl/pem.h> header file. */
#define HAVE_OPENSSL_PEM_H 1

/* Define to 1 if you have the <openssl/pkcs12.h> header file. */
Changes to jni/curl/lib/config-win32.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_CONFIG_WIN32_H
#define HEADER_CURL_CONFIG_WIN32_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_CONFIG_WIN32_H
#define HEADER_CURL_CONFIG_WIN32_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
710
711
712
713
714
715
716

717

718
719
720
721
722
723
724
#endif

#if defined(__POCC__) && defined(USE_WIN32_LDAP)
#  define CURL_DISABLE_LDAP 1
#endif

/* Define to use the Windows crypto library. */

#define USE_WIN32_CRYPTO


/* Define to use Unix sockets. */
#if defined(_MSC_VER) && (_MSC_VER >= 1500)
/* sdkddkver.h first shipped with Platform SDK v6.0A included with VS2008 */
#include <sdkddkver.h>
#if defined(NTDDI_WIN10_RS4)
#define USE_UNIX_SOCKETS







>

>







710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
#endif

#if defined(__POCC__) && defined(USE_WIN32_LDAP)
#  define CURL_DISABLE_LDAP 1
#endif

/* Define to use the Windows crypto library. */
#if !defined(CURL_WINDOWS_APP)
#define USE_WIN32_CRYPTO
#endif

/* Define to use Unix sockets. */
#if defined(_MSC_VER) && (_MSC_VER >= 1500)
/* sdkddkver.h first shipped with Platform SDK v6.0A included with VS2008 */
#include <sdkddkver.h>
#if defined(NTDDI_WIN10_RS4)
#define USE_UNIX_SOCKETS
Changes to jni/curl/lib/conncache.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2012 - 2016, Linus Nielsen Feltzing, <linus@haxx.se>
 * Copyright (C) 2012 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is








|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2012 - 2016, Linus Nielsen Feltzing, <linus@haxx.se>
 * Copyright (C) 2012 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
  size_t num;
  CONN_LOCK(data);
  num = data->state.conn_cache->num_conn;
  CONN_UNLOCK(data);
  return num;
}

/* Returns number of connections currently held in the connections's bundle
   Locks/unlocks the cache itself!
*/
size_t Curl_conncache_bundle_size(struct connectdata *conn)
{
  size_t num;
  CONN_LOCK(conn->data);
  num = conn->bundle->num_connections;
  CONN_UNLOCK(conn->data);
  return num;
}

/* Look up the bundle with all the connections to the same host this
   connectdata struct is setup to use.

   **NOTE**: When it returns, it holds the connection cache lock! */
struct connectbundle *Curl_conncache_find_bundle(struct connectdata *conn,
                                                 struct conncache *connc,
                                                 const char **hostp)







<
<
<
<
<
<
<
<
<
<
<
<







175
176
177
178
179
180
181












182
183
184
185
186
187
188
  size_t num;
  CONN_LOCK(data);
  num = data->state.conn_cache->num_conn;
  CONN_UNLOCK(data);
  return num;
}













/* Look up the bundle with all the connections to the same host this
   connectdata struct is setup to use.

   **NOTE**: When it returns, it holds the connection cache lock! */
struct connectbundle *Curl_conncache_find_bundle(struct connectdata *conn,
                                                 struct conncache *connc,
                                                 const char **hostp)
Changes to jni/curl/lib/conncache.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_CONNCACHE_H
#define HEADER_CURL_CONNCACHE_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2015 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 2012 - 2014, Linus Nielsen Feltzing, <linus@haxx.se>
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_CONNCACHE_H
#define HEADER_CURL_CONNCACHE_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2015 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 2012 - 2014, Linus Nielsen Feltzing, <linus@haxx.se>
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/* return the correct bundle, to a host or a proxy */
struct connectbundle *Curl_conncache_find_bundle(struct connectdata *conn,
                                                 struct conncache *connc,
                                                 const char **hostp);
void Curl_conncache_unlock(struct Curl_easy *data);
/* returns number of connections currently held in the connection cache */
size_t Curl_conncache_size(struct Curl_easy *data);
size_t Curl_conncache_bundle_size(struct connectdata *conn);

bool Curl_conncache_return_conn(struct Curl_easy *data,
                                struct connectdata *conn);
CURLcode Curl_conncache_add_conn(struct conncache *connc,
                                 struct connectdata *conn) WARN_UNUSED_RESULT;
void Curl_conncache_remove_conn(struct Curl_easy *data,
                                struct connectdata *conn,







<







76
77
78
79
80
81
82

83
84
85
86
87
88
89
/* return the correct bundle, to a host or a proxy */
struct connectbundle *Curl_conncache_find_bundle(struct connectdata *conn,
                                                 struct conncache *connc,
                                                 const char **hostp);
void Curl_conncache_unlock(struct Curl_easy *data);
/* returns number of connections currently held in the connection cache */
size_t Curl_conncache_size(struct Curl_easy *data);


bool Curl_conncache_return_conn(struct Curl_easy *data,
                                struct connectdata *conn);
CURLcode Curl_conncache_add_conn(struct conncache *connc,
                                 struct connectdata *conn) WARN_UNUSED_RESULT;
void Curl_conncache_remove_conn(struct Curl_easy *data,
                                struct connectdata *conn,
Changes to jni/curl/lib/connect.c.
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
  (void)sockfd; /* unused */
#endif

  /* persist connection info in session handle */
  Curl_persistconninfo(conn);
}

/* after a TCP connection to the proxy has been verified, this function does
   the next magic step.


   Note: this function's sub-functions call failf()

*/
static CURLcode connected_proxy(struct connectdata *conn, int sockindex)

{
  CURLcode result = CURLE_OK;

  if(conn->bits.socksproxy) {
#ifndef CURL_DISABLE_PROXY
    /* for the secondary socket (FTP), use the "connect to host"
     * but ignore the "connect to port" (use the secondary port)
     */
    const char * const host = conn->bits.httpproxy ?

                              conn->http_proxy.host.name :
                              conn->bits.conn_to_host ?
                              conn->conn_to_host.name :
                              sockindex == SECONDARYSOCKET ?
                              conn->secondaryhostname : conn->host.name;

    const int port = conn->bits.httpproxy ? (int)conn->http_proxy.port :
                     sockindex == SECONDARYSOCKET ? conn->secondary_port :
                     conn->bits.conn_to_port ? conn->conn_to_port :
                     conn->remote_port;
    conn->bits.socksproxy_connecting = TRUE;
    switch(conn->socks_proxy.proxytype) {
    case CURLPROXY_SOCKS5:
    case CURLPROXY_SOCKS5_HOSTNAME:
      result = Curl_SOCKS5(conn->socks_proxy.user, conn->socks_proxy.passwd,
                         host, port, sockindex, conn);
      break;

    case CURLPROXY_SOCKS4:
    case CURLPROXY_SOCKS4A:
      result = Curl_SOCKS4(conn->socks_proxy.user, host, port, sockindex,
                           conn);
      break;

    default:
      failf(conn->data, "unknown proxytype option given");
      result = CURLE_COULDNT_CONNECT;
    } /* switch proxytype */
    conn->bits.socksproxy_connecting = FALSE;
#else
  (void)sockindex;
#endif /* CURL_DISABLE_PROXY */
  }



  return result;
}


















/*
 * Curl_is_connected() checks if the socket has connected.
 */

CURLcode Curl_is_connected(struct connectdata *conn,
                           int sockindex,







|
|
>




|
>








|
>
|
|
|
|
|
>
|
|
|
|
<




|





|






<




>
>



>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
  (void)sockfd; /* unused */
#endif

  /* persist connection info in session handle */
  Curl_persistconninfo(conn);
}

/* After a TCP connection to the proxy has been verified, this function does
   the next magic steps. If 'done' isn't set TRUE, it is not done yet and
   must be called again.

   Note: this function's sub-functions call failf()

*/
static CURLcode connect_SOCKS(struct connectdata *conn, int sockindex,
                              bool *done)
{
  CURLcode result = CURLE_OK;

  if(conn->bits.socksproxy) {
#ifndef CURL_DISABLE_PROXY
    /* for the secondary socket (FTP), use the "connect to host"
     * but ignore the "connect to port" (use the secondary port)
     */
    const char * const host =
      conn->bits.httpproxy ?
      conn->http_proxy.host.name :
      conn->bits.conn_to_host ?
      conn->conn_to_host.name :
      sockindex == SECONDARYSOCKET ?
      conn->secondaryhostname : conn->host.name;
    const int port =
      conn->bits.httpproxy ? (int)conn->http_proxy.port :
      sockindex == SECONDARYSOCKET ? conn->secondary_port :
      conn->bits.conn_to_port ? conn->conn_to_port :
      conn->remote_port;

    switch(conn->socks_proxy.proxytype) {
    case CURLPROXY_SOCKS5:
    case CURLPROXY_SOCKS5_HOSTNAME:
      result = Curl_SOCKS5(conn->socks_proxy.user, conn->socks_proxy.passwd,
                           host, port, sockindex, conn, done);
      break;

    case CURLPROXY_SOCKS4:
    case CURLPROXY_SOCKS4A:
      result = Curl_SOCKS4(conn->socks_proxy.user, host, port, sockindex,
                           conn, done);
      break;

    default:
      failf(conn->data, "unknown proxytype option given");
      result = CURLE_COULDNT_CONNECT;
    } /* switch proxytype */

#else
  (void)sockindex;
#endif /* CURL_DISABLE_PROXY */
  }
  else
    *done = TRUE; /* no SOCKS proxy, so consider us connected */

  return result;
}

/*
 * post_SOCKS() is called after a successful connect to the peer, which
 * *could* be a SOCKS proxy
 */
static void post_SOCKS(struct connectdata *conn,
                       int sockindex,
                       bool *connected)
{
  conn->bits.tcpconnect[sockindex] = TRUE;

  *connected = TRUE;
  if(sockindex == FIRSTSOCKET)
    Curl_pgrsTime(conn->data, TIMER_CONNECT); /* connect done */
  Curl_updateconninfo(conn, conn->sock[sockindex]);
  Curl_verboseconnect(conn);
}

/*
 * Curl_is_connected() checks if the socket has connected.
 */

CURLcode Curl_is_connected(struct connectdata *conn,
                           int sockindex,
829
830
831
832
833
834
835








836
837
838
839
840
841
842
  allow = Curl_timeleft(data, &now, TRUE);

  if(allow < 0) {
    /* time-out, bail out, go home */
    failf(data, "Connection time-out");
    return CURLE_OPERATION_TIMEDOUT;
  }









  for(i = 0; i<2; i++) {
    const int other = i ^ 1;
    if(conn->tempsock[i] == CURL_SOCKET_BAD)
      continue;

#ifdef ENABLE_QUIC







>
>
>
>
>
>
>
>







850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
  allow = Curl_timeleft(data, &now, TRUE);

  if(allow < 0) {
    /* time-out, bail out, go home */
    failf(data, "Connection time-out");
    return CURLE_OPERATION_TIMEDOUT;
  }

  if(SOCKS_STATE(conn->cnnct.state)) {
    /* still doing SOCKS */
    result = connect_SOCKS(conn, sockindex, connected);
    if(!result && *connected)
      post_SOCKS(conn, sockindex, connected);
    return result;
  }

  for(i = 0; i<2; i++) {
    const int other = i ^ 1;
    if(conn->tempsock[i] == CURL_SOCKET_BAD)
      continue;

#ifdef ENABLE_QUIC
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

        /* close the other socket, if open */
        if(conn->tempsock[other] != CURL_SOCKET_BAD) {
          Curl_closesocket(conn, conn->tempsock[other]);
          conn->tempsock[other] = CURL_SOCKET_BAD;
        }

        /* see if we need to do any proxy magic first once we connected */

        result = connected_proxy(conn, sockindex);
        if(result)
          return result;

        conn->bits.tcpconnect[sockindex] = TRUE;

        *connected = TRUE;
        if(sockindex == FIRSTSOCKET)
          Curl_pgrsTime(data, TIMER_CONNECT); /* connect done */
        Curl_updateconninfo(conn, conn->sock[sockindex]);
        Curl_verboseconnect(conn);

        return CURLE_OK;
      }
      infof(data, "Connection failed\n");
    }
    else if(rc & CURL_CSELECT_ERR)
      (void)verifyconnect(conn->tempsock[i], &error);







|
>
|
|


<
|
<
<
<
<
<







925
926
927
928
929
930
931
932
933
934
935
936
937

938





939
940
941
942
943
944
945

        /* close the other socket, if open */
        if(conn->tempsock[other] != CURL_SOCKET_BAD) {
          Curl_closesocket(conn, conn->tempsock[other]);
          conn->tempsock[other] = CURL_SOCKET_BAD;
        }

        /* see if we need to kick off any SOCKS proxy magic once we
           connected */
        result = connect_SOCKS(conn, sockindex, connected);
        if(result || !*connected)
          return result;


        post_SOCKS(conn, sockindex, connected);






        return CURLE_OK;
      }
      infof(data, "Connection failed\n");
    }
    else if(rc & CURL_CSELECT_ERR)
      (void)verifyconnect(conn->tempsock[i], &error);
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
  (void) conn;
#endif

  if(setsockopt(sockfd, level, TCP_NODELAY, (void *)&onoff,
                sizeof(onoff)) < 0)
    infof(data, "Could not set TCP_NODELAY: %s\n",
          Curl_strerror(SOCKERRNO, buffer, sizeof(buffer)));
  else
    infof(data, "TCP_NODELAY set\n");
#else
  (void)conn;
  (void)sockfd;
#endif
}

#ifdef SO_NOSIGPIPE







<
<







1027
1028
1029
1030
1031
1032
1033


1034
1035
1036
1037
1038
1039
1040
  (void) conn;
#endif

  if(setsockopt(sockfd, level, TCP_NODELAY, (void *)&onoff,
                sizeof(onoff)) < 0)
    infof(data, "Could not set TCP_NODELAY: %s\n",
          Curl_strerror(SOCKERRNO, buffer, sizeof(buffer)));


#else
  (void)conn;
  (void)sockfd;
#endif
}

#ifdef SO_NOSIGPIPE
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
#  else
      rc = connect(sockfd, &addr.sa_addr, addr.addrlen);
#  endif /* HAVE_BUILTIN_AVAILABLE */
#elif defined(TCP_FASTOPEN_CONNECT) /* Linux >= 4.11 */
      if(setsockopt(sockfd, IPPROTO_TCP, TCP_FASTOPEN_CONNECT,
                    (void *)&optval, sizeof(optval)) < 0)
        infof(data, "Failed to enable TCP Fast Open on fd %d\n", sockfd);
      else
        infof(data, "TCP_FASTOPEN_CONNECT set\n");

      rc = connect(sockfd, &addr.sa_addr, addr.addrlen);
#elif defined(MSG_FASTOPEN) /* old Linux */
      if(conn->given->flags & PROTOPT_SSL)
        rc = connect(sockfd, &addr.sa_addr, addr.addrlen);
      else
        rc = 0; /* Do nothing */







<
<







1234
1235
1236
1237
1238
1239
1240


1241
1242
1243
1244
1245
1246
1247
#  else
      rc = connect(sockfd, &addr.sa_addr, addr.addrlen);
#  endif /* HAVE_BUILTIN_AVAILABLE */
#elif defined(TCP_FASTOPEN_CONNECT) /* Linux >= 4.11 */
      if(setsockopt(sockfd, IPPROTO_TCP, TCP_FASTOPEN_CONNECT,
                    (void *)&optval, sizeof(optval)) < 0)
        infof(data, "Failed to enable TCP Fast Open on fd %d\n", sockfd);



      rc = connect(sockfd, &addr.sa_addr, addr.addrlen);
#elif defined(MSG_FASTOPEN) /* old Linux */
      if(conn->given->flags & PROTOPT_SSL)
        rc = connect(sockfd, &addr.sa_addr, addr.addrlen);
      else
        rc = 0; /* Do nothing */
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
 *
 * 'conn' can be NULL, beware!
 */
int Curl_closesocket(struct connectdata *conn,
                      curl_socket_t sock)
{
  if(conn && conn->fclosesocket) {
    if((sock == conn->sock[SECONDARYSOCKET]) &&
       conn->sock_accepted[SECONDARYSOCKET])
      /* if this socket matches the second socket, and that was created with
         accept, then we MUST NOT call the callback but clear the accepted
         status */
      conn->sock_accepted[SECONDARYSOCKET] = FALSE;
    else {
      int rc;
      Curl_multi_closed(conn->data, sock);
      Curl_set_in_callback(conn->data, true);
      rc = conn->fclosesocket(conn->closesocket_client, sock);
      Curl_set_in_callback(conn->data, false);
      return rc;







|
<



|







1444
1445
1446
1447
1448
1449
1450
1451

1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
 *
 * 'conn' can be NULL, beware!
 */
int Curl_closesocket(struct connectdata *conn,
                      curl_socket_t sock)
{
  if(conn && conn->fclosesocket) {
    if((sock == conn->sock[SECONDARYSOCKET]) && conn->sock_accepted)

      /* if this socket matches the second socket, and that was created with
         accept, then we MUST NOT call the callback but clear the accepted
         status */
      conn->sock_accepted = FALSE;
    else {
      int rc;
      Curl_multi_closed(conn->data, sock);
      Curl_set_in_callback(conn->data, true);
      rc = conn->fclosesocket(conn->closesocket_client, sock);
      Curl_set_in_callback(conn->data, false);
      return rc;
Changes to jni/curl/lib/cookie.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
93
94
95
96
97
98
99


100
101
102
103
104
105
106
#include "share.h"
#include "strtoofft.h"
#include "strcase.h"
#include "curl_get_line.h"
#include "curl_memrchr.h"
#include "inet_pton.h"
#include "parsedate.h"



/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

static void freecookie(struct Cookie *co)







>
>







93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include "share.h"
#include "strtoofft.h"
#include "strcase.h"
#include "curl_get_line.h"
#include "curl_memrchr.h"
#include "inet_pton.h"
#include "parsedate.h"
#include "rand.h"
#include "rename.h"

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

static void freecookie(struct Cookie *co)
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
        /*
         * Check if we have a reserved prefix set before anything else, as we
         * otherwise have to test for the prefix in both the cookie name and
         * "the rest". Prefixes must start with '__' and end with a '-', so
         * only test for names where that can possibly be true.
         */
        if(nlen > 3 && name[0] == '_' && name[1] == '_') {
          if(strncasecompare("__Secure-", name, 9))
            co->prefix |= COOKIE_PREFIX__SECURE;
          else if(strncasecompare("__Host-", name, 7))
            co->prefix |= COOKIE_PREFIX__HOST;
        }

        if(!co->name) {
          /* The very first name/value pair is the actual cookie name */
          if(!sep) {
            /* Bad name/value pair. */







|

|







535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
        /*
         * Check if we have a reserved prefix set before anything else, as we
         * otherwise have to test for the prefix in both the cookie name and
         * "the rest". Prefixes must start with '__' and end with a '-', so
         * only test for names where that can possibly be true.
         */
        if(nlen > 3 && name[0] == '_' && name[1] == '_') {
          if(!strncmp("__Secure-", name, 9))
            co->prefix |= COOKIE_PREFIX__SECURE;
          else if(!strncmp("__Host-", name, 7))
            co->prefix |= COOKIE_PREFIX__HOST;
        }

        if(!co->name) {
          /* The very first name/value pair is the actual cookie name */
          if(!sep) {
            /* Bad name/value pair. */
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
        free(clist->spath);
        free(clist->expirestr);
        free(clist->version);
        free(clist->maxage);

        *clist = *co;  /* then store all the new data */

        free(co);   /* free the newly alloced memory */
        co = clist; /* point to the previous struct instead */

        /* We have replaced a cookie, now skip the rest of the list but
           make sure the 'lastc' pointer is properly set */
        do {
          lastc = clist;
          clist = clist->next;







|







1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
        free(clist->spath);
        free(clist->expirestr);
        free(clist->version);
        free(clist->maxage);

        *clist = *co;  /* then store all the new data */

        free(co);   /* free the newly allocated memory */
        co = clist; /* point to the previous struct instead */

        /* We have replaced a cookie, now skip the rest of the list but
           make sure the 'lastc' pointer is properly set */
        do {
          lastc = clist;
          clist = clist->next;
1497
1498
1499
1500
1501
1502
1503
1504

1505
1506
1507
1508


1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522

1523


1524


1525
1526



1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571

1572
1573




1574









1575
1576
1577
1578
1579
1580
1581
1582
 * cookie_output()
 *
 * Writes all internally known cookies to the specified file. Specify
 * "-" as file name to write to stdout.
 *
 * The function returns non-zero on write failure.
 */
static int cookie_output(struct CookieInfo *c, const char *dumphere)

{
  struct Cookie *co;
  FILE *out;
  bool use_stdout = FALSE;



  if(!c)
    /* no cookie engine alive */
    return 0;

  /* at first, remove expired cookies */
  remove_expired(c);

  if(!strcmp("-", dumphere)) {
    /* use stdout */
    out = stdout;
    use_stdout = TRUE;
  }
  else {

    out = fopen(dumphere, FOPEN_WRITETEXT);


    if(!out) {


      return 1; /* failure */
    }



  }

  fputs("# Netscape HTTP Cookie File\n"
        "# https://curl.haxx.se/docs/http-cookies.html\n"
        "# This file was generated by libcurl! Edit at your own risk.\n\n",
        out);

  if(c->numcookies) {
    unsigned int i;
    size_t nvalid = 0;
    struct Cookie **array;

    array = calloc(1, sizeof(struct Cookie *) * c->numcookies);
    if(!array) {
      if(!use_stdout)
        fclose(out);
      return 1;
    }

    /* only sort the cookies with a domain property */
    for(i = 0; i < COOKIE_HASH_SIZE; i++) {
      for(co = c->cookies[i]; co; co = co->next) {
        if(!co->domain)
          continue;
        array[nvalid++] = co;
      }
    }

    qsort(array, nvalid, sizeof(struct Cookie *), cookie_sort_ct);

    for(i = 0; i < nvalid; i++) {
      char *format_ptr = get_netscape_format(array[i]);
      if(format_ptr == NULL) {
        fprintf(out, "#\n# Fatal libcurl error\n");
        free(array);
        if(!use_stdout)
          fclose(out);
        return 1;
      }
      fprintf(out, "%s\n", format_ptr);
      free(format_ptr);
    }

    free(array);
  }

  if(!use_stdout)
    fclose(out);














  return 0;
}

static struct curl_slist *cookie_list(struct Curl_easy *data)
{
  struct curl_slist *list = NULL;
  struct curl_slist *beg;
  struct Cookie *c;







|
>


|

>
>








|





>
|
>
>
|
>
>
|
|
>
>
>














<
<
|


















<
<
|







>
|

>
>
>
>
|
>
>
>
>
>
>
>
>
>
|







1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553


1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572


1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
 * cookie_output()
 *
 * Writes all internally known cookies to the specified file. Specify
 * "-" as file name to write to stdout.
 *
 * The function returns non-zero on write failure.
 */
static int cookie_output(struct Curl_easy *data,
                         struct CookieInfo *c, const char *filename)
{
  struct Cookie *co;
  FILE *out = NULL;
  bool use_stdout = FALSE;
  char *tempstore = NULL;
  bool error = false;

  if(!c)
    /* no cookie engine alive */
    return 0;

  /* at first, remove expired cookies */
  remove_expired(c);

  if(!strcmp("-", filename)) {
    /* use stdout */
    out = stdout;
    use_stdout = TRUE;
  }
  else {
    unsigned char randsuffix[9];

    if(Curl_rand_hex(data, randsuffix, sizeof(randsuffix)))
      return 2;

    tempstore = aprintf("%s.%s.tmp", filename, randsuffix);
    if(!tempstore)
      return 1;

    out = fopen(tempstore, FOPEN_WRITETEXT);
    if(!out)
      goto error;
  }

  fputs("# Netscape HTTP Cookie File\n"
        "# https://curl.haxx.se/docs/http-cookies.html\n"
        "# This file was generated by libcurl! Edit at your own risk.\n\n",
        out);

  if(c->numcookies) {
    unsigned int i;
    size_t nvalid = 0;
    struct Cookie **array;

    array = calloc(1, sizeof(struct Cookie *) * c->numcookies);
    if(!array) {


      goto error;
    }

    /* only sort the cookies with a domain property */
    for(i = 0; i < COOKIE_HASH_SIZE; i++) {
      for(co = c->cookies[i]; co; co = co->next) {
        if(!co->domain)
          continue;
        array[nvalid++] = co;
      }
    }

    qsort(array, nvalid, sizeof(struct Cookie *), cookie_sort_ct);

    for(i = 0; i < nvalid; i++) {
      char *format_ptr = get_netscape_format(array[i]);
      if(format_ptr == NULL) {
        fprintf(out, "#\n# Fatal libcurl error\n");
        free(array);


        goto error;
      }
      fprintf(out, "%s\n", format_ptr);
      free(format_ptr);
    }

    free(array);
  }

  if(!use_stdout) {
    fclose(out);
    out = NULL;
    if(Curl_rename(tempstore, filename)) {
      unlink(tempstore);
      goto error;
    }
  }

  goto cleanup;
error:
  error = true;
cleanup:
  if(out && !use_stdout)
    fclose(out);
  free(tempstore);
  return error ? 1 : 0;
}

static struct curl_slist *cookie_list(struct Curl_easy *data)
{
  struct curl_slist *list = NULL;
  struct curl_slist *beg;
  struct Cookie *c;
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
         Curl_cookie_loadfiles() LOCKS and UNLOCKS the share itself! */
      Curl_cookie_loadfiles(data);
    }

    Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);

    /* if we have a destination file for all the cookies to get dumped to */
    if(cookie_output(data->cookies, data->set.str[STRING_COOKIEJAR]))
      infof(data, "WARNING: failed to save cookies in %s\n",
            data->set.str[STRING_COOKIEJAR]);
  }
  else {
    if(cleanup && data->change.cookielist) {
      /* since nothing is written, we can just free the list of cookie file
         names */







|







1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
         Curl_cookie_loadfiles() LOCKS and UNLOCKS the share itself! */
      Curl_cookie_loadfiles(data);
    }

    Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);

    /* if we have a destination file for all the cookies to get dumped to */
    if(cookie_output(data, data->cookies, data->set.str[STRING_COOKIEJAR]))
      infof(data, "WARNING: failed to save cookies in %s\n",
            data->set.str[STRING_COOKIEJAR]);
  }
  else {
    if(cleanup && data->change.cookielist) {
      /* since nothing is written, we can just free the list of cookie file
         names */
Changes to jni/curl/lib/curl_config.h.cmake.
68
69
70
71
72
73
74



75
76
77
78
79
80
81

/* to make a symbol visible */
#cmakedefine CURL_EXTERN_SYMBOL ${CURL_EXTERN_SYMBOL}
/* Ensure using CURL_EXTERN_SYMBOL is possible */
#ifndef CURL_EXTERN_SYMBOL
#define CURL_EXTERN_SYMBOL
#endif




/* Use Windows LDAP implementation */
#cmakedefine USE_WIN32_LDAP 1

/* when not building a shared library */
#cmakedefine CURL_STATICLIB 1








>
>
>







68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84

/* to make a symbol visible */
#cmakedefine CURL_EXTERN_SYMBOL ${CURL_EXTERN_SYMBOL}
/* Ensure using CURL_EXTERN_SYMBOL is possible */
#ifndef CURL_EXTERN_SYMBOL
#define CURL_EXTERN_SYMBOL
#endif

/* Allow SMB to work on Windows */
#cmakedefine USE_WIN32_CRYPTO

/* Use Windows LDAP implementation */
#cmakedefine USE_WIN32_LDAP 1

/* when not building a shared library */
#cmakedefine CURL_STATICLIB 1

448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464

/* if you have an old MIT gssapi library, lacking GSS_C_NT_HOSTBASED_SERVICE */
#cmakedefine HAVE_OLD_GSSMIT 1

/* Define to 1 if you have the <openssl/crypto.h> header file. */
#cmakedefine HAVE_OPENSSL_CRYPTO_H 1

/* Define to 1 if you have the <openssl/engine.h> header file. */
#cmakedefine HAVE_OPENSSL_ENGINE_H 1

/* Define to 1 if you have the <openssl/err.h> header file. */
#cmakedefine HAVE_OPENSSL_ERR_H 1

/* Define to 1 if you have the <openssl/pem.h> header file. */
#cmakedefine HAVE_OPENSSL_PEM_H 1

/* Define to 1 if you have the <openssl/pkcs12.h> header file. */







<
<
<







451
452
453
454
455
456
457



458
459
460
461
462
463
464

/* if you have an old MIT gssapi library, lacking GSS_C_NT_HOSTBASED_SERVICE */
#cmakedefine HAVE_OLD_GSSMIT 1

/* Define to 1 if you have the <openssl/crypto.h> header file. */
#cmakedefine HAVE_OPENSSL_CRYPTO_H 1




/* Define to 1 if you have the <openssl/err.h> header file. */
#cmakedefine HAVE_OPENSSL_ERR_H 1

/* Define to 1 if you have the <openssl/pem.h> header file. */
#cmakedefine HAVE_OPENSSL_PEM_H 1

/* Define to 1 if you have the <openssl/pkcs12.h> header file. */
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948

/* Define to disable non-blocking sockets. */
#cmakedefine USE_BLOCKING_SOCKETS 1

/* if GnuTLS is enabled */
#cmakedefine USE_GNUTLS 1

/* if PolarSSL is enabled */
#cmakedefine USE_POLARSSL 1

/* if Secure Transport is enabled */
#cmakedefine USE_SECTRANSP 1

/* if mbedTLS is enabled */
#cmakedefine USE_MBEDTLS 1

/* if BearSSL is enabled */







<
<
<







932
933
934
935
936
937
938



939
940
941
942
943
944
945

/* Define to disable non-blocking sockets. */
#cmakedefine USE_BLOCKING_SOCKETS 1

/* if GnuTLS is enabled */
#cmakedefine USE_GNUTLS 1




/* if Secure Transport is enabled */
#cmakedefine USE_SECTRANSP 1

/* if mbedTLS is enabled */
#cmakedefine USE_MBEDTLS 1

/* if BearSSL is enabled */
Changes to jni/curl/lib/curl_config.h.in.
430
431
432
433
434
435
436



437
438
439
440
441
442
443
#undef HAVE_LIBSSH2_H

/* Define to 1 if you have the <libssh/libssh.h> header file. */
#undef HAVE_LIBSSH_LIBSSH_H

/* Define to 1 if you have the `ssl' library (-lssl). */
#undef HAVE_LIBSSL




/* if zlib is available */
#undef HAVE_LIBZ

/* Define to 1 if you have the <linux/tcp.h> header file. */
#undef HAVE_LINUX_TCP_H








>
>
>







430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
#undef HAVE_LIBSSH2_H

/* Define to 1 if you have the <libssh/libssh.h> header file. */
#undef HAVE_LIBSSH_LIBSSH_H

/* Define to 1 if you have the `ssl' library (-lssl). */
#undef HAVE_LIBSSL

/* Define to 1 if you have the `wolfssh' library (-lwolfssh). */
#undef HAVE_LIBWOLFSSH

/* if zlib is available */
#undef HAVE_LIBZ

/* Define to 1 if you have the <linux/tcp.h> header file. */
#undef HAVE_LINUX_TCP_H

782
783
784
785
786
787
788



789
790
791
792
793
794
795
#undef HAVE_WINLDAP_H

/* Define to 1 if you have the winsock2.h header file. */
#undef HAVE_WINSOCK2_H

/* Define to 1 if you have the winsock.h header file. */
#undef HAVE_WINSOCK_H




/* Define to 1 if you have the `wolfSSLv3_client_method' function. */
#undef HAVE_WOLFSSLV3_CLIENT_METHOD

/* Define to 1 if you have the `wolfSSL_get_peer_certificate' function. */
#undef HAVE_WOLFSSL_GET_PEER_CERTIFICATE








>
>
>







785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
#undef HAVE_WINLDAP_H

/* Define to 1 if you have the winsock2.h header file. */
#undef HAVE_WINSOCK2_H

/* Define to 1 if you have the winsock.h header file. */
#undef HAVE_WINSOCK_H

/* Define to 1 if you have the <wolfssh/ssh.h> header file. */
#undef HAVE_WOLFSSH_SSH_H

/* Define to 1 if you have the `wolfSSLv3_client_method' function. */
#undef HAVE_WOLFSSLV3_CLIENT_METHOD

/* Define to 1 if you have the `wolfSSL_get_peer_certificate' function. */
#undef HAVE_WOLFSSL_GET_PEER_CERTIFICATE

1045
1046
1047
1048
1049
1050
1051



1052
1053
1054
1055
1056
1057
1058

/* Define to 1 if you are building a Windows target without large file
   support. */
#undef USE_WIN32_SMALL_FILES

/* to enable SSPI support */
#undef USE_WINDOWS_SSPI




/* if wolfSSL is enabled */
#undef USE_WOLFSSL

/* Version number of package */
#undef VERSION








>
>
>







1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067

/* Define to 1 if you are building a Windows target without large file
   support. */
#undef USE_WIN32_SMALL_FILES

/* to enable SSPI support */
#undef USE_WINDOWS_SSPI

/* if wolfSSH is in use */
#undef USE_WOLFSSH

/* if wolfSSL is enabled */
#undef USE_WOLFSSL

/* Version number of package */
#undef VERSION

Changes to jni/curl/lib/curl_hmac.h.
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
#ifndef HEADER_CURL_HMAC_H
#define HEADER_CURL_HMAC_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#ifndef CURL_DISABLE_CRYPTO_AUTH



typedef void    (* HMAC_hinit_func)(void *context);
typedef void    (* HMAC_hupdate_func)(void *context,
                                      const unsigned char *data,
                                      unsigned int len);
typedef void    (* HMAC_hfinal_func)(unsigned char *result, void *context);










|















>
>







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
#ifndef HEADER_CURL_HMAC_H
#define HEADER_CURL_HMAC_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#ifndef CURL_DISABLE_CRYPTO_AUTH

#define HMAC_MD5_LENGTH 16

typedef void    (* HMAC_hinit_func)(void *context);
typedef void    (* HMAC_hupdate_func)(void *context,
                                      const unsigned char *data,
                                      unsigned int len);
typedef void    (* HMAC_hfinal_func)(unsigned char *result, void *context);

57
58
59
60
61
62
63





64
65
66
67
HMAC_context * Curl_HMAC_init(const HMAC_params *hashparams,
                              const unsigned char *key,
                              unsigned int keylen);
int Curl_HMAC_update(HMAC_context *context,
                     const unsigned char *data,
                     unsigned int len);
int Curl_HMAC_final(HMAC_context *context, unsigned char *result);






#endif

#endif /* HEADER_CURL_HMAC_H */







>
>
>
>
>




59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
HMAC_context * Curl_HMAC_init(const HMAC_params *hashparams,
                              const unsigned char *key,
                              unsigned int keylen);
int Curl_HMAC_update(HMAC_context *context,
                     const unsigned char *data,
                     unsigned int len);
int Curl_HMAC_final(HMAC_context *context, unsigned char *result);

CURLcode Curl_hmacit(const HMAC_params *hashparams,
                     const unsigned char *key, const size_t keylen,
                     const unsigned char *data, const size_t datalen,
                     unsigned char *output);

#endif

#endif /* HEADER_CURL_HMAC_H */
Changes to jni/curl/lib/curl_md4.h.
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
#ifndef HEADER_CURL_MD4_H
#define HEADER_CURL_MD4_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "curl_setup.h"

#if !defined(CURL_DISABLE_CRYPTO_AUTH)

#define MD4_DIGEST_LENGTH 16

void Curl_md4it(unsigned char *output, const unsigned char *input, size_t len);


#endif /* !defined(CURL_DISABLE_CRYPTO_AUTH) */

#endif /* HEADER_CURL_MD4_H */









|




















|
>




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
#ifndef HEADER_CURL_MD4_H
#define HEADER_CURL_MD4_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "curl_setup.h"

#if !defined(CURL_DISABLE_CRYPTO_AUTH)

#define MD4_DIGEST_LENGTH 16

void Curl_md4it(unsigned char *output, const unsigned char *input,
                const size_t len);

#endif /* !defined(CURL_DISABLE_CRYPTO_AUTH) */

#endif /* HEADER_CURL_MD4_H */
Changes to jni/curl/lib/curl_md5.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_MD5_H
#define HEADER_CURL_MD5_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_MD5_H
#define HEADER_CURL_MD5_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
  const MD5_params      *md5_hash;      /* Hash function definition */
  void                  *md5_hashctx;   /* Hash function context */
} MD5_context;

extern const MD5_params Curl_DIGEST_MD5[1];
extern const HMAC_params Curl_HMAC_MD5[1];

void Curl_md5it(unsigned char *output,
                const unsigned char *input);

MD5_context * Curl_MD5_init(const MD5_params *md5params);
CURLcode Curl_MD5_update(MD5_context *context,
                         const unsigned char *data,
                         unsigned int len);
CURLcode Curl_MD5_final(MD5_context *context, unsigned char *result);

#endif

#endif /* HEADER_CURL_MD5_H */







|
|










45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
  const MD5_params      *md5_hash;      /* Hash function definition */
  void                  *md5_hashctx;   /* Hash function context */
} MD5_context;

extern const MD5_params Curl_DIGEST_MD5[1];
extern const HMAC_params Curl_HMAC_MD5[1];

void Curl_md5it(unsigned char *output, const unsigned char *input,
                const size_t len);

MD5_context * Curl_MD5_init(const MD5_params *md5params);
CURLcode Curl_MD5_update(MD5_context *context,
                         const unsigned char *data,
                         unsigned int len);
CURLcode Curl_MD5_final(MD5_context *context, unsigned char *result);

#endif

#endif /* HEADER_CURL_MD5_H */
Changes to jni/curl/lib/curl_ntlm_core.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include "curl_des.h"
#include "curl_md4.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

#define NTLM_HMAC_MD5_LEN     (16)
#define NTLMv2_BLOB_SIGNATURE "\x01\x01\x00\x00"
#define NTLMv2_BLOB_LEN       (44 -16 + ntlm->target_info_len + 4)

/*
* Turns a 56-bit key into being 64-bit wide.
*/
static void extend_key_56_to_64(const unsigned char *key_56, char *key)







<







116
117
118
119
120
121
122

123
124
125
126
127
128
129
#include "curl_des.h"
#include "curl_md4.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"


#define NTLMv2_BLOB_SIGNATURE "\x01\x01\x00\x00"
#define NTLMv2_BLOB_LEN       (44 -16 + ntlm->target_info_len + 4)

/*
* Turns a 56-bit key into being 64-bit wide.
*/
static void extend_key_56_to_64(const unsigned char *key_56, char *key)
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
  free(pw);

  return CURLE_OK;
}

#if defined(USE_NTLM_V2) && !defined(USE_WINDOWS_SSPI)

/* This returns the HMAC MD5 digest */
static CURLcode hmac_md5(const unsigned char *key, unsigned int keylen,
                         const unsigned char *data, unsigned int datalen,
                         unsigned char *output)
{
  HMAC_context *ctxt = Curl_HMAC_init(Curl_HMAC_MD5, key, keylen);

  if(!ctxt)
    return CURLE_OUT_OF_MEMORY;

  /* Update the digest with the given challenge */
  Curl_HMAC_update(ctxt, data, datalen);

  /* Finalise the digest */
  Curl_HMAC_final(ctxt, output);

  return CURLE_OK;
}

/* This creates the NTLMv2 hash by using NTLM hash as the key and Unicode
 * (uppercase UserName + Domain) as the data
 */
CURLcode Curl_ntlm_core_mk_ntlmv2_hash(const char *user, size_t userlen,
                                       const char *domain, size_t domlen,
                                       unsigned char *ntlmhash,
                                       unsigned char *ntlmv2hash)







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







562
563
564
565
566
567
568



















569
570
571
572
573
574
575
  free(pw);

  return CURLE_OK;
}

#if defined(USE_NTLM_V2) && !defined(USE_WINDOWS_SSPI)




















/* This creates the NTLMv2 hash by using NTLM hash as the key and Unicode
 * (uppercase UserName + Domain) as the data
 */
CURLcode Curl_ntlm_core_mk_ntlmv2_hash(const char *user, size_t userlen,
                                       const char *domain, size_t domlen,
                                       unsigned char *ntlmhash,
                                       unsigned char *ntlmv2hash)
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626

  if(!identity)
    return CURLE_OUT_OF_MEMORY;

  ascii_uppercase_to_unicode_le(identity, user, userlen);
  ascii_to_unicode_le(identity + (userlen << 1), domain, domlen);

  result = hmac_md5(ntlmhash, 16, identity, curlx_uztoui(identity_len),
                    ntlmv2hash);
  free(identity);

  return result;
}

/*
 * Curl_ntlm_core_mk_ntlmv2_resp()







|
|







591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606

  if(!identity)
    return CURLE_OUT_OF_MEMORY;

  ascii_uppercase_to_unicode_le(identity, user, userlen);
  ascii_to_unicode_le(identity + (userlen << 1), domain, domlen);

  result = Curl_hmacit(Curl_HMAC_MD5, ntlmhash, 16, identity, identity_len,
                       ntlmv2hash);
  free(identity);

  return result;
}

/*
 * Curl_ntlm_core_mk_ntlmv2_resp()
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
44    Target Info      N bytes (from the type-2 message)
44+N  Unknown          4 bytes
------------------------------------------------------------------------------
*/

  unsigned int len = 0;
  unsigned char *ptr = NULL;
  unsigned char hmac_output[NTLM_HMAC_MD5_LEN];
  curl_off_t tw;

  CURLcode result = CURLE_OK;

#if CURL_SIZEOF_CURL_OFF_T < 8
#error "this section needs 64bit support to work"
#endif

  /* Calculate the timestamp */
#ifdef DEBUGBUILD
  char *force_timestamp = getenv("CURL_FORCETIME");
  if(force_timestamp)
    tw = CURL_OFF_T_C(11644473600) * 10000000;
  else
#endif
    tw = ((curl_off_t)time(NULL) + CURL_OFF_T_C(11644473600)) * 10000000;

  /* Calculate the response len */
  len = NTLM_HMAC_MD5_LEN + NTLMv2_BLOB_LEN;

  /* Allocate the response */
  ptr = calloc(1, len);
  if(!ptr)
    return CURLE_OUT_OF_MEMORY;

  /* Create the BLOB structure */
  msnprintf((char *)ptr + NTLM_HMAC_MD5_LEN, NTLMv2_BLOB_LEN,
            "%c%c%c%c"   /* NTLMv2_BLOB_SIGNATURE */
            "%c%c%c%c",  /* Reserved = 0 */
            NTLMv2_BLOB_SIGNATURE[0], NTLMv2_BLOB_SIGNATURE[1],
            NTLMv2_BLOB_SIGNATURE[2], NTLMv2_BLOB_SIGNATURE[3],
            0, 0, 0, 0);

  Curl_write64_le(tw, ptr + 24);
  memcpy(ptr + 32, challenge_client, 8);
  memcpy(ptr + 44, ntlm->target_info, ntlm->target_info_len);

  /* Concatenate the Type 2 challenge with the BLOB and do HMAC MD5 */
  memcpy(ptr + 8, &ntlm->nonce[0], 8);
  result = hmac_md5(ntlmv2hash, NTLM_HMAC_MD5_LEN, ptr + 8,
                    NTLMv2_BLOB_LEN + 8, hmac_output);
  if(result) {
    free(ptr);
    return result;
  }

  /* Concatenate the HMAC MD5 output  with the BLOB */
  memcpy(ptr, hmac_output, NTLM_HMAC_MD5_LEN);

  /* Return the response */
  *ntresp = ptr;
  *ntresp_len = len;

  return result;
}







|


















|







|












|







|







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
44    Target Info      N bytes (from the type-2 message)
44+N  Unknown          4 bytes
------------------------------------------------------------------------------
*/

  unsigned int len = 0;
  unsigned char *ptr = NULL;
  unsigned char hmac_output[HMAC_MD5_LENGTH];
  curl_off_t tw;

  CURLcode result = CURLE_OK;

#if CURL_SIZEOF_CURL_OFF_T < 8
#error "this section needs 64bit support to work"
#endif

  /* Calculate the timestamp */
#ifdef DEBUGBUILD
  char *force_timestamp = getenv("CURL_FORCETIME");
  if(force_timestamp)
    tw = CURL_OFF_T_C(11644473600) * 10000000;
  else
#endif
    tw = ((curl_off_t)time(NULL) + CURL_OFF_T_C(11644473600)) * 10000000;

  /* Calculate the response len */
  len = HMAC_MD5_LENGTH + NTLMv2_BLOB_LEN;

  /* Allocate the response */
  ptr = calloc(1, len);
  if(!ptr)
    return CURLE_OUT_OF_MEMORY;

  /* Create the BLOB structure */
  msnprintf((char *)ptr + HMAC_MD5_LENGTH, NTLMv2_BLOB_LEN,
            "%c%c%c%c"   /* NTLMv2_BLOB_SIGNATURE */
            "%c%c%c%c",  /* Reserved = 0 */
            NTLMv2_BLOB_SIGNATURE[0], NTLMv2_BLOB_SIGNATURE[1],
            NTLMv2_BLOB_SIGNATURE[2], NTLMv2_BLOB_SIGNATURE[3],
            0, 0, 0, 0);

  Curl_write64_le(tw, ptr + 24);
  memcpy(ptr + 32, challenge_client, 8);
  memcpy(ptr + 44, ntlm->target_info, ntlm->target_info_len);

  /* Concatenate the Type 2 challenge with the BLOB and do HMAC MD5 */
  memcpy(ptr + 8, &ntlm->nonce[0], 8);
  result = Curl_hmacit(Curl_HMAC_MD5, ntlmv2hash, HMAC_MD5_LENGTH, ptr + 8,
                    NTLMv2_BLOB_LEN + 8, hmac_output);
  if(result) {
    free(ptr);
    return result;
  }

  /* Concatenate the HMAC MD5 output  with the BLOB */
  memcpy(ptr, hmac_output, HMAC_MD5_LENGTH);

  /* Return the response */
  *ntresp = ptr;
  *ntresp_len = len;

  return result;
}
741
742
743
744
745
746
747
748

749
750
751
752
753
754
755
  unsigned char data[16];
  unsigned char hmac_output[16];
  CURLcode result = CURLE_OK;

  memcpy(&data[0], challenge_server, 8);
  memcpy(&data[8], challenge_client, 8);

  result = hmac_md5(ntlmv2hash, 16, &data[0], 16, hmac_output);

  if(result)
    return result;

  /* Concatenate the HMAC MD5 output  with the client nonce */
  memcpy(lmresp, hmac_output, 16);
  memcpy(lmresp + 16, challenge_client, 8);








|
>







721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
  unsigned char data[16];
  unsigned char hmac_output[16];
  CURLcode result = CURLE_OK;

  memcpy(&data[0], challenge_server, 8);
  memcpy(&data[8], challenge_client, 8);

  result = Curl_hmacit(Curl_HMAC_MD5, ntlmv2hash, 16, &data[0], 16,
                       hmac_output);
  if(result)
    return result;

  /* Concatenate the HMAC MD5 output  with the client nonce */
  memcpy(lmresp, hmac_output, 16);
  memcpy(lmresp + 16, challenge_client, 8);

Changes to jni/curl/lib/curl_ntlm_core.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_NTLM_CORE_H
#define HEADER_CURL_NTLM_CORE_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_NTLM_CORE_H
#define HEADER_CURL_NTLM_CORE_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#endif

/* Define USE_NTRESPONSES in order to make the type-3 message include
 * the NT response message. */
#define USE_NTRESPONSES

/* Define USE_NTLM2SESSION in order to make the type-3 message include the
   NTLM2Session response message, requires USE_NTRESPONSES defined to 1 and a
   Crypto engine that we have curl_ssl_md5sum() for. */
#if defined(USE_NTRESPONSES) && \
  (!defined(USE_WIN32_CRYPTO) || \
  (defined(USE_SSL) && !defined(CURL_DISABLE_CRYPTO_AUTH)))
#define USE_NTLM2SESSION
#endif

/* Define USE_NTLM_V2 in order to allow the type-3 message to include the
   LMv2 and NTLMv2 response messages, requires USE_NTRESPONSES defined to 1
   and support for 64-bit integers. */
#if defined(USE_NTRESPONSES) && (CURL_SIZEOF_CURL_OFF_T > 4)







|
|
|
<
<







42
43
44
45
46
47
48
49
50
51


52
53
54
55
56
57
58
#endif

/* Define USE_NTRESPONSES in order to make the type-3 message include
 * the NT response message. */
#define USE_NTRESPONSES

/* Define USE_NTLM2SESSION in order to make the type-3 message include the
   NTLM2Session response message, requires USE_NTRESPONSES defined to 1 and
   MD5 support */
#if defined(USE_NTRESPONSES) && !defined(CURL_DISABLE_CRYPTO_AUTH)


#define USE_NTLM2SESSION
#endif

/* Define USE_NTLM_V2 in order to allow the type-3 message to include the
   LMv2 and NTLMv2 response messages, requires USE_NTRESPONSES defined to 1
   and support for 64-bit integers. */
#if defined(USE_NTRESPONSES) && (CURL_SIZEOF_CURL_OFF_T > 4)
Changes to jni/curl/lib/curl_ntlm_wb.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
#  define sclose_nolog(x)  closesocket((x))
#elif defined(HAVE_CLOSESOCKET_CAMEL)
#  define sclose_nolog(x)  CloseSocket((x))
#else
#  define sclose_nolog(x)  close((x))
#endif

void Curl_http_auth_cleanup_ntlm_wb(struct connectdata *conn)
{
  if(conn->ntlm_auth_hlpr_socket != CURL_SOCKET_BAD) {
    sclose(conn->ntlm_auth_hlpr_socket);
    conn->ntlm_auth_hlpr_socket = CURL_SOCKET_BAD;
  }

  if(conn->ntlm_auth_hlpr_pid) {
    int i;
    for(i = 0; i < 4; i++) {
      pid_t ret = waitpid(conn->ntlm_auth_hlpr_pid, NULL, WNOHANG);
      if(ret == conn->ntlm_auth_hlpr_pid || errno == ECHILD)
        break;
      switch(i) {
      case 0:
        kill(conn->ntlm_auth_hlpr_pid, SIGTERM);
        break;
      case 1:
        /* Give the process another moment to shut down cleanly before
           bringing down the axe */
        Curl_wait_ms(1);
        break;
      case 2:
        kill(conn->ntlm_auth_hlpr_pid, SIGKILL);
        break;
      case 3:
        break;
      }
    }
    conn->ntlm_auth_hlpr_pid = 0;
  }

  Curl_safefree(conn->challenge_header);
  Curl_safefree(conn->response_header);
}

static CURLcode ntlm_wb_init(struct connectdata *conn, const char *userp)

{
  curl_socket_t sockfds[2];
  pid_t child_pid;
  const char *username;
  char *slash, *domain = NULL;
  const char *ntlm_auth = NULL;
  char *ntlm_auth_alloc = NULL;
#if defined(HAVE_GETPWUID_R) && defined(HAVE_GETEUID)
  struct passwd pw, *pw_res;
  char pwbuf[1024];
#endif
  char buffer[STRERROR_LEN];





  /* Return if communication with ntlm_auth already set up */
  if(conn->ntlm_auth_hlpr_socket != CURL_SOCKET_BAD ||
     conn->ntlm_auth_hlpr_pid)
    return CURLE_OK;

  username = userp;
  /* The real ntlm_auth really doesn't like being invoked with an
     empty username. It won't make inferences for itself, and expects
     the client to do so (mostly because it's really designed for
     servers like squid to use for auth, and client support is an







|

|
|
|


|


|
|



|







|





|


|
|


|
>













>
>
>
>

|
|







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
#  define sclose_nolog(x)  closesocket((x))
#elif defined(HAVE_CLOSESOCKET_CAMEL)
#  define sclose_nolog(x)  CloseSocket((x))
#else
#  define sclose_nolog(x)  close((x))
#endif

static void ntlm_wb_cleanup(struct ntlmdata *ntlm)
{
  if(ntlm->ntlm_auth_hlpr_socket != CURL_SOCKET_BAD) {
    sclose(ntlm->ntlm_auth_hlpr_socket);
    ntlm->ntlm_auth_hlpr_socket = CURL_SOCKET_BAD;
  }

  if(ntlm->ntlm_auth_hlpr_pid) {
    int i;
    for(i = 0; i < 4; i++) {
      pid_t ret = waitpid(ntlm->ntlm_auth_hlpr_pid, NULL, WNOHANG);
      if(ret == ntlm->ntlm_auth_hlpr_pid || errno == ECHILD)
        break;
      switch(i) {
      case 0:
        kill(ntlm->ntlm_auth_hlpr_pid, SIGTERM);
        break;
      case 1:
        /* Give the process another moment to shut down cleanly before
           bringing down the axe */
        Curl_wait_ms(1);
        break;
      case 2:
        kill(ntlm->ntlm_auth_hlpr_pid, SIGKILL);
        break;
      case 3:
        break;
      }
    }
    ntlm->ntlm_auth_hlpr_pid = 0;
  }

  Curl_safefree(ntlm->challenge);
  Curl_safefree(ntlm->response);
}

static CURLcode ntlm_wb_init(struct Curl_easy *data, struct ntlmdata *ntlm,
                             const char *userp)
{
  curl_socket_t sockfds[2];
  pid_t child_pid;
  const char *username;
  char *slash, *domain = NULL;
  const char *ntlm_auth = NULL;
  char *ntlm_auth_alloc = NULL;
#if defined(HAVE_GETPWUID_R) && defined(HAVE_GETEUID)
  struct passwd pw, *pw_res;
  char pwbuf[1024];
#endif
  char buffer[STRERROR_LEN];

#if defined(CURL_DISABLE_VERBOSE_STRINGS)
  (void) data;
#endif

  /* Return if communication with ntlm_auth already set up */
  if(ntlm->ntlm_auth_hlpr_socket != CURL_SOCKET_BAD ||
     ntlm->ntlm_auth_hlpr_pid)
    return CURLE_OK;

  username = userp;
  /* The real ntlm_auth really doesn't like being invoked with an
     empty username. It won't make inferences for itself, and expects
     the client to do so (mostly because it's really designed for
     servers like squid to use for auth, and client support is an
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
  if(ntlm_auth_alloc)
    ntlm_auth = ntlm_auth_alloc;
  else
#endif
    ntlm_auth = NTLM_WB_FILE;

  if(access(ntlm_auth, X_OK) != 0) {
    failf(conn->data, "Could not access ntlm_auth: %s errno %d: %s",
          ntlm_auth, errno, Curl_strerror(errno, buffer, sizeof(buffer)));
    goto done;
  }

  if(socketpair(AF_UNIX, SOCK_STREAM, 0, sockfds)) {
    failf(conn->data, "Could not open socket pair. errno %d: %s",
          errno, Curl_strerror(errno, buffer, sizeof(buffer)));
    goto done;
  }

  child_pid = fork();
  if(child_pid == -1) {
    sclose(sockfds[0]);
    sclose(sockfds[1]);
    failf(conn->data, "Could not fork. errno %d: %s",
          errno, Curl_strerror(errno, buffer, sizeof(buffer)));
    goto done;
  }
  else if(!child_pid) {
    /*
     * child process
     */

    /* Don't use sclose in the child since it fools the socket leak detector */
    sclose_nolog(sockfds[0]);
    if(dup2(sockfds[1], STDIN_FILENO) == -1) {
      failf(conn->data, "Could not redirect child stdin. errno %d: %s",
            errno, Curl_strerror(errno, buffer, sizeof(buffer)));
      exit(1);
    }

    if(dup2(sockfds[1], STDOUT_FILENO) == -1) {
      failf(conn->data, "Could not redirect child stdout. errno %d: %s",
            errno, Curl_strerror(errno, buffer, sizeof(buffer)));
      exit(1);
    }

    if(domain)
      execl(ntlm_auth, ntlm_auth,
            "--helper-protocol", "ntlmssp-client-1",
            "--use-cached-creds",
            "--username", username,
            "--domain", domain,
            NULL);
    else
      execl(ntlm_auth, ntlm_auth,
            "--helper-protocol", "ntlmssp-client-1",
            "--use-cached-creds",
            "--username", username,
            NULL);

    sclose_nolog(sockfds[1]);
    failf(conn->data, "Could not execl(). errno %d: %s",
          errno, Curl_strerror(errno, buffer, sizeof(buffer)));
    exit(1);
  }

  sclose(sockfds[1]);
  conn->ntlm_auth_hlpr_socket = sockfds[0];
  conn->ntlm_auth_hlpr_pid = child_pid;
  free(domain);
  free(ntlm_auth_alloc);
  return CURLE_OK;

done:
  free(domain);
  free(ntlm_auth_alloc);
  return CURLE_REMOTE_ACCESS_DENIED;
}

/* if larger than this, something is seriously wrong */
#define MAX_NTLM_WB_RESPONSE 100000

static CURLcode ntlm_wb_response(struct connectdata *conn,
                                 const char *input, curlntlm state)
{
  char *buf = malloc(NTLM_BUFSIZE);
  size_t len_in = strlen(input), len_out = 0;





  if(!buf)
    return CURLE_OUT_OF_MEMORY;

  while(len_in > 0) {
    ssize_t written = swrite(conn->ntlm_auth_hlpr_socket, input, len_in);
    if(written == -1) {
      /* Interrupted by a signal, retry it */
      if(errno == EINTR)
        continue;
      /* write failed if other errors happen */
      goto done;
    }
    input += written;
    len_in -= written;
  }
  /* Read one line */
  while(1) {
    ssize_t size;
    char *newbuf;

    size = sread(conn->ntlm_auth_hlpr_socket, buf + len_out, NTLM_BUFSIZE);
    if(size == -1) {
      if(errno == EINTR)
        continue;
      goto done;
    }
    else if(size == 0)
      goto done;

    len_out += size;
    if(buf[len_out - 1] == '\n') {
      buf[len_out - 1] = '\0';
      break;
    }

    if(len_out > MAX_NTLM_WB_RESPONSE) {
      failf(conn->data, "too large ntlm_wb response!");
      free(buf);
      return CURLE_OUT_OF_MEMORY;
    }

    newbuf = Curl_saferealloc(buf, len_out + NTLM_BUFSIZE);
    if(!newbuf)
      return CURLE_OUT_OF_MEMORY;







|




|
|








|











|





|



















|





|
|













|




>
>
>
>





|















|















|







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
  if(ntlm_auth_alloc)
    ntlm_auth = ntlm_auth_alloc;
  else
#endif
    ntlm_auth = NTLM_WB_FILE;

  if(access(ntlm_auth, X_OK) != 0) {
    failf(data, "Could not access ntlm_auth: %s errno %d: %s",
          ntlm_auth, errno, Curl_strerror(errno, buffer, sizeof(buffer)));
    goto done;
  }

  if(Curl_socketpair(AF_UNIX, SOCK_STREAM, 0, sockfds)) {
    failf(data, "Could not open socket pair. errno %d: %s",
          errno, Curl_strerror(errno, buffer, sizeof(buffer)));
    goto done;
  }

  child_pid = fork();
  if(child_pid == -1) {
    sclose(sockfds[0]);
    sclose(sockfds[1]);
    failf(data, "Could not fork. errno %d: %s",
          errno, Curl_strerror(errno, buffer, sizeof(buffer)));
    goto done;
  }
  else if(!child_pid) {
    /*
     * child process
     */

    /* Don't use sclose in the child since it fools the socket leak detector */
    sclose_nolog(sockfds[0]);
    if(dup2(sockfds[1], STDIN_FILENO) == -1) {
      failf(data, "Could not redirect child stdin. errno %d: %s",
            errno, Curl_strerror(errno, buffer, sizeof(buffer)));
      exit(1);
    }

    if(dup2(sockfds[1], STDOUT_FILENO) == -1) {
      failf(data, "Could not redirect child stdout. errno %d: %s",
            errno, Curl_strerror(errno, buffer, sizeof(buffer)));
      exit(1);
    }

    if(domain)
      execl(ntlm_auth, ntlm_auth,
            "--helper-protocol", "ntlmssp-client-1",
            "--use-cached-creds",
            "--username", username,
            "--domain", domain,
            NULL);
    else
      execl(ntlm_auth, ntlm_auth,
            "--helper-protocol", "ntlmssp-client-1",
            "--use-cached-creds",
            "--username", username,
            NULL);

    sclose_nolog(sockfds[1]);
    failf(data, "Could not execl(). errno %d: %s",
          errno, Curl_strerror(errno, buffer, sizeof(buffer)));
    exit(1);
  }

  sclose(sockfds[1]);
  ntlm->ntlm_auth_hlpr_socket = sockfds[0];
  ntlm->ntlm_auth_hlpr_pid = child_pid;
  free(domain);
  free(ntlm_auth_alloc);
  return CURLE_OK;

done:
  free(domain);
  free(ntlm_auth_alloc);
  return CURLE_REMOTE_ACCESS_DENIED;
}

/* if larger than this, something is seriously wrong */
#define MAX_NTLM_WB_RESPONSE 100000

static CURLcode ntlm_wb_response(struct Curl_easy *data, struct ntlmdata *ntlm,
                                 const char *input, curlntlm state)
{
  char *buf = malloc(NTLM_BUFSIZE);
  size_t len_in = strlen(input), len_out = 0;

#if defined(CURL_DISABLE_VERBOSE_STRINGS)
  (void) data;
#endif

  if(!buf)
    return CURLE_OUT_OF_MEMORY;

  while(len_in > 0) {
    ssize_t written = swrite(ntlm->ntlm_auth_hlpr_socket, input, len_in);
    if(written == -1) {
      /* Interrupted by a signal, retry it */
      if(errno == EINTR)
        continue;
      /* write failed if other errors happen */
      goto done;
    }
    input += written;
    len_in -= written;
  }
  /* Read one line */
  while(1) {
    ssize_t size;
    char *newbuf;

    size = sread(ntlm->ntlm_auth_hlpr_socket, buf + len_out, NTLM_BUFSIZE);
    if(size == -1) {
      if(errno == EINTR)
        continue;
      goto done;
    }
    else if(size == 0)
      goto done;

    len_out += size;
    if(buf[len_out - 1] == '\n') {
      buf[len_out - 1] = '\0';
      break;
    }

    if(len_out > MAX_NTLM_WB_RESPONSE) {
      failf(data, "too large ntlm_wb response!");
      free(buf);
      return CURLE_OUT_OF_MEMORY;
    }

    newbuf = Curl_saferealloc(buf, len_out + NTLM_BUFSIZE);
    if(!newbuf)
      return CURLE_OUT_OF_MEMORY;
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
     (buf[0]!='Y' || buf[1]!='R' || buf[2]!=' '))
    goto done;
  if(state == NTLMSTATE_TYPE2 &&
     (buf[0]!='K' || buf[1]!='K' || buf[2]!=' ') &&
     (buf[0]!='A' || buf[1]!='F' || buf[2]!=' '))
    goto done;

  conn->response_header = aprintf("NTLM %.*s", len_out - 4, buf + 3);
  free(buf);
  if(!conn->response_header)
    return CURLE_OUT_OF_MEMORY;
  return CURLE_OK;
done:
  free(buf);
  return CURLE_REMOTE_ACCESS_DENIED;
}

CURLcode Curl_input_ntlm_wb(struct connectdata *conn,
                            bool proxy,
                            const char *header)
{

  curlntlm *state = proxy ? &conn->proxy_ntlm_state : &conn->http_ntlm_state;

  if(!checkprefix("NTLM", header))
    return CURLE_BAD_CONTENT_ENCODING;

  header += strlen("NTLM");
  while(*header && ISSPACE(*header))
    header++;

  if(*header) {
    conn->challenge_header = strdup(header);
    if(!conn->challenge_header)
      return CURLE_OUT_OF_MEMORY;

    *state = NTLMSTATE_TYPE2; /* We got a type-2 message */
  }
  else {
    if(*state == NTLMSTATE_LAST) {
      infof(conn->data, "NTLM auth restarted\n");







|

|











>










|
|







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
     (buf[0]!='Y' || buf[1]!='R' || buf[2]!=' '))
    goto done;
  if(state == NTLMSTATE_TYPE2 &&
     (buf[0]!='K' || buf[1]!='K' || buf[2]!=' ') &&
     (buf[0]!='A' || buf[1]!='F' || buf[2]!=' '))
    goto done;

  ntlm->response = aprintf("%.*s", len_out - 4, buf + 3);
  free(buf);
  if(!ntlm->response)
    return CURLE_OUT_OF_MEMORY;
  return CURLE_OK;
done:
  free(buf);
  return CURLE_REMOTE_ACCESS_DENIED;
}

CURLcode Curl_input_ntlm_wb(struct connectdata *conn,
                            bool proxy,
                            const char *header)
{
  struct ntlmdata *ntlm = proxy ? &conn->proxyntlm : &conn->ntlm;
  curlntlm *state = proxy ? &conn->proxy_ntlm_state : &conn->http_ntlm_state;

  if(!checkprefix("NTLM", header))
    return CURLE_BAD_CONTENT_ENCODING;

  header += strlen("NTLM");
  while(*header && ISSPACE(*header))
    header++;

  if(*header) {
    ntlm->challenge = strdup(header);
    if(!ntlm->challenge)
      return CURLE_OUT_OF_MEMORY;

    *state = NTLMSTATE_TYPE2; /* We got a type-2 message */
  }
  else {
    if(*state == NTLMSTATE_LAST) {
      infof(conn->data, "NTLM auth restarted\n");
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
                              bool proxy)
{
  /* point to the address of the pointer that holds the string to send to the
     server, which is for a plain host or for a HTTP proxy */
  char **allocuserpwd;
  /* point to the name and password for this */
  const char *userp;

  curlntlm *state;
  struct auth *authp;

  CURLcode res = CURLE_OK;

  DEBUGASSERT(conn);
  DEBUGASSERT(conn->data);

  if(proxy) {
    allocuserpwd = &conn->allocptr.proxyuserpwd;
    userp = conn->http_proxy.user;

    state = &conn->proxy_ntlm_state;
    authp = &conn->data->state.authproxy;
  }
  else {
    allocuserpwd = &conn->allocptr.userpwd;
    userp = conn->user;

    state = &conn->http_ntlm_state;
    authp = &conn->data->state.authhost;
  }
  authp->done = FALSE;

  /* not set means empty */
  if(!userp)







>











>






>







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
                              bool proxy)
{
  /* point to the address of the pointer that holds the string to send to the
     server, which is for a plain host or for a HTTP proxy */
  char **allocuserpwd;
  /* point to the name and password for this */
  const char *userp;
  struct ntlmdata *ntlm;
  curlntlm *state;
  struct auth *authp;

  CURLcode res = CURLE_OK;

  DEBUGASSERT(conn);
  DEBUGASSERT(conn->data);

  if(proxy) {
    allocuserpwd = &conn->allocptr.proxyuserpwd;
    userp = conn->http_proxy.user;
    ntlm = &conn->proxyntlm;
    state = &conn->proxy_ntlm_state;
    authp = &conn->data->state.authproxy;
  }
  else {
    allocuserpwd = &conn->allocptr.userpwd;
    userp = conn->user;
    ntlm = &conn->ntlm;
    state = &conn->http_ntlm_state;
    authp = &conn->data->state.authhost;
  }
  authp->done = FALSE;

  /* not set means empty */
  if(!userp)
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
     * Preprocessor symbol 'NTLM_WB_ENABLED' is defined when this
     * feature is enabled and 'NTLM_WB_FILE' symbol holds absolute
     * filename of ntlm_auth helper.
     * If NTLM authentication using winbind fails, go back to original
     * request handling process.
     */
    /* Create communication with ntlm_auth */
    res = ntlm_wb_init(conn, userp);
    if(res)
      return res;
    res = ntlm_wb_response(conn, "YR\n", *state);
    if(res)
      return res;

    free(*allocuserpwd);
    *allocuserpwd = aprintf("%sAuthorization: %s\r\n",
                            proxy ? "Proxy-" : "",
                            conn->response_header);
    DEBUG_OUT(fprintf(stderr, "**** Header %s\n ", *allocuserpwd));
    Curl_safefree(conn->response_header);
    if(!*allocuserpwd)
      return CURLE_OUT_OF_MEMORY;
    break;

  case NTLMSTATE_TYPE2: {
    char *input = aprintf("TT %s\n", conn->challenge_header);
    if(!input)
      return CURLE_OUT_OF_MEMORY;
    res = ntlm_wb_response(conn, input, *state);
    free(input);
    if(res)
      return res;

    free(*allocuserpwd);
    *allocuserpwd = aprintf("%sAuthorization: %s\r\n",
                            proxy ? "Proxy-" : "",
                            conn->response_header);
    DEBUG_OUT(fprintf(stderr, "**** %s\n ", *allocuserpwd));
    *state = NTLMSTATE_TYPE3; /* we sent a type-3 */
    authp->done = TRUE;
    Curl_http_auth_cleanup_ntlm_wb(conn);
    if(!*allocuserpwd)
      return CURLE_OUT_OF_MEMORY;
    break;







|


|




|

|

|





|


|





|

|







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
     * Preprocessor symbol 'NTLM_WB_ENABLED' is defined when this
     * feature is enabled and 'NTLM_WB_FILE' symbol holds absolute
     * filename of ntlm_auth helper.
     * If NTLM authentication using winbind fails, go back to original
     * request handling process.
     */
    /* Create communication with ntlm_auth */
    res = ntlm_wb_init(conn->data, ntlm, userp);
    if(res)
      return res;
    res = ntlm_wb_response(conn->data, ntlm, "YR\n", *state);
    if(res)
      return res;

    free(*allocuserpwd);
    *allocuserpwd = aprintf("%sAuthorization: NTLM %s\r\n",
                            proxy ? "Proxy-" : "",
                            ntlm->response);
    DEBUG_OUT(fprintf(stderr, "**** Header %s\n ", *allocuserpwd));
    Curl_safefree(ntlm->response);
    if(!*allocuserpwd)
      return CURLE_OUT_OF_MEMORY;
    break;

  case NTLMSTATE_TYPE2: {
    char *input = aprintf("TT %s\n", ntlm->challenge);
    if(!input)
      return CURLE_OUT_OF_MEMORY;
    res = ntlm_wb_response(conn->data, ntlm, input, *state);
    free(input);
    if(res)
      return res;

    free(*allocuserpwd);
    *allocuserpwd = aprintf("%sAuthorization: NTLM %s\r\n",
                            proxy ? "Proxy-" : "",
                            ntlm->response);
    DEBUG_OUT(fprintf(stderr, "**** %s\n ", *allocuserpwd));
    *state = NTLMSTATE_TYPE3; /* we sent a type-3 */
    authp->done = TRUE;
    Curl_http_auth_cleanup_ntlm_wb(conn);
    if(!*allocuserpwd)
      return CURLE_OUT_OF_MEMORY;
    break;
476
477
478
479
480
481
482
483






484
    Curl_safefree(*allocuserpwd);
    authp->done = TRUE;
    break;
  }

  return CURLE_OK;
}







#endif /* !CURL_DISABLE_HTTP && USE_NTLM && NTLM_WB_ENABLED */








>
>
>
>
>
>

489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
    Curl_safefree(*allocuserpwd);
    authp->done = TRUE;
    break;
  }

  return CURLE_OK;
}

void Curl_http_auth_cleanup_ntlm_wb(struct connectdata *conn)
{
  ntlm_wb_cleanup(&conn->ntlm);
  ntlm_wb_cleanup(&conn->proxyntlm);
}

#endif /* !CURL_DISABLE_HTTP && USE_NTLM && NTLM_WB_ENABLED */
Changes to jni/curl/lib/curl_sasl.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2012 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2012 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
268
269
270
271
272
273
274

275
276
277
278
279
280
281
    conn->host.name;
  const long int port = SSL_IS_PROXY() ? conn->port : conn->remote_port;
#if defined(USE_KERBEROS5) || defined(USE_NTLM)
  const char *service = data->set.str[STRING_SERVICE_NAME] ?
    data->set.str[STRING_SERVICE_NAME] :
    sasl->params->service;
#endif


  sasl->force_ir = force_ir;    /* Latch for future use */
  sasl->authused = 0;           /* No mechanism used yet */
  enabledmechs = sasl->authmechs & sasl->prefmech;
  *progress = SASL_IDLE;

  /* Calculate the supported authentication mechanism, by decreasing order of







>







268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
    conn->host.name;
  const long int port = SSL_IS_PROXY() ? conn->port : conn->remote_port;
#if defined(USE_KERBEROS5) || defined(USE_NTLM)
  const char *service = data->set.str[STRING_SERVICE_NAME] ?
    data->set.str[STRING_SERVICE_NAME] :
    sasl->params->service;
#endif
  const char *oauth_bearer = data->set.str[STRING_BEARER];

  sasl->force_ir = force_ir;    /* Latch for future use */
  sasl->authused = 0;           /* No mechanism used yet */
  enabledmechs = sasl->authmechs & sasl->prefmech;
  *progress = SASL_IDLE;

  /* Calculate the supported authentication mechanism, by decreasing order of
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
                                                     service,
                                                     hostname,
                                                     &conn->ntlm, &resp,
                                                     &len);
      }
    else
#endif
    if((enabledmechs & SASL_MECH_OAUTHBEARER) && conn->oauth_bearer) {
      mech = SASL_MECH_STRING_OAUTHBEARER;
      state1 = SASL_OAUTH2;
      state2 = SASL_OAUTH2_RESP;
      sasl->authused = SASL_MECH_OAUTHBEARER;

      if(force_ir || data->set.sasl_ir)
        result = Curl_auth_create_oauth_bearer_message(data, conn->user,
                                                       hostname,
                                                       port,
                                                       conn->oauth_bearer,
                                                       &resp, &len);
    }
    else if((enabledmechs & SASL_MECH_XOAUTH2) && conn->oauth_bearer) {
      mech = SASL_MECH_STRING_XOAUTH2;
      state1 = SASL_OAUTH2;
      sasl->authused = SASL_MECH_XOAUTH2;

      if(force_ir || data->set.sasl_ir)
        result = Curl_auth_create_xoauth_bearer_message(data, conn->user,
                                                        conn->oauth_bearer,
                                                        &resp, &len);
    }
    else if(enabledmechs & SASL_MECH_PLAIN) {
      mech = SASL_MECH_STRING_PLAIN;
      state1 = SASL_PLAIN;
      sasl->authused = SASL_MECH_PLAIN;








|









|


|






|







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
                                                     service,
                                                     hostname,
                                                     &conn->ntlm, &resp,
                                                     &len);
      }
    else
#endif
    if((enabledmechs & SASL_MECH_OAUTHBEARER) && oauth_bearer) {
      mech = SASL_MECH_STRING_OAUTHBEARER;
      state1 = SASL_OAUTH2;
      state2 = SASL_OAUTH2_RESP;
      sasl->authused = SASL_MECH_OAUTHBEARER;

      if(force_ir || data->set.sasl_ir)
        result = Curl_auth_create_oauth_bearer_message(data, conn->user,
                                                       hostname,
                                                       port,
                                                       oauth_bearer,
                                                       &resp, &len);
    }
    else if((enabledmechs & SASL_MECH_XOAUTH2) && oauth_bearer) {
      mech = SASL_MECH_STRING_XOAUTH2;
      state1 = SASL_OAUTH2;
      sasl->authused = SASL_MECH_XOAUTH2;

      if(force_ir || data->set.sasl_ir)
        result = Curl_auth_create_xoauth_bearer_message(data, conn->user,
                                                        oauth_bearer,
                                                        &resp, &len);
    }
    else if(enabledmechs & SASL_MECH_PLAIN) {
      mech = SASL_MECH_STRING_PLAIN;
      state1 = SASL_PLAIN;
      sasl->authused = SASL_MECH_PLAIN;

427
428
429
430
431
432
433

434
435
436
437
438
439
440
    defined(USE_NTLM)
  const char *service = data->set.str[STRING_SERVICE_NAME] ?
                        data->set.str[STRING_SERVICE_NAME] :
                        sasl->params->service;
  char *serverdata;
#endif
  size_t len = 0;


  *progress = SASL_INPROGRESS;

  if(sasl->state == SASL_FINAL) {
    if(code != sasl->params->finalcode)
      result = CURLE_LOGIN_DENIED;
    *progress = SASL_DONE;







>







428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
    defined(USE_NTLM)
  const char *service = data->set.str[STRING_SERVICE_NAME] ?
                        data->set.str[STRING_SERVICE_NAME] :
                        sasl->params->service;
  char *serverdata;
#endif
  size_t len = 0;
  const char *oauth_bearer = data->set.str[STRING_BEARER];

  *progress = SASL_INPROGRESS;

  if(sasl->state == SASL_FINAL) {
    if(code != sasl->params->finalcode)
      result = CURLE_LOGIN_DENIED;
    *progress = SASL_DONE;
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576

  case SASL_OAUTH2:
    /* Create the authorisation message */
    if(sasl->authused == SASL_MECH_OAUTHBEARER) {
      result = Curl_auth_create_oauth_bearer_message(data, conn->user,
                                                     hostname,
                                                     port,
                                                     conn->oauth_bearer,
                                                     &resp, &len);

      /* Failures maybe sent by the server as continuations for OAUTHBEARER */
      newstate = SASL_OAUTH2_RESP;
    }
    else
      result = Curl_auth_create_xoauth_bearer_message(data, conn->user,
                                                      conn->oauth_bearer,
                                                      &resp, &len);
    break;

  case SASL_OAUTH2_RESP:
    /* The continuation is optional so check the response code */
    if(code == sasl->params->finalcode) {
      /* Final response was received so we are done */







|







|







556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578

  case SASL_OAUTH2:
    /* Create the authorisation message */
    if(sasl->authused == SASL_MECH_OAUTHBEARER) {
      result = Curl_auth_create_oauth_bearer_message(data, conn->user,
                                                     hostname,
                                                     port,
                                                     oauth_bearer,
                                                     &resp, &len);

      /* Failures maybe sent by the server as continuations for OAUTHBEARER */
      newstate = SASL_OAUTH2_RESP;
    }
    else
      result = Curl_auth_create_xoauth_bearer_message(data, conn->user,
                                                      oauth_bearer,
                                                      &resp, &len);
    break;

  case SASL_OAUTH2_RESP:
    /* The continuation is optional so check the response code */
    if(code == sasl->params->finalcode) {
      /* Final response was received so we are done */
Changes to jni/curl/lib/curl_sha256.h.
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
#ifndef HEADER_CURL_SHA256_H
#define HEADER_CURL_SHA256_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Florin Petriuc, <petriuc.florin@gmail.com>

 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#ifndef CURL_DISABLE_CRYPTO_AUTH



void Curl_sha256it(unsigned char *outbuffer,
                const unsigned char *input);

#endif

#endif /* HEADER_CURL_SHA256_H */









|
>
















>
>
|
|




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
#ifndef HEADER_CURL_SHA256_H
#define HEADER_CURL_SHA256_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2017, Florin Petriuc, <petriuc.florin@gmail.com>
 * Copyright (C) 2018 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#ifndef CURL_DISABLE_CRYPTO_AUTH

#define SHA256_DIGEST_LENGTH 32

void Curl_sha256it(unsigned char *outbuffer, const unsigned char *input,
                   const size_t len);

#endif

#endif /* HEADER_CURL_SHA256_H */
Changes to jni/curl/lib/doh.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2018 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2018 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
    length = doh[index];
    if((length & 0xc0) == 0xc0) {
      int newpos;
      /* name pointer, get the new offset (14 bits) */
      if((index + 1) >= dohlen)
        return DOH_DNS_OUT_OF_RANGE;

      /* move to the the new index */
      newpos = (length & 0x3f) << 8 | doh[index + 1];
      index = newpos;
      continue;
    }
    else if(length & 0xc0)
      return DOH_DNS_BAD_LABEL; /* bad input */
    else







|







544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
    length = doh[index];
    if((length & 0xc0) == 0xc0) {
      int newpos;
      /* name pointer, get the new offset (14 bits) */
      if((index + 1) >= dohlen)
        return DOH_DNS_OUT_OF_RANGE;

      /* move to the new index */
      newpos = (length & 0x3f) << 8 | doh[index + 1];
      index = newpos;
      continue;
    }
    else if(length & 0xc0)
      return DOH_DNS_BAD_LABEL; /* bad input */
    else
Changes to jni/curl/lib/easy.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
72
73
74
75
76
77
78

79
80
81
82
83
84
85
#include "warnless.h"
#include "multiif.h"
#include "sigpipe.h"
#include "vssh/ssh.h"
#include "setopt.h"
#include "http_digest.h"
#include "system_win32.h"


/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

void Curl_version_init(void);







>







72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include "warnless.h"
#include "multiif.h"
#include "sigpipe.h"
#include "vssh/ssh.h"
#include "setopt.h"
#include "http_digest.h"
#include "system_win32.h"
#include "http2.h"

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

void Curl_version_init(void);
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195



196
197


198
199
200
201
202
203
204
#endif

  if(Curl_resolver_global_init()) {
    DEBUGF(fprintf(stderr, "Error: resolver_global_init failed\n"));
    goto fail;
  }

  (void)Curl_ipv6works();

#if defined(USE_SSH)
  if(Curl_ssh_init()) {
    goto fail;
  }
#endif




  if(flags & CURL_GLOBAL_ACK_EINTR)
    Curl_ack_eintr = 1;



  init_flags = flags;

  Curl_version_init();

  return CURLE_OK;








<
<






>
>
>
|
<
>
>







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
#endif

  if(Curl_resolver_global_init()) {
    DEBUGF(fprintf(stderr, "Error: resolver_global_init failed\n"));
    goto fail;
  }



#if defined(USE_SSH)
  if(Curl_ssh_init()) {
    goto fail;
  }
#endif

#ifdef USE_WOLFSSH
  if(WS_SUCCESS != wolfSSH_Init()) {
    DEBUGF(fprintf(stderr, "Error: wolfSSH_Init failed\n"));
    return CURLE_FAILED_INIT;

  }
#endif

  init_flags = flags;

  Curl_version_init();

  return CURLE_OK;

267
268
269
270
271
272
273




274
275
276
277
278
279
280
#ifdef WIN32
  Curl_win32_cleanup(init_flags);
#endif

  Curl_amiga_cleanup();

  Curl_ssh_cleanup();





  init_flags  = 0;
}

/*
 * curl_easy_init() is the external interface to alloc, setup and init an
 * easy handle that is returned. If anything goes wrong, NULL is returned.







>
>
>
>







270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
#ifdef WIN32
  Curl_win32_cleanup(init_flags);
#endif

  Curl_amiga_cleanup();

  Curl_ssh_cleanup();

#ifdef USE_WOLFSSH
  (void)wolfSSH_Cleanup();
#endif

  init_flags  = 0;
}

/*
 * curl_easy_init() is the external interface to alloc, setup and init an
 * easy handle that is returned. If anything goes wrong, NULL is returned.
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
    if(mcode == CURLM_OUT_OF_MEMORY)
      return CURLE_OUT_OF_MEMORY;
    return CURLE_FAILED_INIT;
  }

  sigpipe_ignore(data, &pipe_st);

  /* assign this after curl_multi_add_handle() since that function checks for
     it and rejects this handle otherwise */
  data->multi = multi;

  /* run the transfer */
  result = events ? easy_events(multi) : easy_transfer(multi);

  /* ignoring the return code isn't nice, but atm we can't really handle
     a failure here, room for future improvement! */
  (void)curl_multi_remove_handle(multi, data);








<
<
<
<







687
688
689
690
691
692
693




694
695
696
697
698
699
700
    if(mcode == CURLM_OUT_OF_MEMORY)
      return CURLE_OUT_OF_MEMORY;
    return CURLE_FAILED_INIT;
  }

  sigpipe_ignore(data, &pipe_st);





  /* run the transfer */
  result = events ? easy_events(multi) : easy_transfer(multi);

  /* ignoring the return code isn't nice, but atm we can't really handle
     a failure here, room for future improvement! */
  (void)curl_multi_remove_handle(multi, data);

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
1024
1025
1026
1027
1028

1029
1030
1031
1032
1033
1034
1035
  /* set the new desired pause bits */
  newstate |= ((action & CURLPAUSE_RECV)?KEEP_RECV_PAUSE:0) |
    ((action & CURLPAUSE_SEND)?KEEP_SEND_PAUSE:0);

  /* put it back in the keepon */
  k->keepon = newstate;

  if(!(newstate & KEEP_RECV_PAUSE) && data->state.tempcount) {



    /* there are buffers for sending that can be delivered as the receive
       pausing is lifted! */
    unsigned int i;
    unsigned int count = data->state.tempcount;
    struct tempbuf writebuf[3]; /* there can only be three */
    struct connectdata *conn = data->conn;
    struct Curl_easy *saved_data = NULL;

    /* copy the structs to allow for immediate re-pausing */
    for(i = 0; i < data->state.tempcount; i++) {
      writebuf[i] = data->state.tempwrite[i];
      data->state.tempwrite[i].buf = NULL;
    }
    data->state.tempcount = 0;

    /* set the connection's current owner */
    if(conn->data != data) {
      saved_data = conn->data;
      conn->data = data;
    }

    for(i = 0; i < count; i++) {
      /* even if one function returns error, this loops through and frees all
         buffers */
      if(!result)
        result = Curl_client_write(conn, writebuf[i].type, writebuf[i].buf,
                                   writebuf[i].len);
      free(writebuf[i].buf);
    }

    /* recover previous owner of the connection */
    if(saved_data)
      conn->data = saved_data;

    if(result)
      return result;

  }

  /* if there's no error and we're not pausing both directions, we want
     to have this handle checked soon */
  if((newstate & (KEEP_RECV_PAUSE|KEEP_SEND_PAUSE)) !=
     (KEEP_RECV_PAUSE|KEEP_SEND_PAUSE)) {

    Curl_expire(data, 0, EXPIRE_RUN_NOW); /* get this handle going again */
    if(data->multi)
      Curl_update_timer(data->multi);
  }

  if(!data->state.done)
    /* This transfer may have been moved in or out of the bundle, update the







|
>
>
>
|
|
|
|
|
|
|

|
|
|
|
|
|

|
|
|
|
|

|
|
|
|
|
|
|
|

|
|
|

|
|
>






>







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
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
  /* set the new desired pause bits */
  newstate |= ((action & CURLPAUSE_RECV)?KEEP_RECV_PAUSE:0) |
    ((action & CURLPAUSE_SEND)?KEEP_SEND_PAUSE:0);

  /* put it back in the keepon */
  k->keepon = newstate;

  if(!(newstate & KEEP_RECV_PAUSE)) {
    Curl_http2_stream_pause(data, FALSE);

    if(data->state.tempcount) {
      /* there are buffers for sending that can be delivered as the receive
         pausing is lifted! */
      unsigned int i;
      unsigned int count = data->state.tempcount;
      struct tempbuf writebuf[3]; /* there can only be three */
      struct connectdata *conn = data->conn;
      struct Curl_easy *saved_data = NULL;

      /* copy the structs to allow for immediate re-pausing */
      for(i = 0; i < data->state.tempcount; i++) {
        writebuf[i] = data->state.tempwrite[i];
        data->state.tempwrite[i].buf = NULL;
      }
      data->state.tempcount = 0;

      /* set the connection's current owner */
      if(conn->data != data) {
        saved_data = conn->data;
        conn->data = data;
      }

      for(i = 0; i < count; i++) {
        /* even if one function returns error, this loops through and frees
           all buffers */
        if(!result)
          result = Curl_client_write(conn, writebuf[i].type, writebuf[i].buf,
                                     writebuf[i].len);
        free(writebuf[i].buf);
      }

      /* recover previous owner of the connection */
      if(saved_data)
        conn->data = saved_data;

      if(result)
        return result;
    }
  }

  /* if there's no error and we're not pausing both directions, we want
     to have this handle checked soon */
  if((newstate & (KEEP_RECV_PAUSE|KEEP_SEND_PAUSE)) !=
     (KEEP_RECV_PAUSE|KEEP_SEND_PAUSE)) {
    data->state.drain++;
    Curl_expire(data, 0, EXPIRE_RUN_NOW); /* get this handle going again */
    if(data->multi)
      Curl_update_timer(data->multi);
  }

  if(!data->state.done)
    /* This transfer may have been moved in or out of the bundle, update the
Changes to jni/curl/lib/formdata.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
Changes to jni/curl/lib/ftp.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "sendf.h"
#include "if2ip.h"
#include "hostip.h"
#include "progress.h"
#include "transfer.h"
#include "escape.h"
#include "http.h" /* for HTTP proxy tunnel stuff */
#include "socks.h"
#include "ftp.h"
#include "fileinfo.h"
#include "ftplistparser.h"
#include "curl_range.h"
#include "curl_sec.h"
#include "strtoofft.h"
#include "strcase.h"







<







51
52
53
54
55
56
57

58
59
60
61
62
63
64
#include "sendf.h"
#include "if2ip.h"
#include "hostip.h"
#include "progress.h"
#include "transfer.h"
#include "escape.h"
#include "http.h" /* for HTTP proxy tunnel stuff */

#include "ftp.h"
#include "fileinfo.h"
#include "ftplistparser.h"
#include "curl_range.h"
#include "curl_sec.h"
#include "strtoofft.h"
#include "strcase.h"
74
75
76
77
78
79
80

81
82
83
84
85
86
87
#include "multiif.h"
#include "url.h"
#include "strcase.h"
#include "speedcheck.h"
#include "warnless.h"
#include "http_proxy.h"
#include "non-ascii.h"

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

#ifndef NI_MAXHOST
#define NI_MAXHOST 1025







>







73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include "multiif.h"
#include "url.h"
#include "strcase.h"
#include "speedcheck.h"
#include "warnless.h"
#include "http_proxy.h"
#include "non-ascii.h"
#include "socks.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

#ifndef NI_MAXHOST
#define NI_MAXHOST 1025
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
  }
  Curl_safefree(ftpc->file);

  /* no longer of any use */
  Curl_safefree(ftpc->newhost);
}

/* Returns non-zero if the given string contains CR (\r) or LF (\n),
   which are not allowed within RFC 959 <string>.
   Note: The input string is in the client's encoding which might
   not be ASCII, so escape sequences \r & \n must be used instead
   of hex values 0x0d & 0x0a.
*/
static bool isBadFtpString(const char *string)
{
  return ((NULL != strchr(string, '\r')) ||
          (NULL != strchr(string, '\n'))) ? TRUE : FALSE;
}

/***********************************************************************
 *
 * AcceptServerConnect()
 *
 * After connection request is received from the server this function is
 * called to accept the connection and close the listening socket
 *







<
<
<
<
<
<
<
<
<
<
<
<







249
250
251
252
253
254
255












256
257
258
259
260
261
262
  }
  Curl_safefree(ftpc->file);

  /* no longer of any use */
  Curl_safefree(ftpc->newhost);
}













/***********************************************************************
 *
 * AcceptServerConnect()
 *
 * After connection request is received from the server this function is
 * called to accept the connection and close the listening socket
 *
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
  infof(data, "Connection accepted from server\n");
  /* when this happens within the DO state it is important that we mark us as
     not needing DO_MORE anymore */
  conn->bits.do_more = FALSE;

  conn->sock[SECONDARYSOCKET] = s;
  (void)curlx_nonblock(s, TRUE); /* enable non-blocking */
  conn->sock_accepted[SECONDARYSOCKET] = TRUE;

  if(data->set.fsockopt) {
    int error = 0;

    /* activate callback for setting socket options */
    Curl_set_in_callback(data, true);
    error = data->set.fsockopt(data->set.sockopt_client,







|







287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
  infof(data, "Connection accepted from server\n");
  /* when this happens within the DO state it is important that we mark us as
     not needing DO_MORE anymore */
  conn->bits.do_more = FALSE;

  conn->sock[SECONDARYSOCKET] = s;
  (void)curlx_nonblock(s, TRUE); /* enable non-blocking */
  conn->sock_accepted = TRUE;

  if(data->set.fsockopt) {
    int error = 0;

    /* activate callback for setting socket options */
    Curl_set_in_callback(data, true);
    error = data->set.fsockopt(data->set.sockopt_client,
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797

  ftpc->state = newstate;
}

static CURLcode ftp_state_user(struct connectdata *conn)
{
  CURLcode result;
  struct FTP *ftp = conn->data->req.protop;
  /* send USER */
  PPSENDF(&conn->proto.ftpc.pp, "USER %s", ftp->user?ftp->user:"");

  state(conn, FTP_USER);
  conn->data->state.ftp_trying_alternative = FALSE;

  return CURLE_OK;
}








<

|







769
770
771
772
773
774
775

776
777
778
779
780
781
782
783
784

  ftpc->state = newstate;
}

static CURLcode ftp_state_user(struct connectdata *conn)
{
  CURLcode result;

  /* send USER */
  PPSENDF(&conn->proto.ftpc.pp, "USER %s", conn->user?conn->user:"");

  state(conn, FTP_USER);
  conn->data->state.ftp_trying_alternative = FALSE;

  return CURLE_OK;
}

819
820
821
822
823
824
825



826
827
828
829
830
831
832
  struct ftp_conn *ftpc = &conn->proto.ftpc;

  /* When in DO_MORE state, we could be either waiting for us to connect to a
   * remote site, or we could wait for that site to connect to us. Or just
   * handle ordinary commands.
   */




  if(FTP_STOP == ftpc->state) {
    int bits = GETSOCK_READSOCK(0);

    /* if stopped and still in this state, then we're also waiting for a
       connect on the secondary connection */
    socks[0] = conn->sock[FIRSTSOCKET];








>
>
>







806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
  struct ftp_conn *ftpc = &conn->proto.ftpc;

  /* When in DO_MORE state, we could be either waiting for us to connect to a
   * remote site, or we could wait for that site to connect to us. Or just
   * handle ordinary commands.
   */

  if(SOCKS_STATE(conn->cnnct.state))
    return Curl_SOCKS_getsock(conn, socks, SECONDARYSOCKET);

  if(FTP_STOP == ftpc->state) {
    int bits = GETSOCK_READSOCK(0);

    /* if stopped and still in this state, then we're also waiting for a
       connect on the secondary connection */
    socks[0] = conn->sock[FIRSTSOCKET];

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
                                   ftpport fcmd) /* start with this */

{
  CURLcode result = CURLE_OK;
  struct ftp_conn *ftpc = &conn->proto.ftpc;
  struct Curl_easy *data = conn->data;
  curl_socket_t portsock = CURL_SOCKET_BAD;
  char myhost[256] = "";

  struct Curl_sockaddr_storage ss;
  Curl_addrinfo *res, *ai;
  curl_socklen_t sslen;
  char hbuf[NI_MAXHOST];
  struct sockaddr *sa = (struct sockaddr *)&ss;
  struct sockaddr_in * const sa4 = (void *)sa;
#ifdef ENABLE_IPV6
  struct sockaddr_in6 * const sa6 = (void *)sa;
#endif
  char tmp[1024];
  static const char mode[][5] = { "EPRT", "PORT" };
  int rc;
  int error;
  char *host = NULL;
  char *string_ftpport = data->set.str[STRING_FTPPORT];
  struct Curl_dns_entry *h = NULL;
  unsigned short port_min = 0;
  unsigned short port_max = 0;
  unsigned short port;







|










<

|







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
                                   ftpport fcmd) /* start with this */

{
  CURLcode result = CURLE_OK;
  struct ftp_conn *ftpc = &conn->proto.ftpc;
  struct Curl_easy *data = conn->data;
  curl_socket_t portsock = CURL_SOCKET_BAD;
  char myhost[MAX_IPADR_LEN + 1] = "";

  struct Curl_sockaddr_storage ss;
  Curl_addrinfo *res, *ai;
  curl_socklen_t sslen;
  char hbuf[NI_MAXHOST];
  struct sockaddr *sa = (struct sockaddr *)&ss;
  struct sockaddr_in * const sa4 = (void *)sa;
#ifdef ENABLE_IPV6
  struct sockaddr_in6 * const sa6 = (void *)sa;
#endif

  static const char mode[][5] = { "EPRT", "PORT" };
  enum resolve_t rc;
  int error;
  char *host = NULL;
  char *string_ftpport = data->set.str[STRING_FTPPORT];
  struct Curl_dns_entry *h = NULL;
  unsigned short port_min = 0;
  unsigned short port_max = 0;
  unsigned short port;
1242
1243
1244
1245
1246
1247
1248


1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
        /* bail out */
        state(conn, FTP_STOP);
        return result;
      }
      break;
    }
    if(PORT == fcmd) {


      char *source = myhost;
      char *dest = tmp;

      /* translate x.x.x.x to x,x,x,x */
      while(source && *source) {
        if(*source == '.')
          *dest = ',';
        else
          *dest = *source;
        dest++;
        source++;
      }
      *dest = 0;
      msnprintf(dest, 20, ",%d,%d", (int)(port>>8), (int)(port&0xff));

      result = Curl_pp_sendf(&ftpc->pp, "%s %s", mode[fcmd], tmp);
      if(result) {
        failf(data, "Failure sending PORT command: %s",
              curl_easy_strerror(result));
        Curl_closesocket(conn, portsock);
        /* bail out */
        state(conn, FTP_STOP);
        return result;







>
>

|













|







1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
        /* bail out */
        state(conn, FTP_STOP);
        return result;
      }
      break;
    }
    if(PORT == fcmd) {
      /* large enough for [IP address],[num],[num] */
      char target[sizeof(myhost) + 20];
      char *source = myhost;
      char *dest = target;

      /* translate x.x.x.x to x,x,x,x */
      while(source && *source) {
        if(*source == '.')
          *dest = ',';
        else
          *dest = *source;
        dest++;
        source++;
      }
      *dest = 0;
      msnprintf(dest, 20, ",%d,%d", (int)(port>>8), (int)(port&0xff));

      result = Curl_pp_sendf(&ftpc->pp, "%s %s", mode[fcmd], target);
      if(result) {
        failf(data, "Failure sending PORT command: %s",
              curl_easy_strerror(result));
        Curl_closesocket(conn, portsock);
        /* bail out */
        state(conn, FTP_STOP);
        return result;
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
static CURLcode ftp_state_pasv_resp(struct connectdata *conn,
                                    int ftpcode)
{
  struct ftp_conn *ftpc = &conn->proto.ftpc;
  CURLcode result;
  struct Curl_easy *data = conn->data;
  struct Curl_dns_entry *addr = NULL;
  int rc;
  unsigned short connectport; /* the local port connect() should use! */
  char *str = &data->state.buffer[4];  /* start on the first letter */

  /* if we come here again, make sure the former name is cleared */
  Curl_safefree(ftpc->newhost);

  if((ftpc->count1 == 0) &&







|







1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
static CURLcode ftp_state_pasv_resp(struct connectdata *conn,
                                    int ftpcode)
{
  struct ftp_conn *ftpc = &conn->proto.ftpc;
  CURLcode result;
  struct Curl_easy *data = conn->data;
  struct Curl_dns_entry *addr = NULL;
  enum resolve_t rc;
  unsigned short connectport; /* the local port connect() should use! */
  char *str = &data->state.buffer[4];  /* start on the first letter */

  /* if we come here again, make sure the former name is cleared */
  Curl_safefree(ftpc->newhost);

  if((ftpc->count1 == 0) &&
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
/* for USER and PASS responses */
static CURLcode ftp_state_user_resp(struct connectdata *conn,
                                    int ftpcode,
                                    ftpstate instate)
{
  CURLcode result = CURLE_OK;
  struct Curl_easy *data = conn->data;
  struct FTP *ftp = data->req.protop;
  struct ftp_conn *ftpc = &conn->proto.ftpc;
  (void)instate; /* no use for this yet */

  /* some need password anyway, and others just return 2xx ignored */
  if((ftpcode == 331) && (ftpc->state == FTP_USER)) {
    /* 331 Password required for ...
       (the server requires to send the user's password too) */
    PPSENDF(&ftpc->pp, "PASS %s", ftp->passwd?ftp->passwd:"");
    state(conn, FTP_PASS);
  }
  else if(ftpcode/100 == 2) {
    /* 230 User ... logged in.
       (the user logged in with or without password) */
    result = ftp_state_loggedin(conn);
  }







<







|







2515
2516
2517
2518
2519
2520
2521

2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
/* for USER and PASS responses */
static CURLcode ftp_state_user_resp(struct connectdata *conn,
                                    int ftpcode,
                                    ftpstate instate)
{
  CURLcode result = CURLE_OK;
  struct Curl_easy *data = conn->data;

  struct ftp_conn *ftpc = &conn->proto.ftpc;
  (void)instate; /* no use for this yet */

  /* some need password anyway, and others just return 2xx ignored */
  if((ftpcode == 331) && (ftpc->state == FTP_USER)) {
    /* 331 Password required for ...
       (the server requires to send the user's password too) */
    PPSENDF(&ftpc->pp, "PASS %s", conn->passwd?conn->passwd:"");
    state(conn, FTP_PASS);
  }
  else if(ftpcode/100 == 2) {
    /* 230 User ... logged in.
       (the user logged in with or without password) */
    result = ftp_state_loggedin(conn);
  }
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
      break;
    }
  }

  /* get some initial data into the ftp struct */
  ftp->transfer = FTPTRANSFER_BODY;
  ftp->downloadsize = 0;

  /* No need to duplicate user+password, the connectdata struct won't change
     during a session, but we re-init them here since on subsequent inits
     since the conn struct may have changed or been replaced.
  */
  ftp->user = conn->user;
  ftp->passwd = conn->passwd;
  if(isBadFtpString(ftp->user))
    return CURLE_URL_MALFORMAT;
  if(isBadFtpString(ftp->passwd))
    return CURLE_URL_MALFORMAT;

  conn->proto.ftpc.known_filesize = -1; /* unknown size for now */

  return CURLE_OK;
}

#endif /* CURL_DISABLE_FTP */







<
<
<
<
<
<
<
<
<
<
<
<






4355
4356
4357
4358
4359
4360
4361












4362
4363
4364
4365
4366
4367
      break;
    }
  }

  /* get some initial data into the ftp struct */
  ftp->transfer = FTPTRANSFER_BODY;
  ftp->downloadsize = 0;












  conn->proto.ftpc.known_filesize = -1; /* unknown size for now */

  return CURLE_OK;
}

#endif /* CURL_DISABLE_FTP */
Changes to jni/curl/lib/ftp.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_FTP_H
#define HEADER_CURL_FTP_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_FTP_H
#define HEADER_CURL_FTP_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
} curl_ftpfile;

/* This FTP struct is used in the Curl_easy. All FTP data that is
   connection-oriented must be in FTP_conn to properly deal with the fact that
   perhaps the Curl_easy is changed between the times the connection is
   used. */
struct FTP {
  char *user;    /* user name string */
  char *passwd;  /* password string */
  char *path;    /* points to the urlpieces struct field */
  char *pathalloc; /* if non-NULL a pointer to an allocated path */

  /* transfer a file/body or not, done as a typedefed enum just to make
     debuggers display the full symbol and not just the numerical value */
  curl_pp_transfer transfer;
  curl_off_t downloadsize;







<
<







98
99
100
101
102
103
104


105
106
107
108
109
110
111
} curl_ftpfile;

/* This FTP struct is used in the Curl_easy. All FTP data that is
   connection-oriented must be in FTP_conn to properly deal with the fact that
   perhaps the Curl_easy is changed between the times the connection is
   used. */
struct FTP {


  char *path;    /* points to the urlpieces struct field */
  char *pathalloc; /* if non-NULL a pointer to an allocated path */

  /* transfer a file/body or not, done as a typedefed enum just to make
     debuggers display the full symbol and not just the numerical value */
  curl_pp_transfer transfer;
  curl_off_t downloadsize;
Changes to jni/curl/lib/getenv.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
#include "curl_setup.h"

#include <curl/curl.h>
#include "curl_memory.h"

#include "memdebug.h"

static
char *GetEnv(const char *variable)
{
#if defined(_WIN32_WCE) || defined(CURL_WINDOWS_APP)
  (void)variable;
  return NULL;
#else


#ifdef WIN32
  char env[4096];



  char *temp = getenv(variable);






  env[0] = '\0';








  if(temp != NULL)

    ExpandEnvironmentStringsA(temp, env, sizeof(env));


  return (env[0] != '\0')?strdup(env):NULL;



#else
  char *env = getenv(variable);
  return (env && env[0])?strdup(env):NULL;
#endif
#endif
}

char *curl_getenv(const char *v)
{
  return GetEnv(v);
}







<
|




|
>
>
|
|
>
>
>
|
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
|
>
|
>
>
|
>
>
>



<







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
#include "curl_setup.h"

#include <curl/curl.h>
#include "curl_memory.h"

#include "memdebug.h"


static char *GetEnv(const char *variable)
{
#if defined(_WIN32_WCE) || defined(CURL_WINDOWS_APP)
  (void)variable;
  return NULL;
#elif defined(WIN32)
  /* This uses Windows API instead of C runtime getenv() to get the environment
     variable since some changes aren't always visible to the latter. #4774 */
  char *buf = NULL;
  char *tmp;
  DWORD bufsize;
  DWORD rc = 1;
  const DWORD max = 32768; /* max env var size from MSCRT source */

  for(;;) {
    tmp = realloc(buf, rc);
    if(!tmp) {
      free(buf);
      return NULL;
    }

    buf = tmp;
    bufsize = rc;

    /* It's possible for rc to be 0 if the variable was found but empty.
       Since getenv doesn't make that distinction we ignore it as well. */
    rc = GetEnvironmentVariableA(variable, buf, bufsize);
    if(!rc || rc == bufsize || rc > max) {
      free(buf);
      return NULL;
    }

    /* if rc < bufsize then rc is bytes written not including null */
    if(rc < bufsize)
      return buf;

    /* else rc is bytes needed, try again */
  }
#else
  char *env = getenv(variable);
  return (env && env[0])?strdup(env):NULL;

#endif
}

char *curl_getenv(const char *v)
{
  return GetEnv(v);
}
Changes to jni/curl/lib/hmac.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
26
27
28
29
30
31
32

33
34
35
36
37
38
39

#ifndef CURL_DISABLE_CRYPTO_AUTH

#include <curl/curl.h>

#include "curl_hmac.h"
#include "curl_memory.h"


/* The last #include file should be: */
#include "memdebug.h"

/*
 * Generic HMAC algorithm.
 *







>







26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

#ifndef CURL_DISABLE_CRYPTO_AUTH

#include <curl/curl.h>

#include "curl_hmac.h"
#include "curl_memory.h"
#include "warnless.h"

/* The last #include file should be: */
#include "memdebug.h"

/*
 * Generic HMAC algorithm.
 *
124
125
126
127
128
129
130
131




































132
  (*hashparams->hmac_hfinal)(result, ctxt->hmac_hashctxt1);
  (*hashparams->hmac_hupdate)(ctxt->hmac_hashctxt2,
   result, hashparams->hmac_resultlen);
  (*hashparams->hmac_hfinal)(result, ctxt->hmac_hashctxt2);
  free((char *) ctxt);
  return 0;
}





































#endif /* CURL_DISABLE_CRYPTO_AUTH */








>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

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
  (*hashparams->hmac_hfinal)(result, ctxt->hmac_hashctxt1);
  (*hashparams->hmac_hupdate)(ctxt->hmac_hashctxt2,
   result, hashparams->hmac_resultlen);
  (*hashparams->hmac_hfinal)(result, ctxt->hmac_hashctxt2);
  free((char *) ctxt);
  return 0;
}

/*
 * Curl_hmacit()
 *
 * This is used to generate a HMAC hash, for the specified input data, given
 * the specified hash function and key.
 *
 * Parameters:
 *
 * hashparams [in]     - The hash function (Curl_HMAC_MD5).
 * key        [in]     - The key to use.
 * keylen     [in]     - The length of the key.
 * data       [in]     - The data to encrypt.
 * datalen    [in]     - The length of the data.
 * output     [in/out] - The output buffer.
 *
 * Returns CURLE_OK on success.
 */
CURLcode Curl_hmacit(const HMAC_params *hashparams,
                     const unsigned char *key, const size_t keylen,
                     const unsigned char *data, const size_t datalen,
                     unsigned char *output)
{
  HMAC_context *ctxt = Curl_HMAC_init(hashparams, key, curlx_uztoui(keylen));

  if(!ctxt)
    return CURLE_OUT_OF_MEMORY;

  /* Update the digest with the given challenge */
  Curl_HMAC_update(ctxt, data, curlx_uztoui(datalen));

  /* Finalise the digest */
  Curl_HMAC_final(ctxt, output);

  return CURLE_OK;
}

#endif /* CURL_DISABLE_CRYPTO_AUTH */
Changes to jni/curl/lib/hostip.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
55
56
57
58
59
60
61

62
63
64
65
66
67
68
#include "hostip.h"
#include "hash.h"
#include "rand.h"
#include "share.h"
#include "strerror.h"
#include "url.h"
#include "inet_ntop.h"

#include "multiif.h"
#include "doh.h"
#include "warnless.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"







>







55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "hostip.h"
#include "hash.h"
#include "rand.h"
#include "share.h"
#include "strerror.h"
#include "url.h"
#include "inet_ntop.h"
#include "inet_pton.h"
#include "multiif.h"
#include "doh.h"
#include "warnless.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"
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
 * Return codes:
 *
 * CURLRESOLV_ERROR   (-1) = error, no pointer
 * CURLRESOLV_RESOLVED (0) = OK, pointer provided
 * CURLRESOLV_PENDING  (1) = waiting for response, no pointer
 */

int Curl_resolv(struct connectdata *conn,
                const char *hostname,
                int port,
                bool allowDOH,
                struct Curl_dns_entry **entry)
{
  struct Curl_dns_entry *dns = NULL;
  struct Curl_easy *data = conn->data;
  CURLcode result;
  int rc = CURLRESOLV_ERROR; /* default to failure */

  *entry = NULL;

  if(data->share)
    Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);

  dns = fetch_addr(conn, hostname, port);

  if(dns) {
    infof(data, "Hostname %s was found in DNS cache\n", hostname);
    dns->inuse++; /* we use it! */
    rc = CURLRESOLV_RESOLVED;
  }

  if(data->share)
    Curl_share_unlock(data, CURL_LOCK_DATA_DNS);

  if(!dns) {
    /* The entry was not in the cache. Resolve it to IP address */

    Curl_addrinfo *addr;
    int respwait = 0;

    /* Check what IP specifics the app has requested and if we can provide it.
     * If not, bail out. */
    if(!Curl_ipvalid(conn))
      return CURLRESOLV_ERROR;

    /* notify the resolver start callback */
    if(data->set.resolver_start) {
      int st;
      Curl_set_in_callback(data, true);
      st = data->set.resolver_start(data->state.resolver, NULL,
                                    data->set.resolver_start_client);
      Curl_set_in_callback(data, false);
      if(st)
        return CURLRESOLV_ERROR;
    }























    if(allowDOH && data->set.doh) {
      addr = Curl_doh(conn, hostname, port, &respwait);
    }
    else {
      /* If Curl_getaddrinfo() returns NULL, 'respwait' might be set to a
         non-zero value indicating that we need to wait for the response to the
         resolve call */
      addr = Curl_getaddrinfo(conn,
#ifdef DEBUGBUILD
                              (data->set.str[STRING_DEVICE]
                               && !strcmp(data->set.str[STRING_DEVICE],
                                          "LocalHost"))?"localhost":
#endif
                              hostname, port, &respwait);

    }
    if(!addr) {
      if(respwait) {
        /* the response to our resolve call will come asynchronously at
           a later time, good or bad */
        /* First, check that we haven't received the info by now */
        result = Curl_resolv_check(conn, &dns);







|
|
|
|
|




|




















|

|
|
<
|
<












>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
|
|
|
|
|
|
|

|
|
|

|
>







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
 * Return codes:
 *
 * CURLRESOLV_ERROR   (-1) = error, no pointer
 * CURLRESOLV_RESOLVED (0) = OK, pointer provided
 * CURLRESOLV_PENDING  (1) = waiting for response, no pointer
 */

enum resolve_t Curl_resolv(struct connectdata *conn,
                           const char *hostname,
                           int port,
                           bool allowDOH,
                           struct Curl_dns_entry **entry)
{
  struct Curl_dns_entry *dns = NULL;
  struct Curl_easy *data = conn->data;
  CURLcode result;
  enum resolve_t rc = CURLRESOLV_ERROR; /* default to failure */

  *entry = NULL;

  if(data->share)
    Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);

  dns = fetch_addr(conn, hostname, port);

  if(dns) {
    infof(data, "Hostname %s was found in DNS cache\n", hostname);
    dns->inuse++; /* we use it! */
    rc = CURLRESOLV_RESOLVED;
  }

  if(data->share)
    Curl_share_unlock(data, CURL_LOCK_DATA_DNS);

  if(!dns) {
    /* The entry was not in the cache. Resolve it to IP address */

    Curl_addrinfo *addr = NULL;
    int respwait = 0;
#ifndef USE_RESOLVE_ON_IPS
    struct in_addr in;

#endif


    /* notify the resolver start callback */
    if(data->set.resolver_start) {
      int st;
      Curl_set_in_callback(data, true);
      st = data->set.resolver_start(data->state.resolver, NULL,
                                    data->set.resolver_start_client);
      Curl_set_in_callback(data, false);
      if(st)
        return CURLRESOLV_ERROR;
    }

#ifndef USE_RESOLVE_ON_IPS
    /* First check if this is an IPv4 address string */
    if(Curl_inet_pton(AF_INET, hostname, &in) > 0)
      /* This is a dotted IP address 123.123.123.123-style */
      addr = Curl_ip2addr(AF_INET, &in, hostname, port);
#ifdef ENABLE_IPV6
    if(!addr) {
      struct in6_addr in6;
      /* check if this is an IPv6 address string */
      if(Curl_inet_pton(AF_INET6, hostname, &in6) > 0)
        /* This is an IPv6 address literal */
        addr = Curl_ip2addr(AF_INET6, &in6, hostname, port);
    }
#endif /* ENABLE_IPV6 */
#endif /* !USE_RESOLVE_ON_IPS */

    if(!addr) {
      /* Check what IP specifics the app has requested and if we can provide
       * it. If not, bail out. */
      if(!Curl_ipvalid(conn))
        return CURLRESOLV_ERROR;

      if(allowDOH && data->set.doh) {
        addr = Curl_doh(conn, hostname, port, &respwait);
      }
      else {
        /* If Curl_getaddrinfo() returns NULL, 'respwait' might be set to a
           non-zero value indicating that we need to wait for the response to
           the resolve call */
        addr = Curl_getaddrinfo(conn,
#ifdef DEBUGBUILD
                                (data->set.str[STRING_DEVICE]
                                 && !strcmp(data->set.str[STRING_DEVICE],
                                            "LocalHost"))?"localhost":
#endif
                                hostname, port, &respwait);
      }
    }
    if(!addr) {
      if(respwait) {
        /* the response to our resolve call will come asynchronously at
           a later time, good or bad */
        /* First, check that we haven't received the info by now */
        result = Curl_resolv_check(conn, &dns);
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
 *
 * CURLRESOLV_TIMEDOUT(-2) = warning, time too short or previous alarm expired
 * CURLRESOLV_ERROR   (-1) = error, no pointer
 * CURLRESOLV_RESOLVED (0) = OK, pointer provided
 * CURLRESOLV_PENDING  (1) = waiting for response, no pointer
 */

int Curl_resolv_timeout(struct connectdata *conn,
                        const char *hostname,
                        int port,
                        struct Curl_dns_entry **entry,
                        timediff_t timeoutms)
{
#ifdef USE_ALARM_TIMEOUT
#ifdef HAVE_SIGACTION
  struct sigaction keep_sigact;   /* store the old struct here */
  volatile bool keep_copysig = FALSE; /* whether old sigact has been saved */
  struct sigaction sigact;
#else
#ifdef HAVE_SIGNAL
  void (*keep_sigact)(int);       /* store the old handler here */
#endif /* HAVE_SIGNAL */
#endif /* HAVE_SIGACTION */
  volatile long timeout;
  volatile unsigned int prev_alarm = 0;
  struct Curl_easy *data = conn->data;
#endif /* USE_ALARM_TIMEOUT */
  int rc;

  *entry = NULL;

  if(timeoutms < 0)
    /* got an already expired timeout */
    return CURLRESOLV_TIMEDOUT;








|
|
|
|
|















|







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
 *
 * CURLRESOLV_TIMEDOUT(-2) = warning, time too short or previous alarm expired
 * CURLRESOLV_ERROR   (-1) = error, no pointer
 * CURLRESOLV_RESOLVED (0) = OK, pointer provided
 * CURLRESOLV_PENDING  (1) = waiting for response, no pointer
 */

enum resolve_t Curl_resolv_timeout(struct connectdata *conn,
                                   const char *hostname,
                                   int port,
                                   struct Curl_dns_entry **entry,
                                   timediff_t timeoutms)
{
#ifdef USE_ALARM_TIMEOUT
#ifdef HAVE_SIGACTION
  struct sigaction keep_sigact;   /* store the old struct here */
  volatile bool keep_copysig = FALSE; /* whether old sigact has been saved */
  struct sigaction sigact;
#else
#ifdef HAVE_SIGNAL
  void (*keep_sigact)(int);       /* store the old handler here */
#endif /* HAVE_SIGNAL */
#endif /* HAVE_SIGACTION */
  volatile long timeout;
  volatile unsigned int prev_alarm = 0;
  struct Curl_easy *data = conn->data;
#endif /* USE_ALARM_TIMEOUT */
  enum resolve_t rc;

  *entry = NULL;

  if(timeoutms < 0)
    /* got an already expired timeout */
    return CURLRESOLV_TIMEDOUT;

Changes to jni/curl/lib/hostip.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_HOSTIP_H
#define HEADER_CURL_HOSTIP_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_HOSTIP_H
#define HEADER_CURL_HOSTIP_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
 * Curl_resolv() returns an entry with the info for the specified host
 * and port.
 *
 * The returned data *MUST* be "unlocked" with Curl_resolv_unlock() after
 * use, or we'll leak memory!
 */
/* return codes */

#define CURLRESOLV_TIMEDOUT -2
#define CURLRESOLV_ERROR    -1
#define CURLRESOLV_RESOLVED  0
#define CURLRESOLV_PENDING   1

int Curl_resolv(struct connectdata *conn,
                const char *hostname,
                int port,
                bool allowDOH,
                struct Curl_dns_entry **dnsentry);
int Curl_resolv_timeout(struct connectdata *conn, const char *hostname,

                        int port, struct Curl_dns_entry **dnsentry,
                        timediff_t timeoutms);

#ifdef CURLRES_IPV6
/*
 * Curl_ipv6works() returns TRUE if IPv6 seems to work.
 */
bool Curl_ipv6works(void);
#else
#define Curl_ipv6works() FALSE
#endif

/*
 * Curl_ipvalid() checks what CURL_IPRESOLVE_* requirements that might've
 * been set and returns TRUE if they are OK.
 */
bool Curl_ipvalid(struct connectdata *conn);







>
|
|
|
|
>
|
|
|
|
|
|
>
|
|





|

|







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
 * Curl_resolv() returns an entry with the info for the specified host
 * and port.
 *
 * The returned data *MUST* be "unlocked" with Curl_resolv_unlock() after
 * use, or we'll leak memory!
 */
/* return codes */
enum resolve_t {
  CURLRESOLV_TIMEDOUT = -2,
  CURLRESOLV_ERROR    = -1,
  CURLRESOLV_RESOLVED =  0,
  CURLRESOLV_PENDING  =  1
};
enum resolve_t Curl_resolv(struct connectdata *conn,
                           const char *hostname,
                           int port,
                           bool allowDOH,
                           struct Curl_dns_entry **dnsentry);
enum resolve_t Curl_resolv_timeout(struct connectdata *conn,
                                   const char *hostname, int port,
                                   struct Curl_dns_entry **dnsentry,
                                   timediff_t timeoutms);

#ifdef CURLRES_IPV6
/*
 * Curl_ipv6works() returns TRUE if IPv6 seems to work.
 */
bool Curl_ipv6works(struct connectdata *conn);
#else
#define Curl_ipv6works(x) FALSE
#endif

/*
 * Curl_ipvalid() checks what CURL_IPRESOLVE_* requirements that might've
 * been set and returns TRUE if they are OK.
 */
bool Curl_ipvalid(struct connectdata *conn);
Changes to jni/curl/lib/hostip4.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "urldata.h"
#include "sendf.h"
#include "hostip.h"
#include "hash.h"
#include "share.h"
#include "strerror.h"
#include "url.h"
#include "inet_pton.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

/*
 * Curl_ipvalid() checks what CURL_IPRESOLVE_* requirements that might've







<







48
49
50
51
52
53
54

55
56
57
58
59
60
61
#include "urldata.h"
#include "sendf.h"
#include "hostip.h"
#include "hash.h"
#include "share.h"
#include "strerror.h"
#include "url.h"

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

/*
 * Curl_ipvalid() checks what CURL_IPRESOLVE_* requirements that might've
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
                                   int port)
{
#if !defined(HAVE_GETADDRINFO_THREADSAFE) && defined(HAVE_GETHOSTBYNAME_R_3)
  int res;
#endif
  Curl_addrinfo *ai = NULL;
  struct hostent *h = NULL;
  struct in_addr in;
  struct hostent *buf = NULL;

#ifdef ENABLE_IPV6
  {
    struct in6_addr in6;
    /* check if this is an IPv6 address string */
    if(Curl_inet_pton(AF_INET6, hostname, &in6) > 0)
      /* This is an IPv6 address literal */
      return Curl_ip2addr(AF_INET6, &in6, hostname, port);
  }
#endif /* ENABLE_IPV6 */

  if(Curl_inet_pton(AF_INET, hostname, &in) > 0)
    /* This is a dotted IP address 123.123.123.123-style */
    return Curl_ip2addr(AF_INET, &in, hostname, port);

#if defined(HAVE_GETADDRINFO_THREADSAFE)
  else {
    struct addrinfo hints;
    char sbuf[12];
    char *sbufptr = NULL;

    memset(&hints, 0, sizeof(hints));
    hints.ai_family = PF_INET;
    hints.ai_socktype = SOCK_STREAM;
    if(port) {
      msnprintf(sbuf, sizeof(sbuf), "%d", port);
      sbufptr = sbuf;
    }

    (void)Curl_getaddrinfo_ex(hostname, sbufptr, &hints, &ai);

#elif defined(HAVE_GETHOSTBYNAME_R)
  /*
   * gethostbyname_r() is the preferred resolve function for many platforms.
   * Since there are three different versions of it, the following code is
   * somewhat #ifdef-ridden.
   */
  else {
    int h_errnop;

    buf = calloc(1, CURL_HOSTENT_SIZE);
    if(!buf)
      return NULL; /* major failure */
    /*
     * The clearing of the buffer is a workaround for a gethostbyname_r bug in
     * qnx nto and it is also _required_ for some of these functions on some
     * platforms.
     */

#if defined(HAVE_GETHOSTBYNAME_R_5)
    /* Solaris, IRIX and more */
    h = gethostbyname_r(hostname,
                        (struct hostent *)buf,
                        (char *)buf + sizeof(struct hostent),
                        CURL_HOSTENT_SIZE - sizeof(struct hostent),
                        &h_errnop);

    /* If the buffer is too small, it returns NULL and sets errno to
     * ERANGE. The errno is thread safe if this is compiled with
     * -D_REENTRANT as then the 'errno' variable is a macro defined to get
     * used properly for threads.
     */

    if(h) {
      ;
    }
    else
#elif defined(HAVE_GETHOSTBYNAME_R_6)
    /* Linux */

    (void)gethostbyname_r(hostname,
                        (struct hostent *)buf,
                        (char *)buf + sizeof(struct hostent),
                        CURL_HOSTENT_SIZE - sizeof(struct hostent),
                        &h, /* DIFFERENCE */
                        &h_errnop);
    /* Redhat 8, using glibc 2.2.93 changed the behavior. Now all of a
     * sudden this function returns EAGAIN if the given buffer size is too
     * small. Previous versions are known to return ERANGE for the same
     * problem.
     *
     * This wouldn't be such a big problem if older versions wouldn't
     * sometimes return EAGAIN on a common failure case. Alas, we can't
     * assume that EAGAIN *or* ERANGE means ERANGE for any given version of
     * glibc.
     *
     * For now, we do that and thus we may call the function repeatedly and
     * fail for older glibc versions that return EAGAIN, until we run out of
     * buffer size (step_size grows beyond CURL_HOSTENT_SIZE).
     *
     * If anyone has a better fix, please tell us!
     *
     * -------------------------------------------------------------------
     *
     * On October 23rd 2003, Dan C dug up more details on the mysteries of
     * gethostbyname_r() in glibc:
     *
     * In glibc 2.2.5 the interface is different (this has also been
     * discovered in glibc 2.1.1-6 as shipped by Redhat 6). What I can't
     * explain, is that tests performed on glibc 2.2.4-34 and 2.2.4-32
     * (shipped/upgraded by Redhat 7.2) don't show this behavior!
     *
     * In this "buggy" version, the return code is -1 on error and 'errno'
     * is set to the ERANGE or EAGAIN code. Note that 'errno' is not a
     * thread-safe variable.
     */

    if(!h) /* failure */
#elif defined(HAVE_GETHOSTBYNAME_R_3)
    /* AIX, Digital Unix/Tru64, HPUX 10, more? */

    /* For AIX 4.3 or later, we don't use gethostbyname_r() at all, because of
     * the plain fact that it does not return unique full buffers on each
     * call, but instead several of the pointers in the hostent structs will
     * point to the same actual data! This have the unfortunate down-side that
     * our caching system breaks down horribly. Luckily for us though, AIX 4.3
     * and more recent versions have a "completely thread-safe"[*] libc where
     * all the data is stored in thread-specific memory areas making calls to
     * the plain old gethostbyname() work fine even for multi-threaded
     * programs.
     *
     * This AIX 4.3 or later detection is all made in the configure script.
     *
     * Troels Walsted Hansen helped us work this out on March 3rd, 2003.
     *
     * [*] = much later we've found out that it isn't at all "completely
     * thread-safe", but at least the gethostbyname() function is.
     */

    if(CURL_HOSTENT_SIZE >=
       (sizeof(struct hostent) + sizeof(struct hostent_data))) {

      /* August 22nd, 2000: Albert Chin-A-Young brought an updated version
       * that should work! September 20: Richard Prescott worked on the buffer
       * size dilemma.
       */

      res = gethostbyname_r(hostname,
                            (struct hostent *)buf,
                            (struct hostent_data *)((char *)buf +
                                                    sizeof(struct hostent)));
      h_errnop = SOCKERRNO; /* we don't deal with this, but set it anyway */
    }
    else
      res = -1; /* failure, too smallish buffer size */

    if(!res) { /* success */

      h = buf; /* result expected in h */

      /* This is the worst kind of the different gethostbyname_r() interfaces.
       * Since we don't know how big buffer this particular lookup required,
       * we can't realloc down the huge alloc without doing closer analysis of
       * the returned data. Thus, we always use CURL_HOSTENT_SIZE for every
       * name lookup. Fixing this would require an extra malloc() and then
       * calling Curl_addrinfo_copy() that subsequent realloc()s down the new
       * memory area to the actually used amount.
       */
    }
    else
#endif /* HAVE_...BYNAME_R_5 || HAVE_...BYNAME_R_6 || HAVE_...BYNAME_R_3 */
    {
      h = NULL; /* set return code to NULL */
      free(buf);
    }
#else /* HAVE_GETADDRINFO_THREADSAFE || HAVE_GETHOSTBYNAME_R */
    /*
     * Here is code for platforms that don't have a thread safe
     * getaddrinfo() nor gethostbyname_r() function or for which
     * gethostbyname() is the preferred one.
     */
  else {
    h = gethostbyname((void *)hostname);
#endif /* HAVE_GETADDRINFO_THREADSAFE || HAVE_GETHOSTBYNAME_R */
  }

  if(h) {
    ai = Curl_he2ai(h, port);

    if(buf) /* used a *_r() function */
      free(buf);
  }

  return ai;
}
#endif /* defined(CURLRES_IPV4) && !defined(CURLRES_ARES) */







<


<
<
<
<
<
<
<
<
<
<
<
<
<
<

<
|
|
|

|
|
|
|
|
|
|

|







<
|

|
|
|
|
|
|
|
|


|
|
|
|
|
|

|
|
|
|
|

|
|
|
|

|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|

|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|

|
|
|
|

|
|
|
|
|
|
|
|

|

|

|
|
|
|
|
|
|
|
|
|

|
|
|
|

|
|
|
|
|
<
|

<











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
                                   int port)
{
#if !defined(HAVE_GETADDRINFO_THREADSAFE) && defined(HAVE_GETHOSTBYNAME_R_3)
  int res;
#endif
  Curl_addrinfo *ai = NULL;
  struct hostent *h = NULL;

  struct hostent *buf = NULL;















#if defined(HAVE_GETADDRINFO_THREADSAFE)

  struct addrinfo hints;
  char sbuf[12];
  char *sbufptr = NULL;

  memset(&hints, 0, sizeof(hints));
  hints.ai_family = PF_INET;
  hints.ai_socktype = SOCK_STREAM;
  if(port) {
    msnprintf(sbuf, sizeof(sbuf), "%d", port);
    sbufptr = sbuf;
  }

  (void)Curl_getaddrinfo_ex(hostname, sbufptr, &hints, &ai);

#elif defined(HAVE_GETHOSTBYNAME_R)
  /*
   * gethostbyname_r() is the preferred resolve function for many platforms.
   * Since there are three different versions of it, the following code is
   * somewhat #ifdef-ridden.
   */

  int h_errnop;

  buf = calloc(1, CURL_HOSTENT_SIZE);
  if(!buf)
    return NULL; /* major failure */
  /*
   * The clearing of the buffer is a workaround for a gethostbyname_r bug in
   * qnx nto and it is also _required_ for some of these functions on some
   * platforms.
   */

#if defined(HAVE_GETHOSTBYNAME_R_5)
  /* Solaris, IRIX and more */
  h = gethostbyname_r(hostname,
                      (struct hostent *)buf,
                      (char *)buf + sizeof(struct hostent),
                      CURL_HOSTENT_SIZE - sizeof(struct hostent),
                      &h_errnop);

  /* If the buffer is too small, it returns NULL and sets errno to
   * ERANGE. The errno is thread safe if this is compiled with
   * -D_REENTRANT as then the 'errno' variable is a macro defined to get
   * used properly for threads.
   */

  if(h) {
    ;
  }
  else
#elif defined(HAVE_GETHOSTBYNAME_R_6)
  /* Linux */

  (void)gethostbyname_r(hostname,
                      (struct hostent *)buf,
                      (char *)buf + sizeof(struct hostent),
                      CURL_HOSTENT_SIZE - sizeof(struct hostent),
                      &h, /* DIFFERENCE */
                      &h_errnop);
  /* Redhat 8, using glibc 2.2.93 changed the behavior. Now all of a
   * sudden this function returns EAGAIN if the given buffer size is too
   * small. Previous versions are known to return ERANGE for the same
   * problem.
   *
   * This wouldn't be such a big problem if older versions wouldn't
   * sometimes return EAGAIN on a common failure case. Alas, we can't
   * assume that EAGAIN *or* ERANGE means ERANGE for any given version of
   * glibc.
   *
   * For now, we do that and thus we may call the function repeatedly and
   * fail for older glibc versions that return EAGAIN, until we run out of
   * buffer size (step_size grows beyond CURL_HOSTENT_SIZE).
   *
   * If anyone has a better fix, please tell us!
   *
   * -------------------------------------------------------------------
   *
   * On October 23rd 2003, Dan C dug up more details on the mysteries of
   * gethostbyname_r() in glibc:
   *
   * In glibc 2.2.5 the interface is different (this has also been
   * discovered in glibc 2.1.1-6 as shipped by Redhat 6). What I can't
   * explain, is that tests performed on glibc 2.2.4-34 and 2.2.4-32
   * (shipped/upgraded by Redhat 7.2) don't show this behavior!
   *
   * In this "buggy" version, the return code is -1 on error and 'errno'
   * is set to the ERANGE or EAGAIN code. Note that 'errno' is not a
   * thread-safe variable.
   */

  if(!h) /* failure */
#elif defined(HAVE_GETHOSTBYNAME_R_3)
  /* AIX, Digital Unix/Tru64, HPUX 10, more? */

  /* For AIX 4.3 or later, we don't use gethostbyname_r() at all, because of
   * the plain fact that it does not return unique full buffers on each
   * call, but instead several of the pointers in the hostent structs will
   * point to the same actual data! This have the unfortunate down-side that
   * our caching system breaks down horribly. Luckily for us though, AIX 4.3
   * and more recent versions have a "completely thread-safe"[*] libc where
   * all the data is stored in thread-specific memory areas making calls to
   * the plain old gethostbyname() work fine even for multi-threaded
   * programs.
   *
   * This AIX 4.3 or later detection is all made in the configure script.
   *
   * Troels Walsted Hansen helped us work this out on March 3rd, 2003.
   *
   * [*] = much later we've found out that it isn't at all "completely
   * thread-safe", but at least the gethostbyname() function is.
   */

  if(CURL_HOSTENT_SIZE >=
     (sizeof(struct hostent) + sizeof(struct hostent_data))) {

    /* August 22nd, 2000: Albert Chin-A-Young brought an updated version
     * that should work! September 20: Richard Prescott worked on the buffer
     * size dilemma.
     */

    res = gethostbyname_r(hostname,
                          (struct hostent *)buf,
                          (struct hostent_data *)((char *)buf +
                                                  sizeof(struct hostent)));
    h_errnop = SOCKERRNO; /* we don't deal with this, but set it anyway */
  }
  else
    res = -1; /* failure, too smallish buffer size */

  if(!res) { /* success */

    h = buf; /* result expected in h */

    /* This is the worst kind of the different gethostbyname_r() interfaces.
     * Since we don't know how big buffer this particular lookup required,
     * we can't realloc down the huge alloc without doing closer analysis of
     * the returned data. Thus, we always use CURL_HOSTENT_SIZE for every
     * name lookup. Fixing this would require an extra malloc() and then
     * calling Curl_addrinfo_copy() that subsequent realloc()s down the new
     * memory area to the actually used amount.
     */
  }
  else
#endif /* HAVE_...BYNAME_R_5 || HAVE_...BYNAME_R_6 || HAVE_...BYNAME_R_3 */
  {
    h = NULL; /* set return code to NULL */
    free(buf);
  }
#else /* HAVE_GETADDRINFO_THREADSAFE || HAVE_GETHOSTBYNAME_R */
  /*
   * Here is code for platforms that don't have a thread safe
   * getaddrinfo() nor gethostbyname_r() function or for which
   * gethostbyname() is the preferred one.
   */

  h = gethostbyname((void *)hostname);
#endif /* HAVE_GETADDRINFO_THREADSAFE || HAVE_GETHOSTBYNAME_R */


  if(h) {
    ai = Curl_he2ai(h, port);

    if(buf) /* used a *_r() function */
      free(buf);
  }

  return ai;
}
#endif /* defined(CURLRES_IPV4) && !defined(CURLRES_ARES) */
Changes to jni/curl/lib/hostip6.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

/*
 * Curl_ipv6works() returns TRUE if IPv6 seems to work.
 */
bool Curl_ipv6works(void)
{

  /* the nature of most system is that IPv6 status doesn't come and go
     during a program's lifetime so we only probe the first time and then we
     have the info kept for fast re-use */






  static int ipv6_works = -1;
  if(-1 == ipv6_works) {
    /* probe to see if we have a working IPv6 stack */
    curl_socket_t s = socket(PF_INET6, SOCK_DGRAM, 0);
    if(s == CURL_SOCKET_BAD)
      /* an IPv6 address was requested but we can't get/use one */
      ipv6_works = 0;
    else {
      ipv6_works = 1;
      Curl_closesocket(NULL, s);
    }
  }
  return (ipv6_works>0)?TRUE:FALSE;

}

/*
 * Curl_ipvalid() checks what CURL_IPRESOLVE_* requirements that might've
 * been set and returns TRUE if they are OK.
 */
bool Curl_ipvalid(struct connectdata *conn)
{
  if(conn->ip_version == CURL_IPRESOLVE_V6)
    return Curl_ipv6works();

  return TRUE;
}

#if defined(CURLRES_SYNCH)

#ifdef DEBUG_ADDRINFO







|

>
|
|
|
>
>
>
>
>
>
|
<









<
|
>









|







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
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

/*
 * Curl_ipv6works() returns TRUE if IPv6 seems to work.
 */
bool Curl_ipv6works(struct connectdata *conn)
{
  if(conn) {
    /* the nature of most system is that IPv6 status doesn't come and go
       during a program's lifetime so we only probe the first time and then we
       have the info kept for fast re-use */
    DEBUGASSERT(conn);
    DEBUGASSERT(conn->data);
    DEBUGASSERT(conn->data->multi);
    return conn->data->multi->ipv6_works;
  }
  else {
    int ipv6_works = -1;

    /* probe to see if we have a working IPv6 stack */
    curl_socket_t s = socket(PF_INET6, SOCK_DGRAM, 0);
    if(s == CURL_SOCKET_BAD)
      /* an IPv6 address was requested but we can't get/use one */
      ipv6_works = 0;
    else {
      ipv6_works = 1;
      Curl_closesocket(NULL, s);
    }

    return (ipv6_works>0)?TRUE:FALSE;
  }
}

/*
 * Curl_ipvalid() checks what CURL_IPRESOLVE_* requirements that might've
 * been set and returns TRUE if they are OK.
 */
bool Curl_ipvalid(struct connectdata *conn)
{
  if(conn->ip_version == CURL_IPRESOLVE_V6)
    return Curl_ipv6works(conn);

  return TRUE;
}

#if defined(CURLRES_SYNCH)

#ifdef DEBUG_ADDRINFO
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
    pf = PF_INET6;
    break;
  default:
    pf = PF_UNSPEC;
    break;
  }

  if((pf != PF_INET) && !Curl_ipv6works())
    /* The stack seems to be a non-IPv6 one */
    pf = PF_INET;

  memset(&hints, 0, sizeof(hints));
  hints.ai_family = pf;
  hints.ai_socktype = (conn->transport == TRNSPRT_TCP) ?
    SOCK_STREAM : SOCK_DGRAM;







|







161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
    pf = PF_INET6;
    break;
  default:
    pf = PF_UNSPEC;
    break;
  }

  if((pf != PF_INET) && !Curl_ipv6works(conn))
    /* The stack seems to be a non-IPv6 one */
    pf = PF_INET;

  memset(&hints, 0, sizeof(hints));
  hints.ai_family = pf;
  hints.ai_socktype = (conn->transport == TRNSPRT_TCP) ?
    SOCK_STREAM : SOCK_DGRAM;
Changes to jni/curl/lib/http.c.
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
{
  char **userp;
  CURLcode result = CURLE_OK;

  userp = &conn->allocptr.userpwd;
  free(*userp);
  *userp = aprintf("Authorization: Bearer %s\r\n",
                   conn->oauth_bearer);

  if(!*userp) {
    result = CURLE_OUT_OF_MEMORY;
    goto fail;
  }

  fail:







|







340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
{
  char **userp;
  CURLcode result = CURLE_OK;

  userp = &conn->allocptr.userpwd;
  free(*userp);
  *userp = aprintf("Authorization: Bearer %s\r\n",
                   conn->data->set.str[STRING_BEARER]);

  if(!*userp) {
    result = CURLE_OUT_OF_MEMORY;
    goto fail;
  }

  fail:
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
{
  struct Curl_easy *data = conn->data;
  bool pickhost = FALSE;
  bool pickproxy = FALSE;
  CURLcode result = CURLE_OK;
  unsigned long authmask = ~0ul;

  if(!conn->oauth_bearer)
    authmask &= (unsigned long)~CURLAUTH_BEARER;

  if(100 <= data->req.httpcode && 199 >= data->req.httpcode)
    /* this is a transient response code, ignore */
    return CURLE_OK;

  if(data->state.authproblem)
    return data->set.http_fail_on_error?CURLE_HTTP_RETURNED_ERROR:CURLE_OK;

  if((conn->bits.user_passwd || conn->oauth_bearer) &&
     ((data->req.httpcode == 401) ||
      (conn->bits.authneg && data->req.httpcode < 300))) {
    pickhost = pickoneauth(&data->state.authhost, authmask);
    if(!pickhost)
      data->state.authproblem = TRUE;
    if(data->state.authhost.picked == CURLAUTH_NTLM &&
       conn->httpversion > 11) {







|









|







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
{
  struct Curl_easy *data = conn->data;
  bool pickhost = FALSE;
  bool pickproxy = FALSE;
  CURLcode result = CURLE_OK;
  unsigned long authmask = ~0ul;

  if(!data->set.str[STRING_BEARER])
    authmask &= (unsigned long)~CURLAUTH_BEARER;

  if(100 <= data->req.httpcode && 199 >= data->req.httpcode)
    /* this is a transient response code, ignore */
    return CURLE_OK;

  if(data->state.authproblem)
    return data->set.http_fail_on_error?CURLE_HTTP_RETURNED_ERROR:CURLE_OK;

  if((conn->bits.user_passwd || data->set.str[STRING_BEARER]) &&
     ((data->req.httpcode == 401) ||
      (conn->bits.authneg && data->req.httpcode < 300))) {
    pickhost = pickoneauth(&data->state.authhost, authmask);
    if(!pickhost)
      data->state.authproblem = TRUE;
    if(data->state.authhost.picked == CURLAUTH_NTLM &&
       conn->httpversion > 11) {
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
                    struct auth *authstatus,
                    const char *request,
                    const char *path,
                    bool proxy)
{
  const char *auth = NULL;
  CURLcode result = CURLE_OK;
#if !defined(CURL_DISABLE_VERBOSE_STRINGS)
  struct Curl_easy *data = conn->data;
#endif

#ifdef CURL_DISABLE_CRYPTO_AUTH
  (void)request;
  (void)path;
#endif

#ifdef USE_SPNEGO







<

<







637
638
639
640
641
642
643

644

645
646
647
648
649
650
651
                    struct auth *authstatus,
                    const char *request,
                    const char *path,
                    bool proxy)
{
  const char *auth = NULL;
  CURLcode result = CURLE_OK;

  struct Curl_easy *data = conn->data;


#ifdef CURL_DISABLE_CRYPTO_AUTH
  (void)request;
  (void)path;
#endif

#ifdef USE_SPNEGO
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717

    /* NOTE: this function should set 'done' TRUE, as the other auth
       functions work that way */
    authstatus->done = TRUE;
  }
  if(authstatus->picked == CURLAUTH_BEARER) {
    /* Bearer */
    if((!proxy && conn->oauth_bearer &&
        !Curl_checkheaders(conn, "Authorization:"))) {
      auth = "Bearer";
      result = http_output_bearer(conn);
      if(result)
        return result;
    }








|







701
702
703
704
705
706
707
708
709
710
711
712
713
714
715

    /* NOTE: this function should set 'done' TRUE, as the other auth
       functions work that way */
    authstatus->done = TRUE;
  }
  if(authstatus->picked == CURLAUTH_BEARER) {
    /* Bearer */
    if((!proxy && data->set.str[STRING_BEARER] &&
        !Curl_checkheaders(conn, "Authorization:"))) {
      auth = "Bearer";
      result = http_output_bearer(conn);
      if(result)
        return result;
    }

761
762
763
764
765
766
767
768
769
770
771
772
773
774
775

  DEBUGASSERT(data);

  authhost = &data->state.authhost;
  authproxy = &data->state.authproxy;

  if((conn->bits.httpproxy && conn->bits.proxy_user_passwd) ||
     conn->bits.user_passwd || conn->oauth_bearer)
    /* continue please */;
  else {
    authhost->done = TRUE;
    authproxy->done = TRUE;
    return CURLE_OK; /* no authentication with no user or password */
  }








|







759
760
761
762
763
764
765
766
767
768
769
770
771
772
773

  DEBUGASSERT(data);

  authhost = &data->state.authhost;
  authproxy = &data->state.authproxy;

  if((conn->bits.httpproxy && conn->bits.proxy_user_passwd) ||
     conn->bits.user_passwd || data->set.str[STRING_BEARER])
    /* continue please */;
  else {
    authhost->done = TRUE;
    authproxy->done = TRUE;
    return CURLE_OK; /* no authentication with no user or password */
  }

1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
static CURLcode expect100(struct Curl_easy *data,
                          struct connectdata *conn,
                          Curl_send_buffer *req_buffer)
{
  CURLcode result = CURLE_OK;
  data->state.expect100header = FALSE; /* default to false unless it is set
                                          to TRUE below */
  if(use_http_1_1plus(data, conn) &&
     (conn->httpversion < 20)) {
    /* if not doing HTTP 1.0 or version 2, or disabled explicitly, we add an
       Expect: 100-continue to the headers which actually speeds up post
       operations (as there is one packet coming back from the web server) */
    const char *ptr = Curl_checkheaders(conn, "Expect");
    if(ptr) {
      data->state.expect100header =







|







1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
static CURLcode expect100(struct Curl_easy *data,
                          struct connectdata *conn,
                          Curl_send_buffer *req_buffer)
{
  CURLcode result = CURLE_OK;
  data->state.expect100header = FALSE; /* default to false unless it is set
                                          to TRUE below */
  if(!data->state.disableexpect && use_http_1_1plus(data, conn) &&
     (conn->httpversion < 20)) {
    /* if not doing HTTP 1.0 or version 2, or disabled explicitly, we add an
       Expect: 100-continue to the headers which actually speeds up post
       operations (as there is one packet coming back from the web server) */
    const char *ptr = Curl_checkheaders(conn, "Expect");
    if(ptr) {
      data->state.expect100header =
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
      }
      uc = curl_url_set(h, CURLUPART_PASSWORD, NULL, 0);
      if(uc) {
        curl_url_cleanup(h);
        return CURLE_OUT_OF_MEMORY;
      }
    }
    /* Extract the the URL to use in the request. Store in STRING_TEMP_URL for
       clean-up reasons if the function returns before the free() further
       down. */
    uc = curl_url_get(h, CURLUPART_URL, &data->set.str[STRING_TEMP_URL], 0);
    if(uc) {
      curl_url_cleanup(h);
      return CURLE_OUT_OF_MEMORY;
    }







|







2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
      }
      uc = curl_url_set(h, CURLUPART_PASSWORD, NULL, 0);
      if(uc) {
        curl_url_cleanup(h);
        return CURLE_OUT_OF_MEMORY;
      }
    }
    /* Extract the URL to use in the request. Store in STRING_TEMP_URL for
       clean-up reasons if the function returns before the free() further
       down. */
    uc = curl_url_get(h, CURLUPART_URL, &data->set.str[STRING_TEMP_URL], 0);
    if(uc) {
      curl_url_cleanup(h);
      return CURLE_OUT_OF_MEMORY;
    }
3042
3043
3044
3045
3046
3047
3048


3049
3050
3051
3052
3053
3054
3055
      failf(data, "Failed sending HTTP request");
    else
      /* HTTP GET/HEAD download: */
      Curl_setup_transfer(data, FIRSTSOCKET, -1, TRUE, -1);
  }
  if(result)
    return result;



  if(data->req.writebytecount) {
    /* if a request-body has been sent off, we make sure this progress is noted
       properly */
    Curl_pgrsSetUploadCounter(data, data->req.writebytecount);
    if(Curl_pgrsUpdate(conn))
      result = CURLE_ABORTED_BY_CALLBACK;







>
>







3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
      failf(data, "Failed sending HTTP request");
    else
      /* HTTP GET/HEAD download: */
      Curl_setup_transfer(data, FIRSTSOCKET, -1, TRUE, -1);
  }
  if(result)
    return result;
  if(!postsize)
    data->req.upload_done = TRUE;

  if(data->req.writebytecount) {
    /* if a request-body has been sent off, we make sure this progress is noted
       properly */
    Curl_pgrsSetUploadCounter(data, data->req.writebytecount);
    if(Curl_pgrsUpdate(conn))
      result = CURLE_ABORTED_BY_CALLBACK;
3541
3542
3543
3544
3545
3546
3547









3548
3549
3550
3551
3552
3553
3554
3555
          case HTTPREQ_POST_MIME:
            /* We got an error response. If this happened before the whole
             * request body has been sent we stop sending and mark the
             * connection for closure after we've read the entire response.
             */
            Curl_expire_done(data, EXPIRE_100_TIMEOUT);
            if(!k->upload_done) {









              if(data->set.http_keep_sending_on_error) {
                infof(data, "HTTP error before end of send, keep sending\n");
                if(k->exp100 > EXP100_SEND_DATA) {
                  k->exp100 = EXP100_SEND_DATA;
                  k->keepon |= KEEP_SEND;
                }
              }
              else {







>
>
>
>
>
>
>
>
>
|







3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
          case HTTPREQ_POST_MIME:
            /* We got an error response. If this happened before the whole
             * request body has been sent we stop sending and mark the
             * connection for closure after we've read the entire response.
             */
            Curl_expire_done(data, EXPIRE_100_TIMEOUT);
            if(!k->upload_done) {
              if((k->httpcode == 417) && data->state.expect100header) {
                /* 417 Expectation Failed - try again without the Expect
                   header */
                infof(data, "Got 417 while waiting for a 100\n");
                data->state.disableexpect = TRUE;
                DEBUGASSERT(!data->req.newurl);
                data->req.newurl = strdup(conn->data->change.url);
                Curl_done_sending(conn, k);
              }
              else if(data->set.http_keep_sending_on_error) {
                infof(data, "HTTP error before end of send, keep sending\n");
                if(k->exp100 > EXP100_SEND_DATA) {
                  k->exp100 = EXP100_SEND_DATA;
                  k->keepon |= KEEP_SEND;
                }
              }
              else {
Changes to jni/curl/lib/http.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_HTTP_H
#define HEADER_CURL_HTTP_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_HTTP_H
#define HEADER_CURL_HTTP_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126

/* EXPECT_100_THRESHOLD is the request body size limit for when libcurl will
 * automatically add an "Expect: 100-continue" header in HTTP requests. When
 * the size is unknown, it will always add it.
 *
 */
#ifndef EXPECT_100_THRESHOLD
#define EXPECT_100_THRESHOLD 1024
#endif

#endif /* CURL_DISABLE_HTTP */

#ifdef USE_NGHTTP3
struct h3out; /* see ngtcp2 */
#endif







|







112
113
114
115
116
117
118
119
120
121
122
123
124
125
126

/* EXPECT_100_THRESHOLD is the request body size limit for when libcurl will
 * automatically add an "Expect: 100-continue" header in HTTP requests. When
 * the size is unknown, it will always add it.
 *
 */
#ifndef EXPECT_100_THRESHOLD
#define EXPECT_100_THRESHOLD (1024*1024)
#endif

#endif /* CURL_DISABLE_HTTP */

#ifdef USE_NGHTTP3
struct h3out; /* see ngtcp2 */
#endif
Changes to jni/curl/lib/http2.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

#define H2_BUFSIZE 32768

#if (NGHTTP2_VERSION_NUM < 0x010000)
#error too old nghttp2 version, upgrade!
#endif

#if (NGHTTP2_VERSION_NUM > 0x010800)
#define NGHTTP2_HAS_HTTP2_STRERROR 1
#endif

#if (NGHTTP2_VERSION_NUM >= 0x010900)
/* nghttp2_session_callbacks_set_error_callback is present in nghttp2 1.9.0 or
   later */
#define NGHTTP2_HAS_ERROR_CALLBACK 1
#else
#define nghttp2_session_callbacks_set_error_callback(x,y)
#endif

#if (NGHTTP2_VERSION_NUM >= 0x010c00)
#define NGHTTP2_HAS_SET_LOCAL_WINDOW_SIZE 1
#endif

#define HTTP2_HUGE_WINDOW_SIZE (1 << 30)

#ifdef DEBUG_HTTP2
#define H2BUGF(x) x
#else
#define H2BUGF(x) do { } while(0)
#endif








|



<
<
<
|
<
<
<
<
<







|







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
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

#define H2_BUFSIZE 32768

#if (NGHTTP2_VERSION_NUM < 0x010c00)
#error too old nghttp2 version, upgrade!
#endif




#ifdef CURL_DISABLE_VERBOSE_STRINGS





#define nghttp2_session_callbacks_set_error_callback(x,y)
#endif

#if (NGHTTP2_VERSION_NUM >= 0x010c00)
#define NGHTTP2_HAS_SET_LOCAL_WINDOW_SIZE 1
#endif

#define HTTP2_HUGE_WINDOW_SIZE (32 * 1024 * 1024) /* 32 MB */

#ifdef DEBUG_HTTP2
#define H2BUGF(x) x
#else
#define H2BUGF(x) do { } while(0)
#endif

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
 */
int Curl_http2_ver(char *p, size_t len)
{
  nghttp2_info *h2 = nghttp2_version(0);
  return msnprintf(p, len, " nghttp2/%s", h2->version_str);
}

/* HTTP/2 error code to name based on the Error Code Registry.
https://tools.ietf.org/html/rfc7540#page-77
nghttp2_error_code enums are identical.
*/
static const char *http2_strerror(uint32_t err)
{
#ifndef NGHTTP2_HAS_HTTP2_STRERROR
  const char *str[] = {
    "NO_ERROR",             /* 0x0 */
    "PROTOCOL_ERROR",       /* 0x1 */
    "INTERNAL_ERROR",       /* 0x2 */
    "FLOW_CONTROL_ERROR",   /* 0x3 */
    "SETTINGS_TIMEOUT",     /* 0x4 */
    "STREAM_CLOSED",        /* 0x5 */
    "FRAME_SIZE_ERROR",     /* 0x6 */
    "REFUSED_STREAM",       /* 0x7 */
    "CANCEL",               /* 0x8 */
    "COMPRESSION_ERROR",    /* 0x9 */
    "CONNECT_ERROR",        /* 0xA */
    "ENHANCE_YOUR_CALM",    /* 0xB */
    "INADEQUATE_SECURITY",  /* 0xC */
    "HTTP_1_1_REQUIRED"     /* 0xD */
  };
  return (err < sizeof(str) / sizeof(str[0])) ? str[err] : "unknown";
#else
  return nghttp2_http2_strerror(err);
#endif
}

/*
 * The implementation of nghttp2_send_callback type. Here we write |data| with
 * size |length| to the network and return the number of bytes actually
 * written. See the documentation of nghttp2_send_callback for the details.
 */
static ssize_t send_callback(nghttp2_session *h2,
                             const uint8_t *data, size_t length, int flags,







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







332
333
334
335
336
337
338





























339
340
341
342
343
344
345
 */
int Curl_http2_ver(char *p, size_t len)
{
  nghttp2_info *h2 = nghttp2_version(0);
  return msnprintf(p, len, " nghttp2/%s", h2->version_str);
}






























/*
 * The implementation of nghttp2_send_callback type. Here we write |data| with
 * size |length| to the network and return the number of bytes actually
 * written. See the documentation of nghttp2_send_callback for the details.
 */
static ssize_t send_callback(nghttp2_session *h2,
                             const uint8_t *data, size_t length, int flags,
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
    data_s = nghttp2_session_get_stream_user_data(session, stream_id);
    if(!data_s) {
      /* We could get stream ID not in the hash.  For example, if we
         decided to reject stream (e.g., PUSH_PROMISE). */
      return 0;
    }
    H2BUGF(infof(data_s, "on_stream_close(), %s (err %d), stream %u\n",
                 http2_strerror(error_code), error_code, stream_id));
    stream = data_s->req.protop;
    if(!stream)
      return NGHTTP2_ERR_CALLBACK_FAILURE;

    stream->closed = TRUE;
    httpc = &conn->proto.httpc;
    drain_this(data_s, httpc);







|







797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
    data_s = nghttp2_session_get_stream_user_data(session, stream_id);
    if(!data_s) {
      /* We could get stream ID not in the hash.  For example, if we
         decided to reject stream (e.g., PUSH_PROMISE). */
      return 0;
    }
    H2BUGF(infof(data_s, "on_stream_close(), %s (err %d), stream %u\n",
                 nghttp2_strerror(error_code), error_code, stream_id));
    stream = data_s->req.protop;
    if(!stream)
      return NGHTTP2_ERR_CALLBACK_FAILURE;

    stream->closed = TRUE;
    httpc = &conn->proto.httpc;
    drain_this(data_s, httpc);
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158

1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
  H2BUGF(infof(data_s, "data_source_read_callback: "
               "returns %zu bytes stream %u\n",
               nread, stream_id));

  return nread;
}

#if defined(NGHTTP2_HAS_ERROR_CALLBACK) &&      \
  !defined(CURL_DISABLE_VERBOSE_STRINGS)
static int error_callback(nghttp2_session *session,
                          const char *msg,
                          size_t len,
                          void *userp)
{
  struct connectdata *conn = (struct connectdata *)userp;
  (void)session;
  infof(conn->data, "http2 error: %.*s\n", len, msg);
  return 0;
}
#endif

static void populate_settings(struct connectdata *conn,
                              struct http_conn *httpc)
{
  nghttp2_settings_entry *iv = httpc->local_settings;


  iv[0].settings_id = NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS;
  iv[0].value = (uint32_t)Curl_multi_max_concurrent_streams(conn->data->multi);

  iv[1].settings_id = NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE;
  iv[1].value = HTTP2_HUGE_WINDOW_SIZE;

  iv[2].settings_id = NGHTTP2_SETTINGS_ENABLE_PUSH;
  iv[2].value = conn->data->multi->push_cb != NULL;








<
|
















>


|







1097
1098
1099
1100
1101
1102
1103

1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
  H2BUGF(infof(data_s, "data_source_read_callback: "
               "returns %zu bytes stream %u\n",
               nread, stream_id));

  return nread;
}


#if !defined(CURL_DISABLE_VERBOSE_STRINGS)
static int error_callback(nghttp2_session *session,
                          const char *msg,
                          size_t len,
                          void *userp)
{
  struct connectdata *conn = (struct connectdata *)userp;
  (void)session;
  infof(conn->data, "http2 error: %.*s\n", len, msg);
  return 0;
}
#endif

static void populate_settings(struct connectdata *conn,
                              struct http_conn *httpc)
{
  nghttp2_settings_entry *iv = httpc->local_settings;
  DEBUGASSERT(conn->data);

  iv[0].settings_id = NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS;
  iv[0].value = Curl_multi_max_concurrent_streams(conn->data->multi);

  iv[1].settings_id = NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE;
  iv[1].value = HTTP2_HUGE_WINDOW_SIZE;

  iv[2].settings_id = NGHTTP2_SETTINGS_ENABLE_PUSH;
  iv[2].value = conn->data->multi->push_cb != NULL;

1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
      (callbacks, on_stream_close);
    /* nghttp2_on_begin_headers_callback */
    nghttp2_session_callbacks_set_on_begin_headers_callback
      (callbacks, on_begin_headers);
    /* nghttp2_on_header_callback */
    nghttp2_session_callbacks_set_on_header_callback(callbacks, on_header);

#ifndef CURL_DISABLE_VERBOSE_STRINGS
    nghttp2_session_callbacks_set_error_callback(callbacks, error_callback);
#endif

    /* The nghttp2 session is not yet setup, do it */
    rc = nghttp2_session_client_new(&conn->proto.httpc.h2, callbacks, conn);

    nghttp2_session_callbacks_del(callbacks);

    if(rc) {







<

<







1216
1217
1218
1219
1220
1221
1222

1223

1224
1225
1226
1227
1228
1229
1230
      (callbacks, on_stream_close);
    /* nghttp2_on_begin_headers_callback */
    nghttp2_session_callbacks_set_on_begin_headers_callback
      (callbacks, on_begin_headers);
    /* nghttp2_on_header_callback */
    nghttp2_session_callbacks_set_on_header_callback(callbacks, on_header);


    nghttp2_session_callbacks_set_error_callback(callbacks, error_callback);


    /* The nghttp2 session is not yet setup, do it */
    rc = nghttp2_session_client_new(&conn->proto.httpc.h2, callbacks, conn);

    nghttp2_session_callbacks_del(callbacks);

    if(rc) {
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
    connclose(conn, "REFUSED_STREAM"); /* don't use this anymore */
    data->state.refused_stream = TRUE;
    *err = CURLE_RECV_ERROR; /* trigger Curl_retry_request() later */
    return -1;
  }
  else if(httpc->error_code != NGHTTP2_NO_ERROR) {
    failf(data, "HTTP/2 stream %d was not closed cleanly: %s (err %u)",
          stream->stream_id, http2_strerror(httpc->error_code),
          httpc->error_code);
    *err = CURLE_HTTP2_STREAM;
    return -1;
  }

  if(!stream->bodystarted) {
    failf(data, "HTTP/2 stream %d was closed cleanly, but before getting "







|







1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
    connclose(conn, "REFUSED_STREAM"); /* don't use this anymore */
    data->state.refused_stream = TRUE;
    *err = CURLE_RECV_ERROR; /* trigger Curl_retry_request() later */
    return -1;
  }
  else if(httpc->error_code != NGHTTP2_NO_ERROR) {
    failf(data, "HTTP/2 stream %d was not closed cleanly: %s (err %u)",
          stream->stream_id, nghttp2_strerror(httpc->error_code),
          httpc->error_code);
    *err = CURLE_HTTP2_STREAM;
    return -1;
  }

  if(!stream->bodystarted) {
    failf(data, "HTTP/2 stream %d was closed cleanly, but before getting "
1590
1591
1592
1593
1594
1595
1596
1597
1598




1599
1600
1601
1602
1603
1604
1605
    stream->nread_header_recvbuf += ncopy;

    H2BUGF(infof(data, "http2_recv: Got %d bytes from header_recvbuf\n",
                 (int)ncopy));
    return ncopy;
  }

  H2BUGF(infof(data, "http2_recv: easy %p (stream %u)\n",
               data, stream->stream_id));





  if((data->state.drain) && stream->memlen) {
    H2BUGF(infof(data, "http2_recv: DRAIN %zu bytes stream %u!! (%p => %p)\n",
                 stream->memlen, stream->stream_id,
                 stream->mem, mem));
    if(mem != stream->mem) {
      /* if we didn't get the same buffer this time, we must move the data to







|
|
>
>
>
>







1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
    stream->nread_header_recvbuf += ncopy;

    H2BUGF(infof(data, "http2_recv: Got %d bytes from header_recvbuf\n",
                 (int)ncopy));
    return ncopy;
  }

  H2BUGF(infof(data, "http2_recv: easy %p (stream %u) win %u/%u\n",
               data, stream->stream_id,
               nghttp2_session_get_local_window_size(httpc->h2),
               nghttp2_session_get_stream_local_window_size(httpc->h2,
                                                            stream->stream_id)
           ));

  if((data->state.drain) && stream->memlen) {
    H2BUGF(infof(data, "http2_recv: DRAIN %zu bytes stream %u!! (%p => %p)\n",
                 stream->memlen, stream->stream_id,
                 stream->mem, mem));
    if(mem != stream->mem) {
      /* if we didn't get the same buffer this time, we must move the data to
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
    DEBUGASSERT(httpc->pause_stream_id == stream->stream_id);
    nread = CURLMIN(len, stream->pauselen);
    memcpy(mem, stream->pausedata, nread);

    stream->pausedata += nread;
    stream->pauselen -= nread;

    infof(data, "%zd data bytes written\n", nread);
    if(stream->pauselen == 0) {
      H2BUGF(infof(data, "Unpaused by stream %u\n", stream->stream_id));
      DEBUGASSERT(httpc->pause_stream_id == stream->stream_id);
      httpc->pause_stream_id = 0;

      stream->pausedata = NULL;
      stream->pauselen = 0;







<







1587
1588
1589
1590
1591
1592
1593

1594
1595
1596
1597
1598
1599
1600
    DEBUGASSERT(httpc->pause_stream_id == stream->stream_id);
    nread = CURLMIN(len, stream->pauselen);
    memcpy(mem, stream->pausedata, nread);

    stream->pausedata += nread;
    stream->pauselen -= nread;


    if(stream->pauselen == 0) {
      H2BUGF(infof(data, "Unpaused by stream %u\n", stream->stream_id));
      DEBUGASSERT(httpc->pause_stream_id == stream->stream_id);
      httpc->pause_stream_id = 0;

      stream->pausedata = NULL;
      stream->pauselen = 0;
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
    if(rv != 0) {
      failf(data, "nghttp2_submit_settings() failed: %s(%d)",
            nghttp2_strerror(rv), rv);
      return CURLE_HTTP2;
    }
  }

#ifdef NGHTTP2_HAS_SET_LOCAL_WINDOW_SIZE
  rv = nghttp2_session_set_local_window_size(httpc->h2, NGHTTP2_FLAG_NONE, 0,
                                             HTTP2_HUGE_WINDOW_SIZE);
  if(rv != 0) {
    failf(data, "nghttp2_session_set_local_window_size() failed: %s(%d)",
          nghttp2_strerror(rv), rv);
    return CURLE_HTTP2;
  }
#endif

  /* we are going to copy mem to httpc->inbuf.  This is required since
     mem is part of buffer pointed by stream->mem, and callbacks
     called by nghttp2_session_mem_recv() will write stream specific
     data into stream->mem, overwriting data already there. */
  if(H2_BUFSIZE < nread) {
    failf(data, "connection buffer size is too small to store data following "







<







<







2224
2225
2226
2227
2228
2229
2230

2231
2232
2233
2234
2235
2236
2237

2238
2239
2240
2241
2242
2243
2244
    if(rv != 0) {
      failf(data, "nghttp2_submit_settings() failed: %s(%d)",
            nghttp2_strerror(rv), rv);
      return CURLE_HTTP2;
    }
  }


  rv = nghttp2_session_set_local_window_size(httpc->h2, NGHTTP2_FLAG_NONE, 0,
                                             HTTP2_HUGE_WINDOW_SIZE);
  if(rv != 0) {
    failf(data, "nghttp2_session_set_local_window_size() failed: %s(%d)",
          nghttp2_strerror(rv), rv);
    return CURLE_HTTP2;
  }


  /* we are going to copy mem to httpc->inbuf.  This is required since
     mem is part of buffer pointed by stream->mem, and callbacks
     called by nghttp2_session_mem_recv() will write stream specific
     data into stream->mem, overwriting data already there. */
  if(H2_BUFSIZE < nread) {
    failf(data, "connection buffer size is too small to store data following "
2325
2326
2327
2328
2329
2330
2331













































2332
2333
2334
2335
2336
2337
2338
    H2BUGF(infof(data,
                 "nghttp2_session_send(): nothing to do in this session\n"));
    return CURLE_HTTP2;
  }

  return CURLE_OK;
}














































CURLcode Curl_http2_add_child(struct Curl_easy *parent,
                              struct Curl_easy *child,
                              bool exclusive)
{
  if(parent) {
    struct Curl_http2_dep **tail;







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
    H2BUGF(infof(data,
                 "nghttp2_session_send(): nothing to do in this session\n"));
    return CURLE_HTTP2;
  }

  return CURLE_OK;
}

CURLcode Curl_http2_stream_pause(struct Curl_easy *data, bool pause)
{
  DEBUGASSERT(data);
  DEBUGASSERT(data->conn);
  /* if it isn't HTTP/2, we're done */
  if(!data->conn->proto.httpc.h2)
    return CURLE_OK;
#ifdef NGHTTP2_HAS_SET_LOCAL_WINDOW_SIZE
  else {
    struct HTTP *stream = data->req.protop;
    struct http_conn *httpc = &data->conn->proto.httpc;
    uint32_t window = !pause * HTTP2_HUGE_WINDOW_SIZE;
    int rv = nghttp2_session_set_local_window_size(httpc->h2,
                                                   NGHTTP2_FLAG_NONE,
                                                   stream->stream_id,
                                                   window);
    if(rv) {
      failf(data, "nghttp2_session_set_local_window_size() failed: %s(%d)",
            nghttp2_strerror(rv), rv);
      return CURLE_HTTP2;
    }

    /* make sure the window update gets sent */
    rv = h2_session_send(data, httpc->h2);
    if(rv)
      return CURLE_SEND_ERROR;

    DEBUGF(infof(data, "Set HTTP/2 window size to %u for stream %u\n",
                 window, stream->stream_id));

#ifdef DEBUGBUILD
    {
      /* read out the stream local window again */
      uint32_t window2 =
        nghttp2_session_get_stream_local_window_size(httpc->h2,
                                                     stream->stream_id);
      DEBUGF(infof(data, "HTTP/2 window size is now %u for stream %u\n",
                   window2, stream->stream_id));
    }
#endif
  }
#endif
  return CURLE_OK;
}

CURLcode Curl_http2_add_child(struct Curl_easy *parent,
                              struct Curl_easy *child,
                              bool exclusive)
{
  if(parent) {
    struct Curl_http2_dep **tail;
Changes to jni/curl/lib/http2.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_HTTP2_H
#define HEADER_CURL_HTTP2_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_HTTP2_H
#define HEADER_CURL_HTTP2_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
CURLcode Curl_http2_done_sending(struct connectdata *conn);
CURLcode Curl_http2_add_child(struct Curl_easy *parent,
                              struct Curl_easy *child,
                              bool exclusive);
void Curl_http2_remove_child(struct Curl_easy *parent,
                             struct Curl_easy *child);
void Curl_http2_cleanup_dependencies(struct Curl_easy *data);


/* returns true if the HTTP/2 stream error was HTTP_1_1_REQUIRED */
bool Curl_h2_http_1_1_error(struct connectdata *conn);
#else /* USE_NGHTTP2 */
#define Curl_http2_request_upgrade(x,y) CURLE_UNSUPPORTED_PROTOCOL
#define Curl_http2_setup(x) CURLE_UNSUPPORTED_PROTOCOL
#define Curl_http2_switched(x,y,z) CURLE_UNSUPPORTED_PROTOCOL
#define Curl_http2_setup_conn(x) Curl_nop_stmt
#define Curl_http2_setup_req(x)
#define Curl_http2_init_state(x)
#define Curl_http2_init_userset(x)
#define Curl_http2_done(x,y)
#define Curl_http2_done_sending(x)
#define Curl_http2_add_child(x, y, z)
#define Curl_http2_remove_child(x, y)
#define Curl_http2_cleanup_dependencies(x)

#define Curl_h2_http_1_1_error(x) 0
#endif

#endif /* HEADER_CURL_HTTP2_H */







>
















>




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
CURLcode Curl_http2_done_sending(struct connectdata *conn);
CURLcode Curl_http2_add_child(struct Curl_easy *parent,
                              struct Curl_easy *child,
                              bool exclusive);
void Curl_http2_remove_child(struct Curl_easy *parent,
                             struct Curl_easy *child);
void Curl_http2_cleanup_dependencies(struct Curl_easy *data);
CURLcode Curl_http2_stream_pause(struct Curl_easy *data, bool pause);

/* returns true if the HTTP/2 stream error was HTTP_1_1_REQUIRED */
bool Curl_h2_http_1_1_error(struct connectdata *conn);
#else /* USE_NGHTTP2 */
#define Curl_http2_request_upgrade(x,y) CURLE_UNSUPPORTED_PROTOCOL
#define Curl_http2_setup(x) CURLE_UNSUPPORTED_PROTOCOL
#define Curl_http2_switched(x,y,z) CURLE_UNSUPPORTED_PROTOCOL
#define Curl_http2_setup_conn(x) Curl_nop_stmt
#define Curl_http2_setup_req(x)
#define Curl_http2_init_state(x)
#define Curl_http2_init_userset(x)
#define Curl_http2_done(x,y)
#define Curl_http2_done_sending(x)
#define Curl_http2_add_child(x, y, z)
#define Curl_http2_remove_child(x, y)
#define Curl_http2_cleanup_dependencies(x)
#define Curl_http2_stream_pause(x, y)
#define Curl_h2_http_1_1_error(x) 0
#endif

#endif /* HEADER_CURL_HTTP2_H */
Changes to jni/curl/lib/libcurl.plist.
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
	<key>CFBundleExecutable</key>
	<string>curl</string>

	<key>CFBundleIdentifier</key>
	<string>se.haxx.curl.libcurl</string>

	<key>CFBundleVersion</key>
	<string>7.68.0</string>

	<key>CFBundleName</key>
	<string>libcurl</string>

	<key>CFBundlePackageType</key>
	<string>FMWK</string>

	<key>CFBundleSignature</key>
	<string>????</string>

	<key>CFBundleShortVersionString</key>
	<string>libcurl 7.68.0</string>

	<key>CFBundleGetInfoString</key>
	<string>libcurl.plist 7.68.0</string>
</dict>
</plist>







|











|


|


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
	<key>CFBundleExecutable</key>
	<string>curl</string>

	<key>CFBundleIdentifier</key>
	<string>se.haxx.curl.libcurl</string>

	<key>CFBundleVersion</key>
	<string>7.69.0</string>

	<key>CFBundleName</key>
	<string>libcurl</string>

	<key>CFBundlePackageType</key>
	<string>FMWK</string>

	<key>CFBundleSignature</key>
	<string>????</string>

	<key>CFBundleShortVersionString</key>
	<string>libcurl 7.69.0</string>

	<key>CFBundleGetInfoString</key>
	<string>libcurl.plist 7.69.0</string>
</dict>
</plist>
Changes to jni/curl/lib/llist.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
}

size_t
Curl_llist_count(struct curl_llist *list)
{
  return list->size;
}

/*
 * @unittest: 1300
 */
void Curl_llist_move(struct curl_llist *list, struct curl_llist_element *e,
                     struct curl_llist *to_list,
                     struct curl_llist_element *to_e)
{
  /* Remove element from list */
  if(e == NULL || list->size == 0)
    return;

  if(e == list->head) {
    list->head = e->next;

    if(list->head == NULL)
      list->tail = NULL;
    else
      e->next->prev = NULL;
  }
  else {
    e->prev->next = e->next;
    if(!e->next)
      list->tail = e->prev;
    else
      e->next->prev = e->prev;
  }

  --list->size;

  /* Add element to to_list after to_e */
  if(to_list->size == 0) {
    to_list->head = e;
    to_list->head->prev = NULL;
    to_list->head->next = NULL;
    to_list->tail = e;
  }
  else {
    e->next = to_e->next;
    e->prev = to_e;
    if(to_e->next) {
      to_e->next->prev = e;
    }
    else {
      to_list->tail = e;
    }
    to_e->next = e;
  }

  ++to_list->size;
}







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
140
141
142
143
144
145
146



















































}

size_t
Curl_llist_count(struct curl_llist *list)
{
  return list->size;
}



















































Changes to jni/curl/lib/llist.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_LLIST_H
#define HEADER_CURL_LLIST_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_LLIST_H
#define HEADER_CURL_LLIST_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
43
44
45
46
47
48
49
50
51
52
53
void Curl_llist_init(struct curl_llist *, curl_llist_dtor);
void Curl_llist_insert_next(struct curl_llist *, struct curl_llist_element *,
                            const void *, struct curl_llist_element *node);
void Curl_llist_remove(struct curl_llist *, struct curl_llist_element *,
                       void *);
size_t Curl_llist_count(struct curl_llist *);
void Curl_llist_destroy(struct curl_llist *, void *);
void Curl_llist_move(struct curl_llist *, struct curl_llist_element *,
                     struct curl_llist *, struct curl_llist_element *);

#endif /* HEADER_CURL_LLIST_H */







<
<
<

43
44
45
46
47
48
49



50
void Curl_llist_init(struct curl_llist *, curl_llist_dtor);
void Curl_llist_insert_next(struct curl_llist *, struct curl_llist_element *,
                            const void *, struct curl_llist_element *node);
void Curl_llist_remove(struct curl_llist *, struct curl_llist_element *,
                       void *);
size_t Curl_llist_count(struct curl_llist *);
void Curl_llist_destroy(struct curl_llist *, void *);



#endif /* HEADER_CURL_LLIST_H */
Changes to jni/curl/lib/md4.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
25
26
27
28
29
30
31
32

33
34




35

36
37
38
39
40
41
42
#if !defined(CURL_DISABLE_CRYPTO_AUTH)

#include "curl_md4.h"
#include "warnless.h"

#ifdef USE_OPENSSL
#include <openssl/opensslconf.h>
#endif

#ifdef USE_MBEDTLS
#include <mbedtls/config.h>




#endif


#if defined(USE_GNUTLS_NETTLE)

#include <nettle/md4.h>

#include "curl_memory.h"








|
>


>
>
>
>

>







25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#if !defined(CURL_DISABLE_CRYPTO_AUTH)

#include "curl_md4.h"
#include "warnless.h"

#ifdef USE_OPENSSL
#include <openssl/opensslconf.h>
#endif /* USE_OPENSSL */

#ifdef USE_MBEDTLS
#include <mbedtls/config.h>
#include <mbedtls/version.h>

#if(MBEDTLS_VERSION_NUMBER >= 0x02070000)
  #define HAS_MBEDTLS_RESULT_CODE_BASED_FUNCTIONS
#endif
#endif /* USE_MBEDTLS */

#if defined(USE_GNUTLS_NETTLE)

#include <nettle/md4.h>

#include "curl_memory.h"

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
}

#elif defined(USE_GNUTLS)

#include <gcrypt.h>

#include "curl_memory.h"

/* The last #include file should be: */
#include "memdebug.h"

typedef struct gcry_md_hd_t MD4_CTX;

static void MD4_Init(MD4_CTX *ctx)
{
  gcry_md_open(ctx, GCRY_MD_MD4, 0);
}

static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size)
{
  gcry_md_write(*ctx, data, size);
}

static void MD4_Final(unsigned char *result, MD4_CTX *ctx)
{
  memcpy(result, gcry_md_read(ctx, 0), MD4_DIGEST_LENGTH);
  gcry_md_close(ctx);
}

#elif defined(USE_OPENSSL) && !defined(OPENSSL_NO_MD4)
/* When OpenSSL is available we use the MD4-functions from OpenSSL */
#include <openssl/md4.h>



#elif defined(USE_SECTRANSP)


#include <CommonCrypto/CommonDigest.h>

#include "curl_memory.h"

/* The last #include file should be: */
#include "memdebug.h"

typedef struct {
  void *data;
  unsigned long size;
} MD4_CTX;

static void MD4_Init(MD4_CTX *ctx)
{
  ctx->data = NULL;
  ctx->size = 0;
}

static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size)
{
  if(ctx->data == NULL) {
    ctx->data = malloc(size);
    if(ctx->data != NULL) {
      memcpy(ctx->data, data, size);
      ctx->size = size;
    }
  }
}

static void MD4_Final(unsigned char *result, MD4_CTX *ctx)
{
  if(ctx->data != NULL) {
    (void)CC_MD4(ctx->data, (CC_LONG) ctx->size, result);

    Curl_safefree(ctx->data);
    ctx->size = 0;
  }
}

#elif defined(USE_WIN32_CRYPTO)

#include <wincrypt.h>

#include "curl_memory.h"

 /* The last #include file should be: */
#include "memdebug.h"

typedef struct {
  HCRYPTPROV hCryptProv;
  HCRYPTHASH hHash;
} MD4_CTX;

static void MD4_Init(MD4_CTX *ctx)
{
  ctx->hCryptProv = 0;
  ctx->hHash = 0;

  if(CryptAcquireContext(&ctx->hCryptProv, NULL, NULL, PROV_RSA_FULL,
                         CRYPT_VERIFYCONTEXT)) {
    CryptCreateHash(ctx->hCryptProv, CALG_MD4, 0, 0, &ctx->hHash);
  }
}

static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size)
{
  CryptHashData(ctx->hHash, data, (unsigned int) size, 0);
}

static void MD4_Final(unsigned char *result, MD4_CTX *ctx)
{
  unsigned long length = 0;

  CryptGetHashParam(ctx->hHash, HP_HASHVAL, NULL, &length, 0);







>



|













|
|






>
>
|
>




>



<
<
<
|



<
|




<
<
<
|
<
<
<




<
<
|
<
<
<







>
|




















|







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
}

#elif defined(USE_GNUTLS)

#include <gcrypt.h>

#include "curl_memory.h"

/* The last #include file should be: */
#include "memdebug.h"

typedef gcry_md_hd_t MD4_CTX;

static void MD4_Init(MD4_CTX *ctx)
{
  gcry_md_open(ctx, GCRY_MD_MD4, 0);
}

static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size)
{
  gcry_md_write(*ctx, data, size);
}

static void MD4_Final(unsigned char *result, MD4_CTX *ctx)
{
  memcpy(result, gcry_md_read(*ctx, 0), MD4_DIGEST_LENGTH);
  gcry_md_close(*ctx);
}

#elif defined(USE_OPENSSL) && !defined(OPENSSL_NO_MD4)
/* When OpenSSL is available we use the MD4-functions from OpenSSL */
#include <openssl/md4.h>

#elif (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && \
              (__MAC_OS_X_VERSION_MAX_ALLOWED >= 1040)) || \
      (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && \
              (__IPHONE_OS_VERSION_MAX_ALLOWED >= 20000))

#include <CommonCrypto/CommonDigest.h>

#include "curl_memory.h"

/* The last #include file should be: */
#include "memdebug.h"




typedef CC_MD4_CTX MD4_CTX;

static void MD4_Init(MD4_CTX *ctx)
{

  (void)CC_MD4_Init(ctx);
}

static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size)
{



  (void)CC_MD4_Update(ctx, data, (CC_LONG)size);



}

static void MD4_Final(unsigned char *result, MD4_CTX *ctx)
{


  (void)CC_MD4_Final(result, ctx);



}

#elif defined(USE_WIN32_CRYPTO)

#include <wincrypt.h>

#include "curl_memory.h"

/* The last #include file should be: */
#include "memdebug.h"

typedef struct {
  HCRYPTPROV hCryptProv;
  HCRYPTHASH hHash;
} MD4_CTX;

static void MD4_Init(MD4_CTX *ctx)
{
  ctx->hCryptProv = 0;
  ctx->hHash = 0;

  if(CryptAcquireContext(&ctx->hCryptProv, NULL, NULL, PROV_RSA_FULL,
                         CRYPT_VERIFYCONTEXT)) {
    CryptCreateHash(ctx->hCryptProv, CALG_MD4, 0, 0, &ctx->hHash);
  }
}

static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size)
{
  CryptHashData(ctx->hHash, (BYTE *)data, (unsigned int) size, 0);
}

static void MD4_Final(unsigned char *result, MD4_CTX *ctx)
{
  unsigned long length = 0;

  CryptGetHashParam(ctx->hHash, HP_HASHVAL, NULL, &length, 0);
175
176
177
178
179
180
181

182
183
184
185
186
187
188
}

#elif(defined(USE_MBEDTLS) && defined(MBEDTLS_MD4_C))

#include <mbedtls/md4.h>

#include "curl_memory.h"

/* The last #include file should be: */
#include "memdebug.h"

typedef struct {
  void *data;
  unsigned long size;
} MD4_CTX;







>







172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
}

#elif(defined(USE_MBEDTLS) && defined(MBEDTLS_MD4_C))

#include <mbedtls/md4.h>

#include "curl_memory.h"

/* The last #include file should be: */
#include "memdebug.h"

typedef struct {
  void *data;
  unsigned long size;
} MD4_CTX;
203
204
205
206
207
208
209

210



211
212
213
214
215
216
217
    }
  }
}

static void MD4_Final(unsigned char *result, MD4_CTX *ctx)
{
  if(ctx->data != NULL) {

    mbedtls_md4(ctx->data, ctx->size, result);




    Curl_safefree(ctx->data);
    ctx->size = 0;
  }
}

#else







>

>
>
>







201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
    }
  }
}

static void MD4_Final(unsigned char *result, MD4_CTX *ctx)
{
  if(ctx->data != NULL) {
#if !defined(HAS_MBEDTLS_RESULT_CODE_BASED_FUNCTIONS)
    mbedtls_md4(ctx->data, ctx->size, result);
#else
    (void) mbedtls_md4_ret(ctx->data, ctx->size, result);
#endif

    Curl_safefree(ctx->data);
    ctx->size = 0;
  }
}

#else
501
502
503
504
505
506
507
508

509
510

511
512
513
514
515
516
  result[15] = curlx_ultouc(ctx->d >> 24);

  memset(ctx, 0, sizeof(*ctx));
}

#endif /* CRYPTO LIBS */

void Curl_md4it(unsigned char *output, const unsigned char *input, size_t len)

{
  MD4_CTX ctx;

  MD4_Init(&ctx);
  MD4_Update(&ctx, input, curlx_uztoui(len));
  MD4_Final(output, &ctx);
}

#endif /* CURL_DISABLE_CRYPTO_AUTH */







|
>


>






503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
  result[15] = curlx_ultouc(ctx->d >> 24);

  memset(ctx, 0, sizeof(*ctx));
}

#endif /* CRYPTO LIBS */

void Curl_md4it(unsigned char *output, const unsigned char *input,
                const size_t len)
{
  MD4_CTX ctx;

  MD4_Init(&ctx);
  MD4_Update(&ctx, input, curlx_uztoui(len));
  MD4_Final(output, &ctx);
}

#endif /* CURL_DISABLE_CRYPTO_AUTH */
Changes to jni/curl/lib/md5.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
26
27
28
29
30
31
32








33
34
35
36
37
38
39

#include <curl/curl.h>

#include "curl_md5.h"
#include "curl_hmac.h"
#include "warnless.h"









#if defined(USE_GNUTLS_NETTLE)

#include <nettle/md5.h>
#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"








>
>
>
>
>
>
>
>







26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

#include <curl/curl.h>

#include "curl_md5.h"
#include "curl_hmac.h"
#include "warnless.h"

#ifdef USE_MBEDTLS
#include <mbedtls/version.h>

#if(MBEDTLS_VERSION_NUMBER >= 0x02070000)
  #define HAS_MBEDTLS_RESULT_CODE_BASED_FUNCTIONS
#endif
#endif /* USE_MBEDTLS */

#if defined(USE_GNUTLS_NETTLE)

#include <nettle/md5.h>
#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"

47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
static void MD5_Update(MD5_CTX *ctx,
                       const unsigned char *input,
                       unsigned int inputLen)
{
  md5_update(ctx, inputLen, input);
}

static void MD5_Final(unsigned char digest[16], MD5_CTX *ctx)
{
  md5_digest(ctx, 16, digest);
}

#elif defined(USE_GNUTLS)

#include <gcrypt.h>







|







55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
static void MD5_Update(MD5_CTX *ctx,
                       const unsigned char *input,
                       unsigned int inputLen)
{
  md5_update(ctx, inputLen, input);
}

static void MD5_Final(unsigned char *digest, MD5_CTX *ctx)
{
  md5_digest(ctx, 16, digest);
}

#elif defined(USE_GNUTLS)

#include <gcrypt.h>
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
static void MD5_Update(MD5_CTX *ctx,
                       const unsigned char *input,
                       unsigned int inputLen)
{
  gcry_md_write(*ctx, input, inputLen);
}

static void MD5_Final(unsigned char digest[16], MD5_CTX *ctx)
{
  memcpy(digest, gcry_md_read(*ctx, 0), 16);
  gcry_md_close(*ctx);
}

#elif defined(USE_OPENSSL) && !defined(USE_AMISSL)
/* When OpenSSL is available we use the MD5-function from OpenSSL */
#include <openssl/md5.h>
#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"









































#elif (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && \
              (__MAC_OS_X_VERSION_MAX_ALLOWED >= 1040)) || \
      (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && \
              (__IPHONE_OS_VERSION_MAX_ALLOWED >= 20000))

/* For Apple operating systems: CommonCrypto has the functions we need.







|











>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
static void MD5_Update(MD5_CTX *ctx,
                       const unsigned char *input,
                       unsigned int inputLen)
{
  gcry_md_write(*ctx, input, inputLen);
}

static void MD5_Final(unsigned char *digest, MD5_CTX *ctx)
{
  memcpy(digest, gcry_md_read(*ctx, 0), 16);
  gcry_md_close(*ctx);
}

#elif defined(USE_OPENSSL) && !defined(USE_AMISSL)
/* When OpenSSL is available we use the MD5-function from OpenSSL */
#include <openssl/md5.h>
#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"

#elif defined(USE_MBEDTLS)

#include <mbedtls/md5.h>

#include "curl_memory.h"

/* The last #include file should be: */
#include "memdebug.h"

typedef mbedtls_md5_context MD5_CTX;

static void MD5_Init(MD5_CTX *ctx)
{
#if !defined(HAS_MBEDTLS_RESULT_CODE_BASED_FUNCTIONS)
  mbedtls_md5_starts(ctx);
#else
  (void) mbedtls_md5_starts_ret(ctx);
#endif
}

static void MD5_Update(MD5_CTX *ctx,
                       const unsigned char *data,
                       unsigned int length)
{
#if !defined(HAS_MBEDTLS_RESULT_CODE_BASED_FUNCTIONS)
  mbedtls_md5_update(ctx, data, length);
#else
  (void) mbedtls_md5_update_ret(ctx, data, length);
#endif
}

static void MD5_Final(unsigned char *digest, MD5_CTX *ctx)
{
#if !defined(HAS_MBEDTLS_RESULT_CODE_BASED_FUNCTIONS)
  mbedtls_md5_finish(ctx, digest);
#else
  (void) mbedtls_md5_finish_ret(ctx, digest);
#endif
}

#elif (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && \
              (__MAC_OS_X_VERSION_MAX_ALLOWED >= 1040)) || \
      (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && \
              (__IPHONE_OS_VERSION_MAX_ALLOWED >= 20000))

/* For Apple operating systems: CommonCrypto has the functions we need.
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
static void MD5_Update(MD5_CTX *ctx,
                       const unsigned char *input,
                       unsigned int inputLen)
{
  CC_MD5_Update(ctx, input, inputLen);
}

static void MD5_Final(unsigned char digest[16], MD5_CTX *ctx)
{
  CC_MD5_Final(digest, ctx);
}

#elif defined(WIN32) && !defined(CURL_WINDOWS_APP)

#include <wincrypt.h>
#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"

typedef struct {







|




|







163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
static void MD5_Update(MD5_CTX *ctx,
                       const unsigned char *input,
                       unsigned int inputLen)
{
  CC_MD5_Update(ctx, input, inputLen);
}

static void MD5_Final(unsigned char *digest, MD5_CTX *ctx)
{
  CC_MD5_Final(digest, ctx);
}

#elif defined(USE_WIN32_CRYPTO)

#include <wincrypt.h>
#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"

typedef struct {
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
static void MD5_Update(MD5_CTX *ctx,
                       const unsigned char *input,
                       unsigned int inputLen)
{
  CryptHashData(ctx->hHash, (unsigned char *)input, inputLen, 0);
}

static void MD5_Final(unsigned char digest[16], MD5_CTX *ctx)
{
  unsigned long length = 0;
  CryptGetHashParam(ctx->hHash, HP_HASHVAL, NULL, &length, 0);
  if(length == 16)
    CryptGetHashParam(ctx->hHash, HP_HASHVAL, digest, &length, 0);
  if(ctx->hHash)
    CryptDestroyHash(ctx->hHash);
  if(ctx->hCryptProv)
    CryptReleaseContext(ctx->hCryptProv, 0);
}

#else

/* When no other crypto library is available we use this code segment */

/*
 * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc.
 * MD5 Message-Digest Algorithm (RFC 1321).
 *
 * Homepage:
 https://openwall.info/wiki/people/solar/software/public-domain-source-code/md5
 *







|












>

>







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
static void MD5_Update(MD5_CTX *ctx,
                       const unsigned char *input,
                       unsigned int inputLen)
{
  CryptHashData(ctx->hHash, (unsigned char *)input, inputLen, 0);
}

static void MD5_Final(unsigned char *digest, MD5_CTX *ctx)
{
  unsigned long length = 0;
  CryptGetHashParam(ctx->hHash, HP_HASHVAL, NULL, &length, 0);
  if(length == 16)
    CryptGetHashParam(ctx->hHash, HP_HASHVAL, digest, &length, 0);
  if(ctx->hHash)
    CryptDestroyHash(ctx->hHash);
  if(ctx->hCryptProv)
    CryptReleaseContext(ctx->hCryptProv, 0);
}

#else

/* When no other crypto library is available we use this code segment */

/*
 * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc.
 * MD5 Message-Digest Algorithm (RFC 1321).
 *
 * Homepage:
 https://openwall.info/wiki/people/solar/software/public-domain-source-code/md5
 *
509
510
511
512
513
514
515
516
517
518
519

520
521
522
523
524
525
526
527
528
    16
  }
};

/*
 * @unittest: 1601
 */
void Curl_md5it(unsigned char *outbuffer, /* 16 bytes */
                const unsigned char *input)
{
  MD5_CTX ctx;

  MD5_Init(&ctx);
  MD5_Update(&ctx, input, curlx_uztoui(strlen((char *)input)));
  MD5_Final(outbuffer, &ctx);
}

MD5_context *Curl_MD5_init(const MD5_params *md5params)
{
  MD5_context *ctxt;








|
|


>

|







559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
    16
  }
};

/*
 * @unittest: 1601
 */
void Curl_md5it(unsigned char *outbuffer, const unsigned char *input,
                const size_t len)
{
  MD5_CTX ctx;

  MD5_Init(&ctx);
  MD5_Update(&ctx, input, curlx_uztoui(len));
  MD5_Final(outbuffer, &ctx);
}

MD5_context *Curl_MD5_init(const MD5_params *md5params)
{
  MD5_context *ctxt;

Changes to jni/curl/lib/mime.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
Changes to jni/curl/lib/mime.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_MIME_H
#define HEADER_CURL_MIME_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_MIME_H
#define HEADER_CURL_MIME_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
Changes to jni/curl/lib/mk-ca-bundle.pl.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env perl
# ***************************************************************************
# *                                  _   _ ____  _
# *  Project                     ___| | | |  _ \| |
# *                             / __| | | | |_) | |
# *                            | (__| |_| |  _ <| |___
# *                             \___|\___/|_| \_\_____|
# *
# * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
# *
# * This software is licensed as described in the file COPYING, which
# * you should have received as part of this distribution. The terms
# * are also available at https://curl.haxx.se/docs/copyright.html.
# *
# * You may opt to use, copy, modify, merge, publish, distribute and/or sell
# * copies of the Software, and permit persons to whom the Software is








|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env perl
# ***************************************************************************
# *                                  _   _ ____  _
# *  Project                     ___| | | |  _ \| |
# *                             / __| | | | |_) | |
# *                            | (__| |_| |  _ <| |___
# *                             \___|\___/|_| \_\_____|
# *
# * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
# *
# * This software is licensed as described in the file COPYING, which
# * you should have received as part of this distribution. The terms
# * are also available at https://curl.haxx.se/docs/copyright.html.
# *
# * You may opt to use, copy, modify, merge, publish, distribute and/or sell
# * copies of the Software, and permit persons to whom the Software is
34
35
36
37
38
39
40

41
42
43
44
45
46
47
use Getopt::Std;
use MIME::Base64;
use strict;
use warnings;
use vars qw($opt_b $opt_d $opt_f $opt_h $opt_i $opt_k $opt_l $opt_m $opt_n $opt_p $opt_q $opt_s $opt_t $opt_u $opt_v $opt_w);
use List::Util;
use Text::Wrap;

my $MOD_SHA = "Digest::SHA";
eval "require $MOD_SHA";
if ($@) {
  $MOD_SHA = "Digest::SHA::PurePerl";
  eval "require $MOD_SHA";
}
eval "require LWP::UserAgent";







>







34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use Getopt::Std;
use MIME::Base64;
use strict;
use warnings;
use vars qw($opt_b $opt_d $opt_f $opt_h $opt_i $opt_k $opt_l $opt_m $opt_n $opt_p $opt_q $opt_s $opt_t $opt_u $opt_v $opt_w);
use List::Util;
use Text::Wrap;
use Time::Local;
my $MOD_SHA = "Digest::SHA";
eval "require $MOD_SHA";
if ($@) {
  $MOD_SHA = "Digest::SHA::PurePerl";
  eval "require $MOD_SHA";
}
eval "require LWP::UserAgent";
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

report "Processing  '$txt' ...";
my $caname;
my $certnum = 0;
my $skipnum = 0;
my $start_of_cert = 0;
my @precert;



open(TXT,"$txt") or die "Couldn't open $txt: $!\n";
while (<TXT>) {
  if (/\*\*\*\*\* BEGIN LICENSE BLOCK \*\*\*\*\*/) {
    print CRT;
    print if ($opt_l);
    while (<TXT>) {
      print CRT;
      print if ($opt_l);
      last if (/\*\*\*\*\* END LICENSE BLOCK \*\*\*\*\*/);
    }
  }
  elsif(/^# (Issuer|Serial Number|Subject|Not Valid Before|Not Valid After |Fingerprint \(MD5\)|Fingerprint \(SHA1\)):/) {
      push @precert, $_;

      next;
  }
  elsif(/^#|^\s*$/) {
      undef @precert;
      next;
  }
  chomp;












































  # this is a match for the start of a certificate
  if (/^CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE/) {
    $start_of_cert = 1
  }
  if ($start_of_cert && /^CKA_LABEL UTF8 \"(.*)\"/) {
    $caname = $1;
  }
  my %trust_purposes_by_level;
  if ($start_of_cert && /^CKA_VALUE MULTILINE_OCTAL/) {
    my $data;
    while (<TXT>) {
      last if (/^END/);
      chomp;
      my @octets = split(/\\/);
      shift @octets;
      for (@octets) {
        $data .= chr(oct);
      }
    }
    # scan forwards until the trust part
    while (<TXT>) {
      last if (/^CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST/);
      chomp;
    }

    # now scan the trust part to determine how we should trust this cert
    while (<TXT>) {
      last if (/^#/);
      if (/^CKA_TRUST_([A-Z_]+)\s+CK_TRUST\s+CKT_NSS_([A-Z_]+)\s*$/) {
        if ( !is_in_list($1,@valid_mozilla_trust_purposes) ) {
          report "Warning: Unrecognized trust purpose for cert: $caname. Trust purpose: $1. Trust Level: $2";
        } elsif ( !is_in_list($2,@valid_mozilla_trust_levels) ) {
          report "Warning: Unrecognized trust level for cert: $caname. Trust purpose: $1. Trust Level: $2";
        } else {
          push @{$trust_purposes_by_level{$2}}, $1;
        }
      }
    }

    if ( !should_output_cert(%trust_purposes_by_level) ) {
      $skipnum ++;
      report "Skipping: $caname" if ($opt_v);
    } else {


      my $encoded = MIME::Base64::encode_base64($data, '');
      $encoded =~ s/(.{1,${opt_w}})/$1\n/g;
      my $pem = "-----BEGIN CERTIFICATE-----\n"
              . $encoded
              . "-----END CERTIFICATE-----\n";
      print CRT "\n$caname\n";
      print CRT @precert if($opt_m);







>
>














>







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>










|






|


<
<
<
<
|
>


















>
>







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

report "Processing  '$txt' ...";
my $caname;
my $certnum = 0;
my $skipnum = 0;
my $start_of_cert = 0;
my @precert;
my $cka_value;
my $valid = 1;

open(TXT,"$txt") or die "Couldn't open $txt: $!\n";
while (<TXT>) {
  if (/\*\*\*\*\* BEGIN LICENSE BLOCK \*\*\*\*\*/) {
    print CRT;
    print if ($opt_l);
    while (<TXT>) {
      print CRT;
      print if ($opt_l);
      last if (/\*\*\*\*\* END LICENSE BLOCK \*\*\*\*\*/);
    }
  }
  elsif(/^# (Issuer|Serial Number|Subject|Not Valid Before|Not Valid After |Fingerprint \(MD5\)|Fingerprint \(SHA1\)):/) {
      push @precert, $_;
      $valid = 1;
      next;
  }
  elsif(/^#|^\s*$/) {
      undef @precert;
      next;
  }
  chomp;

  # Example:
  # CKA_NSS_SERVER_DISTRUST_AFTER MULTILINE_OCTAL
  # \062\060\060\066\061\067\060\060\060\060\060\060\132
  # END

  if (/^CKA_NSS_SERVER_DISTRUST_AFTER (CK_BBOOL CK_FALSE|MULTILINE_OCTAL)/) {
      if($1 eq "MULTILINE_OCTAL") {
          my @timestamp;
          while (<TXT>) {
              last if (/^END/);
              chomp;
              my @octets = split(/\\/);
              shift @octets;
              for (@octets) {
                  push @timestamp, chr(oct);
              }
          }
          # A trailing Z in the timestamp signifies UTC
          if($timestamp[12] ne "Z") {
              report "distrust date stamp is not using UTC";
          }
          # Example date: 200617000000Z
          # Means 2020-06-17 00:00:00 UTC
          my $distrustat =
            timegm($timestamp[10] . $timestamp[11], # second
                   $timestamp[8] . $timestamp[9],   # minute
                   $timestamp[6] . $timestamp[7],   # hour
                   $timestamp[4] . $timestamp[5],   # day
                   ($timestamp[2] . $timestamp[3]) - 1, # month
                   "20" . $timestamp[0] . $timestamp[1]); # year
          if(time >= $distrustat) {
              # not trusted anymore
              $skipnum++;
              report "Skipping: $caname is not trusted anymore" if ($opt_v);
              $valid = 0;
          }
          else {
              # still trusted
          }
      }
      next;
  }

  # this is a match for the start of a certificate
  if (/^CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE/) {
    $start_of_cert = 1
  }
  if ($start_of_cert && /^CKA_LABEL UTF8 \"(.*)\"/) {
    $caname = $1;
  }
  my %trust_purposes_by_level;
  if ($start_of_cert && /^CKA_VALUE MULTILINE_OCTAL/) {
    $cka_value="";
    while (<TXT>) {
      last if (/^END/);
      chomp;
      my @octets = split(/\\/);
      shift @octets;
      for (@octets) {
        $cka_value .= chr(oct);
      }
    }




  }
  if(/^CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST/ && $valid) {
    # now scan the trust part to determine how we should trust this cert
    while (<TXT>) {
      last if (/^#/);
      if (/^CKA_TRUST_([A-Z_]+)\s+CK_TRUST\s+CKT_NSS_([A-Z_]+)\s*$/) {
        if ( !is_in_list($1,@valid_mozilla_trust_purposes) ) {
          report "Warning: Unrecognized trust purpose for cert: $caname. Trust purpose: $1. Trust Level: $2";
        } elsif ( !is_in_list($2,@valid_mozilla_trust_levels) ) {
          report "Warning: Unrecognized trust level for cert: $caname. Trust purpose: $1. Trust Level: $2";
        } else {
          push @{$trust_purposes_by_level{$2}}, $1;
        }
      }
    }

    if ( !should_output_cert(%trust_purposes_by_level) ) {
      $skipnum ++;
      report "Skipping: $caname" if ($opt_v);
    } else {
      my $data = $cka_value;
      $cka_value = "";
      my $encoded = MIME::Base64::encode_base64($data, '');
      $encoded =~ s/(.{1,${opt_w}})/$1\n/g;
      my $pem = "-----BEGIN CERTIFICATE-----\n"
              . $encoded
              . "-----END CERTIFICATE-----\n";
      print CRT "\n$caname\n";
      print CRT @precert if($opt_m);
Changes to jni/curl/lib/multi.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
43
44
45
46
47
48
49

50
51
52
53
54
55
56
#include "multihandle.h"
#include "sigpipe.h"
#include "vtls/vtls.h"
#include "connect.h"
#include "http_proxy.h"
#include "http2.h"
#include "socketpair.h"

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

/*
  CURL_SOCKET_HASH_TABLE_SIZE should be a prime number. Increasing it from 97







>







43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include "multihandle.h"
#include "sigpipe.h"
#include "vtls/vtls.h"
#include "connect.h"
#include "http_proxy.h"
#include "http2.h"
#include "socketpair.h"
#include "socks.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

/*
  CURL_SOCKET_HASH_TABLE_SIZE should be a prime number. Increasing it from 97
365
366
367
368
369
370
371


372
373
374
375
376
377
378
  Curl_llist_init(&multi->msglist, NULL);
  Curl_llist_init(&multi->pending, NULL);

  multi->multiplexing = TRUE;

  /* -1 means it not set by user, use the default value */
  multi->maxconnects = -1;



#ifdef ENABLE_WAKEUP
  if(Curl_socketpair(AF_UNIX, SOCK_STREAM, 0, multi->wakeup_pair) < 0) {
    multi->wakeup_pair[0] = CURL_SOCKET_BAD;
    multi->wakeup_pair[1] = CURL_SOCKET_BAD;
  }
  else if(curlx_nonblock(multi->wakeup_pair[0], TRUE) < 0 ||







>
>







366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
  Curl_llist_init(&multi->msglist, NULL);
  Curl_llist_init(&multi->pending, NULL);

  multi->multiplexing = TRUE;

  /* -1 means it not set by user, use the default value */
  multi->maxconnects = -1;
  multi->max_concurrent_streams = 100;
  multi->ipv6_works = Curl_ipv6works(NULL);

#ifdef ENABLE_WAKEUP
  if(Curl_socketpair(AF_UNIX, SOCK_STREAM, 0, multi->wakeup_pair) < 0) {
    multi->wakeup_pair[0] = CURL_SOCKET_BAD;
    multi->wakeup_pair[1] = CURL_SOCKET_BAD;
  }
  else if(curlx_nonblock(multi->wakeup_pair[0], TRUE) < 0 ||
586
587
588
589
590
591
592



593
594
595
596
597
598
599

  process_pending_handles(data->multi); /* connection / multiplex */

  CONN_LOCK(data);
  detach_connnection(data);
  if(CONN_INUSE(conn)) {
    /* Stop if still used. */



    CONN_UNLOCK(data);
    DEBUGF(infof(data, "Connection still in use %zu, "
                 "no more multi_done now!\n",
                 conn->easyq.size));
    return CURLE_OK;
  }
  conn->data = NULL; /* the connection now has no owner */







>
>
>







589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605

  process_pending_handles(data->multi); /* connection / multiplex */

  CONN_LOCK(data);
  detach_connnection(data);
  if(CONN_INUSE(conn)) {
    /* Stop if still used. */
    /* conn->data must not remain pointing to this transfer since it is going
       away! Find another to own it! */
    conn->data = conn->easyq.head->ptr;
    CONN_UNLOCK(data);
    DEBUGF(infof(data, "Connection still in use %zu, "
                 "no more multi_done now!\n",
                 conn->easyq.size));
    return CURLE_OK;
  }
  conn->data = NULL; /* the connection now has no owner */
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736

  if(data->conn) {

    /* we must call multi_done() here (if we still own the connection) so that
       we don't leave a half-baked one around */
    if(easy_owns_conn) {

      /* multi_done() clears the conn->data field to lose the association
         between the easy handle and the connection

         Note that this ignores the return code simply because there's
         nothing really useful to do with it anyway! */
      (void)multi_done(data, data->result, premature);
    }
  }








|
|







727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742

  if(data->conn) {

    /* we must call multi_done() here (if we still own the connection) so that
       we don't leave a half-baked one around */
    if(easy_owns_conn) {

      /* multi_done() clears the association between the easy handle and the
         connection.

         Note that this ignores the return code simply because there's
         nothing really useful to do with it anyway! */
      (void)multi_done(data, data->result, premature);
    }
  }

847
848
849
850
851
852
853



854
855
856
857
858
859
860
  int rc = 0;

#ifdef USE_SSL
  if(CONNECT_FIRSTSOCKET_PROXY_SSL())
    return Curl_ssl_getsock(conn, sock);
#endif




  for(i = 0; i<2; i++) {
    if(conn->tempsock[i] != CURL_SOCKET_BAD) {
      sock[s] = conn->tempsock[i];
      rc |= GETSOCK_WRITESOCK(s);
#ifdef ENABLE_QUIC
      if(conn->transport == TRNSPRT_QUIC)
        /* when connecting QUIC, we want to read the socket too */







>
>
>







853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
  int rc = 0;

#ifdef USE_SSL
  if(CONNECT_FIRSTSOCKET_PROXY_SSL())
    return Curl_ssl_getsock(conn, sock);
#endif

  if(SOCKS_STATE(conn->cnnct.state))
    return Curl_SOCKS_getsock(conn, sock, FIRSTSOCKET);

  for(i = 0; i<2; i++) {
    if(conn->tempsock[i] != CURL_SOCKET_BAD) {
      sock[s] = conn->tempsock[i];
      rc |= GETSOCK_WRITESOCK(s);
#ifdef ENABLE_QUIC
      if(conn->transport == TRNSPRT_QUIC)
        /* when connecting QUIC, we want to read the socket too */
1044
1045
1046
1047
1048
1049
1050



1051
1052
1053
1054
1055
1056
1057

  if(!GOOD_MULTI_HANDLE(multi))
    return CURLM_BAD_HANDLE;

  if(multi->in_callback)
    return CURLM_RECURSIVE_API_CALL;




  /* Count up how many fds we have from the multi handle */
  data = multi->easyp;
  while(data) {
    bitmap = multi_getsock(data, sockbunch);

    for(i = 0; i< MAX_SOCKSPEREASYHANDLE; i++) {
      curl_socket_t s = CURL_SOCKET_BAD;







>
>
>







1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069

  if(!GOOD_MULTI_HANDLE(multi))
    return CURLM_BAD_HANDLE;

  if(multi->in_callback)
    return CURLM_RECURSIVE_API_CALL;

  if(timeout_ms < 0)
    return CURLM_BAD_FUNCTION_ARGUMENT;

  /* Count up how many fds we have from the multi handle */
  data = multi->easyp;
  while(data) {
    bitmap = multi_getsock(data, sockbunch);

    for(i = 0; i< MAX_SOCKSPEREASYHANDLE; i++) {
      curl_socket_t s = CURL_SOCKET_BAD;
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
        if(ufds[curlfds + extra_nfds].revents & POLLIN) {
          char buf[64];
          while(1) {
            /* the reading socket is non-blocking, try to read
               data from it until it receives an error (except EINTR).
               In normal cases it will get EAGAIN or EWOULDBLOCK
               when there is no more data, breaking the loop. */
            if(sread(multi->wakeup_pair[0], buf, sizeof(buf)) < 0) {
#ifndef USE_WINSOCK
              if(EINTR == SOCKERRNO)
                continue;
#endif
              break;
            }
          }







|







1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
        if(ufds[curlfds + extra_nfds].revents & POLLIN) {
          char buf[64];
          while(1) {
            /* the reading socket is non-blocking, try to read
               data from it until it receives an error (except EINTR).
               In normal cases it will get EAGAIN or EWOULDBLOCK
               when there is no more data, breaking the loop. */
            if(sread(multi->wakeup_pair[0], buf, sizeof(buf)) <= 0) {
#ifndef USE_WINSOCK
              if(EINTR == SOCKERRNO)
                continue;
#endif
              break;
            }
          }
2179
2180
2181
2182
2183
2184
2185
2186




2187

2188
2189
2190
2191
2192
2193
2194

          if(!result) {
            multistate(data, CURLM_STATE_DONE);
            rc = CURLM_CALL_MULTI_PERFORM;
          }
        }
      }
      else if(comeback)




        rc = CURLM_CALL_MULTI_PERFORM;

      break;
    }

    case CURLM_STATE_DONE:
      /* this state is highly transient, so run another loop after this */
      rc = CURLM_CALL_MULTI_PERFORM;








|
>
>
>
>
|
>







2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211

          if(!result) {
            multistate(data, CURLM_STATE_DONE);
            rc = CURLM_CALL_MULTI_PERFORM;
          }
        }
      }
      else if(comeback) {
        /* This avoids CURLM_CALL_MULTI_PERFORM so that a very fast transfer
           won't get stuck on this transfer at the expense of other concurrent
           transfers */
        Curl_expire(data, 0, EXPIRE_RUN_NOW);
        rc = CURLM_OK;
      }
      break;
    }

    case CURLM_STATE_DONE:
      /* this state is highly transient, so run another loop after this */
      rc = CURLM_CALL_MULTI_PERFORM;

2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
    break;
  case CURLMOPT_MAX_CONCURRENT_STREAMS:
    {
      long streams = va_arg(param, long);
      if(streams < 1)
        streams = 100;
      multi->max_concurrent_streams =
          (streams > (long)INITIAL_MAX_CONCURRENT_STREAMS)?
          (long)INITIAL_MAX_CONCURRENT_STREAMS : streams;
    }
    break;
  default:
    res = CURLM_UNKNOWN_OPTION;
    break;
  }
  va_end(param);







|
|







2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
    break;
  case CURLMOPT_MAX_CONCURRENT_STREAMS:
    {
      long streams = va_arg(param, long);
      if(streams < 1)
        streams = 100;
      multi->max_concurrent_streams =
        (streams > (long)INITIAL_MAX_CONCURRENT_STREAMS)?
        INITIAL_MAX_CONCURRENT_STREAMS : (unsigned int)streams;
    }
    break;
  default:
    res = CURLM_UNKNOWN_OPTION;
    break;
  }
  va_end(param);
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
      if(data->numsocks)
        fprintf(stderr, "\n");
    }
  }
}
#endif

size_t Curl_multi_max_concurrent_streams(struct Curl_multi *multi)
{
  return multi ? ((size_t)multi->max_concurrent_streams ?
                  (size_t)multi->max_concurrent_streams : 100) : 0;
}







|

|
|

3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
      if(data->numsocks)
        fprintf(stderr, "\n");
    }
  }
}
#endif

unsigned int Curl_multi_max_concurrent_streams(struct Curl_multi *multi)
{
  DEBUGASSERT(multi);
  return multi->max_concurrent_streams;
}
Changes to jni/curl/lib/multihandle.h.
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
  struct Curl_tree *timetree;

  /* 'sockhash' is the lookup hash for socket descriptor => easy handles (note
     the pluralis form, there can be more than one easy handle waiting on the
     same actual socket) */
  struct curl_hash sockhash;

  /* multiplexing wanted */
  bool multiplexing;

  bool recheckstate; /* see Curl_multi_connchanged */

  /* Shared connection cache (bundles)*/
  struct conncache conn_cache;

  long maxconnects; /* if >0, a fixed limit of the maximum number of entries
                       we're allowed to grow the connection cache to */

  long max_host_connections; /* if >0, a fixed limit of the maximum number
                                of connections per host */

  long max_total_connections; /* if >0, a fixed limit of the maximum number
                                 of connections in total */

  /* timer callback and user data pointer for the *socket() API */
  curl_multi_timer_callback timer_cb;
  void *timer_userp;
  struct curltime timer_lastcall; /* the fixed time for the timeout for the
                                    previous callback */
  bool in_callback;            /* true while executing a callback */
  long max_concurrent_streams; /* max concurrent streams client to support */

#ifdef ENABLE_WAKEUP
  curl_socket_t wakeup_pair[2]; /* socketpair() used for wakeup
                                   0 is used for read, 1 is used for write */
#endif





};

#endif /* HEADER_CURL_MULTIHANDLE_H */







<
<
<
<
<

















<
|





>
>
>
>
>



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
  struct Curl_tree *timetree;

  /* 'sockhash' is the lookup hash for socket descriptor => easy handles (note
     the pluralis form, there can be more than one easy handle waiting on the
     same actual socket) */
  struct curl_hash sockhash;






  /* Shared connection cache (bundles)*/
  struct conncache conn_cache;

  long maxconnects; /* if >0, a fixed limit of the maximum number of entries
                       we're allowed to grow the connection cache to */

  long max_host_connections; /* if >0, a fixed limit of the maximum number
                                of connections per host */

  long max_total_connections; /* if >0, a fixed limit of the maximum number
                                 of connections in total */

  /* timer callback and user data pointer for the *socket() API */
  curl_multi_timer_callback timer_cb;
  void *timer_userp;
  struct curltime timer_lastcall; /* the fixed time for the timeout for the
                                    previous callback */

  unsigned int max_concurrent_streams;

#ifdef ENABLE_WAKEUP
  curl_socket_t wakeup_pair[2]; /* socketpair() used for wakeup
                                   0 is used for read, 1 is used for write */
#endif
  /* multiplexing wanted */
  bool multiplexing;
  bool recheckstate; /* see Curl_multi_connchanged */
  bool in_callback;            /* true while executing a callback */
  bool ipv6_works;
};

#endif /* HEADER_CURL_MULTIHANDLE_H */
Changes to jni/curl/lib/multiif.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_MULTIIF_H
#define HEADER_CURL_MULTIIF_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_MULTIIF_H
#define HEADER_CURL_MULTIIF_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
86
87
88
89
90
91
92
93
94
95
96
97
98
 * Add a handle and move it into PERFORM state at once. For pushed streams.
 */
CURLMcode Curl_multi_add_perform(struct Curl_multi *multi,
                                 struct Curl_easy *data,
                                 struct connectdata *conn);


/* Return the value of the CURLMOPT_MAX_CONCURRENT_STREAMS option
 * If not specified or 0, default would be 100
 */
size_t Curl_multi_max_concurrent_streams(struct Curl_multi *multi);

#endif /* HEADER_CURL_MULTIIF_H */







|
<
<
|


86
87
88
89
90
91
92
93


94
95
96
 * Add a handle and move it into PERFORM state at once. For pushed streams.
 */
CURLMcode Curl_multi_add_perform(struct Curl_multi *multi,
                                 struct Curl_easy *data,
                                 struct connectdata *conn);


/* Return the value of the CURLMOPT_MAX_CONCURRENT_STREAMS option */


unsigned int Curl_multi_max_concurrent_streams(struct Curl_multi *multi);

#endif /* HEADER_CURL_MULTIIF_H */
Added jni/curl/lib/rename.c.




























































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "rename.h"

#include "curl_setup.h"

#if (!defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)) ||  \
  defined(USE_ALTSVC)

#include "timeval.h"

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

/* return 0 on success, 1 on error */
int Curl_rename(const char *oldpath, const char *newpath)
{
#ifdef WIN32
  /* rename() on Windows doesn't overwrite, so we can't use it here.
     MoveFileExA() will overwrite and is usually atomic, however it fails
     when there are open handles to the file. */
  const int max_wait_ms = 1000;
  struct curltime start = Curl_now();
  for(;;) {
    timediff_t diff;
    if(MoveFileExA(oldpath, newpath, MOVEFILE_REPLACE_EXISTING))
      break;
    diff = Curl_timediff(Curl_now(), start);
    if(diff < 0 || diff > max_wait_ms)
      return 1;
    Sleep(1);
  }
#else
  if(rename(oldpath, newpath))
    return 1;
#endif
  return 0;
}

#endif
Added jni/curl/lib/rename.h.






















































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
#ifndef HEADER_CURL_RENAME_H
#define HEADER_CURL_RENAME_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

int Curl_rename(const char *oldpath, const char *newpath);

#endif /* HEADER_CURL_RENAME_H */
Changes to jni/curl/lib/select.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
#include "connect.h"
#include "select.h"
#include "warnless.h"

/* Convenience local macros */
#define ELAPSED_MS() (int)Curl_timediff(Curl_now(), initial_tv)

int Curl_ack_eintr = 0;
#define ERROR_NOT_EINTR(error) (Curl_ack_eintr || error != EINTR)

/*
 * Internal function used for waiting a specific amount of ms
 * in Curl_socket_check() and Curl_poll() when no file descriptor
 * is provided to wait on, just being used to delay execution.
 * WinSock select() and poll() timeout mechanisms need a valid
 * socket descriptor in a not null file descriptor set to work.
 * Waiting indefinitely with this function is not allowed, a
 * zero or negative timeout value will return immediately.
 * Timeout resolution, accuracy, as well as maximum supported
 * value is system dependent, neither factor is a citical issue
 * for the intended use of this function in the library.
 *
 * Return values:
 *   -1 = system call error, invalid timeout value, or interrupted
 *    0 = specified timeout has elapsed
 */
int Curl_wait_ms(int timeout_ms)
{
#if !defined(MSDOS) && !defined(USE_WINSOCK)
#ifndef HAVE_POLL_FINE
  struct timeval pending_tv;
#endif
  struct curltime initial_tv;
  int pending_ms;
#endif
  int r = 0;

  if(!timeout_ms)
    return 0;
  if(timeout_ms < 0) {
    SET_SOCKERRNO(EINVAL);
    return -1;
  }
#if defined(MSDOS)
  delay(timeout_ms);
#elif defined(USE_WINSOCK)
  Sleep(timeout_ms);
#else
  pending_ms = timeout_ms;
  initial_tv = Curl_now();
  do {
    int error;
#if defined(HAVE_POLL_FINE)
    r = poll(NULL, 0, pending_ms);
#else


    pending_tv.tv_sec = pending_ms / 1000;
    pending_tv.tv_usec = (pending_ms % 1000) * 1000;
    r = select(0, NULL, NULL, NULL, &pending_tv);
#endif /* HAVE_POLL_FINE */
    if(r != -1)
      break;
    error = SOCKERRNO;
    if(error && ERROR_NOT_EINTR(error))
      break;
    pending_ms = timeout_ms - ELAPSED_MS();
    if(pending_ms <= 0) {
      r = 0;  /* Simulate a "call timed out" case */
      break;
    }
  } while(r == -1);

#endif /* USE_WINSOCK */
  if(r)
    r = -1;
  return r;
}

/*







<
<
<


















<
<
<
<
<
<
<













<
<
<
<

|

>
>
|
|

<
<
<
<
<
<
<
<
<
<
|
<
>







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
#include "connect.h"
#include "select.h"
#include "warnless.h"

/* Convenience local macros */
#define ELAPSED_MS() (int)Curl_timediff(Curl_now(), initial_tv)




/*
 * Internal function used for waiting a specific amount of ms
 * in Curl_socket_check() and Curl_poll() when no file descriptor
 * is provided to wait on, just being used to delay execution.
 * WinSock select() and poll() timeout mechanisms need a valid
 * socket descriptor in a not null file descriptor set to work.
 * Waiting indefinitely with this function is not allowed, a
 * zero or negative timeout value will return immediately.
 * Timeout resolution, accuracy, as well as maximum supported
 * value is system dependent, neither factor is a citical issue
 * for the intended use of this function in the library.
 *
 * Return values:
 *   -1 = system call error, invalid timeout value, or interrupted
 *    0 = specified timeout has elapsed
 */
int Curl_wait_ms(int timeout_ms)
{







  int r = 0;

  if(!timeout_ms)
    return 0;
  if(timeout_ms < 0) {
    SET_SOCKERRNO(EINVAL);
    return -1;
  }
#if defined(MSDOS)
  delay(timeout_ms);
#elif defined(USE_WINSOCK)
  Sleep(timeout_ms);
#else




#if defined(HAVE_POLL_FINE)
  r = poll(NULL, 0, timeout_ms);
#else
  {
    struct timeval pending_tv;
    pending_tv.tv_sec = timeout_ms / 1000;
    pending_tv.tv_usec = (timeout_ms % 1000) * 1000;
    r = select(0, NULL, NULL, NULL, &pending_tv);










  }

#endif /* HAVE_POLL_FINE */
#endif /* USE_WINSOCK */
  if(r)
    r = -1;
  return r;
}

/*
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
  struct timeval pending_tv;
  struct timeval *ptimeout;
  fd_set fds_read;
  fd_set fds_write;
  fd_set fds_err;
  curl_socket_t maxfd;
#endif
  struct curltime initial_tv = {0, 0};
  int pending_ms = 0;
  int r;
  int ret;

#if SIZEOF_TIME_T != SIZEOF_INT
  /* wrap-around precaution */
  if(timeout_ms >= INT_MAX)







<







132
133
134
135
136
137
138

139
140
141
142
143
144
145
  struct timeval pending_tv;
  struct timeval *ptimeout;
  fd_set fds_read;
  fd_set fds_write;
  fd_set fds_err;
  curl_socket_t maxfd;
#endif

  int pending_ms = 0;
  int r;
  int ret;

#if SIZEOF_TIME_T != SIZEOF_INT
  /* wrap-around precaution */
  if(timeout_ms >= INT_MAX)
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
  /* Avoid initial timestamp, avoid Curl_now() call, when elapsed
     time in this function does not need to be measured. This happens
     when function is called with a zero timeout or a negative timeout
     value indicating a blocking call should be performed. */

  if(timeout_ms > 0) {
    pending_ms = (int)timeout_ms;
    initial_tv = Curl_now();
  }

#ifdef HAVE_POLL_FINE

  num = 0;
  if(readfd0 != CURL_SOCKET_BAD) {
    pfd[num].fd = readfd0;







<







156
157
158
159
160
161
162

163
164
165
166
167
168
169
  /* Avoid initial timestamp, avoid Curl_now() call, when elapsed
     time in this function does not need to be measured. This happens
     when function is called with a zero timeout or a negative timeout
     value indicating a blocking call should be performed. */

  if(timeout_ms > 0) {
    pending_ms = (int)timeout_ms;

  }

#ifdef HAVE_POLL_FINE

  num = 0;
  if(readfd0 != CURL_SOCKET_BAD) {
    pfd[num].fd = readfd0;
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
  if(writefd != CURL_SOCKET_BAD) {
    pfd[num].fd = writefd;
    pfd[num].events = POLLWRNORM|POLLOUT;
    pfd[num].revents = 0;
    num++;
  }

  do {
    int error;
    if(timeout_ms < 0)
      pending_ms = -1;
    else if(!timeout_ms)
      pending_ms = 0;
    r = poll(pfd, num, pending_ms);
    if(r != -1)
      break;
    error = SOCKERRNO;
    if(error && ERROR_NOT_EINTR(error))
      break;
    if(timeout_ms > 0) {
      pending_ms = (int)(timeout_ms - ELAPSED_MS());
      if(pending_ms <= 0) {
        r = 0;  /* Simulate a "call timed out" case */
        break;
      }
    }
  } while(r == -1);

  if(r < 0)
    return -1;
  if(r == 0)
    return 0;

  ret = 0;







<
<
|
|
|
|
|
<
<
<
<
<
<
<
<
<
<
<
<
<







180
181
182
183
184
185
186


187
188
189
190
191













192
193
194
195
196
197
198
  if(writefd != CURL_SOCKET_BAD) {
    pfd[num].fd = writefd;
    pfd[num].events = POLLWRNORM|POLLOUT;
    pfd[num].revents = 0;
    num++;
  }



  if(timeout_ms < 0)
    pending_ms = -1;
  else if(!timeout_ms)
    pending_ms = 0;
  r = poll(pfd, num, pending_ms);














  if(r < 0)
    return -1;
  if(r == 0)
    return 0;

  ret = 0;
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
    FD_SET(writefd, &fds_err);
    if(writefd > maxfd)
      maxfd = writefd;
  }

  ptimeout = (timeout_ms < 0) ? NULL : &pending_tv;

  do {
    int error;
    if(timeout_ms > 0) {
      pending_tv.tv_sec = pending_ms / 1000;
      pending_tv.tv_usec = (pending_ms % 1000) * 1000;
    }
    else if(!timeout_ms) {
      pending_tv.tv_sec = 0;
      pending_tv.tv_usec = 0;
    }

    /* WinSock select() must not be called with an fd_set that contains zero
       fd flags, or it will return WSAEINVAL.  But, it also can't be called
       with no fd_sets at all!  From the documentation:

         Any two of the parameters, readfds, writefds, or exceptfds, can be
         given as null. At least one must be non-null, and any non-null
         descriptor set must contain at least one handle to a socket.

       We know that we have at least one bit set in at least two fd_sets in
       this case, but we may have no bits set in either fds_read or fd_write,
       so check for that and handle it.  Luckily, with WinSock, we can _also_
       ask how many bits are set on an fd_set.

       It is unclear why WinSock doesn't just handle this for us instead of
       calling this an error.

       Note also that WinSock ignores the first argument, so we don't worry
       about the fact that maxfd is computed incorrectly with WinSock (since
       curl_socket_t is unsigned in such cases and thus -1 is the largest
       value).
    */
#ifdef USE_WINSOCK
    r = select((int)maxfd + 1,
               fds_read.fd_count ? &fds_read : NULL,
               fds_write.fd_count ? &fds_write : NULL,
               &fds_err, ptimeout);
#else
    r = select((int)maxfd + 1, &fds_read, &fds_write, &fds_err, ptimeout);
#endif

    if(r != -1)
      break;
    error = SOCKERRNO;
    if(error && ERROR_NOT_EINTR(error))
      break;
    if(timeout_ms > 0) {
      pending_ms = (int)(timeout_ms - ELAPSED_MS());
      if(pending_ms <= 0) {
        r = 0;  /* Simulate a "call timed out" case */
        break;
      }
    }
  } while(r == -1);

  if(r < 0)
    return -1;
  if(r == 0)
    return 0;

  ret = 0;
  if(readfd0 != CURL_SOCKET_BAD) {







<
<
|
|
|
|
|
|
|
|

|
|
|

|
|
|

|
|
|
|

|
|

|
|
|
|
|

|
|
|
|

|


<
<
<
<
<
<
<
<
<
<
<
<
<
<







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
    FD_SET(writefd, &fds_err);
    if(writefd > maxfd)
      maxfd = writefd;
  }

  ptimeout = (timeout_ms < 0) ? NULL : &pending_tv;



  if(timeout_ms > 0) {
    pending_tv.tv_sec = pending_ms / 1000;
    pending_tv.tv_usec = (pending_ms % 1000) * 1000;
  }
  else if(!timeout_ms) {
    pending_tv.tv_sec = 0;
    pending_tv.tv_usec = 0;
  }

  /* WinSock select() must not be called with an fd_set that contains zero
     fd flags, or it will return WSAEINVAL.  But, it also can't be called
     with no fd_sets at all!  From the documentation:

     Any two of the parameters, readfds, writefds, or exceptfds, can be
     given as null. At least one must be non-null, and any non-null
     descriptor set must contain at least one handle to a socket.

     We know that we have at least one bit set in at least two fd_sets in
     this case, but we may have no bits set in either fds_read or fd_write,
     so check for that and handle it.  Luckily, with WinSock, we can _also_
     ask how many bits are set on an fd_set.

     It is unclear why WinSock doesn't just handle this for us instead of
     calling this an error.

     Note also that WinSock ignores the first argument, so we don't worry
     about the fact that maxfd is computed incorrectly with WinSock (since
     curl_socket_t is unsigned in such cases and thus -1 is the largest
     value).
  */
#ifdef USE_WINSOCK
  r = select((int)maxfd + 1,
             fds_read.fd_count ? &fds_read : NULL,
             fds_write.fd_count ? &fds_write : NULL,
             &fds_err, ptimeout);
#else
  r = select((int)maxfd + 1, &fds_read, &fds_write, &fds_err, ptimeout);
#endif















  if(r < 0)
    return -1;
  if(r == 0)
    return 0;

  ret = 0;
  if(readfd0 != CURL_SOCKET_BAD) {
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
  struct timeval pending_tv;
  struct timeval *ptimeout;
  fd_set fds_read;
  fd_set fds_write;
  fd_set fds_err;
  curl_socket_t maxfd;
#endif
  struct curltime initial_tv = {0, 0};
  bool fds_none = TRUE;
  unsigned int i;
  int pending_ms = 0;
  int r;

  if(ufds) {
    for(i = 0; i < nfds; i++) {







<







340
341
342
343
344
345
346

347
348
349
350
351
352
353
  struct timeval pending_tv;
  struct timeval *ptimeout;
  fd_set fds_read;
  fd_set fds_write;
  fd_set fds_err;
  curl_socket_t maxfd;
#endif

  bool fds_none = TRUE;
  unsigned int i;
  int pending_ms = 0;
  int r;

  if(ufds) {
    for(i = 0; i < nfds; i++) {
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
  /* Avoid initial timestamp, avoid Curl_now() call, when elapsed
     time in this function does not need to be measured. This happens
     when function is called with a zero timeout or a negative timeout
     value indicating a blocking call should be performed. */

  if(timeout_ms > 0) {
    pending_ms = timeout_ms;
    initial_tv = Curl_now();
  }

#ifdef HAVE_POLL_FINE

  do {
    int error;
    if(timeout_ms < 0)
      pending_ms = -1;
    else if(!timeout_ms)
      pending_ms = 0;
    r = poll(ufds, nfds, pending_ms);
    if(r != -1)
      break;
    error = SOCKERRNO;
    if(error && ERROR_NOT_EINTR(error))
      break;
    if(timeout_ms > 0) {
      pending_ms = (int)(timeout_ms - ELAPSED_MS());
      if(pending_ms <= 0) {
        r = 0;  /* Simulate a "call timed out" case */
        break;
      }
    }
  } while(r == -1);

  if(r < 0)
    return -1;
  if(r == 0)
    return 0;

  for(i = 0; i < nfds; i++) {







<




<
<
|
|
|
|
|
<
<
<
<
<
<
<
<
<
<
<
<
<







365
366
367
368
369
370
371

372
373
374
375


376
377
378
379
380













381
382
383
384
385
386
387
  /* Avoid initial timestamp, avoid Curl_now() call, when elapsed
     time in this function does not need to be measured. This happens
     when function is called with a zero timeout or a negative timeout
     value indicating a blocking call should be performed. */

  if(timeout_ms > 0) {
    pending_ms = timeout_ms;

  }

#ifdef HAVE_POLL_FINE



  if(timeout_ms < 0)
    pending_ms = -1;
  else if(!timeout_ms)
    pending_ms = 0;
  r = poll(ufds, nfds, pending_ms);














  if(r < 0)
    return -1;
  if(r == 0)
    return 0;

  for(i = 0; i < nfds; i++) {
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
    r = Curl_wait_ms(timeout_ms);
    return r;
  }
#endif

  ptimeout = (timeout_ms < 0) ? NULL : &pending_tv;

  do {
    int error;
    if(timeout_ms > 0) {
      pending_tv.tv_sec = pending_ms / 1000;
      pending_tv.tv_usec = (pending_ms % 1000) * 1000;
    }
    else if(!timeout_ms) {
      pending_tv.tv_sec = 0;
      pending_tv.tv_usec = 0;
    }

#ifdef USE_WINSOCK
    r = select((int)maxfd + 1,
               /* WinSock select() can't handle fd_sets with zero bits set, so
                  don't give it such arguments.  See the comment about this in
                  Curl_check_socket().
               */
               fds_read.fd_count ? &fds_read : NULL,
               fds_write.fd_count ? &fds_write : NULL,
               fds_err.fd_count ? &fds_err : NULL, ptimeout);
#else
    r = select((int)maxfd + 1, &fds_read, &fds_write, &fds_err, ptimeout);
#endif
    if(r != -1)
      break;
    error = SOCKERRNO;
    if(error && ERROR_NOT_EINTR(error))
      break;
    if(timeout_ms > 0) {
      pending_ms = timeout_ms - ELAPSED_MS();
      if(pending_ms <= 0) {
        r = 0;  /* Simulate a "call timed out" case */
        break;
      }
    }
  } while(r == -1);

  if(r < 0)
    return -1;
  if(r == 0)
    return 0;

  r = 0;







<
<
|
|
|
|
|
|
|
|


|
|
|
|
|
|
|
|

|

<
<
<
<
<
<
<
<
<
<
<
<
<







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
    r = Curl_wait_ms(timeout_ms);
    return r;
  }
#endif

  ptimeout = (timeout_ms < 0) ? NULL : &pending_tv;



  if(timeout_ms > 0) {
    pending_tv.tv_sec = pending_ms / 1000;
    pending_tv.tv_usec = (pending_ms % 1000) * 1000;
  }
  else if(!timeout_ms) {
    pending_tv.tv_sec = 0;
    pending_tv.tv_usec = 0;
  }

#ifdef USE_WINSOCK
  r = select((int)maxfd + 1,
             /* WinSock select() can't handle fd_sets with zero bits set, so
                don't give it such arguments.  See the comment about this in
                Curl_check_socket().
             */
             fds_read.fd_count ? &fds_read : NULL,
             fds_write.fd_count ? &fds_write : NULL,
             fds_err.fd_count ? &fds_err : NULL, ptimeout);
#else
  r = select((int)maxfd + 1, &fds_read, &fds_write, &fds_err, ptimeout);
#endif














  if(r < 0)
    return -1;
  if(r == 0)
    return 0;

  r = 0;
Changes to jni/curl/lib/select.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_SELECT_H
#define HEADER_CURL_SELECT_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_SELECT_H
#define HEADER_CURL_SELECT_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
   are exposed to users, but this *IN2 bit is only ever used internally and
   therefore defined here */
#define CURL_CSELECT_IN2 (CURL_CSELECT_ERR << 1)

int Curl_socket_check(curl_socket_t readfd, curl_socket_t readfd2,
                      curl_socket_t writefd,
                      time_t timeout_ms);

#define SOCKET_READABLE(x,z) \
  Curl_socket_check(x, CURL_SOCKET_BAD, CURL_SOCKET_BAD, (time_t)z)
#define SOCKET_WRITABLE(x,z) \
  Curl_socket_check(CURL_SOCKET_BAD, CURL_SOCKET_BAD, x, (time_t)z)

int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms);

/* On non-DOS and non-Winsock platforms, when Curl_ack_eintr is set,
 * EINTR condition is honored and function might exit early without
 * awaiting full timeout.  Otherwise EINTR will be ignored and full
 * timeout will elapse. */
extern int Curl_ack_eintr;

int Curl_wait_ms(int timeout_ms);

#ifdef TPF
int tpf_select_libcurl(int maxfds, fd_set* reads, fd_set* writes,
                       fd_set* excepts, struct timeval* tv);
#endif








<






<
<
<
<
<
<
<







71
72
73
74
75
76
77

78
79
80
81
82
83







84
85
86
87
88
89
90
   are exposed to users, but this *IN2 bit is only ever used internally and
   therefore defined here */
#define CURL_CSELECT_IN2 (CURL_CSELECT_ERR << 1)

int Curl_socket_check(curl_socket_t readfd, curl_socket_t readfd2,
                      curl_socket_t writefd,
                      time_t timeout_ms);

#define SOCKET_READABLE(x,z) \
  Curl_socket_check(x, CURL_SOCKET_BAD, CURL_SOCKET_BAD, (time_t)z)
#define SOCKET_WRITABLE(x,z) \
  Curl_socket_check(CURL_SOCKET_BAD, CURL_SOCKET_BAD, x, (time_t)z)

int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms);







int Curl_wait_ms(int timeout_ms);

#ifdef TPF
int tpf_select_libcurl(int maxfds, fd_set* reads, fd_set* writes,
                       fd_set* excepts, struct timeval* tv);
#endif

Changes to jni/curl/lib/sendf.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
39
40
41
42
43
44
45

46
47
48
49
50
51
52
#include "vssh/ssh.h"
#include "easyif.h"
#include "multiif.h"
#include "non-ascii.h"
#include "strerror.h"
#include "select.h"
#include "strdup.h"


/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

#ifdef CURL_DO_LINEEND_CONV







>







39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "vssh/ssh.h"
#include "easyif.h"
#include "multiif.h"
#include "non-ascii.h"
#include "strerror.h"
#include "select.h"
#include "strdup.h"
#include "http2.h"

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

#ifdef CURL_DO_LINEEND_CONV
497
498
499
500
501
502
503



504
505
506
507
508
509
510
     is again enabled */
  struct SingleRequest *k = &data->req;
  struct UrlState *s = &data->state;
  char *dupl;
  unsigned int i;
  bool newtype = TRUE;




  if(s->tempcount) {
    for(i = 0; i< s->tempcount; i++) {
      if(s->tempwrite[i].type == type) {
        /* data for this type exists */
        newtype = FALSE;
        break;
      }







>
>
>







498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
     is again enabled */
  struct SingleRequest *k = &data->req;
  struct UrlState *s = &data->state;
  char *dupl;
  unsigned int i;
  bool newtype = TRUE;

  /* If this transfers over HTTP/2, pause the stream! */
  Curl_http2_stream_pause(data, TRUE);

  if(s->tempcount) {
    for(i = 0; i< s->tempcount; i++) {
      if(s->tempwrite[i].type == type) {
        /* data for this type exists */
        newtype = FALSE;
        break;
      }
525
526
527
528
529
530
531


532
533
534
535
536
537
538
      return CURLE_OUT_OF_MEMORY;
    /* copy the new data to the end of the new area */
    memcpy(newptr + s->tempwrite[i].len, ptr, len);

    /* update the pointer and the size */
    s->tempwrite[i].buf = newptr;
    s->tempwrite[i].len = newlen;


  }
  else {
    dupl = Curl_memdup(ptr, len);
    if(!dupl)
      return CURLE_OUT_OF_MEMORY;

    /* store this information in the state struct for later use */







>
>







529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
      return CURLE_OUT_OF_MEMORY;
    /* copy the new data to the end of the new area */
    memcpy(newptr + s->tempwrite[i].len, ptr, len);

    /* update the pointer and the size */
    s->tempwrite[i].buf = newptr;
    s->tempwrite[i].len = newlen;

    len = newlen; /* for the debug output below */
  }
  else {
    dupl = Curl_memdup(ptr, len);
    if(!dupl)
      return CURLE_OUT_OF_MEMORY;

    /* store this information in the state struct for later use */
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
                         char *buf,
                         size_t bytesfromsocket,
                         ssize_t *n)
{
  ssize_t nread = sread(sockfd, buf, bytesfromsocket);

  if(-1 == nread) {
    int err = SOCKERRNO;
    int return_error;
#ifdef USE_WINSOCK
    return_error = WSAEWOULDBLOCK == err;
#else
    return_error = EWOULDBLOCK == err || EAGAIN == err || EINTR == err;
#endif


    if(return_error)
      return CURLE_AGAIN;
    return CURLE_RECV_ERROR;
  }

  /* we only return number of bytes read when we return OK */
  *n = nread;
  return CURLE_OK;
}

/*
 * Internal read-from-socket function. This is meant to deal with plain
 * sockets, SSL sockets and kerberos sockets.







|
|

|

|

>
>





<







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
                         char *buf,
                         size_t bytesfromsocket,
                         ssize_t *n)
{
  ssize_t nread = sread(sockfd, buf, bytesfromsocket);

  if(-1 == nread) {
    const int err = SOCKERRNO;
    const bool return_error =
#ifdef USE_WINSOCK
      WSAEWOULDBLOCK == err
#else
      EWOULDBLOCK == err || EAGAIN == err || EINTR == err
#endif
      ;
    *n = 0; /* no data returned */
    if(return_error)
      return CURLE_AGAIN;
    return CURLE_RECV_ERROR;
  }


  *n = nread;
  return CURLE_OK;
}

/*
 * Internal read-from-socket function. This is meant to deal with plain
 * sockets, SSL sockets and kerberos sockets.
Changes to jni/curl/lib/setopt.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
     */
    result = Curl_setstropt(&data->set.str[STRING_SSH_KNOWNHOSTS],
                            va_arg(param, char *));
    break;

  case CURLOPT_SSH_KEYFUNCTION:
    /* setting to NULL is fine since the ssh.c functions themselves will
       then rever to use the internal default */
    data->set.ssh_keyfunc = va_arg(param, curl_sshkeycallback);
    break;

  case CURLOPT_SSH_KEYDATA:
    /*
     * Custom client data to pass to the SSH keyfunc callback
     */







|







2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
     */
    result = Curl_setstropt(&data->set.str[STRING_SSH_KNOWNHOSTS],
                            va_arg(param, char *));
    break;

  case CURLOPT_SSH_KEYFUNCTION:
    /* setting to NULL is fine since the ssh.c functions themselves will
       then revert to use the internal default */
    data->set.ssh_keyfunc = va_arg(param, curl_sshkeycallback);
    break;

  case CURLOPT_SSH_KEYDATA:
    /*
     * Custom client data to pass to the SSH keyfunc callback
     */
2387
2388
2389
2390
2391
2392
2393




2394
2395
2396
2397
2398
2399
2400
                            va_arg(param, char *));
    break;

  case CURLOPT_MAIL_RCPT:
    /* Set the list of mail recipients */
    data->set.mail_rcpt = va_arg(param, struct curl_slist *);
    break;




#endif

  case CURLOPT_SASL_AUTHZID:
    /* Authorisation identity (identity to act as) */
    result = Curl_setstropt(&data->set.str[STRING_SASL_AUTHZID],
                            va_arg(param, char *));
    break;







>
>
>
>







2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
                            va_arg(param, char *));
    break;

  case CURLOPT_MAIL_RCPT:
    /* Set the list of mail recipients */
    data->set.mail_rcpt = va_arg(param, struct curl_slist *);
    break;
  case CURLOPT_MAIL_RCPT_ALLLOWFAILS:
    /* allow RCPT TO command to fail for some recipients */
    data->set.mail_rcpt_allowfails = (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;
#endif

  case CURLOPT_SASL_AUTHZID:
    /* Authorisation identity (identity to act as) */
    result = Curl_setstropt(&data->set.str[STRING_SASL_AUTHZID],
                            va_arg(param, char *));
    break;
Changes to jni/curl/lib/sha256.c.
1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Florin Petriuc, <petriuc.florin@gmail.com>

 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|
>







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2017, Florin Petriuc, <petriuc.florin@gmail.com>
 * Copyright (C) 2018 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
31
32
33
34
35
36
37







38

39













40

41
42


































































































43
44
45
46
47
48
49
50
51
52
53
54

#include <openssl/opensslv.h>

#if (OPENSSL_VERSION_NUMBER >= 0x0090800fL)
#define USE_OPENSSL_SHA256
#endif








#endif















#ifdef USE_OPENSSL_SHA256

/* When OpenSSL is available we use the SHA256-function from OpenSSL */
#include <openssl/sha.h>


































































































#else

/* When no other crypto library is available we use this code segment */

/* ===== start - public domain SHA256 implementation ===== */
/* This is based on SHA256 implementation in LibTomCrypt that was released into
 * public domain by Tom St Denis. */

#define WPA_GET_BE32(a) ((((unsigned long)(a)[0]) << 24) | \
                         (((unsigned long)(a)[1]) << 16) | \
                         (((unsigned long)(a)[2]) <<  8) | \
                          ((unsigned long)(a)[3]))







>
>
>
>
>
>
>

>

>
>
>
>
>
>
>
>
>
>
>
>
>
|
>


>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>




<







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

#include <openssl/opensslv.h>

#if (OPENSSL_VERSION_NUMBER >= 0x0090800fL)
#define USE_OPENSSL_SHA256
#endif

#endif /* USE_OPENSSL */

#ifdef USE_MBEDTLS
#include <mbedtls/version.h>

#if(MBEDTLS_VERSION_NUMBER >= 0x02070000)
  #define HAS_RESULT_CODE_BASED_FUNCTIONS
#endif
#endif /* USE_MBEDTLS */

/* Please keep the SSL backend-specific #if branches in this order:
 *
 * 1. USE_OPENSSL
 * 2. USE_GNUTLS_NETTLE
 * 3. USE_GNUTLS
 * 4. USE_MBEDTLS
 * 5. USE_COMMON_CRYPTO
 * 6. USE_WIN32_CRYPTO
 *
 * This ensures that the same SSL branch gets activated throughout this source
 * file even if multiple backends are enabled at the same time.
 */

#if defined(USE_OPENSSL_SHA256)

/* When OpenSSL is available we use the SHA256-function from OpenSSL */
#include <openssl/sha.h>

#elif defined(USE_GNUTLS_NETTLE)

#include <nettle/sha.h>

#include "curl_memory.h"

/* The last #include file should be: */
#include "memdebug.h"

typedef struct sha256_ctx SHA256_CTX;

static void SHA256_Init(SHA256_CTX *ctx)
{
  sha256_init(ctx);
}

static void SHA256_Update(SHA256_CTX *ctx,
                          const unsigned char *data,
                          unsigned int length)
{
  sha256_update(ctx, length, data);
}

static void SHA256_Final(unsigned char *digest, SHA256_CTX *ctx)
{
  sha256_digest(ctx, SHA256_DIGEST_SIZE, digest);
}

#elif defined(USE_GNUTLS)

#include <gcrypt.h>

#include "curl_memory.h"

/* The last #include file should be: */
#include "memdebug.h"

typedef gcry_md_hd_t SHA256_CTX;

static void SHA256_Init(SHA256_CTX *ctx)
{
  gcry_md_open(ctx, GCRY_MD_SHA256, 0);
}

static void SHA256_Update(SHA256_CTX *ctx,
                          const unsigned char *data,
                          unsigned int length)
{
  gcry_md_write(*ctx, data, length);
}

static void SHA256_Final(unsigned char *digest, SHA256_CTX *ctx)
{
  memcpy(digest, gcry_md_read(*ctx, 0), SHA256_DIGEST_LENGTH);
  gcry_md_close(*ctx);
}

#elif defined(USE_MBEDTLS)

#include <mbedtls/sha256.h>

#include "curl_memory.h"

/* The last #include file should be: */
#include "memdebug.h"

typedef mbedtls_sha256_context SHA256_CTX;

static void SHA256_Init(SHA256_CTX *ctx)
{
#if !defined(HAS_RESULT_CODE_BASED_FUNCTIONS)
  mbedtls_sha256_starts(ctx, 0);
#else
  (void) mbedtls_sha256_starts_ret(ctx, 0);
#endif
}

static void SHA256_Update(SHA256_CTX *ctx,
                          const unsigned char *data,
                          unsigned int length)
{
#if !defined(HAS_RESULT_CODE_BASED_FUNCTIONS)
  mbedtls_sha256_update(ctx, data, length);
#else
  (void) mbedtls_sha256_update_ret(ctx, data, length);
#endif
}

static void SHA256_Final(unsigned char *digest, SHA256_CTX *ctx)
{
#if !defined(HAS_RESULT_CODE_BASED_FUNCTIONS)
  mbedtls_sha256_finish(ctx, digest);
#else
  (void) mbedtls_sha256_finish_ret(ctx, digest);
#endif
}

#else

/* When no other crypto library is available we use this code segment */


/* This is based on SHA256 implementation in LibTomCrypt that was released into
 * public domain by Tom St Denis. */

#define WPA_GET_BE32(a) ((((unsigned long)(a)[0]) << 24) | \
                         (((unsigned long)(a)[1]) << 16) | \
                         (((unsigned long)(a)[2]) <<  8) | \
                          ((unsigned long)(a)[3]))
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
  unsigned long long length;
#else
  unsigned __int64 length;
#endif
  unsigned long state[8], curlen;
  unsigned char buf[64];
} SHA256_CTX;

/* the K array */
static const unsigned long K[64] = {
  0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, 0x3956c25bUL,
  0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, 0xd807aa98UL, 0x12835b01UL,
  0x243185beUL, 0x550c7dc3UL, 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL,
  0xc19bf174UL, 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL,
  0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, 0x983e5152UL,
  0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, 0xc6e00bf3UL, 0xd5a79147UL,
  0x06ca6351UL, 0x14292967UL, 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL,
  0x53380d13UL, 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
  0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, 0xd192e819UL,
  0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, 0x19a4c116UL, 0x1e376c08UL,
  0x2748774cUL, 0x34b0bcb5UL, 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL,
  0x682e6ff3UL, 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
  0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL
};

/* Various logical functions */
#define RORc(x, y) \
(((((unsigned long)(x) & 0xFFFFFFFFUL) >> (unsigned long)((y) & 31)) | \
   ((unsigned long)(x) << (unsigned long)(32 - ((y) & 31)))) & 0xFFFFFFFFUL)
#define Ch(x,y,z)   (z ^ (x & (y ^ z)))
#define Maj(x,y,z)  (((x | y) & z) | (x & y))
#define S(x, n)     RORc((x), (n))
#define R(x, n)     (((x)&0xFFFFFFFFUL)>>(n))
#define Sigma0(x)   (S(x, 2) ^ S(x, 13) ^ S(x, 22))
#define Sigma1(x)   (S(x, 6) ^ S(x, 11) ^ S(x, 25))
#define Gamma0(x)   (S(x, 7) ^ S(x, 18) ^ R(x, 3))
#define Gamma1(x)   (S(x, 17) ^ S(x, 19) ^ R(x, 10))

/* compress 512-bits */
static int sha256_compress(struct sha256_state *md,
                           unsigned char *buf)
{
  unsigned long S[8], W[64];
  int i;

  /* copy state into S */
  for(i = 0; i < 8; i++) {
    S[i] = md->state[i];
  }
  /* copy the state into 512-bits into W[0..15] */
  for(i = 0; i < 16; i++)
    W[i] = WPA_GET_BE32(buf + (4 * i));
  /* fill W[16..63] */
  for(i = 16; i < 64; i++) {
    W[i] = Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) +
      W[i - 16];
  }

  /* Compress */
#define RND(a,b,c,d,e,f,g,h,i)                                  \
  unsigned long t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]; \
  unsigned long t1 = Sigma0(a) + Maj(a, b, c);                  \
  d += t0;                                                      \
  h = t0 + t1;
  for(i = 0; i < 64; ++i) {
    unsigned long t;
    RND(S[0], S[1], S[2], S[3], S[4], S[5], S[6], S[7], i);
    t = S[7]; S[7] = S[6]; S[6] = S[5]; S[5] = S[4];
    S[4] = S[3]; S[3] = S[2]; S[2] = S[1]; S[1] = S[0]; S[0] = t;
  }

  /* feedback */
  for(i = 0; i < 8; i++) {
    md->state[i] = md->state[i] + S[i];
  }

  return 0;
}

/* Initialize the hash state */
static void SHA256_Init(struct sha256_state *md)
{
  md->curlen = 0;
  md->length = 0;
  md->state[0] = 0x6A09E667UL;
  md->state[1] = 0xBB67AE85UL;
  md->state[2] = 0x3C6EF372UL;
  md->state[3] = 0xA54FF53AUL;
  md->state[4] = 0x510E527FUL;
  md->state[5] = 0x9B05688CUL;
  md->state[6] = 0x1F83D9ABUL;
  md->state[7] = 0x5BE0CD19UL;
}

/**
   Process a block of memory though the hash
   @param md     The hash state
   @param in     The data to hash
   @param inlen  The length of the data (octets)
   @return CRYPT_OK if successful
*/
static int SHA256_Update(struct sha256_state *md,
                         const unsigned char *in,
                         unsigned long inlen)
{
  unsigned long n;

#define block_size 64
  if(md->curlen > sizeof(md->buf))
    return -1;
  while(inlen > 0) {
    if(md->curlen == 0 && inlen >= block_size) {
      if(sha256_compress(md, (unsigned char *)in) < 0)
        return -1;







>
|















>












>
|





>
|











>












>
|



>


>














>
|











>







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
  unsigned long long length;
#else
  unsigned __int64 length;
#endif
  unsigned long state[8], curlen;
  unsigned char buf[64];
} SHA256_CTX;

/* The K array */
static const unsigned long K[64] = {
  0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, 0x3956c25bUL,
  0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, 0xd807aa98UL, 0x12835b01UL,
  0x243185beUL, 0x550c7dc3UL, 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL,
  0xc19bf174UL, 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL,
  0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, 0x983e5152UL,
  0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, 0xc6e00bf3UL, 0xd5a79147UL,
  0x06ca6351UL, 0x14292967UL, 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL,
  0x53380d13UL, 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
  0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, 0xd192e819UL,
  0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, 0x19a4c116UL, 0x1e376c08UL,
  0x2748774cUL, 0x34b0bcb5UL, 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL,
  0x682e6ff3UL, 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
  0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL
};

/* Various logical functions */
#define RORc(x, y) \
(((((unsigned long)(x) & 0xFFFFFFFFUL) >> (unsigned long)((y) & 31)) | \
   ((unsigned long)(x) << (unsigned long)(32 - ((y) & 31)))) & 0xFFFFFFFFUL)
#define Ch(x,y,z)   (z ^ (x & (y ^ z)))
#define Maj(x,y,z)  (((x | y) & z) | (x & y))
#define S(x, n)     RORc((x), (n))
#define R(x, n)     (((x)&0xFFFFFFFFUL)>>(n))
#define Sigma0(x)   (S(x, 2) ^ S(x, 13) ^ S(x, 22))
#define Sigma1(x)   (S(x, 6) ^ S(x, 11) ^ S(x, 25))
#define Gamma0(x)   (S(x, 7) ^ S(x, 18) ^ R(x, 3))
#define Gamma1(x)   (S(x, 17) ^ S(x, 19) ^ R(x, 10))

/* Compress 512-bits */
static int sha256_compress(struct sha256_state *md,
                           unsigned char *buf)
{
  unsigned long S[8], W[64];
  int i;

  /* Copy state into S */
  for(i = 0; i < 8; i++) {
    S[i] = md->state[i];
  }
  /* copy the state into 512-bits into W[0..15] */
  for(i = 0; i < 16; i++)
    W[i] = WPA_GET_BE32(buf + (4 * i));
  /* fill W[16..63] */
  for(i = 16; i < 64; i++) {
    W[i] = Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) +
      W[i - 16];
  }

  /* Compress */
#define RND(a,b,c,d,e,f,g,h,i)                                  \
  unsigned long t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]; \
  unsigned long t1 = Sigma0(a) + Maj(a, b, c);                  \
  d += t0;                                                      \
  h = t0 + t1;
  for(i = 0; i < 64; ++i) {
    unsigned long t;
    RND(S[0], S[1], S[2], S[3], S[4], S[5], S[6], S[7], i);
    t = S[7]; S[7] = S[6]; S[6] = S[5]; S[5] = S[4];
    S[4] = S[3]; S[3] = S[2]; S[2] = S[1]; S[1] = S[0]; S[0] = t;
  }

  /* Feedback */
  for(i = 0; i < 8; i++) {
    md->state[i] = md->state[i] + S[i];
  }

  return 0;
}

/* Initialize the hash state */
static void SHA256_Init(struct sha256_state *md)
{
  md->curlen = 0;
  md->length = 0;
  md->state[0] = 0x6A09E667UL;
  md->state[1] = 0xBB67AE85UL;
  md->state[2] = 0x3C6EF372UL;
  md->state[3] = 0xA54FF53AUL;
  md->state[4] = 0x510E527FUL;
  md->state[5] = 0x9B05688CUL;
  md->state[6] = 0x1F83D9ABUL;
  md->state[7] = 0x5BE0CD19UL;
}

/*
   Process a block of memory though the hash
   @param md     The hash state
   @param in     The data to hash
   @param inlen  The length of the data (octets)
   @return CRYPT_OK if successful
*/
static int SHA256_Update(struct sha256_state *md,
                         const unsigned char *in,
                         unsigned long inlen)
{
  unsigned long n;

#define block_size 64
  if(md->curlen > sizeof(md->buf))
    return -1;
  while(inlen > 0) {
    if(md->curlen == 0 && inlen >= block_size) {
      if(sha256_compress(md, (unsigned char *)in) < 0)
        return -1;
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
        if(sha256_compress(md, md->buf) < 0)
          return -1;
        md->length += 8 * block_size;
        md->curlen = 0;
      }
    }
  }

  return 0;
}

/**
   Terminate the hash to get the digest
   @param md  The hash state
   @param out [out] The destination of the hash (32 bytes)
   @return CRYPT_OK if successful
*/
static int SHA256_Final(unsigned char *out,
                        struct sha256_state *md)
{
  int i;

  if(md->curlen >= sizeof(md->buf))
    return -1;

  /* increase the length of the message */
  md->length += md->curlen * 8;

  /* append the '1' bit */
  md->buf[md->curlen++] = (unsigned char)0x80;

  /* if the length is currently above 56 bytes we append zeros
   * then compress.  Then we can fall back to padding zeros and length
   * encoding like normal.
   */
  if(md->curlen > 56) {
    while(md->curlen < 64) {
      md->buf[md->curlen++] = (unsigned char)0;
    }
    sha256_compress(md, md->buf);
    md->curlen = 0;
  }

  /* pad up to 56 bytes of zeroes */
  while(md->curlen < 56) {
    md->buf[md->curlen++] = (unsigned char)0;
  }

  /* store length */
  WPA_PUT_BE64(md->buf + 56, md->length);
  sha256_compress(md, md->buf);

  /* copy output */
  for(i = 0; i < 8; i++)
    WPA_PUT_BE32(out + (4 * i), md->state[i]);

  return 0;
}
/* ===== end - public domain SHA256 implementation ===== */

#endif












void Curl_sha256it(unsigned char *outbuffer, /* 32 unsigned chars */
                   const unsigned char *input)
{
  SHA256_CTX ctx;

  SHA256_Init(&ctx);
  SHA256_Update(&ctx, input, curlx_uztoui(strlen((char *)input)));
  SHA256_Final(outbuffer, &ctx);
}

#endif /* CURL_DISABLE_CRYPTO_AUTH */







>


>
|









>


>
|

>
|

>
|










>
|



>
|


>
|


>


<

|

>
>
>
>
>
>
>
>
>
>
>
|
|


>

|
|



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
        if(sha256_compress(md, md->buf) < 0)
          return -1;
        md->length += 8 * block_size;
        md->curlen = 0;
      }
    }
  }

  return 0;
}

/*
   Terminate the hash to get the digest
   @param md  The hash state
   @param out [out] The destination of the hash (32 bytes)
   @return CRYPT_OK if successful
*/
static int SHA256_Final(unsigned char *out,
                        struct sha256_state *md)
{
  int i;

  if(md->curlen >= sizeof(md->buf))
    return -1;

  /* Increase the length of the message */
  md->length += md->curlen * 8;

  /* Append the '1' bit */
  md->buf[md->curlen++] = (unsigned char)0x80;

  /* If the length is currently above 56 bytes we append zeros
   * then compress.  Then we can fall back to padding zeros and length
   * encoding like normal.
   */
  if(md->curlen > 56) {
    while(md->curlen < 64) {
      md->buf[md->curlen++] = (unsigned char)0;
    }
    sha256_compress(md, md->buf);
    md->curlen = 0;
  }

  /* Pad up to 56 bytes of zeroes */
  while(md->curlen < 56) {
    md->buf[md->curlen++] = (unsigned char)0;
  }

  /* Store length */
  WPA_PUT_BE64(md->buf + 56, md->length);
  sha256_compress(md, md->buf);

  /* Copy output */
  for(i = 0; i < 8; i++)
    WPA_PUT_BE32(out + (4 * i), md->state[i]);

  return 0;
}


#endif /* CRYPTO LIBS */

/*
 * Curl_sha256it()
 *
 * Generates a SHA256 hash for the given input data.
 *
 * Parameters:
 *
 * output [in/out] - The output buffer.
 * input  [in]     - The input data.
 * length [in]     - The input length.
 */
void Curl_sha256it(unsigned char *output, const unsigned char *input,
                   const size_t length)
{
  SHA256_CTX ctx;

  SHA256_Init(&ctx);
  SHA256_Update(&ctx, input, curlx_uztoui(length));
  SHA256_Final(output, &ctx);
}

#endif /* CURL_DISABLE_CRYPTO_AUTH */
Changes to jni/curl/lib/smtp.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
23
24
25
26
27
28
29



30
31
32
33
34
35
36
 * RFC2831 DIGEST-MD5 authentication
 * RFC3207 SMTP over TLS
 * RFC4422 Simple Authentication and Security Layer (SASL)
 * RFC4616 PLAIN authentication
 * RFC4752 The Kerberos V5 ("GSSAPI") SASL Mechanism
 * RFC4954 SMTP Authentication
 * RFC5321 SMTP protocol



 * RFC6749 OAuth 2.0 Authorization Framework
 * RFC8314 Use of TLS for Email Submission and Access
 * Draft   SMTP URL Interface   <draft-earhart-url-smtp-00.txt>
 * Draft   LOGIN SASL Mechanism <draft-murchison-sasl-login-00.txt>
 *
 ***************************************************************************/








>
>
>







23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 * RFC2831 DIGEST-MD5 authentication
 * RFC3207 SMTP over TLS
 * RFC4422 Simple Authentication and Security Layer (SASL)
 * RFC4616 PLAIN authentication
 * RFC4752 The Kerberos V5 ("GSSAPI") SASL Mechanism
 * RFC4954 SMTP Authentication
 * RFC5321 SMTP protocol
 * RFC5890 Internationalized Domain Names for Applications (IDNA)
 * RFC6531 SMTP Extension for Internationalized Email
 * RFC6532 Internationalized Email Headers
 * RFC6749 OAuth 2.0 Authorization Framework
 * RFC8314 Use of TLS for Email Submission and Access
 * Draft   SMTP URL Interface   <draft-earhart-url-smtp-00.txt>
 * Draft   LOGIN SASL Mechanism <draft-murchison-sasl-login-00.txt>
 *
 ***************************************************************************/

97
98
99
100
101
102
103


104
105
106
107
108
109
110
static CURLcode smtp_multi_statemach(struct connectdata *conn, bool *done);
static int smtp_getsock(struct connectdata *conn, curl_socket_t *socks);
static CURLcode smtp_doing(struct connectdata *conn, bool *dophase_done);
static CURLcode smtp_setup_connection(struct connectdata *conn);
static CURLcode smtp_parse_url_options(struct connectdata *conn);
static CURLcode smtp_parse_url_path(struct connectdata *conn);
static CURLcode smtp_parse_custom_request(struct connectdata *conn);


static CURLcode smtp_perform_auth(struct connectdata *conn, const char *mech,
                                  const char *initresp);
static CURLcode smtp_continue_auth(struct connectdata *conn, const char *resp);
static void smtp_get_message(char *buffer, char **outptr);

/*
 * SMTP protocol handler.







>
>







100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
static CURLcode smtp_multi_statemach(struct connectdata *conn, bool *done);
static int smtp_getsock(struct connectdata *conn, curl_socket_t *socks);
static CURLcode smtp_doing(struct connectdata *conn, bool *dophase_done);
static CURLcode smtp_setup_connection(struct connectdata *conn);
static CURLcode smtp_parse_url_options(struct connectdata *conn);
static CURLcode smtp_parse_url_path(struct connectdata *conn);
static CURLcode smtp_parse_custom_request(struct connectdata *conn);
static CURLcode smtp_parse_address(struct connectdata *conn, const char *fqma,
                                   char **address, struct hostname *host);
static CURLcode smtp_perform_auth(struct connectdata *conn, const char *mech,
                                  const char *initresp);
static CURLcode smtp_continue_auth(struct connectdata *conn, const char *resp);
static void smtp_get_message(char *buffer, char **outptr);

/*
 * SMTP protocol handler.
477
478
479
480
481
482
483
484
485

























486




487







488



489



490

491
492
493
494
495
496
497
 */
static CURLcode smtp_perform_command(struct connectdata *conn)
{
  CURLcode result = CURLE_OK;
  struct Curl_easy *data = conn->data;
  struct SMTP *smtp = data->req.protop;

  /* Send the command */
  if(smtp->rcpt)

























    result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s %s",




                           smtp->custom && smtp->custom[0] != '\0' ?







                           smtp->custom : "VRFY",



                           smtp->rcpt->data);



  else

    result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s",
                           smtp->custom && smtp->custom[0] != '\0' ?
                           smtp->custom : "HELP");

  if(!result)
    state(conn, SMTP_COMMAND);








<
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>
>
>
>
|
>
>
>
>
>
>
>
|
>
>
>
|
>
>
>

>







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
 */
static CURLcode smtp_perform_command(struct connectdata *conn)
{
  CURLcode result = CURLE_OK;
  struct Curl_easy *data = conn->data;
  struct SMTP *smtp = data->req.protop;


  if(smtp->rcpt) {
    /* We notify the server we are sending UTF-8 data if a) it supports the
       SMTPUTF8 extension and b) The mailbox contains UTF-8 charaacters, in
       either the local address or host name parts. This is regardless of
       whether the host name is encoded using IDN ACE */
    bool utf8 = FALSE;

    if((!smtp->custom) || (!smtp->custom[0])) {
      char *address = NULL;
      struct hostname host = { NULL, NULL, NULL, NULL };

      /* Parse the mailbox to verify into the local address and host name
         parts, converting the host name to an IDN A-label if necessary */
      result = smtp_parse_address(conn, smtp->rcpt->data,
                                  &address, &host);
      if(result)
        return result;

      /* Establish whether we should report SMTPUTF8 to the server for this
         mailbox as per RFC-6531 sect. 3.1 point 6 */
      utf8 = (conn->proto.smtpc.utf8_supported) &&
             ((host.encalloc) || (!Curl_is_ASCII_name(address)) ||
              (!Curl_is_ASCII_name(host.name)));

      /* Send the VRFY command (Note: The host name part may be absent when the
         host is a local system) */
      result = Curl_pp_sendf(&conn->proto.smtpc.pp, "VRFY %s%s%s%s",
                             address,
                             host.name ? "@" : "",
                             host.name ? host.name : "",
                             utf8 ? " SMTPUTF8" : "");

      Curl_free_idnconverted_hostname(&host);
      free(address);
    }
    else {
      /* Establish whether we should report that we support SMTPUTF8 for EXPN
         commands to the server as per RFC-6531 sect. 3.1 point 6 */
      utf8 = (conn->proto.smtpc.utf8_supported) &&
             (!strcmp(smtp->custom, "EXPN"));

      /* Send the custom recipient based command such as the EXPN command */
      result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s %s%s", smtp->custom,
                             smtp->rcpt->data,
                             utf8 ? " SMTPUTF8" : "");
    }
  }
  else
    /* Send the non-recipient based command such as HELP */
    result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s",
                           smtp->custom && smtp->custom[0] != '\0' ?
                           smtp->custom : "HELP");

  if(!result)
    state(conn, SMTP_COMMAND);

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
static CURLcode smtp_perform_mail(struct connectdata *conn)
{
  char *from = NULL;
  char *auth = NULL;
  char *size = NULL;
  CURLcode result = CURLE_OK;
  struct Curl_easy *data = conn->data;







  /* Calculate the FROM parameter */
  if(!data->set.str[STRING_MAIL_FROM])


    /* Null reverse-path, RFC-5321, sect. 3.6.3 */






    from = strdup("<>");





  else if(data->set.str[STRING_MAIL_FROM][0] == '<')


    from = aprintf("%s", data->set.str[STRING_MAIL_FROM]);


  else


    from = aprintf("<%s>", data->set.str[STRING_MAIL_FROM]);







  if(!from)
    return CURLE_OUT_OF_MEMORY;

  /* Calculate the optional AUTH parameter */
  if(data->set.str[STRING_MAIL_AUTH] && conn->proto.smtpc.sasl.authused) {
    if(data->set.str[STRING_MAIL_AUTH][0] != '\0')





      auth = aprintf("%s", data->set.str[STRING_MAIL_AUTH]);




























    else
      /* Empty AUTH, RFC-2554, sect. 5 */
      auth = strdup("<>");

    if(!auth) {
      free(from);









>
>
>
>
>
>

|
>
>
|
>
>
>
>
>
>
|
>
>
>
>
>
|
>
>
|
>
>
|
>
>
|
>
>
>
>
>
>






|
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
static CURLcode smtp_perform_mail(struct connectdata *conn)
{
  char *from = NULL;
  char *auth = NULL;
  char *size = NULL;
  CURLcode result = CURLE_OK;
  struct Curl_easy *data = conn->data;

  /* We notify the server we are sending UTF-8 data if a) it supports the
     SMTPUTF8 extension and b) The mailbox contains UTF-8 charaacters, in
     either the local address or host name parts. This is regardless of
     whether the host name is encoded using IDN ACE */
  bool utf8 = FALSE;

  /* Calculate the FROM parameter */
  if(data->set.str[STRING_MAIL_FROM]) {
    char *address = NULL;
    struct hostname host = { NULL, NULL, NULL, NULL };

    /* Parse the FROM mailbox into the local address and host name parts,
       converting the host name to an IDN A-label if necessary */
    result = smtp_parse_address(conn, data->set.str[STRING_MAIL_FROM],
                                &address, &host);
    if(result)
      return result;

    /* Establish whether we should report SMTPUTF8 to the server for this
       mailbox as per RFC-6531 sect. 3.1 point 4 and sect. 3.4 */
    utf8 = (conn->proto.smtpc.utf8_supported) &&
           ((host.encalloc) || (!Curl_is_ASCII_name(address)) ||
            (!Curl_is_ASCII_name(host.name)));

    if(host.name) {
      from = aprintf("<%s@%s>", address, host.name);

      Curl_free_idnconverted_hostname(&host);
    }
    else
      /* An invalid mailbox was provided but we'll simply let the server worry
         about that and reply with a 501 error */
      from = aprintf("<%s>", address);

    free(address);
  }
  else
    /* Null reverse-path, RFC-5321, sect. 3.6.3 */
    from = strdup("<>");

  if(!from)
    return CURLE_OUT_OF_MEMORY;

  /* Calculate the optional AUTH parameter */
  if(data->set.str[STRING_MAIL_AUTH] && conn->proto.smtpc.sasl.authused) {
    if(data->set.str[STRING_MAIL_AUTH][0] != '\0') {
      char *address = NULL;
      struct hostname host = { NULL, NULL, NULL, NULL };

      /* Parse the AUTH mailbox into the local address and host name parts,
         converting the host name to an IDN A-label if necessary */
      result = smtp_parse_address(conn, data->set.str[STRING_MAIL_AUTH],
                                  &address, &host);
      if(result) {
        free(from);
        return result;
      }

      /* Establish whether we should report SMTPUTF8 to the server for this
         mailbox as per RFC-6531 sect. 3.1 point 4 and sect. 3.4 */
      if((!utf8) && (conn->proto.smtpc.utf8_supported) &&
         ((host.encalloc) || (!Curl_is_ASCII_name(address)) ||
          (!Curl_is_ASCII_name(host.name))))
        utf8 = TRUE;

      if(host.name) {
        free(from);
        from = aprintf("<%s@%s>", address, host.name);

        Curl_free_idnconverted_hostname(&host);
      }
      else
        /* An invalid mailbox was provided but we'll simply let the server
           worry about it */
        auth = aprintf("<%s>", address);

      free(address);
      if(!from)
        return CURLE_OUT_OF_MEMORY;
    }
    else
      /* Empty AUTH, RFC-2554, sect. 5 */
      auth = strdup("<>");

    if(!auth) {
      free(from);

557
558
559
560
561
562
563

564
565
566
567
568
569
570
    /* Make sure we will read the entire mime structure. */
    if(!result)
      result = Curl_mime_rewind(&data->set.mimepost);

    if(result) {
      free(from);
      free(auth);

      return result;
    }

    data->state.infilesize = Curl_mime_size(&data->set.mimepost);

    /* Read from mime structure. */
    data->state.fread_func = (curl_read_callback) Curl_mime_read;







>







668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
    /* Make sure we will read the entire mime structure. */
    if(!result)
      result = Curl_mime_rewind(&data->set.mimepost);

    if(result) {
      free(from);
      free(auth);

      return result;
    }

    data->state.infilesize = Curl_mime_size(&data->set.mimepost);

    /* Read from mime structure. */
    data->state.fread_func = (curl_read_callback) Curl_mime_read;
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
    if(!size) {
      free(from);
      free(auth);

      return CURLE_OUT_OF_MEMORY;
    }
  }




  /* Send the MAIL command */
  if(!auth && !size)
    result = Curl_pp_sendf(&conn->proto.smtpc.pp,


                           "MAIL FROM:%s", from);
  else if(auth && !size)

    result = Curl_pp_sendf(&conn->proto.smtpc.pp,

                           "MAIL FROM:%s AUTH=%s", from, auth);
  else if(auth && size)
    result = Curl_pp_sendf(&conn->proto.smtpc.pp,


                           "MAIL FROM:%s AUTH=%s SIZE=%s", from, auth, size);
  else

    result = Curl_pp_sendf(&conn->proto.smtpc.pp,
                           "MAIL FROM:%s SIZE=%s", from, size);








  free(from);
  free(auth);
  free(size);

  if(!result)
    state(conn, SMTP_MAIL);








>
>
>
|
<
|
>
>
|
|
>
|
>
|
<
|
>
>
|
<
>
|
|
>
>
>
>
>
>
>







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
    if(!size) {
      free(from);
      free(auth);

      return CURLE_OUT_OF_MEMORY;
    }
  }

  /* If the mailboxes in the FROM and AUTH parameters don't include a UTF-8
     based address then quickly scan through the recipient list and check if
     any there do, as we need to correctly identify our support for SMTPUTF8
     in the envelope, as per RFC-6531 sect. 3.4 */

  if(conn->proto.smtpc.utf8_supported && !utf8) {
    struct SMTP *smtp = data->req.protop;
    struct curl_slist *rcpt = smtp->rcpt;

    while(rcpt && !utf8) {
      /* Does the host name contain non-ASCII characters? */
      if(!Curl_is_ASCII_name(rcpt->data))
        utf8 = TRUE;


      rcpt = rcpt->next;
    }
  }


  /* Send the MAIL command */
  result = Curl_pp_sendf(&conn->proto.smtpc.pp,
                         "MAIL FROM:%s%s%s%s%s%s",
                         from,                 /* Mandatory                 */
                         auth ? " AUTH=" : "", /* Optional on AUTH support  */
                         auth ? auth : "",     /*                           */
                         size ? " SIZE=" : "", /* Optional on SIZE support  */
                         size ? size : "",     /*                           */
                         utf8 ? " SMTPUTF8"    /* Internationalised mailbox */
                               : "");          /* included in our envelope  */

  free(from);
  free(auth);
  free(size);

  if(!result)
    state(conn, SMTP_MAIL);
615
616
617
618
619
620
621


622







623
624
625
626

627


628
629



630
631
632
633
634
635
636
 * process.
 */
static CURLcode smtp_perform_rcpt_to(struct connectdata *conn)
{
  CURLcode result = CURLE_OK;
  struct Curl_easy *data = conn->data;
  struct SMTP *smtp = data->req.protop;










  /* Send the RCPT TO command */
  if(smtp->rcpt->data[0] == '<')
    result = Curl_pp_sendf(&conn->proto.smtpc.pp, "RCPT TO:%s",
                           smtp->rcpt->data);

  else


    result = Curl_pp_sendf(&conn->proto.smtpc.pp, "RCPT TO:<%s>",
                           smtp->rcpt->data);



  if(!result)
    state(conn, SMTP_RCPT);

  return result;
}

/***********************************************************************







>
>

>
>
>
>
>
>
>

|
|
<
>

>
>
|
|
>
>
>







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
 * process.
 */
static CURLcode smtp_perform_rcpt_to(struct connectdata *conn)
{
  CURLcode result = CURLE_OK;
  struct Curl_easy *data = conn->data;
  struct SMTP *smtp = data->req.protop;
  char *address = NULL;
  struct hostname host = { NULL, NULL, NULL, NULL };

  /* Parse the recipient mailbox into the local address and host name parts,
     converting the host name to an IDN A-label if necessary */
  result = smtp_parse_address(conn, smtp->rcpt->data,
                              &address, &host);
  if(result)
    return result;

  /* Send the RCPT TO command */
  if(host.name)
    result = Curl_pp_sendf(&conn->proto.smtpc.pp, "RCPT TO:<%s@%s>", address,

                           host.name);
  else
    /* An invalid mailbox was provided but we'll simply let the server worry
       about that and reply with a 501 error */
    result = Curl_pp_sendf(&conn->proto.smtpc.pp, "RCPT TO:<%s>", address);

  Curl_free_idnconverted_hostname(&host);
  free(address);

  if(!result)
    state(conn, SMTP_RCPT);

  return result;
}

/***********************************************************************
721
722
723
724
725
726
727




728
729
730
731
732
733
734
    /* Does the server support the STARTTLS capability? */
    if(len >= 8 && !memcmp(line, "STARTTLS", 8))
      smtpc->tls_supported = TRUE;

    /* Does the server support the SIZE capability? */
    else if(len >= 4 && !memcmp(line, "SIZE", 4))
      smtpc->size_supported = TRUE;





    /* Does the server support authentication? */
    else if(len >= 5 && !memcmp(line, "AUTH ", 5)) {
      smtpc->auth_supported = TRUE;

      /* Advance past the AUTH keyword */
      line += 5;







>
>
>
>







861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
    /* Does the server support the STARTTLS capability? */
    if(len >= 8 && !memcmp(line, "STARTTLS", 8))
      smtpc->tls_supported = TRUE;

    /* Does the server support the SIZE capability? */
    else if(len >= 4 && !memcmp(line, "SIZE", 4))
      smtpc->size_supported = TRUE;

    /* Does the server support the UTF-8 capability? */
    else if(len >= 8 && !memcmp(line, "SMTPUTF8", 8))
      smtpc->utf8_supported = TRUE;

    /* Does the server support authentication? */
    else if(len >= 5 && !memcmp(line, "AUTH ", 5)) {
      smtpc->auth_supported = TRUE;

      /* Advance past the AUTH keyword */
      line += 5;
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
/* For RCPT responses */
static CURLcode smtp_state_rcpt_resp(struct connectdata *conn, int smtpcode,
                                     smtpstate instate)
{
  CURLcode result = CURLE_OK;
  struct Curl_easy *data = conn->data;
  struct SMTP *smtp = data->req.protop;



  (void)instate; /* no use for this yet */

  if(smtpcode/100 != 2) {












    failf(data, "RCPT failed: %d", smtpcode);
    result = CURLE_SEND_ERROR;
  }

  else {





    smtp->rcpt = smtp->rcpt->next;

    if(smtp->rcpt)
      /* Send the next RCPT TO command */
      result = smtp_perform_rcpt_to(conn);
    else {







      /* Send the DATA command */
      result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", "DATA");

      if(!result)
        state(conn, SMTP_DATA);

    }
  }

  return result;
}

/* For DATA response */







>
>



|
>
>
>
>
>
>
>
>
>
>
>
>
|
|
|
>

>
>
>
>
>






>
>
>
>
>
>
>
|
|

|
|
>







1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
/* For RCPT responses */
static CURLcode smtp_state_rcpt_resp(struct connectdata *conn, int smtpcode,
                                     smtpstate instate)
{
  CURLcode result = CURLE_OK;
  struct Curl_easy *data = conn->data;
  struct SMTP *smtp = data->req.protop;
  bool is_smtp_err = FALSE;
  bool is_smtp_blocking_err = FALSE;

  (void)instate; /* no use for this yet */

  is_smtp_err = (smtpcode/100 != 2) ? TRUE : FALSE;

  /* If there's multiple RCPT TO to be issued, it's possible to ignore errors
     and proceed with only the valid addresses. */
  is_smtp_blocking_err =
    (is_smtp_err && !data->set.mail_rcpt_allowfails) ? TRUE : FALSE;

  if(is_smtp_err) {
    /* Remembering the last failure which we can report if all "RCPT TO" have
       failed and we cannot proceed. */
    smtp->rcpt_last_error = smtpcode;

    if(is_smtp_blocking_err) {
      failf(data, "RCPT failed: %d", smtpcode);
      result = CURLE_SEND_ERROR;
    }
  }
  else {
    /* Some RCPT TO commands have succeeded. */
    smtp->rcpt_had_ok = TRUE;
  }

  if(!is_smtp_blocking_err) {
    smtp->rcpt = smtp->rcpt->next;

    if(smtp->rcpt)
      /* Send the next RCPT TO command */
      result = smtp_perform_rcpt_to(conn);
    else {
      /* We weren't able to issue a successful RCPT TO command while going
         over recipients (potentially multiple). Sending back last error. */
      if(!smtp->rcpt_had_ok) {
        failf(data, "RCPT failed: %d (last error)", smtp->rcpt_last_error);
        result = CURLE_SEND_ERROR;
      }
      else {
        /* Send the DATA command */
        result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", "DATA");

        if(!result)
          state(conn, SMTP_DATA);
      }
    }
  }

  return result;
}

/* For DATA response */
1282
1283
1284
1285
1286
1287
1288






1289
1290
1291
1292
1293
1294
1295
    smtp->transfer = FTPTRANSFER_INFO;
  }

  *dophase_done = FALSE; /* not done yet */

  /* Store the first recipient (or NULL if not specified) */
  smtp->rcpt = data->set.mail_rcpt;







  /* Initial data character is the first character in line: it is implicitly
     preceded by a virtual CRLF. */
  smtp->trailing_crlf = TRUE;
  smtp->eob = 2;

  /* Start the first command in the DO phase */







>
>
>
>
>
>







1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
    smtp->transfer = FTPTRANSFER_INFO;
  }

  *dophase_done = FALSE; /* not done yet */

  /* Store the first recipient (or NULL if not specified) */
  smtp->rcpt = data->set.mail_rcpt;

  /* Track of whether we've successfully sent at least one RCPT TO command */
  smtp->rcpt_had_ok = FALSE;

  /* Track of the last error we've received by sending RCPT TO command */
  smtp->rcpt_last_error = 0;

  /* Initial data character is the first character in line: it is implicitly
     preceded by a virtual CRLF. */
  smtp->trailing_crlf = TRUE;
  smtp->eob = 2;

  /* Start the first command in the DO phase */
1530
1531
1532
1533
1534
1535
1536






































































1537
1538
1539
1540
1541
1542
1543
  struct SMTP *smtp = data->req.protop;
  const char *custom = data->set.str[STRING_CUSTOMREQUEST];

  /* URL decode the custom request */
  if(custom)
    result = Curl_urldecode(data, custom, 0, &smtp->custom, NULL, TRUE);







































































  return result;
}

CURLcode Curl_smtp_escape_eob(struct connectdata *conn, const ssize_t nread)
{
  /* When sending a SMTP payload we must detect CRLF. sequences making sure
     they are sent as CRLF.. instead, as a . on the beginning of a line will







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
  struct SMTP *smtp = data->req.protop;
  const char *custom = data->set.str[STRING_CUSTOMREQUEST];

  /* URL decode the custom request */
  if(custom)
    result = Curl_urldecode(data, custom, 0, &smtp->custom, NULL, TRUE);

  return result;
}

/***********************************************************************
 *
 * smtp_parse_address()
 *
 * Parse the fully qualified mailbox address into a local address part and the
 * host name, converting the host name to an IDN A-label, as per RFC-5890, if
 * necessary.
 *
 * Parameters:
 *
 * conn  [in]              - The connection handle.
 * fqma  [in]              - The fully qualified mailbox address (which may or
 *                           may not contain UTF-8 characters).
 * address        [in/out] - A new allocated buffer which holds the local
 *                           address part of the mailbox. This buffer must be
 *                           free'ed by the caller.
 * host           [in/out] - The host name structure that holds the original,
 *                           and optionally encoded, host name.
 *                           Curl_free_idnconverted_hostname() must be called
 *                           once the caller has finished with the structure.
 *
 * Returns CURLE_OK on success.
 *
 * Notes:
 *
 * Should a UTF-8 host name require conversion to IDN ACE and we cannot honor
 * that convertion then we shall return success. This allow the caller to send
 * the data to the server as a U-label (as per RFC-6531 sect. 3.2).
 *
 * If an mailbox '@' seperator cannot be located then the mailbox is considered
 * to be either a local mailbox or an invalid mailbox (depending on what the
 * calling function deems it to be) then the input will simply be returned in
 * the address part with the host name being NULL.
 */
static CURLcode smtp_parse_address(struct connectdata *conn, const char *fqma,
                                   char **address, struct hostname *host)
{
  CURLcode result = CURLE_OK;
  size_t length;

  /* Duplicate the fully qualified email address so we can manipulate it,
     ensuring it doesn't contain the delimiters if specified */
  char *dup = strdup(fqma[0] == '<' ? fqma + 1  : fqma);
  if(!dup)
    return CURLE_OUT_OF_MEMORY;

  length = strlen(dup);
  if(dup[length - 1] == '>')
    dup[length - 1] = '\0';

  /* Extract the host name from the addresss (if we can) */
  host->name = strpbrk(dup, "@");
  if(host->name) {
    *host->name = '\0';
    host->name = host->name + 1;

    /* Attempt to convert the host name to IDN ACE */
    (void) Curl_idnconvert_hostname(conn, host);

    /* If Curl_idnconvert_hostname() fails then we shall attempt to continue
       and send the host name using UTF-8 rather than as 7-bit ACE (which is
       our preference) */
  }

  /* Extract the local address from the mailbox */
  *address = dup;

  return result;
}

CURLcode Curl_smtp_escape_eob(struct connectdata *conn, const ssize_t nread)
{
  /* When sending a SMTP payload we must detect CRLF. sequences making sure
     they are sent as CRLF.. instead, as a . on the beginning of a line will
Changes to jni/curl/lib/smtp.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_SMTP_H
#define HEADER_CURL_SMTP_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2009 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_SMTP_H
#define HEADER_CURL_SMTP_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2009 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
   connection-oriented must be in smtp_conn to properly deal with the fact that
   perhaps the Curl_easy is changed between the times the connection is
   used. */
struct SMTP {
  curl_pp_transfer transfer;
  char *custom;            /* Custom Request */
  struct curl_slist *rcpt; /* Recipient list */



  size_t eob;              /* Number of bytes of the EOB (End Of Body) that
                              have been received so far */
  bool trailing_crlf;      /* Specifies if the tailing CRLF is present */
};

/* smtp_conn is used for struct connection-oriented data in the connectdata
   struct */
struct smtp_conn {
  struct pingpong pp;
  smtpstate state;         /* Always use smtp.c:state() to change state! */
  bool ssldone;            /* Is connect() over SSL done? */
  char *domain;            /* Client address/name to send in the EHLO */
  struct SASL sasl;        /* SASL-related storage */
  bool tls_supported;      /* StartTLS capability supported by server */
  bool size_supported;     /* If server supports SIZE extension according to
                              RFC 1870 */


  bool auth_supported;     /* AUTH capability supported by server */
};

extern const struct Curl_handler Curl_handler_smtp;
extern const struct Curl_handler Curl_handler_smtps;

/* this is the 5-bytes End-Of-Body marker for SMTP */







>
>
>
















>
>







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
   connection-oriented must be in smtp_conn to properly deal with the fact that
   perhaps the Curl_easy is changed between the times the connection is
   used. */
struct SMTP {
  curl_pp_transfer transfer;
  char *custom;            /* Custom Request */
  struct curl_slist *rcpt; /* Recipient list */
  bool rcpt_had_ok;        /* Whether any of RCPT TO commands (depends on
                              total number of recipients) succeeded so far */
  int rcpt_last_error;     /* The last error received for RCPT TO command */
  size_t eob;              /* Number of bytes of the EOB (End Of Body) that
                              have been received so far */
  bool trailing_crlf;      /* Specifies if the tailing CRLF is present */
};

/* smtp_conn is used for struct connection-oriented data in the connectdata
   struct */
struct smtp_conn {
  struct pingpong pp;
  smtpstate state;         /* Always use smtp.c:state() to change state! */
  bool ssldone;            /* Is connect() over SSL done? */
  char *domain;            /* Client address/name to send in the EHLO */
  struct SASL sasl;        /* SASL-related storage */
  bool tls_supported;      /* StartTLS capability supported by server */
  bool size_supported;     /* If server supports SIZE extension according to
                              RFC 1870 */
  bool utf8_supported;     /* If server supports SMTPUTF8 extension according
                              to RFC 6531 */
  bool auth_supported;     /* AUTH capability supported by server */
};

extern const struct Curl_handler Curl_handler_smtp;
extern const struct Curl_handler Curl_handler_smtps;

/* this is the 5-bytes End-Of-Body marker for SMTP */
Changes to jni/curl/lib/socks.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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

#include "urldata.h"
#include "sendf.h"
#include "select.h"
#include "connect.h"
#include "timeval.h"
#include "socks.h"


/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"


/*
 * Helper read-from-socket functions. Does the same as Curl_read() but it
 * blocks until all bytes amount of buffersize will be read. No more, no less.
 *
 * This is STUPID BLOCKING behaviour which we frown upon, but right now this
 * is what we have...
 */
int Curl_blockread_all(struct connectdata *conn, /* connection data */
                       curl_socket_t sockfd,     /* read from this socket */
                       char *buf,                /* store read data here */
                       ssize_t buffersize,       /* max amount to read */
                       ssize_t *n)               /* amount bytes read */
{







>






>




|
<







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

#include "urldata.h"
#include "sendf.h"
#include "select.h"
#include "connect.h"
#include "timeval.h"
#include "socks.h"
#include "multiif.h" /* for getsock macros */

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
/*
 * Helper read-from-socket functions. Does the same as Curl_read() but it
 * blocks until all bytes amount of buffersize will be read. No more, no less.
 *
 * This is STUPID BLOCKING behavior. Only used by the SOCKS GSSAPI functions.

 */
int Curl_blockread_all(struct connectdata *conn, /* connection data */
                       curl_socket_t sockfd,     /* read from this socket */
                       char *buf,                /* store read data here */
                       ssize_t buffersize,       /* max amount to read */
                       ssize_t *n)               /* amount bytes read */
{
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

    buffersize -= nread;
    buf += nread;
    allread += nread;
  }
  return result;
}












































































/*
* This function logs in to a SOCKS4 proxy and sends the specifics to the final
* destination server.
*
* Reference :
*   https://www.openssh.com/txt/socks4.protocol
*
* Note :
*   Set protocol4a=true for  "SOCKS 4A (Simple Extension to SOCKS 4 Protocol)"
*   Nonsupport "Identification Protocol (RFC1413)"
*/
CURLcode Curl_SOCKS4(const char *proxy_user,
                     const char *hostname,
                     int remote_port,
                     int sockindex,
                     struct connectdata *conn)

{
  const bool protocol4a =
    (conn->socks_proxy.proxytype == CURLPROXY_SOCKS4A) ? TRUE : FALSE;
#define SOCKS4REQLEN 262
  unsigned char socksreq[SOCKS4REQLEN]; /* room for SOCKS4 request incl. user
                                           id */
  CURLcode code;
  curl_socket_t sock = conn->sock[sockindex];
  struct Curl_easy *data = conn->data;

  if(Curl_timeleft(data, NULL, TRUE) < 0) {
    /* time-out, bail out, go home */
    failf(data, "Connection time-out");
    return CURLE_OPERATION_TIMEDOUT;
  }





  if(conn->bits.httpproxy)
    infof(conn->data, "SOCKS4%s: connecting to HTTP proxy %s port %d\n",
          protocol4a ? "a" : "", hostname, remote_port);

  (void)curlx_nonblock(sock, FALSE);

  infof(data, "SOCKS4 communication to %s:%d\n", hostname, remote_port);

  /*
   * Compose socks4 request
   *
   * Request format
   *
   *     +----+----+----+----+----+----+----+----+----+----+....+----+
   *     | VN | CD | DSTPORT |      DSTIP        | USERID       |NULL|
   *     +----+----+----+----+----+----+----+----+----+----+....+----+
   * # of bytes:  1    1      2              4           variable       1
   */

  socksreq[0] = 4; /* version (SOCKS4) */
  socksreq[1] = 1; /* connect */
  socksreq[2] = (unsigned char)((remote_port >> 8) & 0xff); /* PORT MSB */
  socksreq[3] = (unsigned char)(remote_port & 0xff);        /* PORT LSB */

  /* DNS resolve only for SOCKS4, not SOCKS4a */
  if(!protocol4a) {


    struct Curl_dns_entry *dns;



































    Curl_addrinfo *hp = NULL;
    int rc;

    rc = Curl_resolv(conn, hostname, remote_port, FALSE, &dns);

    if(rc == CURLRESOLV_ERROR)
      return CURLE_COULDNT_RESOLVE_PROXY;

    if(rc == CURLRESOLV_PENDING)
      /* ignores the return code, but 'dns' remains NULL on failure */
      (void)Curl_resolver_wait_resolv(conn, &dns);

    /*
     * We cannot use 'hostent' as a struct that Curl_resolv() returns.  It
     * returns a Curl_addrinfo pointer that may not always look the same.
     */
    if(dns)
      hp = dns->addr;
    if(hp) {
      char buf[64];
      Curl_printable_address(hp, buf, sizeof(buf));

      if(hp->ai_family == AF_INET) {
        struct sockaddr_in *saddr_in;

        saddr_in = (struct sockaddr_in *)(void *)hp->ai_addr;
        socksreq[4] = ((unsigned char *)&saddr_in->sin_addr.s_addr)[0];
        socksreq[5] = ((unsigned char *)&saddr_in->sin_addr.s_addr)[1];
        socksreq[6] = ((unsigned char *)&saddr_in->sin_addr.s_addr)[2];
        socksreq[7] = ((unsigned char *)&saddr_in->sin_addr.s_addr)[3];

        infof(data, "SOCKS4 connect to IPv4 %s (locally resolved)\n", buf);
      }
      else {
        hp = NULL; /* fail! */

        failf(data, "SOCKS4 connection to %s not supported\n", buf);
      }

      Curl_resolv_unlock(data, dns); /* not used anymore from now on */
    }
    if(!hp) {
      failf(data, "Failed to resolve \"%s\" for SOCKS4 connect.",
            hostname);
      return CURLE_COULDNT_RESOLVE_HOST;
    }
  }



  /*
   * This is currently not supporting "Identification Protocol (RFC1413)".
   */
  socksreq[8] = 0; /* ensure empty userid is NUL-terminated */
  if(proxy_user) {
    size_t plen = strlen(proxy_user);
    if(plen >= sizeof(socksreq) - 8) {
      failf(data, "Too long SOCKS proxy name, can't use!\n");
      return CURLE_COULDNT_CONNECT;
    }
    /* copy the proxy name WITH trailing zero */
    memcpy(socksreq + 8, proxy_user, plen + 1);
  }

  /*
   * Make connection
   */
  {
    int result;
    ssize_t actualread;
    ssize_t written;
    ssize_t hostnamelen = 0;
    ssize_t packetsize = 9 +
      strlen((char *)socksreq + 8); /* size including NUL */

    /* If SOCKS4a, set special invalid IP address 0.0.0.x */
    if(protocol4a) {

      socksreq[4] = 0;
      socksreq[5] = 0;
      socksreq[6] = 0;
      socksreq[7] = 1;
      /* If still enough room in buffer, also append hostname */
      hostnamelen = (ssize_t)strlen(hostname) + 1; /* length including NUL */
      if(packetsize + hostnamelen <= SOCKS4REQLEN)
        strcpy((char *)socksreq + packetsize, hostname);
      else



        hostnamelen = 0; /* Flag: hostname did not fit in buffer */
    }






    /* Send request */
    code = Curl_write_plain(conn, sock, (char *)socksreq,
                            packetsize + hostnamelen,







                            &written);
    if(code || (written != packetsize + hostnamelen)) {
      failf(data, "Failed to send SOCKS4 connect request.");
      return CURLE_COULDNT_CONNECT;
    }
    if(protocol4a && hostnamelen == 0) {
      /* SOCKS4a with very long hostname - send that name separately */
      hostnamelen = (ssize_t)strlen(hostname) + 1;
      code = Curl_write_plain(conn, sock, (char *)hostname, hostnamelen,
                              &written);
      if(code || (written != hostnamelen)) {
        failf(data, "Failed to send SOCKS4 connect request.");
        return CURLE_COULDNT_CONNECT;
      }
    }

    packetsize = 8; /* receive data size */





    /* Receive response */
    result = Curl_blockread_all(conn, sock, (char *)socksreq, packetsize,
                                &actualread);
    if(result || (actualread != packetsize)) {
      failf(data, "Failed to receive SOCKS4 connect request ack.");

      return CURLE_COULDNT_CONNECT;











    }

    /*
     * Response format
     *
     *     +----+----+----+----+----+----+----+----+
     *     | VN | CD | DSTPORT |      DSTIP        |
     *     +----+----+----+----+----+----+----+----+
     * # of bytes:  1    1      2              4
     *
     * VN is the version of the reply code and should be 0. CD is the result
     * code with one of the following values:
     *
     * 90: request granted
     * 91: request rejected or failed
     * 92: request rejected because SOCKS server cannot connect to
     *     identd on the client
     * 93: request rejected because the client program and identd
     *     report different user-ids
     */

    /* wrong version ? */
    if(socksreq[0] != 0) {
      failf(data,
            "SOCKS4 reply has wrong version, version should be 0.");
      return CURLE_COULDNT_CONNECT;
    }

    /* Result */
    switch(socksreq[1]) {
    case 90:
      infof(data, "SOCKS4%s request granted.\n", protocol4a?"a":"");
      break;
    case 91:
      failf(data,
            "Can't complete SOCKS4 connection to %d.%d.%d.%d:%d. (%d)"
            ", request rejected or failed.",
            (unsigned char)socksreq[4], (unsigned char)socksreq[5],
            (unsigned char)socksreq[6], (unsigned char)socksreq[7],
            (((unsigned char)socksreq[2] << 8) | (unsigned char)socksreq[3]),
            (unsigned char)socksreq[1]);
      return CURLE_COULDNT_CONNECT;
    case 92:
      failf(data,
            "Can't complete SOCKS4 connection to %d.%d.%d.%d:%d. (%d)"
            ", request rejected because SOCKS server cannot connect to "
            "identd on the client.",
            (unsigned char)socksreq[4], (unsigned char)socksreq[5],
            (unsigned char)socksreq[6], (unsigned char)socksreq[7],
            (((unsigned char)socksreq[2] << 8) | (unsigned char)socksreq[3]),
            (unsigned char)socksreq[1]);
      return CURLE_COULDNT_CONNECT;
    case 93:
      failf(data,
            "Can't complete SOCKS4 connection to %d.%d.%d.%d:%d. (%d)"
            ", request rejected because the client program and identd "
            "report different user-ids.",
            (unsigned char)socksreq[4], (unsigned char)socksreq[5],
            (unsigned char)socksreq[6], (unsigned char)socksreq[7],
            (((unsigned char)socksreq[2] << 8) | (unsigned char)socksreq[3]),
            (unsigned char)socksreq[1]);
      return CURLE_COULDNT_CONNECT;
    default:
      failf(data,
            "Can't complete SOCKS4 connection to %d.%d.%d.%d:%d. (%d)"
            ", Unknown.",
            (unsigned char)socksreq[4], (unsigned char)socksreq[5],
            (unsigned char)socksreq[6], (unsigned char)socksreq[7],
            (((unsigned char)socksreq[2] << 8) | (unsigned char)socksreq[3]),
            (unsigned char)socksreq[1]);
      return CURLE_COULDNT_CONNECT;
    }
  }

  (void)curlx_nonblock(sock, TRUE);

  return CURLE_OK; /* Proxy was successful! */
}

/*
 * This function logs in to a SOCKS5 proxy and sends the specifics to the final
 * destination server.
 */
CURLcode Curl_SOCKS5(const char *proxy_user,
                     const char *proxy_password,
                     const char *hostname,
                     int remote_port,
                     int sockindex,
                     struct connectdata *conn)

{
  /*
    According to the RFC1928, section "6.  Replies". This is what a SOCK5
    replies:

        +----+-----+-------+------+----------+----------+
        |VER | REP |  RSV  | ATYP | BND.ADDR | BND.PORT |
        +----+-----+-------+------+----------+----------+
        | 1  |  1  | X'00' |  1   | Variable |    2     |
        +----+-----+-------+------+----------+----------+

    Where:

    o  VER    protocol version: X'05'
    o  REP    Reply field:
    o  X'00' succeeded
  */
#define REQUEST_BUFSIZE 600  /* room for large user/pw (255 max each) */
  unsigned char socksreq[REQUEST_BUFSIZE];
  char dest[REQUEST_BUFSIZE] = "unknown";  /* printable hostname:port */
  int idx;
  ssize_t actualread;
  ssize_t written;
  int result;
  CURLcode code;
  curl_socket_t sock = conn->sock[sockindex];
  struct Curl_easy *data = conn->data;
  timediff_t timeout;
  bool socks5_resolve_local =
    (conn->socks_proxy.proxytype == CURLPROXY_SOCKS5) ? TRUE : FALSE;
  const size_t hostname_len = strlen(hostname);
  ssize_t len = 0;
  const unsigned long auth = data->set.socks5auth;
  bool allow_gssapi = FALSE;








  if(conn->bits.httpproxy)
    infof(conn->data, "SOCKS5: connecting to HTTP proxy %s port %d\n",
          hostname, remote_port);

  /* RFC1928 chapter 5 specifies max 255 chars for domain name in packet */
  if(!socks5_resolve_local && hostname_len > 255) {
    infof(conn->data, "SOCKS5: server resolving disabled for hostnames of "
          "length > 255 [actual len=%zu]\n", hostname_len);
    socks5_resolve_local = TRUE;
  }

  /* get timeout */
  timeout = Curl_timeleft(data, NULL, TRUE);

  if(timeout < 0) {
    /* time-out, bail out, go home */
    failf(data, "Connection time-out");
    return CURLE_OPERATION_TIMEDOUT;
  }

  (void)curlx_nonblock(sock, TRUE);

  /* wait until socket gets connected */
  result = SOCKET_WRITABLE(sock, timeout);

  if(-1 == result) {
    failf(conn->data, "SOCKS5: no connection here");
    return CURLE_COULDNT_CONNECT;
  }
  if(0 == result) {
    failf(conn->data, "SOCKS5: connection timeout");
    return CURLE_OPERATION_TIMEDOUT;
  }

  if(result & CURL_CSELECT_ERR) {
    failf(conn->data, "SOCKS5: error occurred during connection");
    return CURLE_COULDNT_CONNECT;
  }

  if(auth & ~(CURLAUTH_BASIC | CURLAUTH_GSSAPI))
    infof(conn->data,
        "warning: unsupported value passed to CURLOPT_SOCKS5_AUTH: %lu\n",
        auth);
  if(!(auth & CURLAUTH_BASIC))
    /* disable username/password auth */
    proxy_user = NULL;
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
  if(auth & CURLAUTH_GSSAPI)
    allow_gssapi = TRUE;
#endif

  idx = 0;
  socksreq[idx++] = 5;   /* version */
  idx++;                 /* reserve for the number of authentication methods */
  socksreq[idx++] = 0;   /* no authentication */
  if(allow_gssapi)
    socksreq[idx++] = 1; /* GSS-API */
  if(proxy_user)
    socksreq[idx++] = 2; /* username/password */
  /* write the number of authentication methods */
  socksreq[1] = (unsigned char) (idx - 2);

  (void)curlx_nonblock(sock, FALSE);

  infof(data, "SOCKS5 communication to %s:%d\n", hostname, remote_port);

  code = Curl_write_plain(conn, sock, (char *)socksreq, (2 + (int)socksreq[1]),
                          &written);
  if(code || (written != (2 + (int)socksreq[1]))) {
    failf(data, "Unable to send initial SOCKS5 request.");
    return CURLE_COULDNT_CONNECT;
  }



  (void)curlx_nonblock(sock, TRUE);





  result = SOCKET_READABLE(sock, timeout);

  if(-1 == result) {
    failf(conn->data, "SOCKS5 nothing to read");
    return CURLE_COULDNT_CONNECT;
  }
  if(0 == result) {


    failf(conn->data, "SOCKS5 read timeout");
    return CURLE_OPERATION_TIMEDOUT;
  }









  if(result & CURL_CSELECT_ERR) {
    failf(conn->data, "SOCKS5 read error occurred");
    return CURLE_RECV_ERROR;
  }

  (void)curlx_nonblock(sock, FALSE);

  result = Curl_blockread_all(conn, sock, (char *)socksreq, 2, &actualread);
  if(result || (actualread != 2)) {
    failf(data, "Unable to receive initial SOCKS5 response.");
    return CURLE_COULDNT_CONNECT;
  }

  if(socksreq[0] != 5) {
    failf(data, "Received invalid version in initial SOCKS5 response.");
    return CURLE_COULDNT_CONNECT;
  }
  if(socksreq[1] == 0) {
    /* Nothing to do, no authentication needed */
    ;


  }





#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
  else if(allow_gssapi && (socksreq[1] == 1)) {

    code = Curl_SOCKS5_gssapi_negotiate(sockindex, conn);
    if(code) {
      failf(data, "Unable to negotiate SOCKS5 GSS-API context.");
      return CURLE_COULDNT_CONNECT;
    }
  }
#endif







  else if(socksreq[1] == 2) {



















    /* Needs user name and password */
    size_t proxy_user_len, proxy_password_len;
    if(proxy_user && proxy_password) {
      proxy_user_len = strlen(proxy_user);
      proxy_password_len = strlen(proxy_password);
    }
    else {







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
















|
>



<
|
<
|
|

|
|
|
|
<
|
>
>

>
>
|
|
|
<
<

|

|
|
|
|
|
|
|
|
|
|

|
|
|
|

|
|
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

<
|
<
<
<
<
<
<
<
<
<







<















<











|
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
<
<
<
<
|
|

|
|
>
|
|
|
|
|
|
|
|
|
>
>
>
|
|
>
>
>
|
>
>

|
<
>
>
>
>
>
>
>
|
<
<
<
<
<
<
<
<
|
<
<
|
|
|
|
|
>
>

>
>

|
|
|
|
>

>
>
>
>
>
>
>
>
>
>
>
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<












|
>

















<
|
|



<
|
|

<






>
>

>
>
>
>
>
|
|
|

|
|
|
|
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|

|
|
|
|
|
|
|

|
|


|
|
|
|
|
|
|
|
|
|

<
|
<
|
<
<
<
|
|
|
|
>
>
|
>
|
>
>
>
|
|
|
|
|
|
|
>
>
|
|
|
>
>
>
>
>
>
|
>
>
|
|
|
|
|
<
|
|
|
<
|
|
<
|
|
|
|
|
|
<
>
>
|
>
>
>
>
>

|
>
|
|
|
|
|
|

>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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

    buffersize -= nread;
    buf += nread;
    allread += nread;
  }
  return result;
}
#endif

#ifndef DEBUGBUILD
#define sxstate(x,y) socksstate(x,y)
#else
#define sxstate(x,y) socksstate(x,y, __LINE__)
#endif


/* always use this function to change state, to make debugging easier */
static void socksstate(struct connectdata *conn,
                       enum connect_t state
#ifdef DEBUGBUILD
                       , int lineno
#endif
)
{
  enum connect_t oldstate = conn->cnnct.state;
#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
  /* synced with the state list in urldata.h */
  static const char * const statename[] = {
    "INIT",
    "SOCKS_INIT",
    "SOCKS_SEND",
    "SOCKS_READ_INIT",
    "SOCKS_READ",
    "GSSAPI_INIT",
    "AUTH_INIT",
    "AUTH_SEND",
    "AUTH_READ",
    "REQ_INIT",
    "RESOLVING",
    "RESOLVED",
    "RESOLVE_REMOTE",
    "REQ_SEND",
    "REQ_SENDING",
    "REQ_READ",
    "REQ_READ_MORE",
    "DONE"
  };
#endif

  if(oldstate == state)
    /* don't bother when the new state is the same as the old state */
    return;

  conn->cnnct.state = state;

#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
  infof(conn->data,
        "SXSTATE: %s => %s conn %p; line %d\n",
        statename[oldstate], statename[conn->cnnct.state], conn,
        lineno);
#endif
}

int Curl_SOCKS_getsock(struct connectdata *conn, curl_socket_t *sock,
                       int sockindex)
{
  int rc = 0;
  sock[0] = conn->sock[sockindex];
  switch(conn->cnnct.state) {
  case CONNECT_RESOLVING:
  case CONNECT_SOCKS_READ:
  case CONNECT_AUTH_READ:
  case CONNECT_REQ_READ:
  case CONNECT_REQ_READ_MORE:
    rc = GETSOCK_READSOCK(0);
    break;
  default:
    rc = GETSOCK_WRITESOCK(0);
    break;
  }
  return rc;
}

/*
* This function logs in to a SOCKS4 proxy and sends the specifics to the final
* destination server.
*
* Reference :
*   https://www.openssh.com/txt/socks4.protocol
*
* Note :
*   Set protocol4a=true for  "SOCKS 4A (Simple Extension to SOCKS 4 Protocol)"
*   Nonsupport "Identification Protocol (RFC1413)"
*/
CURLcode Curl_SOCKS4(const char *proxy_user,
                     const char *hostname,
                     int remote_port,
                     int sockindex,
                     struct connectdata *conn,
                     bool *done)
{
  const bool protocol4a =
    (conn->socks_proxy.proxytype == CURLPROXY_SOCKS4A) ? TRUE : FALSE;

  unsigned char *socksreq = &conn->cnnct.socksreq[0];

  CURLcode result;
  curl_socket_t sockfd = conn->sock[sockindex];
  struct Curl_easy *data = conn->data;
  struct connstate *sx = &conn->cnnct;
  struct Curl_dns_entry *dns = NULL;
  ssize_t actualread;
  ssize_t written;


  if(!SOCKS_STATE(sx->state) && !*done)
    sxstate(conn, CONNECT_SOCKS_INIT);

  switch(sx->state) {
  case CONNECT_SOCKS_INIT:
    if(conn->bits.httpproxy)
      infof(conn->data, "SOCKS4%s: connecting to HTTP proxy %s port %d\n",
            protocol4a ? "a" : "", hostname, remote_port);



    infof(data, "SOCKS4 communication to %s:%d\n", hostname, remote_port);

    /*
     * Compose socks4 request
     *
     * Request format
     *
     *     +----+----+----+----+----+----+----+----+----+----+....+----+
     *     | VN | CD | DSTPORT |      DSTIP        | USERID       |NULL|
     *     +----+----+----+----+----+----+----+----+----+----+....+----+
     * # of bytes:  1    1      2              4           variable       1
     */

    socksreq[0] = 4; /* version (SOCKS4) */
    socksreq[1] = 1; /* connect */
    socksreq[2] = (unsigned char)((remote_port >> 8) & 0xff); /* PORT MSB */
    socksreq[3] = (unsigned char)(remote_port & 0xff);        /* PORT LSB */

    /* DNS resolve only for SOCKS4, not SOCKS4a */
    if(!protocol4a) {
      enum resolve_t rc =
        Curl_resolv(conn, hostname, remote_port, FALSE, &dns);

      if(rc == CURLRESOLV_ERROR)
        return CURLE_COULDNT_RESOLVE_PROXY;
      else if(rc == CURLRESOLV_PENDING) {
        sxstate(conn, CONNECT_RESOLVING);
        infof(data, "SOCKS4 non-blocking resolve of %s\n", hostname);
        return CURLE_OK;
      }
      sxstate(conn, CONNECT_RESOLVED);
      goto CONNECT_RESOLVED;
    }

    /* socks4a doesn't resolve anything locally */
    sxstate(conn, CONNECT_REQ_INIT);
    goto CONNECT_REQ_INIT;

  case CONNECT_RESOLVING:
    /* check if we have the name resolved by now */
    dns = Curl_fetch_addr(conn, hostname, (int)conn->port);

    if(dns) {
#ifdef CURLRES_ASYNCH
      conn->async.dns = dns;
      conn->async.done = TRUE;
#endif
      infof(data, "Hostname '%s' was found\n", hostname);
      sxstate(conn, CONNECT_RESOLVED);
    }
    else {
      result = Curl_resolv_check(data->conn, &dns);
      /* stay in the state or error out */
      return result;
    }
    /* FALLTHROUGH */
  CONNECT_RESOLVED:
  case CONNECT_RESOLVED: {
    Curl_addrinfo *hp = NULL;

    char buf[64];









    /*
     * We cannot use 'hostent' as a struct that Curl_resolv() returns.  It
     * returns a Curl_addrinfo pointer that may not always look the same.
     */
    if(dns)
      hp = dns->addr;
    if(hp) {

      Curl_printable_address(hp, buf, sizeof(buf));

      if(hp->ai_family == AF_INET) {
        struct sockaddr_in *saddr_in;

        saddr_in = (struct sockaddr_in *)(void *)hp->ai_addr;
        socksreq[4] = ((unsigned char *)&saddr_in->sin_addr.s_addr)[0];
        socksreq[5] = ((unsigned char *)&saddr_in->sin_addr.s_addr)[1];
        socksreq[6] = ((unsigned char *)&saddr_in->sin_addr.s_addr)[2];
        socksreq[7] = ((unsigned char *)&saddr_in->sin_addr.s_addr)[3];

        infof(data, "SOCKS4 connect to IPv4 %s (locally resolved)\n", buf);
      }
      else {
        hp = NULL; /* fail! */

        failf(data, "SOCKS4 connection to %s not supported\n", buf);
      }

      Curl_resolv_unlock(data, dns); /* not used anymore from now on */
    }
    if(!hp) {
      failf(data, "Failed to resolve \"%s\" for SOCKS4 connect.",
            hostname);
      return CURLE_COULDNT_RESOLVE_HOST;
    }
  }
    /* FALLTHROUGH */
  CONNECT_REQ_INIT:
  case CONNECT_REQ_INIT:
    /*
     * This is currently not supporting "Identification Protocol (RFC1413)".
     */
    socksreq[8] = 0; /* ensure empty userid is NUL-terminated */
    if(proxy_user) {
      size_t plen = strlen(proxy_user);
      if(plen >= sizeof(sx->socksreq) - 8) {
        failf(data, "Too long SOCKS proxy name, can't use!\n");
        return CURLE_COULDNT_CONNECT;
      }
      /* copy the proxy name WITH trailing zero */
      memcpy(socksreq + 8, proxy_user, plen + 1);
    }

    /*
     * Make connection
     */
    {




      ssize_t packetsize = 9 +
        strlen((char *)socksreq + 8); /* size including NUL */

      /* If SOCKS4a, set special invalid IP address 0.0.0.x */
      if(protocol4a) {
        ssize_t hostnamelen = 0;
        socksreq[4] = 0;
        socksreq[5] = 0;
        socksreq[6] = 0;
        socksreq[7] = 1;
        /* append hostname */
        hostnamelen = (ssize_t)strlen(hostname) + 1; /* length including NUL */
        if(hostnamelen <= 255)
          strcpy((char *)socksreq + packetsize, hostname);
        else {
          failf(data, "SOCKS4: too long host name");
          return CURLE_COULDNT_CONNECT;
        }
        packetsize += hostnamelen;
      }
      sx->outp = socksreq;
      sx->outstanding = packetsize;
      sxstate(conn, CONNECT_REQ_SENDING);
    }
    /* FALLTHROUGH */
  case CONNECT_REQ_SENDING:
    /* Send request */
    result = Curl_write_plain(conn, sockfd, (char *)sx->outp,

                              sx->outstanding, &written);
    if(result && (CURLE_AGAIN != result)) {
      failf(data, "Failed to send SOCKS4 connect request.");
      return CURLE_COULDNT_CONNECT;
    }
    if(written != sx->outstanding) {
      /* not done, remain in state */
      sx->outstanding -= written;








      sx->outp += written;


      return CURLE_OK;
    }

    /* done sending! */
    sx->outstanding = 8; /* receive data size */
    sx->outp = socksreq;
    sxstate(conn, CONNECT_SOCKS_READ);

    /* FALLTHROUGH */
  case CONNECT_SOCKS_READ:
    /* Receive response */
    result = Curl_read_plain(sockfd, (char *)sx->outp,
                             sx->outstanding, &actualread);
    if(result && (CURLE_AGAIN != result)) {
      failf(data, "SOCKS4: Failed receiving connect request ack: %s",
            curl_easy_strerror(result));
      return CURLE_COULDNT_CONNECT;
    }
    else if(actualread != sx->outstanding) {
      /* remain in reading state */
      sx->outstanding -= actualread;
      sx->outp += actualread;
      return CURLE_OK;
    }
    sxstate(conn, CONNECT_DONE);
    break;
  default: /* lots of unused states in SOCKS4 */
    break;
  }

  /*
   * Response format
   *
   *     +----+----+----+----+----+----+----+----+
   *     | VN | CD | DSTPORT |      DSTIP        |
   *     +----+----+----+----+----+----+----+----+
   * # of bytes:  1    1      2              4
   *
   * VN is the version of the reply code and should be 0. CD is the result
   * code with one of the following values:
   *
   * 90: request granted
   * 91: request rejected or failed
   * 92: request rejected because SOCKS server cannot connect to
   *     identd on the client
   * 93: request rejected because the client program and identd
   *     report different user-ids
   */

  /* wrong version ? */
  if(socksreq[0] != 0) {
    failf(data,
          "SOCKS4 reply has wrong version, version should be 0.");
    return CURLE_COULDNT_CONNECT;
  }

  /* Result */
  switch(socksreq[1]) {
  case 90:
    infof(data, "SOCKS4%s request granted.\n", protocol4a?"a":"");
    break;
  case 91:
    failf(data,
          "Can't complete SOCKS4 connection to %d.%d.%d.%d:%d. (%d)"
          ", request rejected or failed.",
          (unsigned char)socksreq[4], (unsigned char)socksreq[5],
          (unsigned char)socksreq[6], (unsigned char)socksreq[7],
          (((unsigned char)socksreq[2] << 8) | (unsigned char)socksreq[3]),
          (unsigned char)socksreq[1]);
    return CURLE_COULDNT_CONNECT;
  case 92:
    failf(data,
          "Can't complete SOCKS4 connection to %d.%d.%d.%d:%d. (%d)"
          ", request rejected because SOCKS server cannot connect to "
          "identd on the client.",
          (unsigned char)socksreq[4], (unsigned char)socksreq[5],
          (unsigned char)socksreq[6], (unsigned char)socksreq[7],
          (((unsigned char)socksreq[2] << 8) | (unsigned char)socksreq[3]),
          (unsigned char)socksreq[1]);
    return CURLE_COULDNT_CONNECT;
  case 93:
    failf(data,
          "Can't complete SOCKS4 connection to %d.%d.%d.%d:%d. (%d)"
          ", request rejected because the client program and identd "
          "report different user-ids.",
          (unsigned char)socksreq[4], (unsigned char)socksreq[5],
          (unsigned char)socksreq[6], (unsigned char)socksreq[7],
          (((unsigned char)socksreq[2] << 8) | (unsigned char)socksreq[3]),
          (unsigned char)socksreq[1]);
    return CURLE_COULDNT_CONNECT;
  default:
    failf(data,
          "Can't complete SOCKS4 connection to %d.%d.%d.%d:%d. (%d)"
          ", Unknown.",
          (unsigned char)socksreq[4], (unsigned char)socksreq[5],
          (unsigned char)socksreq[6], (unsigned char)socksreq[7],
          (((unsigned char)socksreq[2] << 8) | (unsigned char)socksreq[3]),
          (unsigned char)socksreq[1]);
    return CURLE_COULDNT_CONNECT;
  }

  *done = TRUE;


  return CURLE_OK; /* Proxy was successful! */
}

/*
 * This function logs in to a SOCKS5 proxy and sends the specifics to the final
 * destination server.
 */
CURLcode Curl_SOCKS5(const char *proxy_user,
                     const char *proxy_password,
                     const char *hostname,
                     int remote_port,
                     int sockindex,
                     struct connectdata *conn,
                     bool *done)
{
  /*
    According to the RFC1928, section "6.  Replies". This is what a SOCK5
    replies:

        +----+-----+-------+------+----------+----------+
        |VER | REP |  RSV  | ATYP | BND.ADDR | BND.PORT |
        +----+-----+-------+------+----------+----------+
        | 1  |  1  | X'00' |  1   | Variable |    2     |
        +----+-----+-------+------+----------+----------+

    Where:

    o  VER    protocol version: X'05'
    o  REP    Reply field:
    o  X'00' succeeded
  */

  unsigned char *socksreq = &conn->cnnct.socksreq[0];
  char dest[256] = "unknown";  /* printable hostname:port */
  int idx;
  ssize_t actualread;
  ssize_t written;

  CURLcode result;
  curl_socket_t sockfd = conn->sock[sockindex];
  struct Curl_easy *data = conn->data;

  bool socks5_resolve_local =
    (conn->socks_proxy.proxytype == CURLPROXY_SOCKS5) ? TRUE : FALSE;
  const size_t hostname_len = strlen(hostname);
  ssize_t len = 0;
  const unsigned long auth = data->set.socks5auth;
  bool allow_gssapi = FALSE;
  struct connstate *sx = &conn->cnnct;
  struct Curl_dns_entry *dns = NULL;

  if(!SOCKS_STATE(sx->state) && !*done)
    sxstate(conn, CONNECT_SOCKS_INIT);

  switch(sx->state) {
  case CONNECT_SOCKS_INIT:
    if(conn->bits.httpproxy)
      infof(conn->data, "SOCKS5: connecting to HTTP proxy %s port %d\n",
            hostname, remote_port);

    /* RFC1928 chapter 5 specifies max 255 chars for domain name in packet */
    if(!socks5_resolve_local && hostname_len > 255) {
      infof(conn->data, "SOCKS5: server resolving disabled for hostnames of "
            "length > 255 [actual len=%zu]\n", hostname_len);
      socks5_resolve_local = TRUE;




























    }

    if(auth & ~(CURLAUTH_BASIC | CURLAUTH_GSSAPI))
      infof(conn->data,
            "warning: unsupported value passed to CURLOPT_SOCKS5_AUTH: %lu\n",
            auth);
    if(!(auth & CURLAUTH_BASIC))
      /* disable username/password auth */
      proxy_user = NULL;
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
    if(auth & CURLAUTH_GSSAPI)
      allow_gssapi = TRUE;
#endif

    idx = 0;
    socksreq[idx++] = 5;   /* version */
    idx++;                 /* number of authentication methods */
    socksreq[idx++] = 0;   /* no authentication */
    if(allow_gssapi)
      socksreq[idx++] = 1; /* GSS-API */
    if(proxy_user)
      socksreq[idx++] = 2; /* username/password */
    /* write the number of authentication methods */
    socksreq[1] = (unsigned char) (idx - 2);


    result = Curl_write_plain(conn, sockfd, (char *)socksreq, idx, &written);

    if(result && (CURLE_AGAIN != result)) {



      failf(data, "Unable to send initial SOCKS5 request.");
      return CURLE_COULDNT_CONNECT;
    }
    if(written != idx) {
      sxstate(conn, CONNECT_SOCKS_SEND);
      sx->outstanding = idx - written;
      sx->outp = &socksreq[written];
      return CURLE_OK;
    }
    sxstate(conn, CONNECT_SOCKS_READ);
    goto CONNECT_SOCKS_READ_INIT;
  case CONNECT_SOCKS_SEND:
    result = Curl_write_plain(conn, sockfd, (char *)sx->outp,
                              sx->outstanding, &written);
    if(result && (CURLE_AGAIN != result)) {
      failf(data, "Unable to send initial SOCKS5 request.");
      return CURLE_COULDNT_CONNECT;
    }
    if(written != sx->outstanding) {
      /* not done, remain in state */
      sx->outstanding -= written;
      sx->outp += written;
      return CURLE_OK;
    }
    /* FALLTHROUGH */
  CONNECT_SOCKS_READ_INIT:
  case CONNECT_SOCKS_READ_INIT:
    sx->outstanding = 2; /* expect two bytes */
    sx->outp = socksreq; /* store it here */
    /* FALLTHROUGH */
  case CONNECT_SOCKS_READ:
    result = Curl_read_plain(sockfd, (char *)sx->outp,
                             sx->outstanding, &actualread);
    if(result && (CURLE_AGAIN != result)) {
      failf(data, "Unable to receive initial SOCKS5 response.");
      return CURLE_COULDNT_CONNECT;
    }
    else if(actualread != sx->outstanding) {

      /* remain in reading state */
      sx->outstanding -= actualread;
      sx->outp += actualread;

      return CURLE_OK;
    }

    else if(socksreq[0] != 5) {
      failf(data, "Received invalid version in initial SOCKS5 response.");
      return CURLE_COULDNT_CONNECT;
    }
    else if(socksreq[1] == 0) {
      /* DONE! No authentication needed. Send request. */

      sxstate(conn, CONNECT_REQ_INIT);
      goto CONNECT_REQ_INIT;
    }
    else if(socksreq[1] == 2) {
      /* regular name + password authentication */
      sxstate(conn, CONNECT_AUTH_INIT);
      goto CONNECT_AUTH_INIT;
    }
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
    else if(allow_gssapi && (socksreq[1] == 1)) {
      sxstate(conn, CONNECT_GSSAPI_INIT);
      result = Curl_SOCKS5_gssapi_negotiate(sockindex, conn);
      if(result) {
        failf(data, "Unable to negotiate SOCKS5 GSS-API context.");
        return CURLE_COULDNT_CONNECT;
      }
    }
#endif
    else {
      /* error */
      if(!allow_gssapi && (socksreq[1] == 1)) {
        failf(data,
              "SOCKS5 GSSAPI per-message authentication is not supported.");
        return CURLE_COULDNT_CONNECT;
      }
      else if(socksreq[1] == 255) {
        failf(data, "No authentication method was acceptable.");
        return CURLE_COULDNT_CONNECT;
      }
      failf(data,
            "Undocumented SOCKS5 mode attempted to be used by server.");
      return CURLE_COULDNT_CONNECT;
    }
    break;
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
  case CONNECT_GSSAPI_INIT:
    /* GSSAPI stuff done non-blocking */
    break;
#endif

  default: /* do nothing! */
    break;

  CONNECT_AUTH_INIT:
  case CONNECT_AUTH_INIT: {
    /* Needs user name and password */
    size_t proxy_user_len, proxy_password_len;
    if(proxy_user && proxy_password) {
      proxy_user_len = strlen(proxy_user);
      proxy_password_len = strlen(proxy_password);
    }
    else {
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
      if(proxy_password_len > 255) {
        failf(data, "Excessive password length for proxy auth");
        return CURLE_BAD_FUNCTION_ARGUMENT;
      }
      memcpy(socksreq + len, proxy_password, proxy_password_len);
    }
    len += proxy_password_len;






    code = Curl_write_plain(conn, sock, (char *)socksreq, len, &written);
    if(code || (len != written)) {

      failf(data, "Failed to send SOCKS5 sub-negotiation request.");
      return CURLE_COULDNT_CONNECT;
    }












    result = Curl_blockread_all(conn, sock, (char *)socksreq, 2, &actualread);
    if(result || (actualread != 2)) {
      failf(data, "Unable to receive SOCKS5 sub-negotiation response.");
      return CURLE_COULDNT_CONNECT;






    }

    /* ignore the first (VER) byte */
    if(socksreq[1] != 0) { /* status */
      failf(data, "User was rejected by the SOCKS5 server (%d %d).",
            socksreq[0], socksreq[1]);
      return CURLE_COULDNT_CONNECT;
    }

    /* Everything is good so far, user was authenticated! */
  }
  else {
    /* error */
    if(!allow_gssapi && (socksreq[1] == 1)) {
      failf(data,
            "SOCKS5 GSSAPI per-message authentication is not supported.");
      return CURLE_COULDNT_CONNECT;
    }
    if(socksreq[1] == 255) {
      if(!proxy_user || !*proxy_user) {
        failf(data,
              "No authentication method was acceptable. (It is quite likely"
              " that the SOCKS5 server wanted a username/password, since none"
              " was supplied to the server on this connection.)");
      }
      else {
        failf(data, "No authentication method was acceptable.");
      }
      return CURLE_COULDNT_CONNECT;
    }
    else {
      failf(data,
            "Undocumented SOCKS5 mode attempted to be used by server.");
      return CURLE_COULDNT_CONNECT;
    }
  }

  /* Authentication is complete, now specify destination to the proxy */
  len = 0;
  socksreq[len++] = 5; /* version (SOCKS5) */
  socksreq[len++] = 1; /* connect */
  socksreq[len++] = 0; /* must be zero */


  if(!socks5_resolve_local) {
    socksreq[len++] = 3; /* ATYP: domain name = 3 */
    socksreq[len++] = (char) hostname_len; /* address length */
    memcpy(&socksreq[len], hostname, hostname_len); /* address str w/o NULL */
    len += hostname_len;
    msnprintf(dest, sizeof(dest), "%s:%d", hostname, remote_port);
    infof(data, "SOCKS5 connect to %s (remotely resolved)\n", dest);
  }
  else {
    struct Curl_dns_entry *dns;
    Curl_addrinfo *hp = NULL;
    int rc = Curl_resolv(conn, hostname, remote_port, FALSE, &dns);


    if(rc == CURLRESOLV_ERROR)
      return CURLE_COULDNT_RESOLVE_HOST;

    if(rc == CURLRESOLV_PENDING) {
      /* this requires that we're in "wait for resolve" state */
      code = Curl_resolver_wait_resolv(conn, &dns);
      if(code)
        return code;
    }




    /*



     * We cannot use 'hostent' as a struct that Curl_resolv() returns.  It







     * returns a Curl_addrinfo pointer that may not always look the same.





     */



    if(dns)
      hp = dns->addr;
    if(hp) {
      if(Curl_printable_address(hp, dest, sizeof(dest))) {
        size_t destlen = strlen(dest);
        msnprintf(dest + destlen, sizeof(dest) - destlen, ":%d", remote_port);
      }
      else {
        strcpy(dest, "unknown");
      }

      if(hp->ai_family == AF_INET) {
        int i;
        struct sockaddr_in *saddr_in;
        socksreq[len++] = 1; /* ATYP: IPv4 = 1 */

        saddr_in = (struct sockaddr_in *)(void *)hp->ai_addr;
        for(i = 0; i < 4; i++) {
          socksreq[len++] = ((unsigned char *)&saddr_in->sin_addr.s_addr)[i];
        }

        infof(data, "SOCKS5 connect to IPv4 %s (locally resolved)\n", dest);
      }
#ifdef ENABLE_IPV6
      else if(hp->ai_family == AF_INET6) {
        int i;
        struct sockaddr_in6 *saddr_in6;
        socksreq[len++] = 4; /* ATYP: IPv6 = 4 */

        saddr_in6 = (struct sockaddr_in6 *)(void *)hp->ai_addr;
        for(i = 0; i < 16; i++) {
          socksreq[len++] =
            ((unsigned char *)&saddr_in6->sin6_addr.s6_addr)[i];
        }

        infof(data, "SOCKS5 connect to IPv6 %s (locally resolved)\n", dest);
      }
#endif
      else {
        hp = NULL; /* fail! */

        failf(data, "SOCKS5 connection to %s not supported\n", dest);
      }

      Curl_resolv_unlock(data, dns); /* not used anymore from now on */
    }
    if(!hp) {
      failf(data, "Failed to resolve \"%s\" for SOCKS5 connect.",
            hostname);
      return CURLE_COULDNT_RESOLVE_HOST;
    }
  }







  socksreq[len++] = (unsigned char)((remote_port >> 8) & 0xff); /* PORT MSB */


  socksreq[len++] = (unsigned char)(remote_port & 0xff);        /* PORT LSB */










#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)






  if(conn->socks5_gssapi_enctype) {
    failf(data, "SOCKS5 GSS-API protection not yet implemented.");




  }
  else


#endif
    code = Curl_write_plain(conn, sock, (char *)socksreq, len, &written);




  if(code || (len != written)) {
    failf(data, "Failed to send SOCKS5 connect request.");
    return CURLE_COULDNT_CONNECT;
  }

















  len = 10; /* minimum packet size is 10 */







#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
  if(conn->socks5_gssapi_enctype) {
    failf(data, "SOCKS5 GSS-API protection not yet implemented.");

  }
  else
#endif





    result = Curl_blockread_all(conn, sock, (char *)socksreq,
                                len, &actualread);






















  if(result || (len != actualread)) {

    failf(data, "Failed to receive SOCKS5 connect request ack.");
    return CURLE_COULDNT_CONNECT;






  }

  if(socksreq[0] != 5) { /* version */
    failf(data,
          "SOCKS5 reply has wrong version, version should be 5.");
    return CURLE_COULDNT_CONNECT;
  }






  /* Fix: in general, returned BND.ADDR is variable length parameter by RFC
     1928, so the reply packet should be read until the end to avoid errors at
     subsequent protocol level.

    +----+-----+-------+------+----------+----------+
    |VER | REP |  RSV  | ATYP | BND.ADDR | BND.PORT |
    +----+-----+-------+------+----------+----------+
    | 1  |  1  | X'00' |  1   | Variable |    2     |
    +----+-----+-------+------+----------+----------+

     ATYP:
     o  IP v4 address: X'01', BND.ADDR = 4 byte
     o  domain name:  X'03', BND.ADDR = [ 1 byte length, string ]
     o  IP v6 address: X'04', BND.ADDR = 16 byte
     */

  /* Calculate real packet size */
  if(socksreq[3] == 3) {
    /* domain name */
    int addrlen = (int) socksreq[4];
    len = 5 + addrlen + 2;
  }
  else if(socksreq[3] == 4) {
    /* IPv6 */
    len = 4 + 16 + 2;
  }

  /* At this point we already read first 10 bytes */
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
  if(!conn->socks5_gssapi_enctype) {
    /* decrypt_gssapi_blockread already read the whole packet */
#endif
    if(len > 10) {

      result = Curl_blockread_all(conn, sock, (char *)&socksreq[10],
                                  len - 10, &actualread);
      if(result || ((len - 10) != actualread)) {
        failf(data, "Failed to receive SOCKS5 connect request ack.");
        return CURLE_COULDNT_CONNECT;
      }



    }
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
  }
#endif








  if(socksreq[1] != 0) { /* Anything besides 0 is an error */
    failf(data, "Can't complete SOCKS5 connection to %s. (%d)",
          dest, (unsigned char)socksreq[1]);




    return CURLE_COULDNT_CONNECT;


  }
  infof(data, "SOCKS5 request granted.\n");

  (void)curlx_nonblock(sock, TRUE);
  return CURLE_OK; /* Proxy was successful! */
}

#endif /* CURL_DISABLE_PROXY */







>
>
>
|
>
>
|
|
>



>
>
>
>
>
|
>
>
>
>
>
>
|
|


>
>
>
>
>
>










<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
<
<
<
<
|
>
|
<
<
<
<
<
<
<
<
<
<
|
>

|
|

|
<
|
<
|
|
>
>
|
>
|
>
>
>
|
>
>
>
>
>
>
>
|
>
>
>
>
>
|
>
>
>


<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<





|
>
>
>
|
>
>
>
|
>
>
|
>
>
>
>
>

>
>
>
>
|
>
>
>
>
>
>
|
|
>
>
>
>
|
|
>
>

<
>
>
>
|
|
|
|

>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>
|
>
>
>
>
>
>


|
|
>
|
<

>
>
>
>
>
|
|
>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>
|
|
>
>
>
>
>
>
|

|
|
|
|
|
>
>
>
>
|
>
|
|
|

|
|
|
|
|

|
|
|
|
|

|
|
|
|
|
|
|
|
|
|

|

|
|

|
>
|
<
<
<
|

>
>
>
|

|

>
>
>
>
>
>
>
|
<
<
<
>
>
>
>
|
>
>



|




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
      if(proxy_password_len > 255) {
        failf(data, "Excessive password length for proxy auth");
        return CURLE_BAD_FUNCTION_ARGUMENT;
      }
      memcpy(socksreq + len, proxy_password, proxy_password_len);
    }
    len += proxy_password_len;
    sxstate(conn, CONNECT_AUTH_SEND);
    sx->outstanding = len;
    sx->outp = socksreq;
  }
    /* FALLTHROUGH */
  case CONNECT_AUTH_SEND:
    result = Curl_write_plain(conn, sockfd, (char *)sx->outp,
                              sx->outstanding, &written);
    if(result && (CURLE_AGAIN != result)) {
      failf(data, "Failed to send SOCKS5 sub-negotiation request.");
      return CURLE_COULDNT_CONNECT;
    }
    if(sx->outstanding != written) {
      /* remain in state */
      sx->outstanding -= written;
      sx->outp += written;
      return CURLE_OK;
    }
    sx->outp = socksreq;
    sx->outstanding = 2;
    sxstate(conn, CONNECT_AUTH_READ);
    /* FALLTHROUGH */
  case CONNECT_AUTH_READ:
    result = Curl_read_plain(sockfd, (char *)sx->outp,
                             sx->outstanding, &actualread);
    if(result && (CURLE_AGAIN != result)) {
      failf(data, "Unable to receive SOCKS5 sub-negotiation response.");
      return CURLE_COULDNT_CONNECT;
    }
    if(actualread != sx->outstanding) {
      /* remain in state */
      sx->outstanding -= actualread;
      sx->outp += actualread;
      return CURLE_OK;
    }

    /* ignore the first (VER) byte */
    if(socksreq[1] != 0) { /* status */
      failf(data, "User was rejected by the SOCKS5 server (%d %d).",
            socksreq[0], socksreq[1]);
      return CURLE_COULDNT_CONNECT;
    }

    /* Everything is good so far, user was authenticated! */






    sxstate(conn, CONNECT_REQ_INIT);



















    /* FALLTHROUGH */





  CONNECT_REQ_INIT:
  case CONNECT_REQ_INIT:
    if(socks5_resolve_local) {










      enum resolve_t rc = Curl_resolv(conn, hostname, remote_port,
                                      FALSE, &dns);

      if(rc == CURLRESOLV_ERROR)
        return CURLE_COULDNT_RESOLVE_HOST;

      if(rc == CURLRESOLV_PENDING) {

        sxstate(conn, CONNECT_RESOLVING);

        return CURLE_OK;
      }
      sxstate(conn, CONNECT_RESOLVED);
      goto CONNECT_RESOLVED;
    }
    goto CONNECT_RESOLVE_REMOTE;

  case CONNECT_RESOLVING:
    /* check if we have the name resolved by now */
    dns = Curl_fetch_addr(conn, hostname, (int)conn->port);

    if(dns) {
#ifdef CURLRES_ASYNCH
      conn->async.dns = dns;
      conn->async.done = TRUE;
#endif
      infof(data, "SOCKS5: hostname '%s' found\n", hostname);
    }

    if(!dns) {
      result = Curl_resolv_check(data->conn, &dns);
      /* stay in the state or error out */
      return result;
    }
    /* FALLTHROUGH */
  CONNECT_RESOLVED:
  case CONNECT_RESOLVED: {
    Curl_addrinfo *hp = NULL;
    if(dns)
      hp = dns->addr;












































    if(!hp) {
      failf(data, "Failed to resolve \"%s\" for SOCKS5 connect.",
            hostname);
      return CURLE_COULDNT_RESOLVE_HOST;
    }

    if(Curl_printable_address(hp, dest, sizeof(dest))) {
      size_t destlen = strlen(dest);
      msnprintf(dest + destlen, sizeof(dest) - destlen, ":%d", remote_port);
    }
    else {
      strcpy(dest, "unknown");
    }

    len = 0;
    socksreq[len++] = 5; /* version (SOCKS5) */
    socksreq[len++] = 1; /* connect */
    socksreq[len++] = 0; /* must be zero */
    if(hp->ai_family == AF_INET) {
      int i;
      struct sockaddr_in *saddr_in;
      socksreq[len++] = 1; /* ATYP: IPv4 = 1 */

      saddr_in = (struct sockaddr_in *)(void *)hp->ai_addr;
      for(i = 0; i < 4; i++) {
        socksreq[len++] = ((unsigned char *)&saddr_in->sin_addr.s_addr)[i];
      }

      infof(data, "SOCKS5 connect to IPv4 %s (locally resolved)\n", dest);
    }
#ifdef ENABLE_IPV6
    else if(hp->ai_family == AF_INET6) {
      int i;
      struct sockaddr_in6 *saddr_in6;
      socksreq[len++] = 4; /* ATYP: IPv6 = 4 */

      saddr_in6 = (struct sockaddr_in6 *)(void *)hp->ai_addr;
      for(i = 0; i < 16; i++) {
        socksreq[len++] =
          ((unsigned char *)&saddr_in6->sin6_addr.s6_addr)[i];
      }

      infof(data, "SOCKS5 connect to IPv6 %s (locally resolved)\n", dest);
    }
#endif

    else {
      hp = NULL; /* fail! */
      failf(data, "SOCKS5 connection to %s not supported\n", dest);
    }

    Curl_resolv_unlock(data, dns); /* not used anymore from now on */
    goto CONNECT_REQ_SEND;
  }
  CONNECT_RESOLVE_REMOTE:
  case CONNECT_RESOLVE_REMOTE:
    /* Authentication is complete, now specify destination to the proxy */
    len = 0;
    socksreq[len++] = 5; /* version (SOCKS5) */
    socksreq[len++] = 1; /* connect */
    socksreq[len++] = 0; /* must be zero */

    if(!socks5_resolve_local) {
      socksreq[len++] = 3; /* ATYP: domain name = 3 */
      socksreq[len++] = (char) hostname_len; /* one byte address length */
      memcpy(&socksreq[len], hostname, hostname_len); /* address w/o NULL */
      len += hostname_len;
      infof(data, "SOCKS5 connect to %s:%d (remotely resolved)\n",
            hostname, remote_port);
    }
    /* FALLTHROUGH */

  CONNECT_REQ_SEND:
  case CONNECT_REQ_SEND:
    /* PORT MSB */
    socksreq[len++] = (unsigned char)((remote_port >> 8) & 0xff);
    /* PORT LSB */
    socksreq[len++] = (unsigned char)(remote_port & 0xff);

#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
    if(conn->socks5_gssapi_enctype) {
      failf(data, "SOCKS5 GSS-API protection not yet implemented.");
      return CURLE_COULDNT_CONNECT;
    }

#endif
    sx->outp = socksreq;
    sx->outstanding = len;
    sxstate(conn, CONNECT_REQ_SENDING);
    /* FALLTHROUGH */
  case CONNECT_REQ_SENDING:
    result = Curl_write_plain(conn, sockfd, (char *)sx->outp,
                              sx->outstanding, &written);
    if(result && (CURLE_AGAIN != result)) {
      failf(data, "Failed to send SOCKS5 connect request.");
      return CURLE_COULDNT_CONNECT;
    }
    if(sx->outstanding != written) {
      /* remain in state */
      sx->outstanding -= written;
      sx->outp += written;
      return CURLE_OK;
    }
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
    if(conn->socks5_gssapi_enctype) {
      failf(data, "SOCKS5 GSS-API protection not yet implemented.");
      return CURLE_COULDNT_CONNECT;
    }
#endif
    sx->outstanding = 10; /* minimum packet size is 10 */
    sx->outp = socksreq;
    sxstate(conn, CONNECT_REQ_READ);
    /* FALLTHROUGH */
  case CONNECT_REQ_READ:
    result = Curl_read_plain(sockfd, (char *)sx->outp,
                             sx->outstanding, &actualread);
    if(result && (CURLE_AGAIN != result)) {
      failf(data, "Failed to receive SOCKS5 connect request ack.");
      return CURLE_COULDNT_CONNECT;
    }
    else if(actualread != sx->outstanding) {
      /* remain in state */
      sx->outstanding -= actualread;
      sx->outp += actualread;
      return CURLE_OK;
    }

    if(socksreq[0] != 5) { /* version */
      failf(data,
            "SOCKS5 reply has wrong version, version should be 5.");
      return CURLE_COULDNT_CONNECT;
    }
    else if(socksreq[1] != 0) { /* Anything besides 0 is an error */
      failf(data, "Can't complete SOCKS5 connection to %s. (%d)",
            hostname, (unsigned char)socksreq[1]);
      return CURLE_COULDNT_CONNECT;
    }

    /* Fix: in general, returned BND.ADDR is variable length parameter by RFC
       1928, so the reply packet should be read until the end to avoid errors
       at subsequent protocol level.

       +----+-----+-------+------+----------+----------+
       |VER | REP |  RSV  | ATYP | BND.ADDR | BND.PORT |
       +----+-----+-------+------+----------+----------+
       | 1  |  1  | X'00' |  1   | Variable |    2     |
       +----+-----+-------+------+----------+----------+

       ATYP:
       o  IP v4 address: X'01', BND.ADDR = 4 byte
       o  domain name:  X'03', BND.ADDR = [ 1 byte length, string ]
       o  IP v6 address: X'04', BND.ADDR = 16 byte
    */

    /* Calculate real packet size */
    if(socksreq[3] == 3) {
      /* domain name */
      int addrlen = (int) socksreq[4];
      len = 5 + addrlen + 2;
    }
    else if(socksreq[3] == 4) {
      /* IPv6 */
      len = 4 + 16 + 2;
    }

    /* At this point we already read first 10 bytes */
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
    if(!conn->socks5_gssapi_enctype) {
      /* decrypt_gssapi_blockread already read the whole packet */
#endif
      if(len > 10) {
        sx->outstanding = len - 10; /* get the rest */
        sx->outp = &socksreq[10];



        sxstate(conn, CONNECT_REQ_READ_MORE);
      }
      else {
        sxstate(conn, CONNECT_DONE);
        break;
      }
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
    }
#endif
    /* FALLTHROUGH */
  case CONNECT_REQ_READ_MORE:
    result = Curl_read_plain(sockfd, (char *)sx->outp,
                             sx->outstanding, &actualread);
    if(result && (CURLE_AGAIN != result)) {
      failf(data, "Failed to receive SOCKS5 connect request ack.");
      return CURLE_COULDNT_CONNECT;
    }



    if(actualread != sx->outstanding) {
      /* remain in state */
      sx->outstanding -= actualread;
      sx->outp += actualread;
      return CURLE_OK;
    }
    sxstate(conn, CONNECT_DONE);
  }
  infof(data, "SOCKS5 request granted.\n");

  *done = TRUE;
  return CURLE_OK; /* Proxy was successful! */
}

#endif /* CURL_DISABLE_PROXY */
Changes to jni/curl/lib/socks.h.
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
#ifndef HEADER_CURL_SOCKS_H
#define HEADER_CURL_SOCKS_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "curl_setup.h"

#ifdef CURL_DISABLE_PROXY
#define Curl_SOCKS4(a,b,c,d,e) CURLE_NOT_BUILT_IN
#define Curl_SOCKS5(a,b,c,d,e,f) CURLE_NOT_BUILT_IN

#else
/*
 * Helper read-from-socket functions. Does the same as Curl_read() but it
 * blocks until all bytes amount of buffersize will be read. No more, no less.
 *
 * This is STUPID BLOCKING behaviour which we frown upon, but right now this
 * is what we have...
 */
int Curl_blockread_all(struct connectdata *conn,
                       curl_socket_t sockfd,
                       char *buf,
                       ssize_t buffersize,
                       ssize_t *n);




/*
 * This function logs in to a SOCKS4(a) proxy and sends the specifics to the
 * final destination server.
 */
CURLcode Curl_SOCKS4(const char *proxy_name,
                     const char *hostname,
                     int remote_port,
                     int sockindex,
                     struct connectdata *conn);


/*
 * This function logs in to a SOCKS5 proxy and sends the specifics to the
 * final destination server.
 */
CURLcode Curl_SOCKS5(const char *proxy_name,
                     const char *proxy_password,
                     const char *hostname,
                     int remote_port,
                     int sockindex,
                     struct connectdata *conn);


#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
/*
 * This function handles the SOCKS5 GSS-API negotiation and initialisation
 */
CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
                                      struct connectdata *conn);
#endif

#endif /* CURL_DISABLE_PROXY */

#endif  /* HEADER_CURL_SOCKS_H */









|



















>





|
<







>
>
>








|
>










|
>












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
#ifndef HEADER_CURL_SOCKS_H
#define HEADER_CURL_SOCKS_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "curl_setup.h"

#ifdef CURL_DISABLE_PROXY
#define Curl_SOCKS4(a,b,c,d,e) CURLE_NOT_BUILT_IN
#define Curl_SOCKS5(a,b,c,d,e,f) CURLE_NOT_BUILT_IN
#define Curl_SOCKS_getsock(x,y,z) 0
#else
/*
 * Helper read-from-socket functions. Does the same as Curl_read() but it
 * blocks until all bytes amount of buffersize will be read. No more, no less.
 *
 * This is STUPID BLOCKING behavior

 */
int Curl_blockread_all(struct connectdata *conn,
                       curl_socket_t sockfd,
                       char *buf,
                       ssize_t buffersize,
                       ssize_t *n);

int Curl_SOCKS_getsock(struct connectdata *conn,
                       curl_socket_t *sock,
                       int sockindex);
/*
 * This function logs in to a SOCKS4(a) proxy and sends the specifics to the
 * final destination server.
 */
CURLcode Curl_SOCKS4(const char *proxy_name,
                     const char *hostname,
                     int remote_port,
                     int sockindex,
                     struct connectdata *conn,
                     bool *done);

/*
 * This function logs in to a SOCKS5 proxy and sends the specifics to the
 * final destination server.
 */
CURLcode Curl_SOCKS5(const char *proxy_name,
                     const char *proxy_password,
                     const char *hostname,
                     int remote_port,
                     int sockindex,
                     struct connectdata *conn,
                     bool *done);

#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
/*
 * This function handles the SOCKS5 GSS-API negotiation and initialisation
 */
CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
                                      struct connectdata *conn);
#endif

#endif /* CURL_DISABLE_PROXY */

#endif  /* HEADER_CURL_SOCKS_H */
Changes to jni/curl/lib/socks_gssapi.c.
1
2
3
4
5
6
7

8
9
10
11
12
13
14
15
16
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *

 * Copyright (C) 2009, Markus Moeller, <markus_moeller@compuserve.com>
 * Copyright (C) 2012 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







>

<







1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2012 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 2009, Markus Moeller, <markus_moeller@compuserve.com>

 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
162
163
164
165
166
167
168


169
170
171
172
173
174
175

  if(check_gss_err(data, gss_major_status,
                   gss_minor_status, "gss_import_name()")) {
    failf(data, "Failed to create service name.");
    gss_release_name(&gss_status, &server);
    return CURLE_COULDNT_CONNECT;
  }



  /* As long as we need to keep sending some context info, and there's no  */
  /* errors, keep sending it...                                            */
  for(;;) {
    gss_major_status = Curl_gss_init_sec_context(data,
                                                 &gss_minor_status,
                                                 &gss_context,







>
>







162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177

  if(check_gss_err(data, gss_major_status,
                   gss_minor_status, "gss_import_name()")) {
    failf(data, "Failed to create service name.");
    gss_release_name(&gss_status, &server);
    return CURLE_COULDNT_CONNECT;
  }

  (void)curlx_nonblock(sock, FALSE);

  /* As long as we need to keep sending some context info, and there's no  */
  /* errors, keep sending it...                                            */
  for(;;) {
    gss_major_status = Curl_gss_init_sec_context(data,
                                                 &gss_minor_status,
                                                 &gss_context,
508
509
510
511
512
513
514


515
516
517
518
519
520
521
522
523
524
525
526
527
      gss_delete_sec_context(&gss_status, &gss_context, NULL);
      return CURLE_COULDNT_CONNECT;
    }

    memcpy(socksreq, gss_recv_token.value, gss_recv_token.length);
    gss_release_buffer(&gss_status, &gss_recv_token);
  }



  infof(data, "SOCKS5 access with%s protection granted.\n",
        (socksreq[0] == 0)?"out GSS-API data":
        ((socksreq[0] == 1)?" GSS-API integrity":" GSS-API confidentiality"));

  conn->socks5_gssapi_enctype = socksreq[0];
  if(socksreq[0] == 0)
    gss_delete_sec_context(&gss_status, &gss_context, NULL);

  return CURLE_OK;
}

#endif /* HAVE_GSSAPI && !CURL_DISABLE_PROXY */







>
>













510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
      gss_delete_sec_context(&gss_status, &gss_context, NULL);
      return CURLE_COULDNT_CONNECT;
    }

    memcpy(socksreq, gss_recv_token.value, gss_recv_token.length);
    gss_release_buffer(&gss_status, &gss_recv_token);
  }

  (void)curlx_nonblock(sock, TRUE);

  infof(data, "SOCKS5 access with%s protection granted.\n",
        (socksreq[0] == 0)?"out GSS-API data":
        ((socksreq[0] == 1)?" GSS-API integrity":" GSS-API confidentiality"));

  conn->socks5_gssapi_enctype = socksreq[0];
  if(socksreq[0] == 0)
    gss_delete_sec_context(&gss_status, &gss_context, NULL);

  return CURLE_OK;
}

#endif /* HAVE_GSSAPI && !CURL_DISABLE_PROXY */
Changes to jni/curl/lib/socks_sspi.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2012 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 2009, 2011, Markus Moeller, <markus_moeller@compuserve.com>
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2012 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 2009, 2011, Markus Moeller, <markus_moeller@compuserve.com>
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
148
149
150
151
152
153
154


155
156
157
158
159
160
161

  if(check_sspi_err(conn, status, "AcquireCredentialsHandle")) {
    failf(data, "Failed to acquire credentials.");
    free(service_name);
    s_pSecFn->FreeCredentialsHandle(&cred_handle);
    return CURLE_COULDNT_CONNECT;
  }



  /* As long as we need to keep sending some context info, and there's no  */
  /* errors, keep sending it...                                            */
  for(;;) {
    TCHAR *sname;

    sname = Curl_convert_UTF8_to_tchar(service_name);







>
>







148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163

  if(check_sspi_err(conn, status, "AcquireCredentialsHandle")) {
    failf(data, "Failed to acquire credentials.");
    free(service_name);
    s_pSecFn->FreeCredentialsHandle(&cred_handle);
    return CURLE_COULDNT_CONNECT;
  }

  (void)curlx_nonblock(sock, FALSE);

  /* As long as we need to keep sending some context info, and there's no  */
  /* errors, keep sending it...                                            */
  for(;;) {
    TCHAR *sname;

    sname = Curl_convert_UTF8_to_tchar(service_name);
583
584
585
586
587
588
589

590
591
592
593
594
595
596
      s_pSecFn->FreeContextBuffer(sspi_w_token[0].pvBuffer);
      s_pSecFn->DeleteSecurityContext(&sspi_context);
      return CURLE_COULDNT_CONNECT;
    }
    memcpy(socksreq, sspi_w_token[0].pvBuffer, sspi_w_token[0].cbBuffer);
    s_pSecFn->FreeContextBuffer(sspi_w_token[0].pvBuffer);
  }


  infof(data, "SOCKS5 access with%s protection granted.\n",
        (socksreq[0] == 0)?"out GSS-API data":
        ((socksreq[0] == 1)?" GSS-API integrity":" GSS-API confidentiality"));

  /* For later use if encryption is required
     conn->socks5_gssapi_enctype = socksreq[0];







>







585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
      s_pSecFn->FreeContextBuffer(sspi_w_token[0].pvBuffer);
      s_pSecFn->DeleteSecurityContext(&sspi_context);
      return CURLE_COULDNT_CONNECT;
    }
    memcpy(socksreq, sspi_w_token[0].pvBuffer, sspi_w_token[0].cbBuffer);
    s_pSecFn->FreeContextBuffer(sspi_w_token[0].pvBuffer);
  }
  (void)curlx_nonblock(sock, TRUE);

  infof(data, "SOCKS5 access with%s protection granted.\n",
        (socksreq[0] == 0)?"out GSS-API data":
        ((socksreq[0] == 1)?" GSS-API integrity":" GSS-API confidentiality"));

  /* For later use if encryption is required
     conn->socks5_gssapi_enctype = socksreq[0];
Changes to jni/curl/lib/strcase.c.
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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "curl_setup.h"

#include <curl/curl.h>

#include "strcase.h"



/* Portable, consistent toupper (remember EBCDIC). Do not use toupper() because
   its behavior is altered by the current locale. */
char Curl_raw_toupper(char in)
{
#if !defined(CURL_DOES_CONVERSIONS)
  if(in >= 'a' && in <= 'z')







|



















>
>







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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "curl_setup.h"

#include <curl/curl.h>

#include "strcase.h"

static char raw_tolower(char in);

/* Portable, consistent toupper (remember EBCDIC). Do not use toupper() because
   its behavior is altered by the current locale. */
char Curl_raw_toupper(char in)
{
#if !defined(CURL_DOES_CONVERSIONS)
  if(in >= 'a' && in <= 'z')
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106

  return in;
}


/* Portable, consistent tolower (remember EBCDIC). Do not use tolower() because
   its behavior is altered by the current locale. */
char Curl_raw_tolower(char in)
{
#if !defined(CURL_DOES_CONVERSIONS)
  if(in >= 'A' && in <= 'Z')
    return (char)('a' + in - 'A');
#else
  switch(in) {
  case 'A':







|







94
95
96
97
98
99
100
101
102
103
104
105
106
107
108

  return in;
}


/* Portable, consistent tolower (remember EBCDIC). Do not use tolower() because
   its behavior is altered by the current locale. */
static char raw_tolower(char in)
{
#if !defined(CURL_DOES_CONVERSIONS)
  if(in >= 'A' && in <= 'Z')
    return (char)('a' + in - 'A');
#else
  switch(in) {
  case 'A':
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
 */
void Curl_strntolower(char *dest, const char *src, size_t n)
{
  if(n < 1)
    return;

  do {
    *dest++ = Curl_raw_tolower(*src);
  } while(*src++ && --n);
}

/* --- public functions --- */

int curl_strequal(const char *first, const char *second)
{
  return Curl_strcasecompare(first, second);
}
int curl_strnequal(const char *first, const char *second, size_t max)
{
  return Curl_strncasecompare(first, second, max);
}







|













243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
 */
void Curl_strntolower(char *dest, const char *src, size_t n)
{
  if(n < 1)
    return;

  do {
    *dest++ = raw_tolower(*src);
  } while(*src++ && --n);
}

/* --- public functions --- */

int curl_strequal(const char *first, const char *second)
{
  return Curl_strcasecompare(first, second);
}
int curl_strnequal(const char *first, const char *second, size_t max)
{
  return Curl_strncasecompare(first, second, max);
}
Changes to jni/curl/lib/strcase.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_STRCASE_H
#define HEADER_CURL_STRCASE_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_STRCASE_H
#define HEADER_CURL_STRCASE_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#define strncasecompare(a,b,c) Curl_strncasecompare(a,b,c)

int Curl_strcasecompare(const char *first, const char *second);
int Curl_safe_strcasecompare(const char *first, const char *second);
int Curl_strncasecompare(const char *first, const char *second, size_t max);

char Curl_raw_toupper(char in);
char Curl_raw_tolower(char in);

/* checkprefix() is a shorter version of the above, used when the first
   argument is zero-byte terminated */
#define checkprefix(a,b)    curl_strnequal(a,b,strlen(a))

void Curl_strntoupper(char *dest, const char *src, size_t n);
void Curl_strntolower(char *dest, const char *src, size_t n);

#endif /* HEADER_CURL_STRCASE_H */







<









36
37
38
39
40
41
42

43
44
45
46
47
48
49
50
51
#define strncasecompare(a,b,c) Curl_strncasecompare(a,b,c)

int Curl_strcasecompare(const char *first, const char *second);
int Curl_safe_strcasecompare(const char *first, const char *second);
int Curl_strncasecompare(const char *first, const char *second, size_t max);

char Curl_raw_toupper(char in);


/* checkprefix() is a shorter version of the above, used when the first
   argument is zero-byte terminated */
#define checkprefix(a,b)    curl_strnequal(a,b,strlen(a))

void Curl_strntoupper(char *dest, const char *src, size_t n);
void Curl_strntolower(char *dest, const char *src, size_t n);

#endif /* HEADER_CURL_STRCASE_H */
Changes to jni/curl/lib/strerror.c.
313
314
315
316
317
318
319



320
321
322
323
324
325
326

  case CURLE_AUTH_ERROR:
    return "An authentication function returned an error";

  case CURLE_HTTP3:
    return "HTTP/3 error";




    /* error codes not used by current libcurl */
  case CURLE_OBSOLETE20:
  case CURLE_OBSOLETE24:
  case CURLE_OBSOLETE29:
  case CURLE_OBSOLETE32:
  case CURLE_OBSOLETE40:
  case CURLE_OBSOLETE44:







>
>
>







313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329

  case CURLE_AUTH_ERROR:
    return "An authentication function returned an error";

  case CURLE_HTTP3:
    return "HTTP/3 error";

  case CURLE_QUIC_CONNECT_ERROR:
    return "QUIC connection error";

    /* error codes not used by current libcurl */
  case CURLE_OBSOLETE20:
  case CURLE_OBSOLETE24:
  case CURLE_OBSOLETE29:
  case CURLE_OBSOLETE32:
  case CURLE_OBSOLETE40:
  case CURLE_OBSOLETE44:
388
389
390
391
392
393
394



395
396
397
398
399
400
401

  case CURLM_RECURSIVE_API_CALL:
    return "API function called from within callback";

  case CURLM_WAKEUP_FAILURE:
    return "Wakeup is unavailable or failed";




  case CURLM_LAST:
    break;
  }

  return "Unknown error";
#else
  if(error == CURLM_OK)







>
>
>







391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407

  case CURLM_RECURSIVE_API_CALL:
    return "API function called from within callback";

  case CURLM_WAKEUP_FAILURE:
    return "Wakeup is unavailable or failed";

  case CURLM_BAD_FUNCTION_ARGUMENT:
    return "A libcurl function was given a bad argument";

  case CURLM_LAST:
    break;
  }

  return "Unknown error";
#else
  if(error == CURLM_OK)
Changes to jni/curl/lib/strerror.h.
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
#ifndef HEADER_CURL_STRERROR_H
#define HEADER_CURL_STRERROR_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "urldata.h"

#define STRERROR_LEN 128 /* a suitable length */

const char *Curl_strerror(int err, char *buf, size_t buflen);
#if defined(WIN32) || defined(_WIN32_WCE)
const char *Curl_winapi_strerror(DWORD err, char *buf, size_t buflen);
#endif
#ifdef USE_WINDOWS_SSPI
const char *Curl_sspi_strerror(int err, char *buf, size_t buflen);
#endif

#endif /* HEADER_CURL_STRERROR_H */









|
















|










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
#ifndef HEADER_CURL_STRERROR_H
#define HEADER_CURL_STRERROR_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "urldata.h"

#define STRERROR_LEN 256 /* a suitable length */

const char *Curl_strerror(int err, char *buf, size_t buflen);
#if defined(WIN32) || defined(_WIN32_WCE)
const char *Curl_winapi_strerror(DWORD err, char *buf, size_t buflen);
#endif
#ifdef USE_WINDOWS_SSPI
const char *Curl_sspi_strerror(int err, char *buf, size_t buflen);
#endif

#endif /* HEADER_CURL_STRERROR_H */
Changes to jni/curl/lib/system_win32.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2016 - 2019, Steve Holme, <steve_holme@hotmail.com>.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2016 - 2020, Steve Holme, <steve_holme@hotmail.com>.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
105
106
107
108
109
110
111
112
113
114
115
116

117
118
119
120
121
122
123
    if(pIfNameToIndex)
      Curl_if_nametoindex = pIfNameToIndex;
  }

  if(Curl_verify_windows_version(6, 0, PLATFORM_WINNT,
                                 VERSION_GREATER_THAN_EQUAL)) {
    Curl_isVistaOrGreater = TRUE;
    QueryPerformanceFrequency(&Curl_freq);
  }
  else
    Curl_isVistaOrGreater = FALSE;


  return CURLE_OK;
}

/* Curl_win32_cleanup() is the opposite of Curl_win32_init() */
void Curl_win32_cleanup(long init_flags)
{
  if(s_hIpHlpApiDll) {







<




>







105
106
107
108
109
110
111

112
113
114
115
116
117
118
119
120
121
122
123
    if(pIfNameToIndex)
      Curl_if_nametoindex = pIfNameToIndex;
  }

  if(Curl_verify_windows_version(6, 0, PLATFORM_WINNT,
                                 VERSION_GREATER_THAN_EQUAL)) {
    Curl_isVistaOrGreater = TRUE;

  }
  else
    Curl_isVistaOrGreater = FALSE;

  QueryPerformanceFrequency(&Curl_freq);
  return CURLE_OK;
}

/* Curl_win32_cleanup() is the opposite of Curl_win32_init() */
void Curl_win32_cleanup(long init_flags)
{
  if(s_hIpHlpApiDll) {
Changes to jni/curl/lib/timeval.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
24
25
26
27
28
29
30

31
32
33
34
35
36
37

#if defined(WIN32) && !defined(MSDOS)

/* set in win32_init() */
extern LARGE_INTEGER Curl_freq;
extern bool Curl_isVistaOrGreater;


struct curltime Curl_now(void)
{
  struct curltime now;
  if(Curl_isVistaOrGreater) { /* QPC timer might have issues pre-Vista */
    LARGE_INTEGER count;
    QueryPerformanceCounter(&count);
    now.tv_sec = (time_t)(count.QuadPart / Curl_freq.QuadPart);







>







24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

#if defined(WIN32) && !defined(MSDOS)

/* set in win32_init() */
extern LARGE_INTEGER Curl_freq;
extern bool Curl_isVistaOrGreater;

/* In case of bug fix this function has a counterpart in tool_util.c */
struct curltime Curl_now(void)
{
  struct curltime now;
  if(Curl_isVistaOrGreater) { /* QPC timer might have issues pre-Vista */
    LARGE_INTEGER count;
    QueryPerformanceCounter(&count);
    now.tv_sec = (time_t)(count.QuadPart / Curl_freq.QuadPart);
Changes to jni/curl/lib/transfer.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
1213
1214
1215
1216
1217
1218
1219
1220

1221
1222
1223
1224
1225
1226
1227
    fd_read = CURL_SOCKET_BAD;

  if((k->keepon & KEEP_SENDBITS) == KEEP_SEND)
    fd_write = conn->writesockfd;
  else
    fd_write = CURL_SOCKET_BAD;

  if(conn->data->state.drain) {

    select_res |= CURL_CSELECT_IN;
    DEBUGF(infof(data, "Curl_readwrite: forcibly told to drain data\n"));
  }

  if(!select_res) /* Call for select()/poll() only, if read/write/error
                     status is not known. */
    select_res = Curl_socket_check(fd_read, CURL_SOCKET_BAD, fd_write, 0);







|
>







1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
    fd_read = CURL_SOCKET_BAD;

  if((k->keepon & KEEP_SENDBITS) == KEEP_SEND)
    fd_write = conn->writesockfd;
  else
    fd_write = CURL_SOCKET_BAD;

  if(data->state.drain) {
    data->state.drain--;
    select_res |= CURL_CSELECT_IN;
    DEBUGF(infof(data, "Curl_readwrite: forcibly told to drain data\n"));
  }

  if(!select_res) /* Call for select()/poll() only, if read/write/error
                     status is not known. */
    select_res = Curl_socket_check(fd_read, CURL_SOCKET_BAD, fd_write, 0);
Changes to jni/curl/lib/url.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

static void conn_free(struct connectdata *conn);
static void free_idnconverted_hostname(struct hostname *host);
static unsigned int get_protocol_family(unsigned int protocol);

/* Some parts of the code (e.g. chunked encoding) assume this buffer has at
 * more than just a few bytes to play with. Don't let it become too small or
 * bad things will happen.
 */
#if READBUFFER_SIZE < READBUFFER_MIN







<







124
125
126
127
128
129
130

131
132
133
134
135
136
137

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

static void conn_free(struct connectdata *conn);

static unsigned int get_protocol_family(unsigned int protocol);

/* Some parts of the code (e.g. chunked encoding) assume this buffer has at
 * more than just a few bytes to play with. Don't let it become too small or
 * bad things will happen.
 */
#if READBUFFER_SIZE < READBUFFER_MIN
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
  &Curl_handler_file,
#endif

#ifndef CURL_DISABLE_TFTP
  &Curl_handler_tftp,
#endif

#if defined(USE_SSH)
  &Curl_handler_scp,
#endif

#if defined(USE_SSH)
  &Curl_handler_sftp,
#endif








|







182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
  &Curl_handler_file,
#endif

#ifndef CURL_DISABLE_TFTP
  &Curl_handler_tftp,
#endif

#if defined(USE_SSH) && !defined(USE_WOLFSSH)
  &Curl_handler_scp,
#endif

#if defined(USE_SSH)
  &Curl_handler_sftp,
#endif

376
377
378
379
380
381
382
383
384
385
386
387
388
389
390

  up_free(data);
  Curl_safefree(data->state.buffer);
  Curl_safefree(data->state.headerbuff);
  Curl_safefree(data->state.ulbuf);
  Curl_flush_cookies(data, TRUE);
#ifdef USE_ALTSVC
  Curl_altsvc_save(data->asi, data->set.str[STRING_ALTSVC]);
  Curl_altsvc_cleanup(data->asi);
  data->asi = NULL;
#endif
#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH)
  Curl_http_auth_cleanup_digest(data);
#endif
  Curl_safefree(data->info.contenttype);







|







375
376
377
378
379
380
381
382
383
384
385
386
387
388
389

  up_free(data);
  Curl_safefree(data->state.buffer);
  Curl_safefree(data->state.headerbuff);
  Curl_safefree(data->state.ulbuf);
  Curl_flush_cookies(data, TRUE);
#ifdef USE_ALTSVC
  Curl_altsvc_save(data, data->asi, data->set.str[STRING_ALTSVC]);
  Curl_altsvc_cleanup(data->asi);
  data->asi = NULL;
#endif
#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH)
  Curl_http_auth_cleanup_digest(data);
#endif
  Curl_safefree(data->info.contenttype);
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
}

static void conn_free(struct connectdata *conn)
{
  if(!conn)
    return;

  free_idnconverted_hostname(&conn->host);
  free_idnconverted_hostname(&conn->conn_to_host);
  free_idnconverted_hostname(&conn->http_proxy.host);
  free_idnconverted_hostname(&conn->socks_proxy.host);

  Curl_safefree(conn->user);
  Curl_safefree(conn->passwd);
  Curl_safefree(conn->oauth_bearer);
  Curl_safefree(conn->sasl_authzid);
  Curl_safefree(conn->options);
  Curl_safefree(conn->http_proxy.user);
  Curl_safefree(conn->socks_proxy.user);
  Curl_safefree(conn->http_proxy.passwd);
  Curl_safefree(conn->socks_proxy.passwd);
  Curl_safefree(conn->allocptr.proxyuserpwd);







|
|
|
|



<







709
710
711
712
713
714
715
716
717
718
719
720
721
722

723
724
725
726
727
728
729
}

static void conn_free(struct connectdata *conn)
{
  if(!conn)
    return;

  Curl_free_idnconverted_hostname(&conn->host);
  Curl_free_idnconverted_hostname(&conn->conn_to_host);
  Curl_free_idnconverted_hostname(&conn->http_proxy.host);
  Curl_free_idnconverted_hostname(&conn->socks_proxy.host);

  Curl_safefree(conn->user);
  Curl_safefree(conn->passwd);

  Curl_safefree(conn->sasl_authzid);
  Curl_safefree(conn->options);
  Curl_safefree(conn->http_proxy.user);
  Curl_safefree(conn->socks_proxy.user);
  Curl_safefree(conn->http_proxy.passwd);
  Curl_safefree(conn->socks_proxy.passwd);
  Curl_safefree(conn->allocptr.proxyuserpwd);
879
880
881
882
883
884
885



























886
887
888

889
890
891
892
893
894
895
  if((data->proxytype == needle->proxytype) &&
     (data->port == needle->port) &&
     Curl_safe_strcasecompare(data->host.name, needle->host.name))
    return TRUE;

  return FALSE;
}



























#else
/* disabled, won't get called */
#define proxy_info_matches(x,y) FALSE

#endif

/* A connection has to have been idle for a shorter time than 'maxage_conn' to
   be subject for reuse. The success rate is just too low after this. */

static bool conn_maxage(struct Curl_easy *data,
                        struct connectdata *conn,







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>



>







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
  if((data->proxytype == needle->proxytype) &&
     (data->port == needle->port) &&
     Curl_safe_strcasecompare(data->host.name, needle->host.name))
    return TRUE;

  return FALSE;
}

static bool
socks_proxy_info_matches(const struct proxy_info* data,
                         const struct proxy_info* needle)
{
  if(!proxy_info_matches(data, needle))
    return FALSE;

  /* the user information is case-sensitive
     or at least it is not defined as case-insensitive
     see https://tools.ietf.org/html/rfc3986#section-3.2.1 */
  if((data->user == NULL) != (needle->user == NULL))
    return FALSE;
  /* curl_strequal does a case insentive comparison, so do not use it here! */
  if(data->user &&
     needle->user &&
     strcmp(data->user, needle->user) != 0)
    return FALSE;
  if((data->passwd == NULL) != (needle->passwd == NULL))
    return FALSE;
  /* curl_strequal does a case insentive comparison, so do not use it here! */
  if(data->passwd &&
     needle->passwd &&
     strcmp(data->passwd, needle->passwd) != 0)
    return FALSE;
  return TRUE;
}
#else
/* disabled, won't get called */
#define proxy_info_matches(x,y) FALSE
#define socks_proxy_info_matches(x,y) FALSE
#endif

/* A connection has to have been idle for a shorter time than 'maxage_conn' to
   be subject for reuse. The success rate is just too low after this. */

static bool conn_maxage(struct Curl_easy *data,
                        struct connectdata *conn,
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090

1091
1092
1093
1094
1095
1096
1097
        canmultiplex = FALSE;
      }
    }

    curr = bundle->conn_list.head;
    while(curr) {
      bool match = FALSE;
      size_t multiplexed;

      /*
       * Note that if we use a HTTP proxy in normal mode (no tunneling), we
       * check connections to that proxy and not to the actual remote server.
       */
      check = curr->ptr;
      curr = curr->next;

      if(check->bits.connect_only || check->bits.close)
        /* connect-only or to-be-closed connections will not be reused */
        continue;

      multiplexed = CONN_INUSE(check) &&
        (bundle->multiuse == BUNDLE_MULTIPLEX);


      if(canmultiplex) {
        ;
      }
      else {
        if(multiplexed) {
          /* can only happen within multi handles, and means that another easy







|












<
|
>







1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114

1115
1116
1117
1118
1119
1120
1121
1122
1123
        canmultiplex = FALSE;
      }
    }

    curr = bundle->conn_list.head;
    while(curr) {
      bool match = FALSE;
      size_t multiplexed = 0;

      /*
       * Note that if we use a HTTP proxy in normal mode (no tunneling), we
       * check connections to that proxy and not to the actual remote server.
       */
      check = curr->ptr;
      curr = curr->next;

      if(check->bits.connect_only || check->bits.close)
        /* connect-only or to-be-closed connections will not be reused */
        continue;


      if(bundle->multiuse == BUNDLE_MULTIPLEX)
        multiplexed = CONN_INUSE(check);

      if(canmultiplex) {
        ;
      }
      else {
        if(multiplexed) {
          /* can only happen within multi handles, and means that another easy
1140
1141
1142
1143
1144
1145
1146
1147

1148
1149
1150
1151
1152
1153
1154
1155
          /* except protocols that have been upgraded via TLS */
          continue;

      if(needle->bits.httpproxy != check->bits.httpproxy ||
         needle->bits.socksproxy != check->bits.socksproxy)
        continue;

      if(needle->bits.socksproxy && !proxy_info_matches(&needle->socks_proxy,

                                                        &check->socks_proxy))
        continue;

      if(needle->bits.conn_to_host != check->bits.conn_to_host)
        /* don't mix connections that use the "connect to host" feature and
         * connections that don't use this feature */
        continue;








|
>
|







1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
          /* except protocols that have been upgraded via TLS */
          continue;

      if(needle->bits.httpproxy != check->bits.httpproxy ||
         needle->bits.socksproxy != check->bits.socksproxy)
        continue;

      if(needle->bits.socksproxy &&
        !socks_proxy_info_matches(&needle->socks_proxy,
                                  &check->socks_proxy))
        continue;

      if(needle->bits.conn_to_host != check->bits.conn_to_host)
        /* don't mix connections that use the "connect to host" feature and
         * connections that don't use this feature */
        continue;

1180
1181
1182
1183
1184
1185
1186


1187
1188
1189
1190
1191
1192
1193
                                        &check->ssl_config))
              continue;
            if(check->ssl[FIRSTSOCKET].state != ssl_connection_complete)
              continue;
          }
        }
      }



      if(!canmultiplex && check->data)
        /* this request can't be multiplexed but the checked connection is
           already in use so we skip it */
        continue;

      if(check->data && (check->data->multi != needle->data->multi))







>
>







1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
                                        &check->ssl_config))
              continue;
            if(check->ssl[FIRSTSOCKET].state != ssl_connection_complete)
              continue;
          }
        }
      }

      DEBUGASSERT(!check->data || GOOD_EASY_HANDLE(check->data));

      if(!canmultiplex && check->data)
        /* this request can't be multiplexed but the checked connection is
           already in use so we skip it */
        continue;

      if(check->data && (check->data->multi != needle->data->multi))
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
             needle->handler->protocol && check->tls_upgraded)) &&
           (!needle->bits.conn_to_host || strcasecompare(
            needle->conn_to_host.name, check->conn_to_host.name)) &&
           (!needle->bits.conn_to_port ||
             needle->conn_to_port == check->conn_to_port) &&
           strcasecompare(needle->host.name, check->host.name) &&
           needle->remote_port == check->remote_port) {
          /* The schemes match or the the protocol family is the same and the
             previous connection was TLS upgraded, and the hostname and host
             port match */
          if(needle->handler->flags & PROTOPT_SSL) {
            /* This is a SSL connection so verify that we're using the same
               SSL options as well */
            if(!Curl_ssl_config_matches(&needle->ssl_config,
                                        &check->ssl_config)) {







|







1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
             needle->handler->protocol && check->tls_upgraded)) &&
           (!needle->bits.conn_to_host || strcasecompare(
            needle->conn_to_host.name, check->conn_to_host.name)) &&
           (!needle->bits.conn_to_port ||
             needle->conn_to_port == check->conn_to_port) &&
           strcasecompare(needle->host.name, check->host.name) &&
           needle->remote_port == check->remote_port) {
          /* The schemes match or the protocol family is the same and the
             previous connection was TLS upgraded, and the hostname and host
             port match */
          if(needle->handler->flags & PROTOPT_SSL) {
            /* This is a SSL connection so verify that we're using the same
               SSL options as well */
            if(!Curl_ssl_config_matches(&needle->ssl_config,
                                        &check->ssl_config)) {
1343
1344
1345
1346
1347
1348
1349







1350
1351
1352
1353
1354
1355
1356
            /* Multiplexed connections can only be HTTP/2 for now */
            struct http_conn *httpc = &check->proto.httpc;
            if(multiplexed >= httpc->settings.max_concurrent_streams) {
              infof(data, "MAX_CONCURRENT_STREAMS reached, skip (%zu)\n",
                    multiplexed);
              continue;
            }







          }
#endif
          /* When not multiplexed, we have a match here! */
          chosen = check;
          infof(data, "Multiplexed connection found!\n");
          break;
        }







>
>
>
>
>
>
>







1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
            /* Multiplexed connections can only be HTTP/2 for now */
            struct http_conn *httpc = &check->proto.httpc;
            if(multiplexed >= httpc->settings.max_concurrent_streams) {
              infof(data, "MAX_CONCURRENT_STREAMS reached, skip (%zu)\n",
                    multiplexed);
              continue;
            }
            else if(multiplexed >=
                    Curl_multi_max_concurrent_streams(needle->data->multi)) {
              infof(data, "client side MAX_CONCURRENT_STREAMS reached"
                    ", skip (%zu)\n",
                    multiplexed);
              continue;
            }
          }
#endif
          /* When not multiplexed, we have a match here! */
          chosen = check;
          infof(data, "Multiplexed connection found!\n");
          break;
        }
1396
1397
1398
1399
1400
1401
1402
1403
1404

1405



1406
1407
1408
1409
1410
1411
1412
          conn->ip_addr_str, conn->port, conn->connection_id);
}
#endif

/*
 * Helpers for IDNA conversions.
 */
static bool is_ASCII_name(const char *hostname)
{

  const unsigned char *ch = (const unsigned char *)hostname;




  while(*ch) {
    if(*ch++ & 0x80)
      return FALSE;
  }
  return TRUE;
}







|

>

>
>
>







1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
          conn->ip_addr_str, conn->port, conn->connection_id);
}
#endif

/*
 * Helpers for IDNA conversions.
 */
bool Curl_is_ASCII_name(const char *hostname)
{
  /* get an UNSIGNED local version of the pointer */
  const unsigned char *ch = (const unsigned char *)hostname;

  if(!hostname) /* bad input, consider it ASCII! */
    return TRUE;

  while(*ch) {
    if(*ch++ & 0x80)
      return FALSE;
  }
  return TRUE;
}
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
  if(len && (host->name[len-1] == '.'))
    host->name[len-1] = 0;
}

/*
 * Perform any necessary IDN conversion of hostname
 */
static CURLcode idnconvert_hostname(struct connectdata *conn,
                                    struct hostname *host)
{
  struct Curl_easy *data = conn->data;

#ifndef USE_LIBIDN2
  (void)data;
  (void)conn;
#elif defined(CURL_DISABLE_VERBOSE_STRINGS)
  (void)conn;
#endif

  /* set the name we use to display the host name */
  host->dispname = host->name;

  /* Check name for non-ASCII and convert hostname to ACE form if we can */
  if(!is_ASCII_name(host->name)) {
#ifdef USE_LIBIDN2
    if(idn2_check_version(IDN2_VERSION)) {
      char *ace_hostname = NULL;
#if IDN2_VERSION_NUMBER >= 0x00140000
      /* IDN2_NFC_INPUT: Normalize input string using normalization form C.
         IDN2_NONTRANSITIONAL: Perform Unicode TR46 non-transitional
         processing. */







|
|














|







1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
  if(len && (host->name[len-1] == '.'))
    host->name[len-1] = 0;
}

/*
 * Perform any necessary IDN conversion of hostname
 */
CURLcode Curl_idnconvert_hostname(struct connectdata *conn,
                                  struct hostname *host)
{
  struct Curl_easy *data = conn->data;

#ifndef USE_LIBIDN2
  (void)data;
  (void)conn;
#elif defined(CURL_DISABLE_VERBOSE_STRINGS)
  (void)conn;
#endif

  /* set the name we use to display the host name */
  host->dispname = host->name;

  /* Check name for non-ASCII and convert hostname to ACE form if we can */
  if(!Curl_is_ASCII_name(host->name)) {
#ifdef USE_LIBIDN2
    if(idn2_check_version(IDN2_VERSION)) {
      char *ace_hostname = NULL;
#if IDN2_VERSION_NUMBER >= 0x00140000
      /* IDN2_NFC_INPUT: Normalize input string using normalization form C.
         IDN2_NONTRANSITIONAL: Perform Unicode TR46 non-transitional
         processing. */
1473
1474
1475
1476
1477
1478
1479

1480

1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500

    if(curl_win32_idn_to_ascii(host->name, &ace_hostname)) {
      host->encalloc = ace_hostname;
      /* change the name pointer to point to the encoded hostname */
      host->name = host->encalloc;
    }
    else {

      failf(data, "Failed to convert %s to ACE;\n", host->name);

      return CURLE_URL_MALFORMAT;
    }
#else
    infof(data, "IDN support not present, can't parse Unicode domains\n");
#endif
  }
  return CURLE_OK;
}

/*
 * Frees data allocated by idnconvert_hostname()
 */
static void free_idnconverted_hostname(struct hostname *host)
{
#if defined(USE_LIBIDN2)
  if(host->encalloc) {
    idn2_free(host->encalloc); /* must be freed with idn2_free() since this was
                                 allocated by libidn */
    host->encalloc = NULL;
  }







>
|
>












|







1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542

    if(curl_win32_idn_to_ascii(host->name, &ace_hostname)) {
      host->encalloc = ace_hostname;
      /* change the name pointer to point to the encoded hostname */
      host->name = host->encalloc;
    }
    else {
      char buffer[STRERROR_LEN];
      failf(data, "Failed to convert %s to ACE; %s\n", host->name,
            Curl_winapi_strerror(GetLastError(), buffer, sizeof(buffer)));
      return CURLE_URL_MALFORMAT;
    }
#else
    infof(data, "IDN support not present, can't parse Unicode domains\n");
#endif
  }
  return CURLE_OK;
}

/*
 * Frees data allocated by idnconvert_hostname()
 */
void Curl_free_idnconverted_hostname(struct hostname *host)
{
#if defined(USE_LIBIDN2)
  if(host->encalloc) {
    idn2_free(host->encalloc); /* must be freed with idn2_free() since this was
                                 allocated by libidn */
    host->encalloc = NULL;
  }
1611
1612
1613
1614
1615
1616
1617
1618

1619
1620
1621
1622
1623
1624
1625
  conn->proxy_ssl_config.verifyhost = data->set.proxy_ssl.primary.verifyhost;
  conn->ip_version = data->set.ipver;
  conn->bits.connect_only = data->set.connect_only;
  conn->transport = TRNSPRT_TCP; /* most of them are TCP streams */

#if !defined(CURL_DISABLE_HTTP) && defined(USE_NTLM) && \
    defined(NTLM_WB_ENABLED)
  conn->ntlm_auth_hlpr_socket = CURL_SOCKET_BAD;

#endif

  /* Initialize the easy handle list */
  Curl_llist_init(&conn->easyq, NULL);

#ifdef HAVE_GSSAPI
  conn->data_prot = PROT_CLEAR;







|
>







1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
  conn->proxy_ssl_config.verifyhost = data->set.proxy_ssl.primary.verifyhost;
  conn->ip_version = data->set.ipver;
  conn->bits.connect_only = data->set.connect_only;
  conn->transport = TRNSPRT_TCP; /* most of them are TCP streams */

#if !defined(CURL_DISABLE_HTTP) && defined(USE_NTLM) && \
    defined(NTLM_WB_ENABLED)
  conn->ntlm.ntlm_auth_hlpr_socket = CURL_SOCKET_BAD;
  conn->proxyntlm.ntlm_auth_hlpr_socket = CURL_SOCKET_BAD;
#endif

  /* Initialize the easy handle list */
  Curl_llist_init(&conn->easyq, NULL);

#ifdef HAVE_GSSAPI
  conn->data_prot = PROT_CLEAR;
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
 * Cleanup the connection just allocated before we can move along and use the
 * previously existing one.  All relevant data is copied over and old_conn is
 * ready for freeing once this function returns.
 */
static void reuse_conn(struct connectdata *old_conn,
                       struct connectdata *conn)
{
  free_idnconverted_hostname(&old_conn->http_proxy.host);
  free_idnconverted_hostname(&old_conn->socks_proxy.host);

  free(old_conn->http_proxy.host.rawalloc);
  free(old_conn->socks_proxy.host.rawalloc);

  /* free the SSL config struct from this connection struct as this was
     allocated in vain and is targeted for destruction */
  Curl_free_primary_ssl_config(&old_conn->ssl_config);







|
|







3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
 * Cleanup the connection just allocated before we can move along and use the
 * previously existing one.  All relevant data is copied over and old_conn is
 * ready for freeing once this function returns.
 */
static void reuse_conn(struct connectdata *old_conn,
                       struct connectdata *conn)
{
  Curl_free_idnconverted_hostname(&old_conn->http_proxy.host);
  Curl_free_idnconverted_hostname(&old_conn->socks_proxy.host);

  free(old_conn->http_proxy.host.rawalloc);
  free(old_conn->socks_proxy.host.rawalloc);

  /* free the SSL config struct from this connection struct as this was
     allocated in vain and is targeted for destruction */
  Curl_free_primary_ssl_config(&old_conn->ssl_config);
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
    old_conn->socks_proxy.user = NULL;
    old_conn->http_proxy.passwd = NULL;
    old_conn->socks_proxy.passwd = NULL;
  }

  /* host can change, when doing keepalive with a proxy or if the case is
     different this time etc */
  free_idnconverted_hostname(&conn->host);
  free_idnconverted_hostname(&conn->conn_to_host);
  Curl_safefree(conn->host.rawalloc);
  Curl_safefree(conn->conn_to_host.rawalloc);
  conn->host = old_conn->host;
  conn->conn_to_host = old_conn->conn_to_host;
  conn->conn_to_port = old_conn->conn_to_port;
  conn->remote_port = old_conn->remote_port;
  Curl_safefree(conn->hostname_resolve);







|
|







3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
    old_conn->socks_proxy.user = NULL;
    old_conn->http_proxy.passwd = NULL;
    old_conn->socks_proxy.passwd = NULL;
  }

  /* host can change, when doing keepalive with a proxy or if the case is
     different this time etc */
  Curl_free_idnconverted_hostname(&conn->host);
  Curl_free_idnconverted_hostname(&conn->conn_to_host);
  Curl_safefree(conn->host.rawalloc);
  Curl_safefree(conn->conn_to_host.rawalloc);
  conn->host = old_conn->host;
  conn->conn_to_host = old_conn->conn_to_host;
  conn->conn_to_port = old_conn->conn_to_port;
  conn->remote_port = old_conn->remote_port;
  Curl_safefree(conn->hostname_resolve);
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
     any failure */
  *in_connect = conn;

  result = parseurlandfillconn(data, conn);
  if(result)
    goto out;

  if(data->set.str[STRING_BEARER]) {
    conn->oauth_bearer = strdup(data->set.str[STRING_BEARER]);
    if(!conn->oauth_bearer) {
      result = CURLE_OUT_OF_MEMORY;
      goto out;
    }
  }

  if(data->set.str[STRING_SASL_AUTHZID]) {
    conn->sasl_authzid = strdup(data->set.str[STRING_SASL_AUTHZID]);
    if(!conn->sasl_authzid) {
      result = CURLE_OUT_OF_MEMORY;
      goto out;
    }
  }







<
<
<
<
<
<
<
<







3375
3376
3377
3378
3379
3380
3381








3382
3383
3384
3385
3386
3387
3388
     any failure */
  *in_connect = conn;

  result = parseurlandfillconn(data, conn);
  if(result)
    goto out;









  if(data->set.str[STRING_SASL_AUTHZID]) {
    conn->sasl_authzid = strdup(data->set.str[STRING_SASL_AUTHZID]);
    if(!conn->sasl_authzid) {
      result = CURLE_OUT_OF_MEMORY;
      goto out;
    }
  }
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
  result = parse_connect_to_slist(data, conn, data->set.connect_to);
  if(result)
    goto out;

  /*************************************************************
   * IDN-convert the hostnames
   *************************************************************/
  result = idnconvert_hostname(conn, &conn->host);
  if(result)
    goto out;
  if(conn->bits.conn_to_host) {
    result = idnconvert_hostname(conn, &conn->conn_to_host);
    if(result)
      goto out;
  }
  if(conn->bits.httpproxy) {
    result = idnconvert_hostname(conn, &conn->http_proxy.host);
    if(result)
      goto out;
  }
  if(conn->bits.socksproxy) {
    result = idnconvert_hostname(conn, &conn->socks_proxy.host);
    if(result)
      goto out;
  }

  /*************************************************************
   * Check whether the host and the "connect to host" are equal.
   * Do this after the hostnames have been IDN-converted.







|



|




|




|







3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
  result = parse_connect_to_slist(data, conn, data->set.connect_to);
  if(result)
    goto out;

  /*************************************************************
   * IDN-convert the hostnames
   *************************************************************/
  result = Curl_idnconvert_hostname(conn, &conn->host);
  if(result)
    goto out;
  if(conn->bits.conn_to_host) {
    result = Curl_idnconvert_hostname(conn, &conn->conn_to_host);
    if(result)
      goto out;
  }
  if(conn->bits.httpproxy) {
    result = Curl_idnconvert_hostname(conn, &conn->http_proxy.host);
    if(result)
      goto out;
  }
  if(conn->bits.socksproxy) {
    result = Curl_idnconvert_hostname(conn, &conn->socks_proxy.host);
    if(result)
      goto out;
  }

  /*************************************************************
   * Check whether the host and the "connect to host" are equal.
   * Do this after the hostnames have been IDN-converted.
Changes to jni/curl/lib/url.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_URL_H
#define HEADER_CURL_URL_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_URL_H
#define HEADER_CURL_URL_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
58
59
60
61
62
63
64





65
66
67
68
69
70
71
void Curl_free_request_state(struct Curl_easy *data);
CURLcode Curl_parse_login_details(const char *login, const size_t len,
                                  char **userptr, char **passwdptr,
                                  char **optionsptr);

const struct Curl_handler *Curl_builtin_scheme(const char *scheme);






#define CURL_DEFAULT_PROXY_PORT 1080 /* default proxy port unless specified */
#define CURL_DEFAULT_HTTPS_PROXY_PORT 443 /* default https proxy port unless
                                             specified */

#ifdef CURL_DISABLE_VERBOSE_STRINGS
#define Curl_verboseconnect(x)  Curl_nop_stmt
#else







>
>
>
>
>







58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
void Curl_free_request_state(struct Curl_easy *data);
CURLcode Curl_parse_login_details(const char *login, const size_t len,
                                  char **userptr, char **passwdptr,
                                  char **optionsptr);

const struct Curl_handler *Curl_builtin_scheme(const char *scheme);

bool Curl_is_ASCII_name(const char *hostname);
CURLcode Curl_idnconvert_hostname(struct connectdata *conn,
                                  struct hostname *host);
void Curl_free_idnconverted_hostname(struct hostname *host);

#define CURL_DEFAULT_PROXY_PORT 1080 /* default proxy port unless specified */
#define CURL_DEFAULT_HTTPS_PROXY_PORT 443 /* default https proxy port unless
                                             specified */

#ifdef CURL_DISABLE_VERBOSE_STRINGS
#define Curl_verboseconnect(x)  Curl_nop_stmt
#else
Changes to jni/curl/lib/urlapi.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
 * parse_hostname_login()
 *
 * Parse the login details (user name, password and options) from the URL and
 * strip them out of the host name
 *
 */
static CURLUcode parse_hostname_login(struct Curl_URL *u,
                                      const struct Curl_handler *h,
                                      char **hostname,
                                      unsigned int flags)
{
  CURLUcode result = CURLUE_OK;
  CURLcode ccode;
  char *userp = NULL;
  char *passwdp = NULL;
  char *optionsp = NULL;


  /* At this point, we're hoping all the other special cases have
   * been taken care of, so conn->host.name is at most
   *    [user[:password][;options]]@]hostname
   *
   * We need somewhere to put the embedded details, so do that first.
   */

  char *ptr = strchr(*hostname, '@');
  char *login = *hostname;

  if(!ptr)
    goto out;

  /* We will now try to extract the
   * possible login information in a string like:
   * ftp://user:password@ftp.my.site:8021/README */
  *hostname = ++ptr;





  /* We could use the login information in the URL so extract it. Only parse
     options if the handler says we should. Note that 'h' might be NULL! */
  ccode = Curl_parse_login_details(login, ptr - login - 1,
                                   &userp, &passwdp,
                                   (h && (h->flags & PROTOPT_URLOPTIONS)) ?
                                   &optionsp:NULL);







<








>


















>
>
>
>







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
 * parse_hostname_login()
 *
 * Parse the login details (user name, password and options) from the URL and
 * strip them out of the host name
 *
 */
static CURLUcode parse_hostname_login(struct Curl_URL *u,

                                      char **hostname,
                                      unsigned int flags)
{
  CURLUcode result = CURLUE_OK;
  CURLcode ccode;
  char *userp = NULL;
  char *passwdp = NULL;
  char *optionsp = NULL;
  const struct Curl_handler *h = NULL;

  /* At this point, we're hoping all the other special cases have
   * been taken care of, so conn->host.name is at most
   *    [user[:password][;options]]@]hostname
   *
   * We need somewhere to put the embedded details, so do that first.
   */

  char *ptr = strchr(*hostname, '@');
  char *login = *hostname;

  if(!ptr)
    goto out;

  /* We will now try to extract the
   * possible login information in a string like:
   * ftp://user:password@ftp.my.site:8021/README */
  *hostname = ++ptr;

  /* if this is a known scheme, get some details */
  if(u->scheme)
    h = Curl_builtin_scheme(u->scheme);

  /* We could use the login information in the URL so extract it. Only parse
     options if the handler says we should. Note that 'h' might be NULL! */
  ccode = Curl_parse_login_details(login, ptr - login - 1,
                                   &userp, &passwdp,
                                   (h && (h->flags & PROTOPT_URLOPTIONS)) ?
                                   &optionsp:NULL);
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
      return CURLUE_OUT_OF_MEMORY;
  }

  return CURLUE_OK;
}

/* scan for byte values < 31 or 127 */
static CURLUcode junkscan(char *part)
{
  if(part) {
    static const char badbytes[]={
      /* */ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
      0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
      0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
      0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,







|







571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
      return CURLUE_OUT_OF_MEMORY;
  }

  return CURLUE_OK;
}

/* scan for byte values < 31 or 127 */
static CURLUcode junkscan(const char *part)
{
  if(part) {
    static const char badbytes[]={
      /* */ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
      0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
      0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
      0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
  bool path_alloced = FALSE;
  char *hostname;
  char *query = NULL;
  char *fragment = NULL;
  CURLUcode result;
  bool url_has_scheme = FALSE;
  char schemebuf[MAX_SCHEME_LEN + 1];
  char *schemep = NULL;
  size_t schemelen = 0;
  size_t urllen;
  const struct Curl_handler *h = NULL;

  if(!url)
    return CURLUE_MALFORMED_INPUT;

  /*************************************************************
   * Parse the URL.
   ************************************************************/







|


<







668
669
670
671
672
673
674
675
676
677

678
679
680
681
682
683
684
  bool path_alloced = FALSE;
  char *hostname;
  char *query = NULL;
  char *fragment = NULL;
  CURLUcode result;
  bool url_has_scheme = FALSE;
  char schemebuf[MAX_SCHEME_LEN + 1];
  const char *schemep = NULL;
  size_t schemelen = 0;
  size_t urllen;


  if(!url)
    return CURLUE_MALFORMED_INPUT;

  /*************************************************************
   * Parse the URL.
   ************************************************************/
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
    }
    else {
      /* no scheme! */

      if(!(flags & (CURLU_DEFAULT_SCHEME|CURLU_GUESS_SCHEME)))
        return CURLUE_MALFORMED_INPUT;
      if(flags & CURLU_DEFAULT_SCHEME)
        schemep = (char *) DEFAULT_SCHEME;

      /*
       * The URL was badly formatted, let's try without scheme specified.
       */
      p = url;
    }
    hostp = p; /* host name starts here */







|







797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
    }
    else {
      /* no scheme! */

      if(!(flags & (CURLU_DEFAULT_SCHEME|CURLU_GUESS_SCHEME)))
        return CURLUE_MALFORMED_INPUT;
      if(flags & CURLU_DEFAULT_SCHEME)
        schemep = DEFAULT_SCHEME;

      /*
       * The URL was badly formatted, let's try without scheme specified.
       */
      p = url;
    }
    hostp = p; /* host name starts here */
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
      hostname[len] = 0;
    }
    else {
      if(!(flags & CURLU_NO_AUTHORITY))
        return CURLUE_MALFORMED_INPUT;
    }

    if((flags & CURLU_GUESS_SCHEME) && !schemep) {
      /* legacy curl-style guess based on host name */
      if(checkprefix("ftp.", hostname))
        schemep = (char *)"ftp";
      else if(checkprefix("dict.", hostname))
        schemep = (char *)"dict";
      else if(checkprefix("ldap.", hostname))
        schemep = (char *)"ldap";
      else if(checkprefix("imap.", hostname))
        schemep = (char *)"imap";
      else if(checkprefix("smtp.", hostname))
        schemep = (char *)"smtp";
      else if(checkprefix("pop3.", hostname))
        schemep = (char *)"pop3";
      else
        schemep = (char *)"http";
    }

    len = strlen(p);
    memcpy(path, p, len);
    path[len] = 0;


    u->scheme = strdup(schemep);
    if(!u->scheme)
      return CURLUE_OUT_OF_MEMORY;
  }

  /* if this is a known scheme, get some details */
  h = Curl_builtin_scheme(u->scheme);

  if(junkscan(path))
    return CURLUE_MALFORMED_INPUT;

  if((flags & CURLU_URLENCODE) && path[0]) {
    /* worst case output length is 3x the original! */
    char *newp = malloc(strlen(path) * 3);
    if(!newp)







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<




>
|
|
|
|
|
<
<








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
      hostname[len] = 0;
    }
    else {
      if(!(flags & CURLU_NO_AUTHORITY))
        return CURLUE_MALFORMED_INPUT;
    }



















    len = strlen(p);
    memcpy(path, p, len);
    path[len] = 0;

    if(schemep) {
      u->scheme = strdup(schemep);
      if(!u->scheme)
        return CURLUE_OUT_OF_MEMORY;
    }
  }



  if(junkscan(path))
    return CURLUE_MALFORMED_INPUT;

  if((flags & CURLU_URLENCODE) && path[0]) {
    /* worst case output length is 3x the original! */
    char *newp = malloc(strlen(path) * 3);
    if(!newp)
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
  if(hostname) {
    /*
     * Parse the login details and strip them out of the host name.
     */
    if(junkscan(hostname))
      return CURLUE_MALFORMED_INPUT;

    result = parse_hostname_login(u, h, &hostname, flags);
    if(result)
      return result;

    result = Curl_parse_port(u, hostname);
    if(result)
      return result;

    if(0 == strlen(hostname) && (flags & CURLU_NO_AUTHORITY)) {
      /* Skip hostname check, it's allowed to be empty. */
    }
    else {
      result = hostname_check(u, hostname);
      if(result)
        return result;
    }

    u->host = strdup(hostname);
    if(!u->host)
      return CURLUE_OUT_OF_MEMORY;






















  }

  Curl_safefree(u->scratch);
  Curl_safefree(u->temppath);

  return CURLUE_OK;
}







|



















>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
  if(hostname) {
    /*
     * Parse the login details and strip them out of the host name.
     */
    if(junkscan(hostname))
      return CURLUE_MALFORMED_INPUT;

    result = parse_hostname_login(u, &hostname, flags);
    if(result)
      return result;

    result = Curl_parse_port(u, hostname);
    if(result)
      return result;

    if(0 == strlen(hostname) && (flags & CURLU_NO_AUTHORITY)) {
      /* Skip hostname check, it's allowed to be empty. */
    }
    else {
      result = hostname_check(u, hostname);
      if(result)
        return result;
    }

    u->host = strdup(hostname);
    if(!u->host)
      return CURLUE_OUT_OF_MEMORY;

    if((flags & CURLU_GUESS_SCHEME) && !schemep) {
      /* legacy curl-style guess based on host name */
      if(checkprefix("ftp.", hostname))
        schemep = "ftp";
      else if(checkprefix("dict.", hostname))
        schemep = "dict";
      else if(checkprefix("ldap.", hostname))
        schemep = "ldap";
      else if(checkprefix("imap.", hostname))
        schemep = "imap";
      else if(checkprefix("smtp.", hostname))
        schemep = "smtp";
      else if(checkprefix("pop3.", hostname))
        schemep = "pop3";
      else
        schemep = "http";

      u->scheme = strdup(schemep);
      if(!u->scheme)
        return CURLUE_OUT_OF_MEMORY;
    }
  }

  Curl_safefree(u->scratch);
  Curl_safefree(u->temppath);

  return CURLUE_OK;
}
Changes to jni/curl/lib/urldata.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_URLDATA_H
#define HEADER_CURL_URLDATA_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_URLDATA_H
#define HEADER_CURL_URLDATA_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
363
364
365
366
367
368
369








370
371
372
373
374
375
376
  size_t input_token_len;
  TCHAR *spn;
#else
  unsigned int flags;
  unsigned char nonce[8];
  void *target_info; /* TargetInfo received in the ntlm type-2 message */
  unsigned int target_info_len;








#endif
};
#endif

/* Struct used for Negotiate (SPNEGO) authentication */
#ifdef USE_SPNEGO
struct negotiatedata {







>
>
>
>
>
>
>
>







363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
  size_t input_token_len;
  TCHAR *spn;
#else
  unsigned int flags;
  unsigned char nonce[8];
  void *target_info; /* TargetInfo received in the ntlm type-2 message */
  unsigned int target_info_len;

#if defined(NTLM_WB_ENABLED)
  /* used for communication with Samba's winbind daemon helper ntlm_auth */
  curl_socket_t ntlm_auth_hlpr_socket;
  pid_t ntlm_auth_hlpr_pid;
  char *challenge; /* The received base64 encoded ntlm type-2 message */
  char *response;  /* The generated base64 ntlm type-1/type-3 message */
#endif
#endif
};
#endif

/* Struct used for Negotiate (SPNEGO) authentication */
#ifdef USE_SPNEGO
struct negotiatedata {
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
  BIT(bound); /* set true if bind() has already been done on this socket/
                 connection */
  BIT(type_set);  /* type= was used in the URL */
  BIT(multiplex); /* connection is multiplexed */
  BIT(tcp_fastopen); /* use TCP Fast Open */
  BIT(tls_enable_npn);  /* TLS NPN extension? */
  BIT(tls_enable_alpn); /* TLS ALPN extension? */
  BIT(socksproxy_connecting); /* connecting through a socks proxy */
  BIT(connect_only);
};

struct hostname {
  char *rawalloc; /* allocated "raw" version of the name */
  char *encalloc; /* allocated IDN-encoded version of the name */
  char *name;     /* name to use internally, might be encoded, might be raw */







<







472
473
474
475
476
477
478

479
480
481
482
483
484
485
  BIT(bound); /* set true if bind() has already been done on this socket/
                 connection */
  BIT(type_set);  /* type= was used in the URL */
  BIT(multiplex); /* connection is multiplexed */
  BIT(tcp_fastopen); /* use TCP Fast Open */
  BIT(tls_enable_npn);  /* TLS NPN extension? */
  BIT(tls_enable_alpn); /* TLS ALPN extension? */

  BIT(connect_only);
};

struct hostname {
  char *rawalloc; /* allocated "raw" version of the name */
  char *encalloc; /* allocated IDN-encoded version of the name */
  char *name;     /* name to use internally, might be encoded, might be raw */
805
806
807
808
809
810
811



































812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
  } tunnel_state;
  BIT(chunked_encoding);
  BIT(close_connection);
};

struct ldapconninfo;




































/*
 * The connectdata struct contains all fields and variables that should be
 * unique for an entire connection.
 */
struct connectdata {
  /* 'data' is the CURRENT Curl_easy using this connection -- take great
     caution that this might very well vary between different times this
     connection is used! */
  struct Curl_easy *data;

  struct curl_llist_element bundle_node; /* conncache */

  /* chunk is for HTTP chunked encoding, but is in the general connectdata
     struct only because we can do just about any protocol through a HTTP proxy
     and a HTTP proxy may in fact respond using chunked encoding */
  struct Curl_chunker chunk;








>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>









|







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
  } tunnel_state;
  BIT(chunked_encoding);
  BIT(close_connection);
};

struct ldapconninfo;

/* for the (SOCKS) connect state machine */
enum connect_t {
  CONNECT_INIT,
  CONNECT_SOCKS_INIT, /* 1 */
  CONNECT_SOCKS_SEND, /* 2 waiting to send more first data */
  CONNECT_SOCKS_READ_INIT, /* 3 set up read */
  CONNECT_SOCKS_READ, /* 4 read server response */
  CONNECT_GSSAPI_INIT, /* 5 */
  CONNECT_AUTH_INIT, /* 6 setup outgoing auth buffer */
  CONNECT_AUTH_SEND, /* 7 send auth */
  CONNECT_AUTH_READ, /* 8 read auth response */
  CONNECT_REQ_INIT,  /* 9 init SOCKS "request" */
  CONNECT_RESOLVING, /* 10 */
  CONNECT_RESOLVED,  /* 11 */
  CONNECT_RESOLVE_REMOTE, /* 12 */
  CONNECT_REQ_SEND,  /* 13 */
  CONNECT_REQ_SENDING, /* 14 */
  CONNECT_REQ_READ,  /* 15 */
  CONNECT_REQ_READ_MORE, /* 16 */
  CONNECT_DONE /* 17 connected fine to the remote or the SOCKS proxy */
};

#define SOCKS_STATE(x) (((x) >= CONNECT_SOCKS_INIT) &&  \
                        ((x) < CONNECT_DONE))
#define SOCKS_REQUEST_BUFSIZE 600  /* room for large user/pw (255 max each) */

struct connstate {
  enum connect_t state;
  unsigned char socksreq[SOCKS_REQUEST_BUFSIZE];

  /* CONNECT_SOCKS_SEND */
  ssize_t outstanding;  /* send this many bytes more */
  unsigned char *outp; /* send from this pointer */
};

/*
 * The connectdata struct contains all fields and variables that should be
 * unique for an entire connection.
 */
struct connectdata {
  /* 'data' is the CURRENT Curl_easy using this connection -- take great
     caution that this might very well vary between different times this
     connection is used! */
  struct Curl_easy *data;
  struct connstate cnnct;
  struct curl_llist_element bundle_node; /* conncache */

  /* chunk is for HTTP chunked encoding, but is in the general connectdata
     struct only because we can do just about any protocol through a HTTP proxy
     and a HTTP proxy may in fact respond using chunked encoding */
  struct Curl_chunker chunk;

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
  char local_ip[MAX_IPADR_LEN];
  long local_port;

  char *user;    /* user name string, allocated */
  char *passwd;  /* password string, allocated */
  char *options; /* options string, allocated */

  char *oauth_bearer;     /* bearer token for OAuth 2.0, allocated */
  char *sasl_authzid;     /* authorisation identity string, allocated */

  int httpversion;        /* the HTTP version*10 reported by the server */
  int rtspversion;        /* the RTSP version*10 reported by the server */

  struct curltime now;     /* "current" time */
  struct curltime created; /* creation time */
  struct curltime lastused; /* when returned to the connection cache */
  curl_socket_t sock[2]; /* two sockets, the second is used for the data
                            transfer when doing FTP */
  curl_socket_t tempsock[2]; /* temporary sockets for happy eyeballs */
  bool sock_accepted[2]; /* TRUE if the socket on this index was created with
                            accept() */
  Curl_recv *recv[2];
  Curl_send *send[2];

#ifdef USE_RECV_BEFORE_SEND_WORKAROUND
  struct postponed_data postponed[2]; /* two buffers for two sockets */
#endif /* USE_RECV_BEFORE_SEND_WORKAROUND */
  struct ssl_connect_data ssl[2]; /* this is for ssl-stuff */







<











<
<







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
  char local_ip[MAX_IPADR_LEN];
  long local_port;

  char *user;    /* user name string, allocated */
  char *passwd;  /* password string, allocated */
  char *options; /* options string, allocated */


  char *sasl_authzid;     /* authorisation identity string, allocated */

  int httpversion;        /* the HTTP version*10 reported by the server */
  int rtspversion;        /* the RTSP version*10 reported by the server */

  struct curltime now;     /* "current" time */
  struct curltime created; /* creation time */
  struct curltime lastused; /* when returned to the connection cache */
  curl_socket_t sock[2]; /* two sockets, the second is used for the data
                            transfer when doing FTP */
  curl_socket_t tempsock[2]; /* temporary sockets for happy eyeballs */


  Curl_recv *recv[2];
  Curl_send *send[2];

#ifdef USE_RECV_BEFORE_SEND_WORKAROUND
  struct postponed_data postponed[2]; /* two buffers for two sockets */
#endif /* USE_RECV_BEFORE_SEND_WORKAROUND */
  struct ssl_connect_data ssl[2]; /* this is for ssl-stuff */
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
  curlntlm http_ntlm_state;
  curlntlm proxy_ntlm_state;

  struct ntlmdata ntlm;     /* NTLM differs from other authentication schemes
                               because it authenticates connections, not
                               single requests! */
  struct ntlmdata proxyntlm; /* NTLM data for proxy */

#if defined(NTLM_WB_ENABLED)
  /* used for communication with Samba's winbind daemon helper ntlm_auth */
  curl_socket_t ntlm_auth_hlpr_socket;
  pid_t ntlm_auth_hlpr_pid;
  char *challenge_header;
  char *response_header;
#endif
#endif

#ifdef USE_SPNEGO
  curlnegotiate http_negotiate_state;
  curlnegotiate proxy_negotiate_state;

  struct negotiatedata negotiate; /* state data for host Negotiate auth */







<
<
<
<
<
<
<
<







1046
1047
1048
1049
1050
1051
1052








1053
1054
1055
1056
1057
1058
1059
  curlntlm http_ntlm_state;
  curlntlm proxy_ntlm_state;

  struct ntlmdata ntlm;     /* NTLM differs from other authentication schemes
                               because it authenticates connections, not
                               single requests! */
  struct ntlmdata proxyntlm; /* NTLM data for proxy */








#endif

#ifdef USE_SPNEGO
  curlnegotiate http_negotiate_state;
  curlnegotiate proxy_negotiate_state;

  struct negotiatedata negotiate; /* state data for host Negotiate auth */
1078
1079
1080
1081
1082
1083
1084


1085
1086
1087
1088
1089
1090
1091
  /* the two following *_inuse fields are only flags, not counters in any way.
     If TRUE it means the channel is in use, and if FALSE it means the channel
     is up for grabs by one. */
  BIT(readchannel_inuse);  /* whether the read channel is in use by an easy
                              handle */
  BIT(writechannel_inuse); /* whether the write channel is in use by an easy
                              handle */


};

/* The end of connectdata. */

/*
 * Struct to keep statistical and informational data.
 * All variables in this struct must be initialized/reset in Curl_initinfo().







>
>







1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
  /* the two following *_inuse fields are only flags, not counters in any way.
     If TRUE it means the channel is in use, and if FALSE it means the channel
     is up for grabs by one. */
  BIT(readchannel_inuse);  /* whether the read channel is in use by an easy
                              handle */
  BIT(writechannel_inuse); /* whether the write channel is in use by an easy
                              handle */
  BIT(sock_accepted); /* TRUE if the SECONDARYSOCKET was created with
                         accept() */
};

/* The end of connectdata. */

/*
 * Struct to keep statistical and informational data.
 * All variables in this struct must be initialized/reset in Curl_initinfo().
1405
1406
1407
1408
1409
1410
1411


1412
1413
1414
1415
1416
1417
1418
  BIT(allow_port); /* Is set.use_port allowed to take effect or not. This
                      is always set TRUE when curl_easy_perform() is called. */
  BIT(authproblem); /* TRUE if there's some problem authenticating */
  /* set after initial USER failure, to prevent an authentication loop */
  BIT(ftp_trying_alternative);
  BIT(wildcardmatch); /* enable wildcard matching */
  BIT(expect100header);  /* TRUE if we added Expect: 100-continue */


  BIT(use_range);
  BIT(rangestringalloc); /* the range string is malloc()'ed */
  BIT(done); /* set to FALSE when Curl_init_do() is called and set to TRUE
                  when multi_done() is called, to prevent multi_done() to get
                  invoked twice when the multi interface is used. */
  BIT(stream_depends_e); /* set or don't set the Exclusive bit */
  BIT(previouslypending); /* this transfer WAS in the multi->pending queue */







>
>







1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
  BIT(allow_port); /* Is set.use_port allowed to take effect or not. This
                      is always set TRUE when curl_easy_perform() is called. */
  BIT(authproblem); /* TRUE if there's some problem authenticating */
  /* set after initial USER failure, to prevent an authentication loop */
  BIT(ftp_trying_alternative);
  BIT(wildcardmatch); /* enable wildcard matching */
  BIT(expect100header);  /* TRUE if we added Expect: 100-continue */
  BIT(disableexpect);    /* TRUE if Expect: is disabled due to a previous
                            417 response */
  BIT(use_range);
  BIT(rangestringalloc); /* the range string is malloc()'ed */
  BIT(done); /* set to FALSE when Curl_init_do() is called and set to TRUE
                  when multi_done() is called, to prevent multi_done() to get
                  invoked twice when the multi interface is used. */
  BIT(stream_depends_e); /* set or don't set the Exclusive bit */
  BIT(previouslypending); /* this transfer WAS in the multi->pending queue */
1447
1448
1449
1450
1451
1452
1453








1454
1455
1456
1457
1458
1459
1460
 * 'struct UrlState' instead. The only exceptions MUST note the changes in
 * the 'DynamicStatic' struct.
 * Character pointer fields point to dynamic storage, unless otherwise stated.
 */

struct Curl_multi;    /* declared and used only in multi.c */









enum dupstring {
  STRING_CERT_ORIG,       /* client certificate file name */
  STRING_CERT_PROXY,      /* client certificate file name */
  STRING_CERT_TYPE_ORIG,  /* format for certificate (default: PEM)*/
  STRING_CERT_TYPE_PROXY, /* format for certificate (default: PEM)*/
  STRING_COOKIE,          /* HTTP cookie string to send */
  STRING_COOKIEJAR,       /* dump all cookies to this file */







>
>
>
>
>
>
>
>







1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
 * 'struct UrlState' instead. The only exceptions MUST note the changes in
 * the 'DynamicStatic' struct.
 * Character pointer fields point to dynamic storage, unless otherwise stated.
 */

struct Curl_multi;    /* declared and used only in multi.c */

/*
 * This enumeration MUST not use conditional directives (#ifdefs), new
 * null terminated strings MUST be added to the enumeration immediately
 * before STRING_LASTZEROTERMINATED, binary fields immediately before
 * STRING_LAST. When doing so, ensure that the packages/OS400/chkstring.c
 * test is updated and applicable changes for EBCDIC to ASCII conversion
 * are catered for in curl_easy_setopt_ccsid()
 */
enum dupstring {
  STRING_CERT_ORIG,       /* client certificate file name */
  STRING_CERT_PROXY,      /* client certificate file name */
  STRING_CERT_TYPE_ORIG,  /* format for certificate (default: PEM)*/
  STRING_CERT_TYPE_PROXY, /* format for certificate (default: PEM)*/
  STRING_COOKIE,          /* HTTP cookie string to send */
  STRING_COOKIEJAR,       /* dump all cookies to this file */
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
  STRING_PROXYUSERNAME,   /* Proxy <username>, if used */
  STRING_PROXYPASSWORD,   /* Proxy <password>, if used */
  STRING_NOPROXY,         /* List of hosts which should not use the proxy, if
                             used */
  STRING_RTSP_SESSION_ID, /* Session ID to use */
  STRING_RTSP_STREAM_URI, /* Stream URI for this request */
  STRING_RTSP_TRANSPORT,  /* Transport for this session */
#ifdef USE_SSH
  STRING_SSH_PRIVATE_KEY, /* path to the private key file for auth */
  STRING_SSH_PUBLIC_KEY,  /* path to the public key file for auth */
  STRING_SSH_HOST_PUBLIC_KEY_MD5, /* md5 of host public key in ascii hex */
  STRING_SSH_KNOWNHOSTS,  /* file name of knownhosts file */
#endif
  STRING_PROXY_SERVICE_NAME, /* Proxy service name */
  STRING_SERVICE_NAME,    /* Service name */
  STRING_MAIL_FROM,
  STRING_MAIL_AUTH,

#ifdef USE_TLS_SRP
  STRING_TLSAUTH_USERNAME_ORIG,  /* TLS auth <username> */
  STRING_TLSAUTH_USERNAME_PROXY, /* TLS auth <username> */
  STRING_TLSAUTH_PASSWORD_ORIG,  /* TLS auth <password> */
  STRING_TLSAUTH_PASSWORD_PROXY, /* TLS auth <password> */
#endif
  STRING_BEARER,                /* <bearer>, if used */
#ifdef USE_UNIX_SOCKETS
  STRING_UNIX_SOCKET_PATH,      /* path to Unix socket, if used */
#endif
  STRING_TARGET,                /* CURLOPT_REQUEST_TARGET */
  STRING_DOH,                   /* CURLOPT_DOH_URL */
#ifdef USE_ALTSVC
  STRING_ALTSVC,                /* CURLOPT_ALTSVC */
#endif
  STRING_SASL_AUTHZID,          /* CURLOPT_SASL_AUTHZID */
#ifndef CURL_DISABLE_PROXY
  STRING_TEMP_URL,              /* temp URL storage for proxy use */
#endif
  /* -- end of zero-terminated strings -- */

  STRING_LASTZEROTERMINATED,

  /* -- below this are pointers to binary data that cannot be strdup'ed. --- */

  STRING_COPYPOSTFIELDS,  /* if POST, set the fields' values here */







|




|





<




|

|

|


|

|

|

|







1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563

1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
  STRING_PROXYUSERNAME,   /* Proxy <username>, if used */
  STRING_PROXYPASSWORD,   /* Proxy <password>, if used */
  STRING_NOPROXY,         /* List of hosts which should not use the proxy, if
                             used */
  STRING_RTSP_SESSION_ID, /* Session ID to use */
  STRING_RTSP_STREAM_URI, /* Stream URI for this request */
  STRING_RTSP_TRANSPORT,  /* Transport for this session */

  STRING_SSH_PRIVATE_KEY, /* path to the private key file for auth */
  STRING_SSH_PUBLIC_KEY,  /* path to the public key file for auth */
  STRING_SSH_HOST_PUBLIC_KEY_MD5, /* md5 of host public key in ascii hex */
  STRING_SSH_KNOWNHOSTS,  /* file name of knownhosts file */

  STRING_PROXY_SERVICE_NAME, /* Proxy service name */
  STRING_SERVICE_NAME,    /* Service name */
  STRING_MAIL_FROM,
  STRING_MAIL_AUTH,


  STRING_TLSAUTH_USERNAME_ORIG,  /* TLS auth <username> */
  STRING_TLSAUTH_USERNAME_PROXY, /* TLS auth <username> */
  STRING_TLSAUTH_PASSWORD_ORIG,  /* TLS auth <password> */
  STRING_TLSAUTH_PASSWORD_PROXY, /* TLS auth <password> */

  STRING_BEARER,                /* <bearer>, if used */

  STRING_UNIX_SOCKET_PATH,      /* path to Unix socket, if used */

  STRING_TARGET,                /* CURLOPT_REQUEST_TARGET */
  STRING_DOH,                   /* CURLOPT_DOH_URL */

  STRING_ALTSVC,                /* CURLOPT_ALTSVC */

  STRING_SASL_AUTHZID,          /* CURLOPT_SASL_AUTHZID */

  STRING_TEMP_URL,              /* temp URL storage for proxy use */

  /* -- end of zero-terminated strings -- */

  STRING_LASTZEROTERMINATED,

  /* -- below this are pointers to binary data that cannot be strdup'ed. --- */

  STRING_COPYPOSTFIELDS,  /* if POST, set the fields' values here */
1788
1789
1790
1791
1792
1793
1794


1795
1796
1797
1798
1799
1800
1801
  BIT(haproxyprotocol); /* whether to send HAProxy PROXY protocol v1
                           header */
  BIT(abstract_unix_socket);
  BIT(disallow_username_in_url); /* disallow username in url */
  BIT(doh); /* DNS-over-HTTPS enabled */
  BIT(doh_get); /* use GET for DoH requests, instead of POST */
  BIT(http09_allowed); /* allow HTTP/0.9 responses */


};

struct Names {
  struct curl_hash *hostcache;
  enum {
    HCACHE_NONE,    /* not pointing to anything */
    HCACHE_MULTI,   /* points to a shared one in the multi handle */







>
>







1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
  BIT(haproxyprotocol); /* whether to send HAProxy PROXY protocol v1
                           header */
  BIT(abstract_unix_socket);
  BIT(disallow_username_in_url); /* disallow username in url */
  BIT(doh); /* DNS-over-HTTPS enabled */
  BIT(doh_get); /* use GET for DoH requests, instead of POST */
  BIT(http09_allowed); /* allow HTTP/0.9 responses */
  BIT(mail_rcpt_allowfails); /* allow RCPT TO command to fail for some
                                recipients */
};

struct Names {
  struct curl_hash *hostcache;
  enum {
    HCACHE_NONE,    /* not pointing to anything */
    HCACHE_MULTI,   /* points to a shared one in the multi handle */
Changes to jni/curl/lib/vauth/digest.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#define DIGEST_QOP_VALUE_STRING_AUTH_CONF "auth-conf"

/* The CURL_OUTPUT_DIGEST_CONV macro below is for non-ASCII machines.
   It converts digest text to ASCII so the MD5 will be correct for
   what ultimately goes over the network.
*/
#define CURL_OUTPUT_DIGEST_CONV(a, b) \
  result = Curl_convert_to_network(a, (char *)b, strlen((const char *)b)); \
  if(result) { \
    free(b); \
    return result; \
  }
#endif /* !USE_WINDOWS_SSPI */

bool Curl_auth_digest_get_pair(const char *str, char *value, char *content,







|







58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#define DIGEST_QOP_VALUE_STRING_AUTH_CONF "auth-conf"

/* The CURL_OUTPUT_DIGEST_CONV macro below is for non-ASCII machines.
   It converts digest text to ASCII so the MD5 will be correct for
   what ultimately goes over the network.
*/
#define CURL_OUTPUT_DIGEST_CONV(a, b) \
  result = Curl_convert_to_network(a, b, strlen(b)); \
  if(result) { \
    free(b); \
    return result; \
  }
#endif /* !USE_WINDOWS_SSPI */

bool Curl_auth_digest_get_pair(const char *str, char *value, char *content,
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
  if(!digest->nonce)
    return CURLE_BAD_CONTENT_ENCODING;

  return CURLE_OK;
}

/*
 * _Curl_auth_create_digest_http_message()
 *
 * This is used to generate a HTTP DIGEST response message ready for sending
 * to the recipient.
 *
 * Parameters:
 *
 * data    [in]     - The session handle.
 * userp   [in]     - The user name.
 * passwdp [in]     - The user's password.
 * request [in]     - The HTTP request.
 * uripath [in]     - The path of the HTTP uri.
 * digest  [in/out] - The digest data struct being used and modified.
 * outptr  [in/out] - The address where a pointer to newly allocated memory
 *                    holding the result will be stored upon completion.
 * outlen  [out]    - The length of the output message.
 *
 * Returns CURLE_OK on success.
 */
static CURLcode _Curl_auth_create_digest_http_message(
                  struct Curl_easy *data,
                  const char *userp,
                  const char *passwdp,
                  const unsigned char *request,
                  const unsigned char *uripath,
                  struct digestdata *digest,
                  char **outptr, size_t *outlen,
                  void (*convert_to_ascii)(unsigned char *, unsigned char *),
                  void (*hash)(unsigned char *, const unsigned char *))

{
  CURLcode result;
  unsigned char hashbuf[32]; /* 32 bytes/256 bits */
  unsigned char request_digest[65];
  unsigned char *hashthis;
  unsigned char ha1[65];    /* 64 digits and 1 zero byte */
  unsigned char ha2[65];    /* 64 digits and 1 zero byte */
  char userh[65];
  char *cnonce = NULL;
  size_t cnonce_sz = 0;
  char *userp_quoted;
  char *response = NULL;

  char *tmp = NULL;

  if(!digest->nc)
    digest->nc = 1;

  if(!digest->cnonce) {
    char cnoncebuf[33];







|


















|








|
>




<







>







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
  if(!digest->nonce)
    return CURLE_BAD_CONTENT_ENCODING;

  return CURLE_OK;
}

/*
 * auth_create_digest_http_message()
 *
 * This is used to generate a HTTP DIGEST response message ready for sending
 * to the recipient.
 *
 * Parameters:
 *
 * data    [in]     - The session handle.
 * userp   [in]     - The user name.
 * passwdp [in]     - The user's password.
 * request [in]     - The HTTP request.
 * uripath [in]     - The path of the HTTP uri.
 * digest  [in/out] - The digest data struct being used and modified.
 * outptr  [in/out] - The address where a pointer to newly allocated memory
 *                    holding the result will be stored upon completion.
 * outlen  [out]    - The length of the output message.
 *
 * Returns CURLE_OK on success.
 */
static CURLcode auth_create_digest_http_message(
                  struct Curl_easy *data,
                  const char *userp,
                  const char *passwdp,
                  const unsigned char *request,
                  const unsigned char *uripath,
                  struct digestdata *digest,
                  char **outptr, size_t *outlen,
                  void (*convert_to_ascii)(unsigned char *, unsigned char *),
                  void (*hash)(unsigned char *, const unsigned char *,
                               const size_t))
{
  CURLcode result;
  unsigned char hashbuf[32]; /* 32 bytes/256 bits */
  unsigned char request_digest[65];

  unsigned char ha1[65];    /* 64 digits and 1 zero byte */
  unsigned char ha2[65];    /* 64 digits and 1 zero byte */
  char userh[65];
  char *cnonce = NULL;
  size_t cnonce_sz = 0;
  char *userp_quoted;
  char *response = NULL;
  char *hashthis = NULL;
  char *tmp = NULL;

  if(!digest->nc)
    digest->nc = 1;

  if(!digest->cnonce) {
    char cnoncebuf[33];
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
    if(result)
      return result;

    digest->cnonce = cnonce;
  }

  if(digest->userhash) {
    hashthis = (unsigned char *) aprintf("%s:%s", userp, digest->realm);
    if(!hashthis)
      return CURLE_OUT_OF_MEMORY;

    CURL_OUTPUT_DIGEST_CONV(data, hashthis);
    hash(hashbuf, hashthis);
    free(hashthis);
    convert_to_ascii(hashbuf, (unsigned char *)userh);
  }

  /*
    If the algorithm is "MD5" or unspecified (which then defaults to MD5):

      A1 = unq(username-value) ":" unq(realm-value) ":" passwd

    If the algorithm is "MD5-sess" then:

      A1 = H(unq(username-value) ":" unq(realm-value) ":" passwd) ":"
           unq(nonce-value) ":" unq(cnonce-value)
  */

  hashthis = (unsigned char *)
    aprintf("%s:%s:%s", digest->userhash ? userh : userp,
                                    digest->realm, passwdp);
  if(!hashthis)
    return CURLE_OUT_OF_MEMORY;

  CURL_OUTPUT_DIGEST_CONV(data, hashthis); /* convert on non-ASCII machines */
  hash(hashbuf, hashthis);
  free(hashthis);
  convert_to_ascii(hashbuf, ha1);

  if(digest->algo == CURLDIGESTALGO_MD5SESS ||
     digest->algo == CURLDIGESTALGO_SHA256SESS ||
     digest->algo == CURLDIGESTALGO_SHA512_256SESS) {
    /* nonce and cnonce are OUTSIDE the hash */
    tmp = aprintf("%s:%s:%s", ha1, digest->nonce, digest->cnonce);
    if(!tmp)
      return CURLE_OUT_OF_MEMORY;

    CURL_OUTPUT_DIGEST_CONV(data, tmp); /* Convert on non-ASCII machines */
    hash(hashbuf, (unsigned char *) tmp);
    free(tmp);
    convert_to_ascii(hashbuf, ha1);
  }

  /*
    If the "qop" directive's value is "auth" or is unspecified, then A2 is:

      A2 = Method ":" digest-uri-value

    If the "qop" value is "auth-int", then A2 is:

      A2 = Method ":" digest-uri-value ":" H(entity-body)

    (The "Method" value is the HTTP request method as specified in section
    5.1.1 of RFC 2616)
  */

  hashthis = (unsigned char *) aprintf("%s:%s", request, uripath);
  if(!hashthis)
    return CURLE_OUT_OF_MEMORY;

  if(digest->qop && strcasecompare(digest->qop, "auth-int")) {
    /* We don't support auth-int for PUT or POST */
    char hashed[65];
    unsigned char *hashthis2;

    hash(hashbuf, (const unsigned char *)"");
    convert_to_ascii(hashbuf, (unsigned char *)hashed);

    hashthis2 = (unsigned char *)aprintf("%s:%s", hashthis, hashed);
    free(hashthis);
    hashthis = hashthis2;
  }

  if(!hashthis)
    return CURLE_OUT_OF_MEMORY;

  CURL_OUTPUT_DIGEST_CONV(data, hashthis); /* convert on non-ASCII machines */
  hash(hashbuf, hashthis);
  free(hashthis);
  convert_to_ascii(hashbuf, ha2);

  if(digest->qop) {
    hashthis = (unsigned char *) aprintf("%s:%s:%08x:%s:%s:%s",
                                        ha1,
                                        digest->nonce,
                                        digest->nc,
                                        digest->cnonce,
                                        digest->qop,
                                        ha2);
  }
  else {
    hashthis = (unsigned char *) aprintf("%s:%s:%s",
                                        ha1,
                                        digest->nonce,
                                        ha2);
  }

  if(!hashthis)
    return CURLE_OUT_OF_MEMORY;

  CURL_OUTPUT_DIGEST_CONV(data, hashthis); /* convert on non-ASCII machines */
  hash(hashbuf, hashthis);
  free(hashthis);
  convert_to_ascii(hashbuf, request_digest);

  /* For test case 64 (snooped from a Mozilla 1.3a request)

     Authorization: Digest username="testuser", realm="testrealm", \
     nonce="1053604145", uri="/64", response="c55f7f30d83d774a3d2dcacf725abaca"







|




|















<
|
|




|












|

















|






|

|


|








|




|
<
<
<
|
<
<


<
<
|
<






|







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
    if(result)
      return result;

    digest->cnonce = cnonce;
  }

  if(digest->userhash) {
    hashthis = aprintf("%s:%s", userp, digest->realm);
    if(!hashthis)
      return CURLE_OUT_OF_MEMORY;

    CURL_OUTPUT_DIGEST_CONV(data, hashthis);
    hash(hashbuf, (unsigned char *) hashthis, strlen(hashthis));
    free(hashthis);
    convert_to_ascii(hashbuf, (unsigned char *)userh);
  }

  /*
    If the algorithm is "MD5" or unspecified (which then defaults to MD5):

      A1 = unq(username-value) ":" unq(realm-value) ":" passwd

    If the algorithm is "MD5-sess" then:

      A1 = H(unq(username-value) ":" unq(realm-value) ":" passwd) ":"
           unq(nonce-value) ":" unq(cnonce-value)
  */


  hashthis = aprintf("%s:%s:%s", digest->userhash ? userh : userp,
                                 digest->realm, passwdp);
  if(!hashthis)
    return CURLE_OUT_OF_MEMORY;

  CURL_OUTPUT_DIGEST_CONV(data, hashthis); /* convert on non-ASCII machines */
  hash(hashbuf, (unsigned char *) hashthis, strlen(hashthis));
  free(hashthis);
  convert_to_ascii(hashbuf, ha1);

  if(digest->algo == CURLDIGESTALGO_MD5SESS ||
     digest->algo == CURLDIGESTALGO_SHA256SESS ||
     digest->algo == CURLDIGESTALGO_SHA512_256SESS) {
    /* nonce and cnonce are OUTSIDE the hash */
    tmp = aprintf("%s:%s:%s", ha1, digest->nonce, digest->cnonce);
    if(!tmp)
      return CURLE_OUT_OF_MEMORY;

    CURL_OUTPUT_DIGEST_CONV(data, tmp); /* Convert on non-ASCII machines */
    hash(hashbuf, (unsigned char *) tmp, strlen(tmp));
    free(tmp);
    convert_to_ascii(hashbuf, ha1);
  }

  /*
    If the "qop" directive's value is "auth" or is unspecified, then A2 is:

      A2 = Method ":" digest-uri-value

    If the "qop" value is "auth-int", then A2 is:

      A2 = Method ":" digest-uri-value ":" H(entity-body)

    (The "Method" value is the HTTP request method as specified in section
    5.1.1 of RFC 2616)
  */

  hashthis = aprintf("%s:%s", request, uripath);
  if(!hashthis)
    return CURLE_OUT_OF_MEMORY;

  if(digest->qop && strcasecompare(digest->qop, "auth-int")) {
    /* We don't support auth-int for PUT or POST */
    char hashed[65];
    char *hashthis2;

    hash(hashbuf, (const unsigned char *)"", 0);
    convert_to_ascii(hashbuf, (unsigned char *)hashed);

    hashthis2 = aprintf("%s:%s", hashthis, hashed);
    free(hashthis);
    hashthis = hashthis2;
  }

  if(!hashthis)
    return CURLE_OUT_OF_MEMORY;

  CURL_OUTPUT_DIGEST_CONV(data, hashthis); /* convert on non-ASCII machines */
  hash(hashbuf, (unsigned char *) hashthis, strlen(hashthis));
  free(hashthis);
  convert_to_ascii(hashbuf, ha2);

  if(digest->qop) {
    hashthis = aprintf("%s:%s:%08x:%s:%s:%s", ha1, digest->nonce, digest->nc,



                       digest->cnonce, digest->qop, ha2);


  }
  else {


    hashthis = aprintf("%s:%s:%s", ha1, digest->nonce, ha2);

  }

  if(!hashthis)
    return CURLE_OUT_OF_MEMORY;

  CURL_OUTPUT_DIGEST_CONV(data, hashthis); /* convert on non-ASCII machines */
  hash(hashbuf, (unsigned char *) hashthis, strlen(hashthis));
  free(hashthis);
  convert_to_ascii(hashbuf, request_digest);

  /* For test case 64 (snooped from a Mozilla 1.3a request)

     Authorization: Digest username="testuser", realm="testrealm", \
     nonce="1053604145", uri="/64", response="c55f7f30d83d774a3d2dcacf725abaca"
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
      return CURLE_OUT_OF_MEMORY;

    response = tmp;
  }

  if(digest->algorithm) {
    /* Append the algorithm */
    tmp = aprintf("%s, algorithm=\"%s\"", response, digest->algorithm);
    free(response);
    if(!tmp)
      return CURLE_OUT_OF_MEMORY;

    response = tmp;
  }








|







887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
      return CURLE_OUT_OF_MEMORY;

    response = tmp;
  }

  if(digest->algorithm) {
    /* Append the algorithm */
    tmp = aprintf("%s, algorithm=%s", response, digest->algorithm);
    free(response);
    if(!tmp)
      return CURLE_OUT_OF_MEMORY;

    response = tmp;
  }

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
                                              const unsigned char *uripath,
                                              struct digestdata *digest,
                                              char **outptr, size_t *outlen)
{
  switch(digest->algo) {
  case CURLDIGESTALGO_MD5:
  case CURLDIGESTALGO_MD5SESS:
    return _Curl_auth_create_digest_http_message(data, userp, passwdp,
                                                 request, uripath, digest,
                                                 outptr, outlen,
                                                 auth_digest_md5_to_ascii,
                                                 Curl_md5it);

  case CURLDIGESTALGO_SHA256:
  case CURLDIGESTALGO_SHA256SESS:
  case CURLDIGESTALGO_SHA512_256:
  case CURLDIGESTALGO_SHA512_256SESS:
    return _Curl_auth_create_digest_http_message(data, userp, passwdp,
                                                 request, uripath, digest,
                                                 outptr, outlen,
                                                 auth_digest_sha256_to_ascii,
                                                 Curl_sha256it);

  default:
    return CURLE_UNSUPPORTED_PROTOCOL;
  }
}

/*







|
|
|
|
|





|
|
|
|
|







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
                                              const unsigned char *uripath,
                                              struct digestdata *digest,
                                              char **outptr, size_t *outlen)
{
  switch(digest->algo) {
  case CURLDIGESTALGO_MD5:
  case CURLDIGESTALGO_MD5SESS:
    return auth_create_digest_http_message(data, userp, passwdp,
                                           request, uripath, digest,
                                           outptr, outlen,
                                           auth_digest_md5_to_ascii,
                                           Curl_md5it);

  case CURLDIGESTALGO_SHA256:
  case CURLDIGESTALGO_SHA256SESS:
  case CURLDIGESTALGO_SHA512_256:
  case CURLDIGESTALGO_SHA512_256SESS:
    return auth_create_digest_http_message(data, userp, passwdp,
                                           request, uripath, digest,
                                           outptr, outlen,
                                           auth_digest_sha256_to_ascii,
                                           Curl_sha256it);

  default:
    return CURLE_UNSUPPORTED_PROTOCOL;
  }
}

/*
Changes to jni/curl/lib/vauth/ntlm.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
36
37
38
39
40
41
42

43
44
45
46
47
48
49
#include "urldata.h"
#include "non-ascii.h"
#include "sendf.h"
#include "curl_base64.h"
#include "curl_ntlm_core.h"
#include "curl_gethostname.h"
#include "curl_multibyte.h"

#include "warnless.h"
#include "rand.h"
#include "vtls/vtls.h"

/* SSL backend-specific #if branches in this file must be kept in the order
   documented in curl_ntlm_core. */
#if defined(NTLM_NEEDS_NSS_INIT)







>







36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include "urldata.h"
#include "non-ascii.h"
#include "sendf.h"
#include "curl_base64.h"
#include "curl_ntlm_core.h"
#include "curl_gethostname.h"
#include "curl_multibyte.h"
#include "curl_md5.h"
#include "warnless.h"
#include "rand.h"
#include "vtls/vtls.h"

/* SSL backend-specific #if branches in this file must be kept in the order
   documented in curl_ntlm_core. */
#if defined(NTLM_NEEDS_NSS_INIT)
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
    /* Pad with zeros */
    memset(lmresp + 8, 0, 0x10);

    /* Fill tmp with challenge(nonce?) + entropy */
    memcpy(tmp, &ntlm->nonce[0], 8);
    memcpy(tmp + 8, entropy, 8);

    result = Curl_ssl_md5sum(tmp, 16, md5sum, MD5_DIGEST_LENGTH);
    if(!result)
      /* We shall only use the first 8 bytes of md5sum, but the des code in
         Curl_ntlm_core_lm_resp only encrypt the first 8 bytes */
      result = Curl_ntlm_core_mk_nt_hash(data, passwdp, ntbuffer);
    if(result)
      return result;

    Curl_ntlm_core_lm_resp(ntbuffer, md5sum, ntresp);

    /* End of NTLM2 Session code */
    /* NTLM v2 session security is a misnomer because it is not NTLM v2.







|
|
|
|
|







618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
    /* Pad with zeros */
    memset(lmresp + 8, 0, 0x10);

    /* Fill tmp with challenge(nonce?) + entropy */
    memcpy(tmp, &ntlm->nonce[0], 8);
    memcpy(tmp + 8, entropy, 8);

    Curl_md5it(md5sum, tmp, 16);

    /* We shall only use the first 8 bytes of md5sum, but the des code in
       Curl_ntlm_core_lm_resp only encrypt the first 8 bytes */
    result = Curl_ntlm_core_mk_nt_hash(data, passwdp, ntbuffer);
    if(result)
      return result;

    Curl_ntlm_core_lm_resp(ntbuffer, md5sum, ntresp);

    /* End of NTLM2 Session code */
    /* NTLM v2 session security is a misnomer because it is not NTLM v2.
Changes to jni/curl/lib/version.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
261
262
263
264
265
266
267
268
269


270
271
272
273
274
275
276
#endif
#ifdef USE_LIBRTMP
  "rtmp",
#endif
#ifndef CURL_DISABLE_RTSP
  "rtsp",
#endif
#if defined(USE_SSH)
  "scp",


  "sftp",
#endif
#if !defined(CURL_DISABLE_SMB) && defined(USE_NTLM) && \
   (CURL_SIZEOF_CURL_OFF_T > 4) && \
   (!defined(USE_WINDOWS_SSPI) || defined(USE_WIN32_CRYPTO))
  "smb",
#  ifdef USE_SSL







|

>
>







261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
#endif
#ifdef USE_LIBRTMP
  "rtmp",
#endif
#ifndef CURL_DISABLE_RTSP
  "rtsp",
#endif
#if defined(USE_SSH) && !defined(USE_WOLFSSH)
  "scp",
#endif
#ifdef USE_SSH
  "sftp",
#endif
#if !defined(CURL_DISABLE_SMB) && defined(USE_NTLM) && \
   (CURL_SIZEOF_CURL_OFF_T > 4) && \
   (!defined(USE_WINDOWS_SSPI) || defined(USE_WIN32_CRYPTO))
  "smb",
#  ifdef USE_SSL
Changes to jni/curl/lib/vquic/ngtcp2.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
  s->initial_ts = timestamp();
  s->transport_params.initial_max_stream_data_bidi_local = stream_buffer_size;
  s->transport_params.initial_max_stream_data_bidi_remote = QUIC_MAX_STREAMS;
  s->transport_params.initial_max_stream_data_uni = QUIC_MAX_STREAMS;
  s->transport_params.initial_max_data = QUIC_MAX_DATA;
  s->transport_params.initial_max_streams_bidi = 1;
  s->transport_params.initial_max_streams_uni = 3;
  s->transport_params.idle_timeout = QUIC_IDLE_TIMEOUT;
}

static FILE *keylog_file; /* not thread-safe */
static void keylog_callback(const SSL *ssl, const char *line)
{
  (void)ssl;
  fputs(line, keylog_file);







|







142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
  s->initial_ts = timestamp();
  s->transport_params.initial_max_stream_data_bidi_local = stream_buffer_size;
  s->transport_params.initial_max_stream_data_bidi_remote = QUIC_MAX_STREAMS;
  s->transport_params.initial_max_stream_data_uni = QUIC_MAX_STREAMS;
  s->transport_params.initial_max_data = QUIC_MAX_DATA;
  s->transport_params.initial_max_streams_bidi = 1;
  s->transport_params.initial_max_streams_uni = 3;
  s->transport_params.max_idle_timeout = QUIC_IDLE_TIMEOUT;
}

static FILE *keylog_file; /* not thread-safe */
static void keylog_callback(const SSL *ssl, const char *line)
{
  (void)ssl;
  fputs(line, keylog_file);
531
532
533
534
535
536
537


538
539
540
541
542
543
544
  ngtcp2_crypto_update_key_cb, /* update_key */
  NULL, /* path_validation */
  NULL, /* select_preferred_addr */
  cb_stream_reset,
  NULL, /* extend_max_remote_streams_bidi */
  NULL, /* extend_max_remote_streams_uni */
  cb_extend_max_stream_data,


};

/*
 * Might be called twice for happy eyeballs.
 */
CURLcode Curl_quic_connect(struct connectdata *conn,
                           curl_socket_t sockfd,







>
>







531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
  ngtcp2_crypto_update_key_cb, /* update_key */
  NULL, /* path_validation */
  NULL, /* select_preferred_addr */
  cb_stream_reset,
  NULL, /* extend_max_remote_streams_bidi */
  NULL, /* extend_max_remote_streams_uni */
  cb_extend_max_stream_data,
  NULL, /* dcid_status */
  NULL  /* handshake_confirmed */
};

/*
 * Might be called twice for happy eyeballs.
 */
CURLcode Curl_quic_connect(struct connectdata *conn,
                           curl_socket_t sockfd,
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

  infof(data, "Connect socket %d over QUIC to %s:%ld\n",
        sockfd, ipbuf, port);

  qs->version = NGTCP2_PROTO_VER;
  qs->sslctx = quic_ssl_ctx(data);
  if(!qs->sslctx)
    return CURLE_FAILED_INIT; /* TODO: better return code */

  if(quic_init_ssl(qs))
    return CURLE_FAILED_INIT; /* TODO: better return code */

  qs->dcid.datalen = NGTCP2_MAX_CIDLEN;
  result = Curl_rand(data, qs->dcid.data, NGTCP2_MAX_CIDLEN);
  if(result)
    return result;

  qs->scid.datalen = NGTCP2_MAX_CIDLEN;
  result = Curl_rand(data, qs->scid.data, NGTCP2_MAX_CIDLEN);
  if(result)
    return result;

  quic_settings(&qs->settings, data->set.buffer_size);

  qs->local_addrlen = sizeof(qs->local_addr);
  rv = getsockname(sockfd, (struct sockaddr *)&qs->local_addr,
                   &qs->local_addrlen);
  if(rv == -1)
    return CURLE_FAILED_INIT;

  ngtcp2_addr_init(&path.local, (uint8_t *)&qs->local_addr, qs->local_addrlen,
                   NULL);
  ngtcp2_addr_init(&path.remote, (uint8_t*)addr, addrlen, NULL);

#ifdef NGTCP2_PROTO_VER
#define QUICVER NGTCP2_PROTO_VER
#else
#error "unsupported ngtcp2 version"
#endif
  rc = ngtcp2_conn_client_new(&qs->qconn, &qs->dcid, &qs->scid, &path, QUICVER,
                              &ng_callbacks, &qs->settings, NULL, qs);
  if(rc)
    return CURLE_FAILED_INIT; /* TODO: create a QUIC error code */

  ngtcp2_conn_get_local_transport_params(qs->qconn, &params);
  nwrite = ngtcp2_encode_transport_params(
    paramsbuf, sizeof(paramsbuf), NGTCP2_TRANSPORT_PARAMS_TYPE_CLIENT_HELLO,
    &params);
  if(nwrite < 0) {
    failf(data, "ngtcp2_encode_transport_params: %s\n",
          ngtcp2_strerror((int)nwrite));
    return CURLE_FAILED_INIT;
  }

  if(!SSL_set_quic_transport_params(qs->ssl, paramsbuf, nwrite))
    return CURLE_FAILED_INIT;

  rc = setup_initial_crypto_context(qs);
  if(rc)
    return CURLE_FAILED_INIT; /* TODO: better return code */

  return CURLE_OK;
}

/*
 * Store ngtp2 version info in this buffer, Prefix with a space.  Return total
 * length written.







|


|

















|













|








|



|



|







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

  infof(data, "Connect socket %d over QUIC to %s:%ld\n",
        sockfd, ipbuf, port);

  qs->version = NGTCP2_PROTO_VER;
  qs->sslctx = quic_ssl_ctx(data);
  if(!qs->sslctx)
    return CURLE_QUIC_CONNECT_ERROR;

  if(quic_init_ssl(qs))
    return CURLE_QUIC_CONNECT_ERROR;

  qs->dcid.datalen = NGTCP2_MAX_CIDLEN;
  result = Curl_rand(data, qs->dcid.data, NGTCP2_MAX_CIDLEN);
  if(result)
    return result;

  qs->scid.datalen = NGTCP2_MAX_CIDLEN;
  result = Curl_rand(data, qs->scid.data, NGTCP2_MAX_CIDLEN);
  if(result)
    return result;

  quic_settings(&qs->settings, data->set.buffer_size);

  qs->local_addrlen = sizeof(qs->local_addr);
  rv = getsockname(sockfd, (struct sockaddr *)&qs->local_addr,
                   &qs->local_addrlen);
  if(rv == -1)
    return CURLE_QUIC_CONNECT_ERROR;

  ngtcp2_addr_init(&path.local, (uint8_t *)&qs->local_addr, qs->local_addrlen,
                   NULL);
  ngtcp2_addr_init(&path.remote, (uint8_t*)addr, addrlen, NULL);

#ifdef NGTCP2_PROTO_VER
#define QUICVER NGTCP2_PROTO_VER
#else
#error "unsupported ngtcp2 version"
#endif
  rc = ngtcp2_conn_client_new(&qs->qconn, &qs->dcid, &qs->scid, &path, QUICVER,
                              &ng_callbacks, &qs->settings, NULL, qs);
  if(rc)
    return CURLE_QUIC_CONNECT_ERROR;

  ngtcp2_conn_get_local_transport_params(qs->qconn, &params);
  nwrite = ngtcp2_encode_transport_params(
    paramsbuf, sizeof(paramsbuf), NGTCP2_TRANSPORT_PARAMS_TYPE_CLIENT_HELLO,
    &params);
  if(nwrite < 0) {
    failf(data, "ngtcp2_encode_transport_params: %s\n",
          ngtcp2_strerror((int)nwrite));
    return CURLE_QUIC_CONNECT_ERROR;
  }

  if(!SSL_set_quic_transport_params(qs->ssl, paramsbuf, nwrite))
    return CURLE_QUIC_CONNECT_ERROR;

  rc = setup_initial_crypto_context(qs);
  if(rc)
    return CURLE_QUIC_CONNECT_ERROR;

  return CURLE_OK;
}

/*
 * Store ngtp2 version info in this buffer, Prefix with a space.  Return total
 * length written.
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
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
{
  CURLcode result;
  int rc;
  int64_t ctrl_stream_id, qpack_enc_stream_id, qpack_dec_stream_id;

  if(ngtcp2_conn_get_max_local_streams_uni(qs->qconn) < 3) {
    failf(qs->conn->data, "too few available QUIC streams");
    return CURLE_FAILED_INIT;
  }

  nghttp3_conn_settings_default(&qs->h3settings);

  rc = nghttp3_conn_client_new(&qs->h3conn,
                               &ngh3_callbacks,
                               &qs->h3settings,
                               nghttp3_mem_default(),
                               qs);
  if(rc) {
    result = CURLE_OUT_OF_MEMORY;
    goto fail;
  }

  rc = ngtcp2_conn_open_uni_stream(qs->qconn, &ctrl_stream_id, NULL);
  if(rc) {
    result = CURLE_FAILED_INIT;
    goto fail;
  }

  rc = nghttp3_conn_bind_control_stream(qs->h3conn, ctrl_stream_id);
  if(rc) {
    result = CURLE_FAILED_INIT;
    goto fail;
  }

  rc = ngtcp2_conn_open_uni_stream(qs->qconn, &qpack_enc_stream_id, NULL);
  if(rc) {
    result = CURLE_FAILED_INIT;
    goto fail;
  }

  rc = ngtcp2_conn_open_uni_stream(qs->qconn, &qpack_dec_stream_id, NULL);
  if(rc) {
    result = CURLE_FAILED_INIT;
    goto fail;
  }

  rc = nghttp3_conn_bind_qpack_streams(qs->h3conn, qpack_enc_stream_id,
                                       qpack_dec_stream_id);
  if(rc) {
    result = CURLE_FAILED_INIT;
    goto fail;
  }

  return CURLE_OK;
  fail:

  return result;







|
















|





|





|





|






|







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
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
{
  CURLcode result;
  int rc;
  int64_t ctrl_stream_id, qpack_enc_stream_id, qpack_dec_stream_id;

  if(ngtcp2_conn_get_max_local_streams_uni(qs->qconn) < 3) {
    failf(qs->conn->data, "too few available QUIC streams");
    return CURLE_QUIC_CONNECT_ERROR;
  }

  nghttp3_conn_settings_default(&qs->h3settings);

  rc = nghttp3_conn_client_new(&qs->h3conn,
                               &ngh3_callbacks,
                               &qs->h3settings,
                               nghttp3_mem_default(),
                               qs);
  if(rc) {
    result = CURLE_OUT_OF_MEMORY;
    goto fail;
  }

  rc = ngtcp2_conn_open_uni_stream(qs->qconn, &ctrl_stream_id, NULL);
  if(rc) {
    result = CURLE_QUIC_CONNECT_ERROR;
    goto fail;
  }

  rc = nghttp3_conn_bind_control_stream(qs->h3conn, ctrl_stream_id);
  if(rc) {
    result = CURLE_QUIC_CONNECT_ERROR;
    goto fail;
  }

  rc = ngtcp2_conn_open_uni_stream(qs->qconn, &qpack_enc_stream_id, NULL);
  if(rc) {
    result = CURLE_QUIC_CONNECT_ERROR;
    goto fail;
  }

  rc = ngtcp2_conn_open_uni_stream(qs->qconn, &qpack_dec_stream_id, NULL);
  if(rc) {
    result = CURLE_QUIC_CONNECT_ERROR;
    goto fail;
  }

  rc = nghttp3_conn_bind_qpack_streams(qs->h3conn, qpack_enc_stream_id,
                                       qpack_dec_stream_id);
  if(rc) {
    result = CURLE_QUIC_CONNECT_ERROR;
    goto fail;
  }

  return CURLE_OK;
  fail:

  return result;
1595
1596
1597
1598
1599
1600
1601

1602
1603
1604

1605
1606
1607
1608
1609
1610
1611
  nghttp3_vec vec[16];
  ssize_t ndatalen;

  switch(qs->local_addr.ss_family) {
  case AF_INET:
    pktlen = NGTCP2_MAX_PKTLEN_IPV4;
    break;

  case AF_INET6:
    pktlen = NGTCP2_MAX_PKTLEN_IPV6;
    break;

  default:
    assert(0);
  }

  rv = ngtcp2_conn_handle_expiry(qs->qconn, ts);
  if(rv != 0) {
    failf(conn->data, "ngtcp2_conn_handle_expiry returned error: %s\n",







>



>







1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
  nghttp3_vec vec[16];
  ssize_t ndatalen;

  switch(qs->local_addr.ss_family) {
  case AF_INET:
    pktlen = NGTCP2_MAX_PKTLEN_IPV4;
    break;
#ifdef ENABLE_IPV6
  case AF_INET6:
    pktlen = NGTCP2_MAX_PKTLEN_IPV6;
    break;
#endif
  default:
    assert(0);
  }

  rv = ngtcp2_conn_handle_expiry(qs->qconn, ts);
  if(rv != 0) {
    failf(conn->data, "ngtcp2_conn_handle_expiry returned error: %s\n",
Changes to jni/curl/lib/vquic/quiche.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181

  qs->cfg = quiche_config_new(QUICHE_PROTOCOL_VERSION);
  if(!qs->cfg) {
    failf(data, "can't create quiche config");
    return CURLE_FAILED_INIT;
  }

  quiche_config_set_idle_timeout(qs->cfg, QUIC_IDLE_TIMEOUT);
  quiche_config_set_initial_max_data(qs->cfg, QUIC_MAX_DATA);
  quiche_config_set_initial_max_stream_data_bidi_local(qs->cfg, QUIC_MAX_DATA);
  quiche_config_set_initial_max_stream_data_bidi_remote(qs->cfg,
                                                        QUIC_MAX_DATA);
  quiche_config_set_initial_max_stream_data_uni(qs->cfg, QUIC_MAX_DATA);
  quiche_config_set_initial_max_streams_bidi(qs->cfg, QUIC_MAX_STREAMS);
  quiche_config_set_initial_max_streams_uni(qs->cfg, QUIC_MAX_STREAMS);







|







167
168
169
170
171
172
173
174
175
176
177
178
179
180
181

  qs->cfg = quiche_config_new(QUICHE_PROTOCOL_VERSION);
  if(!qs->cfg) {
    failf(data, "can't create quiche config");
    return CURLE_FAILED_INIT;
  }

  quiche_config_set_max_idle_timeout(qs->cfg, QUIC_IDLE_TIMEOUT);
  quiche_config_set_initial_max_data(qs->cfg, QUIC_MAX_DATA);
  quiche_config_set_initial_max_stream_data_bidi_local(qs->cfg, QUIC_MAX_DATA);
  quiche_config_set_initial_max_stream_data_bidi_remote(qs->cfg,
                                                        QUIC_MAX_DATA);
  quiche_config_set_initial_max_stream_data_uni(qs->cfg, QUIC_MAX_DATA);
  quiche_config_set_initial_max_streams_bidi(qs->cfg, QUIC_MAX_STREAMS);
  quiche_config_set_initial_max_streams_uni(qs->cfg, QUIC_MAX_STREAMS);
Changes to jni/curl/lib/vssh/libssh.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2017 - 2019 Red Hat, Inc.
 *
 * Authors: Nikos Mavrogiannopoulos, Tomas Mraz, Stanislav Zidek,
 *          Robert Kolcun, Andreas Schneider
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2017 - 2020 Red Hat, Inc.
 *
 * Authors: Nikos Mavrogiannopoulos, Tomas Mraz, Stanislav Zidek,
 *          Robert Kolcun, Andreas Schneider
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
318
319
320
321
322
323
324
325

326
327
328

329
330
331








332

333
334
335
336
337
338
339
{
  int rc;
  struct Curl_easy *data = conn->data;
  struct ssh_conn *sshc = &conn->proto.sshc;
  ssh_key pubkey;
  size_t hlen;
  unsigned char *hash = NULL;
  char *base64 = NULL;

  int vstate;
  enum curl_khmatch keymatch;
  struct curl_khkey foundkey;

  curl_sshkeycallback func =
    data->set.ssh_keyfunc;









  rc = ssh_get_publickey(sshc->ssh_session, &pubkey);

  if(rc != SSH_OK)
    return rc;

  if(data->set.str[STRING_SSH_HOST_PUBLIC_KEY_MD5]) {
    rc = ssh_get_publickey_hash(pubkey, SSH_PUBLICKEY_HASH_MD5,
                                &hash, &hlen);
    if(rc != SSH_OK)







|
>



>



>
>
>
>
>
>
>
>

>







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
{
  int rc;
  struct Curl_easy *data = conn->data;
  struct ssh_conn *sshc = &conn->proto.sshc;
  ssh_key pubkey;
  size_t hlen;
  unsigned char *hash = NULL;
  char *found_base64 = NULL;
  char *known_base64 = NULL;
  int vstate;
  enum curl_khmatch keymatch;
  struct curl_khkey foundkey;
  struct curl_khkey *knownkeyp = NULL;
  curl_sshkeycallback func =
    data->set.ssh_keyfunc;

#if LIBSSH_VERSION_INT >= SSH_VERSION_INT(0,9,0)
  struct ssh_knownhosts_entry *knownhostsentry = NULL;
  struct curl_khkey knownkey;
#endif

#if LIBSSH_VERSION_INT >= SSH_VERSION_INT(0,8,0)
  rc = ssh_get_server_publickey(sshc->ssh_session, &pubkey);
#else
  rc = ssh_get_publickey(sshc->ssh_session, &pubkey);
#endif
  if(rc != SSH_OK)
    return rc;

  if(data->set.str[STRING_SSH_HOST_PUBLIC_KEY_MD5]) {
    rc = ssh_get_publickey_hash(pubkey, SSH_PUBLICKEY_HASH_MD5,
                                &hash, &hlen);
    if(rc != SSH_OK)
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
  }

  if(data->set.ssl.primary.verifyhost != TRUE) {
    rc = SSH_OK;
    goto cleanup;
  }




























































  vstate = ssh_is_server_known(sshc->ssh_session);
  switch(vstate) {
    case SSH_SERVER_KNOWN_OK:
      keymatch = CURLKHMATCH_OK;
      break;
    case SSH_SERVER_FILE_NOT_FOUND:
      /* fallthrough */
    case SSH_SERVER_NOT_KNOWN:
      keymatch = CURLKHMATCH_MISSING;
      break;
  default:
      keymatch = CURLKHMATCH_MISMATCH;
      break;
  }


  if(func) { /* use callback to determine action */
    rc = ssh_pki_export_pubkey_base64(pubkey, &base64);
    if(rc != SSH_OK)
      goto cleanup;

    foundkey.key = base64;
    foundkey.len = strlen(base64);

    switch(ssh_key_type(pubkey)) {
      case SSH_KEYTYPE_RSA:
        foundkey.keytype = CURLKHTYPE_RSA;
        break;
      case SSH_KEYTYPE_RSA1:
        foundkey.keytype = CURLKHTYPE_RSA1;







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>














>


|



|
|







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
  }

  if(data->set.ssl.primary.verifyhost != TRUE) {
    rc = SSH_OK;
    goto cleanup;
  }

#if LIBSSH_VERSION_INT >= SSH_VERSION_INT(0,9,0)
  /* Get the known_key from the known hosts file */
  vstate = ssh_session_get_known_hosts_entry(sshc->ssh_session,
                                             &knownhostsentry);

  /* Case an entry was found in a known hosts file */
  if(knownhostsentry) {
    if(knownhostsentry->publickey) {
      rc = ssh_pki_export_pubkey_base64(knownhostsentry->publickey,
                                        &known_base64);
      if(rc != SSH_OK) {
        goto cleanup;
      }
      knownkey.key = known_base64;
      knownkey.len = strlen(known_base64);

      switch(ssh_key_type(knownhostsentry->publickey)) {
        case SSH_KEYTYPE_RSA:
          knownkey.keytype = CURLKHTYPE_RSA;
          break;
        case SSH_KEYTYPE_RSA1:
          knownkey.keytype = CURLKHTYPE_RSA1;
          break;
        case SSH_KEYTYPE_ECDSA:
          knownkey.keytype = CURLKHTYPE_ECDSA;
          break;
        case SSH_KEYTYPE_ED25519:
          knownkey.keytype = CURLKHTYPE_ED25519;
          break;
        case SSH_KEYTYPE_DSS:
          knownkey.keytype = CURLKHTYPE_DSS;
          break;
        default:
          rc = SSH_ERROR;
          goto cleanup;
      }
      knownkeyp = &knownkey;
    }
  }

  switch(vstate) {
    case SSH_KNOWN_HOSTS_OK:
      keymatch = CURLKHMATCH_OK;
      break;
    case SSH_KNOWN_HOSTS_OTHER:
      /* fallthrough */
    case SSH_KNOWN_HOSTS_NOT_FOUND:
      /* fallthrough */
    case SSH_KNOWN_HOSTS_UNKNOWN:
      /* fallthrough */
    case SSH_KNOWN_HOSTS_ERROR:
      keymatch = CURLKHMATCH_MISSING;
      break;
  default:
      keymatch = CURLKHMATCH_MISMATCH;
      break;
  }

#else
  vstate = ssh_is_server_known(sshc->ssh_session);
  switch(vstate) {
    case SSH_SERVER_KNOWN_OK:
      keymatch = CURLKHMATCH_OK;
      break;
    case SSH_SERVER_FILE_NOT_FOUND:
      /* fallthrough */
    case SSH_SERVER_NOT_KNOWN:
      keymatch = CURLKHMATCH_MISSING;
      break;
  default:
      keymatch = CURLKHMATCH_MISMATCH;
      break;
  }
#endif

  if(func) { /* use callback to determine action */
    rc = ssh_pki_export_pubkey_base64(pubkey, &found_base64);
    if(rc != SSH_OK)
      goto cleanup;

    foundkey.key = found_base64;
    foundkey.len = strlen(found_base64);

    switch(ssh_key_type(pubkey)) {
      case SSH_KEYTYPE_RSA:
        foundkey.keytype = CURLKHTYPE_RSA;
        break;
      case SSH_KEYTYPE_RSA1:
        foundkey.keytype = CURLKHTYPE_RSA1;
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
        foundkey.keytype = CURLKHTYPE_DSS;
        break;
      default:
        rc = SSH_ERROR;
        goto cleanup;
    }

    /* we don't have anything equivalent to knownkey. Always NULL */
    Curl_set_in_callback(data, true);

    rc = func(data, NULL, &foundkey, /* from the remote host */
              keymatch, data->set.ssh_keyfunc_userp);
    Curl_set_in_callback(data, false);

    switch(rc) {
      case CURLKHSTAT_FINE_ADD_TO_FILE:



        rc = ssh_write_knownhost(sshc->ssh_session);

        if(rc != SSH_OK) {
          goto cleanup;
        }
        break;
      case CURLKHSTAT_FINE:
        break;
      default: /* REJECT/DEFER */
        rc = SSH_ERROR;
        goto cleanup;
    }
  }
  else {
    if(keymatch != CURLKHMATCH_OK) {
      rc = SSH_ERROR;
      goto cleanup;
    }
  }
  rc = SSH_OK;

cleanup:






  if(hash)
    ssh_clean_pubkey_hash(&hash);
  ssh_key_free(pubkey);





  return rc;
}

#define MOVE_TO_ERROR_STATE(_r) { \
  state(conn, SSH_SESSION_DISCONNECT); \
  sshc->actualcode = _r; \
  rc = SSH_ERROR; \







<

>
|





>
>
>

>




















>
>
>
>
>
>



>
>
>
>
>







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
        foundkey.keytype = CURLKHTYPE_DSS;
        break;
      default:
        rc = SSH_ERROR;
        goto cleanup;
    }


    Curl_set_in_callback(data, true);
    rc = func(data, knownkeyp, /* from the knownhosts file */
              &foundkey, /* from the remote host */
              keymatch, data->set.ssh_keyfunc_userp);
    Curl_set_in_callback(data, false);

    switch(rc) {
      case CURLKHSTAT_FINE_ADD_TO_FILE:
#if LIBSSH_VERSION_INT >= SSH_VERSION_INT(0,8,0)
        rc = ssh_session_update_known_hosts(sshc->ssh_session);
#else
        rc = ssh_write_knownhost(sshc->ssh_session);
#endif
        if(rc != SSH_OK) {
          goto cleanup;
        }
        break;
      case CURLKHSTAT_FINE:
        break;
      default: /* REJECT/DEFER */
        rc = SSH_ERROR;
        goto cleanup;
    }
  }
  else {
    if(keymatch != CURLKHMATCH_OK) {
      rc = SSH_ERROR;
      goto cleanup;
    }
  }
  rc = SSH_OK;

cleanup:
  if(found_base64) {
    free(found_base64);
  }
  if(known_base64) {
    free(known_base64);
  }
  if(hash)
    ssh_clean_pubkey_hash(&hash);
  ssh_key_free(pubkey);
#if LIBSSH_VERSION_INT >= SSH_VERSION_INT(0,9,0)
  if(knownhostsentry) {
    ssh_knownhosts_entry_free(knownhostsentry);
  }
#endif
  return rc;
}

#define MOVE_TO_ERROR_STATE(_r) { \
  state(conn, SSH_SESSION_DISCONNECT); \
  sshc->actualcode = _r; \
  rc = SSH_ERROR; \
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
          if((curl_off_t)size < data->state.resume_from) {
            failf(data, "Offset (%" CURL_FORMAT_CURL_OFF_T
                  ") was beyond file size (%" CURL_FORMAT_CURL_OFF_T ")",
                  data->state.resume_from, size);
            return CURLE_BAD_DOWNLOAD_RESUME;
          }
        }
        /* Does a completed file need to be seeked and started or closed ? */
        /* Now store the number of bytes we are expected to download */
        data->req.size = size - data->state.resume_from;
        data->req.maxdownload = size - data->state.resume_from;
        Curl_pgrsSetDownloadSize(data,
                                 size - data->state.resume_from);

        rc = sftp_seek64(sshc->sftp_file, data->state.resume_from);







<







1668
1669
1670
1671
1672
1673
1674

1675
1676
1677
1678
1679
1680
1681
          if((curl_off_t)size < data->state.resume_from) {
            failf(data, "Offset (%" CURL_FORMAT_CURL_OFF_T
                  ") was beyond file size (%" CURL_FORMAT_CURL_OFF_T ")",
                  data->state.resume_from, size);
            return CURLE_BAD_DOWNLOAD_RESUME;
          }
        }

        /* Now store the number of bytes we are expected to download */
        data->req.size = size - data->state.resume_from;
        data->req.maxdownload = size - data->state.resume_from;
        Curl_pgrsSetDownloadSize(data,
                                 size - data->state.resume_from);

        rc = sftp_seek64(sshc->sftp_file, data->state.resume_from);
Changes to jni/curl/lib/vssh/libssh2.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
102
103
104
105
106
107
108

109
110
111
112
113
114
115

/* Local functions: */
static const char *sftp_libssh2_strerror(int err);
static LIBSSH2_ALLOC_FUNC(my_libssh2_malloc);
static LIBSSH2_REALLOC_FUNC(my_libssh2_realloc);
static LIBSSH2_FREE_FUNC(my_libssh2_free);


static CURLcode ssh_connect(struct connectdata *conn, bool *done);
static CURLcode ssh_multi_statemach(struct connectdata *conn, bool *done);
static CURLcode ssh_do(struct connectdata *conn, bool *done);

static CURLcode scp_done(struct connectdata *conn,
                         CURLcode, bool premature);
static CURLcode scp_doing(struct connectdata *conn,







>







102
103
104
105
106
107
108
109
110
111
112
113
114
115
116

/* Local functions: */
static const char *sftp_libssh2_strerror(int err);
static LIBSSH2_ALLOC_FUNC(my_libssh2_malloc);
static LIBSSH2_REALLOC_FUNC(my_libssh2_realloc);
static LIBSSH2_FREE_FUNC(my_libssh2_free);

static CURLcode ssh_force_knownhost_key_type(struct connectdata *conn);
static CURLcode ssh_connect(struct connectdata *conn, bool *done);
static CURLcode ssh_multi_statemach(struct connectdata *conn, bool *done);
static CURLcode ssh_do(struct connectdata *conn, bool *done);

static CURLcode scp_done(struct connectdata *conn,
                         CURLcode, bool premature);
static CURLcode scp_doing(struct connectdata *conn,
643
644
645
646
647
648
649



























































































































650
651
652
653
654
655
656
    }
    infof(data, "MD5 checksum match!\n");
    /* as we already matched, we skip the check for known hosts */
    return CURLE_OK;
  }
  return ssh_knownhost(conn);
}




























































































































/*
 * ssh_statemach_act() runs the SSH state machine as far as it can without
 * blocking and without reaching the end.  The data the pointer 'block' points
 * to will be set to TRUE if the libssh2 function returns LIBSSH2_ERROR_EAGAIN
 * meaning it wants to be called again when the socket is ready
 */







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
    }
    infof(data, "MD5 checksum match!\n");
    /* as we already matched, we skip the check for known hosts */
    return CURLE_OK;
  }
  return ssh_knownhost(conn);
}

/*
 * ssh_force_knownhost_key_type() will check the known hosts file and try to
 * force a specific public key type from the server if an entry is found.
 */
static CURLcode ssh_force_knownhost_key_type(struct connectdata *conn)
{
  CURLcode result = CURLE_OK;

#ifdef HAVE_LIBSSH2_KNOWNHOST_API

#ifdef LIBSSH2_KNOWNHOST_KEY_ED25519
  static const char * const hostkey_method_ssh_ed25519
    = "ssh-ed25519";
#endif
#ifdef LIBSSH2_KNOWNHOST_KEY_ECDSA_521
  static const char * const hostkey_method_ssh_ecdsa_521
    = "ecdsa-sha2-nistp521";
#endif
#ifdef LIBSSH2_KNOWNHOST_KEY_ECDSA_384
  static const char * const hostkey_method_ssh_ecdsa_384
    = "ecdsa-sha2-nistp384";
#endif
#ifdef LIBSSH2_KNOWNHOST_KEY_ECDSA_256
  static const char * const hostkey_method_ssh_ecdsa_256
    = "ecdsa-sha2-nistp256";
#endif
  static const char * const hostkey_method_ssh_rsa
    = "ssh-rsa";
  static const char * const hostkey_method_ssh_dss
    = "ssh-dss";

  const char *hostkey_method = NULL;
  struct ssh_conn *sshc = &conn->proto.sshc;
  struct Curl_easy *data = conn->data;
  struct libssh2_knownhost* store = NULL;
  const char *kh_name_end = NULL;
  size_t kh_name_size = 0;
  int port = 0;
  bool found = false;

  if(sshc->kh && !data->set.str[STRING_SSH_HOST_PUBLIC_KEY_MD5]) {
    /* lets try to find our host in the known hosts file */
    while(!libssh2_knownhost_get(sshc->kh, &store, store)) {
      /* For non-standard ports, the name will be enclosed in */
      /* square brackets, followed by a colon and the port */
      if(store->name[0] == '[') {
        kh_name_end = strstr(store->name, "]:");
        if(!kh_name_end) {
          infof(data, "Invalid host pattern %s in %s\n",
                store->name, data->set.str[STRING_SSH_KNOWNHOSTS]);
          continue;
        }
        port = atoi(kh_name_end + 2);
        if(kh_name_end && (port == conn->remote_port)) {
          kh_name_size = strlen(store->name) - 1 - strlen(kh_name_end);
          if(strncmp(store->name + 1, conn->host.name, kh_name_size) == 0) {
            found = true;
            break;
          }
        }
      }
      else if(strcmp(store->name, conn->host.name) == 0) {
        found = true;
        break;
      }
    }

    if(found) {
      infof(data, "Found host %s in %s\n",
            store->name, data->set.str[STRING_SSH_KNOWNHOSTS]);

      switch(store->typemask & LIBSSH2_KNOWNHOST_KEY_MASK) {
#ifdef LIBSSH2_KNOWNHOST_KEY_ED25519
      case LIBSSH2_KNOWNHOST_KEY_ED25519:
        hostkey_method = hostkey_method_ssh_ed25519;
        break;
#endif
#ifdef LIBSSH2_KNOWNHOST_KEY_ECDSA_521
      case LIBSSH2_KNOWNHOST_KEY_ECDSA_521:
        hostkey_method = hostkey_method_ssh_ecdsa_521;
        break;
#endif
#ifdef LIBSSH2_KNOWNHOST_KEY_ECDSA_384
      case LIBSSH2_KNOWNHOST_KEY_ECDSA_384:
        hostkey_method = hostkey_method_ssh_ecdsa_384;
        break;
#endif
#ifdef LIBSSH2_KNOWNHOST_KEY_ECDSA_256
      case LIBSSH2_KNOWNHOST_KEY_ECDSA_256:
        hostkey_method = hostkey_method_ssh_ecdsa_256;
        break;
#endif
      case LIBSSH2_KNOWNHOST_KEY_SSHRSA:
        hostkey_method = hostkey_method_ssh_rsa;
        break;
      case LIBSSH2_KNOWNHOST_KEY_SSHDSS:
        hostkey_method = hostkey_method_ssh_dss;
        break;
      case LIBSSH2_KNOWNHOST_KEY_RSA1:
        failf(data, "Found host key type RSA1 which is not supported\n");
        return CURLE_SSH;
      default:
        failf(data, "Unknown host key type: %i\n",
              (store->typemask & LIBSSH2_KNOWNHOST_KEY_MASK));
        return CURLE_SSH;
      }

      infof(data, "Set \"%s\" as SSH hostkey type\n", hostkey_method);
      result = libssh2_session_error_to_CURLE(
          libssh2_session_method_pref(
              sshc->ssh_session, LIBSSH2_METHOD_HOSTKEY, hostkey_method));
    }
    else {
      infof(data, "Did not find host %s in %s\n",
            conn->host.name, data->set.str[STRING_SSH_KNOWNHOSTS]);
    }
  }

#endif /* HAVE_LIBSSH2_KNOWNHOST_API */

  return result;
}

/*
 * ssh_statemach_act() runs the SSH state machine as far as it can without
 * blocking and without reaching the end.  The data the pointer 'block' points
 * to will be set to TRUE if the libssh2 function returns LIBSSH2_ERROR_EAGAIN
 * meaning it wants to be called again when the socket is ready
 */
675
676
677
678
679
680
681






682
683
684
685
686
687
688
      sshc->secondCreateDirs = 0;
      sshc->nextstate = SSH_NO_STATE;
      sshc->actualcode = CURLE_OK;

      /* Set libssh2 to non-blocking, since everything internally is
         non-blocking */
      libssh2_session_set_blocking(sshc->ssh_session, 0);







      state(conn, SSH_S_STARTUP);
      /* FALLTHROUGH */

    case SSH_S_STARTUP:
      rc = libssh2_session_startup(sshc->ssh_session, (int)sock);
      if(rc == LIBSSH2_ERROR_EAGAIN) {







>
>
>
>
>
>







799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
      sshc->secondCreateDirs = 0;
      sshc->nextstate = SSH_NO_STATE;
      sshc->actualcode = CURLE_OK;

      /* Set libssh2 to non-blocking, since everything internally is
         non-blocking */
      libssh2_session_set_blocking(sshc->ssh_session, 0);

      result = ssh_force_knownhost_key_type(conn);
      if(result) {
        state(conn, SSH_SESSION_FREE);
        break;
      }

      state(conn, SSH_S_STARTUP);
      /* FALLTHROUGH */

    case SSH_S_STARTUP:
      rc = libssh2_session_startup(sshc->ssh_session, (int)sock);
      if(rc == LIBSSH2_ERROR_EAGAIN) {
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
          if((curl_off_t)attrs.filesize < data->state.resume_from) {
            failf(data, "Offset (%" CURL_FORMAT_CURL_OFF_T
                  ") was beyond file size (%" CURL_FORMAT_CURL_OFF_T ")",
                  data->state.resume_from, attrs.filesize);
            return CURLE_BAD_DOWNLOAD_RESUME;
          }
        }
        /* Does a completed file need to be seeked and started or closed ? */
        /* Now store the number of bytes we are expected to download */
        data->req.size = attrs.filesize - data->state.resume_from;
        data->req.maxdownload = attrs.filesize - data->state.resume_from;
        Curl_pgrsSetDownloadSize(data,
                                 attrs.filesize - data->state.resume_from);
        SFTP_SEEK(sshc->sftp_handle, data->state.resume_from);
      }







<







2377
2378
2379
2380
2381
2382
2383

2384
2385
2386
2387
2388
2389
2390
          if((curl_off_t)attrs.filesize < data->state.resume_from) {
            failf(data, "Offset (%" CURL_FORMAT_CURL_OFF_T
                  ") was beyond file size (%" CURL_FORMAT_CURL_OFF_T ")",
                  data->state.resume_from, attrs.filesize);
            return CURLE_BAD_DOWNLOAD_RESUME;
          }
        }

        /* Now store the number of bytes we are expected to download */
        data->req.size = attrs.filesize - data->state.resume_from;
        data->req.maxdownload = attrs.filesize - data->state.resume_from;
        Curl_pgrsSetDownloadSize(data,
                                 attrs.filesize - data->state.resume_from);
        SFTP_SEEK(sshc->sftp_handle, data->state.resume_from);
      }
Changes to jni/curl/lib/vssh/ssh.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_SSH_H
#define HEADER_CURL_SSH_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_SSH_H
#define HEADER_CURL_SSH_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
26
27
28
29
30
31
32



33
34
35
36
37
38
39
40

#if defined(HAVE_LIBSSH2_H)
#include <libssh2.h>
#include <libssh2_sftp.h>
#elif defined(HAVE_LIBSSH_LIBSSH_H)
#include <libssh/libssh.h>
#include <libssh/sftp.h>



#endif /* HAVE_LIBSSH2_H */

/****************************************************************************
 * SSH unique setup
 ***************************************************************************/
typedef enum {
  SSH_NO_STATE = -1,  /* Used for "nextState" so say there is none */
  SSH_STOP = 0,       /* do nothing state, stops the state machine */







>
>
>
|







26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

#if defined(HAVE_LIBSSH2_H)
#include <libssh2.h>
#include <libssh2_sftp.h>
#elif defined(HAVE_LIBSSH_LIBSSH_H)
#include <libssh/libssh.h>
#include <libssh/sftp.h>
#elif defined(USE_WOLFSSH)
#include <wolfssh/ssh.h>
#include <wolfssh/wolfsftp.h>
#endif

/****************************************************************************
 * SSH unique setup
 ***************************************************************************/
typedef enum {
  SSH_NO_STATE = -1,  /* Used for "nextState" so say there is none */
  SSH_STOP = 0,       /* do nothing state, stops the state machine */
184
185
186
187
188
189
190






191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
#endif

  /* note that HAVE_LIBSSH2_KNOWNHOST_API is a define set in the libssh2.h
     header */
#ifdef HAVE_LIBSSH2_KNOWNHOST_API
  LIBSSH2_KNOWNHOSTS *kh;
#endif






#endif /* USE_LIBSSH */
};

#if defined(USE_LIBSSH)

#define CURL_LIBSSH_VERSION ssh_version(0)

extern const struct Curl_handler Curl_handler_scp;
extern const struct Curl_handler Curl_handler_sftp;

#elif defined(USE_LIBSSH2)

/* Feature detection based on version numbers to better work with
   non-configure platforms */

#if !defined(LIBSSH2_VERSION_NUM) || (LIBSSH2_VERSION_NUM < 0x001000)
#  error "SCP/SFTP protocols require libssh2 0.16 or later"







>
>
>
>
>
>







<
<
<







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
#endif

  /* note that HAVE_LIBSSH2_KNOWNHOST_API is a define set in the libssh2.h
     header */
#ifdef HAVE_LIBSSH2_KNOWNHOST_API
  LIBSSH2_KNOWNHOSTS *kh;
#endif
#elif defined(USE_WOLFSSH)
  WOLFSSH *ssh_session;
  WOLFSSH_CTX *ctx;
  word32 handleSz;
  byte handle[WOLFSSH_MAX_HANDLE];
  curl_off_t offset;
#endif /* USE_LIBSSH */
};

#if defined(USE_LIBSSH)

#define CURL_LIBSSH_VERSION ssh_version(0)




#elif defined(USE_LIBSSH2)

/* Feature detection based on version numbers to better work with
   non-configure platforms */

#if !defined(LIBSSH2_VERSION_NUM) || (LIBSSH2_VERSION_NUM < 0x001000)
#  error "SCP/SFTP protocols require libssh2 0.16 or later"
233
234
235
236
237
238
239
240
241
242
243
244




245
246
247
248
249
250
251
252
253
254
/* get it run-time if possible */
#define CURL_LIBSSH2_VERSION libssh2_version(0)
#else
/* use build-time if run-time not possible */
#define CURL_LIBSSH2_VERSION LIBSSH2_VERSION
#endif

extern const struct Curl_handler Curl_handler_scp;
extern const struct Curl_handler Curl_handler_sftp;
#endif /* USE_LIBSSH2 */

#ifdef USE_SSH




/* generic SSH backend functions */
CURLcode Curl_ssh_init(void);
void Curl_ssh_cleanup(void);
size_t Curl_ssh_version(char *buffer, size_t buflen);
#else
/* for non-SSH builds */
#define Curl_ssh_cleanup()
#endif

#endif /* HEADER_CURL_SSH_H */







<
<



>
>
>
>










239
240
241
242
243
244
245


246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
/* get it run-time if possible */
#define CURL_LIBSSH2_VERSION libssh2_version(0)
#else
/* use build-time if run-time not possible */
#define CURL_LIBSSH2_VERSION LIBSSH2_VERSION
#endif



#endif /* USE_LIBSSH2 */

#ifdef USE_SSH

extern const struct Curl_handler Curl_handler_scp;
extern const struct Curl_handler Curl_handler_sftp;

/* generic SSH backend functions */
CURLcode Curl_ssh_init(void);
void Curl_ssh_cleanup(void);
size_t Curl_ssh_version(char *buffer, size_t buflen);
#else
/* for non-SSH builds */
#define Curl_ssh_cleanup()
#endif

#endif /* HEADER_CURL_SSH_H */
Added jni/curl/lib/vssh/wolfssh.c.








































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2019 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "curl_setup.h"

#ifdef USE_WOLFSSH

#include <limits.h>

#include <wolfssh/ssh.h>
#include <wolfssh/wolfsftp.h>
#include "urldata.h"
#include "connect.h"
#include "sendf.h"
#include "progress.h"
#include "curl_path.h"
#include "strtoofft.h"
#include "transfer.h"
#include "speedcheck.h"
#include "select.h"
#include "multiif.h"
#include "warnless.h"

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

static CURLcode wssh_connect(struct connectdata *conn, bool *done);
static CURLcode wssh_multi_statemach(struct connectdata *conn, bool *done);
static CURLcode wssh_do(struct connectdata *conn, bool *done);
#if 0
static CURLcode wscp_done(struct connectdata *conn,
                          CURLcode, bool premature);
static CURLcode wscp_doing(struct connectdata *conn,
                           bool *dophase_done);
static CURLcode wscp_disconnect(struct connectdata *conn,
                                bool dead_connection);
#endif
static CURLcode wsftp_done(struct connectdata *conn,
                           CURLcode, bool premature);
static CURLcode wsftp_doing(struct connectdata *conn,
                            bool *dophase_done);
static CURLcode wsftp_disconnect(struct connectdata *conn, bool dead);
static int wssh_getsock(struct connectdata *conn,
                        curl_socket_t *sock);
static int wssh_perform_getsock(const struct connectdata *conn,
                                curl_socket_t *sock);
static CURLcode wssh_setup_connection(struct connectdata *conn);

#if 0
/*
 * SCP protocol handler.
 */

const struct Curl_handler Curl_handler_scp = {
  "SCP",                                /* scheme */
  wssh_setup_connection,                /* setup_connection */
  wssh_do,                              /* do_it */
  wscp_done,                            /* done */
  ZERO_NULL,                            /* do_more */
  wssh_connect,                         /* connect_it */
  wssh_multi_statemach,                 /* connecting */
  wscp_doing,                           /* doing */
  wssh_getsock,                         /* proto_getsock */
  wssh_getsock,                         /* doing_getsock */
  ZERO_NULL,                            /* domore_getsock */
  wssh_perform_getsock,                 /* perform_getsock */
  wscp_disconnect,                      /* disconnect */
  ZERO_NULL,                            /* readwrite */
  ZERO_NULL,                            /* connection_check */
  PORT_SSH,                             /* defport */
  CURLPROTO_SCP,                        /* protocol */
  PROTOPT_DIRLOCK | PROTOPT_CLOSEACTION
  | PROTOPT_NOURLQUERY                  /* flags */
};

#endif

/*
 * SFTP protocol handler.
 */

const struct Curl_handler Curl_handler_sftp = {
  "SFTP",                               /* scheme */
  wssh_setup_connection,                /* setup_connection */
  wssh_do,                              /* do_it */
  wsftp_done,                           /* done */
  ZERO_NULL,                            /* do_more */
  wssh_connect,                         /* connect_it */
  wssh_multi_statemach,                 /* connecting */
  wsftp_doing,                          /* doing */
  wssh_getsock,                         /* proto_getsock */
  wssh_getsock,                         /* doing_getsock */
  ZERO_NULL,                            /* domore_getsock */
  wssh_perform_getsock,                 /* perform_getsock */
  wsftp_disconnect,                     /* disconnect */
  ZERO_NULL,                            /* readwrite */
  ZERO_NULL,                            /* connection_check */
  PORT_SSH,                             /* defport */
  CURLPROTO_SFTP,                       /* protocol */
  PROTOPT_DIRLOCK | PROTOPT_CLOSEACTION
  | PROTOPT_NOURLQUERY                  /* flags */
};

/*
 * SSH State machine related code
 */
/* This is the ONLY way to change SSH state! */
static void state(struct connectdata *conn, sshstate nowstate)
{
  struct ssh_conn *sshc = &conn->proto.sshc;
#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
  /* for debug purposes */
  static const char * const names[] = {
    "SSH_STOP",
    "SSH_INIT",
    "SSH_S_STARTUP",
    "SSH_HOSTKEY",
    "SSH_AUTHLIST",
    "SSH_AUTH_PKEY_INIT",
    "SSH_AUTH_PKEY",
    "SSH_AUTH_PASS_INIT",
    "SSH_AUTH_PASS",
    "SSH_AUTH_AGENT_INIT",
    "SSH_AUTH_AGENT_LIST",
    "SSH_AUTH_AGENT",
    "SSH_AUTH_HOST_INIT",
    "SSH_AUTH_HOST",
    "SSH_AUTH_KEY_INIT",
    "SSH_AUTH_KEY",
    "SSH_AUTH_GSSAPI",
    "SSH_AUTH_DONE",
    "SSH_SFTP_INIT",
    "SSH_SFTP_REALPATH",
    "SSH_SFTP_QUOTE_INIT",
    "SSH_SFTP_POSTQUOTE_INIT",
    "SSH_SFTP_QUOTE",
    "SSH_SFTP_NEXT_QUOTE",
    "SSH_SFTP_QUOTE_STAT",
    "SSH_SFTP_QUOTE_SETSTAT",
    "SSH_SFTP_QUOTE_SYMLINK",
    "SSH_SFTP_QUOTE_MKDIR",
    "SSH_SFTP_QUOTE_RENAME",
    "SSH_SFTP_QUOTE_RMDIR",
    "SSH_SFTP_QUOTE_UNLINK",
    "SSH_SFTP_QUOTE_STATVFS",
    "SSH_SFTP_GETINFO",
    "SSH_SFTP_FILETIME",
    "SSH_SFTP_TRANS_INIT",
    "SSH_SFTP_UPLOAD_INIT",
    "SSH_SFTP_CREATE_DIRS_INIT",
    "SSH_SFTP_CREATE_DIRS",
    "SSH_SFTP_CREATE_DIRS_MKDIR",
    "SSH_SFTP_READDIR_INIT",
    "SSH_SFTP_READDIR",
    "SSH_SFTP_READDIR_LINK",
    "SSH_SFTP_READDIR_BOTTOM",
    "SSH_SFTP_READDIR_DONE",
    "SSH_SFTP_DOWNLOAD_INIT",
    "SSH_SFTP_DOWNLOAD_STAT",
    "SSH_SFTP_CLOSE",
    "SSH_SFTP_SHUTDOWN",
    "SSH_SCP_TRANS_INIT",
    "SSH_SCP_UPLOAD_INIT",
    "SSH_SCP_DOWNLOAD_INIT",
    "SSH_SCP_DOWNLOAD",
    "SSH_SCP_DONE",
    "SSH_SCP_SEND_EOF",
    "SSH_SCP_WAIT_EOF",
    "SSH_SCP_WAIT_CLOSE",
    "SSH_SCP_CHANNEL_FREE",
    "SSH_SESSION_DISCONNECT",
    "SSH_SESSION_FREE",
    "QUIT"
  };

  /* a precaution to make sure the lists are in sync */
  DEBUGASSERT(sizeof(names)/sizeof(names[0]) == SSH_LAST);

  if(sshc->state != nowstate) {
    infof(conn->data, "wolfssh %p state change from %s to %s\n",
          (void *)sshc, names[sshc->state], names[nowstate]);
  }
#endif

  sshc->state = nowstate;
}

static ssize_t wscp_send(struct connectdata *conn, int sockindex,
                         const void *mem, size_t len, CURLcode *err)
{
  ssize_t nwrite = 0;
  (void)conn;
  (void)sockindex; /* we only support SCP on the fixed known primary socket */
  (void)mem;
  (void)len;
  (void)err;

  return nwrite;
}

static ssize_t wscp_recv(struct connectdata *conn, int sockindex,
                         char *mem, size_t len, CURLcode *err)
{
  ssize_t nread = 0;
  (void)conn;
  (void)sockindex; /* we only support SCP on the fixed known primary socket */
  (void)mem;
  (void)len;
  (void)err;

  return nread;
}

/* return number of sent bytes */
static ssize_t wsftp_send(struct connectdata *conn, int sockindex,
                          const void *mem, size_t len, CURLcode *err)
{
  struct ssh_conn *sshc = &conn->proto.sshc;
  word32 offset[2];
  int rc;
  (void)sockindex;

  offset[0] =  (word32)sshc->offset&0xFFFFFFFF;
  offset[1] =  (word32)(sshc->offset>>32)&0xFFFFFFFF;

  rc = wolfSSH_SFTP_SendWritePacket(sshc->ssh_session, sshc->handle,
                                    sshc->handleSz,
                                    &offset[0],
                                    (byte *)mem, (word32)len);

  if(rc == WS_FATAL_ERROR)
    rc = wolfSSH_get_error(sshc->ssh_session);
  if(rc == WS_WANT_READ) {
    conn->waitfor = KEEP_RECV;
    *err = CURLE_AGAIN;
    return -1;
  }
  else if(rc == WS_WANT_WRITE) {
    conn->waitfor = KEEP_SEND;
    *err = CURLE_AGAIN;
    return -1;
  }
  if(rc < 0) {
    failf(conn->data, "wolfSSH_SFTP_SendWritePacket returned %d\n", rc);
    return -1;
  }
  DEBUGASSERT(rc == (int)len);
  infof(conn->data, "sent %zd bytes SFTP from offset %zd\n",
        len, sshc->offset);
  sshc->offset += len;
  return (ssize_t)rc;
}

/*
 * Return number of received (decrypted) bytes
 * or <0 on error
 */
static ssize_t wsftp_recv(struct connectdata *conn, int sockindex,
                          char *mem, size_t len, CURLcode *err)
{
  int rc;
  struct ssh_conn *sshc = &conn->proto.sshc;
  word32 offset[2];
  (void)sockindex;

  offset[0] =  (word32)sshc->offset&0xFFFFFFFF;
  offset[1] =  (word32)(sshc->offset>>32)&0xFFFFFFFF;

  rc = wolfSSH_SFTP_SendReadPacket(sshc->ssh_session, sshc->handle,
                                   sshc->handleSz,
                                   &offset[0],
                                   (byte *)mem, (word32)len);
  if(rc == WS_FATAL_ERROR)
    rc = wolfSSH_get_error(sshc->ssh_session);
  if(rc == WS_WANT_READ) {
    conn->waitfor = KEEP_RECV;
    *err = CURLE_AGAIN;
    return -1;
  }
  else if(rc == WS_WANT_WRITE) {
    conn->waitfor = KEEP_SEND;
    *err = CURLE_AGAIN;
    return -1;
  }

  DEBUGASSERT(rc <= (int)len);

  if(rc < 0) {
    failf(conn->data, "wolfSSH_SFTP_SendReadPacket returned %d\n", rc);
    return -1;
  }
  sshc->offset += len;

  return (ssize_t)rc;
}

/*
 * SSH setup and connection
 */
static CURLcode wssh_setup_connection(struct connectdata *conn)
{
  struct SSHPROTO *ssh;

  conn->data->req.protop = ssh = calloc(1, sizeof(struct SSHPROTO));
  if(!ssh)
    return CURLE_OUT_OF_MEMORY;

  return CURLE_OK;
}

static Curl_recv wscp_recv, wsftp_recv;
static Curl_send wscp_send, wsftp_send;

static int userauth(byte authtype,
                    WS_UserAuthData* authdata,
                    void *ctx)
{
  struct connectdata *conn = ctx;
  DEBUGF(infof(conn->data, "wolfssh callback: type %s\n",
               authtype == WOLFSSH_USERAUTH_PASSWORD ? "PASSWORD" :
               "PUBLICCKEY"));
  if(authtype == WOLFSSH_USERAUTH_PASSWORD) {
    authdata->sf.password.password = (byte *)conn->passwd;
    authdata->sf.password.passwordSz = (word32) strlen(conn->passwd);
  }

  return 0;
}

static CURLcode wssh_connect(struct connectdata *conn, bool *done)
{
  struct Curl_easy *data = conn->data;
  struct ssh_conn *sshc;
  curl_socket_t sock = conn->sock[FIRSTSOCKET];
  int rc;

  /* initialize per-handle data if not already */
  if(!data->req.protop)
    wssh_setup_connection(conn);

  /* We default to persistent connections. We set this already in this connect
     function to make the re-use checks properly be able to check this bit. */
  connkeep(conn, "SSH default");

  if(conn->handler->protocol & CURLPROTO_SCP) {
    conn->recv[FIRSTSOCKET] = wscp_recv;
    conn->send[FIRSTSOCKET] = wscp_send;
  }
  else {
    conn->recv[FIRSTSOCKET] = wsftp_recv;
    conn->send[FIRSTSOCKET] = wsftp_send;
  }
  sshc = &conn->proto.sshc;
  sshc->ctx = wolfSSH_CTX_new(WOLFSSH_ENDPOINT_CLIENT, NULL);
  if(!sshc->ctx) {
    failf(data, "No wolfSSH context");
    goto error;
  }

  sshc->ssh_session = wolfSSH_new(sshc->ctx);
  if(sshc->ssh_session == NULL) {
    failf(data, "No wolfSSH session");
    goto error;
  }

  rc = wolfSSH_SetUsername(sshc->ssh_session, conn->user);
  if(rc != WS_SUCCESS) {
    failf(data, "wolfSSH failed to set user name");
    goto error;
  }

  /* set callback for authentication */
  wolfSSH_SetUserAuth(sshc->ctx, userauth);
  wolfSSH_SetUserAuthCtx(sshc->ssh_session, conn);

  rc = wolfSSH_set_fd(sshc->ssh_session, (int)sock);
  if(rc) {
    failf(data, "wolfSSH failed to set socket");
    goto error;
  }

#if 0
  wolfSSH_Debugging_ON();
#endif

  *done = TRUE;
  if(conn->handler->protocol & CURLPROTO_SCP)
    state(conn, SSH_INIT);
  else
    state(conn, SSH_SFTP_INIT);

  return wssh_multi_statemach(conn, done);
  error:
  wolfSSH_free(sshc->ssh_session);
  wolfSSH_CTX_free(sshc->ctx);
  return CURLE_FAILED_INIT;
}

/*
 * wssh_statemach_act() runs the SSH state machine as far as it can without
 * blocking and without reaching the end.  The data the pointer 'block' points
 * to will be set to TRUE if the wolfssh function returns EAGAIN meaning it
 * wants to be called again when the socket is ready
 */

static CURLcode wssh_statemach_act(struct connectdata *conn, bool *block)
{
  CURLcode result = CURLE_OK;
  struct ssh_conn *sshc = &conn->proto.sshc;
  struct Curl_easy *data = conn->data;
  struct SSHPROTO *sftp_scp = data->req.protop;
  WS_SFTPNAME *name;
  int rc = 0;
  *block = FALSE; /* we're not blocking by default */

  do {
    switch(sshc->state) {
    case SSH_INIT:
      state(conn, SSH_S_STARTUP);
      /* FALLTHROUGH */
    case SSH_S_STARTUP:
      rc = wolfSSH_connect(sshc->ssh_session);
      if(rc != WS_SUCCESS)
        rc = wolfSSH_get_error(sshc->ssh_session);
      if(rc == WS_WANT_READ) {
        *block = TRUE;
        conn->waitfor = KEEP_RECV;
        return CURLE_OK;
      }
      else if(rc == WS_WANT_WRITE) {
        *block = TRUE;
        conn->waitfor = KEEP_SEND;
        return CURLE_OK;
      }
      else if(rc != WS_SUCCESS) {
        state(conn, SSH_STOP);
        return CURLE_SSH;
      }
      infof(data, "wolfssh connected!\n");
      state(conn, SSH_STOP);
      break;
    case SSH_STOP:
      break;

    case SSH_SFTP_INIT:
      rc = wolfSSH_SFTP_connect(sshc->ssh_session);
      if(rc != WS_SUCCESS)
        rc = wolfSSH_get_error(sshc->ssh_session);
      if(rc == WS_WANT_READ) {
        *block = TRUE;
        conn->waitfor = KEEP_RECV;
        return CURLE_OK;
      }
      else if(rc == WS_WANT_WRITE) {
        *block = TRUE;
        conn->waitfor = KEEP_SEND;
        return CURLE_OK;
      }
      else if(rc == WS_SUCCESS) {
        infof(data, "wolfssh SFTP connected!\n");
        state(conn, SSH_SFTP_REALPATH);
      }
      else {
        failf(data, "wolfssh SFTP connect error %d", rc);
        return CURLE_SSH;
      }
      break;
    case SSH_SFTP_REALPATH:
      name = wolfSSH_SFTP_RealPath(sshc->ssh_session, (char *)".");
      rc = wolfSSH_get_error(sshc->ssh_session);
      if(rc == WS_WANT_READ) {
        *block = TRUE;
        conn->waitfor = KEEP_RECV;
        return CURLE_OK;
      }
      else if(rc == WS_WANT_WRITE) {
        *block = TRUE;
        conn->waitfor = KEEP_SEND;
        return CURLE_OK;
      }
      else if(name && (rc == WS_SUCCESS)) {
        sshc->homedir = malloc(name->fSz + 1);
        if(!sshc->homedir) {
          sshc->actualcode = CURLE_OUT_OF_MEMORY;
        }
        else {
          memcpy(sshc->homedir, name->fName, name->fSz);
          sshc->homedir[name->fSz] = 0;
          infof(data, "wolfssh SFTP realpath succeeded!\n");
        }
        wolfSSH_SFTPNAME_list_free(name);
        state(conn, SSH_STOP);
        return CURLE_OK;
      }
      failf(data, "wolfssh SFTP realpath %d", rc);
      return CURLE_SSH;

    case SSH_SFTP_QUOTE_INIT:
      result = Curl_getworkingpath(conn, sshc->homedir, &sftp_scp->path);
      if(result) {
        sshc->actualcode = result;
        state(conn, SSH_STOP);
        break;
      }

      if(data->set.quote) {
        infof(data, "Sending quote commands\n");
        sshc->quote_item = data->set.quote;
        state(conn, SSH_SFTP_QUOTE);
      }
      else {
        state(conn, SSH_SFTP_GETINFO);
      }
      break;
    case SSH_SFTP_GETINFO:
      if(data->set.get_filetime) {
        state(conn, SSH_SFTP_FILETIME);
      }
      else {
        state(conn, SSH_SFTP_TRANS_INIT);
      }
      break;
    case SSH_SFTP_TRANS_INIT:
      if(data->set.upload)
        state(conn, SSH_SFTP_UPLOAD_INIT);
      else {
        if(sftp_scp->path[strlen(sftp_scp->path)-1] == '/')
          state(conn, SSH_SFTP_READDIR_INIT);
        else
          state(conn, SSH_SFTP_DOWNLOAD_INIT);
      }
      break;
    case SSH_SFTP_UPLOAD_INIT: {
      word32 flags;
      WS_SFTP_FILEATRB createattrs;
      if(data->state.resume_from) {
        WS_SFTP_FILEATRB attrs;
        if(data->state.resume_from < 0) {
          rc = wolfSSH_SFTP_STAT(sshc->ssh_session, sftp_scp->path,
                                 &attrs);
          if(rc != WS_SUCCESS)
            break;

          if(rc) {
            data->state.resume_from = 0;
          }
          else {
            curl_off_t size = ((curl_off_t)attrs.sz[1] << 32) | attrs.sz[0];
            if(size < 0) {
              failf(data, "Bad file size (%" CURL_FORMAT_CURL_OFF_T ")", size);
              return CURLE_BAD_DOWNLOAD_RESUME;
            }
            data->state.resume_from = size;
          }
        }
      }

      if(data->set.ftp_append)
        /* Try to open for append, but create if nonexisting */
        flags = WOLFSSH_FXF_WRITE|WOLFSSH_FXF_CREAT|WOLFSSH_FXF_APPEND;
      else if(data->state.resume_from > 0)
        /* If we have restart position then open for append */
        flags = WOLFSSH_FXF_WRITE|WOLFSSH_FXF_APPEND;
      else
        /* Clear file before writing (normal behaviour) */
        flags = WOLFSSH_FXF_WRITE|WOLFSSH_FXF_CREAT|WOLFSSH_FXF_TRUNC;

      memset(&createattrs, 0, sizeof(createattrs));
      createattrs.per = (word32)data->set.new_file_perms;
      sshc->handleSz = sizeof(sshc->handle);
      rc = wolfSSH_SFTP_Open(sshc->ssh_session, sftp_scp->path,
                             flags, &createattrs,
                             sshc->handle, &sshc->handleSz);
      if(rc == WS_FATAL_ERROR)
        rc = wolfSSH_get_error(sshc->ssh_session);
      if(rc == WS_WANT_READ) {
        *block = TRUE;
        conn->waitfor = KEEP_RECV;
        return CURLE_OK;
      }
      else if(rc == WS_WANT_WRITE) {
        *block = TRUE;
        conn->waitfor = KEEP_SEND;
        return CURLE_OK;
      }
      else if(rc == WS_SUCCESS) {
        infof(data, "wolfssh SFTP open succeeded!\n");
      }
      else {
        failf(data, "wolfssh SFTP upload open failed: %d", rc);
        return CURLE_SSH;
      }
      state(conn, SSH_SFTP_DOWNLOAD_STAT);

      /* If we have a restart point then we need to seek to the correct
         position. */
      if(data->state.resume_from > 0) {
        /* Let's read off the proper amount of bytes from the input. */
        int seekerr = CURL_SEEKFUNC_OK;
        if(conn->seek_func) {
          Curl_set_in_callback(data, true);
          seekerr = conn->seek_func(conn->seek_client, data->state.resume_from,
                                    SEEK_SET);
          Curl_set_in_callback(data, false);
        }

        if(seekerr != CURL_SEEKFUNC_OK) {
          curl_off_t passed = 0;

          if(seekerr != CURL_SEEKFUNC_CANTSEEK) {
            failf(data, "Could not seek stream");
            return CURLE_FTP_COULDNT_USE_REST;
          }
          /* seekerr == CURL_SEEKFUNC_CANTSEEK (can't seek to offset) */
          do {
            size_t readthisamountnow =
              (data->state.resume_from - passed > data->set.buffer_size) ?
              (size_t)data->set.buffer_size :
              curlx_sotouz(data->state.resume_from - passed);

            size_t actuallyread;
            Curl_set_in_callback(data, true);
            actuallyread = data->state.fread_func(data->state.buffer, 1,
                                                  readthisamountnow,
                                                  data->state.in);
            Curl_set_in_callback(data, false);

            passed += actuallyread;
            if((actuallyread == 0) || (actuallyread > readthisamountnow)) {
              /* this checks for greater-than only to make sure that the
                 CURL_READFUNC_ABORT return code still aborts */
              failf(data, "Failed to read data");
              return CURLE_FTP_COULDNT_USE_REST;
            }
          } while(passed < data->state.resume_from);
        }

        /* now, decrease the size of the read */
        if(data->state.infilesize > 0) {
          data->state.infilesize -= data->state.resume_from;
          data->req.size = data->state.infilesize;
          Curl_pgrsSetUploadSize(data, data->state.infilesize);
        }

        sshc->offset += data->state.resume_from;
      }
      if(data->state.infilesize > 0) {
        data->req.size = data->state.infilesize;
        Curl_pgrsSetUploadSize(data, data->state.infilesize);
      }
      /* upload data */
      Curl_setup_transfer(data, -1, -1, FALSE, FIRSTSOCKET);

      /* not set by Curl_setup_transfer to preserve keepon bits */
      conn->sockfd = conn->writesockfd;

      if(result) {
        state(conn, SSH_SFTP_CLOSE);
        sshc->actualcode = result;
      }
      else {
        /* store this original bitmask setup to use later on if we can't
           figure out a "real" bitmask */
        sshc->orig_waitfor = data->req.keepon;

        /* we want to use the _sending_ function even when the socket turns
           out readable as the underlying libssh2 sftp send function will deal
           with both accordingly */
        conn->cselect_bits = CURL_CSELECT_OUT;

        /* since we don't really wait for anything at this point, we want the
           state machine to move on as soon as possible so we set a very short
           timeout here */
        Curl_expire(data, 0, EXPIRE_RUN_NOW);

        state(conn, SSH_STOP);
      }
      break;
    }
    case SSH_SFTP_DOWNLOAD_INIT:
      sshc->handleSz = sizeof(sshc->handle);
      rc = wolfSSH_SFTP_Open(sshc->ssh_session, sftp_scp->path,
                             WOLFSSH_FXF_READ, NULL,
                             sshc->handle, &sshc->handleSz);
      if(rc == WS_FATAL_ERROR)
        rc = wolfSSH_get_error(sshc->ssh_session);
      if(rc == WS_WANT_READ) {
        *block = TRUE;
        conn->waitfor = KEEP_RECV;
        return CURLE_OK;
      }
      else if(rc == WS_WANT_WRITE) {
        *block = TRUE;
        conn->waitfor = KEEP_SEND;
        return CURLE_OK;
      }
      else if(rc == WS_SUCCESS) {
        infof(data, "wolfssh SFTP open succeeded!\n");
        state(conn, SSH_SFTP_DOWNLOAD_STAT);
        return CURLE_OK;
      }

      failf(data, "wolfssh SFTP open failed: %d", rc);
      return CURLE_SSH;

    case SSH_SFTP_DOWNLOAD_STAT: {
      WS_SFTP_FILEATRB attrs;
      curl_off_t size;

      rc = wolfSSH_SFTP_STAT(sshc->ssh_session, sftp_scp->path, &attrs);
      if(rc == WS_FATAL_ERROR)
        rc = wolfSSH_get_error(sshc->ssh_session);
      if(rc == WS_WANT_READ) {
        *block = TRUE;
        conn->waitfor = KEEP_RECV;
        return CURLE_OK;
      }
      else if(rc == WS_WANT_WRITE) {
        *block = TRUE;
        conn->waitfor = KEEP_SEND;
        return CURLE_OK;
      }
      else if(rc == WS_SUCCESS) {
        infof(data, "wolfssh STAT succeeded!\n");
      }
      else {
        failf(data, "wolfssh SFTP open failed: %d", rc);
        data->req.size = -1;
        data->req.maxdownload = -1;
        Curl_pgrsSetDownloadSize(data, -1);
        return CURLE_SSH;
      }

      size = ((curl_off_t)attrs.sz[1] <<32) | attrs.sz[0];

      data->req.size = size;
      data->req.maxdownload = size;
      Curl_pgrsSetDownloadSize(data, size);

      infof(data, "SFTP download %" CURL_FORMAT_CURL_OFF_T " bytes\n", size);

      /* We cannot seek with wolfSSH so resuming and range requests are not
         possible */
      if(conn->data->state.use_range || data->state.resume_from) {
        infof(data, "wolfSSH cannot do range/seek on SFTP\n");
        return CURLE_BAD_DOWNLOAD_RESUME;
      }

      /* Setup the actual download */
      if(data->req.size == 0) {
        /* no data to transfer */
        Curl_setup_transfer(data, -1, -1, FALSE, -1);
        infof(data, "File already completely downloaded\n");
        state(conn, SSH_STOP);
        break;
      }
      Curl_setup_transfer(data, FIRSTSOCKET, data->req.size, FALSE, -1);

      /* not set by Curl_setup_transfer to preserve keepon bits */
      conn->writesockfd = conn->sockfd;

      /* we want to use the _receiving_ function even when the socket turns
         out writableable as the underlying libssh2 recv function will deal
         with both accordingly */
      conn->cselect_bits = CURL_CSELECT_IN;

      if(result) {
        /* this should never occur; the close state should be entered
           at the time the error occurs */
        state(conn, SSH_SFTP_CLOSE);
        sshc->actualcode = result;
      }
      else {
        state(conn, SSH_STOP);
      }
      break;
    }
    case SSH_SFTP_CLOSE:
      if(sshc->handleSz)
        rc = wolfSSH_SFTP_Close(sshc->ssh_session, sshc->handle,
                                sshc->handleSz);
      else
        rc = WS_SUCCESS; /* directory listing */
      if(rc == WS_WANT_READ) {
        *block = TRUE;
        conn->waitfor = KEEP_RECV;
        return CURLE_OK;
      }
      else if(rc == WS_WANT_WRITE) {
        *block = TRUE;
        conn->waitfor = KEEP_SEND;
        return CURLE_OK;
      }
      else if(rc == WS_SUCCESS) {
        state(conn, SSH_STOP);
        return CURLE_OK;
      }

      failf(data, "wolfssh SFTP CLOSE failed: %d", rc);
      return CURLE_SSH;

    case SSH_SFTP_READDIR_INIT:
      Curl_pgrsSetDownloadSize(data, -1);
      if(data->set.opt_no_body) {
        state(conn, SSH_STOP);
        break;
      }
      state(conn, SSH_SFTP_READDIR);
      /* FALLTHROUGH */
    case SSH_SFTP_READDIR:
      name = wolfSSH_SFTP_LS(sshc->ssh_session, sftp_scp->path);
      if(!name)
        rc = wolfSSH_get_error(sshc->ssh_session);
      else
        rc = WS_SUCCESS;

      if(rc == WS_WANT_READ) {
        *block = TRUE;
        conn->waitfor = KEEP_RECV;
        return CURLE_OK;
      }
      else if(rc == WS_WANT_WRITE) {
        *block = TRUE;
        conn->waitfor = KEEP_SEND;
        return CURLE_OK;
      }
      else if(name && (rc == WS_SUCCESS)) {
        WS_SFTPNAME *origname = name;
        result = CURLE_OK;
        while(name) {
          char *line = aprintf("%s\n",
                               data->set.ftp_list_only ?
                               name->fName : name->lName);
          if(line == NULL) {
            state(conn, SSH_SFTP_CLOSE);
            sshc->actualcode = CURLE_OUT_OF_MEMORY;
            break;
          }
          result = Curl_client_write(conn, CLIENTWRITE_BODY,
                                     line, strlen(line));
          free(line);
          if(result) {
            sshc->actualcode = result;
            break;
          }
          name = name->next;
        }
        wolfSSH_SFTPNAME_list_free(origname);
        state(conn, SSH_STOP);
        return result;
      }
      failf(data, "wolfssh SFTP ls failed: %d", rc);
      return CURLE_SSH;

    case SSH_SFTP_SHUTDOWN:
      Curl_safefree(sshc->homedir);
      wolfSSH_free(sshc->ssh_session);
      wolfSSH_CTX_free(sshc->ctx);
      state(conn, SSH_STOP);
      return CURLE_OK;
    default:
      break;
    }
  } while(!rc && (sshc->state != SSH_STOP));
  return result;
}

/* called repeatedly until done from multi.c */
static CURLcode wssh_multi_statemach(struct connectdata *conn, bool *done)
{
  struct ssh_conn *sshc = &conn->proto.sshc;
  CURLcode result = CURLE_OK;
  bool block; /* we store the status and use that to provide a ssh_getsock()
                 implementation */
  do {
    result = wssh_statemach_act(conn, &block);
    *done = (sshc->state == SSH_STOP) ? TRUE : FALSE;
    /* if there's no error, it isn't done and it didn't EWOULDBLOCK, then
       try again */
    if(*done) {
      DEBUGF(infof(conn->data, "wssh_statemach_act says DONE\n"));
    }
  } while(!result && !*done && !block);

  return result;
}

static
CURLcode wscp_perform(struct connectdata *conn,
                      bool *connected,
                      bool *dophase_done)
{
  (void)conn;
  (void)connected;
  (void)dophase_done;
  return CURLE_OK;
}

static
CURLcode wsftp_perform(struct connectdata *conn,
                       bool *connected,
                       bool *dophase_done)
{
  CURLcode result = CURLE_OK;

  DEBUGF(infof(conn->data, "DO phase starts\n"));

  *dophase_done = FALSE; /* not done yet */

  /* start the first command in the DO phase */
  state(conn, SSH_SFTP_QUOTE_INIT);

  /* run the state-machine */
  result = wssh_multi_statemach(conn, dophase_done);

  *connected = conn->bits.tcpconnect[FIRSTSOCKET];

  if(*dophase_done) {
    DEBUGF(infof(conn->data, "DO phase is complete\n"));
  }

  return result;
}

/*
 * The DO function is generic for both protocols.
 */
static CURLcode wssh_do(struct connectdata *conn, bool *done)
{
  CURLcode result;
  bool connected = 0;
  struct Curl_easy *data = conn->data;
  struct ssh_conn *sshc = &conn->proto.sshc;

  *done = FALSE; /* default to false */
  data->req.size = -1; /* make sure this is unknown at this point */
  sshc->actualcode = CURLE_OK; /* reset error code */
  sshc->secondCreateDirs = 0;   /* reset the create dir attempt state
                                   variable */

  Curl_pgrsSetUploadCounter(data, 0);
  Curl_pgrsSetDownloadCounter(data, 0);
  Curl_pgrsSetUploadSize(data, -1);
  Curl_pgrsSetDownloadSize(data, -1);

  if(conn->handler->protocol & CURLPROTO_SCP)
    result = wscp_perform(conn, &connected,  done);
  else
    result = wsftp_perform(conn, &connected,  done);

  return result;
}

static CURLcode wssh_block_statemach(struct connectdata *conn,
                                    bool disconnect)
{
  struct ssh_conn *sshc = &conn->proto.sshc;
  CURLcode result = CURLE_OK;
  struct Curl_easy *data = conn->data;

  while((sshc->state != SSH_STOP) && !result) {
    bool block;
    timediff_t left = 1000;
    struct curltime now = Curl_now();

    result = wssh_statemach_act(conn, &block);
    if(result)
      break;

    if(!disconnect) {
      if(Curl_pgrsUpdate(conn))
        return CURLE_ABORTED_BY_CALLBACK;

      result = Curl_speedcheck(data, now);
      if(result)
        break;

      left = Curl_timeleft(data, NULL, FALSE);
      if(left < 0) {
        failf(data, "Operation timed out");
        return CURLE_OPERATION_TIMEDOUT;
      }
    }

    if(!result) {
      int dir = conn->waitfor;
      curl_socket_t sock = conn->sock[FIRSTSOCKET];
      curl_socket_t fd_read = CURL_SOCKET_BAD;
      curl_socket_t fd_write = CURL_SOCKET_BAD;
      if(dir == KEEP_RECV)
        fd_read = sock;
      else if(dir == KEEP_SEND)
        fd_write = sock;

      /* wait for the socket to become ready */
      (void)Curl_socket_check(fd_read, CURL_SOCKET_BAD, fd_write,
                              left>1000?1000:left); /* ignore result */
    }
  }

  return result;
}

/* generic done function for both SCP and SFTP called from their specific
   done functions */
static CURLcode wssh_done(struct connectdata *conn, CURLcode status)
{
  CURLcode result = CURLE_OK;
  struct SSHPROTO *sftp_scp = conn->data->req.protop;

  if(!status) {
    /* run the state-machine */
    result = wssh_block_statemach(conn, FALSE);
  }
  else
    result = status;

  if(sftp_scp)
    Curl_safefree(sftp_scp->path);
  if(Curl_pgrsDone(conn))
    return CURLE_ABORTED_BY_CALLBACK;

  conn->data->req.keepon = 0; /* clear all bits */
  return result;
}

#if 0
static CURLcode wscp_done(struct connectdata *conn,
                         CURLcode code, bool premature)
{
  CURLcode result = CURLE_OK;
  (void)conn;
  (void)code;
  (void)premature;

  return result;
}

static CURLcode wscp_doing(struct connectdata *conn,
                          bool *dophase_done)
{
  CURLcode result = CURLE_OK;
  (void)conn;
  (void)dophase_done;

  return result;
}

static CURLcode wscp_disconnect(struct connectdata *conn, bool dead_connection)
{
  CURLcode result = CURLE_OK;
  (void)conn;
  (void)dead_connection;

  return result;
}
#endif

static CURLcode wsftp_done(struct connectdata *conn,
                          CURLcode code, bool premature)
{
  (void)premature;
  state(conn, SSH_SFTP_CLOSE);

  return wssh_done(conn, code);
}

static CURLcode wsftp_doing(struct connectdata *conn,
                           bool *dophase_done)
{
  CURLcode result = wssh_multi_statemach(conn, dophase_done);

  if(*dophase_done) {
    DEBUGF(infof(conn->data, "DO phase is complete\n"));
  }
  return result;
}

static CURLcode wsftp_disconnect(struct connectdata *conn, bool dead)
{
  CURLcode result = CURLE_OK;
  (void)dead;

  DEBUGF(infof(conn->data, "SSH DISCONNECT starts now\n"));

  if(conn->proto.sshc.ssh_session) {
    /* only if there's a session still around to use! */
    state(conn, SSH_SFTP_SHUTDOWN);
    result = wssh_block_statemach(conn, TRUE);
  }

  DEBUGF(infof(conn->data, "SSH DISCONNECT is done\n"));
  return result;
}

static int wssh_getsock(struct connectdata *conn,
                        curl_socket_t *sock)
{
  return wssh_perform_getsock(conn, sock);
}

static int wssh_perform_getsock(const struct connectdata *conn,
                                curl_socket_t *sock)
{
  int bitmap = GETSOCK_BLANK;
  int dir = conn->waitfor;
  sock[0] = conn->sock[FIRSTSOCKET];

  if(dir == KEEP_RECV)
    bitmap |= GETSOCK_READSOCK(FIRSTSOCKET);
  else if(dir == KEEP_SEND)
    bitmap |= GETSOCK_WRITESOCK(FIRSTSOCKET);

  return bitmap;
}

size_t Curl_ssh_version(char *buffer, size_t buflen)
{
  return msnprintf(buffer, buflen, "wolfssh/%s", LIBWOLFSSH_VERSION_STRING);
}

CURLcode Curl_ssh_init(void)
{
  if(WS_SUCCESS != wolfSSH_Init()) {
    DEBUGF(fprintf(stderr, "Error: wolfSSH_Init failed\n"));
    return CURLE_FAILED_INIT;
  }

  return CURLE_OK;
}
void Curl_ssh_cleanup(void)
{
}

#endif /* USE_WOLFSSH */
Changes to jni/curl/lib/vtls/gtls.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
661
662
663
664
665
666
667




668
669
670
671
672
673
674
    else
      infof(data, "found %d CRL in %s\n",
            rc, SSL_SET_OPTION(CRLfile));
  }

  /* Initialize TLS session as a client */
  init_flags = GNUTLS_CLIENT;





#if defined(GNUTLS_NO_TICKETS)
  /* Disable TLS session tickets */
  init_flags |= GNUTLS_NO_TICKETS;
#endif

  rc = gnutls_init(&BACKEND->session, init_flags);







>
>
>
>







661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
    else
      infof(data, "found %d CRL in %s\n",
            rc, SSL_SET_OPTION(CRLfile));
  }

  /* Initialize TLS session as a client */
  init_flags = GNUTLS_CLIENT;

#if defined(GNUTLS_FORCE_CLIENT_CERT)
  init_flags |= GNUTLS_FORCE_CLIENT_CERT;
#endif

#if defined(GNUTLS_NO_TICKETS)
  /* Disable TLS session tickets */
  init_flags |= GNUTLS_NO_TICKETS;
#endif

  rc = gnutls_init(&BACKEND->session, init_flags);
Changes to jni/curl/lib/vtls/mbedtls.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2010 - 2011, Hoi-Ho Chan, <hoiho.chan@gmail.com>
 * Copyright (C) 2012 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is








|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2010 - 2011, Hoi-Ho Chan, <hoiho.chan@gmail.com>
 * Copyright (C) 2012 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "inet_pton.h"
#include "mbedtls.h"
#include "vtls.h"
#include "parsedate.h"
#include "connect.h" /* for the connect timeout */
#include "select.h"
#include "multiif.h"
#include "polarssl_threadlock.h"

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

struct ssl_backend_data {







|







51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "inet_pton.h"
#include "mbedtls.h"
#include "vtls.h"
#include "parsedate.h"
#include "connect.h" /* for the connect timeout */
#include "select.h"
#include "multiif.h"
#include "mbedtls_threadlock.h"

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

struct ssl_backend_data {
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

static int entropy_init_initialized = 0;

/* start of entropy_init_mutex() */
static void entropy_init_mutex(mbedtls_entropy_context *ctx)
{
  /* lock 0 = entropy_init_mutex() */
  Curl_polarsslthreadlock_lock_function(0);
  if(entropy_init_initialized == 0) {
    mbedtls_entropy_init(ctx);
    entropy_init_initialized = 1;
  }
  Curl_polarsslthreadlock_unlock_function(0);
}
/* end of entropy_init_mutex() */

/* start of entropy_func_mutex() */
static int entropy_func_mutex(void *data, unsigned char *output, size_t len)
{
  int ret;
  /* lock 1 = entropy_func_mutex() */
  Curl_polarsslthreadlock_lock_function(1);
  ret = mbedtls_entropy_func(data, output, len);
  Curl_polarsslthreadlock_unlock_function(1);

  return ret;
}
/* end of entropy_func_mutex() */

#endif /* THREADING_SUPPORT */








|




|








|

|







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

static int entropy_init_initialized = 0;

/* start of entropy_init_mutex() */
static void entropy_init_mutex(mbedtls_entropy_context *ctx)
{
  /* lock 0 = entropy_init_mutex() */
  Curl_mbedtlsthreadlock_lock_function(0);
  if(entropy_init_initialized == 0) {
    mbedtls_entropy_init(ctx);
    entropy_init_initialized = 1;
  }
  Curl_mbedtlsthreadlock_unlock_function(0);
}
/* end of entropy_init_mutex() */

/* start of entropy_func_mutex() */
static int entropy_func_mutex(void *data, unsigned char *output, size_t len)
{
  int ret;
  /* lock 1 = entropy_func_mutex() */
  Curl_mbedtlsthreadlock_lock_function(1);
  ret = mbedtls_entropy_func(data, output, len);
  Curl_mbedtlsthreadlock_unlock_function(1);

  return ret;
}
/* end of entropy_func_mutex() */

#endif /* THREADING_SUPPORT */

1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032

/*
 * return 0 error initializing SSL
 * return 1 SSL initialized successfully
 */
static int Curl_mbedtls_init(void)
{
  return Curl_polarsslthreadlock_thread_setup();
}

static void Curl_mbedtls_cleanup(void)
{
  (void)Curl_polarsslthreadlock_thread_cleanup();
}

static bool Curl_mbedtls_data_pending(const struct connectdata *conn,
                                      int sockindex)
{
  const struct ssl_connect_data *connssl = &conn->ssl[sockindex];
  return mbedtls_ssl_get_bytes_avail(&BACKEND->ssl) != 0;







|




|







1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032

/*
 * return 0 error initializing SSL
 * return 1 SSL initialized successfully
 */
static int Curl_mbedtls_init(void)
{
  return Curl_mbedtlsthreadlock_thread_setup();
}

static void Curl_mbedtls_cleanup(void)
{
  (void)Curl_mbedtlsthreadlock_thread_cleanup();
}

static bool Curl_mbedtls_data_pending(const struct connectdata *conn,
                                      int sockindex)
{
  const struct ssl_connect_data *connssl = &conn->ssl[sockindex];
  return mbedtls_ssl_get_bytes_avail(&BACKEND->ssl) != 0;
Added jni/curl/lib/vtls/mbedtls_threadlock.c.
































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2013 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 2010, 2011, Hoi-Ho Chan, <hoiho.chan@gmail.com>
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/
#include "curl_setup.h"

#if defined(USE_MBEDTLS) &&                                     \
  ((defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)) ||   \
   (defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)))

#if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)
#  include <pthread.h>
#  define MBEDTLS_MUTEX_T pthread_mutex_t
#elif defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)
#  include <process.h>
#  define MBEDTLS_MUTEX_T HANDLE
#endif

#include "mbedtls_threadlock.h"
#include "curl_printf.h"
#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"

/* number of thread locks */
#define NUMT                    2

/* This array will store all of the mutexes available to Mbedtls. */
static MBEDTLS_MUTEX_T *mutex_buf = NULL;

int Curl_mbedtlsthreadlock_thread_setup(void)
{
  int i;

  mutex_buf = calloc(NUMT * sizeof(MBEDTLS_MUTEX_T), 1);
  if(!mutex_buf)
    return 0;     /* error, no number of threads defined */

  for(i = 0;  i < NUMT;  i++) {
    int ret;
#if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)
    ret = pthread_mutex_init(&mutex_buf[i], NULL);
    if(ret)
      return 0; /* pthread_mutex_init failed */
#elif defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)
    mutex_buf[i] = CreateMutex(0, FALSE, 0);
    if(mutex_buf[i] == 0)
      return 0;  /* CreateMutex failed */
#endif /* USE_THREADS_POSIX && HAVE_PTHREAD_H */
  }

  return 1; /* OK */
}

int Curl_mbedtlsthreadlock_thread_cleanup(void)
{
  int i;

  if(!mutex_buf)
    return 0; /* error, no threads locks defined */

  for(i = 0; i < NUMT; i++) {
    int ret;
#if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)
    ret = pthread_mutex_destroy(&mutex_buf[i]);
    if(ret)
      return 0; /* pthread_mutex_destroy failed */
#elif defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)
    ret = CloseHandle(mutex_buf[i]);
    if(!ret)
      return 0; /* CloseHandle failed */
#endif /* USE_THREADS_POSIX && HAVE_PTHREAD_H */
  }
  free(mutex_buf);
  mutex_buf = NULL;

  return 1; /* OK */
}

int Curl_mbedtlsthreadlock_lock_function(int n)
{
  if(n < NUMT) {
    int ret;
#if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)
    ret = pthread_mutex_lock(&mutex_buf[n]);
    if(ret) {
      DEBUGF(fprintf(stderr,
                     "Error: mbedtlsthreadlock_lock_function failed\n"));
      return 0; /* pthread_mutex_lock failed */
    }
#elif defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)
    ret = (WaitForSingleObject(mutex_buf[n], INFINITE) == WAIT_FAILED?1:0);
    if(ret) {
      DEBUGF(fprintf(stderr,
                     "Error: mbedtlsthreadlock_lock_function failed\n"));
      return 0; /* pthread_mutex_lock failed */
    }
#endif /* USE_THREADS_POSIX && HAVE_PTHREAD_H */
  }
  return 1; /* OK */
}

int Curl_mbedtlsthreadlock_unlock_function(int n)
{
  if(n < NUMT) {
    int ret;
#if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)
    ret = pthread_mutex_unlock(&mutex_buf[n]);
    if(ret) {
      DEBUGF(fprintf(stderr,
                     "Error: mbedtlsthreadlock_unlock_function failed\n"));
      return 0; /* pthread_mutex_unlock failed */
    }
#elif defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)
    ret = ReleaseMutex(mutex_buf[n]);
    if(!ret) {
      DEBUGF(fprintf(stderr,
                     "Error: mbedtlsthreadlock_unlock_function failed\n"));
      return 0; /* pthread_mutex_lock failed */
    }
#endif /* USE_THREADS_POSIX && HAVE_PTHREAD_H */
  }
  return 1; /* OK */
}

#endif /* USE_MBEDTLS */
Added jni/curl/lib/vtls/mbedtls_threadlock.h.
































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
#ifndef HEADER_CURL_MBEDTLS_THREADLOCK_H
#define HEADER_CURL_MBEDTLS_THREADLOCK_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2013 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 2010, Hoi-Ho Chan, <hoiho.chan@gmail.com>
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/
#include "curl_setup.h"

#ifdef USE_MBEDTLS

#if (defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)) || \
    (defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H))

int Curl_mbedtlsthreadlock_thread_setup(void);
int Curl_mbedtlsthreadlock_thread_cleanup(void);
int Curl_mbedtlsthreadlock_lock_function(int n);
int Curl_mbedtlsthreadlock_unlock_function(int n);

#else

#define Curl_mbedtlsthreadlock_thread_setup() 1
#define Curl_mbedtlsthreadlock_thread_cleanup() 1
#define Curl_mbedtlsthreadlock_lock_function(x) 1
#define Curl_mbedtlsthreadlock_unlock_function(x) 1

#endif /* USE_THREADS_POSIX || USE_THREADS_WIN32 */

#endif /* USE_MBEDTLS */

#endif /* HEADER_CURL_MBEDTLS_THREADLOCK_H */
Changes to jni/curl/lib/vtls/openssl.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
    }
  }

  /* ... then, TLS max version */
  curl_ssl_version_max = SSL_CONN_CONFIG(version_max);

  /* convert cURL max SSL version option to OpenSSL constant */
  ossl_ssl_version_max = 0;
  switch(curl_ssl_version_max) {
    case CURL_SSLVERSION_MAX_TLSv1_0:
      ossl_ssl_version_max = TLS1_VERSION;
      break;
    case CURL_SSLVERSION_MAX_TLSv1_1:
      ossl_ssl_version_max = TLS1_1_VERSION;
      break;







<







2208
2209
2210
2211
2212
2213
2214

2215
2216
2217
2218
2219
2220
2221
    }
  }

  /* ... then, TLS max version */
  curl_ssl_version_max = SSL_CONN_CONFIG(version_max);

  /* convert cURL max SSL version option to OpenSSL constant */

  switch(curl_ssl_version_max) {
    case CURL_SSLVERSION_MAX_TLSv1_0:
      ossl_ssl_version_max = TLS1_VERSION;
      break;
    case CURL_SSLVERSION_MAX_TLSv1_1:
      ossl_ssl_version_max = TLS1_1_VERSION;
      break;
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
do {                              \
  if(_type->_name) { \
    pubkey_show(data, mem, _num, #_type, #_name, _type->_name); \
  } \
} while(0)
#endif

static int X509V3_ext(struct Curl_easy *data,
                      int certnum,
                      CONST_EXTS STACK_OF(X509_EXTENSION) *exts)
{
  int i;
  size_t j;

  if((int)sk_X509_EXTENSION_num(exts) <= 0)
    /* no extensions, bail out */
    return 1;

  for(i = 0; i < (int)sk_X509_EXTENSION_num(exts); i++) {
    ASN1_OBJECT *obj;
    X509_EXTENSION *ext = sk_X509_EXTENSION_value(exts, i);
    BUF_MEM *biomem;
    char buf[512];
    char *ptr = buf;
    char namebuf[128];
    BIO *bio_out = BIO_new(BIO_s_mem());

    if(!bio_out)
      return 1;

    obj = X509_EXTENSION_get_object(ext);

    asn1_object_dump(obj, namebuf, sizeof(namebuf));

    if(!X509V3_EXT_print(bio_out, ext, 0, 0))
      ASN1_STRING_print(bio_out, (ASN1_STRING *)X509_EXTENSION_get_data(ext));

    BIO_get_mem_ptr(bio_out, &biomem);

    for(j = 0; j < (size_t)biomem->length; j++) {
      const char *sep = "";
      if(biomem->data[j] == '\n') {
        sep = ", ";
        j++; /* skip the newline */
      };
      while((j<(size_t)biomem->length) && (biomem->data[j] == ' '))
        j++;
      if(j<(size_t)biomem->length)
        ptr += msnprintf(ptr, sizeof(buf)-(ptr-buf), "%s%c", sep,
                         biomem->data[j]);
    }

    Curl_ssl_push_certinfo(data, certnum, namebuf, buf);

    BIO_free(bio_out);

  }
  return 0; /* all is fine */
}

#ifdef OPENSSL_IS_BORINGSSL
typedef size_t numcert_t;
#else
typedef int numcert_t;
#endif







|




<



|





<
<




|









|
<
<
<
<
<
<
<
<
|
<
<
<
<
<
<

|
<
<







3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128

3129
3130
3131
3132
3133
3134
3135
3136
3137


3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152








3153






3154
3155


3156
3157
3158
3159
3160
3161
3162
do {                              \
  if(_type->_name) { \
    pubkey_show(data, mem, _num, #_type, #_name, _type->_name); \
  } \
} while(0)
#endif

static void X509V3_ext(struct Curl_easy *data,
                      int certnum,
                      CONST_EXTS STACK_OF(X509_EXTENSION) *exts)
{
  int i;


  if((int)sk_X509_EXTENSION_num(exts) <= 0)
    /* no extensions, bail out */
    return;

  for(i = 0; i < (int)sk_X509_EXTENSION_num(exts); i++) {
    ASN1_OBJECT *obj;
    X509_EXTENSION *ext = sk_X509_EXTENSION_value(exts, i);
    BUF_MEM *biomem;


    char namebuf[128];
    BIO *bio_out = BIO_new(BIO_s_mem());

    if(!bio_out)
      return;

    obj = X509_EXTENSION_get_object(ext);

    asn1_object_dump(obj, namebuf, sizeof(namebuf));

    if(!X509V3_EXT_print(bio_out, ext, 0, 0))
      ASN1_STRING_print(bio_out, (ASN1_STRING *)X509_EXTENSION_get_data(ext));

    BIO_get_mem_ptr(bio_out, &biomem);
    Curl_ssl_push_certinfo_len(data, certnum, namebuf, biomem->data,








                               biomem->length);






    BIO_free(bio_out);
  }


}

#ifdef OPENSSL_IS_BORINGSSL
typedef size_t numcert_t;
#else
typedef int numcert_t;
#endif
Deleted jni/curl/lib/vtls/polarssl.c.
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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2012 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 2010 - 2011, Hoi-Ho Chan, <hoiho.chan@gmail.com>
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

/*
 * Source file for all PolarSSL-specific code for the TLS/SSL layer. No code
 * but vtls.c should ever call or use these functions.
 *
 */

#include "curl_setup.h"

#ifdef USE_POLARSSL
#include <polarssl/net.h>
#include <polarssl/ssl.h>
#include <polarssl/certs.h>
#include <polarssl/x509.h>
#include <polarssl/version.h>
#include <polarssl/sha256.h>

#if POLARSSL_VERSION_NUMBER < 0x01030000
#error too old PolarSSL
#endif

#include <polarssl/error.h>
#include <polarssl/entropy.h>
#include <polarssl/ctr_drbg.h>

#include "urldata.h"
#include "sendf.h"
#include "inet_pton.h"
#include "polarssl.h"
#include "vtls.h"
#include "parsedate.h"
#include "connect.h" /* for the connect timeout */
#include "select.h"
#include "strcase.h"
#include "polarssl_threadlock.h"
#include "multiif.h"
#include "curl_printf.h"
#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"

/* See https://tls.mbed.org/discussions/generic/
   howto-determine-exact-buffer-len-for-mbedtls_pk_write_pubkey_der
*/
#define RSA_PUB_DER_MAX_BYTES   (38 + 2 * POLARSSL_MPI_MAX_SIZE)
#define ECP_PUB_DER_MAX_BYTES   (30 + 2 * POLARSSL_ECP_MAX_BYTES)

#define PUB_DER_MAX_BYTES   (RSA_PUB_DER_MAX_BYTES > ECP_PUB_DER_MAX_BYTES ? \
                             RSA_PUB_DER_MAX_BYTES : ECP_PUB_DER_MAX_BYTES)

struct ssl_backend_data {
  ctr_drbg_context ctr_drbg;
  entropy_context entropy;
  ssl_context ssl;
  int server_fd;
  x509_crt cacert;
  x509_crt clicert;
  x509_crl crl;
  rsa_context rsa;
};

#define BACKEND connssl->backend

/* apply threading? */
#if defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32)
#define THREADING_SUPPORT
#endif

#ifndef POLARSSL_ERROR_C
#define error_strerror(x,y,z)
#endif /* POLARSSL_ERROR_C */


#if defined(THREADING_SUPPORT)
static entropy_context entropy;

static int  entropy_init_initialized  = 0;

/* start of entropy_init_mutex() */
static void entropy_init_mutex(entropy_context *ctx)
{
  /* lock 0 = entropy_init_mutex() */
  Curl_polarsslthreadlock_lock_function(0);
  if(entropy_init_initialized == 0) {
    entropy_init(ctx);
    entropy_init_initialized = 1;
  }
  Curl_polarsslthreadlock_unlock_function(0);
}
/* end of entropy_init_mutex() */

/* start of entropy_func_mutex() */
static int entropy_func_mutex(void *data, unsigned char *output, size_t len)
{
  int ret;
  /* lock 1 = entropy_func_mutex() */
  Curl_polarsslthreadlock_lock_function(1);
  ret = entropy_func(data, output, len);
  Curl_polarsslthreadlock_unlock_function(1);

  return ret;
}
/* end of entropy_func_mutex() */

#endif /* THREADING_SUPPORT */

/* Define this to enable lots of debugging for PolarSSL */
#undef POLARSSL_DEBUG

#ifdef POLARSSL_DEBUG
static void polarssl_debug(void *context, int level, const char *line)
{
  struct Curl_easy *data = NULL;

  if(!context)
    return;

  data = (struct Curl_easy *)context;

  infof(data, "%s", line);
  (void) level;
}
#else
#endif

/* ALPN for http2? */
#ifdef POLARSSL_SSL_ALPN
#  define HAS_ALPN
#endif

static Curl_recv polarssl_recv;
static Curl_send polarssl_send;

static CURLcode polarssl_version_from_curl(int *polarver, long ssl_version)
{
  switch(ssl_version) {
    case CURL_SSLVERSION_TLSv1_0:
      *polarver = SSL_MINOR_VERSION_1;
      return CURLE_OK;
    case CURL_SSLVERSION_TLSv1_1:
      *polarver = SSL_MINOR_VERSION_2;
      return CURLE_OK;
    case CURL_SSLVERSION_TLSv1_2:
      *polarver = SSL_MINOR_VERSION_3;
      return CURLE_OK;
    case CURL_SSLVERSION_TLSv1_3:
      break;
  }
  return CURLE_SSL_CONNECT_ERROR;
}

static CURLcode
set_ssl_version_min_max(struct connectdata *conn, int sockindex)
{
  struct Curl_easy *data = conn->data;
  struct ssl_connect_data* connssl = &conn->ssl[sockindex];
  long ssl_version = SSL_CONN_CONFIG(version);
  long ssl_version_max = SSL_CONN_CONFIG(version_max);
  int ssl_min_ver = SSL_MINOR_VERSION_1;
  int ssl_max_ver = SSL_MINOR_VERSION_1;
  CURLcode result = CURLE_OK;

  switch(ssl_version) {
    case CURL_SSLVERSION_DEFAULT:
    case CURL_SSLVERSION_TLSv1:
      ssl_version = CURL_SSLVERSION_TLSv1_0;
      break;
  }

  switch(ssl_version_max) {
    case CURL_SSLVERSION_MAX_NONE:
    case CURL_SSLVERSION_MAX_DEFAULT:
      ssl_version_max = CURL_SSLVERSION_MAX_TLSv1_2;
      break;
  }

  result = polarssl_version_from_curl(&ssl_min_ver, ssl_version);
  if(result) {
    failf(data, "unsupported min version passed via CURLOPT_SSLVERSION");
    return result;
  }
  result = polarssl_version_from_curl(&ssl_max_ver, ssl_version_max >> 16);
  if(result) {
    failf(data, "unsupported max version passed via CURLOPT_SSLVERSION");
    return result;
  }

  ssl_set_min_version(&BACKEND->ssl, SSL_MAJOR_VERSION_3, ssl_min_ver);
  ssl_set_max_version(&BACKEND->ssl, SSL_MAJOR_VERSION_3, ssl_max_ver);

  return result;
}

static CURLcode
polarssl_connect_step1(struct connectdata *conn,
                       int sockindex)
{
  struct Curl_easy *data = conn->data;
  struct ssl_connect_data* connssl = &conn->ssl[sockindex];
  const char *capath = SSL_CONN_CONFIG(CApath);
  const char * const hostname = SSL_IS_PROXY() ? conn->http_proxy.host.name :
    conn->host.name;
  const long int port = SSL_IS_PROXY() ? conn->port : conn->remote_port;
  int ret = -1;
  char errorbuf[128];
  errorbuf[0] = 0;

  /* PolarSSL only supports SSLv3 and TLSv1 */
  if(SSL_CONN_CONFIG(version) == CURL_SSLVERSION_SSLv2) {
    failf(data, "PolarSSL does not support SSLv2");
    return CURLE_SSL_CONNECT_ERROR;
  }

#ifdef THREADING_SUPPORT
  entropy_init_mutex(&entropy);

  if((ret = ctr_drbg_init(&BACKEND->ctr_drbg, entropy_func_mutex, &entropy,
                          NULL, 0)) != 0) {
    error_strerror(ret, errorbuf, sizeof(errorbuf));
    failf(data, "Failed - PolarSSL: ctr_drbg_init returned (-0x%04X) %s\n",
          -ret, errorbuf);
  }
#else
  entropy_init(&BACKEND->entropy);

  if((ret = ctr_drbg_init(&BACKEND->ctr_drbg, entropy_func, &BACKEND->entropy,
                          NULL, 0)) != 0) {
    error_strerror(ret, errorbuf, sizeof(errorbuf));
    failf(data, "Failed - PolarSSL: ctr_drbg_init returned (-0x%04X) %s\n",
          -ret, errorbuf);
  }
#endif /* THREADING_SUPPORT */

  /* Load the trusted CA */
  memset(&BACKEND->cacert, 0, sizeof(x509_crt));

  if(SSL_CONN_CONFIG(CAfile)) {
    ret = x509_crt_parse_file(&BACKEND->cacert,
                              SSL_CONN_CONFIG(CAfile));

    if(ret<0) {
      error_strerror(ret, errorbuf, sizeof(errorbuf));
      failf(data, "Error reading ca cert file %s - PolarSSL: (-0x%04X) %s",
            SSL_CONN_CONFIG(CAfile), -ret, errorbuf);

      if(SSL_CONN_CONFIG(verifypeer))
        return CURLE_SSL_CACERT_BADFILE;
    }
  }

  if(capath) {
    ret = x509_crt_parse_path(&BACKEND->cacert, capath);

    if(ret<0) {
      error_strerror(ret, errorbuf, sizeof(errorbuf));
      failf(data, "Error reading ca cert path %s - PolarSSL: (-0x%04X) %s",
            capath, -ret, errorbuf);

      if(SSL_CONN_CONFIG(verifypeer))
        return CURLE_SSL_CACERT_BADFILE;
    }
  }

  /* Load the client certificate */
  memset(&BACKEND->clicert, 0, sizeof(x509_crt));

  if(SSL_SET_OPTION(cert)) {
    ret = x509_crt_parse_file(&BACKEND->clicert,
                              SSL_SET_OPTION(cert));

    if(ret) {
      error_strerror(ret, errorbuf, sizeof(errorbuf));
      failf(data, "Error reading client cert file %s - PolarSSL: (-0x%04X) %s",
            SSL_SET_OPTION(cert), -ret, errorbuf);

      return CURLE_SSL_CERTPROBLEM;
    }
  }

  /* Load the client private key */
  if(SSL_SET_OPTION(key)) {
    pk_context pk;
    pk_init(&pk);
    ret = pk_parse_keyfile(&pk, SSL_SET_OPTION(key),
                           SSL_SET_OPTION(key_passwd));
    if(ret == 0 && !pk_can_do(&pk, POLARSSL_PK_RSA))
      ret = POLARSSL_ERR_PK_TYPE_MISMATCH;
    if(ret == 0)
      rsa_copy(&BACKEND->rsa, pk_rsa(pk));
    else
      rsa_free(&BACKEND->rsa);
    pk_free(&pk);

    if(ret) {
      error_strerror(ret, errorbuf, sizeof(errorbuf));
      failf(data, "Error reading private key %s - PolarSSL: (-0x%04X) %s",
            SSL_SET_OPTION(key), -ret, errorbuf);

      return CURLE_SSL_CERTPROBLEM;
    }
  }

  /* Load the CRL */
  memset(&BACKEND->crl, 0, sizeof(x509_crl));

  if(SSL_SET_OPTION(CRLfile)) {
    ret = x509_crl_parse_file(&BACKEND->crl,
                              SSL_SET_OPTION(CRLfile));

    if(ret) {
      error_strerror(ret, errorbuf, sizeof(errorbuf));
      failf(data, "Error reading CRL file %s - PolarSSL: (-0x%04X) %s",
            SSL_SET_OPTION(CRLfile), -ret, errorbuf);

      return CURLE_SSL_CRL_BADFILE;
    }
  }

  infof(data, "PolarSSL: Connecting to %s:%d\n", hostname, port);

  if(ssl_init(&BACKEND->ssl)) {
    failf(data, "PolarSSL: ssl_init failed");
    return CURLE_SSL_CONNECT_ERROR;
  }

  switch(SSL_CONN_CONFIG(version)) {
  case CURL_SSLVERSION_DEFAULT:
  case CURL_SSLVERSION_TLSv1:
    ssl_set_min_version(&BACKEND->ssl, SSL_MAJOR_VERSION_3,
                        SSL_MINOR_VERSION_1);
    break;
  case CURL_SSLVERSION_SSLv3:
    ssl_set_min_version(&BACKEND->ssl, SSL_MAJOR_VERSION_3,
                        SSL_MINOR_VERSION_0);
    ssl_set_max_version(&BACKEND->ssl, SSL_MAJOR_VERSION_3,
                        SSL_MINOR_VERSION_0);
    infof(data, "PolarSSL: Forced min. SSL Version to be SSLv3\n");
    break;
  case CURL_SSLVERSION_TLSv1_0:
  case CURL_SSLVERSION_TLSv1_1:
  case CURL_SSLVERSION_TLSv1_2:
  case CURL_SSLVERSION_TLSv1_3:
    {
      CURLcode result = set_ssl_version_min_max(conn, sockindex);
      if(result != CURLE_OK)
        return result;
      break;
    }
  default:
    failf(data, "Unrecognized parameter passed via CURLOPT_SSLVERSION");
    return CURLE_SSL_CONNECT_ERROR;
  }

  ssl_set_endpoint(&BACKEND->ssl, SSL_IS_CLIENT);
  ssl_set_authmode(&BACKEND->ssl, SSL_VERIFY_OPTIONAL);

  ssl_set_rng(&BACKEND->ssl, ctr_drbg_random,
              &BACKEND->ctr_drbg);
  ssl_set_bio(&BACKEND->ssl,
              net_recv, &conn->sock[sockindex],
              net_send, &conn->sock[sockindex]);

  ssl_set_ciphersuites(&BACKEND->ssl, ssl_list_ciphersuites());

  /* Check if there's a cached ID we can/should use here! */
  if(SSL_SET_OPTION(primary.sessionid)) {
    void *old_session = NULL;

    Curl_ssl_sessionid_lock(conn);
    if(!Curl_ssl_getsessionid(conn, &old_session, NULL, sockindex)) {
      ret = ssl_set_session(&BACKEND->ssl, old_session);
      if(ret) {
        Curl_ssl_sessionid_unlock(conn);
        failf(data, "ssl_set_session returned -0x%x", -ret);
        return CURLE_SSL_CONNECT_ERROR;
      }
      infof(data, "PolarSSL re-using session\n");
    }
    Curl_ssl_sessionid_unlock(conn);
  }

  ssl_set_ca_chain(&BACKEND->ssl,
                   &BACKEND->cacert,
                   &BACKEND->crl,
                   hostname);

  ssl_set_own_cert_rsa(&BACKEND->ssl,
                       &BACKEND->clicert, &BACKEND->rsa);

  if(ssl_set_hostname(&BACKEND->ssl, hostname)) {
    /* ssl_set_hostname() sets the name to use in CN/SAN checks *and* the name
       to set in the SNI extension. So even if curl connects to a host
       specified as an IP address, this function must be used. */
    failf(data, "couldn't set hostname in PolarSSL");
    return CURLE_SSL_CONNECT_ERROR;
  }

#ifdef HAS_ALPN
  if(conn->bits.tls_enable_alpn) {
    static const char *protocols[3];
    int cur = 0;

#ifdef USE_NGHTTP2
    if(data->set.httpversion >= CURL_HTTP_VERSION_2) {
      protocols[cur++] = NGHTTP2_PROTO_VERSION_ID;
      infof(data, "ALPN, offering %s\n", NGHTTP2_PROTO_VERSION_ID);
    }
#endif

    protocols[cur++] = ALPN_HTTP_1_1;
    infof(data, "ALPN, offering %s\n", ALPN_HTTP_1_1);

    protocols[cur] = NULL;

    ssl_set_alpn_protocols(&BACKEND->ssl, protocols);
  }
#endif

#ifdef POLARSSL_DEBUG
  ssl_set_dbg(&BACKEND->ssl, polarssl_debug, data);
#endif

  connssl->connecting_state = ssl_connect_2;

  return CURLE_OK;
}

static CURLcode
polarssl_connect_step2(struct connectdata *conn,
                       int sockindex)
{
  int ret;
  struct Curl_easy *data = conn->data;
  struct ssl_connect_data* connssl = &conn->ssl[sockindex];
  char buffer[1024];
  const char * const pinnedpubkey = SSL_IS_PROXY() ?
            data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY] :
            data->set.str[STRING_SSL_PINNEDPUBLICKEY_ORIG];


  char errorbuf[128];
  errorbuf[0] = 0;

  conn->recv[sockindex] = polarssl_recv;
  conn->send[sockindex] = polarssl_send;

  ret = ssl_handshake(&BACKEND->ssl);

  switch(ret) {
  case 0:
    break;

  case POLARSSL_ERR_NET_WANT_READ:
    connssl->connecting_state = ssl_connect_2_reading;
    return CURLE_OK;

  case POLARSSL_ERR_NET_WANT_WRITE:
    connssl->connecting_state = ssl_connect_2_writing;
    return CURLE_OK;

  default:
    error_strerror(ret, errorbuf, sizeof(errorbuf));
    failf(data, "ssl_handshake returned - PolarSSL: (-0x%04X) %s",
          -ret, errorbuf);
    return CURLE_SSL_CONNECT_ERROR;
  }

  infof(data, "PolarSSL: Handshake complete, cipher is %s\n",
        ssl_get_ciphersuite(&BACKEND->ssl) );

  ret = ssl_get_verify_result(&BACKEND->ssl);

  if(ret && SSL_CONN_CONFIG(verifypeer)) {
    if(ret & BADCERT_EXPIRED)
      failf(data, "Cert verify failed: BADCERT_EXPIRED");

    if(ret & BADCERT_REVOKED) {
      failf(data, "Cert verify failed: BADCERT_REVOKED");
      return CURLE_PEER_FAILED_VERIFICATION;
    }

    if(ret & BADCERT_CN_MISMATCH)
      failf(data, "Cert verify failed: BADCERT_CN_MISMATCH");

    if(ret & BADCERT_NOT_TRUSTED)
      failf(data, "Cert verify failed: BADCERT_NOT_TRUSTED");

    return CURLE_PEER_FAILED_VERIFICATION;
  }

  if(ssl_get_peer_cert(&(BACKEND->ssl))) {
    /* If the session was resumed, there will be no peer certs */
    memset(buffer, 0, sizeof(buffer));

    if(x509_crt_info(buffer, sizeof(buffer), (char *)"* ",
                     ssl_get_peer_cert(&(BACKEND->ssl))) != -1)
      infof(data, "Dumping cert info:\n%s\n", buffer);
  }

  /* adapted from mbedtls.c */
  if(pinnedpubkey) {
    int size;
    CURLcode result;
    x509_crt *p;
    unsigned char pubkey[PUB_DER_MAX_BYTES];
    const x509_crt *peercert;

    peercert = ssl_get_peer_cert(&BACKEND->ssl);

    if(!peercert || !peercert->raw.p || !peercert->raw.len) {
      failf(data, "Failed due to missing peer certificate");
      return CURLE_SSL_PINNEDPUBKEYNOTMATCH;
    }

    p = calloc(1, sizeof(*p));

    if(!p)
      return CURLE_OUT_OF_MEMORY;

    x509_crt_init(p);

    /* Make a copy of our const peercert because pk_write_pubkey_der
       needs a non-const key, for now.
       https://github.com/ARMmbed/mbedtls/issues/396 */
    if(x509_crt_parse_der(p, peercert->raw.p, peercert->raw.len)) {
      failf(data, "Failed copying peer certificate");
      x509_crt_free(p);
      free(p);
      return CURLE_SSL_PINNEDPUBKEYNOTMATCH;
    }

    size = pk_write_pubkey_der(&p->pk, pubkey, PUB_DER_MAX_BYTES);

    if(size <= 0) {
      failf(data, "Failed copying public key from peer certificate");
      x509_crt_free(p);
      free(p);
      return CURLE_SSL_PINNEDPUBKEYNOTMATCH;
    }

    /* pk_write_pubkey_der writes data at the end of the buffer. */
    result = Curl_pin_peer_pubkey(data,
                                  pinnedpubkey,
                                  &pubkey[PUB_DER_MAX_BYTES - size], size);
    if(result) {
      x509_crt_free(p);
      free(p);
      return result;
    }

    x509_crt_free(p);
    free(p);
  }

#ifdef HAS_ALPN
  if(conn->bits.tls_enable_alpn) {
    const char *next_protocol = ssl_get_alpn_protocol(&BACKEND->ssl);

    if(next_protocol != NULL) {
      infof(data, "ALPN, server accepted to use %s\n", next_protocol);

#ifdef USE_NGHTTP2
      if(!strncmp(next_protocol, NGHTTP2_PROTO_VERSION_ID,
                  NGHTTP2_PROTO_VERSION_ID_LEN)) {
        conn->negnpn = CURL_HTTP_VERSION_2;
      }
      else
#endif
        if(!strncmp(next_protocol, ALPN_HTTP_1_1, ALPN_HTTP_1_1_LENGTH)) {
          conn->negnpn = CURL_HTTP_VERSION_1_1;
        }
    }
    else
      infof(data, "ALPN, server did not agree to a protocol\n");
    Curl_multiuse_state(conn, conn->negnpn == CURL_HTTP_VERSION_2 ?
                        BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
  }
#endif

  connssl->connecting_state = ssl_connect_3;
  infof(data, "SSL connected\n");

  return CURLE_OK;
}

static CURLcode
polarssl_connect_step3(struct connectdata *conn,
                       int sockindex)
{
  CURLcode retcode = CURLE_OK;
  struct ssl_connect_data *connssl = &conn->ssl[sockindex];
  struct Curl_easy *data = conn->data;

  DEBUGASSERT(ssl_connect_3 == connssl->connecting_state);

  if(SSL_SET_OPTION(primary.sessionid)) {
    int ret;
    ssl_session *our_ssl_sessionid;
    void *old_ssl_sessionid = NULL;

    our_ssl_sessionid = calloc(1, sizeof(ssl_session));
    if(!our_ssl_sessionid)
      return CURLE_OUT_OF_MEMORY;

    ret = ssl_get_session(&BACKEND->ssl, our_ssl_sessionid);
    if(ret) {
      failf(data, "ssl_get_session returned -0x%x", -ret);
      return CURLE_SSL_CONNECT_ERROR;
    }

    /* If there's already a matching session in the cache, delete it */
    Curl_ssl_sessionid_lock(conn);
    if(!Curl_ssl_getsessionid(conn, &old_ssl_sessionid, NULL, sockindex))
      Curl_ssl_delsessionid(conn, old_ssl_sessionid);

    retcode = Curl_ssl_addsessionid(conn, our_ssl_sessionid, 0, sockindex);
    Curl_ssl_sessionid_unlock(conn);
    if(retcode) {
      free(our_ssl_sessionid);
      failf(data, "failed to store ssl session");
      return retcode;
    }
  }

  connssl->connecting_state = ssl_connect_done;

  return CURLE_OK;
}

static ssize_t polarssl_send(struct connectdata *conn,
                             int sockindex,
                             const void *mem,
                             size_t len,
                             CURLcode *curlcode)
{
  struct ssl_connect_data *connssl = &conn->ssl[sockindex];
  int ret = -1;

  ret = ssl_write(&BACKEND->ssl,
                  (unsigned char *)mem, len);

  if(ret < 0) {
    *curlcode = (ret == POLARSSL_ERR_NET_WANT_WRITE) ?
      CURLE_AGAIN : CURLE_SEND_ERROR;
    ret = -1;
  }

  return ret;
}

static void Curl_polarssl_close(struct connectdata *conn, int sockindex)
{
  struct ssl_connect_data *connssl = &conn->ssl[sockindex];
  rsa_free(&BACKEND->rsa);
  x509_crt_free(&BACKEND->clicert);
  x509_crt_free(&BACKEND->cacert);
  x509_crl_free(&BACKEND->crl);
  ssl_free(&BACKEND->ssl);
}

static ssize_t polarssl_recv(struct connectdata *conn,
                             int num,
                             char *buf,
                             size_t buffersize,
                             CURLcode *curlcode)
{
  struct ssl_connect_data *connssl = &conn->ssl[num];
  int ret = -1;
  ssize_t len = -1;

  memset(buf, 0, buffersize);
  ret = ssl_read(&BACKEND->ssl, (unsigned char *)buf, buffersize);

  if(ret <= 0) {
    if(ret == POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY)
      return 0;

    *curlcode = (ret == POLARSSL_ERR_NET_WANT_READ) ?
      CURLE_AGAIN : CURLE_RECV_ERROR;
    return -1;
  }

  len = ret;

  return len;
}

static void Curl_polarssl_session_free(void *ptr)
{
  ssl_session_free(ptr);
  free(ptr);
}

/* 1.3.10 was the first rebranded version. All new releases (in 1.3 branch and
   higher) will be mbed TLS branded.. */

static size_t Curl_polarssl_version(char *buffer, size_t size)
{
  unsigned int version = version_get_number();
  return msnprintf(buffer, size, "%s/%d.%d.%d",
                   version >= 0x01030A00?"mbedTLS":"PolarSSL",
                   version>>24, (version>>16)&0xff, (version>>8)&0xff);
}

static CURLcode
polarssl_connect_common(struct connectdata *conn,
                        int sockindex,
                        bool nonblocking,
                        bool *done)
{
  CURLcode result;
  struct Curl_easy *data = conn->data;
  struct ssl_connect_data *connssl = &conn->ssl[sockindex];
  curl_socket_t sockfd = conn->sock[sockindex];
  timediff_t timeout_ms;
  int what;

  /* check if the connection has already been established */
  if(ssl_connection_complete == connssl->state) {
    *done = TRUE;
    return CURLE_OK;
  }

  if(ssl_connect_1 == connssl->connecting_state) {
    /* Find out how much more time we're allowed */
    timeout_ms = Curl_timeleft(data, NULL, TRUE);

    if(timeout_ms < 0) {
      /* no need to continue if time already is up */
      failf(data, "SSL connection timeout");
      return CURLE_OPERATION_TIMEDOUT;
    }

    result = polarssl_connect_step1(conn, sockindex);
    if(result)
      return result;
  }

  while(ssl_connect_2 == connssl->connecting_state ||
        ssl_connect_2_reading == connssl->connecting_state ||
        ssl_connect_2_writing == connssl->connecting_state) {

    /* check allowed time left */
    timeout_ms = Curl_timeleft(data, NULL, TRUE);

    if(timeout_ms < 0) {
      /* no need to continue if time already is up */
      failf(data, "SSL connection timeout");
      return CURLE_OPERATION_TIMEDOUT;
    }

    /* if ssl is expecting something, check if it's available. */
    if(connssl->connecting_state == ssl_connect_2_reading ||
       connssl->connecting_state == ssl_connect_2_writing) {

      curl_socket_t writefd = ssl_connect_2_writing ==
        connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
      curl_socket_t readfd = ssl_connect_2_reading ==
        connssl->connecting_state?sockfd:CURL_SOCKET_BAD;

      what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd,
                               nonblocking?0:(time_t)timeout_ms);
      if(what < 0) {
        /* fatal error */
        failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
        return CURLE_SSL_CONNECT_ERROR;
      }
      else if(0 == what) {
        if(nonblocking) {
          *done = FALSE;
          return CURLE_OK;
        }
        else {
          /* timeout */
          failf(data, "SSL connection timeout");
          return CURLE_OPERATION_TIMEDOUT;
        }
      }
      /* socket is readable or writable */
    }

    /* Run transaction, and return to the caller if it failed or if
     * this connection is part of a multi handle and this loop would
     * execute again. This permits the owner of a multi handle to
     * abort a connection attempt before step2 has completed while
     * ensuring that a client using select() or epoll() will always
     * have a valid fdset to wait on.
     */
    result = polarssl_connect_step2(conn, sockindex);
    if(result || (nonblocking &&
                  (ssl_connect_2 == connssl->connecting_state ||
                   ssl_connect_2_reading == connssl->connecting_state ||
                   ssl_connect_2_writing == connssl->connecting_state)))
      return result;

  } /* repeat step2 until all transactions are done. */

  if(ssl_connect_3 == connssl->connecting_state) {
    result = polarssl_connect_step3(conn, sockindex);
    if(result)
      return result;
  }

  if(ssl_connect_done == connssl->connecting_state) {
    connssl->state = ssl_connection_complete;
    conn->recv[sockindex] = polarssl_recv;
    conn->send[sockindex] = polarssl_send;
    *done = TRUE;
  }
  else
    *done = FALSE;

  /* Reset our connect state machine */
  connssl->connecting_state = ssl_connect_1;

  return CURLE_OK;
}

static CURLcode Curl_polarssl_connect_nonblocking(struct connectdata *conn,
                                                  int sockindex, bool *done)
{
  return polarssl_connect_common(conn, sockindex, TRUE, done);
}


static CURLcode Curl_polarssl_connect(struct connectdata *conn, int sockindex)
{
  CURLcode result;
  bool done = FALSE;

  result = polarssl_connect_common(conn, sockindex, FALSE, &done);
  if(result)
    return result;

  DEBUGASSERT(done);

  return CURLE_OK;
}

/*
 * return 0 error initializing SSL
 * return 1 SSL initialized successfully
 */
static int Curl_polarssl_init(void)
{
  return Curl_polarsslthreadlock_thread_setup();
}

static void Curl_polarssl_cleanup(void)
{
  (void)Curl_polarsslthreadlock_thread_cleanup();
}

static bool Curl_polarssl_data_pending(const struct connectdata *conn,
                                       int sockindex)
{
  const struct ssl_connect_data *connssl = &conn->ssl[sockindex];
  return ssl_get_bytes_avail(&BACKEND->ssl) != 0;
}

static CURLcode Curl_polarssl_sha256sum(const unsigned char *input,
                                    size_t inputlen,
                                    unsigned char *sha256sum,
                                    size_t sha256len UNUSED_PARAM)
{
  (void)sha256len;
  sha256(input, inputlen, sha256sum, 0);
  return CURLE_OK;
}

static void *Curl_polarssl_get_internals(struct ssl_connect_data *connssl,
                                         CURLINFO info UNUSED_PARAM)
{
  (void)info;
  return &BACKEND->ssl;
}

const struct Curl_ssl Curl_ssl_polarssl = {
  { CURLSSLBACKEND_POLARSSL, "polarssl" }, /* info */

  SSLSUPP_CA_PATH |
  SSLSUPP_PINNEDPUBKEY,

  sizeof(struct ssl_backend_data),

  Curl_polarssl_init,                /* init */
  Curl_polarssl_cleanup,             /* cleanup */
  Curl_polarssl_version,             /* version */
  Curl_none_check_cxn,               /* check_cxn */
  Curl_none_shutdown,                /* shutdown */
  Curl_polarssl_data_pending,        /* data_pending */
  /* This might cause libcurl to use a weeker random! */
  Curl_none_random,                  /* random */
  Curl_none_cert_status_request,     /* cert_status_request */
  Curl_polarssl_connect,             /* connect */
  Curl_polarssl_connect_nonblocking, /* connect_nonblocking */
  Curl_polarssl_get_internals,       /* get_internals */
  Curl_polarssl_close,               /* close_one */
  Curl_none_close_all,               /* close_all */
  Curl_polarssl_session_free,        /* session_free */
  Curl_none_set_engine,              /* set_engine */
  Curl_none_set_engine_default,      /* set_engine_default */
  Curl_none_engines_list,            /* engines_list */
  Curl_none_false_start,             /* false_start */
  Curl_none_md5sum,                  /* md5sum */
  Curl_polarssl_sha256sum            /* sha256sum */
};

#endif /* USE_POLARSSL */
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<






































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































Deleted jni/curl/lib/vtls/polarssl.h.
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
#ifndef HEADER_CURL_POLARSSL_H
#define HEADER_CURL_POLARSSL_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2012 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 2010, Hoi-Ho Chan, <hoiho.chan@gmail.com>
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/
#include "curl_setup.h"

#ifdef USE_POLARSSL

extern const struct Curl_ssl Curl_ssl_polarssl;

#endif /* USE_POLARSSL */
#endif /* HEADER_CURL_POLARSSL_H */
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
































































Deleted jni/curl/lib/vtls/polarssl_threadlock.c.
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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2013 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 2010, 2011, Hoi-Ho Chan, <hoiho.chan@gmail.com>
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/
#include "curl_setup.h"

#if (defined(USE_POLARSSL) || defined(USE_MBEDTLS)) && \
    ((defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)) || \
     (defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)))

#if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)
#  include <pthread.h>
#  define POLARSSL_MUTEX_T pthread_mutex_t
#elif defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)
#  include <process.h>
#  define POLARSSL_MUTEX_T HANDLE
#endif

#include "polarssl_threadlock.h"
#include "curl_printf.h"
#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"

/* number of thread locks */
#define NUMT                    2

/* This array will store all of the mutexes available to PolarSSL. */
static POLARSSL_MUTEX_T *mutex_buf = NULL;

int Curl_polarsslthreadlock_thread_setup(void)
{
  int i;

  mutex_buf = calloc(NUMT * sizeof(POLARSSL_MUTEX_T), 1);
  if(!mutex_buf)
    return 0;     /* error, no number of threads defined */

  for(i = 0;  i < NUMT;  i++) {
    int ret;
#if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)
    ret = pthread_mutex_init(&mutex_buf[i], NULL);
    if(ret)
      return 0; /* pthread_mutex_init failed */
#elif defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)
    mutex_buf[i] = CreateMutex(0, FALSE, 0);
    if(mutex_buf[i] == 0)
      return 0;  /* CreateMutex failed */
#endif /* USE_THREADS_POSIX && HAVE_PTHREAD_H */
  }

  return 1; /* OK */
}

int Curl_polarsslthreadlock_thread_cleanup(void)
{
  int i;

  if(!mutex_buf)
    return 0; /* error, no threads locks defined */

  for(i = 0; i < NUMT; i++) {
    int ret;
#if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)
    ret = pthread_mutex_destroy(&mutex_buf[i]);
    if(ret)
      return 0; /* pthread_mutex_destroy failed */
#elif defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)
    ret = CloseHandle(mutex_buf[i]);
    if(!ret)
      return 0; /* CloseHandle failed */
#endif /* USE_THREADS_POSIX && HAVE_PTHREAD_H */
  }
  free(mutex_buf);
  mutex_buf = NULL;

  return 1; /* OK */
}

int Curl_polarsslthreadlock_lock_function(int n)
{
  if(n < NUMT) {
    int ret;
#if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)
    ret = pthread_mutex_lock(&mutex_buf[n]);
    if(ret) {
      DEBUGF(fprintf(stderr,
                     "Error: polarsslthreadlock_lock_function failed\n"));
      return 0; /* pthread_mutex_lock failed */
    }
#elif defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)
    ret = (WaitForSingleObject(mutex_buf[n], INFINITE) == WAIT_FAILED?1:0);
    if(ret) {
      DEBUGF(fprintf(stderr,
                     "Error: polarsslthreadlock_lock_function failed\n"));
      return 0; /* pthread_mutex_lock failed */
    }
#endif /* USE_THREADS_POSIX && HAVE_PTHREAD_H */
  }
  return 1; /* OK */
}

int Curl_polarsslthreadlock_unlock_function(int n)
{
  if(n < NUMT) {
    int ret;
#if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)
    ret = pthread_mutex_unlock(&mutex_buf[n]);
    if(ret) {
      DEBUGF(fprintf(stderr,
                     "Error: polarsslthreadlock_unlock_function failed\n"));
      return 0; /* pthread_mutex_unlock failed */
    }
#elif defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)
    ret = ReleaseMutex(mutex_buf[n]);
    if(!ret) {
      DEBUGF(fprintf(stderr,
                     "Error: polarsslthreadlock_unlock_function failed\n"));
      return 0; /* pthread_mutex_lock failed */
    }
#endif /* USE_THREADS_POSIX && HAVE_PTHREAD_H */
  }
  return 1; /* OK */
}

#endif /* USE_POLARSSL || USE_MBEDTLS */
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
































































































































































































































































































Deleted jni/curl/lib/vtls/polarssl_threadlock.h.
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
#ifndef HEADER_CURL_POLARSSL_THREADLOCK_H
#define HEADER_CURL_POLARSSL_THREADLOCK_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2013 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 2010, Hoi-Ho Chan, <hoiho.chan@gmail.com>
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/
#include "curl_setup.h"

#if (defined USE_POLARSSL) || (defined USE_MBEDTLS)

#if (defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)) || \
    (defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H))

int Curl_polarsslthreadlock_thread_setup(void);
int Curl_polarsslthreadlock_thread_cleanup(void);
int Curl_polarsslthreadlock_lock_function(int n);
int Curl_polarsslthreadlock_unlock_function(int n);

#else

#define Curl_polarsslthreadlock_thread_setup() 1
#define Curl_polarsslthreadlock_thread_cleanup() 1
#define Curl_polarsslthreadlock_lock_function(x) 1
#define Curl_polarsslthreadlock_unlock_function(x) 1

#endif /* USE_THREADS_POSIX || USE_THREADS_WIN32 */

#endif /* USE_POLARSSL */

#endif /* HEADER_CURL_POLARSSL_THREADLOCK_H */
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
































































































Changes to jni/curl/lib/vtls/schannel.c.
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
  if(BACKEND->use_alpn) {
    int cur = 0;
    int list_start_index = 0;
    unsigned int *extension_len = NULL;
    unsigned short* list_len = NULL;

    /* The first four bytes will be an unsigned int indicating number
       of bytes of data in the rest of the the buffer. */
    extension_len = (unsigned int *)(&alpn_buffer[cur]);
    cur += sizeof(unsigned int);

    /* The next four bytes are an indicator that this buffer will contain
       ALPN data, as opposed to NPN, for example. */
    *(unsigned int *)&alpn_buffer[cur] =
      SecApplicationProtocolNegotiationExt_ALPN;







|







714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
  if(BACKEND->use_alpn) {
    int cur = 0;
    int list_start_index = 0;
    unsigned int *extension_len = NULL;
    unsigned short* list_len = NULL;

    /* The first four bytes will be an unsigned int indicating number
       of bytes of data in the rest of the buffer. */
    extension_len = (unsigned int *)(&alpn_buffer[cur]);
    cur += sizeof(unsigned int);

    /* The next four bytes are an indicator that this buffer will contain
       ALPN data, as opposed to NPN, for example. */
    *(unsigned int *)&alpn_buffer[cur] =
      SecApplicationProtocolNegotiationExt_ALPN;
Changes to jni/curl/lib/vtls/schannel_verify.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2012 - 2016, Marc Hoersken, <info@marc-hoersken.de>
 * Copyright (C) 2012, Mark Salisbury, <mark.salisbury@hp.com>
 * Copyright (C) 2012 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2012 - 2016, Marc Hoersken, <info@marc-hoersken.de>
 * Copyright (C) 2012, Mark Salisbury, <mark.salisbury@hp.com>
 * Copyright (C) 2012 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
    CloseHandle(ca_file_handle);
  }
  Curl_safefree(ca_file_buffer);
  Curl_unicodefree(ca_file_tstr);

  return result;
}
































































































































static CURLcode verify_host(struct Curl_easy *data,
                            CERT_CONTEXT *pCertContextServer,
                            const char * const conn_hostname)
{
  CURLcode result = CURLE_PEER_FAILED_VERIFICATION;
  TCHAR *cert_hostname_buff = NULL;
  size_t cert_hostname_buff_index = 0;
  DWORD len = 0;
  DWORD actual_len = 0;

  /* CertGetNameString will provide the 8-bit character string without
   * any decoding */
  DWORD name_flags = CERT_NAME_DISABLE_IE4_UTF8_FLAG;

#ifdef CERT_NAME_SEARCH_ALL_NAMES_FLAG
  name_flags |= CERT_NAME_SEARCH_ALL_NAMES_FLAG;
#endif

  /* Determine the size of the string needed for the cert hostname */
  len = CertGetNameString(pCertContextServer,
                          CERT_NAME_DNS_TYPE,
                          name_flags,
                          NULL,
                          NULL,
                          0);
  if(len == 0) {
    failf(data,
          "schannel: CertGetNameString() returned no "
          "certificate name information");
    result = CURLE_PEER_FAILED_VERIFICATION;
    goto cleanup;
  }

  /* CertGetNameString guarantees that the returned name will not contain
   * embedded null bytes. This appears to be undocumented behavior.
   */
  cert_hostname_buff = (LPTSTR)malloc(len * sizeof(TCHAR));
  if(!cert_hostname_buff) {
    result = CURLE_OUT_OF_MEMORY;
    goto cleanup;
  }
  actual_len = CertGetNameString(pCertContextServer,
                                 CERT_NAME_DNS_TYPE,
                                 name_flags,
                                 NULL,
                                 (LPTSTR) cert_hostname_buff,
                                 len);

  /* Sanity check */
  if(actual_len != len) {
    failf(data,
          "schannel: CertGetNameString() returned certificate "
          "name information of unexpected size");
    result = CURLE_PEER_FAILED_VERIFICATION;







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>











<
<
<
<
<
<
<
<

|
<
<
<
<
<
















|
<
<
<
|
<







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
    CloseHandle(ca_file_handle);
  }
  Curl_safefree(ca_file_buffer);
  Curl_unicodefree(ca_file_tstr);

  return result;
}

/*
 * Returns the number of characters necessary to populate all the host_names.
 * If host_names is not NULL, populate it with all the host names. Each string
 * in the host_names is null-terminated and the last string is double
 * null-terminated. If no DNS names are found, a single null-terminated empty
 * string is returned.
 */
static DWORD cert_get_name_string(struct Curl_easy *data,
                                  CERT_CONTEXT *cert_context,
                                  LPTSTR host_names,
                                  DWORD length)
{
  DWORD actual_length = 0;
  BOOL compute_content = FALSE;
  CERT_INFO *cert_info = NULL;
  CERT_EXTENSION *extension = NULL;
  CRYPT_DECODE_PARA decode_para = {0, 0, 0};
  CERT_ALT_NAME_INFO *alt_name_info = NULL;
  DWORD alt_name_info_size = 0;
  BOOL ret_val = FALSE;
  LPTSTR current_pos = NULL;
  DWORD i;

  /* CERT_NAME_SEARCH_ALL_NAMES_FLAG is available from Windows 8 onwards. */
  if(Curl_verify_windows_version(6, 2, PLATFORM_WINNT,
                                 VERSION_GREATER_THAN_EQUAL)) {
#ifdef CERT_NAME_SEARCH_ALL_NAMES_FLAG
    /* CertGetNameString will provide the 8-bit character string without
     * any decoding */
    DWORD name_flags =
      CERT_NAME_DISABLE_IE4_UTF8_FLAG | CERT_NAME_SEARCH_ALL_NAMES_FLAG;
    actual_length = CertGetNameString(cert_context,
                                      CERT_NAME_DNS_TYPE,
                                      name_flags,
                                      NULL,
                                      host_names,
                                      length);
    return actual_length;
#endif
  }

  compute_content = host_names != NULL && length != 0;

  /* Initialize default return values. */
  actual_length = 1;
  if(compute_content) {
    *host_names = '\0';
  }

  if(!cert_context) {
    failf(data, "schannel: Null certificate context.");
    return actual_length;
  }

  cert_info = cert_context->pCertInfo;
  if(!cert_info) {
    failf(data, "schannel: Null certificate info.");
    return actual_length;
  }

  extension = CertFindExtension(szOID_SUBJECT_ALT_NAME2,
                                cert_info->cExtension,
                                cert_info->rgExtension);
  if(!extension) {
    failf(data, "schannel: CertFindExtension() returned no extension.");
    return actual_length;
  }

  decode_para.cbSize  =  sizeof(CRYPT_DECODE_PARA);

  ret_val =
    CryptDecodeObjectEx(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
                        szOID_SUBJECT_ALT_NAME2,
                        extension->Value.pbData,
                        extension->Value.cbData,
                        CRYPT_DECODE_ALLOC_FLAG | CRYPT_DECODE_NOCOPY_FLAG,
                        &decode_para,
                        &alt_name_info,
                        &alt_name_info_size);
  if(!ret_val) {
    failf(data,
          "schannel: CryptDecodeObjectEx() returned no alternate name "
          "information.");
    return actual_length;
  }

  current_pos = host_names;

  /* Iterate over the alternate names and populate host_names. */
  for(i = 0; i < alt_name_info->cAltEntry; i++) {
    const CERT_ALT_NAME_ENTRY *entry = &alt_name_info->rgAltEntry[i];
    wchar_t *dns_w = NULL;
    size_t current_length = 0;

    if(entry->dwAltNameChoice != CERT_ALT_NAME_DNS_NAME) {
      continue;
    }
    if(entry->pwszDNSName == NULL) {
      infof(data, "schannel: Empty DNS name.");
      continue;
    }
    current_length = wcslen(entry->pwszDNSName) + 1;
    if(!compute_content) {
      actual_length += (DWORD)current_length;
      continue;
    }
    /* Sanity check to prevent buffer overrun. */
    if((actual_length + current_length) > length) {
      failf(data, "schannel: Not enough memory to list all host names.");
      break;
    }
    dns_w = entry->pwszDNSName;
    /* pwszDNSName is in ia5 string format and hence doesn't contain any
     * non-ascii characters. */
    while(*dns_w != '\0') {
      *current_pos++ = (char)(*dns_w++);
    }
    *current_pos++ = '\0';
    actual_length += (DWORD)current_length;
  }
  if(compute_content) {
    /* Last string has double null-terminator. */
    *current_pos = '\0';
  }
  return actual_length;
}

static CURLcode verify_host(struct Curl_easy *data,
                            CERT_CONTEXT *pCertContextServer,
                            const char * const conn_hostname)
{
  CURLcode result = CURLE_PEER_FAILED_VERIFICATION;
  TCHAR *cert_hostname_buff = NULL;
  size_t cert_hostname_buff_index = 0;
  DWORD len = 0;
  DWORD actual_len = 0;









  /* Determine the size of the string needed for the cert hostname */
  len = cert_get_name_string(data, pCertContextServer, NULL, 0);





  if(len == 0) {
    failf(data,
          "schannel: CertGetNameString() returned no "
          "certificate name information");
    result = CURLE_PEER_FAILED_VERIFICATION;
    goto cleanup;
  }

  /* CertGetNameString guarantees that the returned name will not contain
   * embedded null bytes. This appears to be undocumented behavior.
   */
  cert_hostname_buff = (LPTSTR)malloc(len * sizeof(TCHAR));
  if(!cert_hostname_buff) {
    result = CURLE_OUT_OF_MEMORY;
    goto cleanup;
  }
  actual_len = cert_get_name_string(



    data, pCertContextServer, (LPTSTR)cert_hostname_buff, len);


  /* Sanity check */
  if(actual_len != len) {
    failf(data,
          "schannel: CertGetNameString() returned certificate "
          "name information of unexpected size");
    result = CURLE_PEER_FAILED_VERIFICATION;
Changes to jni/curl/lib/vtls/sectransp.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2012 - 2017, Nick Zitzmann, <nickzman@gmail.com>.
 * Copyright (C) 2012 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is








|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2012 - 2017, Nick Zitzmann, <nickzman@gmail.com>.
 * Copyright (C) 2012 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
    }


  /* On macOS SecPKCS12Import will always add the client certificate to
   * the Keychain.
   *
   * As this doesn't match iOS, and apps may not want to see their client
   * certificate saved in the the user's keychain, we use SecItemImport
   * with a NULL keychain to avoid importing it.
   *
   * This returns a SecCertificateRef from which we can construct a
   * SecIdentityRef.
   */
#elif CURL_BUILD_MAC_10_7
    SecItemImportExportKeyParameters keyParams;







|







1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
    }


  /* On macOS SecPKCS12Import will always add the client certificate to
   * the Keychain.
   *
   * As this doesn't match iOS, and apps may not want to see their client
   * certificate saved in the user's keychain, we use SecItemImport
   * with a NULL keychain to avoid importing it.
   *
   * This returns a SecCertificateRef from which we can construct a
   * SecIdentityRef.
   */
#elif CURL_BUILD_MAC_10_7
    SecItemImportExportKeyParameters keyParams;
Changes to jni/curl/lib/vtls/vtls.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
    Curl_safefree(data->state.session);
  }

  Curl_ssl->close_all(data);
}

#if defined(USE_OPENSSL) || defined(USE_GNUTLS) || defined(USE_SCHANNEL) || \
  defined(USE_SECTRANSP) || defined(USE_POLARSSL) || defined(USE_NSS) || \
  defined(USE_MBEDTLS) || defined(USE_WOLFSSL) || defined(USE_BEARSSL)
int Curl_ssl_getsock(struct connectdata *conn, curl_socket_t *socks)
{
  struct ssl_connect_data *connssl = &conn->ssl[FIRSTSOCKET];

  if(connssl->connecting_state == ssl_connect_2_writing) {
    /* write mode */







|







512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
    Curl_safefree(data->state.session);
  }

  Curl_ssl->close_all(data);
}

#if defined(USE_OPENSSL) || defined(USE_GNUTLS) || defined(USE_SCHANNEL) || \
  defined(USE_SECTRANSP) || defined(USE_NSS) || \
  defined(USE_MBEDTLS) || defined(USE_WOLFSSL) || defined(USE_BEARSSL)
int Curl_ssl_getsock(struct connectdata *conn, curl_socket_t *socks)
{
  struct ssl_connect_data *connssl = &conn->ssl[FIRSTSOCKET];

  if(connssl->connecting_state == ssl_connect_2_writing) {
    /* write mode */
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
  &Curl_ssl_gskit;
#elif defined(USE_MBEDTLS)
  &Curl_ssl_mbedtls;
#elif defined(USE_NSS)
  &Curl_ssl_nss;
#elif defined(USE_OPENSSL)
  &Curl_ssl_openssl;
#elif defined(USE_POLARSSL)
  &Curl_ssl_polarssl;
#elif defined(USE_SCHANNEL)
  &Curl_ssl_schannel;
#elif defined(USE_MESALINK)
  &Curl_ssl_mesalink;
#elif defined(USE_BEARSSL)
  &Curl_ssl_bearssl;
#else







<
<







1179
1180
1181
1182
1183
1184
1185


1186
1187
1188
1189
1190
1191
1192
  &Curl_ssl_gskit;
#elif defined(USE_MBEDTLS)
  &Curl_ssl_mbedtls;
#elif defined(USE_NSS)
  &Curl_ssl_nss;
#elif defined(USE_OPENSSL)
  &Curl_ssl_openssl;


#elif defined(USE_SCHANNEL)
  &Curl_ssl_schannel;
#elif defined(USE_MESALINK)
  &Curl_ssl_mesalink;
#elif defined(USE_BEARSSL)
  &Curl_ssl_bearssl;
#else
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250


1251
1252
1253

1254
1255
1256
1257
1258

1259

1260
1261
1262
1263
1264

1265
1266
1267
1268

1269
1270

1271
1272
1273
1274
1275
1276
1277
1278
#endif
#if defined(USE_NSS)
  &Curl_ssl_nss,
#endif
#if defined(USE_OPENSSL)
  &Curl_ssl_openssl,
#endif
#if defined(USE_POLARSSL)
  &Curl_ssl_polarssl,
#endif
#if defined(USE_SCHANNEL)
  &Curl_ssl_schannel,
#endif
#if defined(USE_MESALINK)
  &Curl_ssl_mesalink,
#endif
#if defined(USE_BEARSSL)
  &Curl_ssl_bearssl,
#endif
  NULL
};

static size_t Curl_multissl_version(char *buffer, size_t size)
{
  static const struct Curl_ssl *selected;
  static char backends[200];
  static size_t total;
  const struct Curl_ssl *current;

  current = Curl_ssl == &Curl_ssl_multi ? available_backends[0] : Curl_ssl;

  if(current != selected) {
    char *p = backends;
    char *end = backends + sizeof(backends);
    int i;

    selected = current;



    for(i = 0; available_backends[i] && p < (end - 4); i++) {
      if(i)
        *(p++) = ' ';

      if(selected != available_backends[i])
        *(p++) = '(';
      p += available_backends[i]->version(p, end - p - 2);
      if(selected != available_backends[i])
        *(p++) = ')';

    }

    *p = '\0';
    total = p - backends;
  }

  if(size > total)

    memcpy(buffer, backends, total + 1);
  else {
    memcpy(buffer, backends, size - 1);
    buffer[size - 1] = '\0';

  }


  return CURLMIN(size - 1, total);
}

static int multissl_init(const struct Curl_ssl *backend)
{
  const char *env;
  char *env_tmp;








<
<
<
















|











>
>
|
<
<
>
|
|
|
|
<
>
|
>
|
|


|
>
|
|
|

>


>
|







1211
1212
1213
1214
1215
1216
1217



1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248


1249
1250
1251
1252
1253

1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
#endif
#if defined(USE_NSS)
  &Curl_ssl_nss,
#endif
#if defined(USE_OPENSSL)
  &Curl_ssl_openssl,
#endif



#if defined(USE_SCHANNEL)
  &Curl_ssl_schannel,
#endif
#if defined(USE_MESALINK)
  &Curl_ssl_mesalink,
#endif
#if defined(USE_BEARSSL)
  &Curl_ssl_bearssl,
#endif
  NULL
};

static size_t Curl_multissl_version(char *buffer, size_t size)
{
  static const struct Curl_ssl *selected;
  static char backends[200];
  static size_t backends_len;
  const struct Curl_ssl *current;

  current = Curl_ssl == &Curl_ssl_multi ? available_backends[0] : Curl_ssl;

  if(current != selected) {
    char *p = backends;
    char *end = backends + sizeof(backends);
    int i;

    selected = current;

    backends[0] = '\0';

    for(i = 0; available_backends[i]; ++i) {


      char vb[200];
      bool paren = (selected != available_backends[i]);

      if(available_backends[i]->version(vb, sizeof(vb))) {
        p += msnprintf(p, end - p, "%s%s%s%s", (p != backends ? " " : ""),

                       (paren ? "(" : ""), vb, (paren ? ")" : ""));
      }
    }

    backends_len = p - backends;
  }

  if(!size)
    return 0;

  if(size <= backends_len) {
    strncpy(buffer, backends, size - 1);
    buffer[size - 1] = '\0';
    return size - 1;
  }

  strcpy(buffer, backends);
  return backends_len;
}

static int multissl_init(const struct Curl_ssl *backend)
{
  const char *env;
  char *env_tmp;

Changes to jni/curl/lib/vtls/vtls.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_VTLS_H
#define HEADER_CURL_VTLS_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_VTLS_H
#define HEADER_CURL_VTLS_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
CURLcode Curl_none_md5sum(unsigned char *input, size_t inputlen,
                          unsigned char *md5sum, size_t md5len);

#include "openssl.h"        /* OpenSSL versions */
#include "gtls.h"           /* GnuTLS versions */
#include "nssg.h"           /* NSS versions */
#include "gskit.h"          /* Global Secure ToolKit versions */
#include "polarssl.h"       /* PolarSSL versions */
#include "wolfssl.h"        /* wolfSSL versions */
#include "schannel.h"       /* Schannel SSPI version */
#include "sectransp.h"      /* SecureTransport (Darwin) version */
#include "mbedtls.h"        /* mbedTLS versions */
#include "mesalink.h"       /* MesaLink versions */
#include "bearssl.h"        /* BearSSL versions */








<







98
99
100
101
102
103
104

105
106
107
108
109
110
111
CURLcode Curl_none_md5sum(unsigned char *input, size_t inputlen,
                          unsigned char *md5sum, size_t md5len);

#include "openssl.h"        /* OpenSSL versions */
#include "gtls.h"           /* GnuTLS versions */
#include "nssg.h"           /* NSS versions */
#include "gskit.h"          /* Global Secure ToolKit versions */

#include "wolfssl.h"        /* wolfSSL versions */
#include "schannel.h"       /* Schannel SSPI version */
#include "sectransp.h"      /* SecureTransport (Darwin) version */
#include "mbedtls.h"        /* mbedTLS versions */
#include "mesalink.h"       /* MesaLink versions */
#include "bearssl.h"        /* BearSSL versions */

Changes to jni/curl/lib/vtls/wolfssl.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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

  return CURLE_OK;
}

static CURLcode Curl_wolfssl_random(struct Curl_easy *data,
                                   unsigned char *entropy, size_t length)
{
  RNG rng;
  (void)data;
  if(wc_InitRng(&rng))
    return CURLE_FAILED_INIT;
  if(length > UINT_MAX)
    return CURLE_FAILED_INIT;
  if(wc_RNG_GenerateBlock(&rng, entropy, (unsigned)length))
    return CURLE_FAILED_INIT;
  if(wc_FreeRng(&rng))
    return CURLE_FAILED_INIT;
  return CURLE_OK;
}

static CURLcode Curl_wolfssl_sha256sum(const unsigned char *tmp, /* input */
                                  size_t tmplen,
                                  unsigned char *sha256sum /* output */,
                                  size_t unused)
{
  Sha256 SHA256pw;
  (void)unused;
  wc_InitSha256(&SHA256pw);
  wc_Sha256Update(&SHA256pw, tmp, (word32)tmplen);
  wc_Sha256Final(&SHA256pw, sha256sum);
  return CURLE_OK;
}








|













|
|
|

|







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

  return CURLE_OK;
}

static CURLcode Curl_wolfssl_random(struct Curl_easy *data,
                                   unsigned char *entropy, size_t length)
{
  WC_RNG rng;
  (void)data;
  if(wc_InitRng(&rng))
    return CURLE_FAILED_INIT;
  if(length > UINT_MAX)
    return CURLE_FAILED_INIT;
  if(wc_RNG_GenerateBlock(&rng, entropy, (unsigned)length))
    return CURLE_FAILED_INIT;
  if(wc_FreeRng(&rng))
    return CURLE_FAILED_INIT;
  return CURLE_OK;
}

static CURLcode Curl_wolfssl_sha256sum(const unsigned char *tmp, /* input */
                                       size_t tmplen,
                                       unsigned char *sha256sum /* output */,
                                       size_t unused)
{
  wc_Sha256 SHA256pw;
  (void)unused;
  wc_InitSha256(&SHA256pw);
  wc_Sha256Update(&SHA256pw, tmp, (word32)tmplen);
  wc_Sha256Final(&SHA256pw, sha256sum);
  return CURLE_OK;
}

Changes to jni/curl/ltmain.sh.
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.


PROGRAM=libtool
PACKAGE=libtool
VERSION="2.4.6 Debian-2.4.6-11"
package_revision=2.4.6


## ------ ##
## Usage. ##
## ------ ##








|







27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.


PROGRAM=libtool
PACKAGE=libtool
VERSION="2.4.6 Debian-2.4.6-13"
package_revision=2.4.6


## ------ ##
## Usage. ##
## ------ ##

383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
EXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.

# Allow overriding, eg assuming that you follow the convention of
# putting '$debug_cmd' at the start of all your functions, you can get
# bash to show function call trace with:
#
#    debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
debug_cmd=${debug_cmd-":"}
exit_cmd=:

# By convention, finish your script with:
#
#    exit $exit_status
#







|







383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
EXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.

# Allow overriding, eg assuming that you follow the convention of
# putting '$debug_cmd' at the start of all your functions, you can get
# bash to show function call trace with:
#
#    debug_cmd='echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
debug_cmd=${debug_cmd-":"}
exit_cmd=:

# By convention, finish your script with:
#
#    exit $exit_status
#
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
include the following information:

       host-triplet:   $host
       shell:          $SHELL
       compiler:       $LTCC
       compiler flags: $LTCFLAGS
       linker:         $LD (gnu? $with_gnu_ld)
       version:        $progname $scriptversion Debian-2.4.6-11
       automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
       autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`

Report bugs to <bug-libtool@gnu.org>.
GNU libtool home page: <http://www.gnu.org/s/libtool/>.
General help using GNU software: <http://www.gnu.org/gethelp/>."
    exit 0







|







2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
include the following information:

       host-triplet:   $host
       shell:          $SHELL
       compiler:       $LTCC
       compiler flags: $LTCFLAGS
       linker:         $LD (gnu? $with_gnu_ld)
       version:        $progname $scriptversion Debian-2.4.6-13
       automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
       autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`

Report bugs to <bug-libtool@gnu.org>.
GNU libtool home page: <http://www.gnu.org/s/libtool/>.
General help using GNU software: <http://www.gnu.org/gethelp/>."
    exit 0
7364
7365
7366
7367
7368
7369
7370


7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
      # -tp=*                Portland pgcc target processor selection
      # --sysroot=*          for sysroot support
      # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
      # -specs=*             GCC specs files
      # -stdlib=*            select c++ std lib with clang
      # -fsanitize=*         Clang/GCC memory and address sanitizer
      # -fuse-ld=*           Linker select flags for GCC


      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
      -specs=*|-fsanitize=*|-fuse-ld=*)
        func_quote_for_eval "$arg"
	arg=$func_quote_for_eval_result
        func_append compile_command " $arg"
        func_append finalize_command " $arg"
        func_append compiler_flags " $arg"
        continue
        ;;







>
>



|







7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
      # -tp=*                Portland pgcc target processor selection
      # --sysroot=*          for sysroot support
      # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
      # -specs=*             GCC specs files
      # -stdlib=*            select c++ std lib with clang
      # -fsanitize=*         Clang/GCC memory and address sanitizer
      # -fuse-ld=*           Linker select flags for GCC
      # -static-*            direct GCC to link specific libraries statically
      # -fcilkplus           Cilk Plus language extension features for C/C++
      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
      -specs=*|-fsanitize=*|-fuse-ld=*|-static-*|-fcilkplus)
        func_quote_for_eval "$arg"
	arg=$func_quote_for_eval_result
        func_append compile_command " $arg"
        func_append finalize_command " $arg"
        func_append compiler_flags " $arg"
        continue
        ;;
Changes to jni/curl/m4/curl-confopts.m4.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
    no)
      dnl --disable-curldebug option used
      want_curldebug="no"
      AC_MSG_RESULT([no])
      ;;
    default)
      dnl configure's curldebug option not specified. Initially we will
      dnl handle this as a a request to use the same setting as option
      dnl --enable-debug. IOW, initially, for debug-enabled builds
      dnl this will be handled as a request to enable curldebug if
      dnl possible, and for debug-disabled builds this will be handled
      dnl as a request to disable curldebug.
      if test "$want_debug" = "yes"; then
        AC_MSG_RESULT([(assumed) yes])
        AC_DEFINE(CURLDEBUG, 1, [to enable curl debug memory tracking])







|







103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
    no)
      dnl --disable-curldebug option used
      want_curldebug="no"
      AC_MSG_RESULT([no])
      ;;
    default)
      dnl configure's curldebug option not specified. Initially we will
      dnl handle this as a request to use the same setting as option
      dnl --enable-debug. IOW, initially, for debug-enabled builds
      dnl this will be handled as a request to enable curldebug if
      dnl possible, and for debug-disabled builds this will be handled
      dnl as a request to disable curldebug.
      if test "$want_debug" = "yes"; then
        AC_MSG_RESULT([(assumed) yes])
        AC_DEFINE(CURLDEBUG, 1, [to enable curl debug memory tracking])
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
      dnl If the compiler is known CFLAGS and CPPFLAGS will be
      dnl overridden, otherwise this can not be honored.
      want_optimize="no"
      AC_MSG_RESULT([no])
      ;;
    default)
      dnl configure's optimize option not specified. Initially we will
      dnl handle this as a a request contrary to configure's setting
      dnl for --enable-debug. IOW, initially, for debug-enabled builds
      dnl this will be handled as a request to disable optimizations if
      dnl possible, and for debug-disabled builds this will be handled
      dnl initially as a request to enable optimizations if possible.
      dnl Finally, if the compiler is known and CFLAGS and CPPFLAGS do
      dnl not have any optimizer flag the request will be honored, in
      dnl any other case the request can not be honored.







|







194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
      dnl If the compiler is known CFLAGS and CPPFLAGS will be
      dnl overridden, otherwise this can not be honored.
      want_optimize="no"
      AC_MSG_RESULT([no])
      ;;
    default)
      dnl configure's optimize option not specified. Initially we will
      dnl handle this as a request contrary to configure's setting
      dnl for --enable-debug. IOW, initially, for debug-enabled builds
      dnl this will be handled as a request to disable optimizations if
      dnl possible, and for debug-disabled builds this will be handled
      dnl initially as a request to enable optimizations if possible.
      dnl Finally, if the compiler is known and CFLAGS and CPPFLAGS do
      dnl not have any optimizer flag the request will be honored, in
      dnl any other case the request can not be honored.
Changes to jni/curl/m4/curl-functions.m4.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
dnl then HAVE_STRERROR_R and STRERROR_R_TYPE_ARG3 will be defined, as
dnl well as one of HAVE_GLIBC_STRERROR_R or HAVE_POSIX_STRERROR_R.
dnl
dnl glibc-style strerror_r:
dnl
dnl      char *strerror_r(int errnum, char *workbuf, size_t bufsize);
dnl
dnl  glibc-style strerror_r returns a pointer to the the error string,
dnl  and might use the provided workbuf as a scratch area if needed. A
dnl  quick test on a few systems shows that it's usually not used at all.
dnl
dnl POSIX-style strerror_r:
dnl
dnl      int strerror_r(int errnum, char *resultbuf, size_t bufsize);
dnl







|







6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
dnl then HAVE_STRERROR_R and STRERROR_R_TYPE_ARG3 will be defined, as
dnl well as one of HAVE_GLIBC_STRERROR_R or HAVE_POSIX_STRERROR_R.
dnl
dnl glibc-style strerror_r:
dnl
dnl      char *strerror_r(int errnum, char *workbuf, size_t bufsize);
dnl
dnl  glibc-style strerror_r returns a pointer to the error string,
dnl  and might use the provided workbuf as a scratch area if needed. A
dnl  quick test on a few systems shows that it's usually not used at all.
dnl
dnl POSIX-style strerror_r:
dnl
dnl      int strerror_r(int errnum, char *resultbuf, size_t bufsize);
dnl
Changes to jni/curl/m4/libtool.m4.
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
    AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
      [lt_cv_ld_force_load=no
      cat > conftest.c << _LT_EOF
int forced_loaded() { return 2;}
_LT_EOF
      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
      echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
      $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
      echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
      $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
      cat > conftest.c << _LT_EOF
int main() { return 0;}
_LT_EOF
      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err







|
|







1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
    AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
      [lt_cv_ld_force_load=no
      cat > conftest.c << _LT_EOF
int forced_loaded() { return 2;}
_LT_EOF
      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
      echo "$AR cr libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
      $AR cr libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
      echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
      $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
      cat > conftest.c << _LT_EOF
int main() { return 0;}
_LT_EOF
      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502


# _LT_PROG_AR
# -----------
m4_defun([_LT_PROG_AR],
[AC_CHECK_TOOLS(AR, [ar], false)
: ${AR=ar}
: ${AR_FLAGS=cru}
_LT_DECL([], [AR], [1], [The archiver])
_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])

AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
  [lt_cv_ar_at_file=no
   AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
     [echo conftest.$ac_objext > conftest.lst







|







1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502


# _LT_PROG_AR
# -----------
m4_defun([_LT_PROG_AR],
[AC_CHECK_TOOLS(AR, [ar], false)
: ${AR=ar}
: ${AR_FLAGS=cr}
_LT_DECL([], [AR], [1], [The archiver])
_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])

AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
  [lt_cv_ar_at_file=no
   AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
     [echo conftest.$ac_objext > conftest.lst
Changes to jni/curl/packages/Makefile.in.
336
337
338
339
340
341
342

343
344
345
346
347
348
349
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@

USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@







>







336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
USE_WOLFSSH = @USE_WOLFSSH@
USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
Changes to jni/curl/packages/OS400/ccsidcurl.c.
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
  CURLcode result;
  va_list arg;
  struct Curl_easy *data;
  char *s;
  char *cp;
  unsigned int ccsid;
  curl_off_t pfsize;
  static char testwarn = 1;

  /* Warns if this procedure has not been updated when the dupstring enum
     changes.
     We (try to) do it only once: there is no need to issue several times
     the same message; but since threadsafeness is not handled here,
     this may occur (and we don't care!). */

  if(testwarn) {
    testwarn = 0;

    if((int) STRING_LASTZEROTERMINATED != (int) STRING_SASL_AUTHZID + 1 ||
       (int) STRING_LAST != (int) STRING_COPYPOSTFIELDS + 1)
      curl_mfprintf(stderr,
       "*** WARNING: curl_easy_setopt_ccsid() should be reworked ***\n");
  }

  data = (struct Curl_easy *) curl;
  va_start(arg, tag);

  switch(tag) {

  case CURLOPT_ABSTRACT_UNIX_SOCKET:







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







1126
1127
1128
1129
1130
1131
1132
















1133
1134
1135
1136
1137
1138
1139
  CURLcode result;
  va_list arg;
  struct Curl_easy *data;
  char *s;
  char *cp;
  unsigned int ccsid;
  curl_off_t pfsize;

















  data = (struct Curl_easy *) curl;
  va_start(arg, tag);

  switch(tag) {

  case CURLOPT_ABSTRACT_UNIX_SOCKET:
Changes to jni/curl/packages/OS400/curl.inc.in.
598
599
600
601
602
603
604


605
606
607
608
609
610
611
     d                 c                   92
     d  CURLE_RECURSIVE_API_CALL...
     d                 c                   93
     d  CURLE_AUTH_ERROR...
     d                 c                   94
     d  CURLE_HTTP3...
     d                 c                   95


      *
      /if not defined(CURL_NO_OLDIES)
     d  CURLE_URL_MALFORMAT_USER...
     d                 c                   4
     d  CURLE_FTP_ACCESS_DENIED...
     d                 c                   9
     d  CURLE_FTP_USER_PASSWORD_INCORRECT...







>
>







598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
     d                 c                   92
     d  CURLE_RECURSIVE_API_CALL...
     d                 c                   93
     d  CURLE_AUTH_ERROR...
     d                 c                   94
     d  CURLE_HTTP3...
     d                 c                   95
     d  CURLE_QUIC_CONNECT_ERROR...
     d                 c                   96
      *
      /if not defined(CURL_NO_OLDIES)
     d  CURLE_URL_MALFORMAT_USER...
     d                 c                   4
     d  CURLE_FTP_ACCESS_DENIED...
     d                 c                   9
     d  CURLE_FTP_USER_PASSWORD_INCORRECT...
1812
1813
1814
1815
1816
1817
1818


1819
1820
1821
1822
1823
1824
1825
1826
     d                 c                   6
     d  CURLM_ADDED_ALREADY...
     d                 c                   7
     d  CURLM_RECURSIVE_API_CALL...
     d                 c                   8
     d  CURLM_WAKEUP_FAILURE...
     d                 c                   9


     d  CURLM_LAST     c                   10
      *
     d CURLMSG         s             10i 0 based(######ptr######)               Enum
     d  CURLMSG_NONE   c                   0
     d  CURLMSG_DONE   c                   1
      *
     d CURLMoption     s             10i 0 based(######ptr######)               Enum
     d  CURLMOPT_SOCKETFUNCTION...







>
>
|







1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
     d                 c                   6
     d  CURLM_ADDED_ALREADY...
     d                 c                   7
     d  CURLM_RECURSIVE_API_CALL...
     d                 c                   8
     d  CURLM_WAKEUP_FAILURE...
     d                 c                   9
     d  CURLM_BAD_FUNCTION_ARGUMENT...
     d                 c                   10
     d  CURLM_LAST     c                   11
      *
     d CURLMSG         s             10i 0 based(######ptr######)               Enum
     d  CURLMSG_NONE   c                   0
     d  CURLMSG_DONE   c                   1
      *
     d CURLMoption     s             10i 0 based(######ptr######)               Enum
     d  CURLMOPT_SOCKETFUNCTION...
Changes to jni/curl/packages/OS400/make-lib.sh.
41
42
43
44
45
46
47




















48
49
50
51
52
53
54
        < Makefile.inc > tmpscript.sh
. ./tmpscript.sh


#       Compile the sources into modules.

INCLUDES="'`pwd`'"





















make_module     OS400SYS        "${SCRIPTDIR}/os400sys.c"
make_module     CCSIDCURL       "${SCRIPTDIR}/ccsidcurl.c"

for SRC in ${CSOURCES}
do      MODULE=`db2_name "${SRC}"`
        make_module "${MODULE}" "${SRC}"







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
        < Makefile.inc > tmpscript.sh
. ./tmpscript.sh


#       Compile the sources into modules.

INCLUDES="'`pwd`'"

# Create a small C program to check ccsidcurl.c is up to date
if action_needed "${LIBIFSNAME}/CHKSTRINGS.PGM"
then
  CMD="CRTBNDC PGM(${TARGETLIB}/CHKSTRINGS) SRCSTMF('${SCRIPTDIR}/chkstrings.c')"
  CMD="${CMD} INCDIR('${TOPDIR}/include/curl' '${TOPDIR}/include' '${SRCDIR}' ${INCLUDES})"
  system -i "${CMD}"
  if [ $? -ne 0 ]
  then
    echo "ERROR: Failed to build CHKSTRINGS *PGM object!"
    exit 2
  else
    ${LIBIFSNAME}/CHKSTRINGS.PGM
    if [ $? -ne 0 ]
    then
      echo "ERROR: CHKSTRINGS failed!"
      exit 2
    fi
  fi
fi

make_module     OS400SYS        "${SCRIPTDIR}/os400sys.c"
make_module     CCSIDCURL       "${SCRIPTDIR}/ccsidcurl.c"

for SRC in ${CSOURCES}
do      MODULE=`db2_name "${SRC}"`
        make_module "${MODULE}" "${SRC}"
Changes to jni/curl/packages/vms/Makefile.in.
276
277
278
279
280
281
282

283
284
285
286
287
288
289
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@

USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@







>







276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
USE_WOLFSSH = @USE_WOLFSSH@
USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
Changes to jni/curl/packages/vms/compare_curl_source.com.
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$!     2. Compare the checked out repository of a project with the
$!        the local working copy to make sure they are in sync.
$!     3. Keep a copy directory up to date.  The third is needed by
$!        me because VMS Backup can create a saveset of files from a
$!        NFS mounted volume.
$!
$! First the files in the original source directory which is assumed to be
$! under source codde control are compared with the copy directory.
$!
$! Then the files are are only in the copy directory are listed.
$!
$! The result will five diagnostics about of files:
$!    1. Files that are not generation 1.
$!    2. Files missing in the copy directory.
$!    3. Files in the copy directory not in the source directory.







|







13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$!     2. Compare the checked out repository of a project with the
$!        the local working copy to make sure they are in sync.
$!     3. Keep a copy directory up to date.  The third is needed by
$!        me because VMS Backup can create a saveset of files from a
$!        NFS mounted volume.
$!
$! First the files in the original source directory which is assumed to be
$! under source code control are compared with the copy directory.
$!
$! Then the files are are only in the copy directory are listed.
$!
$! The result will five diagnostics about of files:
$!    1. Files that are not generation 1.
$!    2. Files missing in the copy directory.
$!    3. Files in the copy directory not in the source directory.
Changes to jni/curl/packages/vms/curl_crtl_init.c.
1
2
3
4
5
6
7
8
9
10
11
/* File: curl_crtl_init.c
 *
 * This file makes sure that the DECC Unix settings are correct for
 * the mode the the program is run in.
 *
 * The CRTL has not been initialized at the time that these routines
 * are called, so many routines can not be called.
 *
 * This is a module that provides a LIB$INITIALIZE routine that
 * will turn on some CRTL features that are not enabled by default.
 *



|







1
2
3
4
5
6
7
8
9
10
11
/* File: curl_crtl_init.c
 *
 * This file makes sure that the DECC Unix settings are correct for
 * the mode the program is run in.
 *
 * The CRTL has not been initialized at the time that these routines
 * are called, so many routines can not be called.
 *
 * This is a module that provides a LIB$INITIALIZE routine that
 * will turn on some CRTL features that are not enabled by default.
 *
Changes to jni/curl/packages/vms/readme.
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
The build_vms.com procedure does not build the shared image file or the PCSI
kit.  If you have built a curl with ZLIB and HPSSL support as well as if
LDAP and Kerberos installed, you can use the GNV_LINK_CURL.COM file.

The GNV_LINK_CURL.COM contains information on how to link and run with a newer
version of HP SSL than what may be install on an Alpha or IA64 based system.

To build the PCSI kit, follow the the instructions in the file
curl_gnv_build_steps.txt.

Other Notes:

This release fixes known bugs #22, and #57 in the [curl.docs]known_bugs.
file.

The libcurl formdata.c module and Curl tools post form now have some
understanding of VMS file types.  Files will be posted in STREAM_LF format.

The Curl tool now has some understanding of VMS file types and will upload the
files in STREAM_LF fomat.

When CURL is uploading a VARIABLE format VMS file, it is less efficient as in
order to get the file size, it will first read the entire file once, and then
read the file again for the actual upload.

The Curl tool will now always download files into STREAM_LF format.  Even if a
file by that name with a different format already exists.  This is needed to







|











|







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
The build_vms.com procedure does not build the shared image file or the PCSI
kit.  If you have built a curl with ZLIB and HPSSL support as well as if
LDAP and Kerberos installed, you can use the GNV_LINK_CURL.COM file.

The GNV_LINK_CURL.COM contains information on how to link and run with a newer
version of HP SSL than what may be install on an Alpha or IA64 based system.

To build the PCSI kit, follow the instructions in the file
curl_gnv_build_steps.txt.

Other Notes:

This release fixes known bugs #22, and #57 in the [curl.docs]known_bugs.
file.

The libcurl formdata.c module and Curl tools post form now have some
understanding of VMS file types.  Files will be posted in STREAM_LF format.

The Curl tool now has some understanding of VMS file types and will upload the
files in STREAM_LF format.

When CURL is uploading a VARIABLE format VMS file, it is less efficient as in
order to get the file size, it will first read the entire file once, and then
read the file again for the actual upload.

The Curl tool will now always download files into STREAM_LF format.  Even if a
file by that name with a different format already exists.  This is needed to
Changes to jni/curl/projects/Windows/VC10/curl-all.sln.
Changes to jni/curl/projects/Windows/VC10/lib/libcurl.sln.
Changes to jni/curl/projects/Windows/VC10/lib/libcurl.vcxproj.
2398
2399
2400
2401
2402
2403
2404

2405
2406
2407
2408
2409
2410
2411
    <ClCompile Include="..\..\..\..\lib\openldap.c" />
    <ClCompile Include="..\..\..\..\lib\parsedate.c" />
    <ClCompile Include="..\..\..\..\lib\pingpong.c" />
    <ClCompile Include="..\..\..\..\lib\pop3.c" />
    <ClCompile Include="..\..\..\..\lib\progress.c" />
    <ClCompile Include="..\..\..\..\lib\psl.c" />
    <ClCompile Include="..\..\..\..\lib\rand.c" />

    <ClCompile Include="..\..\..\..\lib\rtsp.c" />
    <ClCompile Include="..\..\..\..\lib\security.c" />
    <ClCompile Include="..\..\..\..\lib\select.c" />
    <ClCompile Include="..\..\..\..\lib\sendf.c" />
    <ClCompile Include="..\..\..\..\lib\setopt.c" />
    <ClCompile Include="..\..\..\..\lib\sha256.c" />
    <ClCompile Include="..\..\..\..\lib\share.c" />







>







2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
    <ClCompile Include="..\..\..\..\lib\openldap.c" />
    <ClCompile Include="..\..\..\..\lib\parsedate.c" />
    <ClCompile Include="..\..\..\..\lib\pingpong.c" />
    <ClCompile Include="..\..\..\..\lib\pop3.c" />
    <ClCompile Include="..\..\..\..\lib\progress.c" />
    <ClCompile Include="..\..\..\..\lib\psl.c" />
    <ClCompile Include="..\..\..\..\lib\rand.c" />
    <ClCompile Include="..\..\..\..\lib\rename.c" />
    <ClCompile Include="..\..\..\..\lib\rtsp.c" />
    <ClCompile Include="..\..\..\..\lib\security.c" />
    <ClCompile Include="..\..\..\..\lib\select.c" />
    <ClCompile Include="..\..\..\..\lib\sendf.c" />
    <ClCompile Include="..\..\..\..\lib\setopt.c" />
    <ClCompile Include="..\..\..\..\lib\sha256.c" />
    <ClCompile Include="..\..\..\..\lib\share.c" />
2446
2447
2448
2449
2450
2451
2452

2453
2454
2455
2456

2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
    <ClCompile Include="..\..\..\..\lib\vauth\spnego_gssapi.c" />
    <ClCompile Include="..\..\..\..\lib\vauth\spnego_sspi.c" />
    <ClCompile Include="..\..\..\..\lib\vauth\vauth.c" />
    <ClCompile Include="..\..\..\..\lib\vquic\ngtcp2.c" />
    <ClCompile Include="..\..\..\..\lib\vquic\quiche.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\libssh2.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\libssh.c" />

    <ClCompile Include="..\..\..\..\lib\vtls\bearssl.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\gskit.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\gtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\mbedtls.c" />

    <ClCompile Include="..\..\..\..\lib\vtls\mesalink.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\nss.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\openssl.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\polarssl.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\polarssl_threadlock.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\schannel.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\schannel_verify.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\sectransp.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\vtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\wolfssl.c" />
  </ItemGroup>
  <ItemGroup>







>




>



<
<







2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462


2463
2464
2465
2466
2467
2468
2469
    <ClCompile Include="..\..\..\..\lib\vauth\spnego_gssapi.c" />
    <ClCompile Include="..\..\..\..\lib\vauth\spnego_sspi.c" />
    <ClCompile Include="..\..\..\..\lib\vauth\vauth.c" />
    <ClCompile Include="..\..\..\..\lib\vquic\ngtcp2.c" />
    <ClCompile Include="..\..\..\..\lib\vquic\quiche.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\libssh2.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\libssh.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\wolfssh.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\bearssl.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\gskit.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\gtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\mbedtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\mbedtls_threadlock.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\mesalink.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\nss.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\openssl.c" />


    <ClCompile Include="..\..\..\..\lib\vtls\schannel.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\schannel_verify.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\sectransp.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\vtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\wolfssl.c" />
  </ItemGroup>
  <ItemGroup>
2542
2543
2544
2545
2546
2547
2548

2549
2550
2551
2552
2553
2554
2555
    <ClInclude Include="..\..\..\..\lib\parsedate.h" />
    <ClInclude Include="..\..\..\..\lib\pingpong.h" />
    <ClInclude Include="..\..\..\..\lib\pop3.h" />
    <ClInclude Include="..\..\..\..\lib\progress.h" />
    <ClInclude Include="..\..\..\..\lib\psl.h" />
    <ClInclude Include="..\..\..\..\lib\quic.h" />
    <ClInclude Include="..\..\..\..\lib\rand.h" />

    <ClInclude Include="..\..\..\..\lib\rtsp.h" />
    <ClInclude Include="..\..\..\..\lib\select.h" />
    <ClInclude Include="..\..\..\..\lib\sendf.h" />
    <ClInclude Include="..\..\..\..\lib\setopt.h" />
    <ClInclude Include="..\..\..\..\lib\setup-vms.h" />
    <ClInclude Include="..\..\..\..\lib\share.h" />
    <ClInclude Include="..\..\..\..\lib\sigpipe.h" />







>







2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
    <ClInclude Include="..\..\..\..\lib\parsedate.h" />
    <ClInclude Include="..\..\..\..\lib\pingpong.h" />
    <ClInclude Include="..\..\..\..\lib\pop3.h" />
    <ClInclude Include="..\..\..\..\lib\progress.h" />
    <ClInclude Include="..\..\..\..\lib\psl.h" />
    <ClInclude Include="..\..\..\..\lib\quic.h" />
    <ClInclude Include="..\..\..\..\lib\rand.h" />
    <ClInclude Include="..\..\..\..\lib\rename.h" />
    <ClInclude Include="..\..\..\..\lib\rtsp.h" />
    <ClInclude Include="..\..\..\..\lib\select.h" />
    <ClInclude Include="..\..\..\..\lib\sendf.h" />
    <ClInclude Include="..\..\..\..\lib\setopt.h" />
    <ClInclude Include="..\..\..\..\lib\setup-vms.h" />
    <ClInclude Include="..\..\..\..\lib\share.h" />
    <ClInclude Include="..\..\..\..\lib\sigpipe.h" />
2583
2584
2585
2586
2587
2588
2589

2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
    <ClInclude Include="..\..\..\..\lib\vquic\ngtcp2.h" />
    <ClInclude Include="..\..\..\..\lib\vquic\quiche.h" />
    <ClInclude Include="..\..\..\..\lib\vssh\ssh.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\bearssl.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\gskit.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\gtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\mbedtls.h" />

    <ClInclude Include="..\..\..\..\lib\vtls\mesalink.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\nssg.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\openssl.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\polarssl.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\polarssl_threadlock.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\schannel.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\sectransp.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\vtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\wolfssl.h" />
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="..\..\..\..\lib\libcurl.rc" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>







>



<
<












2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595


2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
    <ClInclude Include="..\..\..\..\lib\vquic\ngtcp2.h" />
    <ClInclude Include="..\..\..\..\lib\vquic\quiche.h" />
    <ClInclude Include="..\..\..\..\lib\vssh\ssh.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\bearssl.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\gskit.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\gtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\mbedtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\mbedtls_threadlock.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\mesalink.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\nssg.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\openssl.h" />


    <ClInclude Include="..\..\..\..\lib\vtls\schannel.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\sectransp.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\vtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\wolfssl.h" />
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="..\..\..\..\lib\libcurl.rc" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>
Changes to jni/curl/projects/Windows/VC10/src/curl.sln.
Changes to jni/curl/projects/Windows/VC11/curl-all.sln.
Changes to jni/curl/projects/Windows/VC11/lib/libcurl.sln.
Changes to jni/curl/projects/Windows/VC11/lib/libcurl.vcxproj.
2454
2455
2456
2457
2458
2459
2460

2461
2462
2463
2464
2465
2466
2467
    <ClCompile Include="..\..\..\..\lib\openldap.c" />
    <ClCompile Include="..\..\..\..\lib\parsedate.c" />
    <ClCompile Include="..\..\..\..\lib\pingpong.c" />
    <ClCompile Include="..\..\..\..\lib\pop3.c" />
    <ClCompile Include="..\..\..\..\lib\progress.c" />
    <ClCompile Include="..\..\..\..\lib\psl.c" />
    <ClCompile Include="..\..\..\..\lib\rand.c" />

    <ClCompile Include="..\..\..\..\lib\rtsp.c" />
    <ClCompile Include="..\..\..\..\lib\security.c" />
    <ClCompile Include="..\..\..\..\lib\select.c" />
    <ClCompile Include="..\..\..\..\lib\sendf.c" />
    <ClCompile Include="..\..\..\..\lib\setopt.c" />
    <ClCompile Include="..\..\..\..\lib\sha256.c" />
    <ClCompile Include="..\..\..\..\lib\share.c" />







>







2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
    <ClCompile Include="..\..\..\..\lib\openldap.c" />
    <ClCompile Include="..\..\..\..\lib\parsedate.c" />
    <ClCompile Include="..\..\..\..\lib\pingpong.c" />
    <ClCompile Include="..\..\..\..\lib\pop3.c" />
    <ClCompile Include="..\..\..\..\lib\progress.c" />
    <ClCompile Include="..\..\..\..\lib\psl.c" />
    <ClCompile Include="..\..\..\..\lib\rand.c" />
    <ClCompile Include="..\..\..\..\lib\rename.c" />
    <ClCompile Include="..\..\..\..\lib\rtsp.c" />
    <ClCompile Include="..\..\..\..\lib\security.c" />
    <ClCompile Include="..\..\..\..\lib\select.c" />
    <ClCompile Include="..\..\..\..\lib\sendf.c" />
    <ClCompile Include="..\..\..\..\lib\setopt.c" />
    <ClCompile Include="..\..\..\..\lib\sha256.c" />
    <ClCompile Include="..\..\..\..\lib\share.c" />
2502
2503
2504
2505
2506
2507
2508

2509
2510
2511
2512

2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
    <ClCompile Include="..\..\..\..\lib\vauth\spnego_gssapi.c" />
    <ClCompile Include="..\..\..\..\lib\vauth\spnego_sspi.c" />
    <ClCompile Include="..\..\..\..\lib\vauth\vauth.c" />
    <ClCompile Include="..\..\..\..\lib\vquic\ngtcp2.c" />
    <ClCompile Include="..\..\..\..\lib\vquic\quiche.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\libssh2.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\libssh.c" />

    <ClCompile Include="..\..\..\..\lib\vtls\bearssl.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\gskit.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\gtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\mbedtls.c" />

    <ClCompile Include="..\..\..\..\lib\vtls\mesalink.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\nss.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\openssl.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\polarssl.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\polarssl_threadlock.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\schannel.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\schannel_verify.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\sectransp.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\vtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\wolfssl.c" />
  </ItemGroup>
  <ItemGroup>







>




>



<
<







2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518


2519
2520
2521
2522
2523
2524
2525
    <ClCompile Include="..\..\..\..\lib\vauth\spnego_gssapi.c" />
    <ClCompile Include="..\..\..\..\lib\vauth\spnego_sspi.c" />
    <ClCompile Include="..\..\..\..\lib\vauth\vauth.c" />
    <ClCompile Include="..\..\..\..\lib\vquic\ngtcp2.c" />
    <ClCompile Include="..\..\..\..\lib\vquic\quiche.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\libssh2.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\libssh.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\wolfssh.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\bearssl.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\gskit.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\gtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\mbedtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\mbedtls_threadlock.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\mesalink.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\nss.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\openssl.c" />


    <ClCompile Include="..\..\..\..\lib\vtls\schannel.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\schannel_verify.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\sectransp.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\vtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\wolfssl.c" />
  </ItemGroup>
  <ItemGroup>
2598
2599
2600
2601
2602
2603
2604

2605
2606
2607
2608
2609
2610
2611
    <ClInclude Include="..\..\..\..\lib\parsedate.h" />
    <ClInclude Include="..\..\..\..\lib\pingpong.h" />
    <ClInclude Include="..\..\..\..\lib\pop3.h" />
    <ClInclude Include="..\..\..\..\lib\progress.h" />
    <ClInclude Include="..\..\..\..\lib\psl.h" />
    <ClInclude Include="..\..\..\..\lib\quic.h" />
    <ClInclude Include="..\..\..\..\lib\rand.h" />

    <ClInclude Include="..\..\..\..\lib\rtsp.h" />
    <ClInclude Include="..\..\..\..\lib\select.h" />
    <ClInclude Include="..\..\..\..\lib\sendf.h" />
    <ClInclude Include="..\..\..\..\lib\setopt.h" />
    <ClInclude Include="..\..\..\..\lib\setup-vms.h" />
    <ClInclude Include="..\..\..\..\lib\share.h" />
    <ClInclude Include="..\..\..\..\lib\sigpipe.h" />







>







2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
    <ClInclude Include="..\..\..\..\lib\parsedate.h" />
    <ClInclude Include="..\..\..\..\lib\pingpong.h" />
    <ClInclude Include="..\..\..\..\lib\pop3.h" />
    <ClInclude Include="..\..\..\..\lib\progress.h" />
    <ClInclude Include="..\..\..\..\lib\psl.h" />
    <ClInclude Include="..\..\..\..\lib\quic.h" />
    <ClInclude Include="..\..\..\..\lib\rand.h" />
    <ClInclude Include="..\..\..\..\lib\rename.h" />
    <ClInclude Include="..\..\..\..\lib\rtsp.h" />
    <ClInclude Include="..\..\..\..\lib\select.h" />
    <ClInclude Include="..\..\..\..\lib\sendf.h" />
    <ClInclude Include="..\..\..\..\lib\setopt.h" />
    <ClInclude Include="..\..\..\..\lib\setup-vms.h" />
    <ClInclude Include="..\..\..\..\lib\share.h" />
    <ClInclude Include="..\..\..\..\lib\sigpipe.h" />
2639
2640
2641
2642
2643
2644
2645

2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
    <ClInclude Include="..\..\..\..\lib\vquic\ngtcp2.h" />
    <ClInclude Include="..\..\..\..\lib\vquic\quiche.h" />
    <ClInclude Include="..\..\..\..\lib\vssh\ssh.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\bearssl.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\gskit.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\gtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\mbedtls.h" />

    <ClInclude Include="..\..\..\..\lib\vtls\mesalink.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\nssg.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\openssl.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\polarssl.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\polarssl_threadlock.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\schannel.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\sectransp.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\vtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\wolfssl.h" />
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="..\..\..\..\lib\libcurl.rc" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>







>



<
<












2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651


2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
    <ClInclude Include="..\..\..\..\lib\vquic\ngtcp2.h" />
    <ClInclude Include="..\..\..\..\lib\vquic\quiche.h" />
    <ClInclude Include="..\..\..\..\lib\vssh\ssh.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\bearssl.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\gskit.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\gtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\mbedtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\mbedtls_threadlock.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\mesalink.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\nssg.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\openssl.h" />


    <ClInclude Include="..\..\..\..\lib\vtls\schannel.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\sectransp.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\vtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\wolfssl.h" />
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="..\..\..\..\lib\libcurl.rc" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>
Changes to jni/curl/projects/Windows/VC11/src/curl.sln.
Changes to jni/curl/projects/Windows/VC12/curl-all.sln.
Changes to jni/curl/projects/Windows/VC12/lib/libcurl.sln.
Changes to jni/curl/projects/Windows/VC12/lib/libcurl.vcxproj.
2454
2455
2456
2457
2458
2459
2460

2461
2462
2463
2464
2465
2466
2467
    <ClCompile Include="..\..\..\..\lib\openldap.c" />
    <ClCompile Include="..\..\..\..\lib\parsedate.c" />
    <ClCompile Include="..\..\..\..\lib\pingpong.c" />
    <ClCompile Include="..\..\..\..\lib\pop3.c" />
    <ClCompile Include="..\..\..\..\lib\progress.c" />
    <ClCompile Include="..\..\..\..\lib\psl.c" />
    <ClCompile Include="..\..\..\..\lib\rand.c" />

    <ClCompile Include="..\..\..\..\lib\rtsp.c" />
    <ClCompile Include="..\..\..\..\lib\security.c" />
    <ClCompile Include="..\..\..\..\lib\select.c" />
    <ClCompile Include="..\..\..\..\lib\sendf.c" />
    <ClCompile Include="..\..\..\..\lib\setopt.c" />
    <ClCompile Include="..\..\..\..\lib\sha256.c" />
    <ClCompile Include="..\..\..\..\lib\share.c" />







>







2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
    <ClCompile Include="..\..\..\..\lib\openldap.c" />
    <ClCompile Include="..\..\..\..\lib\parsedate.c" />
    <ClCompile Include="..\..\..\..\lib\pingpong.c" />
    <ClCompile Include="..\..\..\..\lib\pop3.c" />
    <ClCompile Include="..\..\..\..\lib\progress.c" />
    <ClCompile Include="..\..\..\..\lib\psl.c" />
    <ClCompile Include="..\..\..\..\lib\rand.c" />
    <ClCompile Include="..\..\..\..\lib\rename.c" />
    <ClCompile Include="..\..\..\..\lib\rtsp.c" />
    <ClCompile Include="..\..\..\..\lib\security.c" />
    <ClCompile Include="..\..\..\..\lib\select.c" />
    <ClCompile Include="..\..\..\..\lib\sendf.c" />
    <ClCompile Include="..\..\..\..\lib\setopt.c" />
    <ClCompile Include="..\..\..\..\lib\sha256.c" />
    <ClCompile Include="..\..\..\..\lib\share.c" />
2502
2503
2504
2505
2506
2507
2508

2509
2510
2511
2512

2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
    <ClCompile Include="..\..\..\..\lib\vauth\spnego_gssapi.c" />
    <ClCompile Include="..\..\..\..\lib\vauth\spnego_sspi.c" />
    <ClCompile Include="..\..\..\..\lib\vauth\vauth.c" />
    <ClCompile Include="..\..\..\..\lib\vquic\ngtcp2.c" />
    <ClCompile Include="..\..\..\..\lib\vquic\quiche.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\libssh2.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\libssh.c" />

    <ClCompile Include="..\..\..\..\lib\vtls\bearssl.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\gskit.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\gtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\mbedtls.c" />

    <ClCompile Include="..\..\..\..\lib\vtls\mesalink.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\nss.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\openssl.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\polarssl.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\polarssl_threadlock.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\schannel.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\schannel_verify.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\sectransp.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\vtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\wolfssl.c" />
  </ItemGroup>
  <ItemGroup>







>




>



<
<







2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518


2519
2520
2521
2522
2523
2524
2525
    <ClCompile Include="..\..\..\..\lib\vauth\spnego_gssapi.c" />
    <ClCompile Include="..\..\..\..\lib\vauth\spnego_sspi.c" />
    <ClCompile Include="..\..\..\..\lib\vauth\vauth.c" />
    <ClCompile Include="..\..\..\..\lib\vquic\ngtcp2.c" />
    <ClCompile Include="..\..\..\..\lib\vquic\quiche.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\libssh2.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\libssh.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\wolfssh.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\bearssl.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\gskit.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\gtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\mbedtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\mbedtls_threadlock.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\mesalink.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\nss.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\openssl.c" />


    <ClCompile Include="..\..\..\..\lib\vtls\schannel.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\schannel_verify.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\sectransp.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\vtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\wolfssl.c" />
  </ItemGroup>
  <ItemGroup>
2598
2599
2600
2601
2602
2603
2604

2605
2606
2607
2608
2609
2610
2611
    <ClInclude Include="..\..\..\..\lib\parsedate.h" />
    <ClInclude Include="..\..\..\..\lib\pingpong.h" />
    <ClInclude Include="..\..\..\..\lib\pop3.h" />
    <ClInclude Include="..\..\..\..\lib\progress.h" />
    <ClInclude Include="..\..\..\..\lib\psl.h" />
    <ClInclude Include="..\..\..\..\lib\quic.h" />
    <ClInclude Include="..\..\..\..\lib\rand.h" />

    <ClInclude Include="..\..\..\..\lib\rtsp.h" />
    <ClInclude Include="..\..\..\..\lib\select.h" />
    <ClInclude Include="..\..\..\..\lib\sendf.h" />
    <ClInclude Include="..\..\..\..\lib\setopt.h" />
    <ClInclude Include="..\..\..\..\lib\setup-vms.h" />
    <ClInclude Include="..\..\..\..\lib\share.h" />
    <ClInclude Include="..\..\..\..\lib\sigpipe.h" />







>







2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
    <ClInclude Include="..\..\..\..\lib\parsedate.h" />
    <ClInclude Include="..\..\..\..\lib\pingpong.h" />
    <ClInclude Include="..\..\..\..\lib\pop3.h" />
    <ClInclude Include="..\..\..\..\lib\progress.h" />
    <ClInclude Include="..\..\..\..\lib\psl.h" />
    <ClInclude Include="..\..\..\..\lib\quic.h" />
    <ClInclude Include="..\..\..\..\lib\rand.h" />
    <ClInclude Include="..\..\..\..\lib\rename.h" />
    <ClInclude Include="..\..\..\..\lib\rtsp.h" />
    <ClInclude Include="..\..\..\..\lib\select.h" />
    <ClInclude Include="..\..\..\..\lib\sendf.h" />
    <ClInclude Include="..\..\..\..\lib\setopt.h" />
    <ClInclude Include="..\..\..\..\lib\setup-vms.h" />
    <ClInclude Include="..\..\..\..\lib\share.h" />
    <ClInclude Include="..\..\..\..\lib\sigpipe.h" />
2639
2640
2641
2642
2643
2644
2645

2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
    <ClInclude Include="..\..\..\..\lib\vquic\ngtcp2.h" />
    <ClInclude Include="..\..\..\..\lib\vquic\quiche.h" />
    <ClInclude Include="..\..\..\..\lib\vssh\ssh.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\bearssl.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\gskit.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\gtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\mbedtls.h" />

    <ClInclude Include="..\..\..\..\lib\vtls\mesalink.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\nssg.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\openssl.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\polarssl.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\polarssl_threadlock.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\schannel.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\sectransp.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\vtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\wolfssl.h" />
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="..\..\..\..\lib\libcurl.rc" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>







>



<
<












2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651


2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
    <ClInclude Include="..\..\..\..\lib\vquic\ngtcp2.h" />
    <ClInclude Include="..\..\..\..\lib\vquic\quiche.h" />
    <ClInclude Include="..\..\..\..\lib\vssh\ssh.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\bearssl.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\gskit.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\gtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\mbedtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\mbedtls_threadlock.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\mesalink.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\nssg.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\openssl.h" />


    <ClInclude Include="..\..\..\..\lib\vtls\schannel.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\sectransp.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\vtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\wolfssl.h" />
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="..\..\..\..\lib\libcurl.rc" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>
Changes to jni/curl/projects/Windows/VC12/src/curl.sln.
Changes to jni/curl/projects/Windows/VC14/curl-all.sln.
Changes to jni/curl/projects/Windows/VC14/lib/libcurl.sln.
Changes to jni/curl/projects/Windows/VC14/lib/libcurl.vcxproj.
2454
2455
2456
2457
2458
2459
2460

2461
2462
2463
2464
2465
2466
2467
    <ClCompile Include="..\..\..\..\lib\openldap.c" />
    <ClCompile Include="..\..\..\..\lib\parsedate.c" />
    <ClCompile Include="..\..\..\..\lib\pingpong.c" />
    <ClCompile Include="..\..\..\..\lib\pop3.c" />
    <ClCompile Include="..\..\..\..\lib\progress.c" />
    <ClCompile Include="..\..\..\..\lib\psl.c" />
    <ClCompile Include="..\..\..\..\lib\rand.c" />

    <ClCompile Include="..\..\..\..\lib\rtsp.c" />
    <ClCompile Include="..\..\..\..\lib\security.c" />
    <ClCompile Include="..\..\..\..\lib\select.c" />
    <ClCompile Include="..\..\..\..\lib\sendf.c" />
    <ClCompile Include="..\..\..\..\lib\setopt.c" />
    <ClCompile Include="..\..\..\..\lib\sha256.c" />
    <ClCompile Include="..\..\..\..\lib\share.c" />







>







2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
    <ClCompile Include="..\..\..\..\lib\openldap.c" />
    <ClCompile Include="..\..\..\..\lib\parsedate.c" />
    <ClCompile Include="..\..\..\..\lib\pingpong.c" />
    <ClCompile Include="..\..\..\..\lib\pop3.c" />
    <ClCompile Include="..\..\..\..\lib\progress.c" />
    <ClCompile Include="..\..\..\..\lib\psl.c" />
    <ClCompile Include="..\..\..\..\lib\rand.c" />
    <ClCompile Include="..\..\..\..\lib\rename.c" />
    <ClCompile Include="..\..\..\..\lib\rtsp.c" />
    <ClCompile Include="..\..\..\..\lib\security.c" />
    <ClCompile Include="..\..\..\..\lib\select.c" />
    <ClCompile Include="..\..\..\..\lib\sendf.c" />
    <ClCompile Include="..\..\..\..\lib\setopt.c" />
    <ClCompile Include="..\..\..\..\lib\sha256.c" />
    <ClCompile Include="..\..\..\..\lib\share.c" />
2502
2503
2504
2505
2506
2507
2508

2509
2510
2511
2512

2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
    <ClCompile Include="..\..\..\..\lib\vauth\spnego_gssapi.c" />
    <ClCompile Include="..\..\..\..\lib\vauth\spnego_sspi.c" />
    <ClCompile Include="..\..\..\..\lib\vauth\vauth.c" />
    <ClCompile Include="..\..\..\..\lib\vquic\ngtcp2.c" />
    <ClCompile Include="..\..\..\..\lib\vquic\quiche.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\libssh2.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\libssh.c" />

    <ClCompile Include="..\..\..\..\lib\vtls\bearssl.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\gskit.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\gtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\mbedtls.c" />

    <ClCompile Include="..\..\..\..\lib\vtls\mesalink.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\nss.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\openssl.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\polarssl.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\polarssl_threadlock.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\schannel.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\schannel_verify.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\sectransp.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\vtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\wolfssl.c" />
  </ItemGroup>
  <ItemGroup>







>




>



<
<







2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518


2519
2520
2521
2522
2523
2524
2525
    <ClCompile Include="..\..\..\..\lib\vauth\spnego_gssapi.c" />
    <ClCompile Include="..\..\..\..\lib\vauth\spnego_sspi.c" />
    <ClCompile Include="..\..\..\..\lib\vauth\vauth.c" />
    <ClCompile Include="..\..\..\..\lib\vquic\ngtcp2.c" />
    <ClCompile Include="..\..\..\..\lib\vquic\quiche.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\libssh2.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\libssh.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\wolfssh.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\bearssl.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\gskit.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\gtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\mbedtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\mbedtls_threadlock.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\mesalink.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\nss.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\openssl.c" />


    <ClCompile Include="..\..\..\..\lib\vtls\schannel.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\schannel_verify.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\sectransp.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\vtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\wolfssl.c" />
  </ItemGroup>
  <ItemGroup>
2598
2599
2600
2601
2602
2603
2604

2605
2606
2607
2608
2609
2610
2611
    <ClInclude Include="..\..\..\..\lib\parsedate.h" />
    <ClInclude Include="..\..\..\..\lib\pingpong.h" />
    <ClInclude Include="..\..\..\..\lib\pop3.h" />
    <ClInclude Include="..\..\..\..\lib\progress.h" />
    <ClInclude Include="..\..\..\..\lib\psl.h" />
    <ClInclude Include="..\..\..\..\lib\quic.h" />
    <ClInclude Include="..\..\..\..\lib\rand.h" />

    <ClInclude Include="..\..\..\..\lib\rtsp.h" />
    <ClInclude Include="..\..\..\..\lib\select.h" />
    <ClInclude Include="..\..\..\..\lib\sendf.h" />
    <ClInclude Include="..\..\..\..\lib\setopt.h" />
    <ClInclude Include="..\..\..\..\lib\setup-vms.h" />
    <ClInclude Include="..\..\..\..\lib\share.h" />
    <ClInclude Include="..\..\..\..\lib\sigpipe.h" />







>







2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
    <ClInclude Include="..\..\..\..\lib\parsedate.h" />
    <ClInclude Include="..\..\..\..\lib\pingpong.h" />
    <ClInclude Include="..\..\..\..\lib\pop3.h" />
    <ClInclude Include="..\..\..\..\lib\progress.h" />
    <ClInclude Include="..\..\..\..\lib\psl.h" />
    <ClInclude Include="..\..\..\..\lib\quic.h" />
    <ClInclude Include="..\..\..\..\lib\rand.h" />
    <ClInclude Include="..\..\..\..\lib\rename.h" />
    <ClInclude Include="..\..\..\..\lib\rtsp.h" />
    <ClInclude Include="..\..\..\..\lib\select.h" />
    <ClInclude Include="..\..\..\..\lib\sendf.h" />
    <ClInclude Include="..\..\..\..\lib\setopt.h" />
    <ClInclude Include="..\..\..\..\lib\setup-vms.h" />
    <ClInclude Include="..\..\..\..\lib\share.h" />
    <ClInclude Include="..\..\..\..\lib\sigpipe.h" />
2639
2640
2641
2642
2643
2644
2645

2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
    <ClInclude Include="..\..\..\..\lib\vquic\ngtcp2.h" />
    <ClInclude Include="..\..\..\..\lib\vquic\quiche.h" />
    <ClInclude Include="..\..\..\..\lib\vssh\ssh.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\bearssl.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\gskit.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\gtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\mbedtls.h" />

    <ClInclude Include="..\..\..\..\lib\vtls\mesalink.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\nssg.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\openssl.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\polarssl.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\polarssl_threadlock.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\schannel.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\sectransp.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\vtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\wolfssl.h" />
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="..\..\..\..\lib\libcurl.rc" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>







>



<
<












2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651


2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
    <ClInclude Include="..\..\..\..\lib\vquic\ngtcp2.h" />
    <ClInclude Include="..\..\..\..\lib\vquic\quiche.h" />
    <ClInclude Include="..\..\..\..\lib\vssh\ssh.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\bearssl.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\gskit.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\gtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\mbedtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\mbedtls_threadlock.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\mesalink.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\nssg.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\openssl.h" />


    <ClInclude Include="..\..\..\..\lib\vtls\schannel.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\sectransp.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\vtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\wolfssl.h" />
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="..\..\..\..\lib\libcurl.rc" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>
Changes to jni/curl/projects/Windows/VC14/src/curl.sln.
Changes to jni/curl/projects/Windows/VC15/lib/libcurl.vcxproj.
2426
2427
2428
2429
2430
2431
2432

2433
2434
2435
2436
2437
2438
2439
    <ClCompile Include="..\..\..\..\lib\openldap.c" />
    <ClCompile Include="..\..\..\..\lib\parsedate.c" />
    <ClCompile Include="..\..\..\..\lib\pingpong.c" />
    <ClCompile Include="..\..\..\..\lib\pop3.c" />
    <ClCompile Include="..\..\..\..\lib\progress.c" />
    <ClCompile Include="..\..\..\..\lib\psl.c" />
    <ClCompile Include="..\..\..\..\lib\rand.c" />

    <ClCompile Include="..\..\..\..\lib\rtsp.c" />
    <ClCompile Include="..\..\..\..\lib\security.c" />
    <ClCompile Include="..\..\..\..\lib\select.c" />
    <ClCompile Include="..\..\..\..\lib\sendf.c" />
    <ClCompile Include="..\..\..\..\lib\setopt.c" />
    <ClCompile Include="..\..\..\..\lib\sha256.c" />
    <ClCompile Include="..\..\..\..\lib\share.c" />







>







2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
    <ClCompile Include="..\..\..\..\lib\openldap.c" />
    <ClCompile Include="..\..\..\..\lib\parsedate.c" />
    <ClCompile Include="..\..\..\..\lib\pingpong.c" />
    <ClCompile Include="..\..\..\..\lib\pop3.c" />
    <ClCompile Include="..\..\..\..\lib\progress.c" />
    <ClCompile Include="..\..\..\..\lib\psl.c" />
    <ClCompile Include="..\..\..\..\lib\rand.c" />
    <ClCompile Include="..\..\..\..\lib\rename.c" />
    <ClCompile Include="..\..\..\..\lib\rtsp.c" />
    <ClCompile Include="..\..\..\..\lib\security.c" />
    <ClCompile Include="..\..\..\..\lib\select.c" />
    <ClCompile Include="..\..\..\..\lib\sendf.c" />
    <ClCompile Include="..\..\..\..\lib\setopt.c" />
    <ClCompile Include="..\..\..\..\lib\sha256.c" />
    <ClCompile Include="..\..\..\..\lib\share.c" />
2474
2475
2476
2477
2478
2479
2480

2481
2482
2483
2484

2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
    <ClCompile Include="..\..\..\..\lib\vauth\spnego_gssapi.c" />
    <ClCompile Include="..\..\..\..\lib\vauth\spnego_sspi.c" />
    <ClCompile Include="..\..\..\..\lib\vauth\vauth.c" />
    <ClCompile Include="..\..\..\..\lib\vquic\ngtcp2.c" />
    <ClCompile Include="..\..\..\..\lib\vquic\quiche.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\libssh2.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\libssh.c" />

    <ClCompile Include="..\..\..\..\lib\vtls\bearssl.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\gskit.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\gtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\mbedtls.c" />

    <ClCompile Include="..\..\..\..\lib\vtls\mesalink.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\nss.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\openssl.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\polarssl.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\polarssl_threadlock.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\schannel.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\schannel_verify.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\sectransp.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\vtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\wolfssl.c" />
  </ItemGroup>
  <ItemGroup>







>




>



<
<







2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490


2491
2492
2493
2494
2495
2496
2497
    <ClCompile Include="..\..\..\..\lib\vauth\spnego_gssapi.c" />
    <ClCompile Include="..\..\..\..\lib\vauth\spnego_sspi.c" />
    <ClCompile Include="..\..\..\..\lib\vauth\vauth.c" />
    <ClCompile Include="..\..\..\..\lib\vquic\ngtcp2.c" />
    <ClCompile Include="..\..\..\..\lib\vquic\quiche.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\libssh2.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\libssh.c" />
    <ClCompile Include="..\..\..\..\lib\vssh\wolfssh.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\bearssl.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\gskit.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\gtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\mbedtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\mbedtls_threadlock.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\mesalink.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\nss.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\openssl.c" />


    <ClCompile Include="..\..\..\..\lib\vtls\schannel.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\schannel_verify.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\sectransp.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\vtls.c" />
    <ClCompile Include="..\..\..\..\lib\vtls\wolfssl.c" />
  </ItemGroup>
  <ItemGroup>
2570
2571
2572
2573
2574
2575
2576

2577
2578
2579
2580
2581
2582
2583
    <ClInclude Include="..\..\..\..\lib\parsedate.h" />
    <ClInclude Include="..\..\..\..\lib\pingpong.h" />
    <ClInclude Include="..\..\..\..\lib\pop3.h" />
    <ClInclude Include="..\..\..\..\lib\progress.h" />
    <ClInclude Include="..\..\..\..\lib\psl.h" />
    <ClInclude Include="..\..\..\..\lib\quic.h" />
    <ClInclude Include="..\..\..\..\lib\rand.h" />

    <ClInclude Include="..\..\..\..\lib\rtsp.h" />
    <ClInclude Include="..\..\..\..\lib\select.h" />
    <ClInclude Include="..\..\..\..\lib\sendf.h" />
    <ClInclude Include="..\..\..\..\lib\setopt.h" />
    <ClInclude Include="..\..\..\..\lib\setup-vms.h" />
    <ClInclude Include="..\..\..\..\lib\share.h" />
    <ClInclude Include="..\..\..\..\lib\sigpipe.h" />







>







2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
    <ClInclude Include="..\..\..\..\lib\parsedate.h" />
    <ClInclude Include="..\..\..\..\lib\pingpong.h" />
    <ClInclude Include="..\..\..\..\lib\pop3.h" />
    <ClInclude Include="..\..\..\..\lib\progress.h" />
    <ClInclude Include="..\..\..\..\lib\psl.h" />
    <ClInclude Include="..\..\..\..\lib\quic.h" />
    <ClInclude Include="..\..\..\..\lib\rand.h" />
    <ClInclude Include="..\..\..\..\lib\rename.h" />
    <ClInclude Include="..\..\..\..\lib\rtsp.h" />
    <ClInclude Include="..\..\..\..\lib\select.h" />
    <ClInclude Include="..\..\..\..\lib\sendf.h" />
    <ClInclude Include="..\..\..\..\lib\setopt.h" />
    <ClInclude Include="..\..\..\..\lib\setup-vms.h" />
    <ClInclude Include="..\..\..\..\lib\share.h" />
    <ClInclude Include="..\..\..\..\lib\sigpipe.h" />
2611
2612
2613
2614
2615
2616
2617

2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
    <ClInclude Include="..\..\..\..\lib\vquic\ngtcp2.h" />
    <ClInclude Include="..\..\..\..\lib\vquic\quiche.h" />
    <ClInclude Include="..\..\..\..\lib\vssh\ssh.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\bearssl.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\gskit.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\gtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\mbedtls.h" />

    <ClInclude Include="..\..\..\..\lib\vtls\mesalink.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\nssg.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\openssl.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\polarssl.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\polarssl_threadlock.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\schannel.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\sectransp.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\vtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\wolfssl.h" />
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="..\..\..\..\lib\libcurl.rc" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>







>



<
<












2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623


2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
    <ClInclude Include="..\..\..\..\lib\vquic\ngtcp2.h" />
    <ClInclude Include="..\..\..\..\lib\vquic\quiche.h" />
    <ClInclude Include="..\..\..\..\lib\vssh\ssh.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\bearssl.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\gskit.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\gtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\mbedtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\mbedtls_threadlock.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\mesalink.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\nssg.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\openssl.h" />


    <ClInclude Include="..\..\..\..\lib\vtls\schannel.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\sectransp.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\vtls.h" />
    <ClInclude Include="..\..\..\..\lib\vtls\wolfssl.h" />
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="..\..\..\..\lib\libcurl.rc" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>
Changes to jni/curl/projects/Windows/VC6/lib/libcurl.dsp.
1041
1042
1043
1044
1045
1046
1047




1048
1049
1050
1051
1052
1053
1054
SOURCE=..\..\..\..\lib\psl.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\rand.c
# End Source File
# Begin Source File





SOURCE=..\..\..\..\lib\rtsp.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\security.c
# End Source File







>
>
>
>







1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
SOURCE=..\..\..\..\lib\psl.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\rand.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\rename.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\rtsp.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\security.c
# End Source File
1233
1234
1235
1236
1237
1238
1239




1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255




1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
SOURCE=..\..\..\..\lib\vssh\libssh2.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vssh\libssh.c
# End Source File
# Begin Source File





SOURCE=..\..\..\..\lib\vtls\bearssl.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\gskit.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\gtls.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\mbedtls.c
# End Source File
# Begin Source File





SOURCE=..\..\..\..\lib\vtls\mesalink.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\nss.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\openssl.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\polarssl.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\polarssl_threadlock.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\schannel.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\schannel_verify.c







>
>
>
>
















>
>
>
>











<
<
<
<
<
<
<
<







1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278








1279
1280
1281
1282
1283
1284
1285
SOURCE=..\..\..\..\lib\vssh\libssh2.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vssh\libssh.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vssh\wolfssh.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\bearssl.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\gskit.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\gtls.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\mbedtls.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\mbedtls_threadlock.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\mesalink.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\nss.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\openssl.c
# End Source File








# Begin Source File

SOURCE=..\..\..\..\lib\vtls\schannel.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\schannel_verify.c
1613
1614
1615
1616
1617
1618
1619




1620
1621
1622
1623
1624
1625
1626
SOURCE=..\..\..\..\lib\quic.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\rand.h
# End Source File
# Begin Source File





SOURCE=..\..\..\..\lib\rtsp.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\select.h
# End Source File







>
>
>
>







1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
SOURCE=..\..\..\..\lib\quic.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\rand.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\rename.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\rtsp.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\select.h
# End Source File
1777
1778
1779
1780
1781
1782
1783




1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
SOURCE=..\..\..\..\lib\vtls\gtls.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\mbedtls.h
# End Source File
# Begin Source File





SOURCE=..\..\..\..\lib\vtls\mesalink.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\nssg.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\openssl.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\polarssl.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\polarssl_threadlock.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\schannel.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\sectransp.h







>
>
>
>











<
<
<
<
<
<
<
<







1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806








1807
1808
1809
1810
1811
1812
1813
SOURCE=..\..\..\..\lib\vtls\gtls.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\mbedtls.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\mbedtls_threadlock.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\mesalink.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\nssg.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\openssl.h
# End Source File








# Begin Source File

SOURCE=..\..\..\..\lib\vtls\schannel.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\vtls\sectransp.h
Changes to jni/curl/projects/Windows/VC7.1/curl-all.sln.
Changes to jni/curl/projects/Windows/VC7.1/lib/libcurl.sln.
Changes to jni/curl/projects/Windows/VC7.1/lib/libcurl.vcproj.
1488
1489
1490
1491
1492
1493
1494



1495
1496
1497
1498
1499
1500
1501
			</File>
			<File
				RelativePath="..\..\..\..\lib\psl.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\rand.c">
			</File>



			<File
				RelativePath="..\..\..\..\lib\rtsp.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\security.c">
			</File>
			<File







>
>
>







1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
			</File>
			<File
				RelativePath="..\..\..\..\lib\psl.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\rand.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\rename.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\rtsp.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\security.c">
			</File>
			<File
1828
1829
1830
1831
1832
1833
1834



1835
1836
1837
1838
1839
1840
1841
			</File>
			<File
				RelativePath="..\..\..\..\lib\quic.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\rand.h">
			</File>



			<File
				RelativePath="..\..\..\..\lib\rtsp.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\select.h">
			</File>
			<File







>
>
>







1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
			</File>
			<File
				RelativePath="..\..\..\..\lib\quic.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\rand.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\rename.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\rtsp.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\select.h">
			</File>
			<File
2022
2023
2024
2025
2026
2027
2028



2029
2030
2031
2032
2033
2034
2035
				Filter="">
				<File
					RelativePath="..\..\..\..\lib\vssh\libssh2.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vssh\libssh.c">
				</File>



			</Filter>
			<Filter
				Name="Header Files"
				Filter="">
				<File
					RelativePath="..\..\..\..\lib\vssh\ssh.h">
				</File>







>
>
>







2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
				Filter="">
				<File
					RelativePath="..\..\..\..\lib\vssh\libssh2.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vssh\libssh.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vssh\wolfssh.c">
				</File>
			</Filter>
			<Filter
				Name="Header Files"
				Filter="">
				<File
					RelativePath="..\..\..\..\lib\vssh\ssh.h">
				</File>
2049
2050
2051
2052
2053
2054
2055



2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\gtls.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls.c">
				</File>



				<File
					RelativePath="..\..\..\..\lib\vtls\mesalink.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\nss.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\openssl.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\polarssl.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\polarssl_threadlock.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\schannel.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\schannel_verify.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\sectransp.c">







>
>
>










<
<
<
<
<
<







2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077






2078
2079
2080
2081
2082
2083
2084
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\gtls.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls_threadlock.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mesalink.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\nss.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\openssl.c">
				</File>
				<File






					RelativePath="..\..\..\..\lib\vtls\schannel.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\schannel_verify.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\sectransp.c">
2095
2096
2097
2098
2099
2100
2101



2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\gtls.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls.h">
				</File>



				<File
					RelativePath="..\..\..\..\lib\vtls\mesalink.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\nssg.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\openssl.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\polarssl.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\polarssl_threadlock.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\schannel.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\sectransp.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\vtls.h">







>
>
>










<
<
<
<
<
<







2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120






2121
2122
2123
2124
2125
2126
2127
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\gtls.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls_threadlock.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mesalink.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\nssg.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\openssl.h">
				</File>
				<File






					RelativePath="..\..\..\..\lib\vtls\schannel.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\sectransp.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\vtls.h">
Changes to jni/curl/projects/Windows/VC7.1/src/curl.sln.
Changes to jni/curl/projects/Windows/VC7/curl-all.sln.
Changes to jni/curl/projects/Windows/VC7/lib/libcurl.sln.
Changes to jni/curl/projects/Windows/VC7/lib/libcurl.vcproj.
1342
1343
1344
1345
1346
1347
1348



1349
1350
1351
1352
1353
1354
1355
			</File>
			<File
				RelativePath="..\..\..\..\lib\psl.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\rand.c">
			</File>



			<File
				RelativePath="..\..\..\..\lib\rtsp.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\security.c">
			</File>
			<File







>
>
>







1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
			</File>
			<File
				RelativePath="..\..\..\..\lib\psl.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\rand.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\rename.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\rtsp.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\security.c">
			</File>
			<File
1682
1683
1684
1685
1686
1687
1688



1689
1690
1691
1692
1693
1694
1695
			</File>
			<File
				RelativePath="..\..\..\..\lib\quic.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\rand.h">
			</File>



			<File
				RelativePath="..\..\..\..\lib\rtsp.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\select.h">
			</File>
			<File







>
>
>







1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
			</File>
			<File
				RelativePath="..\..\..\..\lib\quic.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\rand.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\rename.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\rtsp.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\select.h">
			</File>
			<File
1876
1877
1878
1879
1880
1881
1882



1883
1884
1885
1886
1887
1888
1889
				Filter="">
				<File
					RelativePath="..\..\..\..\lib\vssh\libssh2.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vssh\libssh.c">
				</File>



			</Filter>
			<Filter
				Name="Header Files"
				Filter="">
				<File
					RelativePath="..\..\..\..\lib\vssh\ssh.h">
				</File>







>
>
>







1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
				Filter="">
				<File
					RelativePath="..\..\..\..\lib\vssh\libssh2.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vssh\libssh.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vssh\wolfssh.c">
				</File>
			</Filter>
			<Filter
				Name="Header Files"
				Filter="">
				<File
					RelativePath="..\..\..\..\lib\vssh\ssh.h">
				</File>
1903
1904
1905
1906
1907
1908
1909



1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\gtls.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls.c">
				</File>



				<File
					RelativePath="..\..\..\..\lib\vtls\mesalink.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\nss.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\openssl.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\polarssl.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\polarssl_threadlock.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\schannel.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\schannel_verify.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\sectransp.c">







>
>
>










<
<
<
<
<
<







1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931






1932
1933
1934
1935
1936
1937
1938
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\gtls.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls_threadlock.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mesalink.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\nss.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\openssl.c">
				</File>
				<File






					RelativePath="..\..\..\..\lib\vtls\schannel.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\schannel_verify.c">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\sectransp.c">
1949
1950
1951
1952
1953
1954
1955



1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\gtls.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls.h">
				</File>



				<File
					RelativePath="..\..\..\..\lib\vtls\mesalink.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\nssg.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\openssl.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\polarssl.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\polarssl_threadlock.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\schannel.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\sectransp.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\vtls.h">







>
>
>










<
<
<
<
<
<







1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974






1975
1976
1977
1978
1979
1980
1981
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\gtls.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls_threadlock.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mesalink.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\nssg.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\openssl.h">
				</File>
				<File






					RelativePath="..\..\..\..\lib\vtls\schannel.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\sectransp.h">
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\vtls.h">
Changes to jni/curl/projects/Windows/VC7/src/curl.sln.
Changes to jni/curl/projects/Windows/VC8/curl-all.sln.
Changes to jni/curl/projects/Windows/VC8/lib/libcurl.sln.
Changes to jni/curl/projects/Windows/VC8/lib/libcurl.vcproj.
3927
3928
3929
3930
3931
3932
3933




3934
3935
3936
3937
3938
3939
3940
			<File
				RelativePath="..\..\..\..\lib\psl.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\rand.c"
			>




			</File>
			<File
				RelativePath="..\..\..\..\lib\rtsp.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\security.c"







>
>
>
>







3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
			<File
				RelativePath="..\..\..\..\lib\psl.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\rand.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\rename.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\rtsp.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\security.c"
4379
4380
4381
4382
4383
4384
4385




4386
4387
4388
4389
4390
4391
4392
			<File
				RelativePath="..\..\..\..\lib\quic.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\rand.h"
			>




			</File>
			<File
				RelativePath="..\..\..\..\lib\rtsp.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\select.h"







>
>
>
>







4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
			<File
				RelativePath="..\..\..\..\lib\quic.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\rand.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\rename.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\rtsp.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\select.h"
4626
4627
4628
4629
4630
4631
4632




4633
4634
4635
4636
4637
4638
4639
				<File
					RelativePath="..\..\..\..\lib\vssh\libssh2.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vssh\libssh.c"
				>




				</File>
			</Filter>
			<Filter
				Name="Header Files"
				>
				<File
					RelativePath="..\..\..\..\lib\vssh\ssh.h"







>
>
>
>







4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
				<File
					RelativePath="..\..\..\..\lib\vssh\libssh2.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vssh\libssh.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vssh\wolfssh.c"
				>
				</File>
			</Filter>
			<Filter
				Name="Header Files"
				>
				<File
					RelativePath="..\..\..\..\lib\vssh\ssh.h"
4658
4659
4660
4661
4662
4663
4664




4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
				<File
					RelativePath="..\..\..\..\lib\vtls\gtls.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls.c"
				>




				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mesalink.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\nss.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\openssl.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\polarssl.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\polarssl_threadlock.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\schannel.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\schannel_verify.c"







>
>
>
>












<
<
<
<
<
<
<
<







4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692








4693
4694
4695
4696
4697
4698
4699
				<File
					RelativePath="..\..\..\..\lib\vtls\gtls.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls_threadlock.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mesalink.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\nss.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\openssl.c"
				>








				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\schannel.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\schannel_verify.c"
4718
4719
4720
4721
4722
4723
4724




4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
				<File
					RelativePath="..\..\..\..\lib\vtls\gtls.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls.h"
				>




				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mesalink.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\nssg.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\openssl.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\polarssl.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\polarssl_threadlock.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\schannel.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\sectransp.h"







>
>
>
>












<
<
<
<
<
<
<
<







4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748








4749
4750
4751
4752
4753
4754
4755
				<File
					RelativePath="..\..\..\..\lib\vtls\gtls.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls_threadlock.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mesalink.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\nssg.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\openssl.h"
				>








				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\schannel.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\sectransp.h"
Changes to jni/curl/projects/Windows/VC8/src/curl.sln.
Changes to jni/curl/projects/Windows/VC9/curl-all.sln.
Changes to jni/curl/projects/Windows/VC9/lib/libcurl.sln.
Changes to jni/curl/projects/Windows/VC9/lib/libcurl.vcproj.
3868
3869
3870
3871
3872
3873
3874




3875
3876
3877
3878
3879
3880
3881
			<File
				RelativePath="..\..\..\..\lib\psl.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\rand.c"
			>




			</File>
			<File
				RelativePath="..\..\..\..\lib\rtsp.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\security.c"







>
>
>
>







3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
			<File
				RelativePath="..\..\..\..\lib\psl.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\rand.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\rename.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\rtsp.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\security.c"
4320
4321
4322
4323
4324
4325
4326




4327
4328
4329
4330
4331
4332
4333
			<File
				RelativePath="..\..\..\..\lib\quic.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\rand.h"
			>




			</File>
			<File
				RelativePath="..\..\..\..\lib\rtsp.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\select.h"







>
>
>
>







4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
			<File
				RelativePath="..\..\..\..\lib\quic.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\rand.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\rename.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\rtsp.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\select.h"
4567
4568
4569
4570
4571
4572
4573




4574
4575
4576
4577
4578
4579
4580
				<File
					RelativePath="..\..\..\..\lib\vssh\libssh2.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vssh\libssh.c"
				>




				</File>
			</Filter>
			<Filter
				Name="Header Files"
				>
				<File
					RelativePath="..\..\..\..\lib\vssh\ssh.h"







>
>
>
>







4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
				<File
					RelativePath="..\..\..\..\lib\vssh\libssh2.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vssh\libssh.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vssh\wolfssh.c"
				>
				</File>
			</Filter>
			<Filter
				Name="Header Files"
				>
				<File
					RelativePath="..\..\..\..\lib\vssh\ssh.h"
4599
4600
4601
4602
4603
4604
4605




4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
				<File
					RelativePath="..\..\..\..\lib\vtls\gtls.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls.c"
				>




				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mesalink.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\nss.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\openssl.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\polarssl.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\polarssl_threadlock.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\schannel.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\schannel_verify.c"







>
>
>
>












<
<
<
<
<
<
<
<







4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633








4634
4635
4636
4637
4638
4639
4640
				<File
					RelativePath="..\..\..\..\lib\vtls\gtls.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls_threadlock.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mesalink.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\nss.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\openssl.c"
				>








				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\schannel.c"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\schannel_verify.c"
4659
4660
4661
4662
4663
4664
4665




4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
				<File
					RelativePath="..\..\..\..\lib\vtls\gtls.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls.h"
				>




				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mesalink.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\nssg.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\openssl.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\polarssl.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\polarssl_threadlock.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\schannel.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\sectransp.h"







>
>
>
>












<
<
<
<
<
<
<
<







4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689








4690
4691
4692
4693
4694
4695
4696
				<File
					RelativePath="..\..\..\..\lib\vtls\gtls.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mbedtls_threadlock.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\mesalink.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\nssg.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\openssl.h"
				>








				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\schannel.h"
				>
				</File>
				<File
					RelativePath="..\..\..\..\lib\vtls\sectransp.h"
Changes to jni/curl/projects/Windows/VC9/src/curl.sln.
Changes to jni/curl/projects/checksrc.bat.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
rem ***************************************************************************
rem *                                  _   _ ____  _
rem *  Project                     ___| | | |  _ \| |
rem *                             / __| | | | |_) | |
rem *                            | (__| |_| |  _ <| |___
rem *                             \___|\___/|_| \_\_____|
rem *
rem * Copyright (C) 2014 - 2016, Steve Holme, <steve_holme@hotmail.com>.
rem *
rem * This software is licensed as described in the file COPYING, which
rem * you should have received as part of this distribution. The terms
rem * are also available at https://curl.haxx.se/docs/copyright.html.
rem *
rem * You may opt to use, copy, modify, merge, publish, distribute and/or sell
rem * copies of the Software, and permit persons to whom the Software is








|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
rem ***************************************************************************
rem *                                  _   _ ____  _
rem *  Project                     ___| | | |  _ \| |
rem *                             / __| | | | |_) | |
rem *                            | (__| |_| |  _ <| |___
rem *                             \___|\___/|_| \_\_____|
rem *
rem * Copyright (C) 2014 - 2020, Steve Holme, <steve_holme@hotmail.com>.
rem *
rem * This software is licensed as described in the file COPYING, which
rem * you should have received as part of this distribution. The terms
rem * are also available at https://curl.haxx.se/docs/copyright.html.
rem *
rem * You may opt to use, copy, modify, merge, publish, distribute and/or sell
rem * copies of the Software, and permit persons to whom the Software is
27
28
29
30
31
32
33



34
35
36
37
38
39
40

  rem Set our variables
  setlocal
  set CHECK_LIB=TRUE
  set CHECK_SRC=TRUE
  set CHECK_TESTS=TRUE
  set CHECK_EXAMPLES=TRUE




:parseArgs
  if "%~1" == "" goto prerequisites

  if /i "%~1" == "-?" (
    goto syntax
  ) else if /i "%~1" == "-h" (







>
>
>







27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

  rem Set our variables
  setlocal
  set CHECK_LIB=TRUE
  set CHECK_SRC=TRUE
  set CHECK_TESTS=TRUE
  set CHECK_EXAMPLES=TRUE
  set SRC_DIR=
  set CUR_DIR=%cd%
  set ARG0_DIR=%~dp0

:parseArgs
  if "%~1" == "" goto prerequisites

  if /i "%~1" == "-?" (
    goto syntax
  ) else if /i "%~1" == "-h" (
84
85
86
87
88
89
90
91















92
93
94
95
96
97
98
      ) else (
        goto noperl
      )
    )
  )

:configure
  if "%SRC_DIR%" == "" set SRC_DIR=..















  if not exist "%SRC_DIR%" goto nosrc

:start
  if "%CHECK_SRC%" == "TRUE" (
    rem Check the src directory
    if exist %SRC_DIR%\src (
      for /f "delims=" %%i in ('dir "%SRC_DIR%\src\*.c.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\src" -Wtool_hugehelp.c "%%i"







|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
      ) else (
        goto noperl
      )
    )
  )

:configure
  if "%SRC_DIR%" == "" (
    rem Are we being executed from the "projects" or main directory?
    if "%CUR_DIR%\" == "%ARG0_DIR%" (
      set SRC_DIR=..
    ) else if exist projects (
      if exist docs (
        if exist lib (
          if exist src (
            if exist tests (
              set SRC_DIR=.
            )
          )
        )
      )
    )
  )
  if not exist "%SRC_DIR%" goto nosrc

:start
  if "%CHECK_SRC%" == "TRUE" (
    rem Check the src directory
    if exist %SRC_DIR%\src (
      for /f "delims=" %%i in ('dir "%SRC_DIR%\src\*.c.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\src" -Wtool_hugehelp.c "%%i"
Changes to jni/curl/scripts/Makefile.in.
276
277
278
279
280
281
282

283
284
285
286
287
288
289
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@

USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@

#***************************************************************************
#                                  _   _ ____  _







>







276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
USE_WOLFSSH = @USE_WOLFSSH@
USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@

#***************************************************************************
#                                  _   _ ____  _
Changes to jni/curl/src/CMakeLists.txt.
41
42
43
44
45
46
47






48
49
50
51
52
53
54
endif()

# CURL_FILES comes from Makefile.inc
add_executable(
  ${EXE_NAME}
  ${CURL_FILES}
  )







source_group("curlX source files" FILES ${CURLX_CFILES})
source_group("curl source files" FILES ${CURL_CFILES})
source_group("curl header files" FILES ${CURL_HFILES})

include_directories(
  ${CURL_SOURCE_DIR}/lib        # To be able to reach "curl_setup_once.h"







>
>
>
>
>
>







41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
endif()

# CURL_FILES comes from Makefile.inc
add_executable(
  ${EXE_NAME}
  ${CURL_FILES}
  )

if(CURL_HAS_LTO)
  set_target_properties(${EXE_NAME} PROPERTIES
    INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
    INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE)
endif()

source_group("curlX source files" FILES ${CURLX_CFILES})
source_group("curl source files" FILES ${CURL_CFILES})
source_group("curl header files" FILES ${CURL_HFILES})

include_directories(
  ${CURL_SOURCE_DIR}/lib        # To be able to reach "curl_setup_once.h"
Changes to jni/curl/src/Makefile.in.
559
560
561
562
563
564
565

566
567
568
569
570
571
572
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@

USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@







>







559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
USE_WOLFSSH = @USE_WOLFSSH@
USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
Changes to jni/curl/src/tool_cb_hdr.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
   * Once that libcurl has called back tool_header_cb() the returned value
   * is checked against the amount that was intended to be written, if
   * it does not match then it fails with CURLE_WRITE_ERROR. So at this
   * point returning a value different from sz*nmemb indicates failure.
   */
  size_t failure = (size && nmemb) ? 0 : 1;

  if(!heads->config)
    return failure;

#ifdef DEBUGBUILD
  if(size * nmemb > (size_t)CURL_MAX_HTTP_HEADER) {
    warnf(heads->config->global, "Header data exceeds single call write "
          "limit!\n");
    return failure;
  }
#endif

  /*
   * Write header data when curl option --dump-header (-D) is given.
   */

  if(heads->config->headerfile && heads->stream) {
    size_t rc = fwrite(ptr, size, nmemb, heads->stream);
    if(rc != cb)
      return rc;
    /* flush the stream to send off what we got earlier */
    (void)fflush(heads->stream);
  }

  /*
   * Write etag to file when --etag-save option is given.
   * etag string that we want is enveloped in double quotes
   */
  if(etag_save->config->etag_save_file && etag_save->stream) {
    /* match only header that start with etag (case insensitive) */
    if(curl_strnequal(str, "etag:", 5)) {
      char *etag_h = NULL;
      char *first = NULL;
      char *last = NULL;
      size_t etag_length = 0;

      etag_h = ptr;
      /* point to first occurence of double quote */
      first = memchr(etag_h, '\"', cb);

      /*
       * if server side messed with the etag header and doesn't include
       * double quotes around the etag, kindly exit with a warning
       */

      if(!first) {
        warnf(
          etag_save->config->global,
          "\nReceived header etag is missing double quote/s\n");
        return 1;
      }
      else {
        /* discard first double quote */
        first++;
      }

      /* point to last occurence of double quote */
      last = memchr(first, '\"', cb);

      if(!last) {
        warnf(
          etag_save->config->global,
          "\nReceived header etag is missing double quote/s\n");
        return 1;
      }

      /* get length of desired etag */
      etag_length = (size_t)last - (size_t)first;

      fwrite(first, size, etag_length, etag_save->stream);







|




|









|











|








|








<
|
|







|



<
|
|







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
   * Once that libcurl has called back tool_header_cb() the returned value
   * is checked against the amount that was intended to be written, if
   * it does not match then it fails with CURLE_WRITE_ERROR. So at this
   * point returning a value different from sz*nmemb indicates failure.
   */
  size_t failure = (size && nmemb) ? 0 : 1;

  if(!per->config)
    return failure;

#ifdef DEBUGBUILD
  if(size * nmemb > (size_t)CURL_MAX_HTTP_HEADER) {
    warnf(per->config->global, "Header data exceeds single call write "
          "limit!\n");
    return failure;
  }
#endif

  /*
   * Write header data when curl option --dump-header (-D) is given.
   */

  if(per->config->headerfile && heads->stream) {
    size_t rc = fwrite(ptr, size, nmemb, heads->stream);
    if(rc != cb)
      return rc;
    /* flush the stream to send off what we got earlier */
    (void)fflush(heads->stream);
  }

  /*
   * Write etag to file when --etag-save option is given.
   * etag string that we want is enveloped in double quotes
   */
  if(per->config->etag_save_file && etag_save->stream) {
    /* match only header that start with etag (case insensitive) */
    if(curl_strnequal(str, "etag:", 5)) {
      char *etag_h = NULL;
      char *first = NULL;
      char *last = NULL;
      size_t etag_length = 0;

      etag_h = ptr;
      /* point to first occurrence of double quote */
      first = memchr(etag_h, '\"', cb);

      /*
       * if server side messed with the etag header and doesn't include
       * double quotes around the etag, kindly exit with a warning
       */

      if(!first) {

        warnf(per->config->global,
              "\nReceived header etag is missing double quote/s\n");
        return 1;
      }
      else {
        /* discard first double quote */
        first++;
      }

      /* point to last occurrence of double quote */
      last = memchr(first, '\"', cb);

      if(!last) {

        warnf(per->config->global,
              "\nReceived header etag is missing double quote/s\n");
        return 1;
      }

      /* get length of desired etag */
      etag_length = (size_t)last - (size_t)first;

      fwrite(first, size, etag_length, etag_save->stream);
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
          if(outs->fopened)
            fclose(outs->stream);
          outs->stream = NULL;

          /* rename the initial file name to the new file name */
          rc = rename(outs->filename, filename);
          if(rc != 0) {
            warnf(outs->config->global, "Failed to rename %s -> %s: %s\n",
                  outs->filename, filename, strerror(errno));
          }
          if(outs->alloc_filename)
            Curl_safefree(outs->filename);
          if(rc != 0) {
            free(filename);
            return failure;
          }
        }
        outs->is_cd_filename = TRUE;
        outs->s_isreg = TRUE;
        outs->fopened = FALSE;
        outs->filename = filename;
        outs->alloc_filename = TRUE;
        hdrcbdata->honor_cd_filename = FALSE; /* done now! */
        if(!tool_create_output_file(outs))
          return failure;
      }
      break;
    }
    if(!outs->stream && !tool_create_output_file(outs))
      return failure;
  }

  if(hdrcbdata->config->show_headers &&
    (protocol &
     (CURLPROTO_HTTP|CURLPROTO_HTTPS|CURLPROTO_RTSP|CURLPROTO_FILE))) {
    /* bold headers only for selected protocols */
    char *value = NULL;

    if(!outs->stream && !tool_create_output_file(outs))
      return failure;

    if(hdrcbdata->global->isatty && hdrcbdata->global->styled_output)
      value = memchr(ptr, ':', cb);
    if(value) {
      size_t namelen = value - ptr;
      fprintf(outs->stream, BOLD "%.*s" BOLDOFF ":", namelen, ptr);







|















|




|









|







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
          if(outs->fopened)
            fclose(outs->stream);
          outs->stream = NULL;

          /* rename the initial file name to the new file name */
          rc = rename(outs->filename, filename);
          if(rc != 0) {
            warnf(per->config->global, "Failed to rename %s -> %s: %s\n",
                  outs->filename, filename, strerror(errno));
          }
          if(outs->alloc_filename)
            Curl_safefree(outs->filename);
          if(rc != 0) {
            free(filename);
            return failure;
          }
        }
        outs->is_cd_filename = TRUE;
        outs->s_isreg = TRUE;
        outs->fopened = FALSE;
        outs->filename = filename;
        outs->alloc_filename = TRUE;
        hdrcbdata->honor_cd_filename = FALSE; /* done now! */
        if(!tool_create_output_file(outs, per->config))
          return failure;
      }
      break;
    }
    if(!outs->stream && !tool_create_output_file(outs, per->config))
      return failure;
  }

  if(hdrcbdata->config->show_headers &&
    (protocol &
     (CURLPROTO_HTTP|CURLPROTO_HTTPS|CURLPROTO_RTSP|CURLPROTO_FILE))) {
    /* bold headers only for selected protocols */
    char *value = NULL;

    if(!outs->stream && !tool_create_output_file(outs, per->config))
      return failure;

    if(hdrcbdata->global->isatty && hdrcbdata->global->styled_output)
      value = memchr(ptr, ':', cb);
    if(value) {
      size_t namelen = value - ptr;
      fprintf(outs->stream, BOLD "%.*s" BOLDOFF ":", namelen, ptr);
Changes to jni/curl/src/tool_cb_prg.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
#  include <termio.h>
#endif

/* 200 values generated by this perl code:

   my $pi = 3.1415;
   foreach my $i (1 .. 200) {
     printf "%d, ", sin($i/200 * 2 * $pi) * 5000 + 5000;
   }
*/
static const unsigned int sinus[] = {
  5157, 5313, 5470, 5626, 5782, 5936, 6090, 6243, 6394, 6545, 6693, 6840, 6985,
  7128, 7269, 7408, 7545, 7679, 7810, 7938, 8064, 8187, 8306, 8422, 8535, 8644,
  8750, 8852, 8950, 9045, 9135, 9221, 9303, 9381, 9454, 9524, 9588, 9648, 9704,
  9755, 9801, 9842, 9879, 9911, 9938, 9960, 9977, 9990, 9997, 9999, 9997, 9990,
  9977, 9960, 9938, 9911, 9879, 9842, 9801, 9755, 9704, 9648, 9588, 9524, 9455,
  9381, 9303, 9221, 9135, 9045, 8950, 8852, 8750, 8645, 8535, 8422, 8306, 8187,
  8064, 7939, 7810, 7679, 7545, 7409, 7270, 7129, 6986, 6841, 6694, 6545, 6395,
  6243, 6091, 5937, 5782, 5627, 5470, 5314, 5157, 5000, 4843, 4686, 4529, 4373,
  4218, 4063, 3909, 3757, 3605, 3455, 3306, 3159, 3014, 2871, 2730, 2591, 2455,
  2321, 2190, 2061, 1935, 1813, 1693, 1577, 1464, 1355, 1249, 1147, 1049, 955,
  864, 778, 696, 618, 545, 476, 411, 351, 295, 244, 198, 157, 120, 88, 61, 39,
  22, 9, 2, 0, 2, 9, 22, 39, 61, 88, 120, 156, 198, 244, 295, 350, 410, 475,
  544, 618, 695, 777, 864, 954, 1048, 1146, 1248, 1354, 1463, 1576, 1692, 1812,
  1934, 2060, 2188, 2320, 2454, 2590, 2729, 2870, 3013, 3158, 3305, 3454, 3604,







  3755, 3908, 4062, 4216, 4372, 4528, 4685, 4842, 4999
};

static void fly(struct ProgressData *bar, bool moved)
{
  char buf[256];
  int pos;
  int check = bar->width - 2;

  msnprintf(buf, sizeof(buf), "%*s\r", bar->width-1, " ");
  memcpy(&buf[bar->bar], "-=O=-", 5);

  pos = sinus[bar->tick%200] / (10000 / check);
  buf[pos] = '#';
  pos = sinus[(bar->tick + 5)%200] / (10000 / check);
  buf[pos] = '#';
  pos = sinus[(bar->tick + 10)%200] / (10000 / check);
  buf[pos] = '#';
  pos = sinus[(bar->tick + 15)%200] / (10000 / check);
  buf[pos] = '#';

  fputs(buf, bar->out);
  bar->tick += 2;
  if(bar->tick >= 200)
    bar->tick -= 200;








|



|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
>
>
>
>
>
|











|

|

|

|







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
#  include <termio.h>
#endif

/* 200 values generated by this perl code:

   my $pi = 3.1415;
   foreach my $i (1 .. 200) {
     printf "%d, ", sin($i/200 * 2 * $pi) * 500000 + 500000;
   }
*/
static const unsigned int sinus[] = {
  515704, 531394, 547052, 562664, 578214, 593687, 609068, 624341, 639491,
  654504, 669364, 684057, 698568, 712883, 726989, 740870, 754513, 767906,
  781034, 793885, 806445, 818704, 830647, 842265, 853545, 864476, 875047,
  885248, 895069, 904500, 913532, 922156, 930363, 938145, 945495, 952406,
  958870, 964881, 970434, 975522, 980141, 984286, 987954, 991139, 993840,
  996054, 997778, 999011, 999752, 999999, 999754, 999014, 997783, 996060,
  993848, 991148, 987964, 984298, 980154, 975536, 970449, 964898, 958888,
  952426, 945516, 938168, 930386, 922180, 913558, 904527, 895097, 885277,
  875077, 864507, 853577, 842299, 830682, 818739, 806482, 793922, 781072,
  767945, 754553, 740910, 727030, 712925, 698610, 684100, 669407, 654548,
  639536, 624386, 609113, 593733, 578260, 562710, 547098, 531440, 515751,
  500046, 484341, 468651, 452993, 437381, 421830, 406357, 390976, 375703,
  360552, 345539, 330679, 315985, 301474, 287158, 273052, 259170, 245525,
  232132, 219003, 206152, 193590, 181331, 169386, 157768, 146487, 135555,
  124983, 114781, 104959, 95526, 86493, 77868, 69660, 61876, 54525, 47613,
  41147, 35135, 29581, 24491, 19871, 15724, 12056, 8868, 6166, 3951, 2225,
  990, 248, 0, 244, 982, 2212, 3933, 6144, 8842, 12025, 15690, 19832, 24448,
  29534, 35084, 41092, 47554, 54462, 61809, 69589, 77794, 86415, 95445,
  104873, 114692, 124891, 135460, 146389, 157667, 169282, 181224, 193480,
  206039, 218888, 232015, 245406, 259048, 272928, 287032, 301346, 315856,
  330548, 345407, 360419, 375568, 390841, 406221, 421693, 437243, 452854,
  468513, 484202, 499907
};

static void fly(struct ProgressData *bar, bool moved)
{
  char buf[256];
  int pos;
  int check = bar->width - 2;

  msnprintf(buf, sizeof(buf), "%*s\r", bar->width-1, " ");
  memcpy(&buf[bar->bar], "-=O=-", 5);

  pos = sinus[bar->tick%200] / (1000000 / check);
  buf[pos] = '#';
  pos = sinus[(bar->tick + 5)%200] / (1000000 / check);
  buf[pos] = '#';
  pos = sinus[(bar->tick + 10)%200] / (1000000 / check);
  buf[pos] = '#';
  pos = sinus[(bar->tick + 15)%200] / (1000000 / check);
  buf[pos] = '#';

  fputs(buf, bar->out);
  bar->tick += 2;
  if(bar->tick >= 200)
    bar->tick -= 200;

119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
                     curl_off_t ultotal, curl_off_t ulnow)
{
  /* The original progress-bar source code was written for curl by Lars Aas,
     and this new edition inherits some of his concepts. */

  struct timeval now = tvnow();
  struct per_transfer *per = clientp;
  struct OutStruct *outs = &per->outs;
  struct OperationConfig *config = outs->config;
  struct ProgressData *bar = &per->progressbar;
  curl_off_t total;
  curl_off_t point;

  /* Calculate expected transfer size. initial_size can be less than zero
     when indicating that we are expecting to get the filesize from the
     remote */







<
|







126
127
128
129
130
131
132

133
134
135
136
137
138
139
140
                     curl_off_t ultotal, curl_off_t ulnow)
{
  /* The original progress-bar source code was written for curl by Lars Aas,
     and this new edition inherits some of his concepts. */

  struct timeval now = tvnow();
  struct per_transfer *per = clientp;

  struct OperationConfig *config = per->config;
  struct ProgressData *bar = &per->progressbar;
  curl_off_t total;
  curl_off_t point;

  /* Calculate expected transfer size. initial_size can be less than zero
     when indicating that we are expecting to get the filesize from the
     remote */
248
249
250
251
252
253
254

255
256
257
258
259
260
261
262
263
264
265
266
         * character at the right edge will cause a line wrap.
         */
        cols = (int)
          (console_info.srWindow.Right - console_info.srWindow.Left);
      }
    }
#endif /* TIOCGSIZE */

    bar->width = cols;
  }

  if(!bar->width)
    bar->width = 79;
  else if(bar->width > MAX_BARLENGTH)
    bar->width = MAX_BARLENGTH;

  bar->out = config->global->errors;
  bar->tick = 150;
  bar->barmove = 1;
}







>
|











254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
         * character at the right edge will cause a line wrap.
         */
        cols = (int)
          (console_info.srWindow.Right - console_info.srWindow.Left);
      }
    }
#endif /* TIOCGSIZE */
    if(cols > 20)
      bar->width = cols;
  }

  if(!bar->width)
    bar->width = 79;
  else if(bar->width > MAX_BARLENGTH)
    bar->width = MAX_BARLENGTH;

  bar->out = config->global->errors;
  bar->tick = 150;
  bar->barmove = 1;
}
Changes to jni/curl/src/tool_cb_rea.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
*/

int tool_readbusy_cb(void *clientp,
                     curl_off_t dltotal, curl_off_t dlnow,
                     curl_off_t ultotal, curl_off_t ulnow)
{
  struct per_transfer *per = clientp;
  struct OutStruct *outs = &per->outs;
  struct OperationConfig *config = outs->config;

  (void)dltotal;  /* unused */
  (void)dlnow;  /* unused */
  (void)ultotal;  /* unused */
  (void)ulnow;  /* unused */

  if(config->readbusy) {
    config->readbusy = FALSE;
    curl_easy_pause(per->curl, CURLPAUSE_CONT);
  }

  return per->noprogress? 0 : CURL_PROGRESSFUNC_CONTINUE;
}







<
|













59
60
61
62
63
64
65

66
67
68
69
70
71
72
73
74
75
76
77
78
79
*/

int tool_readbusy_cb(void *clientp,
                     curl_off_t dltotal, curl_off_t dlnow,
                     curl_off_t ultotal, curl_off_t ulnow)
{
  struct per_transfer *per = clientp;

  struct OperationConfig *config = per->config;

  (void)dltotal;  /* unused */
  (void)dlnow;  /* unused */
  (void)ultotal;  /* unused */
  (void)ulnow;  /* unused */

  if(config->readbusy) {
    config->readbusy = FALSE;
    curl_easy_pause(per->curl, CURLPAUSE_CONT);
  }

  return per->noprogress? 0 : CURL_PROGRESSFUNC_CONTINUE;
}
Changes to jni/curl/src/tool_cb_wrt.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
29
30
31
32
33
34
35
36

37
38
39
40


41
42
43
44
45
46
47
#include "tool_msgs.h"
#include "tool_cb_wrt.h"
#include "tool_operate.h"

#include "memdebug.h" /* keep this as LAST include */

/* create a local file for writing, return TRUE on success */
bool tool_create_output_file(struct OutStruct *outs)

{
  struct GlobalConfig *global = outs->config->global;
  FILE *file;



  if(!outs->filename || !*outs->filename) {
    warnf(global, "Remote filename has no length!\n");
    return FALSE;
  }

  if(outs->is_cd_filename) {
    /* don't overwrite existing files */







|
>

|

|
>
>







29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include "tool_msgs.h"
#include "tool_cb_wrt.h"
#include "tool_operate.h"

#include "memdebug.h" /* keep this as LAST include */

/* create a local file for writing, return TRUE on success */
bool tool_create_output_file(struct OutStruct *outs,
                             struct OperationConfig *config)
{
  struct GlobalConfig *global;
  FILE *file;
  DEBUGASSERT(outs);
  DEBUGASSERT(config);
  global = config->global;
  if(!outs->filename || !*outs->filename) {
    warnf(global, "Remote filename has no length!\n");
    return FALSE;
  }

  if(outs->is_cd_filename) {
    /* don't overwrite existing files */
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
*/

size_t tool_write_cb(char *buffer, size_t sz, size_t nmemb, void *userdata)
{
  size_t rc;
  struct per_transfer *per = userdata;
  struct OutStruct *outs = &per->outs;
  struct OperationConfig *config = outs->config;
  size_t bytes = sz * nmemb;
  bool is_tty = config->global->isatty;
#ifdef WIN32
  CONSOLE_SCREEN_BUFFER_INFO console_info;
  intptr_t fhnd;
#endif








|







77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
*/

size_t tool_write_cb(char *buffer, size_t sz, size_t nmemb, void *userdata)
{
  size_t rc;
  struct per_transfer *per = userdata;
  struct OutStruct *outs = &per->outs;
  struct OperationConfig *config = per->config;
  size_t bytes = sz * nmemb;
  bool is_tty = config->global->isatty;
#ifdef WIN32
  CONSOLE_SCREEN_BUFFER_INFO console_info;
  intptr_t fhnd;
#endif

143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
    if(check_fails) {
      warnf(config->global, "Invalid output struct data for write callback\n");
      return failure;
    }
  }
#endif

  if(!outs->stream && !tool_create_output_file(outs))
    return failure;

  if(is_tty && (outs->bytes < 2000) && !config->terminal_binary_ok) {
    /* binary output to terminal? */
    if(memchr(buffer, 0, bytes)) {
      warnf(config->global, "Binary output can mess up your terminal. "
            "Use \"--output -\" to tell curl to output it to your terminal "







|







146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
    if(check_fails) {
      warnf(config->global, "Invalid output struct data for write callback\n");
      return failure;
    }
  }
#endif

  if(!outs->stream && !tool_create_output_file(outs, per->config))
    return failure;

  if(is_tty && (outs->bytes < 2000) && !config->terminal_binary_ok) {
    /* binary output to terminal? */
    if(memchr(buffer, 0, bytes)) {
      warnf(config->global, "Binary output can mess up your terminal. "
            "Use \"--output -\" to tell curl to output it to your terminal "
Changes to jni/curl/src/tool_cb_wrt.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_TOOL_CB_WRT_H
#define HEADER_CURL_TOOL_CB_WRT_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_TOOL_CB_WRT_H
#define HEADER_CURL_TOOL_CB_WRT_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
26
27
28
29
30
31
32
33

34
35
/*
** callback for CURLOPT_WRITEFUNCTION
*/

size_t tool_write_cb(char *buffer, size_t sz, size_t nmemb, void *userdata);

/* create a local file for writing, return TRUE on success */
bool tool_create_output_file(struct OutStruct *outs);


#endif /* HEADER_CURL_TOOL_CB_WRT_H */







|
>


26
27
28
29
30
31
32
33
34
35
36
/*
** callback for CURLOPT_WRITEFUNCTION
*/

size_t tool_write_cb(char *buffer, size_t sz, size_t nmemb, void *userdata);

/* create a local file for writing, return TRUE on success */
bool tool_create_output_file(struct OutStruct *outs,
                             struct OperationConfig *config);

#endif /* HEADER_CURL_TOOL_CB_WRT_H */
Changes to jni/curl/src/tool_cfgable.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_TOOL_CFGABLE_H
#define HEADER_CURL_TOOL_CFGABLE_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_TOOL_CFGABLE_H
#define HEADER_CURL_TOOL_CFGABLE_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
104
105
106
107
108
109
110

111
112
113
114
115
116
117
  char *proxyuserpwd;
  char *proxy;
  int proxyver;             /* set to CURLPROXY_HTTP* define */
  char *noproxy;
  char *mail_from;
  struct curl_slist *mail_rcpt;
  char *mail_auth;

  char *sasl_authzid;       /* Authorisation identity (identity to use) */
  bool sasl_ir;             /* Enable/disable SASL initial response */
  bool proxytunnel;
  bool ftp_append;          /* APPE on ftp */
  bool use_ascii;           /* select ascii or text transfer */
  bool autoreferer;         /* automatically set referer */
  bool failonerror;         /* fail on (HTTP) errors */







>







104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
  char *proxyuserpwd;
  char *proxy;
  int proxyver;             /* set to CURLPROXY_HTTP* define */
  char *noproxy;
  char *mail_from;
  struct curl_slist *mail_rcpt;
  char *mail_auth;
  bool mail_rcpt_allowfails; /* --mail-rcpt-allowfails */
  char *sasl_authzid;       /* Authorisation identity (identity to use) */
  bool sasl_ir;             /* Enable/disable SASL initial response */
  bool proxytunnel;
  bool ftp_append;          /* APPE on ftp */
  bool use_ascii;           /* select ascii or text transfer */
  bool autoreferer;         /* automatically set referer */
  bool failonerror;         /* fail on (HTTP) errors */
Changes to jni/curl/src/tool_dirhie.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
  dirbuildup[0] = '\0';

  /* Allow strtok() here since this isn't used threaded */
  /* !checksrc! disable BANNEDFUNC 2 */
  tempdir = strtok(outdup, PATH_DELIMITERS);

  while(tempdir != NULL) {

    tempdir2 = strtok(NULL, PATH_DELIMITERS);
    /* since strtok returns a token for the last word even
       if not ending with DIR_CHAR, we need to prune it */
    if(tempdir2 != NULL) {
      size_t dlen = strlen(dirbuildup);
      if(dlen)
        msnprintf(&dirbuildup[dlen], outlen - dlen, "%s%s", DIR_CHAR, tempdir);
      else {
        if(outdup == tempdir)











          /* the output string doesn't start with a separator */
          strcpy(dirbuildup, tempdir);

        else
          msnprintf(dirbuildup, outlen, "%s%s", DIR_CHAR, tempdir);
      }

      if((-1 == mkdir(dirbuildup, (mode_t)0000750)) && (errno != EEXIST)) {

        show_dir_errno(errors, dirbuildup);
        result = CURLE_WRITE_ERROR;
        break; /* get out of loop */
      }
    }
    tempdir = tempdir2;
  }

  Curl_safefree(dirbuildup);
  Curl_safefree(outdup);

  return result;
}







>








|
>
>
>
>
>
>
>
>
>
>
>


>



>
|
>













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
  dirbuildup[0] = '\0';

  /* Allow strtok() here since this isn't used threaded */
  /* !checksrc! disable BANNEDFUNC 2 */
  tempdir = strtok(outdup, PATH_DELIMITERS);

  while(tempdir != NULL) {
    bool skip = false;
    tempdir2 = strtok(NULL, PATH_DELIMITERS);
    /* since strtok returns a token for the last word even
       if not ending with DIR_CHAR, we need to prune it */
    if(tempdir2 != NULL) {
      size_t dlen = strlen(dirbuildup);
      if(dlen)
        msnprintf(&dirbuildup[dlen], outlen - dlen, "%s%s", DIR_CHAR, tempdir);
      else {
        if(outdup == tempdir) {
#if defined(MSDOS) || defined(WIN32)
          /* Skip creating a drive's current directory.
             It may seem as though that would harmlessly fail but it could be
             a corner case if X: did not exist, since we would be creating it
             erroneously.
             eg if outfile is X:\foo\bar\filename then don't mkdir X:
             This logic takes into account unsupported drives !:, 1:, etc. */
          char *p = strchr(tempdir, ':');
          if(p && !p[1])
            skip = true;
#endif
          /* the output string doesn't start with a separator */
          strcpy(dirbuildup, tempdir);
        }
        else
          msnprintf(dirbuildup, outlen, "%s%s", DIR_CHAR, tempdir);
      }
      /* Create directory. Ignore access denied error to allow traversal. */
      if(!skip && (-1 == mkdir(dirbuildup, (mode_t)0000750)) &&
         (errno != EACCES) && (errno != EEXIST)) {
        show_dir_errno(errors, dirbuildup);
        result = CURLE_WRITE_ERROR;
        break; /* get out of loop */
      }
    }
    tempdir = tempdir2;
  }

  Curl_safefree(dirbuildup);
  Curl_safefree(outdup);

  return result;
}
Changes to jni/curl/src/tool_doswin.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
692
693
694
695
696
697
698


























699
700
701
702
  curl_slist_free_all(slist);
  slist = NULL;
cleanup:
  if(hnd != INVALID_HANDLE_VALUE)
    CloseHandle(hnd);
  return slist;
}



























#endif /* WIN32 */

#endif /* MSDOS || WIN32 */







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>




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
  curl_slist_free_all(slist);
  slist = NULL;
cleanup:
  if(hnd != INVALID_HANDLE_VALUE)
    CloseHandle(hnd);
  return slist;
}

LARGE_INTEGER Curl_freq;
bool Curl_isVistaOrGreater;

CURLcode win32_init(void)
{
  OSVERSIONINFOEXA osvi;
  unsigned __int64 mask = 0;
  unsigned char op = VER_GREATER_EQUAL;

  memset(&osvi, 0, sizeof(osvi));
  osvi.dwOSVersionInfoSize = sizeof(osvi);
  osvi.dwMajorVersion = 6;
  VER_SET_CONDITION(mask, VER_MAJORVERSION, op);
  VER_SET_CONDITION(mask, VER_MINORVERSION, op);

  if(VerifyVersionInfoA(&osvi, (VER_MAJORVERSION | VER_MINORVERSION), mask))
    Curl_isVistaOrGreater = true;
  else if(GetLastError() == ERROR_OLD_WIN_VERSION)
    Curl_isVistaOrGreater = false;
  else
    return CURLE_FAILED_INIT;

  QueryPerformanceFrequency(&Curl_freq);
  return CURLE_OK;
}

#endif /* WIN32 */

#endif /* MSDOS || WIN32 */
Changes to jni/curl/src/tool_doswin.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_TOOL_DOSWIN_H
#define HEADER_CURL_TOOL_DOSWIN_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_TOOL_DOSWIN_H
#define HEADER_CURL_TOOL_DOSWIN_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
57
58
59
60
61
62
63

64
65
66
67
68
69

#ifdef WIN32

CURLcode FindWin32CACert(struct OperationConfig *config,
                         curl_sslbackend backend,
                         const char *bundle_file);
struct curl_slist *GetLoadedModulePaths(void);


#endif /* WIN32 */

#endif /* MSDOS || WIN32 */

#endif /* HEADER_CURL_TOOL_DOSWIN_H */







>






57
58
59
60
61
62
63
64
65
66
67
68
69
70

#ifdef WIN32

CURLcode FindWin32CACert(struct OperationConfig *config,
                         curl_sslbackend backend,
                         const char *bundle_file);
struct curl_slist *GetLoadedModulePaths(void);
CURLcode win32_init(void);

#endif /* WIN32 */

#endif /* MSDOS || WIN32 */

#endif /* HEADER_CURL_TOOL_DOSWIN_H */
Changes to jni/curl/src/tool_getparam.c.
269
270
271
272
273
274
275

276
277
278
279
280
281
282
  {"EA", "socks5-basic",             ARG_BOOL},
  {"EB", "socks5-gssapi",            ARG_BOOL},
  {"EC", "etag-save",                ARG_FILENAME},
  {"ED", "etag-compare",             ARG_FILENAME},
  {"f",  "fail",                     ARG_BOOL},
  {"fa", "fail-early",               ARG_BOOL},
  {"fb", "styled-output",            ARG_BOOL},

  {"F",  "form",                     ARG_STRING},
  {"Fs", "form-string",              ARG_STRING},
  {"g",  "globoff",                  ARG_BOOL},
  {"G",  "get",                      ARG_NONE},
  {"Ga", "request-target",           ARG_STRING},
  {"h",  "help",                     ARG_BOOL},
  {"H",  "header",                   ARG_STRING},







>







269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
  {"EA", "socks5-basic",             ARG_BOOL},
  {"EB", "socks5-gssapi",            ARG_BOOL},
  {"EC", "etag-save",                ARG_FILENAME},
  {"ED", "etag-compare",             ARG_FILENAME},
  {"f",  "fail",                     ARG_BOOL},
  {"fa", "fail-early",               ARG_BOOL},
  {"fb", "styled-output",            ARG_BOOL},
  {"fc", "mail-rcpt-allowfails",     ARG_BOOL},
  {"F",  "form",                     ARG_STRING},
  {"Fs", "form-string",              ARG_STRING},
  {"g",  "globoff",                  ARG_BOOL},
  {"G",  "get",                      ARG_NONE},
  {"Ga", "request-target",           ARG_STRING},
  {"h",  "help",                     ARG_BOOL},
  {"H",  "header",                   ARG_STRING},
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
        param_place++;
        break;
      }
#endif
      /* escaped colons and Windows drive letter colons were handled
       * above; if we're still here, this is a separating colon */
      param_place++;
      if(strlen(param_place) > 0) {
        *passphrase = strdup(param_place);
      }
      goto done;
    }
  }
done:
  *certname_place = '\0';







|







418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
        param_place++;
        break;
      }
#endif
      /* escaped colons and Windows drive letter colons were handled
       * above; if we're still here, this is a separating colon */
      param_place++;
      if(*param_place) {
        *passphrase = strdup(param_place);
      }
      goto done;
    }
  }
done:
  *certname_place = '\0';
1273
1274
1275
1276
1277
1278
1279

1280


1281
1282
1283
1284
1285
1286
1287
    case 'A':
      /* This specifies the User-Agent name */
      GetStr(&config->useragent, nextarg);
      break;
    case 'b':
      switch(subletter) {
      case 'a': /* --alt-svc */

        GetStr(&config->altsvc, nextarg);


        break;
      default:  /* --cookie string coming up: */
        if(nextarg[0] == '@') {
          nextarg++;
        }
        else if(strchr(nextarg, '=')) {
          /* A cookie string must have a =-letter */







>
|
>
>







1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
    case 'A':
      /* This specifies the User-Agent name */
      GetStr(&config->useragent, nextarg);
      break;
    case 'b':
      switch(subletter) {
      case 'a': /* --alt-svc */
        if(curlinfo->features & CURL_VERSION_ALTSVC)
          GetStr(&config->altsvc, nextarg);
        else
          return PARAM_LIBCURL_DOESNT_SUPPORT;
        break;
      default:  /* --cookie string coming up: */
        if(nextarg[0] == '@') {
          nextarg++;
        }
        else if(strchr(nextarg, '=')) {
          /* A cookie string must have a =-letter */
1718
1719
1720
1721
1722
1723
1724



1725
1726
1727
1728
1729
1730
1731
      switch(subletter) {
      case 'a': /* --fail-early */
        global->fail_early = toggle;
        break;
      case 'b': /* --styled-output */
        global->styled_output = toggle;
        break;



      default: /* --fail (hard on errors)  */
        config->failonerror = toggle;
      }
      break;
    case 'F':
      /* "form data" simulation, this is a little advanced so lets do our best
         to sort this out slowly and carefully */







>
>
>







1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
      switch(subletter) {
      case 'a': /* --fail-early */
        global->fail_early = toggle;
        break;
      case 'b': /* --styled-output */
        global->styled_output = toggle;
        break;
      case 'c': /* --mail-rcpt-allowfails */
        config->mail_rcpt_allowfails = toggle;
        break;
      default: /* --fail (hard on errors)  */
        config->failonerror = toggle;
      }
      break;
    case 'F':
      /* "form data" simulation, this is a little advanced so lets do our best
         to sort this out slowly and carefully */
Changes to jni/curl/src/tool_help.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
235
236
237
238
239
240
241


242
243
244
245
246
247
248
   "Server login options"},
  {"    --mail-auth <address>",
   "Originator address of the original email"},
  {"    --mail-from <address>",
   "Mail from this address"},
  {"    --mail-rcpt <address>",
   "Mail to this address"},


  {"-M, --manual",
   "Display the full manual"},
  {"    --max-filesize <bytes>",
   "Maximum file size to download"},
  {"    --max-redirs <num>",
   "Maximum number of redirects allowed"},
  {"-m, --max-time <seconds>",







>
>







235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
   "Server login options"},
  {"    --mail-auth <address>",
   "Originator address of the original email"},
  {"    --mail-from <address>",
   "Mail from this address"},
  {"    --mail-rcpt <address>",
   "Mail to this address"},
  {"    --mail-rcpt-allowfails",
   "Allow RCPT TO command to fail for some recipients"},
  {"-M, --manual",
   "Display the full manual"},
  {"    --max-filesize <bytes>",
   "Maximum file size to download"},
  {"    --max-redirs <num>",
   "Maximum number of redirects allowed"},
  {"-m, --max-time <seconds>",
Changes to jni/curl/src/tool_homedir.c.
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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/
#include "tool_setup.h"

#ifdef HAVE_PWD_H
#  include <pwd.h>
#endif



#include "tool_homedir.h"

#include "memdebug.h" /* keep this as LAST include */

static char *GetEnv(const char *variable, char do_expand)
{
  char *env = NULL;
#ifdef WIN32
  char  buf1[1024], buf2[1024];
  DWORD rc;

  /* Don't use getenv(); it doesn't find variable added after program was
   * started. Don't accept truncated results (i.e. rc >= sizeof(buf1)).  */

  rc = GetEnvironmentVariableA(variable, buf1, sizeof(buf1));
  if(rc > 0 && rc < sizeof(buf1)) {
    env = buf1;
    variable = buf1;
  }
  if(do_expand && strchr(variable, '%')) {
    /* buf2 == variable if not expanded */
    rc = ExpandEnvironmentStringsA(variable, buf2, sizeof(buf2));
    if(rc > 0 && rc < sizeof(buf2) &&
       !strchr(buf2, '%'))    /* no vars still unexpanded */
      env = buf2;

  }
#else
  (void)do_expand;
  /* no length control */
  env = getenv(variable);
#endif
  return (env && env[0]) ? strdup(env) : NULL;
}

/* return the home directory of the current user as an allocated string */
char *homedir(void)
{
  char *home;

  home = GetEnv("CURL_HOME", FALSE);
  if(home)
    return home;

  home = GetEnv("HOME", FALSE);
  if(home)
    return home;

#if defined(HAVE_GETPWUID) && defined(HAVE_GETEUID)
 {
   struct passwd *pw = getpwuid(geteuid());

   if(pw) {
     home = pw->pw_dir;
     if(home && home[0])
       home = strdup(home);
     else
       home = NULL;
   }
 }
#endif /* PWD-stuff */
#ifdef WIN32
  home = GetEnv("APPDATA", TRUE);
  if(!home)


    home = GetEnv("%USERPROFILE%\\Application Data", TRUE); /* Normally only
                                                               on Win-2K/XP */







#endif /* WIN32 */
  return home;
}







|



















>
>




|

|
<
<
<

<
<
<
<
<
|
<
<
<
<
<
<
<
|
>
|
<
<
<
|
|
|







|



|

















|
|
>
>
|
<
>
>
>
>
>
>
>



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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/
#include "tool_setup.h"

#ifdef HAVE_PWD_H
#  include <pwd.h>
#endif

#include <curl/mprintf.h>

#include "tool_homedir.h"

#include "memdebug.h" /* keep this as LAST include */

static char *GetEnv(const char *variable)
{
  char *dupe, *env;









  env = curl_getenv(variable);







  if(!env)
    return NULL;




  dupe = strdup(env);
  curl_free(env);
  return dupe;
}

/* return the home directory of the current user as an allocated string */
char *homedir(void)
{
  char *home;

  home = GetEnv("CURL_HOME");
  if(home)
    return home;

  home = GetEnv("HOME");
  if(home)
    return home;

#if defined(HAVE_GETPWUID) && defined(HAVE_GETEUID)
 {
   struct passwd *pw = getpwuid(geteuid());

   if(pw) {
     home = pw->pw_dir;
     if(home && home[0])
       home = strdup(home);
     else
       home = NULL;
   }
 }
#endif /* PWD-stuff */
#ifdef WIN32
  home = GetEnv("APPDATA");
  if(!home) {
    char *env = GetEnv("USERPROFILE");
    if(env) {
      char *path = curl_maprintf("%s\\Application Data", env);

      if(path) {
        home = strdup(path);
        curl_free(path);
      }
      free(env);
    }
  }
#endif /* WIN32 */
  return home;
}
Changes to jni/curl/src/tool_hugehelp.c.
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
"              ter  a  completed  transfer, the cache will be saved to the file\n"
"              name again if it has been modified.\n"
"\n"
"              Specify a \"\" file name (zero length) to avoid loading/saving and\n"
"              make curl just handle the cache in memory.\n"
"\n"
"              If  this  option  is used several times, curl will load contents\n"
"              from all the files but the the last one will be used for saving.\n"
"\n"
"              Added in 7.64.1.\n"
"\n"
"       --anyauth\n"
, stdout);
 fputs(
"              (HTTP) Tells curl to figure out authentication method by itself,\n"







|







183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
"              ter  a  completed  transfer, the cache will be saved to the file\n"
"              name again if it has been modified.\n"
"\n"
"              Specify a \"\" file name (zero length) to avoid loading/saving and\n"
"              make curl just handle the cache in memory.\n"
"\n"
"              If  this  option  is used several times, curl will load contents\n"
"              from all the files but the last one will be used for saving.\n"
"\n"
"              Added in 7.64.1.\n"
"\n"
"       --anyauth\n"
, stdout);
 fputs(
"              (HTTP) Tells curl to figure out authentication method by itself,\n"
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
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033


1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044


1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056


1057
1058
1059
1060
1061
1062


1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120


1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136


1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152


1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167


1168
1169
1170
1171
1172
1173

1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187

1188
1189
1190
1191
1192
1193
1194
1195
1196
1197

1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208

1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222


1223
1224
1225
1226
1227
1228
1229
1230
1231
1232


1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244



1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263


1264
1265
1266
1267
1268
1269


1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280


1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297


1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308


1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320


1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333


1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351



1352
1353
1354
1355
1356
1357
1358
1359


1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375

1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387


1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401

1402
1403
1404
1405
1406
1407
1408
1409
1410

1411
1412
1413
1414
1415
1416
1417
1418
1419
1420

1421
1422
1423
1424
1425
1426
1427
1428
1429

1430
1431
1432
1433
1434
1435


1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451

1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464

1465
1466
1467
1468
1469
1470
1471
1472

1473
1474
1475
1476
1477
1478
1479
1480
1481


1482
1483
1484
1485
1486
1487
1488
1489
1490

1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504

1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515

1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839


1840
1841


1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854

1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866

1867
1868
1869
1870
1871
1872
1873
1874
1875
1876


1877
1878







1879
1880






1881
1882
1883


1884
1885
1886
1887
1888
1889
1890
1891
1892
1893


1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908


1909
1910
1911
1912
1913
1914
1915
1916
1917


1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930


1931
1932
1933
1934
1935
1936
1937
1938
1939


1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952


1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963


1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974


1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987


1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998


1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011


2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025


2026
2027
2028
2029
2030
2031
2032
2033
2034
2035


2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046


2047
2048
2049
2050
2051
2052
2053
2054
2055
2056


2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069


2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080


2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093


2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104


2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116


2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127


2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138


2139
2140
2141
2142
2143
2144
2145
2146
2147


2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161


2162
2163
2164
2165
2166
2167
2168
2169
2170


2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183


2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196


2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209


2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221


2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238


2239
2240
2241
2242
2243
2244
2245


2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269


2270
2271
2272
2273
2274
2275
2276


2277
2278
2279
2280
2281
2282
2283
2284
2285


2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297


2298
2299
2300
2301
2302
2303
2304
2305
2306
2307


2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319


2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331


2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342


2343
2344
2345
2346
2347
2348
2349
2350
2351


2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363


2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375


2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388


2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402


2403
2404
2405
2406
2407
2408
2409
2410

2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421

2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436


2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450


2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462


2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473

2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490


2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509


2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525


2526
2527
2528
2529
2530
2531

2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542

2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558


2559
2560
2561
2562
2563
2564
2565
"              create the necessary local directory hierarchy as  needed.  This\n"
"              option  creates the dirs mentioned with the -o, --output option,\n"
, stdout);
 fputs(
"              nothing else. If the --output file name uses no dir  or  if  the\n"
"              dirs it mentions already exist, no dir will be created.\n"
"\n"

"              To  create remote directories when using FTP or SFTP, try --ftp-\n"
"              create-dirs.\n"
"\n"
"       --crlf (FTP SMTP)  Convert  LF  to  CRLF  in  upload.  Useful  for  MVS\n"
"              (OS/390).\n"
"\n"
"              (SMTP added in 7.40.0)\n"
"\n"
"       --crlfile <file>\n"
, stdout);
 fputs(

"              (TLS) Provide a file using PEM format with a Certificate Revoca-\n"
"              tion List that may specify peer certificates that are to be con-\n"
"              sidered revoked.\n"
"\n"
"              If this option is used several times, the last one will be used.\n"
"\n"
"              Added in 7.19.7.\n"
"\n"
"       --data-ascii <data>\n"
"              (HTTP) This is just an alias for -d, --data.\n"
"\n"
"       --data-binary <data>\n"
"              (HTTP)  This  posts data exactly as specified with no extra pro-\n"
, stdout);
 fputs(

"              cessing whatsoever.\n"
"\n"
"              If you start the data with the letter @, the rest  should  be  a\n"
"              filename.   Data  is  posted  in  a similar manner as -d, --data\n"
"              does, except that newlines and carriage  returns  are  preserved\n"
"              and conversions are never done.\n"
"\n"
"              Like  -d,  --data the default content-type sent to the server is\n"
"              application/x-www-form-urlencoded. If you want the  data  to  be\n"
, stdout);
 fputs(

"              treated as arbitrary binary data by the server then set the con-\n"
"              tent-type to octet-stream: -H \"Content-Type:  application/octet-\n"
"              stream\".\n"
"\n"
"              If  this  option  is  used several times, the ones following the\n"
"              first will append data as described in -d, --data.\n"
"\n"
"       --data-raw <data>\n"


"              (HTTP) This posts data similarly to -d, --data but  without  the\n"
"              special interpretation of the @ character.\n"
"\n"
, stdout);
 fputs(
"              See also -d, --data. Added in 7.43.0.\n"
"\n"
"       --data-urlencode <data>\n"
"              (HTTP)  This posts data, similar to the other -d, --data options\n"
"              with the exception that this performs URL-encoding.\n"
"\n"
"              To be CGI-compliant, the <data> part should begin  with  a  name\n"


"              followed  by a separator and a content specification. The <data>\n"
"              part can be passed to curl using one of the following syntaxes:\n"
"\n"
"              content\n"
, stdout);
 fputs(
"                     This will make curl URL-encode the content and pass  that\n"
"                     on.  Just  be careful so that the content doesn't contain\n"
"                     any = or @ symbols, as that will  then  make  the  syntax\n"
"                     match one of the other cases below!\n"
"\n"
"              =content\n"


"                     This  will make curl URL-encode the content and pass that\n"
"                     on. The preceding = symbol is not included in the data.\n"
"\n"
, stdout);
 fputs(
"              name=content\n"
"                     This will make curl URL-encode the content part and  pass\n"
"                     that  on.  Note that the name part is expected to be URL-\n"
"                     encoded already.\n"
"\n"
"              @filename\n"
"                     This will make curl load data from the  given  file  (in-\n"


"                     cluding  any  newlines), URL-encode that data and pass it\n"
"                     on in the POST.\n"
"\n"
"              name@filename\n"
, stdout);
 fputs(
"                     This will make curl load data from the  given  file  (in-\n"
"                     cluding  any  newlines), URL-encode that data and pass it\n"
"                     on in the POST. The name part  gets  an  equal  sign  ap-\n"
"                     pended,  resulting  in name=urlencoded-file-content. Note\n"


"                     that the name is expected to be URL-encoded already.\n"
"       See also -d, --data and --data-raw. Added in 7.18.0.\n"
"\n"
"       -d, --data <data>\n"
, stdout);
 fputs(
"              (HTTP) Sends the specified data in a POST request  to  the  HTTP\n"
"              server,  in  the  same  way  that a browser does when a user has\n"
"              filled in an HTML form and presses the submit button. This  will\n"
"              cause curl to pass the data to the server using the content-type\n"


"              application/x-www-form-urlencoded.  Compare to -F, --form.\n"
"\n"
"              --data-raw is almost the same but does not have a special inter-\n"
, stdout);
 fputs(
"              pretation  of  the  @ character. To post data purely binary, you\n"
"              should instead use the --data-binary option.  To URL-encode  the\n"
"              value of a form field you may use --data-urlencode.\n"
"\n"
"              If  any of these options is used more than once on the same com-\n"
"              mand line, the data pieces specified  will  be  merged  together\n"
"              with  a  separating  &-symbol.  Thus,  using  '-d name=daniel -d\n"
, stdout);
 fputs(


"              skill=lousy'  would  generate  a  post  chunk  that  looks  like\n"
"              'name=daniel&skill=lousy'.\n"
"\n"
"              If  you  start  the data with the letter @, the rest should be a\n"
"              file name to read the data from, or - if you want curl  to  read\n"
"              the data from stdin. Multiple files can also be specified. Post-\n"
"              ing data from a file named 'foobar' would thus be done with  -d,\n"
, stdout);
 fputs(
"              --data  @foobar.  When  --data  is told to read from a file like\n"

"              that, carriage returns and newlines will be stripped out. If you\n"
"              don't  want the @ character to have a special interpretation use\n"
"              --data-raw instead.\n"
"\n"
"              See also --data-binary and --data-urlencode and --data-raw. This\n"


"              option  overrides  -F,  --form  and -I, --head and -T, --upload-\n"
"              file.\n"
"\n"
"       --delegation <LEVEL>\n"
, stdout);
 fputs(
"              (GSS/kerberos) Set LEVEL to tell the server what it  is  allowed\n"
"              to delegate when it comes to user credentials.\n"
"\n"
"              none   Don't allow any delegation.\n"
"\n"
"              policy Delegates  if  and only if the OK-AS-DELEGATE flag is set\n"
"                     in the Kerberos service ticket,  which  is  a  matter  of\n"


"                     realm policy.\n"
"\n"
"              always Unconditionally allow the server to delegate.\n"
"\n"
"       --digest\n"
, stdout);
 fputs(
"              (HTTP)  Enables HTTP Digest authentication. This is an authenti-\n"
"              cation scheme that prevents the password from  being  sent  over\n"
"              the  wire in clear text. Use this in combination with the normal\n"
"              -u, --user option to set user name and password.\n"
"\n"
"              If this option is used several times,  only  the  first  one  is\n"


"              used.\n"
"\n"
"              See  also  -u, --user and --proxy-digest and --anyauth. This op-\n"
, stdout);
 fputs(
"              tion overrides --basic and --ntlm and --negotiate.\n"
"\n"
"       --disable-eprt\n"
"              (FTP) Tell curl to disable the use of the EPRT and LPRT commands\n"
"              when doing active FTP transfers. Curl will normally always first\n"
"              attempt to use EPRT, then LPRT before using PORT, but with  this\n"
"              option,  it  will  use PORT right away. EPRT and LPRT are exten-\n"
"              sions to the original FTP protocol, and  may  not  work  on  all\n"
, stdout);
 fputs(


"              servers, but they enable more functionality in a better way than\n"
"              the traditional PORT command.\n"
"\n"
"              --eprt can be used to explicitly enable EPRT again and --no-eprt\n"
"              is an alias for --disable-eprt.\n"
"\n"
"              If  the  server is accessed using IPv6, this option will have no\n"


"              effect as EPRT is necessary then.\n"
"\n"
"              Disabling EPRT only changes the active behavior. If you want  to\n"
, stdout);
 fputs(
"              switch  to  passive  mode  you need to not use -P, --ftp-port or\n"
"              force it with --ftp-pasv.\n"
"\n"
"       --disable-epsv\n"
"              (FTP) (FTP) Tell curl to disable the use  of  the  EPSV  command\n"
"              when  doing  passive  FTP  transfers.  Curl will normally always\n"


"              first attempt to use EPSV before PASV, but with this option,  it\n"
"              will not try using EPSV.\n"
"\n"
"              --epsv can be used to explicitly enable EPSV again and --no-epsv\n"
, stdout);
 fputs(
"              is an alias for --disable-epsv.\n"
"\n"
"              If the server is an IPv6 host, this option will have  no  effect\n"
"              as EPSV is necessary then.\n"
"\n"
"              Disabling EPSV only changes the passive behavior. If you want to\n"


"              switch to active mode you need to use -P, --ftp-port.\n"
"\n"
"       -q, --disable\n"
"              If used as the first parameter on the command line,  the  curlrc\n"
"              config  file will not be read and used. See the -K, --config for\n"
, stdout);
 fputs(
"              details on the default config file search path.\n"
"\n"
"       --disallow-username-in-url\n"
"              (HTTP) This tells curl to exit if  passed  a  url  containing  a\n"
"              username.\n"
"\n"
"              See also --proto. Added in 7.61.0.\n"
"\n"
"       --dns-interface <interface>\n"
"              (DNS)  Tell  curl  to send outgoing DNS requests through <inter-\n"
"              face>. This option is a counterpart to --interface  (which  does\n"
, stdout);
 fputs(



"              not  affect  DNS). The supplied string must be an interface name\n"
"              (not an address).\n"
"\n"
"              See also --dns-ipv4-addr  and  --dns-ipv6-addr.  --dns-interface\n"
"              requires  that  the  underlying  libcurl was built to support c-\n"
"              ares. Added in 7.33.0.\n"


"\n"
"       --dns-ipv4-addr <address>\n"
"              (DNS) Tell curl to bind to <ip-address> when making IPv4 DNS re-\n"
"              quests,  so  that  the DNS requests originate from this address.\n"
, stdout);
 fputs(
"              The argument should be a single IPv4 address.\n"
"\n"
"              See also --dns-interface  and  --dns-ipv6-addr.  --dns-ipv4-addr\n"
"              requires  that  the  underlying  libcurl was built to support c-\n"
"              ares. Added in 7.33.0.\n"
"\n"
"       --dns-ipv6-addr <address>\n"
"              (DNS) Tell curl to bind to <ip-address> when making IPv6 DNS re-\n"
"              quests,  so  that  the DNS requests originate from this address.\n"
, stdout);
 fputs(


"              The argument should be a single IPv6 address.\n"
"\n"
"              See also --dns-interface  and  --dns-ipv4-addr.  --dns-ipv6-addr\n"
"              requires  that  the  underlying  libcurl was built to support c-\n"
"              ares. Added in 7.33.0.\n"
"\n"
"       --dns-servers <addresses>\n"
"              Set the list of DNS servers to be used instead of the system de-\n"
"              fault.   The  list of IP addresses should be separated with com-\n"
, stdout);
 fputs(


"              mas. Port numbers may also optionally be given as :<port-number>\n"
"              after each IP address.\n"
"\n"
"              --dns-servers  requires that the underlying libcurl was built to\n"
"              support c-ares. Added in 7.33.0.\n"
"\n"
"       --doh-url <URL>\n"


"              (all) Specifies which DNS-over-HTTPS (DOH) server to use to  re-\n"
"              solve  hostnames,  instead  of  using  the default name resolver\n"
"              mechanism. The URL must be HTTPS.\n"
"\n"
, stdout);
 fputs(
"              If this option is used several times, the last one will be used.\n"
"\n"
"              Added in 7.62.0.\n"
"\n"
"       -D, --dump-header <filename>\n"
"              (HTTP FTP) Write the received protocol headers to the  specified\n"
"              file.\n"
"\n"
"              This  option  is handy to use when you want to store the headers\n"
"              that an HTTP site sends to you. Cookies from the  headers  could\n"
"              then  be  read  in  a  second  curl  invocation by using the -b,\n"
, stdout);
 fputs(



"              --cookie option! The -c, --cookie-jar option is a better way  to\n"
"              store cookies.\n"
"\n"
"              If  no  headers are received, the use of this option will create\n"
"              an empty file.\n"
"\n"


"              When used in FTP, the FTP server response lines  are  considered\n"
"              being \"headers\" and thus are saved there.\n"
"\n"
"              If this option is used several times, the last one will be used.\n"
"\n"
"              See also -o, --output.\n"
"\n"
"       --egd-file <file>\n"
, stdout);
 fputs(
"              (TLS)  Specify  the  path  name  to the Entropy Gathering Daemon\n"
"              socket. The socket is used to seed the  random  engine  for  SSL\n"
"              connections.\n"
"\n"


"              See also --random-file.\n"
"\n"
"       --engine <name>\n"
"              (TLS)  Select the OpenSSL crypto engine to use for cipher opera-\n"
"              tions. Use --engine list to print a list of build-time supported\n"
"              engines.  Note  that  not  all  (or  none) of the engines may be\n"
, stdout);
 fputs(
"              available at run-time.\n"
"\n"
"       --etag-compare <file>\n"
"              (HTTP) This option makes a conditional HTTP request for the spe-\n"


"              cific ETag read from the given file by sending a custom If-None-\n"
"              Match header using the extracted ETag.\n"
"\n"
"              For correct results, make sure that specified file contains only\n"
"              a single line with a desired ETag. An empty file is parsed as an\n"
"              empty ETag.\n"
"\n"


, stdout);
 fputs(
"              Use the option --etag-save to first save the  ETag  from  a  re-\n"
"              sponse, and then use this option to compare using the saved ETag\n"
"              in a subsequent request.\n"
"\n"
"              OMPARISON: There are 2 types of comparison or  ETags,  Weak  and\n"
"              Strong.  This option expects, and uses a strong comparison.\n"
"\n"
"              Added in 7.68.0.\n"
"\n"
"       --etag-save <file>\n"
"              (HTTP)  This  option  saves  an HTTP ETag to the specified file.\n"


, stdout);
 fputs(
"              Etag is usually part of headers  returned  by  a  request.  When\n"
"              server  sends  an  ETag, it must be enveloped by a double quote.\n"
"              This option extracts the ETag  without  the  double  quotes  and\n"
"              saves it into the <file>.\n"
"\n"
"              A  server  can  send a week ETag which is prefixed by \"W/\". This\n"
"              identifier is not considered, and  only  relevant  ETag  between\n"
"              quotation marks is parsed.\n"
"\n"
, stdout);
 fputs(
"              It an ETag wasn't send by the server or it cannot be parsed, and\n"
"              empty file is created.\n"
"\n"
"              Added in 7.68.0.\n"
"\n"


"       --expect100-timeout <seconds>\n"
"              (HTTP) Maximum time in seconds that you allow curl to wait for a\n"
"              100-continue  response  when curl emits an Expects: 100-continue\n"
"              header in its request. By default curl  will  wait  one  second.\n"
, stdout);
 fputs(
"              This  option accepts decimal values! When curl stops waiting, it\n"
"              will continue as if the response has been received.\n"
"\n"
"              See also --connect-timeout. Added in 7.47.0.\n"
"\n"
"       --fail-early\n"


"              Fail and exit on the first detected transfer error.\n"
"\n"
"              When curl is used to do multiple transfers on the command  line,\n"
"              it will attempt to operate on each given URL, one by one. By de-\n"
, stdout);
 fputs(
"              fault, it will ignore errors if there are more  URLs  given  and\n"
"              the  last  URL's  success will determine the error code curl re-\n"
"              turns. So early failures will be \"hidden\" by subsequent success-\n"
"              ful transfers.\n"
"\n"
"              Using  this  option,  curl  will  instead return an error on the\n"
"              first transfer that fails, independent of  the  amount  of  URLs\n"
, stdout);
 fputs(


"              that  are given on the command line. This way, no transfer fail-\n"
"              ures go undetected by scripts and similar.\n"
"\n"
"              This option is global and does not need to be specified for each\n"
"              use of -:, --next.\n"
"\n"
"              This option does not imply -f, --fail, which causes transfers to\n"
"              fail due to the server's HTTP status code. You can  combine  the\n"
"              two options, however note -f, --fail is not global and is there-\n"
, stdout);
 fputs(


"              fore contained by -:, --next.\n"
"\n"
"              Added in 7.52.0.\n"
"\n"
"       -f, --fail\n"
"              (HTTP) Fail silently (no output at all) on server  errors.  This\n"
"              is  mostly done to better enable scripts etc to better deal with\n"
"              failed attempts. In normal cases when an HTTP  server  fails  to\n"
"              deliver  a  document,  it  returns  an  HTML document stating so\n"
"              (which often also describes why and more). This flag  will  pre-\n"
, stdout);
 fputs(


"              vent curl from outputting that and return error 22.\n"
"\n"
"              This  method is not fail-safe and there are occasions where non-\n"
"              successful response codes will slip through, especially when au-\n"
"              thentication is involved (response codes 401 and 407).\n"
"\n"
"       --false-start\n"
"              (TLS)  Tells  curl  to use false start during the TLS handshake.\n"
"              False start is a mode where a TLS client will start sending  ap-\n"
, stdout);
 fputs(


"              plication  data  before verifying the server's Finished message,\n"
"              thus saving a round trip when performing a full handshake.\n"
"\n"
"              This is currently only implemented in the NSS and Secure  Trans-\n"
"              port (on iOS 7.0 or later, or OS X 10.9 or later) backends.\n"
"\n"
"              Added in 7.42.0.\n"
"\n"
"       --form-string <name=string>\n"
"              (HTTP  SMTP  IMAP)  Similar  to -F, --form except that the value\n"
, stdout);
 fputs(


"              string for the named parameter is used  literally.  Leading  '@'\n"
"              and '<' characters, and the ';type=' string in the value have no\n"
"              special meaning. Use this in preference to -F, --form if there's\n"
"              any  possibility  that the string value may accidentally trigger\n"
"              the '@' or '<' features of -F, --form.\n"
"\n"


"              See also -F, --form.\n"
"\n"
"       -F, --form <name=content>\n"
, stdout);
 fputs(
"              (HTTP SMTP IMAP) For HTTP protocol family, this lets  curl  emu-\n"
"              late  a  filled-in  form  in which a user has pressed the submit\n"
"              button. This causes curl to POST  data  using  the  Content-Type\n"
"              multipart/form-data according to RFC 2388.\n"
"\n"
"              For  SMTP and IMAP protocols, this is the mean to compose a mul-\n"
"              tipart mail message to transmit.\n"
"\n"
, stdout);
 fputs(
"              This enables uploading of binary files etc. To force  the  'con-\n"
"              tent' part to be a file, prefix the file name with an @ sign. To\n"
"              just get the content part from a file, prefix the file name with\n"
"              the  symbol  <.  The  difference  between @ and < is then that @\n"
"              makes a file get attached in the post as a  file  upload,  while\n"
"              the < makes a text field and just get the contents for that text\n"
, stdout);
 fputs(
"              field from a file.\n"
"\n"
"              Tell curl to read content from stdin instead of a file by  using\n"
"              - as filename. This goes for both @ and < constructs. When stdin\n"
"              is used, the contents is buffered in memory first by curl to de-\n"
"              termine its size and allow a possible resend.  Defining a part's\n"
"              data from a named non-regular file (such as a named pipe or sim-\n"
, stdout);
 fputs(
"              ilar)  is unfortunately not subject to buffering and will be ef-\n"
"              fectively read at transmission time; since the full size is  un-\n"
"              known before the transfer starts, such data is sent as chunks by\n"
"              HTTP and rejected by IMAP.\n"
"\n"
"              Example: send an image to an HTTP server, where 'profile' is the\n"
"              name  of  the  form-field to which the file portrait.jpg will be\n"
"              the input:\n"
"\n"
, stdout);
 fputs(
"               curl -F profile=@portrait.jpg https://example.com/upload.cgi\n"
"\n"
"              Example: send a your name and shoe size in two  text  fields  to\n"
"              the server:\n"
"\n"
"               curl -F name=John -F shoesize=11 https://example.com/\n"
"\n"
"              Example:  send  a your essay in a text field to the server. Send\n"
"              it as a plain text field, but get the contents for it from a lo-\n"
"              cal file:\n"
"\n"
, stdout);
 fputs(
"               curl -F \"story=<hugefile.txt\" https://example.com/\n"
"\n"


"              You  can  also  tell  curl  what  Content-Type  to  use by using\n"
"              'type=', in a manner similar to:\n"
"\n"
"               curl -F \"web=@index.html;type=text/html\" example.com\n"
"\n"
"              or\n"
"\n"
"               curl -F \"name=daniel;type=text/foo\" example.com\n"
"\n"
"              You can also explicitly change the name field of a  file  upload\n"
"              part by setting filename=, like this:\n"
"\n"
, stdout);
 fputs(
"               curl -F \"file=@localfile;filename=nameinpost\" example.com\n"
"\n"


"              If  filename/path contains ',' or ';', it must be quoted by dou-\n"
"              ble-quotes like:\n"
"\n"
"               curl  -F  \"file=@\\\"localfile\\\";filename=\\\"nameinpost\\\"\"   exam-\n"
"              ple.com\n"
"\n"
"              or\n"
"\n"
"               curl -F 'file=@\"localfile\";filename=\"nameinpost\"' example.com\n"
"\n"
"              Note  that  if  a  filename/path is quoted by double-quotes, any\n"
, stdout);
 fputs(
"              double-quote or backslash within the filename must be escaped by\n"
"              backslash.\n"
"\n"


"              Quoting  must  also  be  applied to non-file data if it contains\n"
"              semicolons, leading/trailing spaces or leading double quotes:\n"
"\n"
"               curl -F  'colors=\"red;  green;  blue\";type=text/x-myapp'  exam-\n"
"              ple.com\n"
"\n"
"              You  can  add  custom  headers to the field by setting headers=,\n"
"              like\n"
"\n"
, stdout);
 fputs(
"                curl -F \"submit=OK;headers=\\\"X-submit-type: OK\\\"\" example.com\n"
"\n"
"              or\n"
"\n"


"                curl -F \"submit=OK;headers=@headerfile\" example.com\n"
"\n"
"              The headers= keyword may appear more that once and  above  notes\n"
"              about  quoting  apply.  When headers are read from a file, Empty\n"
"              lines and lines starting with '#' are comments and ignored; each\n"
"              header can be folded by splitting between two words and starting\n"

, stdout);
 fputs(
"              the continuation line with a  space;  embedded  carriage-returns\n"
"              and  trailing  spaces  are  stripped.   Here  is an example of a\n"
"              header file contents:\n"
"\n"
"                # This file contain two headers.\n"
"                X-header-1: this is a header\n"
"\n"
"                # The following header is folded.\n"
"                X-header-2: this is\n"
"                 another header\n"
"\n"
"              To support sending multipart mail messages, the  syntax  is  ex-\n"

, stdout);
 fputs(
"              tended as follows:\n"
"              -  name can be omitted: the equal sign is the first character of\n"
"              the argument,\n"
"              - if data starts with '(', this signals to start  a  new  multi-\n"
"              part: it can be followed by a content type specification.\n"
"              - a multipart can be terminated with a '=)' argument.\n"
"\n"
"              Example:  the  following  command sends an SMTP mime e-mail con-\n"

, stdout);
 fputs(
"              sisting in an inline part in two alternative formats: plain text\n"
"              and HTML. It attaches a text file:\n"
"\n"
"               curl -F '=(;type=multipart/alternative' \\\n"
"                       -F '=plain text message' \\\n"
"                       -F '= <body>HTML message</body>;type=text/html' \\\n"
"                    -F '=)' -F '=@textfile.txt' ...  smtp://example.com\n"
"\n"
"              Data  can  be encoded for transfer using encoder=. Available en-\n"

, stdout);
 fputs(
"              codings are binary and 8bit that do nothing else than adding the\n"
"              corresponding  Content-Transfer-Encoding  header, 7bit that only\n"
"              rejects 8-bit characters with a transfer error, quoted-printable\n"
"              and  base64  that  encodes  data  according to the corresponding\n"
"              schemes, limiting lines length to 76 characters.\n"
"\n"
"              Example: send multipart mail with a quoted-printable  text  mes-\n"
, stdout);
 fputs(
"              sage and a base64 attached file:\n"
"\n"
"               curl -F '=text message;encoder=quoted-printable' \\\n"


"                    -F '=@localfile;encoder=base64' ... smtp://example.com\n"
"\n"
"              See further examples and details in the MANUAL.\n"
"\n"
"              This option can be used multiple times.\n"
"\n"
"              This  option  overrides  -d, --data and -I, --head and -T, --up-\n"
"              load-file.\n"
"\n"
"       --ftp-account <data>\n"


, stdout);
 fputs(
"              (FTP) When an FTP server asks for \"account data\" after user name\n"
"              and  password has been provided, this data is sent off using the\n"
"              ACCT command.\n"
"\n"
"              If this option is used several times, the last one will be used.\n"
"\n"
"              Added in 7.13.0.\n"
"\n"
"       --ftp-alternative-to-user <command>\n"
"              (FTP) If authenticating with the USER and PASS  commands  fails,\n"



, stdout);
 fputs(
"              send  this  command.   When  connecting  to  Tumbleweed's Secure\n"
"              Transport server over FTPS using  a  client  certificate,  using\n"
"              \"SITE  AUTH\"  will tell the server to retrieve the username from\n"
"              the certificate.\n"
"              Added in 7.15.5.\n"
"\n"
"       --ftp-create-dirs\n"
"              (FTP SFTP) When an FTP or SFTP URL/operation uses  a  path  that\n"
"              doesn't  currently exist on the server, the standard behavior of\n"
, stdout);
 fputs(
"              curl is to fail. Using this option, curl will instead attempt to\n"
"              create missing directories.\n"
"\n"
"              See also --create-dirs.\n"
"\n"
"       --ftp-method <method>\n"


"              (FTP)  Control what method curl should use to reach a file on an\n"
"              FTP(S) server. The method argument should be one of the  follow-\n"
"              ing alternatives:\n"
"\n"
"              multicwd\n"
"                     curl  does  a  single CWD operation for each path part in\n"


, stdout);
 fputs(
"                     the given URL. For deep hierarchies this means very  many\n"
"                     commands.  This  is  how RFC 1738 says it should be done.\n"
"                     This is the default but the slowest behavior.\n"
"\n"
"              nocwd  curl does no CWD at all. curl will do  SIZE,  RETR,  STOR\n"
"                     etc and give a full path to the server for all these com-\n"
"                     mands. This is the fastest behavior.\n"
"\n"
"              singlecwd\n"


, stdout);
 fputs(
"                     curl does one CWD with the full target directory and then\n"
"                     operates  on  the  file  \"normally\" (like in the multicwd\n"
"                     case). This is somewhat  more  standards  compliant  than\n"
"                     'nocwd' but without the full penalty of 'multicwd'.\n"
"\n"
"       Added in 7.15.1.\n"
"\n"
"       --ftp-pasv\n"
"              (FTP)  Use  passive mode for the data connection. Passive is the\n"
, stdout);
 fputs(
"              internal default behavior, but using this option can be used  to\n"
"              override a previous -P, --ftp-port option.\n"
"\n"
"              If  this  option  is  used  several times, only the first one is\n"


"              used. Undoing an enforced passive really isn't  doable  but  you\n"
"              must then instead enforce the correct -P, --ftp-port again.\n"
"\n"
"              Passive mode means that curl will try the EPSV command first and\n"
, stdout);
 fputs(
"              then PASV, unless --disable-epsv is used.\n"
"              See also --disable-epsv. Added in 7.11.0.\n"
"\n"
"       -P, --ftp-port <address>\n"
"              (FTP) Reverses the default initiator/listener  roles  when  con-\n"


"              necting  with  FTP. This option makes curl use active mode. curl\n"
"              then tells the server to connect back to the client's  specified\n"
"              address and port, while passive mode asks the server to setup an\n"
, stdout);
 fputs(
"              IP address and port for it to connect to.  <address>  should  be\n"
"              one of:\n"
"\n"
"              interface\n"
"                     e.g.  \"eth0\"  to specify which interface's IP address you\n"
"                     want to use (Unix only)\n"
"\n"


"              IP address\n"
"                     e.g. \"192.168.10.1\" to specify the exact IP address\n"
"\n"
"              host name\n"
"                     e.g. \"my.host.domain\" to specify the machine\n"
"\n"
, stdout);
 fputs(
"              -      make curl pick the same IP address that is  already  used\n"
"                     for the control connection\n"
"\n"
"       If  this  option is used several times, the last one will be used. Dis-\n"
"       able the use of PORT with --ftp-pasv. Disable the attempt  to  use  the\n"


"       EPRT  command  instead  of PORT by using --disable-eprt. EPRT is really\n"
"       PORT++.\n"
"\n"
"       Since 7.19.5, you can append \":[start]-[end]\" to the right of  the  ad-\n"
, stdout);
 fputs(
"       dress,  to tell curl what TCP port range to use. That means you specify\n"
"       a port range, from a lower to a higher number. A single number works as\n"
"       well,  but do note that it increases the risk of failure since the port\n"
"       may not be available.\n"
"\n"
"       See also --ftp-pasv and --disable-eprt.\n"
"\n"
"       --ftp-pret\n"
"              (FTP) Tell curl to send a PRET command before PASV  (and  EPSV).\n"
"              Certain  FTP  servers,  mainly drftpd, require this non-standard\n"
, stdout);
 fputs(



"              command for directory listings as well as up  and  downloads  in\n"
"              PASV mode.\n"
"\n"
"              Added in 7.20.0.\n"
"\n"
"       --ftp-skip-pasv-ip\n"
"              (FTP) Tell curl to not use the IP address the server suggests in\n"
"              its response to curl's PASV command when curl connects the  data\n"


"              connection.  Instead curl will re-use the same IP address it al-\n"
"              ready uses for the control connection.\n"
"\n"
, stdout);
 fputs(
"              This option has no effect if PORT, EPRT or EPSV is used  instead\n"
"              of PASV.\n"
"\n"
"              See also --ftp-pasv. Added in 7.14.2.\n"
"\n"
"       --ftp-ssl-ccc-mode <active/passive>\n"
"              (FTP)  Sets the CCC mode. The passive mode will not initiate the\n"
"              shutdown, but instead wait for the server to do it, and will not\n"
"              reply to the shutdown from the server. The active mode initiates\n"
, stdout);
 fputs(

"              the shutdown and waits for a reply from the server.\n"
"\n"
"              See also --ftp-ssl-ccc. Added in 7.16.2.\n"
"\n"
"       --ftp-ssl-ccc\n"
"              (FTP) Use CCC (Clear Command Channel)  Shuts  down  the  SSL/TLS\n"
"              layer after authenticating. The rest of the control channel com-\n"
"              munication will be unencrypted. This allows NAT routers to  fol-\n"
"              low the FTP transaction. The default mode is passive.\n"
"\n"
, stdout);
 fputs(


"              See also --ssl and --ftp-ssl-ccc-mode. Added in 7.16.1.\n"
"\n"
"       --ftp-ssl-control\n"
"              (FTP)  Require  SSL/TLS  for  the FTP login, clear for transfer.\n"
"              Allows secure authentication, but non-encrypted  data  transfers\n"
"              for  efficiency.   Fails the transfer if the server doesn't sup-\n"
"              port SSL/TLS.\n"
"\n"
"              Added in 7.16.0.\n"
"\n"
"       -G, --get\n"
"              When used, this option will make all  data  specified  with  -d,\n"
, stdout);
 fputs(

"              --data,  --data-binary or --data-urlencode to be used in an HTTP\n"
"              GET request instead of the POST request that otherwise would  be\n"
"              used. The data will be appended to the URL with a '?' separator.\n"
"              If  used  in combination with -I, --head, the POST data will in-\n"
"              stead be appended to the URL with a HEAD request.\n"
"\n"
"              If this option is used several times,  only  the  first  one  is\n"
, stdout);
 fputs(

"              used.  This is because undoing a GET doesn't make sense, but you\n"
"              should then instead enforce the alternative method you prefer.\n"
"\n"
"       -g, --globoff\n"
"              This option switches off the \"URL globbing parser\". When you set\n"
"              this  option, you can specify URLs that contain the letters {}[]\n"
"              without having them being interpreted by curl itself. Note  that\n"
"              these  letters are not normal legal URL contents but they should\n"
, stdout);
 fputs(

"              be encoded according to the URI standard.\n"
"\n"
"       --happy-eyeballs-timeout-ms <milliseconds>\n"
"              Happy eyeballs is an algorithm that attempts to connect to  both\n"
"              IPv4  and  IPv6  addresses for dual-stack hosts, preferring IPv6\n"
"              first for the number of milliseconds. If the IPv6 address cannot\n"
"              be  connected  to  within that time then a connection attempt is\n"
, stdout);
 fputs(

"              made to the IPv4 address in parallel. The first connection to be\n"
"              established is the one that is used.\n"
"\n"
"              The  range of suggested useful values is limited. Happy Eyeballs\n"
"              RFC 6555 says \"It is RECOMMENDED  that  connection  attempts  be\n"
"              paced  150-250 ms apart to balance human factors against network\n"


"              load.\" libcurl currently defaults to 200 ms. Firefox and  Chrome\n"
"              currently default to 300 ms.\n"
"\n"
, stdout);
 fputs(
"              If this option is used several times, the last one will be used.\n"
"\n"
"              Added in 7.59.0.\n"
"\n"
"       --haproxy-protocol\n"
"              (HTTP)  Send a HAProxy PROXY protocol v1 header at the beginning\n"
"              of the connection. This is used by some load balancers  and  re-\n"
"              verse proxies to indicate the client's true IP address and port.\n"
"              This  option is primarily useful when sending test requests to a\n"
, stdout);
 fputs(

"              service that expects this header.\n"
"\n"
"              Added in 7.60.0.\n"
"\n"
"       -I, --head\n"
"              (HTTP FTP FILE) Fetch the headers only! HTTP-servers feature the\n"
"              command  HEAD which this uses to get nothing but the header of a\n"
"              document. When used on an FTP or FILE file,  curl  displays  the\n"
"              file size and last modification time only.\n"
"\n"
"       -H, --header <header/@file>\n"
, stdout);
 fputs(

"              (HTTP)  Extra header to include in the request when sending HTTP\n"
"              to a server. You may specify any number of extra  headers.  Note\n"
"              that if you should add a custom header that has the same name as\n"
"              one of the internal ones curl would  use,  your  externally  set\n"
"              header will be used instead of the internal one. This allows you\n"
"              to make even trickier stuff than curl  would  normally  do.  You\n"
, stdout);
 fputs(

"              should  not  replace internally set headers without knowing per-\n"
"              fectly well what you're doing. Remove an internal header by giv-\n"
"              ing  a  replacement  without  content  on  the right side of the\n"
"              colon, as in: -H \"Host:\". If you send the custom header with no-\n"
"              value  then its header must be terminated with a semicolon, such\n"
"              as -H \"X-Custom-Header;\" to send \"X-Custom-Header:\".\n"
"\n"
, stdout);
 fputs(


"              curl will make sure that each header  you  add/replace  is  sent\n"
"              with the proper end-of-line marker, you should thus not add that\n"
"              as a part of the header content: do not add newlines or carriage\n"
"              returns, they will only mess things up for you.\n"
"\n"
"              Starting  in  7.55.0, this option can take an argument in @file-\n"
"              name style, which then adds a header for each line in the  input\n"
, stdout);
 fputs(

"              file. Using @- will make curl read the header file from stdin.\n"
"\n"
"              See also the -A, --user-agent and -e, --referer options.\n"
"\n"
"              Starting in 7.37.0, you need --proxy-header to send custom head-\n"
"              ers intended for a proxy.\n"
"\n"
"              Example:\n"
"\n"
"               curl -H \"X-First-Name: Joe\" http://example.com/\n"
"\n"
"              WARNING: headers set with this option will be  set  in  all  re-\n"
, stdout);
 fputs(

"              quests  - even after redirects are followed, like when told with\n"
"              -L, --location. This can lead to the header being sent to  other\n"
"              hosts  than  the  original  host, so sensitive headers should be\n"
"              used with caution combined with following redirects.\n"
"\n"
"              This option can be used  multiple  times  to  add/replace/remove\n"
"              multiple headers.\n"
"\n"
"       -h, --help\n"
, stdout);
 fputs(

"              Usage  help.  This lists all current command line options with a\n"
"              short description.\n"
"       --hostpubmd5 <md5>\n"
"              (SFTP SCP) Pass a string containing 32 hexadecimal  digits.  The\n"
"              string  should  be the 128 bit MD5 checksum of the remote host's\n"
"              public key, curl will refuse the connection with the host unless\n"
"              the md5sums match.\n"
"\n"
"              Added in 7.17.1.\n"
"\n"
"       --http0.9\n"
, stdout);
 fputs(
"              (HTTP) Tells curl to be fine with HTTP version 0.9 response.\n"
"\n"
"              HTTP/0.9  is  a completely headerless response and therefore you\n"
"              can also connect with this to non-HTTP servers and still  get  a\n"
"              response since curl will simply transparently downgrade - if al-\n"
"              lowed.\n"
"\n"
"              Since curl 7.66.0, HTTP/0.9 is disabled by default.\n"
"\n"
"       -0, --http1.0\n"
, stdout);
 fputs(
"              (HTTP) Tells curl to use HTTP version 1.0 instead of  using  its\n"
"              internally preferred HTTP version.\n"
"\n"
"              This option overrides --http1.1 and --http2.\n"
"\n"
"       --http1.1\n"
"              (HTTP) Tells curl to use HTTP version 1.1.\n"
"\n"
"              This  option  overrides  -0,  --http1.0  and  --http2.  Added in\n"
"              7.33.0.\n"
"\n"
"       --http2-prior-knowledge\n"
"              (HTTP) Tells curl to  issue  its  non-TLS  HTTP  requests  using\n"
, stdout);
 fputs(
"              HTTP/2  without  HTTP/1.1  Upgrade.  It requires prior knowledge\n"
"              that the server supports HTTP/2 straight  away.  HTTPS  requests\n"
"              will  still  do HTTP/2 the standard way with negotiated protocol\n"
"              version in the TLS handshake.\n"
"\n"
"              --http2-prior-knowledge requires that the underlying libcurl was\n"
"              built to support HTTP/2. This option overrides --http1.1 and -0,\n"
"              --http1.0 and --http2. Added in 7.49.0.\n"
"\n"
, stdout);
 fputs(
"       --http2\n"
"              (HTTP) Tells curl to use HTTP version 2.\n"
"\n"
"              See also --http1.1 and --http3. --http2 requires that the under-\n"
"              lying libcurl was built to support HTTP/2. This option overrides\n"
"              --http1.1 and -0, --http1.0 and  --http2-prior-knowledge.  Added\n"
"              in 7.33.0.\n"
"\n"
"       --http3\n"
"              (HTTP)  WARNING: this option is experimental. Do not use in pro-\n"
"              duction.\n"
"\n"
, stdout);
 fputs(
"              Tells curl to use HTTP version 3 directly to the host  and  port\n"
"              number used in the URL. A normal HTTP/3 transaction will be done\n"
"              to a host and then get redirected via Alt-SVc, but  this  option\n"
"              allows  a  user to circumvent that when you know that the target\n"
"              speaks HTTP/3 on the given host and port.\n"
"\n"
"              This option will make curl fail if a QUIC connection  cannot  be\n"
, stdout);
 fputs(
"              established,  it cannot fall back to a lower HTTP version on its\n"
"              own.\n"
"\n"
"              See also --http1.1 and --http2. --http3 requires that the under-\n"
"              lying libcurl was built to support HTTP/3. This option overrides\n"
"              --http1.1 and -0, --http1.0 and --http2 and --http2-prior-knowl-\n"
"              edge. Added in 7.66.0.\n"
"\n"
"       --ignore-content-length\n"
"              (FTP  HTTP)  For HTTP, Ignore the Content-Length header. This is\n"
, stdout);
 fputs(
"              particularly useful for servers running Apache 1.x,  which  will\n"
"              report  incorrect  Content-Length  for files larger than 2 giga-\n"
"              bytes.\n"
"\n"
"              For FTP (since 7.46.0), skip the RETR command to figure out  the\n"
"              size before downloading a file.\n"
"\n"
"       -i, --include\n"
"              Include  the  HTTP  response headers in the output. The HTTP re-\n"
"              sponse headers can include things  like  server  name,  cookies,\n"
, stdout);
 fputs(
"              date of the document, HTTP version and more...\n"
"\n"
"              To view the request headers, consider the -v, --verbose option.\n"
"\n"
"              See also -v, --verbose.\n"
"\n"
"       -k, --insecure\n"
"              (TLS) By default, every SSL connection curl makes is verified to\n"
"              be secure. This option allows curl to proceed and  operate  even\n"
"              for server connections otherwise considered insecure.\n"
"\n"
, stdout);
 fputs(
"              The  server  connection  is verified by making sure the server's\n"
"              certificate contains the right name  and  verifies  successfully\n"
"              using the cert store.\n"
"\n"
"              See this online resource for further details:\n"
"               https://curl.haxx.se/docs/sslcerts.html\n"
"              See also --proxy-insecure and --cacert.\n"
"\n"
"       --interface <name>\n"
"\n"
"              Perform  an operation using a specified interface. You can enter\n"
, stdout);
 fputs(
"              interface name, IP address or host name. An example  could  look\n"
"              like:\n"
"\n"
"               curl --interface eth0:1 https://www.example.com/\n"
"\n"
"              If this option is used several times, the last one will be used.\n"
"              On  Linux  it can be used to specify a VRF, but the binary needs\n"
"              to either have CAP_NET_RAW or to be run as root.  More  informa-\n"
"              tion   about  Linux  VRF:  https://www.kernel.org/doc/Documenta-\n"
, stdout);
 fputs(
"              tion/networking/vrf.txt\n"
"\n"
"              See also --dns-interface.\n"
"\n"
"       -4, --ipv4\n"
"              This option tells curl to resolve names to IPv4 addresses  only,\n"
"              and not for example try IPv6.\n"
"\n"
"              See  also  --http1.1  and  --http2.  This  option  overrides -6,\n"
"              --ipv6.\n"
"\n"
"       -6, --ipv6\n"
"              This option tells curl to resolve names to IPv6 addresses  only,\n"
"              and not for example try IPv4.\n"
"\n"
, stdout);
 fputs(
"              See  also  --http1.1  and  --http2.  This  option  overrides -4,\n"
"              --ipv4.\n"
"\n"
"       -j, --junk-session-cookies\n"
"              (HTTP) When curl is told to read cookies from a given file, this\n"
"              option will make it discard all \"session cookies\". This will ba-\n"
"              sically have the same effect as if a  new  session  is  started.\n"
"              Typical  browsers  always  discard  session cookies when they're\n"
"              closed down.\n"
"\n"
, stdout);
 fputs(
"              See also -b, --cookie and -c, --cookie-jar.\n"
"\n"
"       --keepalive-time <seconds>\n"
"              This option sets the time a connection needs to remain idle  be-\n"
"              fore  sending  keepalive  probes and the time between individual\n"
"              keepalive probes. It is currently effective on operating systems\n"
"              offering  the  TCP_KEEPIDLE  and  TCP_KEEPINTVL  socket  options\n"
"              (meaning Linux, recent AIX, HP-UX and more). This option has  no\n"
, stdout);
 fputs(
"              effect if --no-keepalive is used.\n"
"\n"
"              If this option is used several times, the last one will be used.\n"
"              If unspecified, the option defaults to 60 seconds.\n"
"\n"
"              Added in 7.18.0.\n"
"\n"
"       --key-type <type>\n"
"              (TLS) Private key file type. Specify which type your --key  pro-\n"
"              vided  private  key  is. DER, PEM, and ENG are supported. If not\n"
"              specified, PEM is assumed.\n"
"\n"
, stdout);
 fputs(
"              If this option is used several times, the last one will be used.\n"
"\n"
"       --key <key>\n"
"              (TLS SSH) Private key file name. Allows you to provide your pri-\n"
"              vate  key in this separate file. For SSH, if not specified, curl\n"
"              tries  the  following  candidates  in  order:   '~/.ssh/id_rsa',\n"
"              '~/.ssh/id_dsa', './id_rsa', './id_dsa'.\n"
"\n"
"              If  curl is built against OpenSSL library, and the engine pkcs11\n"
, stdout);
 fputs(
"              is available, then a PKCS#11 URI (RFC 7512) can be used to spec-\n"
"              ify  a  private key located in a PKCS#11 device. A string begin-\n"
"              ning with \"pkcs11:\" will be interpreted as a PKCS#11 URI.  If  a\n"
"              PKCS#11 URI is provided, then the --engine option will be set as\n"
"              \"pkcs11\" if none was provided and the --key-type option will  be\n"
"              set as \"ENG\" if none was provided.\n"
"\n"
, stdout);
 fputs(
"              If this option is used several times, the last one will be used.\n"
"\n"
"       --krb <level>\n"
"              (FTP)  Enable Kerberos authentication and use. The level must be\n"
"              entered and should be one of 'clear', 'safe', 'confidential', or\n"
"              'private'.  Should  you  use  a  level that is not one of these,\n"
"              'private' will instead be used.\n"
"\n"
"              If this option is used several times, the last one will be used.\n"
, stdout);
 fputs(
"              --krb requires that the underlying libcurl was built to  support\n"
"              Kerberos.\n"
"\n"
"       --libcurl <file>\n"
"              Append  this  option  to any ordinary curl command line, and you\n"
"              will get a libcurl-using C source code written to the file  that\n"
"              does the equivalent of what your command-line operation does!\n"
"\n"
"              If  this  option is used several times, the last given file name\n"
"              will be used.\n"
"\n"
, stdout);
 fputs(
"              Added in 7.16.1.\n"
"\n"
"       --limit-rate <speed>\n"
"              Specify the maximum transfer rate you want curl  to  use  -  for\n"
"              both downloads and uploads. This feature is useful if you have a\n"
"              limited pipe and you'd like your transfer not to use your entire\n"
"              bandwidth. To make it slower than it otherwise would be.\n"
"\n"
"              The  given speed is measured in bytes/second, unless a suffix is\n"
, stdout);
 fputs(
"              appended.  Appending 'k' or 'K' will count the number  as  kilo-\n"
"              bytes,  'm' or 'M' makes it megabytes, while 'g' or 'G' makes it\n"
"              gigabytes. Examples: 200K, 3m and 1G.\n"
"\n"
"              If you also use the -Y, --speed-limit option, that  option  will\n"
"              take precedence and might cripple the rate-limiting slightly, to\n"
"              help keeping the speed-limit logic working.\n"
"\n"
, stdout);
 fputs(
"              If this option is used several times, the last one will be used.\n"
"\n"
"       -l, --list-only\n"
"              (FTP POP3) (FTP) When listing  an  FTP  directory,  this  switch\n"
"              forces  a  name-only view. This is especially useful if the user\n"
"              wants to machine-parse the contents of an  FTP  directory  since\n"
"              the normal directory view doesn't use a standard look or format.\n"
"              When used like this, the option causes a NLST command to be sent\n"
, stdout);
 fputs(
"              to the server instead of LIST.\n"
"\n"
"              Note:  Some  FTP  servers  list  only files in their response to\n"
"              NLST; they do not include sub-directories and symbolic links.\n"
"\n"
"              (POP3) When retrieving a specific email from POP3,  this  switch\n"
"              forces  a  LIST command to be performed instead of RETR. This is\n"
"              particularly useful if the user wants to see if a specific  mes-\n"
, stdout);
 fputs(
"              sage id exists on the server and what size it is.\n"
"\n"
"              Note:  When combined with -X, --request, this option can be used\n"
"              to send an UIDL command instead, so the user may use the email's\n"
"              unique  identifier  rather  than it's message id to make the re-\n"
"              quest.\n"
"\n"
"              Added in 7.21.5.\n"
"\n"
"       --local-port <num/range>\n"
"              Set a preferred single number or range (FROM-TO) of  local  port\n"
, stdout);
 fputs(
"              numbers to use for the connection(s).  Note that port numbers by\n"
"              nature are a scarce resource that will be busy at times so  set-\n"
"              ting  this range to something too narrow might cause unnecessary\n"
"              connection setup failures.\n"
"\n"
"              Added in 7.15.2.\n"
"\n"
"       --location-trusted\n"
"              (HTTP) Like -L, --location, but will allow sending  the  name  +\n"
"              password to all hosts that the site may redirect to. This may or\n"
, stdout);
 fputs(
"              may not introduce a security breach if the site redirects you to\n"
"              a  site  to which you'll send your authentication info (which is\n"
"              plaintext in the case of HTTP Basic authentication).\n"
"\n"
"              See also -u, --user.\n"
"\n"
"       -L, --location\n"
"              (HTTP) If the server reports that the requested page  has  moved\n"
"              to a different location (indicated with a Location: header and a\n"
, stdout);
 fputs(
"              3XX response code), this option will make curl redo the  request\n"
"              on  the  new  place.  If used together with -i, --include or -I,\n"
"              --head, headers from all requested pages will be shown. When au-\n"
"              thentication  is  used,  curl  only sends its credentials to the\n"
"              initial host. If a redirect takes curl to a different  host,  it\n"
"              won't  be  able to intercept the user+password. See also --loca-\n"
, stdout);
 fputs(
"              tion-trusted on how to change this. You can limit the amount  of\n"
"              redirects to follow by using the --max-redirs option.\n"
"\n"
"              When  curl follows a redirect and the request is not a plain GET\n"
"              (for example POST or PUT), it will do the following request with\n"
"              a GET if the HTTP response was 301, 302, or 303. If the response\n"
"              code was any other 3xx code, curl will re-send the following re-\n"


, stdout);
 fputs(


"              quest using the same unmodified method.\n"
"\n"
"              You  can  tell  curl to not change the non-GET request method to\n"
"              GET after a 30x response by  using  the  dedicated  options  for\n"
"              that: --post301, --post302 and --post303.\n"
"\n"
"       --login-options <options>\n"
"              (IMAP  POP3 SMTP) Specify the login options to use during server\n"
"              authentication.\n"
"\n"
"              You can use the login options to specify protocol  specific  op-\n"
, stdout);
 fputs(

"              tions  that  may  be used during authentication. At present only\n"
"              IMAP, POP3 and SMTP support login options. For more  information\n"
"              about  the  login options please see RFC 2384, RFC 5092 and IETF\n"
"              draft draft-earhart-url-smtp-00.txt\n"
"\n"
"              If this option is used several times, the last one will be used.\n"
"\n"
"              Added in 7.34.0.\n"
"\n"
"       --mail-auth <address>\n"
, stdout);
 fputs(

"              (SMTP) Specify a single address. This will be  used  to  specify\n"
"              the  authentication  address  (identity)  of a submitted message\n"
"              that is being relayed to another server.\n"
"\n"
"              See also --mail-rcpt and --mail-from. Added in 7.25.0.\n"
"\n"
"       --mail-from <address>\n"
"              (SMTP) Specify a single address that the given mail  should  get\n"
"              sent from.\n"
"\n"


"              See also --mail-rcpt and --mail-auth. Added in 7.20.0.\n"
"\n"







, stdout);
 fputs(






"       --mail-rcpt <address>\n"
"              (SMTP) Specify a single address, user name or mailing list name.\n"
"              Repeat this option several times to send to multiple recipients.\n"


"              When performing a mail transfer, the recipient should specify  a\n"
"              valid email address to send the mail to.\n"
"\n"
"              When  performing an address verification (VRFY command), the re-\n"
"              cipient should be specified as the user name or  user  name  and\n"
, stdout);
 fputs(
"              domain (as per Section 3.5 of RFC5321). (Added in 7.34.0)\n"
"\n"
"              When performing a mailing list expand (EXPN command), the recip-\n"


"              ient should be specified using the mailing list  name,  such  as\n"
"              \"Friends\" or \"London-Office\".  (Added in 7.34.0)\n"
"\n"
"              Added in 7.20.0.\n"
"\n"
"       -M, --manual\n"
"              Manual. Display the huge help text.\n"
"\n"
"       --max-filesize <bytes>\n"
, stdout);
 fputs(
"              Specify  the  maximum  size (in bytes) of a file to download. If\n"
"              the file requested is larger than this value, the transfer  will\n"
"              not start and curl will return with exit code 63.\n"
"\n"


"              A  size  modifier may be used. For example, Appending 'k' or 'K'\n"
"              will count  the  number  as  kilobytes,  'm'  or  'M'  makes  it\n"
"              megabytes,  while 'g' or 'G' makes it gigabytes. Examples: 200K,\n"
, stdout);
 fputs(
"              3m and 1G. (Added in 7.58.0)\n"
"\n"
"              NOTE: The file size is not always known prior to  download,  and\n"
"              for such files this option has no effect even if the file trans-\n"


"              fer ends up being larger than this given  limit.  This  concerns\n"
"              both FTP and HTTP transfers.\n"
"\n"
"              See also --limit-rate.\n"
"\n"
"       --max-redirs <num>\n"
"              (HTTP)  Set  maximum  number  of redirection-followings allowed.\n"
, stdout);
 fputs(
"              When -L, --location is used, is used to prevent curl  from  fol-\n"
"              lowing redirections too much. By default, the limit is set to 50\n"
"              redirections. Set this option to -1 to make it unlimited.\n"
"\n"


"              If this option is used several times, the last one will be used.\n"
"\n"
"       -m, --max-time <seconds>\n"
"              Maximum time in seconds that you allow the  whole  operation  to\n"
, stdout);
 fputs(
"              take.   This is useful for preventing your batch jobs from hang-\n"
"              ing for hours due to slow networks or links going  down.   Since\n"
"              7.32.0, this option accepts decimal values, but the actual time-\n"


"              out will decrease in accuracy as the specified timeout increases\n"
"              in decimal precision.\n"
"\n"
"              If this option is used several times, the last one will be used.\n"
"\n"
"              See also --connect-timeout.\n"
"\n"
"       --metalink\n"
, stdout);
 fputs(
"              This  option  can  tell curl to parse and process a given URI as\n"
"              Metalink file (both version 3 and 4 (RFC  5854)  are  supported)\n"
"              and  make use of the mirrors listed within for failover if there\n"


"              are errors (such as the file or server not being available).  It\n"
"              will  also  verify  the hash of the file after the download com-\n"
"              pletes. The Metalink file itself is downloaded and processed  in\n"
, stdout);
 fputs(
"              memory and not stored in the local file system.\n"
"\n"
"              Example to use a remote Metalink file:\n"
"\n"
"               curl --metalink http://www.example.com/example.metalink\n"
"\n"


"              To use a Metalink file in the local file system, use FILE proto-\n"
"              col (file://):\n"
"\n"
"               curl --metalink file://example.metalink\n"
"\n"
"              Please note that if FILE protocol is disabled, there is  no  way\n"
, stdout);
 fputs(
"              to  use  a local Metalink file at the time of this writing. Also\n"
"              note that if --metalink and -i,  --include  are  used  together,\n"
"              --include  will be ignored. This is because including headers in\n"


"              the response will break Metalink parser and if the  headers  are\n"
"              included in the file described in Metalink file, hash check will\n"
"              fail.\n"
"\n"
"              --metalink requires that the underlying  libcurl  was  built  to\n"
, stdout);
 fputs(
"              support metalink. Added in 7.27.0.\n"
"\n"
"       --negotiate\n"
"              (HTTP) Enables Negotiate (SPNEGO) authentication.\n"
"\n"
"              This  option  requires a library built with GSS-API or SSPI sup-\n"


"              port. Use -V, --version  to  see  if  your  curl  supports  GSS-\n"
"              API/SSPI or SPNEGO.\n"
"\n"
"              When  using this option, you must also provide a fake -u, --user\n"
"              option to activate the authentication code properly.  Sending  a\n"
, stdout);
 fputs(
"              '-u  :'  is  enough  as  the user name and password from the -u,\n"
"              --user option aren't actually used.\n"
"\n"
"              If this option is used several times,  only  the  first  one  is\n"


"              used.\n"
"\n"
"              See also --basic and --ntlm and --anyauth and --proxy-negotiate.\n"
"\n"
"       --netrc-file <filename>\n"
"              This  option  is similar to -n, --netrc, except that you provide\n"
"              the path (absolute or relative) to  the  netrc  file  that  curl\n"
, stdout);
 fputs(
"              should use.  You can only specify one netrc file per invocation.\n"
"              If several --netrc-file options are provided, the last one  will\n"
"              be used.\n"
"\n"


"              It will abide by --netrc-optional if specified.\n"
"\n"
"              This option overrides -n, --netrc. Added in 7.21.5.\n"
"\n"
"       --netrc-optional\n"
"              Very  similar  to  -n, --netrc, but this option makes the .netrc\n"
"              usage optional and not mandatory as the -n, --netrc option does.\n"
"\n"
, stdout);
 fputs(
"              See also --netrc-file. This option overrides -n, --netrc.\n"
"\n"
"       -n, --netrc\n"
"              Makes curl scan the .netrc  (_netrc  on  Windows)  file  in  the\n"


"              user's home directory for login name and password. This is typi-\n"
"              cally used for FTP on Unix. If used with HTTP, curl will  enable\n"
"              user authentication. See netrc(5) ftp(1) for details on the file\n"
"              format. Curl will not complain if that  file  doesn't  have  the\n"
, stdout);
 fputs(
"              right permissions (it should not be either world- or group-read-\n"
"              able). The environment variable \"HOME\" is used to find the  home\n"
"              directory.\n"
"\n"


"              A  quick and very simple example of how to setup a .netrc to al-\n"
"              low curl to FTP to the machine host.domain.com  with  user  name\n"
"              'myself' and password 'secret' should look similar to:\n"
"\n"
"              machine host.domain.com login myself password secret\n"
"\n"
"       -:, --next\n"
, stdout);
 fputs(
"              Tells curl to use a separate operation for the following URL and\n"
"              associated options. This allows you  to  send  several  URL  re-\n"


"              quests,  each with their own specific options, for example, such\n"
"              as different user names or custom requests for each.\n"
"\n"
"              -:, --next will reset all local options  and  only  global  ones\n"
"              will  have  their values survive over to the operation following\n"
, stdout);
 fputs(
"              the -:, --next instruction. Global options  include  -v,  --ver-\n"
"              bose, --trace, --trace-ascii and --fail-early.\n"
"\n"


"              For  example,  you can do both a GET and a POST in a single com-\n"
"              mand line:\n"
"\n"
"               curl www1.example.com --next -d postthis www2.example.com\n"
"\n"
"              Added in 7.36.0.\n"
"\n"
"       --no-alpn\n"
"              (HTTPS) Disable the ALPN TLS extension. ALPN is enabled  by  de-\n"
, stdout);
 fputs(
"              fault  if  libcurl  was  built with an SSL library that supports\n"
"              ALPN. ALPN is used by a libcurl that supports HTTP/2 to  negoti-\n"


"              ate HTTP/2 support with the server during https sessions.\n"
"\n"
"              See  also  --no-npn and --http2. --no-alpn requires that the un-\n"
"              derlying libcurl was built to support TLS. Added in 7.36.0.\n"
"\n"
"       -N, --no-buffer\n"
"              Disables the buffering of the output stream. In normal work sit-\n"
, stdout);
 fputs(
"              uations,  curl  will  use a standard buffered output stream that\n"
"              will have the effect that it will output the data in chunks, not\n"


"              necessarily  exactly  when  the data arrives.  Using this option\n"
"              will disable that buffering.\n"
"\n"
"              Note that this is the negated option name  documented.  You  can\n"
"              thus use --buffer to enforce the buffering.\n"
"\n"
"       --no-keepalive\n"
, stdout);
 fputs(
"              Disables  the  use  of keepalive messages on the TCP connection.\n"
"              curl otherwise enables them by default.\n"
"\n"
"              Note that this is the negated option name  documented.  You  can\n"


"              thus use --keepalive to enforce keepalive.\n"
"\n"
"       --no-npn\n"
"              (HTTPS) Disable the NPN TLS extension. NPN is enabled by default\n"
"              if libcurl was built with an SSL library that supports NPN.  NPN\n"
, stdout);
 fputs(
"              is  used  by  a libcurl that supports HTTP/2 to negotiate HTTP/2\n"
"              support with the server during https sessions.\n"
"\n"
"              See also --no-alpn and --http2. --no-npn requires that  the  un-\n"


"              derlying libcurl was built to support TLS. Added in 7.36.0.\n"
"\n"
"       --no-progress-meter\n"
"              Option to switch off the progress meter output without muting or\n"
"              otherwise affecting warning and informational messages like  -s,\n"
, stdout);
 fputs(
"              --silent does.\n"
"\n"
"              Note  that  this  is the negated option name documented. You can\n"
"              thus use --progress-meter to enable the progress meter again.\n"
"\n"


"              See also -v, --verbose and -s, --silent. Added in 7.67.0.\n"
"\n"
"       --no-sessionid\n"
"              (TLS) Disable curl's use of SSL session-ID caching.  By  default\n"
"              all  transfers are done using the cache. Note that while nothing\n"
, stdout);
 fputs(
"              should ever get hurt by attempting  to  reuse  SSL  session-IDs,\n"
"              there seem to be broken SSL implementations in the wild that may\n"
"              require you to disable this in order for you to succeed.\n"
"\n"


"              Note that this is the negated option name  documented.  You  can\n"
"              thus use --sessionid to enforce session-ID caching.\n"
"\n"
"              Added in 7.16.0.\n"
"\n"
"       --noproxy <no-proxy-list>\n"
, stdout);
 fputs(
"              Comma-separated  list  of hosts which do not use a proxy, if one\n"
"              is specified.  The only wildcard is a single * character,  which\n"
"              matches all hosts, and effectively disables the proxy. Each name\n"


"              in this list is matched as either a domain  which  contains  the\n"
"              hostname,  or  the hostname itself. For example, local.com would\n"
"              match  local.com,  local.com:80,  and  www.local.com,  but   not\n"
, stdout);
 fputs(
"              www.notlocal.com.\n"
"\n"
"              Since  7.53.0,  This  option overrides the environment variables\n"
"              that disable the proxy. If there's an environment variable  dis-\n"


"              abling a proxy, you can set noproxy list to \"\" to override it.\n"
"\n"
"              Added in 7.19.4.\n"
"\n"
"       --ntlm-wb\n"
"              (HTTP) Enables NTLM much in the style --ntlm does, but hand over\n"
"              the authentication to the separate binary  ntlmauth  application\n"
, stdout);
 fputs(
"              that is executed when needed.\n"
"\n"
"              See also --ntlm and --proxy-ntlm.\n"
"\n"
"       --ntlm (HTTP)  Enables  NTLM  authentication.  The  NTLM authentication\n"


"              method was designed by Microsoft and is used by IIS web servers.\n"
"              It  is a proprietary protocol, reverse-engineered by clever peo-\n"
"              ple and implemented in curl based on their efforts. This kind of\n"
"              behavior  should  not be endorsed, you should encourage everyone\n"
, stdout);
 fputs(
"              who uses NTLM to switch to a public and  documented  authentica-\n"
"              tion method instead, such as Digest.\n"
"\n"


"              If  you  want to enable NTLM for your proxy authentication, then\n"
"              use --proxy-ntlm.\n"
"\n"
"              If this option is used several times,  only  the  first  one  is\n"
"              used.\n"
"\n"
"              See  also  --proxy-ntlm.  --ntlm  requires  that  the underlying\n"
, stdout);
 fputs(
"              libcurl was built to support TLS. This option overrides  --basic\n"
"              and --negotiate and --digest and --anyauth.\n"
"\n"
"       --oauth2-bearer <token>\n"


"              (IMAP  POP3  SMTP) Specify the Bearer Token for OAUTH 2.0 server\n"
"              authentication. The Bearer Token is used in conjunction with the\n"
"              user  name  which  can  be specified as part of the --url or -u,\n"
"              --user options.\n"
"\n"
, stdout);
 fputs(
"              The Bearer Token and user name are formatted  according  to  RFC\n"
"              6750.\n"
"\n"
"              If this option is used several times, the last one will be used.\n"
"\n"
"       -o, --output <file>\n"


"              Write output to <file> instead of stdout. If you are using {} or\n"
"              [] to fetch multiple documents, you can use '#'  followed  by  a\n"
"              number  in  the <file> specifier. That variable will be replaced\n"
, stdout);
 fputs(
"              with the current string for the URL being fetched. Like in:\n"
"\n"
"               curl http://{one,two}.example.com -o \"file_#1.txt\"\n"
"\n"
"              or use several variables like:\n"
"\n"
"               curl http://{site,host}.host[1-5].com -o \"#1_#2\"\n"
"\n"


"              You may use this option as many times as the number of URLs  you\n"
"              have.  For  example, if you specify two URLs on the same command\n"
"              line, you can use it like this:\n"
"\n"
, stdout);
 fputs(
"                curl -o aa example.com -o bb example.net\n"
"\n"
"              and the order of the -o options and  the  URLs  doesn't  matter,\n"
"              just  that  the  first -o is for the first URL and so on, so the\n"
"              above command line can also be written as\n"
"\n"


"                curl example.com example.net -o aa -o bb\n"
"\n"
"              See also the --create-dirs option to create the  local  directo-\n"
"              ries  dynamically.  Specifying the output as '-' (a single dash)\n"
, stdout);
 fputs(
"              will force the output to be done to stdout.\n"
"\n"
"              See also -O, --remote-name and --remote-name-all and  -J,  --re-\n"
"              mote-header-name.\n"
"\n"
"       --parallel-immediate\n"
"              When  doing  parallel  transfers, this option will instruct curl\n"
"              that it should rather prefer opening up more connections in par-\n"
"              allel at once rather than waiting to see if new transfers can be\n"
, stdout);
 fputs(


"              added as multiplexed streams on another connection.\n"
"\n"
"              See also -Z, --parallel and --parallel-max. Added in 7.68.0.\n"
"\n"
"       --parallel-max\n"
"              When asked to do parallel transfers, using -Z, --parallel,  this\n"
"              option controls the maximum amount of transfers to do simultane-\n"


"              ously.\n"
"\n"
"              The default is 50.\n"
"\n"
"              See also -Z, --parallel. Added in 7.66.0.\n"
"\n"
"       -Z, --parallel\n"
, stdout);
 fputs(
"              Makes curl perform its transfers in parallel as compared to  the\n"
"              regular serial manner.\n"
"\n"
"              Added in 7.66.0.\n"
"\n"
"       --pass <phrase>\n"
"              (SSH TLS) Passphrase for the private key\n"
"\n"
"              If this option is used several times, the last one will be used.\n"
"\n"
"       --path-as-is\n"
"              Tell  curl  to  not handle sequences of /../ or /./ in the given\n"
"              URL path. Normally curl will squash or merge them  according  to\n"
, stdout);
 fputs(


"              standards but with this option set you tell it not to do that.\n"
"\n"
"              Added in 7.42.0.\n"
"\n"
"       --pinnedpubkey <hashes>\n"
"              (TLS)  Tells  curl  to  use  the  specified  public key file (or\n"
"              hashes) to verify the peer. This can be a path to a  file  which\n"


"              contains a single public key in PEM or DER format, or any number\n"
"              of base64 encoded sha256 hashes preceded by 'sha256//' and sepa-\n"
"              rated by ';'\n"
"\n"
, stdout);
 fputs(
"              When  negotiating  a  TLS  or SSL connection, the server sends a\n"
"              certificate indicating its identity. A public key  is  extracted\n"
"              from  this certificate and if it does not exactly match the pub-\n"


"              lic key provided to this option, curl will abort the  connection\n"
"              before sending or receiving any data.\n"
"\n"
"              PEM/DER support:\n"
"                7.39.0: OpenSSL, GnuTLS and GSKit\n"
"                7.43.0: NSS and wolfSSL\n"
, stdout);
 fputs(
"                7.47.0: mbedtls sha256 support:\n"
"                7.44.0: OpenSSL, GnuTLS, NSS and wolfSSL\n"
"                7.47.0: mbedtls Other SSL backends not supported.\n"
"\n"


"              If this option is used several times, the last one will be used.\n"
"\n"
"       --post301\n"
"              (HTTP) Tells curl to respect RFC 7231/6.4.2 and not convert POST\n"
"              requests into GET requests when following a 301 redirection. The\n"
, stdout);
 fputs(
"              non-RFC  behaviour  is  ubiquitous in web browsers, so curl does\n"
"              the conversion by default to maintain  consistency.  However,  a\n"
"              server  may  require  a POST to remain a POST after such a redi-\n"


"              rection. This option is meaningful only when using  -L,  --loca-\n"
"              tion.\n"
"\n"
"              See  also  --post302  and --post303 and -L, --location. Added in\n"
"              7.17.1.\n"
"\n"
"       --post302\n"
, stdout);
 fputs(
"              (HTTP) Tells curl to respect RFC 7231/6.4.3 and not convert POST\n"
"              requests into GET requests when following a 302 redirection. The\n"
"              non-RFC behaviour is ubiquitous in web browsers,  so  curl  does\n"


"              the  conversion  by  default to maintain consistency. However, a\n"
"              server may require a POST to remain a POST after  such  a  redi-\n"
"              rection.  This  option is meaningful only when using -L, --loca-\n"
"              tion.\n"
"\n"
, stdout);
 fputs(
"              See also --post301 and --post303 and -L,  --location.  Added  in\n"
"              7.19.1.\n"
"\n"
"       --post303\n"
"              (HTTP) Tells curl to violate RFC 7231/6.4.4 and not convert POST\n"


"              requests into GET requests when following  303  redirections.  A\n"
"              server may require a POST to remain a POST after a 303 redirect-\n"
"              ion. This option is meaningful only when using -L, --location.\n"
"\n"
, stdout);
 fputs(
"              See also --post302 and --post301 and -L,  --location.  Added  in\n"
"              7.26.0.\n"
"\n"
"       --preproxy [protocol://]host[:port]\n"
"              Use  the  specified  SOCKS proxy before connecting to an HTTP or\n"


"              HTTPS -x, --proxy. In such a case curl  first  connects  to  the\n"
"              SOCKS  proxy  and  then  connects (through SOCKS) to the HTTP or\n"
"              HTTPS proxy. Hence pre proxy.\n"
"\n"
, stdout);
 fputs(
"              The pre proxy string should be specified with a protocol:// pre-\n"
"              fix  to  specify  alternative  proxy  protocols.  Use socks4://,\n"
"              socks4a://, socks5:// or  socks5h://  to  request  the  specific\n"


"              SOCKS  version  to be used. No protocol specified will make curl\n"
"              default to SOCKS4.\n"
"\n"
"              If the port number is not specified in the proxy string,  it  is\n"
"              assumed to be 1080.\n"
"\n"
, stdout);
 fputs(
"              User and password that might be provided in the proxy string are\n"
"              URL decoded by curl. This allows you to pass in special  charac-\n"
"              ters such as @ by using %40 or pass in a colon with %3a.\n"
"\n"


"              If this option is used several times, the last one will be used.\n"
"\n"
"              Added in 7.52.0.\n"
"\n"
"       -#, --progress-bar\n"
"              Make curl display transfer progress as a simple progress bar in-\n"
, stdout);
 fputs(
"              stead of the standard, more informational, meter.\n"
"\n"
"              This progress bar draws a single line of '#'  characters  across\n"
"              the screen and shows a percentage if the transfer size is known.\n"


"              For transfers without a known size, there  will  be  space  ship\n"
"              (-=o=-)  that  moves back and forth but only while data is being\n"
"              transferred, with a set of flying hash sign symbols on top.\n"
"\n"
"       --proto-default <protocol>\n"
, stdout);
 fputs(
"              Tells curl to use protocol for any URL missing a scheme name.\n"
"\n"
"              Example:\n"
"\n"
"               curl --proto-default https ftp.mozilla.org\n"
"\n"


"              An unknown or unsupported  protocol  causes  error  CURLE_UNSUP-\n"
"              PORTED_PROTOCOL (1).\n"
"\n"
"              This option does not change the default proxy protocol (http).\n"
"\n"
"              Without  this  option curl would make a guess based on the host,\n"
"              see --url for details.\n"
"\n"
, stdout);
 fputs(
"              Added in 7.45.0.\n"
"\n"
"       --proto-redir <protocols>\n"
"              Tells curl to limit what protocols it may use on redirect.  Pro-\n"


"              tocols  denied by --proto are not overridden by this option. See\n"
"              --proto for how protocols are represented.\n"
"\n"
"              Example, allow only HTTP and HTTPS on redirect:\n"
"\n"
"               curl --proto-redir -all,http,https http://example.com\n"
"\n"
"              By default curl will allow HTTP, HTTPS, FTP and FTPS on redirect\n"

, stdout);
 fputs(
"              (7.65.2).  Older versions of curl allowed all protocols on redi-\n"
"              rect except several disabled for security reasons: Since  7.19.4\n"
"              FILE  and  SCP  are  disabled, and since 7.40.0 SMB and SMBS are\n"
"              also disabled. Specifying all or +all enables all  protocols  on\n"
"              redirect, including those disabled for security.\n"
"\n"
"              Added in 7.20.2.\n"
"\n"
"       --proto <protocols>\n"

, stdout);
 fputs(
"              Tells  curl  to limit what protocols it may use in the transfer.\n"
"              Protocols are evaluated left to right, are comma separated,  and\n"
"              are  each  a protocol name or 'all', optionally prefixed by zero\n"
"              or more modifiers. Available modifiers are:\n"
"\n"
"              +  Permit this protocol in addition to protocols already permit-\n"
"                 ted (this is the default if no modifier is used).\n"
"\n"
, stdout);
 fputs(
"              -  Deny  this  protocol,  removing it from the list of protocols\n"
"                 already permitted.\n"
"\n"


"              =  Permit only this protocol (ignoring the list already  permit-\n"
"                 ted),  though subject to later modification by subsequent en-\n"
"                 tries in the comma separated list.\n"
"\n"
"              For example:\n"
"\n"
"              --proto -ftps  uses the default protocols, but disables ftps\n"
"\n"
"              --proto -all,https,+http\n"
, stdout);
 fputs(
"                             only enables http and https\n"
"\n"
"              --proto =http,https\n"


"                             also only enables http and https\n"
"\n"
"       Unknown protocols produce a warning. This allows scripts to safely rely\n"
"       on being able to disable potentially dangerous protocols, without rely-\n"
"       ing upon support for that protocol being built into curl  to  avoid  an\n"
"       error.\n"
"\n"
"       This option can be used multiple times, in which case the effect is the\n"
, stdout);
 fputs(
"       same as concatenating the protocols into one instance of the option.\n"
"\n"


"       See also --proto-redir and --proto-default. Added in 7.20.2.\n"
"\n"
"       --proxy-anyauth\n"
"              Tells curl to pick a suitable authentication method when  commu-\n"
"              nicating  with  the  given HTTP proxy. This might cause an extra\n"
"              request/response round-trip.\n"
"\n"
"              See also -x, --proxy and --proxy-basic and --proxy-digest. Added\n"
"              in 7.13.2.\n"
"\n"
"       --proxy-basic\n"

, stdout);
 fputs(
"              Tells  curl  to use HTTP Basic authentication when communicating\n"
"              with the given proxy. Use --basic for enabling HTTP Basic with a\n"
"              remote  host.  Basic  is  the default authentication method curl\n"
"              uses with proxies.\n"
"\n"
"              See also -x, --proxy and --proxy-anyauth and --proxy-digest.\n"
"\n"
"       --proxy-cacert <file>\n"
"              Same as --cacert but used in HTTPS proxy context.\n"
"\n"
, stdout);
 fputs(
"              See also  --proxy-capath  and  --cacert  and  --capath  and  -x,\n"
"              --proxy. Added in 7.52.0.\n"
"\n"


"       --proxy-capath <dir>\n"
"              Same as --capath but used in HTTPS proxy context.\n"
"\n"
"              See  also  --proxy-cacert and -x, --proxy and --capath. Added in\n"
"              7.52.0.\n"
"\n"
"       --proxy-cert-type <type>\n"
"              Same as --cert-type but used in HTTPS proxy context.\n"
"\n"
"              Added in 7.52.0.\n"
"\n"
"       --proxy-cert <cert[:passwd]>\n"
, stdout);
 fputs(
"              Same as -E, --cert but used in HTTPS proxy context.\n"
"\n"
"              Added in 7.52.0.\n"
"\n"
"       --proxy-ciphers <list>\n"


"              Same as --ciphers but used in HTTPS proxy context.\n"
"\n"
"              Added in 7.52.0.\n"
"\n"
"       --proxy-crlfile <file>\n"
"              Same as --crlfile but used in HTTPS proxy context.\n"
"\n"
"              Added in 7.52.0.\n"
"\n"
"       --proxy-digest\n"
"              Tells curl to use HTTP Digest authentication when  communicating\n"
, stdout);
 fputs(
"              with the given proxy. Use --digest for enabling HTTP Digest with\n"
"              a remote host.\n"
"\n"


"              See also -x, --proxy and --proxy-anyauth and --proxy-basic.\n"
"\n"
"       --proxy-header <header/@file>\n"
"              (HTTP) Extra header to include in the request when sending  HTTP\n"
"              to a proxy. You may specify any number of extra headers. This is\n"
"              the equivalent option to -H, --header but is for proxy  communi-\n"

, stdout);
 fputs(
"              cation  only  like  in CONNECT requests when you want a separate\n"
"              header sent to the proxy to what is sent to  the  actual  remote\n"
"              host.\n"
"\n"
"              curl  will  make  sure  that each header you add/replace is sent\n"
"              with the proper end-of-line marker, you should thus not add that\n"
"              as a part of the header content: do not add newlines or carriage\n"
"              returns, they will only mess things up for you.\n"
"\n"

, stdout);
 fputs(
"              Headers specified with this option will not be included  in  re-\n"
"              quests that curl knows will not be sent to a proxy.\n"
"\n"
"              Starting  in  7.55.0, this option can take an argument in @file-\n"
"              name style, which then adds a header for each line in the  input\n"
"              file. Using @- will make curl read the header file from stdin.\n"
"\n"
"              This  option  can  be  used multiple times to add/replace/remove\n"
"              multiple headers.\n"
"\n"
, stdout);
 fputs(
"              Added in 7.37.0.\n"
"       --proxy-insecure\n"


"              Same as -k, --insecure but used in HTTPS proxy context.\n"
"\n"
"              Added in 7.52.0.\n"
"\n"
"       --proxy-key-type <type>\n"
"              Same as --key-type but used in HTTPS proxy context.\n"
"\n"







>








<


>












<


>








<


>








>
>



<
<







>
>




<
<






>
>



<
<







>
>




<
<




>
>




<
<




>
>



<
<





<
<


>
>





<
<


|
>
|
|
|


>
>
|



<
<
|




|
|
>
>





<
<
|
|
|


|
>
>


|
<
<





|
<
<


>
>






|
>
>


|
<
<
|



|
|
>
>
|



<
<


|



>
>



|
|
<
<



|




<
<
<


>
>
>
|


|
|

>
>



|
<
<


|
|



<
<


>
>


|
|



<
<


>
>



|



>
>
|
|


<
<





|


<
<
<


>
>
>
|


|


>
>
|







<
<
|
|


>
>



|

|
<
<




>
>







>
>


<
<


|





|
>
>


<
<
|


|
|


<
<





>
>


|
|
<
<
|





>
>


|

<
<
|
|



<
<


>
>
|






<
<


>
>





|
|
|
<
<


>
>


|




<
<


>
>
|


|




<
<


>
>
|


|


>
>



<
<
|
|
|


|




|


|
|





|






|
|




|






|
|



|
|
|

<
<


>
>
|








|


<
<


>
>
|


|






|
<
<



>
>
|


|


|


<
<




>
>


|
|


>


<
|









|
>


<
|

|



|
>


<







|
>


<
|

|


|
<
<



>
>






|



>
>


<
<







|
>
>
>


<
<
<




|
|
<
<






>
>
|
|



|
>
>


<
<


|




>
>


<
<
|





|
<
<
|


|
>
>
|



<
<




|
>
>
|
|

<
<
|



|


>
>






<
<
|


|
|
>
>
|


|
<
<
|

|




<
<
<


>
>
>
|






|
>
>
|


<
<
|





|

<


>





|

|
<
<


>
>



|
|
|





<


>
|
|

|


<


>
|




|
|
<


>



|
|

<


>



|
|
|
>
>
|


<
<





|
|

<


>






|
|


<


>
|
|

|

<


>
|

|

|
<
<


>
>
|




|
<


>











<


>
|
|
|


|


<


>
|


|
|










|
|








|







|



|


|
|
|













|



|




|

|
|


|


|








|


|
|


|



|
|










|




|
|








|


|





|
|
|







|


|



|




|





|
|







|
|


|










|
|








|
|


|



|
|

|







|

|





|



|
|


|







|




|


|
|


|








|
|
|






|


|
|
|




|

|





|



|
|





|




|





|



|
|

|
|
|


|


|
|
|
|
>
>


>
>
|

|
<
|





<


>









<


>










>
>


>
>
>
>
>
>
>


>
>
>
>
>
>



>
>





<
<



>
>









<
<




>
>



<
<




>
>







<
<




>
>




<
<



>
>








<
<



>
>



<
<






>
>






<
<



>
>





<
<






>
>





<
<




>
>







<
<




>
>








<
<




>
>




<
<




>
>







<
<


>
>





<
<



>
>









<
<


>
>







<
<


>
>







<
<




>
>





<
<




>
>





<
<





>
>





<
<




>
>






<
<



>
>



<
<




>
>







<
<





>
>




<
<



>
>







<
<




>
>
|
|
|
|

<
<






>
>



<
<








>
>




<
<






>
>




<
<







<
<


>
>







>
>







<
<











<
<


>
>







>
>




<
<



>
>






<
<




>
>





<
<



>
>







<
<



>
>





<
<





>
>




<
<





>
>




<
<



>
>






<
<




>
>






<
<




>
>





<
<






>
>








<
<




>
>








>


<








>


<







<
<



>
>









<
<



>
>








<
<


>
>











>


<









<
<



>
>












<
<





>
>











<
<



>
>






>


<








>


<









<
<


>
>







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
1024
1025
1026
1027
1028
1029


1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040


1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052


1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067


1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116


1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132


1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147


1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161


1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176

1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190

1191
1192
1193
1194
1195
1196
1197
1198
1199
1200

1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211

1212
1213
1214
1215
1216
1217


1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236


1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249



1250
1251
1252
1253
1254
1255


1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273


1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284


1285
1286
1287
1288
1289
1290
1291


1292
1293
1294
1295
1296
1297
1298
1299
1300
1301


1302
1303
1304
1305
1306
1307
1308
1309
1310
1311


1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326


1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337


1338
1339
1340
1341
1342
1343
1344



1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362


1363
1364
1365
1366
1367
1368
1369
1370

1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381


1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396

1397
1398
1399
1400
1401
1402
1403
1404
1405

1406
1407
1408
1409
1410
1411
1412
1413
1414
1415

1416
1417
1418
1419
1420
1421
1422
1423
1424

1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438


1439
1440
1441
1442
1443
1444
1445
1446

1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459

1460
1461
1462
1463
1464
1465
1466
1467

1468
1469
1470
1471
1472
1473
1474
1475


1476
1477
1478
1479
1480
1481
1482
1483
1484
1485

1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499

1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510

1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846

1847
1848
1849
1850
1851
1852

1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864

1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906


1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920


1921
1922
1923
1924
1925
1926
1927
1928
1929


1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942


1943
1944
1945
1946
1947
1948
1949
1950
1951
1952


1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965


1966
1967
1968
1969
1970
1971
1972
1973


1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987


1988
1989
1990
1991
1992
1993
1994
1995
1996
1997


1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010


2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023


2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037


2038
2039
2040
2041
2042
2043
2044
2045
2046
2047


2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060


2061
2062
2063
2064
2065
2066
2067
2068
2069


2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083


2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094


2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105


2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116


2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127


2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139


2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151


2152
2153
2154
2155
2156
2157
2158
2159


2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172


2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183


2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195


2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206


2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217


2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231


2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243


2244
2245
2246
2247
2248
2249
2250


2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270


2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281


2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298


2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309


2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320


2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332


2333
2334
2335
2336
2337
2338
2339
2340
2341
2342


2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353


2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364


2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375


2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387


2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398


2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414


2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431

2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442

2443
2444
2445
2446
2447
2448
2449


2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463


2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476


2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494

2495
2496
2497
2498
2499
2500
2501
2502
2503


2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520


2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538


2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552

2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563

2564
2565
2566
2567
2568
2569
2570
2571
2572


2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
"              create the necessary local directory hierarchy as  needed.  This\n"
"              option  creates the dirs mentioned with the -o, --output option,\n"
, stdout);
 fputs(
"              nothing else. If the --output file name uses no dir  or  if  the\n"
"              dirs it mentions already exist, no dir will be created.\n"
"\n"
"              Created dirs are made with mode 0750 on unix style file systems.\n"
"              To  create remote directories when using FTP or SFTP, try --ftp-\n"
"              create-dirs.\n"
"\n"
"       --crlf (FTP SMTP)  Convert  LF  to  CRLF  in  upload.  Useful  for  MVS\n"
"              (OS/390).\n"
"\n"
"              (SMTP added in 7.40.0)\n"
"\n"

, stdout);
 fputs(
"       --crlfile <file>\n"
"              (TLS) Provide a file using PEM format with a Certificate Revoca-\n"
"              tion List that may specify peer certificates that are to be con-\n"
"              sidered revoked.\n"
"\n"
"              If this option is used several times, the last one will be used.\n"
"\n"
"              Added in 7.19.7.\n"
"\n"
"       --data-ascii <data>\n"
"              (HTTP) This is just an alias for -d, --data.\n"
"\n"
"       --data-binary <data>\n"

, stdout);
 fputs(
"              (HTTP)  This  posts data exactly as specified with no extra pro-\n"
"              cessing whatsoever.\n"
"\n"
"              If you start the data with the letter @, the rest  should  be  a\n"
"              filename.   Data  is  posted  in  a similar manner as -d, --data\n"
"              does, except that newlines and carriage  returns  are  preserved\n"
"              and conversions are never done.\n"
"\n"
"              Like  -d,  --data the default content-type sent to the server is\n"

, stdout);
 fputs(
"              application/x-www-form-urlencoded. If you want the  data  to  be\n"
"              treated as arbitrary binary data by the server then set the con-\n"
"              tent-type to octet-stream: -H \"Content-Type:  application/octet-\n"
"              stream\".\n"
"\n"
"              If  this  option  is  used several times, the ones following the\n"
"              first will append data as described in -d, --data.\n"
"\n"
"       --data-raw <data>\n"
, stdout);
 fputs(
"              (HTTP) This posts data similarly to -d, --data but  without  the\n"
"              special interpretation of the @ character.\n"
"\n"


"              See also -d, --data. Added in 7.43.0.\n"
"\n"
"       --data-urlencode <data>\n"
"              (HTTP)  This posts data, similar to the other -d, --data options\n"
"              with the exception that this performs URL-encoding.\n"
"\n"
"              To be CGI-compliant, the <data> part should begin  with  a  name\n"
, stdout);
 fputs(
"              followed  by a separator and a content specification. The <data>\n"
"              part can be passed to curl using one of the following syntaxes:\n"
"\n"
"              content\n"


"                     This will make curl URL-encode the content and pass  that\n"
"                     on.  Just  be careful so that the content doesn't contain\n"
"                     any = or @ symbols, as that will  then  make  the  syntax\n"
"                     match one of the other cases below!\n"
"\n"
"              =content\n"
, stdout);
 fputs(
"                     This  will make curl URL-encode the content and pass that\n"
"                     on. The preceding = symbol is not included in the data.\n"
"\n"


"              name=content\n"
"                     This will make curl URL-encode the content part and  pass\n"
"                     that  on.  Note that the name part is expected to be URL-\n"
"                     encoded already.\n"
"\n"
"              @filename\n"
"                     This will make curl load data from the  given  file  (in-\n"
, stdout);
 fputs(
"                     cluding  any  newlines), URL-encode that data and pass it\n"
"                     on in the POST.\n"
"\n"
"              name@filename\n"


"                     This will make curl load data from the  given  file  (in-\n"
"                     cluding  any  newlines), URL-encode that data and pass it\n"
"                     on in the POST. The name part  gets  an  equal  sign  ap-\n"
"                     pended,  resulting  in name=urlencoded-file-content. Note\n"
, stdout);
 fputs(
"                     that the name is expected to be URL-encoded already.\n"
"       See also -d, --data and --data-raw. Added in 7.18.0.\n"
"\n"
"       -d, --data <data>\n"


"              (HTTP) Sends the specified data in a POST request  to  the  HTTP\n"
"              server,  in  the  same  way  that a browser does when a user has\n"
"              filled in an HTML form and presses the submit button. This  will\n"
"              cause curl to pass the data to the server using the content-type\n"
, stdout);
 fputs(
"              application/x-www-form-urlencoded.  Compare to -F, --form.\n"
"\n"
"              --data-raw is almost the same but does not have a special inter-\n"


"              pretation  of  the  @ character. To post data purely binary, you\n"
"              should instead use the --data-binary option.  To URL-encode  the\n"
"              value of a form field you may use --data-urlencode.\n"
"\n"
"              If  any of these options is used more than once on the same com-\n"


, stdout);
 fputs(
"              mand line, the data pieces specified  will  be  merged  together\n"
"              with  a  separating  &-symbol.  Thus,  using  '-d name=daniel -d\n"
"              skill=lousy'  would  generate  a  post  chunk  that  looks  like\n"
"              'name=daniel&skill=lousy'.\n"
"\n"
"              If  you  start  the data with the letter @, the rest should be a\n"
"              file name to read the data from, or - if you want curl  to  read\n"


, stdout);
 fputs(
"              the  data  from  stdin.  Posting data from a file named 'foobar'\n"
"              would thus be done with -d, --data @foobar. When -d,  --data  is\n"
"              told  to  read  from a file like that, carriage returns and new-\n"
"              lines will be stripped out. If you don't want the @ character to\n"
"              have a special interpretation use --data-raw instead.\n"
"\n"
"              See also --data-binary and --data-urlencode and --data-raw. This\n"
, stdout);
 fputs(
"              option overrides -F, --form and -I,  --head  and  -T,  --upload-\n"
"              file.\n"
"\n"
"       --delegation <LEVEL>\n"


"              (GSS/kerberos)  Set  LEVEL to tell the server what it is allowed\n"
"              to delegate when it comes to user credentials.\n"
"\n"
"              none   Don't allow any delegation.\n"
"\n"
"              policy Delegates if and only if the OK-AS-DELEGATE flag  is  set\n"
"                     in  the  Kerberos  service  ticket,  which is a matter of\n"
, stdout);
 fputs(
"                     realm policy.\n"
"\n"
"              always Unconditionally allow the server to delegate.\n"
"\n"
"       --digest\n"


"              (HTTP) Enables HTTP Digest authentication. This is an  authenti-\n"
"              cation  scheme  that  prevents the password from being sent over\n"
"              the wire in clear text. Use this in combination with the  normal\n"
"              -u, --user option to set user name and password.\n"
"\n"
"              If  this  option  is  used  several times, only the first one is\n"
, stdout);
 fputs(
"              used.\n"
"\n"
"              See also -u, --user and --proxy-digest and --anyauth.  This  op-\n"


"              tion overrides --basic and --ntlm and --negotiate.\n"
"\n"
"       --disable-eprt\n"
"              (FTP) Tell curl to disable the use of the EPRT and LPRT commands\n"
"              when doing active FTP transfers. Curl will normally always first\n"
"              attempt  to use EPRT, then LPRT before using PORT, but with this\n"


, stdout);
 fputs(
"              option, it will use PORT right away. EPRT and  LPRT  are  exten-\n"
"              sions  to  the  original  FTP  protocol, and may not work on all\n"
"              servers, but they enable more functionality in a better way than\n"
"              the traditional PORT command.\n"
"\n"
"              --eprt can be used to explicitly enable EPRT again and --no-eprt\n"
"              is an alias for --disable-eprt.\n"
"\n"
"              If the server is accessed using IPv6, this option will  have  no\n"
, stdout);
 fputs(
"              effect as EPRT is necessary then.\n"
"\n"
"              Disabling  EPRT only changes the active behavior. If you want to\n"


"              switch to passive mode you need to not  use  -P,  --ftp-port  or\n"
"              force it with --ftp-pasv.\n"
"\n"
"       --disable-epsv\n"
"              (FTP)  (FTP)  Tell  curl  to disable the use of the EPSV command\n"
"              when doing passive FTP  transfers.  Curl  will  normally  always\n"
, stdout);
 fputs(
"              first  attempt to use EPSV before PASV, but with this option, it\n"
"              will not try using EPSV.\n"
"\n"
"              --epsv can be used to explicitly enable EPSV again and --no-epsv\n"


"              is an alias for --disable-epsv.\n"
"\n"
"              If  the  server is an IPv6 host, this option will have no effect\n"
"              as EPSV is necessary then.\n"
"\n"
"              Disabling EPSV only changes the passive behavior. If you want to\n"
, stdout);
 fputs(
"              switch to active mode you need to use -P, --ftp-port.\n"
"\n"
"       -q, --disable\n"
"              If  used  as the first parameter on the command line, the curlrc\n"
"              config file will not be read and used. See the -K, --config  for\n"


"              details on the default config file search path.\n"
"\n"
"       --disallow-username-in-url\n"
"              (HTTP)  This  tells  curl  to  exit if passed a url containing a\n"
"              username.\n"
"\n"
"              See also --proto. Added in 7.61.0.\n"
"\n"



, stdout);
 fputs(
"       --dns-interface <interface>\n"
"              (DNS) Tell curl to send outgoing DNS  requests  through  <inter-\n"
"              face>.  This  option is a counterpart to --interface (which does\n"
"              not affect DNS). The supplied string must be an  interface  name\n"
"              (not an address).\n"
"\n"
"              See  also  --dns-ipv4-addr  and --dns-ipv6-addr. --dns-interface\n"
"              requires that the underlying libcurl was  built  to  support  c-\n"
"              ares. Added in 7.33.0.\n"
, stdout);
 fputs(
"\n"
"       --dns-ipv4-addr <address>\n"
"              (DNS) Tell curl to bind to <ip-address> when making IPv4 DNS re-\n"
"              quests, so that the DNS requests originate  from  this  address.\n"


"              The argument should be a single IPv4 address.\n"
"\n"
"              See  also  --dns-interface  and --dns-ipv6-addr. --dns-ipv4-addr\n"
"              requires that the underlying libcurl was  built  to  support  c-\n"
"              ares. Added in 7.33.0.\n"
"\n"
"       --dns-ipv6-addr <address>\n"


, stdout);
 fputs(
"              (DNS) Tell curl to bind to <ip-address> when making IPv6 DNS re-\n"
"              quests, so that the DNS requests originate  from  this  address.\n"
"              The argument should be a single IPv6 address.\n"
"\n"
"              See  also  --dns-interface  and --dns-ipv4-addr. --dns-ipv6-addr\n"
"              requires that the underlying libcurl was  built  to  support  c-\n"
"              ares. Added in 7.33.0.\n"
"\n"
"       --dns-servers <addresses>\n"


, stdout);
 fputs(
"              Set the list of DNS servers to be used instead of the system de-\n"
"              fault.  The list of IP addresses should be separated  with  com-\n"
"              mas. Port numbers may also optionally be given as :<port-number>\n"
"              after each IP address.\n"
"\n"
"              --dns-servers requires that the underlying libcurl was built  to\n"
"              support c-ares. Added in 7.33.0.\n"
"\n"
"       --doh-url <URL>\n"
, stdout);
 fputs(
"              (all)  Specifies which DNS-over-HTTPS (DOH) server to use to re-\n"
"              solve hostnames, instead of  using  the  default  name  resolver\n"
"              mechanism. The URL must be HTTPS.\n"
"\n"


"              If this option is used several times, the last one will be used.\n"
"\n"
"              Added in 7.62.0.\n"
"\n"
"       -D, --dump-header <filename>\n"
"              (HTTP  FTP) Write the received protocol headers to the specified\n"
"              file.\n"
"\n"



, stdout);
 fputs(
"              This option is handy to use when you want to store  the  headers\n"
"              that  an  HTTP site sends to you. Cookies from the headers could\n"
"              then be read in a  second  curl  invocation  by  using  the  -b,\n"
"              --cookie  option! The -c, --cookie-jar option is a better way to\n"
"              store cookies.\n"
"\n"
"              If no headers are received, the use of this option  will  create\n"
"              an empty file.\n"
"\n"
, stdout);
 fputs(
"              When  used  in FTP, the FTP server response lines are considered\n"
"              being \"headers\" and thus are saved there.\n"
"\n"
"              If this option is used several times, the last one will be used.\n"
"\n"
"              See also -o, --output.\n"
"\n"
"       --egd-file <file>\n"


"              (TLS) Specify the path name  to  the  Entropy  Gathering  Daemon\n"
"              socket.  The  socket  is  used to seed the random engine for SSL\n"
"              connections.\n"
"\n"
, stdout);
 fputs(
"              See also --random-file.\n"
"\n"
"       --engine <name>\n"
"              (TLS) Select the OpenSSL crypto engine to use for cipher  opera-\n"
"              tions. Use --engine list to print a list of build-time supported\n"
"              engines. Note that not all (or  none)  of  the  engines  may  be\n"


"              available at run-time.\n"
"\n"
"       --etag-compare <file>\n"
"              (HTTP) This option makes a conditional HTTP request for the spe-\n"
, stdout);
 fputs(
"              cific ETag read from the given file by sending a custom If-None-\n"
"              Match header using the extracted ETag.\n"
"\n"
"              For correct results, make sure that specified file contains only\n"
"              a single line with a desired ETag. An empty file is parsed as an\n"
"              empty ETag.\n"
"\n"
"              Use  the  option  --etag-save  to first save the ETag from a re-\n"
"              sponse, and then use this option to compare using the saved ETag\n"
, stdout);
 fputs(


"              in a subsequent request.\n"
"\n"
"              OMPARISON:  There  are  2 types of comparison or ETags, Weak and\n"
"              Strong.  This option expects, and uses a strong comparison.\n"
"\n"
"              Added in 7.68.0.\n"
"\n"
"       --etag-save <file>\n"
"              (HTTP) This option saves an HTTP ETag  to  the  specified  file.\n"
"              Etag  is  usually  part  of  headers returned by a request. When\n"
"              server sends an ETag, it must be enveloped by  a  double  quote.\n"
, stdout);
 fputs(


"              This  option  extracts  the  ETag  without the double quotes and\n"
"              saves it into the <file>.\n"
"\n"
"              A server can send a week ETag which is prefixed  by  \"W/\".  This\n"
"              identifier  is  not  considered,  and only relevant ETag between\n"
"              quotation marks is parsed.\n"
"\n"


"              It an ETag wasn't send by the server or it cannot be parsed, and\n"
"              empty file is created.\n"
"\n"
"              Added in 7.68.0.\n"
"\n"
, stdout);
 fputs(
"       --expect100-timeout <seconds>\n"
"              (HTTP) Maximum time in seconds that you allow curl to wait for a\n"
"              100-continue response when curl emits an  Expects:  100-continue\n"
"              header  in  its  request.  By default curl will wait one second.\n"


"              This option accepts decimal values! When curl stops waiting,  it\n"
"              will continue as if the response has been received.\n"
"\n"
"              See also --connect-timeout. Added in 7.47.0.\n"
"\n"
"       --fail-early\n"
, stdout);
 fputs(
"              Fail and exit on the first detected transfer error.\n"
"\n"
"              When  curl is used to do multiple transfers on the command line,\n"
"              it will attempt to operate on each given URL, one by one. By de-\n"


"              fault,  it  will  ignore errors if there are more URLs given and\n"
"              the last URL's success will determine the error  code  curl  re-\n"
"              turns. So early failures will be \"hidden\" by subsequent success-\n"
"              ful transfers.\n"
"\n"


, stdout);
 fputs(
"              Using this option, curl will instead  return  an  error  on  the\n"
"              first  transfer  that  fails,  independent of the amount of URLs\n"
"              that are given on the command line. This way, no transfer  fail-\n"
"              ures go undetected by scripts and similar.\n"
"\n"
"              This option is global and does not need to be specified for each\n"
"              use of -:, --next.\n"
"\n"
"              This option does not imply -f, --fail, which causes transfers to\n"


, stdout);
 fputs(
"              fail  due  to the server's HTTP status code. You can combine the\n"
"              two options, however note -f, --fail is not global and is there-\n"
"              fore contained by -:, --next.\n"
"\n"
"              Added in 7.52.0.\n"
"\n"
"       -f, --fail\n"
"              (HTTP)  Fail  silently (no output at all) on server errors. This\n"
"              is mostly done to better enable scripts etc to better deal  with\n"
"              failed  attempts.  In  normal cases when an HTTP server fails to\n"


, stdout);
 fputs(
"              deliver a document, it  returns  an  HTML  document  stating  so\n"
"              (which  often  also describes why and more). This flag will pre-\n"
"              vent curl from outputting that and return error 22.\n"
"\n"
"              This method is not fail-safe and there are occasions where  non-\n"
"              successful response codes will slip through, especially when au-\n"
"              thentication is involved (response codes 401 and 407).\n"
"\n"
"       --false-start\n"


, stdout);
 fputs(
"              (TLS) Tells curl to use false start during  the  TLS  handshake.\n"
"              False  start is a mode where a TLS client will start sending ap-\n"
"              plication data before verifying the server's  Finished  message,\n"
"              thus saving a round trip when performing a full handshake.\n"
"\n"
"              This  is currently only implemented in the NSS and Secure Trans-\n"
"              port (on iOS 7.0 or later, or OS X 10.9 or later) backends.\n"
"\n"
"              Added in 7.42.0.\n"
"\n"


, stdout);
 fputs(
"       --form-string <name=string>\n"
"              (HTTP SMTP IMAP) Similar to -F, --form  except  that  the  value\n"
"              string  for  the  named parameter is used literally. Leading '@'\n"
"              and '<' characters, and the ';type=' string in the value have no\n"
"              special meaning. Use this in preference to -F, --form if there's\n"
"              any possibility that the string value may  accidentally  trigger\n"
"              the '@' or '<' features of -F, --form.\n"
"\n"
, stdout);
 fputs(
"              See also -F, --form.\n"
"\n"
"       -F, --form <name=content>\n"


"              (HTTP  SMTP  IMAP) For HTTP protocol family, this lets curl emu-\n"
"              late a filled-in form in which a user  has  pressed  the  submit\n"
"              button.  This  causes  curl  to POST data using the Content-Type\n"
"              multipart/form-data according to RFC 2388.\n"
"\n"
"              For SMTP and IMAP protocols, this is the mean to compose a  mul-\n"
"              tipart mail message to transmit.\n"
"\n"
, stdout);
 fputs(
"              This  enables  uploading of binary files etc. To force the 'con-\n"
"              tent' part to be a file, prefix the file name with an @ sign. To\n"
"              just get the content part from a file, prefix the file name with\n"
"              the symbol <. The difference between @ and  <  is  then  that  @\n"
"              makes  a  file  get attached in the post as a file upload, while\n"
"              the < makes a text field and just get the contents for that text\n"
, stdout);
 fputs(
"              field from a file.\n"
"\n"
"              Tell  curl to read content from stdin instead of a file by using\n"
"              - as filename. This goes for both @ and < constructs. When stdin\n"
"              is used, the contents is buffered in memory first by curl to de-\n"
"              termine its size and allow a possible resend.  Defining a part's\n"
"              data from a named non-regular file (such as a named pipe or sim-\n"
, stdout);
 fputs(
"              ilar) is unfortunately not subject to buffering and will be  ef-\n"
"              fectively  read at transmission time; since the full size is un-\n"
"              known before the transfer starts, such data is sent as chunks by\n"
"              HTTP and rejected by IMAP.\n"
"\n"
"              Example: send an image to an HTTP server, where 'profile' is the\n"
"              name of the form-field to which the file  portrait.jpg  will  be\n"
"              the input:\n"
"\n"
, stdout);
 fputs(
"               curl -F profile=@portrait.jpg https://example.com/upload.cgi\n"
"\n"
"              Example:  send your name and shoe size in two text fields to the\n"
"              server:\n"
"\n"
"               curl -F name=John -F shoesize=11 https://example.com/\n"
"\n"
"              Example: send your essay in a text field to the server. Send  it\n"
"              as  a plain text field, but get the contents for it from a local\n"
"              file:\n"
"\n"


"               curl -F \"story=<hugefile.txt\" https://example.com/\n"
"\n"
, stdout);
 fputs(
"              You can also  tell  curl  what  Content-Type  to  use  by  using\n"
"              'type=', in a manner similar to:\n"
"\n"
"               curl -F \"web=@index.html;type=text/html\" example.com\n"
"\n"
"              or\n"
"\n"
"               curl -F \"name=daniel;type=text/foo\" example.com\n"
"\n"
"              You  can  also explicitly change the name field of a file upload\n"
"              part by setting filename=, like this:\n"
"\n"


"               curl -F \"file=@localfile;filename=nameinpost\" example.com\n"
"\n"
, stdout);
 fputs(
"              If filename/path contains ',' or ';', it must be quoted by  dou-\n"
"              ble-quotes like:\n"
"\n"
"               curl   -F  \"file=@\\\"localfile\\\";filename=\\\"nameinpost\\\"\"  exam-\n"
"              ple.com\n"
"\n"
"              or\n"
"\n"
"               curl -F 'file=@\"localfile\";filename=\"nameinpost\"' example.com\n"
"\n"
"              Note that if a filename/path is  quoted  by  double-quotes,  any\n"


"              double-quote or backslash within the filename must be escaped by\n"
"              backslash.\n"
"\n"
, stdout);
 fputs(
"              Quoting must also be applied to non-file  data  if  it  contains\n"
"              semicolons, leading/trailing spaces or leading double quotes:\n"
"\n"
"               curl  -F  'colors=\"red;  green;  blue\";type=text/x-myapp' exam-\n"
"              ple.com\n"
"\n"
"              You can add custom headers to the  field  by  setting  headers=,\n"
"              like\n"
"\n"


"                curl -F \"submit=OK;headers=\\\"X-submit-type: OK\\\"\" example.com\n"
"\n"
"              or\n"
"\n"
, stdout);
 fputs(
"                curl -F \"submit=OK;headers=@headerfile\" example.com\n"
"\n"
"              The  headers=  keyword may appear more that once and above notes\n"
"              about quoting apply. When headers are read from  a  file,  Empty\n"
"              lines and lines starting with '#' are comments and ignored; each\n"
"              header can be folded by splitting between two words and starting\n"
"              the  continuation  line  with a space; embedded carriage-returns\n"
, stdout);
 fputs(

"              and trailing spaces are stripped.   Here  is  an  example  of  a\n"
"              header file contents:\n"
"\n"
"                # This file contain two headers.\n"
"                X-header-1: this is a header\n"
"\n"
"                # The following header is folded.\n"
"                X-header-2: this is\n"
"                 another header\n"
"\n"
"              To  support  sending  multipart mail messages, the syntax is ex-\n"
"              tended as follows:\n"
, stdout);
 fputs(

"              - name can be omitted: the equal sign is the first character  of\n"
"              the argument,\n"
"              -  if  data  starts with '(', this signals to start a new multi-\n"
"              part: it can be followed by a content type specification.\n"
"              - a multipart can be terminated with a '=)' argument.\n"
"\n"
"              Example: the following command sends an SMTP  mime  e-mail  con-\n"
"              sisting in an inline part in two alternative formats: plain text\n"
, stdout);
 fputs(

"              and HTML. It attaches a text file:\n"
"\n"
"               curl -F '=(;type=multipart/alternative' \\\n"
"                       -F '=plain text message' \\\n"
"                       -F '= <body>HTML message</body>;type=text/html' \\\n"
"                    -F '=)' -F '=@textfile.txt' ...  smtp://example.com\n"
"\n"
"              Data can be encoded for transfer using encoder=.  Available  en-\n"
"              codings are binary and 8bit that do nothing else than adding the\n"
, stdout);
 fputs(

"              corresponding Content-Transfer-Encoding header, 7bit  that  only\n"
"              rejects 8-bit characters with a transfer error, quoted-printable\n"
"              and base64 that encodes  data  according  to  the  corresponding\n"
"              schemes, limiting lines length to 76 characters.\n"
"\n"
"              Example:  send  multipart mail with a quoted-printable text mes-\n"


"              sage and a base64 attached file:\n"
"\n"
"               curl -F '=text message;encoder=quoted-printable' \\\n"
, stdout);
 fputs(
"                    -F '=@localfile;encoder=base64' ... smtp://example.com\n"
"\n"
"              See further examples and details in the MANUAL.\n"
"\n"
"              This option can be used multiple times.\n"
"\n"
"              This option overrides -d, --data and -I, --head  and  -T,  --up-\n"
"              load-file.\n"
"\n"
"       --ftp-account <data>\n"
"              (FTP) When an FTP server asks for \"account data\" after user name\n"
"              and password has been provided, this data is sent off using  the\n"
, stdout);
 fputs(


"              ACCT command.\n"
"\n"
"              If this option is used several times, the last one will be used.\n"
"\n"
"              Added in 7.13.0.\n"
"\n"
"       --ftp-alternative-to-user <command>\n"
"              (FTP)  If  authenticating with the USER and PASS commands fails,\n"
"              send this  command.   When  connecting  to  Tumbleweed's  Secure\n"
"              Transport  server  over  FTPS  using a client certificate, using\n"
"              \"SITE AUTH\" will tell the server to retrieve the  username  from\n"
, stdout);
 fputs(



"              the certificate.\n"
"              Added in 7.15.5.\n"
"\n"
"       --ftp-create-dirs\n"
"              (FTP  SFTP)  When  an FTP or SFTP URL/operation uses a path that\n"
"              doesn't currently exist on the server, the standard behavior  of\n"


"              curl is to fail. Using this option, curl will instead attempt to\n"
"              create missing directories.\n"
"\n"
"              See also --create-dirs.\n"
"\n"
"       --ftp-method <method>\n"
, stdout);
 fputs(
"              (FTP) Control what method curl should use to reach a file on  an\n"
"              FTP(S)  server. The method argument should be one of the follow-\n"
"              ing alternatives:\n"
"\n"
"              multicwd\n"
"                     curl does a single CWD operation for each  path  part  in\n"
"                     the  given URL. For deep hierarchies this means very many\n"
"                     commands. This is how RFC 1738 says it  should  be  done.\n"
, stdout);
 fputs(


"                     This is the default but the slowest behavior.\n"
"\n"
"              nocwd  curl  does  no  CWD at all. curl will do SIZE, RETR, STOR\n"
"                     etc and give a full path to the server for all these com-\n"
"                     mands. This is the fastest behavior.\n"
"\n"
"              singlecwd\n"
"                     curl does one CWD with the full target directory and then\n"
"                     operates on the file \"normally\"  (like  in  the  multicwd\n"
, stdout);
 fputs(


"                     case).  This  is  somewhat  more standards compliant than\n"
"                     'nocwd' but without the full penalty of 'multicwd'.\n"
"\n"
"       Added in 7.15.1.\n"
"\n"
"       --ftp-pasv\n"
"              (FTP) Use passive mode for the data connection. Passive  is  the\n"


"              internal  default behavior, but using this option can be used to\n"
"              override a previous -P, --ftp-port option.\n"
"\n"
"              If this option is used several times,  only  the  first  one  is\n"
, stdout);
 fputs(
"              used.  Undoing  an  enforced passive really isn't doable but you\n"
"              must then instead enforce the correct -P, --ftp-port again.\n"
"\n"
"              Passive mode means that curl will try the EPSV command first and\n"


"              then PASV, unless --disable-epsv is used.\n"
"              See also --disable-epsv. Added in 7.11.0.\n"
"\n"
"       -P, --ftp-port <address>\n"
"              (FTP)  Reverses  the  default initiator/listener roles when con-\n"
, stdout);
 fputs(
"              necting with FTP. This option makes curl use active  mode.  curl\n"
"              then  tells the server to connect back to the client's specified\n"
"              address and port, while passive mode asks the server to setup an\n"


"              IP  address  and  port for it to connect to. <address> should be\n"
"              one of:\n"
"\n"
"              interface\n"
"                     e.g. \"eth0\" to specify which interface's IP  address  you\n"
"                     want to use (Unix only)\n"
"\n"
, stdout);
 fputs(
"              IP address\n"
"                     e.g. \"192.168.10.1\" to specify the exact IP address\n"
"\n"
"              host name\n"
"                     e.g. \"my.host.domain\" to specify the machine\n"
"\n"


"              -      make  curl  pick the same IP address that is already used\n"
"                     for the control connection\n"
"\n"
"       If this option is used several times, the last one will be  used.  Dis-\n"
"       able  the  use  of PORT with --ftp-pasv. Disable the attempt to use the\n"
, stdout);
 fputs(
"       EPRT command instead of PORT by using --disable-eprt.  EPRT  is  really\n"
"       PORT++.\n"
"\n"
"       Since  7.19.5,  you can append \":[start]-[end]\" to the right of the ad-\n"


"       dress, to tell curl what TCP port range to use. That means you  specify\n"
"       a port range, from a lower to a higher number. A single number works as\n"
"       well, but do note that it increases the risk of failure since the  port\n"
"       may not be available.\n"
"\n"
"       See also --ftp-pasv and --disable-eprt.\n"
"\n"



, stdout);
 fputs(
"       --ftp-pret\n"
"              (FTP)  Tell  curl to send a PRET command before PASV (and EPSV).\n"
"              Certain FTP servers, mainly drftpd,  require  this  non-standard\n"
"              command  for  directory  listings as well as up and downloads in\n"
"              PASV mode.\n"
"\n"
"              Added in 7.20.0.\n"
"\n"
"       --ftp-skip-pasv-ip\n"
"              (FTP) Tell curl to not use the IP address the server suggests in\n"
"              its  response to curl's PASV command when curl connects the data\n"
, stdout);
 fputs(
"              connection. Instead curl will re-use the same IP address it  al-\n"
"              ready uses for the control connection.\n"
"\n"


"              This  option has no effect if PORT, EPRT or EPSV is used instead\n"
"              of PASV.\n"
"\n"
"              See also --ftp-pasv. Added in 7.14.2.\n"
"\n"
"       --ftp-ssl-ccc-mode <active/passive>\n"
"              (FTP) Sets the CCC mode. The passive mode will not initiate  the\n"
"              shutdown, but instead wait for the server to do it, and will not\n"

, stdout);
 fputs(
"              reply to the shutdown from the server. The active mode initiates\n"
"              the shutdown and waits for a reply from the server.\n"
"\n"
"              See also --ftp-ssl-ccc. Added in 7.16.2.\n"
"\n"
"       --ftp-ssl-ccc\n"
"              (FTP)  Use  CCC  (Clear  Command Channel) Shuts down the SSL/TLS\n"
"              layer after authenticating. The rest of the control channel com-\n"
"              munication  will be unencrypted. This allows NAT routers to fol-\n"


, stdout);
 fputs(
"              low the FTP transaction. The default mode is passive.\n"
"\n"
"              See also --ssl and --ftp-ssl-ccc-mode. Added in 7.16.1.\n"
"\n"
"       --ftp-ssl-control\n"
"              (FTP) Require SSL/TLS for the FTP  login,  clear  for  transfer.\n"
"              Allows  secure  authentication, but non-encrypted data transfers\n"
"              for efficiency.  Fails the transfer if the server  doesn't  sup-\n"
"              port SSL/TLS.\n"
"\n"
"              Added in 7.16.0.\n"
"\n"
"       -G, --get\n"

, stdout);
 fputs(
"              When  used,  this  option  will make all data specified with -d,\n"
"              --data, --data-binary or --data-urlencode to be used in an  HTTP\n"
"              GET  request instead of the POST request that otherwise would be\n"
"              used. The data will be appended to the URL with a '?' separator.\n"
"              If used in combination with -I, --head, the POST data  will  in-\n"
"              stead be appended to the URL with a HEAD request.\n"
"\n"

, stdout);
 fputs(
"              If  this  option  is  used  several times, only the first one is\n"
"              used. This is because undoing a GET doesn't make sense, but  you\n"
"              should then instead enforce the alternative method you prefer.\n"
"\n"
"       -g, --globoff\n"
"              This option switches off the \"URL globbing parser\". When you set\n"
"              this option, you can specify URLs that contain the letters  {}[]\n"
"              without  having them being interpreted by curl itself. Note that\n"

, stdout);
 fputs(
"              these letters are not normal legal URL contents but they  should\n"
"              be encoded according to the URI standard.\n"
"\n"
"       --happy-eyeballs-timeout-ms <milliseconds>\n"
"              Happy  eyeballs is an algorithm that attempts to connect to both\n"
"              IPv4 and IPv6 addresses for dual-stack  hosts,  preferring  IPv6\n"
"              first for the number of milliseconds. If the IPv6 address cannot\n"

, stdout);
 fputs(
"              be connected to within that time then a  connection  attempt  is\n"
"              made to the IPv4 address in parallel. The first connection to be\n"
"              established is the one that is used.\n"
"\n"
"              The range of suggested useful values is limited. Happy  Eyeballs\n"
"              RFC  6555  says  \"It  is RECOMMENDED that connection attempts be\n"
"              paced 150-250 ms apart to balance human factors against  network\n"
, stdout);
 fputs(
"              load.\"  libcurl currently defaults to 200 ms. Firefox and Chrome\n"
"              currently default to 300 ms.\n"
"\n"


"              If this option is used several times, the last one will be used.\n"
"\n"
"              Added in 7.59.0.\n"
"\n"
"       --haproxy-protocol\n"
"              (HTTP) Send a HAProxy PROXY protocol v1 header at the  beginning\n"
"              of  the  connection. This is used by some load balancers and re-\n"
"              verse proxies to indicate the client's true IP address and port.\n"

, stdout);
 fputs(
"              This option is primarily useful when sending test requests to  a\n"
"              service that expects this header.\n"
"\n"
"              Added in 7.60.0.\n"
"\n"
"       -I, --head\n"
"              (HTTP FTP FILE) Fetch the headers only! HTTP-servers feature the\n"
"              command HEAD which this uses to get nothing but the header of  a\n"
"              document.  When  used  on an FTP or FILE file, curl displays the\n"
"              file size and last modification time only.\n"
"\n"

, stdout);
 fputs(
"       -H, --header <header/@file>\n"
"              (HTTP) Extra header to include in the request when sending  HTTP\n"
"              to  a  server. You may specify any number of extra headers. Note\n"
"              that if you should add a custom header that has the same name as\n"
"              one  of  the  internal  ones curl would use, your externally set\n"
"              header will be used instead of the internal one. This allows you\n"

, stdout);
 fputs(
"              to  make  even  trickier  stuff than curl would normally do. You\n"
"              should not replace internally set headers without  knowing  per-\n"
"              fectly well what you're doing. Remove an internal header by giv-\n"
"              ing a replacement without content  on  the  right  side  of  the\n"
"              colon, as in: -H \"Host:\". If you send the custom header with no-\n"
"              value then its header must be terminated with a semicolon,  such\n"


, stdout);
 fputs(
"              as -H \"X-Custom-Header;\" to send \"X-Custom-Header:\".\n"
"\n"
"              curl  will  make  sure  that each header you add/replace is sent\n"
"              with the proper end-of-line marker, you should thus not add that\n"
"              as a part of the header content: do not add newlines or carriage\n"
"              returns, they will only mess things up for you.\n"
"\n"
"              Starting in 7.55.0, this option can take an argument  in  @file-\n"

, stdout);
 fputs(
"              name  style, which then adds a header for each line in the input\n"
"              file. Using @- will make curl read the header file from stdin.\n"
"\n"
"              See also the -A, --user-agent and -e, --referer options.\n"
"\n"
"              Starting in 7.37.0, you need --proxy-header to send custom head-\n"
"              ers intended for a proxy.\n"
"\n"
"              Example:\n"
"\n"
"               curl -H \"X-First-Name: Joe\" http://example.com/\n"
"\n"

, stdout);
 fputs(
"              WARNING:  headers  set  with  this option will be set in all re-\n"
"              quests - even after redirects are followed, like when told  with\n"
"              -L,  --location. This can lead to the header being sent to other\n"
"              hosts than the original host, so  sensitive  headers  should  be\n"
"              used with caution combined with following redirects.\n"
"\n"
"              This  option  can  be  used multiple times to add/replace/remove\n"
"              multiple headers.\n"
"\n"

, stdout);
 fputs(
"       -h, --help\n"
"              Usage help. This lists all current command line options  with  a\n"
"              short description.\n"
"       --hostpubmd5 <md5>\n"
"              (SFTP  SCP)  Pass a string containing 32 hexadecimal digits. The\n"
"              string should be the 128 bit MD5 checksum of the  remote  host's\n"
"              public key, curl will refuse the connection with the host unless\n"
"              the md5sums match.\n"
"\n"
"              Added in 7.17.1.\n"
"\n"
"       --http0.9\n"
, stdout);
 fputs(
"              (HTTP) Tells curl to be fine with HTTP version 0.9 response.\n"
"\n"
"              HTTP/0.9 is a completely headerless response and  therefore  you\n"
"              can  also  connect with this to non-HTTP servers and still get a\n"
"              response since curl will simply transparently downgrade - if al-\n"
"              lowed.\n"
"\n"
"              Since curl 7.66.0, HTTP/0.9 is disabled by default.\n"
"\n"
"       -0, --http1.0\n"
, stdout);
 fputs(
"              (HTTP)  Tells  curl to use HTTP version 1.0 instead of using its\n"
"              internally preferred HTTP version.\n"
"\n"
"              This option overrides --http1.1 and --http2.\n"
"\n"
"       --http1.1\n"
"              (HTTP) Tells curl to use HTTP version 1.1.\n"
"\n"
"              This option  overrides  -0,  --http1.0  and  --http2.  Added  in\n"
"              7.33.0.\n"
"\n"
"       --http2-prior-knowledge\n"
"              (HTTP)  Tells  curl  to  issue  its  non-TLS HTTP requests using\n"
, stdout);
 fputs(
"              HTTP/2 without HTTP/1.1 Upgrade.  It  requires  prior  knowledge\n"
"              that  the  server  supports HTTP/2 straight away. HTTPS requests\n"
"              will still do HTTP/2 the standard way with  negotiated  protocol\n"
"              version in the TLS handshake.\n"
"\n"
"              --http2-prior-knowledge requires that the underlying libcurl was\n"
"              built to support HTTP/2. This option overrides --http1.1 and -0,\n"
"              --http1.0 and --http2. Added in 7.49.0.\n"
"\n"
, stdout);
 fputs(
"       --http2\n"
"              (HTTP) Tells curl to use HTTP version 2.\n"
"\n"
"              See also --http1.1 and --http3. --http2 requires that the under-\n"
"              lying libcurl was built to support HTTP/2. This option overrides\n"
"              --http1.1  and  -0, --http1.0 and --http2-prior-knowledge. Added\n"
"              in 7.33.0.\n"
"\n"
"       --http3\n"
"              (HTTP) WARNING: this option is experimental. Do not use in  pro-\n"
"              duction.\n"
"\n"
, stdout);
 fputs(
"              Tells  curl  to use HTTP version 3 directly to the host and port\n"
"              number used in the URL. A normal HTTP/3 transaction will be done\n"
"              to  a  host and then get redirected via Alt-SVc, but this option\n"
"              allows a user to circumvent that when you know that  the  target\n"
"              speaks HTTP/3 on the given host and port.\n"
"\n"
"              This  option  will make curl fail if a QUIC connection cannot be\n"
, stdout);
 fputs(
"              established, it cannot fall back to a lower HTTP version on  its\n"
"              own.\n"
"\n"
"              See also --http1.1 and --http2. --http3 requires that the under-\n"
"              lying libcurl was built to support HTTP/3. This option overrides\n"
"              --http1.1 and -0, --http1.0 and --http2 and --http2-prior-knowl-\n"
"              edge. Added in 7.66.0.\n"
"\n"
"       --ignore-content-length\n"
"              (FTP HTTP) For HTTP, Ignore the Content-Length header.  This  is\n"
, stdout);
 fputs(
"              particularly  useful  for servers running Apache 1.x, which will\n"
"              report incorrect Content-Length for files larger  than  2  giga-\n"
"              bytes.\n"
"\n"
"              For  FTP (since 7.46.0), skip the RETR command to figure out the\n"
"              size before downloading a file.\n"
"\n"
"       -i, --include\n"
"              Include the HTTP response headers in the output.  The  HTTP  re-\n"
"              sponse  headers  can  include  things like server name, cookies,\n"
, stdout);
 fputs(
"              date of the document, HTTP version and more...\n"
"\n"
"              To view the request headers, consider the -v, --verbose option.\n"
"\n"
"              See also -v, --verbose.\n"
"\n"
"       -k, --insecure\n"
"              (TLS) By default, every SSL connection curl makes is verified to\n"
"              be  secure.  This option allows curl to proceed and operate even\n"
"              for server connections otherwise considered insecure.\n"
"\n"
, stdout);
 fputs(
"              The server connection is verified by making  sure  the  server's\n"
"              certificate  contains  the  right name and verifies successfully\n"
"              using the cert store.\n"
"\n"
"              See this online resource for further details:\n"
"               https://curl.haxx.se/docs/sslcerts.html\n"
"              See also --proxy-insecure and --cacert.\n"
"\n"
"       --interface <name>\n"
"\n"
"              Perform an operation using a specified interface. You can  enter\n"
, stdout);
 fputs(
"              interface  name,  IP address or host name. An example could look\n"
"              like:\n"
"\n"
"               curl --interface eth0:1 https://www.example.com/\n"
"\n"
"              If this option is used several times, the last one will be used.\n"
"              On Linux it can be used to specify a VRF, but the  binary  needs\n"
"              to  either  have CAP_NET_RAW or to be run as root. More informa-\n"
"              tion  about  Linux  VRF:   https://www.kernel.org/doc/Documenta-\n"
, stdout);
 fputs(
"              tion/networking/vrf.txt\n"
"\n"
"              See also --dns-interface.\n"
"\n"
"       -4, --ipv4\n"
"              This  option tells curl to resolve names to IPv4 addresses only,\n"
"              and not for example try IPv6.\n"
"\n"
"              See also  --http1.1  and  --http2.  This  option  overrides  -6,\n"
"              --ipv6.\n"
"\n"
"       -6, --ipv6\n"
"              This  option tells curl to resolve names to IPv6 addresses only,\n"
"              and not for example try IPv4.\n"
"\n"
, stdout);
 fputs(
"              See also  --http1.1  and  --http2.  This  option  overrides  -4,\n"
"              --ipv4.\n"
"\n"
"       -j, --junk-session-cookies\n"
"              (HTTP) When curl is told to read cookies from a given file, this\n"
"              option will make it discard all \"session cookies\". This will ba-\n"
"              sically  have  the  same  effect as if a new session is started.\n"
"              Typical browsers always discard  session  cookies  when  they're\n"
"              closed down.\n"
"\n"
, stdout);
 fputs(
"              See also -b, --cookie and -c, --cookie-jar.\n"
"\n"
"       --keepalive-time <seconds>\n"
"              This  option sets the time a connection needs to remain idle be-\n"
"              fore sending keepalive probes and the  time  between  individual\n"
"              keepalive probes. It is currently effective on operating systems\n"
"              offering  the  TCP_KEEPIDLE  and  TCP_KEEPINTVL  socket  options\n"
"              (meaning  Linux, recent AIX, HP-UX and more). This option has no\n"
, stdout);
 fputs(
"              effect if --no-keepalive is used.\n"
"\n"
"              If this option is used several times, the last one will be used.\n"
"              If unspecified, the option defaults to 60 seconds.\n"
"\n"
"              Added in 7.18.0.\n"
"\n"
"       --key-type <type>\n"
"              (TLS)  Private key file type. Specify which type your --key pro-\n"
"              vided private key is. DER, PEM, and ENG are  supported.  If  not\n"
"              specified, PEM is assumed.\n"
"\n"
, stdout);
 fputs(
"              If this option is used several times, the last one will be used.\n"
"\n"
"       --key <key>\n"
"              (TLS SSH) Private key file name. Allows you to provide your pri-\n"
"              vate key in this separate file. For SSH, if not specified,  curl\n"
"              tries   the  following  candidates  in  order:  '~/.ssh/id_rsa',\n"
"              '~/.ssh/id_dsa', './id_rsa', './id_dsa'.\n"
"\n"
"              If curl is built against OpenSSL library, and the engine  pkcs11\n"
, stdout);
 fputs(
"              is available, then a PKCS#11 URI (RFC 7512) can be used to spec-\n"
"              ify a private key located in a PKCS#11 device. A  string  begin-\n"
"              ning  with  \"pkcs11:\" will be interpreted as a PKCS#11 URI. If a\n"
"              PKCS#11 URI is provided, then the --engine option will be set as\n"
"              \"pkcs11\"  if none was provided and the --key-type option will be\n"
"              set as \"ENG\" if none was provided.\n"
"\n"
, stdout);
 fputs(
"              If this option is used several times, the last one will be used.\n"
"\n"
"       --krb <level>\n"
"              (FTP) Enable Kerberos authentication and use. The level must  be\n"
"              entered and should be one of 'clear', 'safe', 'confidential', or\n"
"              'private'. Should you use a level that  is  not  one  of  these,\n"
"              'private' will instead be used.\n"
"\n"
"              If this option is used several times, the last one will be used.\n"
, stdout);
 fputs(
"              --krb  requires that the underlying libcurl was built to support\n"
"              Kerberos.\n"
"\n"
"       --libcurl <file>\n"
"              Append this option to any ordinary curl command  line,  and  you\n"
"              will  get a libcurl-using C source code written to the file that\n"
"              does the equivalent of what your command-line operation does!\n"
"\n"
"              If this option is used several times, the last given  file  name\n"
"              will be used.\n"
"\n"
, stdout);
 fputs(
"              Added in 7.16.1.\n"
"\n"
"       --limit-rate <speed>\n"
"              Specify  the  maximum  transfer  rate you want curl to use - for\n"
"              both downloads and uploads. This feature is useful if you have a\n"
"              limited pipe and you'd like your transfer not to use your entire\n"
"              bandwidth. To make it slower than it otherwise would be.\n"
"\n"
"              The given speed is measured in bytes/second, unless a suffix  is\n"
, stdout);
 fputs(
"              appended.   Appending  'k' or 'K' will count the number as kilo-\n"
"              bytes, 'm' or 'M' makes it megabytes, while 'g' or 'G' makes  it\n"
"              gigabytes. Examples: 200K, 3m and 1G.\n"
"\n"
"              If  you  also use the -Y, --speed-limit option, that option will\n"
"              take precedence and might cripple the rate-limiting slightly, to\n"
"              help keeping the speed-limit logic working.\n"
"\n"
, stdout);
 fputs(
"              If this option is used several times, the last one will be used.\n"
"\n"
"       -l, --list-only\n"
"              (FTP  POP3)  (FTP)  When  listing  an FTP directory, this switch\n"
"              forces a name-only view. This is especially useful if  the  user\n"
"              wants  to  machine-parse  the contents of an FTP directory since\n"
"              the normal directory view doesn't use a standard look or format.\n"
"              When used like this, the option causes a NLST command to be sent\n"
, stdout);
 fputs(
"              to the server instead of LIST.\n"
"\n"
"              Note: Some FTP servers list only  files  in  their  response  to\n"
"              NLST; they do not include sub-directories and symbolic links.\n"
"\n"
"              (POP3)  When  retrieving a specific email from POP3, this switch\n"
"              forces a LIST command to be performed instead of RETR.  This  is\n"
"              particularly  useful if the user wants to see if a specific mes-\n"
, stdout);
 fputs(
"              sage id exists on the server and what size it is.\n"
"\n"
"              Note: When combined with -X, --request, this option can be  used\n"
"              to send an UIDL command instead, so the user may use the email's\n"
"              unique identifier rather than it's message id to  make  the  re-\n"
"              quest.\n"
"\n"
"              Added in 7.21.5.\n"
"\n"
"       --local-port <num/range>\n"
"              Set  a  preferred single number or range (FROM-TO) of local port\n"
, stdout);
 fputs(
"              numbers to use for the connection(s).  Note that port numbers by\n"
"              nature  are a scarce resource that will be busy at times so set-\n"
"              ting this range to something too narrow might cause  unnecessary\n"
"              connection setup failures.\n"
"\n"
"              Added in 7.15.2.\n"
"\n"
"       --location-trusted\n"
"              (HTTP)  Like  -L,  --location, but will allow sending the name +\n"
"              password to all hosts that the site may redirect to. This may or\n"
, stdout);
 fputs(
"              may not introduce a security breach if the site redirects you to\n"
"              a site to which you'll send your authentication info  (which  is\n"
"              plaintext in the case of HTTP Basic authentication).\n"
"\n"
"              See also -u, --user.\n"
"\n"
"       -L, --location\n"
"              (HTTP)  If  the server reports that the requested page has moved\n"
"              to a different location (indicated with a Location: header and a\n"
, stdout);
 fputs(
"              3XX  response code), this option will make curl redo the request\n"
"              on the new place. If used together with  -i,  --include  or  -I,\n"
"              --head, headers from all requested pages will be shown. When au-\n"
"              thentication is used, curl only sends  its  credentials  to  the\n"
"              initial  host.  If a redirect takes curl to a different host, it\n"
"              won't be able to intercept the user+password. See  also  --loca-\n"
, stdout);
 fputs(
"              tion-trusted  on how to change this. You can limit the amount of\n"
"              redirects to follow by using the --max-redirs option.\n"
"\n"
"              When curl follows a redirect and if the request is  a  POST,  it\n"
"              will  do  the  following request with a GET if the HTTP response\n"
"              was 301, 302, or 303. If the response code  was  any  other  3xx\n"
"              code, curl will re-send the following request using the same un-\n"
"              modified method.\n"
"\n"
, stdout);
 fputs(
"              You can tell curl to not change POST requests to GET after a 30x\n"
"              response  by  using  the  dedicated options for that: --post301,\n"
"              --post302 and --post303.\n"
"\n"
"              The method set with -X,  --request  overrides  the  method  curl\n"

"              would otherwise select to use.\n"
"\n"
"       --login-options <options>\n"
"              (IMAP  POP3 SMTP) Specify the login options to use during server\n"
"              authentication.\n"
"\n"

, stdout);
 fputs(
"              You can use the login options to specify protocol  specific  op-\n"
"              tions  that  may  be used during authentication. At present only\n"
"              IMAP, POP3 and SMTP support login options. For more  information\n"
"              about  the  login options please see RFC 2384, RFC 5092 and IETF\n"
"              draft draft-earhart-url-smtp-00.txt\n"
"\n"
"              If this option is used several times, the last one will be used.\n"
"\n"
"              Added in 7.34.0.\n"
"\n"

, stdout);
 fputs(
"       --mail-auth <address>\n"
"              (SMTP) Specify a single address. This will be  used  to  specify\n"
"              the  authentication  address  (identity)  of a submitted message\n"
"              that is being relayed to another server.\n"
"\n"
"              See also --mail-rcpt and --mail-from. Added in 7.25.0.\n"
"\n"
"       --mail-from <address>\n"
"              (SMTP) Specify a single address that the given mail  should  get\n"
"              sent from.\n"
"\n"
, stdout);
 fputs(
"              See also --mail-rcpt and --mail-auth. Added in 7.20.0.\n"
"\n"
"       --mail-rcpt-allowfails\n"
"              (SMTP) When sending data to multiple recipients, by default curl\n"
"              will abort SMTP conversation if at least one of  the  recipients\n"
"              causes RCPT TO command to return an error.\n"
"\n"
"              The  default  behavior can be changed by passing --mail-rcpt-al-\n"
"              lowfails command-line option which will make curl ignore  errors\n"
, stdout);
 fputs(
"              and proceed with the remaining valid recipients.\n"
"\n"
"              In  case when all recipients cause RCPT TO command to fail, curl\n"
"              will abort SMTP conversation and return the error received  from\n"
"              to the last RCPT TO command.  Added in 7.69.0.\n"
"\n"
"       --mail-rcpt <address>\n"
"              (SMTP) Specify a single address, user name or mailing list name.\n"
"              Repeat this option several times to send to multiple recipients.\n"
, stdout);
 fputs(
"              When performing a mail transfer, the recipient should specify  a\n"
"              valid email address to send the mail to.\n"
"\n"
"              When  performing an address verification (VRFY command), the re-\n"
"              cipient should be specified as the user name or  user  name  and\n"


"              domain (as per Section 3.5 of RFC5321). (Added in 7.34.0)\n"
"\n"
"              When performing a mailing list expand (EXPN command), the recip-\n"
, stdout);
 fputs(
"              ient should be specified using the mailing list  name,  such  as\n"
"              \"Friends\" or \"London-Office\".  (Added in 7.34.0)\n"
"\n"
"              Added in 7.20.0.\n"
"\n"
"       -M, --manual\n"
"              Manual. Display the huge help text.\n"
"\n"
"       --max-filesize <bytes>\n"


"              Specify  the  maximum  size (in bytes) of a file to download. If\n"
"              the file requested is larger than this value, the transfer  will\n"
"              not start and curl will return with exit code 63.\n"
"\n"
, stdout);
 fputs(
"              A  size  modifier may be used. For example, Appending 'k' or 'K'\n"
"              will count  the  number  as  kilobytes,  'm'  or  'M'  makes  it\n"
"              megabytes,  while 'g' or 'G' makes it gigabytes. Examples: 200K,\n"


"              3m and 1G. (Added in 7.58.0)\n"
"\n"
"              NOTE: The file size is not always known prior to  download,  and\n"
"              for such files this option has no effect even if the file trans-\n"
, stdout);
 fputs(
"              fer ends up being larger than this given  limit.  This  concerns\n"
"              both FTP and HTTP transfers.\n"
"\n"
"              See also --limit-rate.\n"
"\n"
"       --max-redirs <num>\n"
"              (HTTP)  Set  maximum  number  of redirection-followings allowed.\n"


"              When -L, --location is used, is used to prevent curl  from  fol-\n"
"              lowing redirections too much. By default, the limit is set to 50\n"
"              redirections. Set this option to -1 to make it unlimited.\n"
"\n"
, stdout);
 fputs(
"              If this option is used several times, the last one will be used.\n"
"\n"
"       -m, --max-time <seconds>\n"
"              Maximum time in seconds that you allow the  whole  operation  to\n"


"              take.   This is useful for preventing your batch jobs from hang-\n"
"              ing for hours due to slow networks or links going  down.   Since\n"
"              7.32.0, this option accepts decimal values, but the actual time-\n"
, stdout);
 fputs(
"              out will decrease in accuracy as the specified timeout increases\n"
"              in decimal precision.\n"
"\n"
"              If this option is used several times, the last one will be used.\n"
"\n"
"              See also --connect-timeout.\n"
"\n"
"       --metalink\n"


"              This  option  can  tell curl to parse and process a given URI as\n"
"              Metalink file (both version 3 and 4 (RFC  5854)  are  supported)\n"
"              and  make use of the mirrors listed within for failover if there\n"
, stdout);
 fputs(
"              are errors (such as the file or server not being available).  It\n"
"              will  also  verify  the hash of the file after the download com-\n"
"              pletes. The Metalink file itself is downloaded and processed  in\n"


"              memory and not stored in the local file system.\n"
"\n"
"              Example to use a remote Metalink file:\n"
"\n"
"               curl --metalink http://www.example.com/example.metalink\n"
"\n"
, stdout);
 fputs(
"              To use a Metalink file in the local file system, use FILE proto-\n"
"              col (file://):\n"
"\n"
"               curl --metalink file://example.metalink\n"
"\n"
"              Please note that if FILE protocol is disabled, there is  no  way\n"


"              to  use  a local Metalink file at the time of this writing. Also\n"
"              note that if --metalink and -i,  --include  are  used  together,\n"
"              --include  will be ignored. This is because including headers in\n"
, stdout);
 fputs(
"              the response will break Metalink parser and if the  headers  are\n"
"              included in the file described in Metalink file, hash check will\n"
"              fail.\n"
"\n"
"              --metalink requires that the underlying  libcurl  was  built  to\n"


"              support metalink. Added in 7.27.0.\n"
"\n"
"       --negotiate\n"
"              (HTTP) Enables Negotiate (SPNEGO) authentication.\n"
"\n"
"              This  option  requires a library built with GSS-API or SSPI sup-\n"
, stdout);
 fputs(
"              port. Use -V, --version  to  see  if  your  curl  supports  GSS-\n"
"              API/SSPI or SPNEGO.\n"
"\n"
"              When  using this option, you must also provide a fake -u, --user\n"
"              option to activate the authentication code properly.  Sending  a\n"


"              '-u  :'  is  enough  as  the user name and password from the -u,\n"
"              --user option aren't actually used.\n"
"\n"
"              If this option is used several times,  only  the  first  one  is\n"
, stdout);
 fputs(
"              used.\n"
"\n"
"              See also --basic and --ntlm and --anyauth and --proxy-negotiate.\n"
"\n"
"       --netrc-file <filename>\n"
"              This  option  is similar to -n, --netrc, except that you provide\n"
"              the path (absolute or relative) to  the  netrc  file  that  curl\n"


"              should use.  You can only specify one netrc file per invocation.\n"
"              If several --netrc-file options are provided, the last one  will\n"
"              be used.\n"
"\n"
, stdout);
 fputs(
"              It will abide by --netrc-optional if specified.\n"
"\n"
"              This option overrides -n, --netrc. Added in 7.21.5.\n"
"\n"
"       --netrc-optional\n"
"              Very  similar  to  -n, --netrc, but this option makes the .netrc\n"
"              usage optional and not mandatory as the -n, --netrc option does.\n"
"\n"


"              See also --netrc-file. This option overrides -n, --netrc.\n"
"\n"
"       -n, --netrc\n"
"              Makes curl scan the .netrc  (_netrc  on  Windows)  file  in  the\n"
, stdout);
 fputs(
"              user's home directory for login name and password. This is typi-\n"
"              cally used for FTP on Unix. If used with HTTP, curl will  enable\n"
"              user authentication. See netrc(5) ftp(1) for details on the file\n"
"              format. Curl will not complain if that  file  doesn't  have  the\n"


"              right permissions (it should not be either world- or group-read-\n"
"              able). The environment variable \"HOME\" is used to find the  home\n"
"              directory.\n"
"\n"
, stdout);
 fputs(
"              A  quick and very simple example of how to setup a .netrc to al-\n"
"              low curl to FTP to the machine host.domain.com  with  user  name\n"
"              'myself' and password 'secret' should look similar to:\n"
"\n"
"              machine host.domain.com login myself password secret\n"
"\n"
"       -:, --next\n"


"              Tells curl to use a separate operation for the following URL and\n"
"              associated options. This allows you  to  send  several  URL  re-\n"
, stdout);
 fputs(
"              quests,  each with their own specific options, for example, such\n"
"              as different user names or custom requests for each.\n"
"\n"
"              -:, --next will reset all local options  and  only  global  ones\n"
"              will  have  their values survive over to the operation following\n"


"              the -:, --next instruction. Global options  include  -v,  --ver-\n"
"              bose, --trace, --trace-ascii and --fail-early.\n"
"\n"
, stdout);
 fputs(
"              For  example,  you can do both a GET and a POST in a single com-\n"
"              mand line:\n"
"\n"
"               curl www1.example.com --next -d postthis www2.example.com\n"
"\n"
"              Added in 7.36.0.\n"
"\n"
"       --no-alpn\n"
"              (HTTPS) Disable the ALPN TLS extension. ALPN is enabled  by  de-\n"


"              fault  if  libcurl  was  built with an SSL library that supports\n"
"              ALPN. ALPN is used by a libcurl that supports HTTP/2 to  negoti-\n"
, stdout);
 fputs(
"              ate HTTP/2 support with the server during https sessions.\n"
"\n"
"              See  also  --no-npn and --http2. --no-alpn requires that the un-\n"
"              derlying libcurl was built to support TLS. Added in 7.36.0.\n"
"\n"
"       -N, --no-buffer\n"
"              Disables the buffering of the output stream. In normal work sit-\n"


"              uations,  curl  will  use a standard buffered output stream that\n"
"              will have the effect that it will output the data in chunks, not\n"
, stdout);
 fputs(
"              necessarily  exactly  when  the data arrives.  Using this option\n"
"              will disable that buffering.\n"
"\n"
"              Note that this is the negated option name  documented.  You  can\n"
"              thus use --buffer to enforce the buffering.\n"
"\n"
"       --no-keepalive\n"


"              Disables  the  use  of keepalive messages on the TCP connection.\n"
"              curl otherwise enables them by default.\n"
"\n"
"              Note that this is the negated option name  documented.  You  can\n"
, stdout);
 fputs(
"              thus use --keepalive to enforce keepalive.\n"
"\n"
"       --no-npn\n"
"              (HTTPS) Disable the NPN TLS extension. NPN is enabled by default\n"
"              if libcurl was built with an SSL library that supports NPN.  NPN\n"


"              is  used  by  a libcurl that supports HTTP/2 to negotiate HTTP/2\n"
"              support with the server during https sessions.\n"
"\n"
"              See also --no-alpn and --http2. --no-npn requires that  the  un-\n"
, stdout);
 fputs(
"              derlying libcurl was built to support TLS. Added in 7.36.0.\n"
"\n"
"       --no-progress-meter\n"
"              Option to switch off the progress meter output without muting or\n"
"              otherwise affecting warning and informational messages like  -s,\n"


"              --silent does.\n"
"\n"
"              Note  that  this  is the negated option name documented. You can\n"
"              thus use --progress-meter to enable the progress meter again.\n"
"\n"
, stdout);
 fputs(
"              See also -v, --verbose and -s, --silent. Added in 7.67.0.\n"
"\n"
"       --no-sessionid\n"
"              (TLS) Disable curl's use of SSL session-ID caching.  By  default\n"
"              all  transfers are done using the cache. Note that while nothing\n"


"              should ever get hurt by attempting  to  reuse  SSL  session-IDs,\n"
"              there seem to be broken SSL implementations in the wild that may\n"
"              require you to disable this in order for you to succeed.\n"
"\n"
, stdout);
 fputs(
"              Note that this is the negated option name  documented.  You  can\n"
"              thus use --sessionid to enforce session-ID caching.\n"
"\n"
"              Added in 7.16.0.\n"
"\n"
"       --noproxy <no-proxy-list>\n"


"              Comma-separated  list  of hosts which do not use a proxy, if one\n"
"              is specified.  The only wildcard is a single * character,  which\n"
"              matches all hosts, and effectively disables the proxy. Each name\n"
, stdout);
 fputs(
"              in this list is matched as either a domain  which  contains  the\n"
"              hostname,  or  the hostname itself. For example, local.com would\n"
"              match  local.com,  local.com:80,  and  www.local.com,  but   not\n"


"              www.notlocal.com.\n"
"\n"
"              Since  7.53.0,  This  option overrides the environment variables\n"
"              that disable the proxy. If there's an environment variable  dis-\n"
, stdout);
 fputs(
"              abling a proxy, you can set noproxy list to \"\" to override it.\n"
"\n"
"              Added in 7.19.4.\n"
"\n"
"       --ntlm-wb\n"
"              (HTTP) Enables NTLM much in the style --ntlm does, but hand over\n"
"              the authentication to the separate binary  ntlmauth  application\n"


"              that is executed when needed.\n"
"\n"
"              See also --ntlm and --proxy-ntlm.\n"
"\n"
"       --ntlm (HTTP)  Enables  NTLM  authentication.  The  NTLM authentication\n"
, stdout);
 fputs(
"              method was designed by Microsoft and is used by IIS web servers.\n"
"              It  is a proprietary protocol, reverse-engineered by clever peo-\n"
"              ple and implemented in curl based on their efforts. This kind of\n"
"              behavior  should  not be endorsed, you should encourage everyone\n"


"              who uses NTLM to switch to a public and  documented  authentica-\n"
"              tion method instead, such as Digest.\n"
"\n"
, stdout);
 fputs(
"              If  you  want to enable NTLM for your proxy authentication, then\n"
"              use --proxy-ntlm.\n"
"\n"
"              If this option is used several times,  only  the  first  one  is\n"
"              used.\n"
"\n"
"              See  also  --proxy-ntlm.  --ntlm  requires  that  the underlying\n"


"              libcurl was built to support TLS. This option overrides  --basic\n"
"              and --negotiate and --digest and --anyauth.\n"
"\n"
"       --oauth2-bearer <token>\n"
, stdout);
 fputs(
"              (IMAP  POP3  SMTP  HTTP)  Specify the Bearer Token for OAUTH 2.0\n"
"              server authentication. The Bearer Token is used  in  conjunction\n"
"              with  the  user name which can be specified as part of the --url\n"
"              or -u, --user options.\n"
"\n"


"              The Bearer Token and user name are formatted  according  to  RFC\n"
"              6750.\n"
"\n"
"              If this option is used several times, the last one will be used.\n"
"\n"
"       -o, --output <file>\n"
, stdout);
 fputs(
"              Write output to <file> instead of stdout. If you are using {} or\n"
"              [] to fetch multiple documents, you can use '#'  followed  by  a\n"
"              number  in  the <file> specifier. That variable will be replaced\n"


"              with the current string for the URL being fetched. Like in:\n"
"\n"
"               curl http://{one,two}.example.com -o \"file_#1.txt\"\n"
"\n"
"              or use several variables like:\n"
"\n"
"               curl http://{site,host}.host[1-5].com -o \"#1_#2\"\n"
"\n"
, stdout);
 fputs(
"              You may use this option as many times as the number of URLs  you\n"
"              have.  For  example, if you specify two URLs on the same command\n"
"              line, you can use it like this:\n"
"\n"


"                curl -o aa example.com -o bb example.net\n"
"\n"
"              and the order of the -o options and  the  URLs  doesn't  matter,\n"
"              just  that  the  first -o is for the first URL and so on, so the\n"
"              above command line can also be written as\n"
"\n"
, stdout);
 fputs(
"                curl example.com example.net -o aa -o bb\n"
"\n"
"              See also the --create-dirs option to create the  local  directo-\n"
"              ries  dynamically.  Specifying the output as '-' (a single dash)\n"


"              will force the output to be done to stdout.\n"
"\n"
"              See also -O, --remote-name and --remote-name-all and  -J,  --re-\n"
"              mote-header-name.\n"
"\n"
"       --parallel-immediate\n"
"              When  doing  parallel  transfers, this option will instruct curl\n"


, stdout);
 fputs(
"              that it should rather prefer opening up more connections in par-\n"
"              allel at once rather than waiting to see if new transfers can be\n"
"              added as multiplexed streams on another connection.\n"
"\n"
"              See also -Z, --parallel and --parallel-max. Added in 7.68.0.\n"
"\n"
"       --parallel-max\n"
"              When asked to do parallel transfers, using -Z, --parallel,  this\n"
"              option controls the maximum amount of transfers to do simultane-\n"
, stdout);
 fputs(
"              ously.\n"
"\n"
"              The default is 50.\n"
"\n"
"              See also -Z, --parallel. Added in 7.66.0.\n"
"\n"
"       -Z, --parallel\n"


"              Makes curl perform its transfers in parallel as compared to  the\n"
"              regular serial manner.\n"
"\n"
"              Added in 7.66.0.\n"
"\n"
"       --pass <phrase>\n"
"              (SSH TLS) Passphrase for the private key\n"
"\n"
"              If this option is used several times, the last one will be used.\n"
"\n"
"       --path-as-is\n"


, stdout);
 fputs(
"              Tell  curl  to  not handle sequences of /../ or /./ in the given\n"
"              URL path. Normally curl will squash or merge them  according  to\n"
"              standards but with this option set you tell it not to do that.\n"
"\n"
"              Added in 7.42.0.\n"
"\n"
"       --pinnedpubkey <hashes>\n"
"              (TLS)  Tells  curl  to  use  the  specified  public key file (or\n"
"              hashes) to verify the peer. This can be a path to a  file  which\n"
, stdout);
 fputs(
"              contains a single public key in PEM or DER format, or any number\n"
"              of base64 encoded sha256 hashes preceded by 'sha256//' and sepa-\n"
"              rated by ';'\n"
"\n"


"              When  negotiating  a  TLS  or SSL connection, the server sends a\n"
"              certificate indicating its identity. A public key  is  extracted\n"
"              from  this certificate and if it does not exactly match the pub-\n"
, stdout);
 fputs(
"              lic key provided to this option, curl will abort the  connection\n"
"              before sending or receiving any data.\n"
"\n"
"              PEM/DER support:\n"
"                7.39.0: OpenSSL, GnuTLS and GSKit\n"
"                7.43.0: NSS and wolfSSL\n"


"                7.47.0: mbedtls sha256 support:\n"
"                7.44.0: OpenSSL, GnuTLS, NSS and wolfSSL\n"
"                7.47.0: mbedtls Other SSL backends not supported.\n"
"\n"
, stdout);
 fputs(
"              If this option is used several times, the last one will be used.\n"
"\n"
"       --post301\n"
"              (HTTP) Tells curl to respect RFC 7231/6.4.2 and not convert POST\n"
"              requests into GET requests when following a 301 redirection. The\n"


"              non-RFC  behaviour  is  ubiquitous in web browsers, so curl does\n"
"              the conversion by default to maintain  consistency.  However,  a\n"
"              server  may  require  a POST to remain a POST after such a redi-\n"
, stdout);
 fputs(
"              rection. This option is meaningful only when using  -L,  --loca-\n"
"              tion.\n"
"\n"
"              See  also  --post302  and --post303 and -L, --location. Added in\n"
"              7.17.1.\n"
"\n"
"       --post302\n"


"              (HTTP) Tells curl to respect RFC 7231/6.4.3 and not convert POST\n"
"              requests into GET requests when following a 302 redirection. The\n"
"              non-RFC behaviour is ubiquitous in web browsers,  so  curl  does\n"
, stdout);
 fputs(
"              the  conversion  by  default to maintain consistency. However, a\n"
"              server may require a POST to remain a POST after  such  a  redi-\n"
"              rection.  This  option is meaningful only when using -L, --loca-\n"
"              tion.\n"
"\n"


"              See also --post301 and --post303 and -L,  --location.  Added  in\n"
"              7.19.1.\n"
"\n"
"       --post303\n"
"              (HTTP) Tells curl to violate RFC 7231/6.4.4 and not convert POST\n"
, stdout);
 fputs(
"              requests into GET requests when following  303  redirections.  A\n"
"              server may require a POST to remain a POST after a 303 redirect-\n"
"              ion. This option is meaningful only when using -L, --location.\n"
"\n"


"              See also --post302 and --post301 and -L,  --location.  Added  in\n"
"              7.26.0.\n"
"\n"
"       --preproxy [protocol://]host[:port]\n"
"              Use  the  specified  SOCKS proxy before connecting to an HTTP or\n"
, stdout);
 fputs(
"              HTTPS -x, --proxy. In such a case curl  first  connects  to  the\n"
"              SOCKS  proxy  and  then  connects (through SOCKS) to the HTTP or\n"
"              HTTPS proxy. Hence pre proxy.\n"
"\n"


"              The pre proxy string should be specified with a protocol:// pre-\n"
"              fix  to  specify  alternative  proxy  protocols.  Use socks4://,\n"
"              socks4a://, socks5:// or  socks5h://  to  request  the  specific\n"
, stdout);
 fputs(
"              SOCKS  version  to be used. No protocol specified will make curl\n"
"              default to SOCKS4.\n"
"\n"
"              If the port number is not specified in the proxy string,  it  is\n"
"              assumed to be 1080.\n"
"\n"


"              User and password that might be provided in the proxy string are\n"
"              URL decoded by curl. This allows you to pass in special  charac-\n"
"              ters such as @ by using %40 or pass in a colon with %3a.\n"
"\n"
, stdout);
 fputs(
"              If this option is used several times, the last one will be used.\n"
"\n"
"              Added in 7.52.0.\n"
"\n"
"       -#, --progress-bar\n"
"              Make curl display transfer progress as a simple progress bar in-\n"


"              stead of the standard, more informational, meter.\n"
"\n"
"              This progress bar draws a single line of '#'  characters  across\n"
"              the screen and shows a percentage if the transfer size is known.\n"
, stdout);
 fputs(
"              For transfers without a known size, there  will  be  space  ship\n"
"              (-=o=-)  that  moves back and forth but only while data is being\n"
"              transferred, with a set of flying hash sign symbols on top.\n"
"\n"
"       --proto-default <protocol>\n"


"              Tells curl to use protocol for any URL missing a scheme name.\n"
"\n"
"              Example:\n"
"\n"
"               curl --proto-default https ftp.mozilla.org\n"
"\n"
, stdout);
 fputs(
"              An unknown or unsupported  protocol  causes  error  CURLE_UNSUP-\n"
"              PORTED_PROTOCOL (1).\n"
"\n"
"              This option does not change the default proxy protocol (http).\n"
"\n"
"              Without  this  option curl would make a guess based on the host,\n"
"              see --url for details.\n"
"\n"


"              Added in 7.45.0.\n"
"\n"
"       --proto-redir <protocols>\n"
"              Tells curl to limit what protocols it may use on redirect.  Pro-\n"
, stdout);
 fputs(
"              tocols  denied by --proto are not overridden by this option. See\n"
"              --proto for how protocols are represented.\n"
"\n"
"              Example, allow only HTTP and HTTPS on redirect:\n"
"\n"
"               curl --proto-redir -all,http,https http://example.com\n"
"\n"
"              By default curl will allow HTTP, HTTPS, FTP and FTPS on redirect\n"
"              (7.65.2).  Older versions of curl allowed all protocols on redi-\n"
, stdout);
 fputs(

"              rect except several disabled for security reasons: Since  7.19.4\n"
"              FILE  and  SCP  are  disabled, and since 7.40.0 SMB and SMBS are\n"
"              also disabled. Specifying all or +all enables all  protocols  on\n"
"              redirect, including those disabled for security.\n"
"\n"
"              Added in 7.20.2.\n"
"\n"
"       --proto <protocols>\n"
"              Tells  curl  to limit what protocols it may use in the transfer.\n"
, stdout);
 fputs(

"              Protocols are evaluated left to right, are comma separated,  and\n"
"              are  each  a protocol name or 'all', optionally prefixed by zero\n"
"              or more modifiers. Available modifiers are:\n"
"\n"
"              +  Permit this protocol in addition to protocols already permit-\n"
"                 ted (this is the default if no modifier is used).\n"
"\n"


"              -  Deny  this  protocol,  removing it from the list of protocols\n"
"                 already permitted.\n"
"\n"
, stdout);
 fputs(
"              =  Permit only this protocol (ignoring the list already  permit-\n"
"                 ted),  though subject to later modification by subsequent en-\n"
"                 tries in the comma separated list.\n"
"\n"
"              For example:\n"
"\n"
"              --proto -ftps  uses the default protocols, but disables ftps\n"
"\n"
"              --proto -all,https,+http\n"


"                             only enables http and https\n"
"\n"
"              --proto =http,https\n"
, stdout);
 fputs(
"                             also only enables http and https\n"
"\n"
"       Unknown protocols produce a warning. This allows scripts to safely rely\n"
"       on being able to disable potentially dangerous protocols, without rely-\n"
"       ing upon support for that protocol being built into curl  to  avoid  an\n"
"       error.\n"
"\n"
"       This option can be used multiple times, in which case the effect is the\n"


"       same as concatenating the protocols into one instance of the option.\n"
"\n"
, stdout);
 fputs(
"       See also --proto-redir and --proto-default. Added in 7.20.2.\n"
"\n"
"       --proxy-anyauth\n"
"              Tells curl to pick a suitable authentication method when  commu-\n"
"              nicating  with  the  given HTTP proxy. This might cause an extra\n"
"              request/response round-trip.\n"
"\n"
"              See also -x, --proxy and --proxy-basic and --proxy-digest. Added\n"
"              in 7.13.2.\n"
"\n"
"       --proxy-basic\n"
"              Tells  curl  to use HTTP Basic authentication when communicating\n"
, stdout);
 fputs(

"              with the given proxy. Use --basic for enabling HTTP Basic with a\n"
"              remote  host.  Basic  is  the default authentication method curl\n"
"              uses with proxies.\n"
"\n"
"              See also -x, --proxy and --proxy-anyauth and --proxy-digest.\n"
"\n"
"       --proxy-cacert <file>\n"
"              Same as --cacert but used in HTTPS proxy context.\n"
"\n"


"              See also  --proxy-capath  and  --cacert  and  --capath  and  -x,\n"
"              --proxy. Added in 7.52.0.\n"
"\n"
, stdout);
 fputs(
"       --proxy-capath <dir>\n"
"              Same as --capath but used in HTTPS proxy context.\n"
"\n"
"              See  also  --proxy-cacert and -x, --proxy and --capath. Added in\n"
"              7.52.0.\n"
"\n"
"       --proxy-cert-type <type>\n"
"              Same as --cert-type but used in HTTPS proxy context.\n"
"\n"
"              Added in 7.52.0.\n"
"\n"
"       --proxy-cert <cert[:passwd]>\n"


"              Same as -E, --cert but used in HTTPS proxy context.\n"
"\n"
"              Added in 7.52.0.\n"
"\n"
"       --proxy-ciphers <list>\n"
, stdout);
 fputs(
"              Same as --ciphers but used in HTTPS proxy context.\n"
"\n"
"              Added in 7.52.0.\n"
"\n"
"       --proxy-crlfile <file>\n"
"              Same as --crlfile but used in HTTPS proxy context.\n"
"\n"
"              Added in 7.52.0.\n"
"\n"
"       --proxy-digest\n"
"              Tells curl to use HTTP Digest authentication when  communicating\n"


"              with the given proxy. Use --digest for enabling HTTP Digest with\n"
"              a remote host.\n"
"\n"
, stdout);
 fputs(
"              See also -x, --proxy and --proxy-anyauth and --proxy-basic.\n"
"\n"
"       --proxy-header <header/@file>\n"
"              (HTTP) Extra header to include in the request when sending  HTTP\n"
"              to a proxy. You may specify any number of extra headers. This is\n"
"              the equivalent option to -H, --header but is for proxy  communi-\n"
"              cation  only  like  in CONNECT requests when you want a separate\n"
, stdout);
 fputs(

"              header sent to the proxy to what is sent to  the  actual  remote\n"
"              host.\n"
"\n"
"              curl  will  make  sure  that each header you add/replace is sent\n"
"              with the proper end-of-line marker, you should thus not add that\n"
"              as a part of the header content: do not add newlines or carriage\n"
"              returns, they will only mess things up for you.\n"
"\n"
"              Headers specified with this option will not be included  in  re-\n"
, stdout);
 fputs(

"              quests that curl knows will not be sent to a proxy.\n"
"\n"
"              Starting  in  7.55.0, this option can take an argument in @file-\n"
"              name style, which then adds a header for each line in the  input\n"
"              file. Using @- will make curl read the header file from stdin.\n"
"\n"
"              This  option  can  be  used multiple times to add/replace/remove\n"
"              multiple headers.\n"
"\n"


"              Added in 7.37.0.\n"
"       --proxy-insecure\n"
, stdout);
 fputs(
"              Same as -k, --insecure but used in HTTPS proxy context.\n"
"\n"
"              Added in 7.52.0.\n"
"\n"
"       --proxy-key-type <type>\n"
"              Same as --key-type but used in HTTPS proxy context.\n"
"\n"
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481

4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506

4507
4508
4509

4510
4511
4512
4513
4514
4515

4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541

4542
4543
4544

4545
4546


4547
4548
4549
4550
4551
4552


4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570

4571

4572
4573

4574
4575

4576
4577
4578
4579
4580
4581
4582
4583

4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601

4602
4603
4604
4605
4606
4607

4608
4609
4610

4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629


4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640


4641

4642
4643
4644
4645
4646
4647
4648
4649
4650

4651
4652
4653
4654
4655
4656
4657
4658
4659
4660

4661



4662
4663
4664

4665
4666
4667
4668
4669

4670
4671
4672
4673
4674
4675
4676
4677

4678
4679
4680
4681
4682
4683
4684
4685

4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697


4698

4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712

4713
4714
4715
4716
4717
4718
4719
4720


4721
4722
4723
4724
4725
4726
4727
4728

4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757


4758
4759
4760
4761

4762
4763
4764
4765
4766
4767

4768
4769
4770
4771

4772
4773
4774
4775
4776
4777

4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792

4793
4794
4795

4796
4797
4798
4799

4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820

4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851

4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863

4864
4865
4866
4867
4868
4869

4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881


4882

4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893

4894

4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926

4927
4928
4929
4930
4931
4932
4933

4934
4935
4936
4937
4938
4939
4940
4941
4942
4943

4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978

4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006

5007
5008
5009
5010
5011
5012
5013
5014

5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037




5038
5039
5040
5041
5042
5043
5044

5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087

5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098

5099


5100
5101
5102
5103

5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122


5123
5124
5125
5126
5127
5128
5129
5130
5131

5132
5133
5134


5135
5136

5137
5138
5139
5140
5141
5142
5143
5144

5145
5146
5147
5148
5149
5150

5151
5152
5153
5154
5155
5156
5157
5158

5159
5160
5161
5162
5163
5164
5165

5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191

5192
5193

5194

5195
5196
5197
5198

5199
5200

5201
5202
5203
5204

5205

5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217

5218
5219
5220
5221
5222
5223
5224
5225
5226
5227



5228
5229
5230
5231

5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262

5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273

5274
5275
5276
5277
5278
5279
5280
5281
5282
5283

5284
5285
5286
5287
5288
5289
5290
5291
5292
5293


5294
5295
5296
5297
5298
5299
5300
5301
5302

5303
5304


5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318

5319
5320

5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341

5342
5343
5344

5345
5346
5347
5348
5349
5350
5351

5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364

5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398

5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417

5418
5419
5420
5421
5422
5423


5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458

5459
5460
5461
5462
5463
5464
5465
5466

5467

5468
5469
5470
5471

5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495

5496

5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518

5519
5520

5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538


5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569

5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597

5598

5599
5600
5601
5602
5603
5604
5605
5606
5607
5608


5609
5610
5611
5612
5613
5614
5615

5616


5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630


5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657

5658
5659
5660
5661
5662
5663

5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682

5683
5684
5685
5686
5687
5688
5689
5690
5691
5692

5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717

5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729

5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742

5743
5744
5745
5746
5747

5748
5749
5750
5751
5752
5753
5754
5755
5756

5757
5758
5759
5760
5761
5762
5763
5764
5765


5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792

5793
5794
5795
5796

5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809



5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820

5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837

5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853

5854
5855
5856
5857
5858
5859
5860
5861
5862

5863
5864
5865
5866
5867
5868
5869
5870
5871
5872

5873
5874
5875
5876
5877
5878
5879
5880
5881

5882
5883
5884
5885
5886
5887
5888

5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903

5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921

5922
5923

5924
5925
5926
5927
5928
5929
5930

5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952


5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980

5981
5982

5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000

6001
6002
6003
6004

6005
6006
6007
6008


6009
6010
6011



6012
6013
6014
6015

6016
6017
6018
6019

6020
6021
6022

6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045

6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067

6068
6069
6070
6071
6072
6073
6074
6075
6076

6077
6078
6079
6080
6081
6082
6083
6084
6085

6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100

6101
6102
6103

6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118


6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134


6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147

6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161


6162


6163


6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193

6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231

6232
6233


6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250

6251
6252
6253

6254
6255
6256
6257

6258
6259
6260
6261



6262
6263





6264
6265
6266

6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297

6298
6299
6300
6301
6302
6303
6304
6305
6306

6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326


6327
6328
6329
6330
6331
6332

6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359

6360


6361





6362
6363

6364
6365
6366

6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383

6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402

6403
6404
6405
6406
6407


6408


6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423

6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434

6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446

6447
6448
6449
6450
6451
6452
6453
6454

6455
6456

6457
6458
6459
6460
6461
6462
6463
6464
6465

6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476

6477
6478
6479
6480
6481
6482
6483
6484
6485
6486

6487
6488

6489
6490
6491
6492
6493
6494

6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529

6530
6531

6532
6533

6534
6535
6536
6537
6538
6539
6540
6541
6542

6543
6544
6545
6546
6547
6548
6549
6550

6551
6552
6553
6554
6555
6556
6557
6558
6559
6560

6561
6562
6563
6564

6565
6566
6567
6568
6569
6570
6571
6572
6573
6574

6575
6576
6577
6578

6579
6580

6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593

6594
6595
6596
6597
6598
6599
6600

6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618

6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634

6635

6636
6637
6638
6639

6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669

6670
6671
6672

6673
6674
6675
6676
6677

6678

6679
6680
6681

6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736

6737

6738

6739



6740

6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781

6782


6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826



6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854


6855
6856
6857

6858

6859
6860
6861
6862
6863
6864
6865
6866

6867
6868
6869
6870
6871
6872
6873
6874
6875
6876

6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894

6895
6896
6897



6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911

6912
6913
6914
6915
6916
6917
6918
6919
6920
6921

6922
6923
6924
6925
6926


6927
6928
6929
6930
6931

6932
6933

6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946

6947
6948
6949
6950
6951


6952

6953

6954
6955
6956
6957
6958
6959
6960
6961
6962
6963

6964
6965
6966
6967
6968
6969

6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990

6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021


7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036

7037
7038
7039
7040
7041
7042
7043
7044
7045



7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066


7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112

7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129

7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145

7146
7147
7148
7149
7150
7151

7152
7153
7154
7155
7156
7157

7158

7159
7160
7161
7162
7163
7164
7165
7166
7167

7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188

7189
7190
7191
7192
7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
7229

7230
7231
7232
7233
7234
7235
7236
7237
7238


7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250

7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262

7263
7264
7265
7266
7267
7268
7269
7270
7271
7272
7273
7274
7275

7276
7277
7278
7279
7280
7281
7282
7283
7284

7285
7286
7287
7288
7289

7290
7291

7292
7293
7294
7295
7296
7297
7298
7299
7300
7301
7302
7303
7304
7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316

7317

7318

7319
7320
7321
7322
7323
7324
7325
7326

7327
7328
7329

7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346


7347
7348
7349
7350
7351
7352
7353
7354
7355
7356

7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369

7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392


7393
7394
7395
7396
7397
7398
7399
7400
7401




7402
7403
7404

7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420
7421
7422
7423
7424
7425
7426
7427
7428


7429
7430
7431






7432
7433
7434



7435
7436

7437
7438

7439
7440

7441
7442
7443
7444
7445
7446

7447
7448
7449
7450

7451
7452
7453
7454
7455
7456
7457
7458
7459
7460
7461

7462
7463
7464

7465



7466
7467



7468
7469
7470
7471
7472


7473

7474
7475
7476
7477
7478
7479

7480
7481
7482
7483
7484



7485
7486
7487
7488
7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
7512
7513
7514
7515
7516

7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532

7533





7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549

7550
7551
7552
7553
7554
7555


7556
7557
7558
7559
7560
7561

7562
7563
7564
7565
7566
7567
7568
7569
7570

7571
7572
7573
7574
7575
7576
7577

7578
7579
7580
7581
7582
7583
7584
7585


7586

7587
7588
7589

7590
7591

7592
7593
7594
7595
7596
7597
7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615
7616
7617
7618
7619

7620
7621



7622

7623
7624
7625
7626
7627

7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638

7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652
7653
7654
7655
7656

7657
7658
7659
7660




7661

7662
7663
7664

7665
7666


7667
7668
7669
7670
7671
7672
7673
7674
7675

7676
7677
7678
7679
7680



7681
7682
7683

7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695

7696
7697
7698
7699
7700
7701
7702
7703

7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732

7733
7734
7735
7736
7737
7738
7739
7740
7741
7742

7743
7744
7745
7746
7747
7748
7749
7750
7751
7752
7753
7754
7755
7756
7757
7758
7759

7760




7761
7762
7763

7764
7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
7776
7777

7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793


7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810

7811
7812
7813
7814
7815
7816
7817
7818

7819

7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831



7832

7833
7834

7835
7836
7837
7838
7839
7840
7841
7842



7843
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862

7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889

7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901
7902
7903
7904
7905




7906

7907
7908
7909
7910
7911
7912
7913
7914
7915
7916
7917
7918
7919
7920
7921
7922
7923
7924





7925
7926


7927
7928
7929
7930
7931
7932
7933
7934
7935
7936
7937
7938
7939
7940
7941
7942
7943

7944
7945
7946
7947
7948
7949
7950
7951
7952

7953
7954
7955
7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967
7968
7969
7970
7971
7972
7973
7974


7975


7976
7977


7978



7979
7980
7981


7982
7983

7984
7985
7986
7987
7988
7989
7990
7991
7992



7993
7994
7995
7996
7997
7998
7999
8000
8001
8002
8003
8004

8005






8006
8007





8008
8009

8010
8011

8012
8013
8014
8015
8016
8017
8018
8019
8020
8021
8022
8023
8024
8025


8026
8027

8028

8029
8030
8031
8032
8033
8034

8035
8036
8037
8038
8039
8040
8041
8042
8043
8044
8045
8046
8047
8048
8049
8050
8051
8052

8053
8054
8055
8056
8057
8058
8059
8060
8061
8062
8063
8064
8065
8066






8067
8068
8069
8070
8071
8072
8073
8074

8075

8076

8077
8078
8079


8080
8081
8082
8083
8084
8085

8086
8087
8088
8089
8090
8091
8092
8093
8094
8095
8096
8097
8098
8099
8100
8101
8102
8103
8104
8105
8106
8107
8108
8109
8110
8111


8112

8113
8114
8115
8116
8117
8118
8119
8120
8121
8122
8123
8124
8125






8126
8127
8128
8129
8130
8131

8132
8133
8134

8135
8136
8137
8138
8139
8140
8141
8142
8143
8144
8145
8146


8147
8148
8149
8150


8151



8152
8153
8154
8155
8156
8157
8158
8159
8160
8161
8162
8163
8164
8165
8166
8167
8168

8169
8170
8171
8172
8173
8174
8175
8176
8177
8178
8179
8180
8181
8182
8183
8184
8185
8186
8187
8188
8189
8190
8191
8192
8193

8194
8195
8196
8197
8198
8199
8200
8201
8202
8203
8204
8205
8206
8207
8208
8209
8210
8211
8212
8213
8214
8215
8216
8217


8218
8219
8220
8221
8222
8223
8224

8225
8226
8227
8228
8229
8230
8231
8232
8233
8234
8235

8236
8237
8238
8239
8240
8241
8242
8243
8244
8245
8246
8247
8248
8249
8250
8251
8252
8253
8254

8255
8256
8257
8258
8259
8260
8261
8262
8263
8264

8265


8266
8267
8268
8269
8270
8271
8272
8273
8274
8275
8276




8277
8278

8279
8280
8281
8282
8283
8284
8285
8286
8287
8288
8289
8290
8291
8292
8293
8294
8295
8296
8297
8298
8299
8300
8301
8302
8303
8304
8305
8306
8307
8308
8309
8310
8311
8312
8313


8314
8315
8316
8317
8318

8319
8320
8321
8322
8323
8324
8325
8326
8327
8328
8329
8330
8331
8332
8333

8334
8335
8336
8337
8338
8339
8340
8341



8342
8343
8344
8345
8346
8347
8348
8349
8350
8351
8352
8353
8354
8355
8356
8357
8358
8359
8360
8361
8362
8363
8364
8365
8366
8367
8368
8369
8370
8371
8372
8373
8374
8375
8376
8377
8378
8379
8380
8381



8382
8383
8384
8385
8386
8387
8388
8389
8390


8391
8392
8393

8394
8395
8396
8397
8398
8399
8400
8401
8402
8403
8404
8405
8406
8407
8408
8409
8410
8411
8412
8413
8414
8415
8416
8417
8418
8419
8420



8421
8422
8423

8424
8425
8426
8427
8428
8429
8430


8431

8432

8433
8434
8435
8436
8437
8438
8439
8440
8441
8442
8443
8444
8445
8446
8447
8448
8449
8450
8451
8452
8453
8454
8455
8456
8457
8458
8459
8460
8461
8462
8463
8464
8465
8466
8467



8468
8469
8470
8471
8472
8473
8474
8475
8476
8477
8478
8479
8480
8481
8482
8483
8484
8485
8486
8487
8488

8489
8490
8491
8492
8493
8494
8495
8496
8497
8498
8499
8500
8501
8502
8503
8504
8505
8506
8507
 */
#ifdef USE_MANUAL
#include "tool_hugehelp.h"
#include <zlib.h>
#include "memdebug.h" /* keep this as LAST include */
static const unsigned char hugehelpgz[] = {
  /* This mumbo-jumbo is the huge help text compressed with gzip.
     Thanks to this operation, the size of this data shrank from 172264
     to 48278 bytes. You can disable the use of compressed help
     texts by NOT passing -c to the mkhelp.pl tool. */
  0x1f, 0x8b, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0xed, 0xbd,
  0x6b, 0x77, 0xdb, 0x46, 0x96, 0x2e, 0xfc, 0x3d, 0xbf, 0x02, 0xcd, 0x5e,
  0x7d, 0x24, 0x4d, 0x93, 0xd4, 0xdd, 0x8e, 0x15, 0x39, 0x13, 0x45, 0x96,
  0x63, 0x4d, 0x64, 0x49, 0x23, 0xca, 0x49, 0xfa, 0x74, 0xb2, 0xbc, 0x40,
  0x12, 0xa4, 0xd0, 0x22, 0x01, 0x36, 0x00, 0xea, 0x92, 0x9e, 0x3e, 0xbf,

  0xfd, 0xdd, 0xd7, 0xaa, 0x02, 0xaa, 0x40, 0x29, 0xe9, 0x38, 0x73, 0x2e,
  0x6f, 0xcf, 0x9a, 0xd8, 0x96, 0x80, 0x42, 0x5d, 0x76, 0xed, 0xfb, 0x7e,
  0x76, 0x14, 0x3d, 0xf5, 0xbf, 0x8f, 0xf4, 0xff, 0x1f, 0xe1, 0x7f, 0xf0,
  0xe7, 0x67, 0x51, 0x74, 0x59, 0xe4, 0x7f, 0x4b, 0x46, 0x55, 0xf8, 0xd9,
  0x8f, 0x1f, 0xff, 0x2b, 0xe2, 0xff, 0x83, 0x77, 0x7e, 0x84, 0x3f, 0x3f,
  0x5b, 0x39, 0xf6, 0x66, 0x64, 0x5f, 0xf8, 0xaf, 0x8f, 0x1b, 0xd1, 0x53,
  0x2f, 0xfc, 0x57, 0xb4, 0x4e, 0x2f, 0x7c, 0x94, 0x2f, 0x1c, 0xe2, 0xdf,
  0x3f, 0x7e, 0x5c, 0xfd, 0x91, 0x1f, 0x71, 0x56, 0xf8, 0x9f, 0x4d, 0x7c,
  0xef, 0xc7, 0x8f, 0xf8, 0x57, 0xf8, 0xc9, 0x67, 0x9f, 0x9d, 0x1f, 0xbd,
  0x3f, 0xd1, 0x57, 0x47, 0xcb, 0x62, 0x16, 0xf5, 0xa2, 0xaa, 0x88, 0xb3,
  0x72, 0x92, 0x14, 0x51, 0x1c, 0x7d, 0xb8, 0x3a, 0xfb, 0xec, 0xb3, 0xc1,
  0x5f, 0xce, 0x2f, 0x2e, 0x07, 0xa7, 0x83, 0xda, 0x63, 0x7f, 0xcd, 0x17,
  0x55, 0x9a, 0x67, 0x25, 0x4c, 0x1f, 0x1e, 0x2a, 0x7f, 0xfa, 0xec, 0xb3,
  0x37, 0x27, 0x83, 0xe3, 0xab, 0xd3, 0xcb, 0xeb, 0xd3, 0x8b, 0xf3, 0xda,
  0x93, 0x51, 0x5a, 0x46, 0x30, 0x54, 0x95, 0xe7, 0x33, 0xf8, 0x8f, 0x1d,
  0x7d, 0x1c, 0x57, 0x71, 0x34, 0x29, 0xf2, 0x79, 0x94, 0x17, 0xf8, 0x8b,
  0x38, 0x2a, 0x93, 0xe2, 0x2e, 0x29, 0xba, 0xd1, 0xb2, 0x4c, 0xb3, 0x69,
  0x94, 0x67, 0x49, 0x94, 0x4f, 0xa2, 0xea, 0x26, 0xd1, 0xe1, 0xca, 0xe5,
  0x62, 0x91, 0x17, 0x55, 0x32, 0x8e, 0x16, 0x45, 0x5e, 0xe5, 0xa3, 0x7c,
  0x56, 0x46, 0xeb, 0x6f, 0x4e, 0x8f, 0xaf, 0xbb, 0xd1, 0xdb, 0xd3, 0xb3,
  0x13, 0xf8, 0xef, 0xf5, 0x25, 0xfd, 0x67, 0xd0, 0x8d, 0xbe, 0xb9, 0xb8,
  0x7c, 0x77, 0x72, 0xd5, 0x8d, 0xde, 0x5d, 0xe3, 0xcf, 0xf0, 0xbf, 0xf0,
  0xc3, 0xe8, 0xf4, 0xfd, 0xd1, 0x65, 0x57, 0x87, 0xc3, 0x7f, 0xe0, 0x0f,
  0xcf, 0xde, 0xc0, 0x0f, 0xf9, 0x0f, 0xfc, 0xe7, 0xe5, 0xc5, 0xe5, 0xae,
  0xfc, 0x81, 0xff, 0xbc, 0xba, 0x7e, 0x0f, 0xbf, 0xbd, 0xba, 0x1e, 0xc0,

  0x7f, 0x07, 0xc7, 0xf8, 0x1f, 0xfa, 0xca, 0xe0, 0xfd, 0xd7, 0xf4, 0x9f,
  0x81, 0x19, 0x6e, 0xf0, 0x9e, 0x7f, 0x4e, 0x5f, 0xba, 0x3e, 0x39, 0x3b,
  0x3f, 0xb9, 0x8e, 0xe2, 0x6c, 0x1c, 0x5d, 0xc3, 0xf3, 0x1b, 0xfd, 0xe8,

  0xfa, 0x26, 0x89, 0x46, 0xf9, 0x7c, 0x8e, 0x3f, 0x82, 0x1d, 0x19, 0x27,
  0x65, 0x3a, 0xcd, 0x60, 0x29, 0xb0, 0xf2, 0xfb, 0xbc, 0xb8, 0x8d, 0xa2,
  0xfb, 0xb4, 0xba, 0xc9, 0x97, 0x95, 0x0e, 0xb7, 0x84, 0xdd, 0x88, 0xd2,
  0xac, 0x4a, 0x8a, 0x78, 0x84, 0x3b, 0xdd, 0xff, 0xac, 0xb6, 0xab, 0xf9,
  0x04, 0xf6, 0xb0, 0x84, 0x4d, 0x1b, 0x2e, 0xcb, 0x59, 0x1e, 0x8f, 0x71,
  0xab, 0xe0, 0x95, 0xc9, 0x12, 0x36, 0xb9, 0x48, 0x47, 0xb7, 0x65, 0x34,

  0x4b, 0x6f, 0x13, 0xdc, 0xa8, 0x87, 0x47, 0xdd, 0xb8, 0x2e, 0x0f, 0x1a,
  0x2f, 0x61, 0x4f, 0xb3, 0x9e, 0x0e, 0x57, 0xa5, 0xa3, 0x18, 0x3f, 0x40,
  0x3b, 0x17, 0x2d, 0x17, 0x38, 0x1a, 0xef, 0x58, 0xb4, 0xc8, 0x4b, 0x78,
  0x69, 0x30, 0x38, 0x83, 0x99, 0x67, 0x59, 0x42, 0xf3, 0x28, 0xbb, 0xf0,
  0x8f, 0xfc, 0x36, 0x4d, 0xe0, 0x2f, 0x93, 0x74, 0x96, 0x44, 0x7c, 0xa2,
  0x66, 0x38, 0x3c, 0xda, 0xa8, 0x48, 0xca, 0xe5, 0x3c, 0x81, 0xdd, 0x7b,
  0x9f, 0x54, 0xf1, 0x2c, 0xcd, 0x6e, 0xe1, 0xaf, 0xb8, 0xf0, 0x79, 0x5e,
  0x24, 0xfd, 0xe8, 0xa8, 0x8c, 0x1e, 0xf3, 0x25, 0x2c, 0x78, 0x36, 0x83,
  0x33, 0x4f, 0xa2, 0x61, 0x32, 0xcb, 0xef, 0xbb, 0x78, 0xd2, 0x51, 0xb6,
  0x9c, 0x0f, 0x61, 0x80, 0x7c, 0x62, 0x87, 0x8b, 0xab, 0x25, 0x0c, 0xc7,
  0x4f, 0xcf, 0x63, 0x58, 0x13, 0xbc, 0x5b, 0x44, 0x37, 0x09, 0xac, 0xb9,
  0x5c, 0xa4, 0xd9, 0x1f, 0xea, 0xfb, 0x02, 0x5b, 0xbb, 0xc8, 0xef, 0x93,
  0x02, 0x76, 0x76, 0xf8, 0x18, 0xc1, 0x26, 0x0c, 0x99, 0x08, 0x27, 0x40,
  0x64, 0x51, 0x0c, 0x43, 0x18, 0x02, 0xec, 0x15, 0xc9, 0x2c, 0x46, 0x62,
  0x32, 0xdf, 0xe8, 0xc3, 0x21, 0x26, 0x86, 0xda, 0xe4, 0xd5, 0xf5, 0xdd,
  0x0d, 0x7a, 0x79, 0x0c, 0x2b, 0x49, 0x67, 0x25, 0x1c, 0x03, 0x5e, 0x0a,
  0x79, 0x06, 0x0f, 0x15, 0xe9, 0x1f, 0x68, 0xf3, 0x31, 0xab, 0xe2, 0x07,
  0xfa, 0xbc, 0xd0, 0x66, 0x6f, 0x9c, 0x2c, 0x92, 0x6c, 0x9c, 0x64, 0x55,
  0x3f, 0xfa, 0x4b, 0xbe, 0x5c, 0x83, 0x6f, 0x4f, 0x52, 0xd8, 0x83, 0x58,
  0x86, 0x82, 0x2f, 0x03, 0x11, 0x8c, 0x8a, 0x74, 0xe1, 0x1c, 0x45, 0x9e,
  0xc1, 0x99, 0x47, 0x57, 0x6f, 0x8f, 0xa3, 0xdd, 0x57, 0x9f, 0xbf, 0xb0,
  0x67, 0x0e, 0x03, 0x44, 0xa3, 0x38, 0x83, 0x15, 0x27, 0xa3, 0x74, 0xf2,
  0x18, 0xcd, 0x97, 0xb3, 0x2a, 0x5d, 0xc0, 0xee, 0xe3, 0xe5, 0xc3, 0x0b,
  0xb4, 0x88, 0x8b, 0xaa, 0x44, 0x22, 0xa0, 0x1f, 0xd0, 0xda, 0xef, 0x8b,
  0xb4, 0xc2, 0x8b, 0x44, 0xbf, 0x83, 0x19, 0x26, 0x55, 0xa9, 0xc3, 0x21,
  0xad, 0xc1, 0x77, 0x86, 0x40, 0x5b, 0xb0, 0xb5, 0x71, 0x09, 0x1f, 0x3d,

  0xf8, 0xcc, 0x72, 0x90, 0x9b, 0xaa, 0x5a, 0x1c, 0x6c, 0x6e, 0x96, 0x69,
  0x95, 0xf4, 0xff, 0x01, 0xf7, 0xb0, 0x5b, 0xdd, 0xe7, 0xdd, 0xea, 0xa6,
  0x48, 0x92, 0x7f, 0xf6, 0x81, 0x86, 0xcd, 0x93, 0xf0, 0xdd, 0x47, 0x99,

  0xd8, 0x34, 0xa9, 0xe0, 0x0b, 0x7f, 0x5f, 0x26, 0x19, 0x8e, 0x08, 0xf3,
  0x88, 0x67, 0x8b, 0x9b, 0x18, 0x8e, 0x33, 0x01, 0x6a, 0xc4, 0x9b, 0x0d,


  0x04, 0x83, 0xb3, 0xe2, 0xbb, 0xfd, 0xd7, 0x9f, 0xfc, 0x8f, 0x4e, 0xe8,
  0x9b, 0xf0, 0xdf, 0x7e, 0xf2, 0x10, 0xcf, 0x61, 0x6d, 0xf8, 0xa9, 0x4d,
  0x24, 0xb1, 0xbf, 0x6e, 0xf7, 0xb6, 0xb7, 0xb6, 0x7e, 0xea, 0x57, 0x0f,
  0xd5, 0xf3, 0x9e, 0xdf, 0xda, 0xb2, 0x6f, 0xe0, 0xa3, 0xeb, 0xb8, 0xde,
  0x68, 0x06, 0x24, 0x83, 0x1f, 0xff, 0x39, 0x29, 0xf2, 0x72, 0xe3, 0x79,
  0x23, 0xc5, 0xbd, 0x9f, 0xeb, 0xdf, 0x3d, 0x4f, 0x4a, 0xa2, 0x19, 0xbb,


  0xd6, 0x28, 0x2e, 0x80, 0x6e, 0xf3, 0xca, 0xb2, 0xa7, 0x2e, 0x5c, 0xca,
  0xca, 0xec, 0x0c, 0xdc, 0x39, 0x78, 0x1a, 0x18, 0x5b, 0x3c, 0x43, 0x9e,
  0x56, 0x46, 0x59, 0xf2, 0x60, 0x6e, 0x39, 0xdc, 0xfe, 0x24, 0x1e, 0xdd,
  0x44, 0x39, 0x10, 0x7f, 0x11, 0x38, 0x02, 0x77, 0x42, 0x71, 0x31, 0xba,
  0x49, 0xef, 0x60, 0x37, 0x5e, 0xbd, 0x7a, 0xd1, 0x83, 0xff, 0xbc, 0xfa,
  0x69, 0xf3, 0x2e, 0x9f, 0xc1, 0xe6, 0xec, 0xfd, 0xb4, 0x89, 0x47, 0xfc,
  0x8f, 0xb8, 0x3b, 0xec, 0x8e, 0xfe, 0xd9, 0xbf, 0xa9, 0xe6, 0xb3, 0x56,
  0xc2, 0x89, 0x33, 0xf8, 0xff, 0x79, 0xbe, 0xcc, 0x2a, 0x43, 0x2c, 0x40,
  0x73, 0x95, 0xc3, 0x9c, 0xe0, 0xba, 0xc2, 0x1d, 0x45, 0xd2, 0x46, 0x1a,
  0xc2, 0x5b, 0x07, 0x17, 0xd4, 0x5e, 0xc7, 0x6a, 0x74, 0x83, 0xeb, 0x07,
  0xea, 0x89, 0x65, 0x13, 0xaa, 0x34, 0xc6, 0x9b, 0x09, 0x0c, 0x02, 0x19,
  0x16, 0x8d, 0xc5, 0x5f, 0x4b, 0xe1, 0xc1, 0xbc, 0x18, 0x27, 0x45, 0xbf,
  0x39, 0x0d, 0x73, 0x65, 0x9d, 0x6f, 0x46, 0x2a, 0x51, 0xf0, 0x07, 0x34,
  0xb1, 0x79, 0xfa, 0x00, 0x23, 0x10, 0xc3, 0xcc, 0x68, 0xe2, 0x3c, 0x5a,
  0x84, 0x33, 0xa6, 0xcf, 0xe8, 0xfb, 0xf6, 0xca, 0xc2, 0xd4, 0x6b, 0x4b,
  0xa7, 0x8f, 0xda, 0xc5, 0x47, 0x70, 0x78, 0x0b, 0x78, 0x6b, 0x89, 0x7c,
  0x95, 0xae, 0x35, 0x0e, 0x03, 0x0c, 0x61, 0x0a, 0xe7, 0x02, 0x67, 0x81,
  0x54, 0x8c, 0x47, 0xf5, 0x18, 0x9d, 0x03, 0xc1, 0x30, 0x33, 0x72, 0x88,

  0x7d, 0x96, 0x54, 0xd5, 0x93, 0xc7, 0x64, 0x29, 0xf6, 0x60, 0xdb, 0x23,

  0xda, 0xb6, 0xe7, 0x81, 0xce, 0x0e, 0x76, 0xea, 0x0f, 0x7f, 0x0f, 0x4c,
  0xda, 0x5e, 0x17, 0xf8, 0xfa, 0x3f, 0xfe, 0xe9, 0x50, 0xdd, 0x3d, 0xfe,

  0x36, 0xcd, 0xee, 0xf2, 0x5b, 0xd8, 0x22, 0x92, 0xa2, 0x71, 0x7d, 0x37,
  0x91, 0x0f, 0xcd, 0x17, 0x95, 0x11, 0x4f, 0x48, 0x8e, 0xf0, 0xa3, 0x61,

  0x3c, 0x9c, 0x3d, 0x46, 0x37, 0xf1, 0x5d, 0x82, 0xeb, 0x5d, 0x00, 0x9d,
  0xe2, 0x0e, 0x80, 0xd8, 0x98, 0x11, 0x1f, 0x13, 0xc6, 0x30, 0xce, 0x97,
  0x43, 0x60, 0x2e, 0x7f, 0x5f, 0xe6, 0x15, 0x6f, 0x4c, 0x7c, 0x97, 0xa7,
  0xe3, 0x9a, 0x2c, 0xbe, 0x49, 0x90, 0xa1, 0xe1, 0x87, 0x49, 0x48, 0x01,
  0x43, 0xc5, 0x99, 0xd2, 0x45, 0x4b, 0x2b, 0x14, 0x77, 0xc0, 0x0a, 0xe3,
  0x59, 0x99, 0x47, 0xd1, 0x34, 0xc7, 0x5b, 0x42, 0x0c, 0x98, 0xc8, 0x1c,
  0x0e, 0xe5, 0x26, 0x46, 0xa9, 0x06, 0x02, 0xcc, 0xdc, 0x83, 0x22, 0x21,
  0x5e, 0x4c, 0x27, 0x15, 0xcf, 0xba, 0x2c, 0xbd, 0xf0, 0x1d, 0xd9, 0xaa,

  0x68, 0xed, 0x7f, 0xac, 0x75, 0xa3, 0xb5, 0x7f, 0x5f, 0x23, 0x7a, 0x58,
  0xfb, 0xb7, 0x35, 0x7b, 0xce, 0xa0, 0x8c, 0xdd, 0xa5, 0xe3, 0x84, 0x49,
  0xe2, 0xf4, 0xf2, 0xee, 0x45, 0xf4, 0x33, 0xea, 0x0e, 0xc0, 0x6b, 0x93,
  0x07, 0x25, 0x48, 0x5d, 0x1b, 0xbc, 0x1d, 0x01, 0xd3, 0x8d, 0x17, 0xa8,
  0x44, 0x24, 0xc5, 0x08, 0xa8, 0x37, 0x9e, 0x02, 0xbd, 0x82, 0x2c, 0xd6,
  0xe1, 0x70, 0x7c, 0x7c, 0x85, 0x97, 0x05, 0x0c, 0x32, 0xca, 0xe2, 0x39,
  0xdc, 0x88, 0x33, 0x9c, 0x51, 0x9a, 0xf9, 0x87, 0xf9, 0xd7, 0x49, 0xf2,
  0xf9, 0xd6, 0xc1, 0xc1, 0xee, 0x9f, 0x76, 0xf6, 0x93, 0xea, 0x66, 0xeb,
  0xa7, 0x4d, 0xf3, 0xc8, 0xe9, 0x84, 0xb6, 0x5d, 0xc9, 0x4f, 0x27, 0x01,
  0x52, 0xde, 0x48, 0x09, 0x78, 0x1f, 0xfe, 0x9e, 0x4c, 0xd2, 0x87, 0xae,
  0xea, 0x4b, 0x7c, 0xe7, 0x62, 0x20, 0x35, 0x38, 0x3f, 0x64, 0x11, 0x3a,
  0xdc, 0x74, 0x99, 0x94, 0xb0, 0x93, 0xf7, 0x37, 0x71, 0x15, 0x99, 0x01,
  0xf8, 0x64, 0xe7, 0xe9, 0xf4, 0xa6, 0x8a, 0xee, 0x63, 0x14, 0x36, 0xa7,
  0x15, 0x0f, 0x81, 0x52, 0x1e, 0x44, 0xcc, 0x24, 0x06, 0x59, 0x81, 0x67,
  0x48, 0x22, 0x7d, 0x68, 0x35, 0x8c, 0x0a, 0xc8, 0x9c, 0x0f, 0xc4, 0xaa,
  0x53, 0xc3, 0xb8, 0xc4, 0x4b, 0x9b, 0x01, 0x73, 0xa8, 0x40, 0x47, 0x58,
  0xe2, 0xbf, 0x6e, 0x40, 0x0b, 0xa0, 0x3d, 0x90, 0x89, 0x92, 0xa0, 0x7c,
  0x8b, 0xc7, 0x89, 0x67, 0x63, 0x84, 0x17, 0x1c, 0x52, 0x57, 0x8e, 0xd9,

  0xbc, 0x51, 0xc2, 0x85, 0x03, 0xce, 0x64, 0x28, 0xa3, 0x83, 0x4c, 0xb6,
  0xc3, 0xeb, 0xa4, 0x39, 0xc6, 0x25, 0x2a, 0x0a, 0xac, 0x0e, 0xc0, 0xe4,
  0x9d, 0xc5, 0xc2, 0xa6, 0xc5, 0xb7, 0xa8, 0x92, 0x34, 0x14, 0x1f, 0x7a,
  0x6d, 0x9c, 0x03, 0x91, 0xc1, 0x6c, 0x81, 0x19, 0xe3, 0xca, 0x90, 0xc5,
  0xd2, 0xae, 0x10, 0x91, 0xc3, 0x98, 0xf8, 0xc3, 0xb4, 0x42, 0x19, 0x43,
  0x3a, 0x2c, 0xcc, 0x17, 0x36, 0x85, 0x14, 0x51, 0x60, 0xd4, 0xce, 0xfa,

  0x49, 0x3c, 0xc2, 0xb3, 0xd1, 0x1d, 0x68, 0x29, 0xa0, 0x90, 0x26, 0xe6,
  0x2d, 0x92, 0xe7, 0x23, 0xd4, 0x8d, 0x66, 0x70, 0x5f, 0x46, 0x79, 0x51,
  0xa0, 0xbe, 0x8f, 0x27, 0x38, 0x64, 0x26, 0x3a, 0x4f, 0x40, 0x8d, 0x70,

  0xb7, 0x33, 0x45, 0x81, 0x06, 0xfc, 0x05, 0xf4, 0x12, 0xe2, 0x20, 0xa0,
  0x3f, 0x10, 0xcf, 0xa7, 0x85, 0xd3, 0xec, 0x70, 0xec, 0xd1, 0x28, 0x59,
  0x54, 0x65, 0x68, 0x4d, 0x7a, 0xe0, 0x30, 0x9d, 0x22, 0xc1, 0x9d, 0x77,
  0x95, 0x2e, 0xda, 0x57, 0x23, 0xf4, 0x49, 0xef, 0x52, 0x3d, 0x06, 0xf4,
  0xb0, 0xd2, 0xec, 0x5a, 0x45, 0xb4, 0x01, 0x6c, 0x8c, 0xf6, 0x7c, 0x8e,
  0x13, 0xc5, 0x87, 0x4b, 0xbe, 0xa9, 0xc4, 0x9a, 0xf1, 0x20, 0x59, 0xd3,
  0xe6, 0xef, 0xa2, 0xe8, 0x82, 0xfd, 0x34, 0x83, 0xc3, 0x57, 0xcd, 0x99,
  0xe2, 0xe7, 0x51, 0xc5, 0x07, 0x49, 0x3e, 0x2e, 0x6f, 0x40, 0xf9, 0x2a,
  0xe5, 0x66, 0xa7, 0x73, 0xa0, 0x99, 0x3b, 0x3c, 0xdf, 0x45, 0x92, 0x8c,
  0xfb, 0xd1, 0xc5, 0x04, 0xb9, 0x6a, 0x01, 0x93, 0xae, 0xe8, 0xd7, 0x28,
  0x55, 0x60, 0xdf, 0xc6, 0xa4, 0xc4, 0x9b, 0xab, 0xc5, 0x53, 0x71, 0xa4,
  0x03, 0x71, 0xf2, 0x18, 0x7e, 0x02, 0xb3, 0x9d, 0xd5, 0x45, 0x10, 0xdd,
  0x43, 0xe0, 0xde, 0x38, 0xbd, 0x61, 0x12, 0x11, 0x25, 0x0e, 0x93, 0xea,
  0x3e, 0x49, 0xcc, 0x70, 0x65, 0x02, 0x62, 0x0f, 0x0f, 0x8d, 0x35, 0x3f,
  0x62, 0x86, 0xb8, 0xb5, 0x97, 0x57, 0x17, 0xdf, 0x5c, 0x9d, 0x0c, 0x06,
  0xd1, 0xfb, 0x93, 0xeb, 0x93, 0xab, 0xda, 0x4e, 0x67, 0x79, 0x31, 0xa7,
  0x13, 0x1d, 0xa7, 0xe5, 0x62, 0x16, 0x3f, 0xe2, 0x51, 0xc3, 0x4a, 0xa6,
  0x05, 0xde, 0xac, 0x79, 0x82, 0x52, 0x61, 0xbc, 0x24, 0x4e, 0x06, 0xe2,
  0x08, 0x8e, 0x4f, 0x34, 0x5e, 0x64, 0x26, 0xa4, 0x26, 0x67, 0x53, 0xbb,


  0xd3, 0xc0, 0x71, 0x44, 0x92, 0xa2, 0x28, 0x35, 0xe7, 0x81, 0xaa, 0x27,
  0x19, 0x37, 0x5d, 0xfb, 0x33, 0xde, 0x26, 0x16, 0x6d, 0x40, 0xb3, 0xe9,
  0x9c, 0x98, 0x1d, 0xfc, 0x69, 0xb5, 0xcd, 0x64, 0x02, 0xaa, 0x36, 0x48,
  0x57, 0xb6, 0x14, 0x9a, 0x73, 0xd2, 0xd9, 0x1a, 0xfd, 0x18, 0xc8, 0x10,
  0x59, 0x33, 0x0e, 0xc8, 0x53, 0xe1, 0x2f, 0x18, 0x26, 0x06, 0x3a, 0x09,
  0xf2, 0x3e, 0x79, 0x6c, 0x81, 0x53, 0x48, 0xe0, 0x64, 0xc7, 0x3c, 0x7c,
  0xb9, 0x9c, 0xd0, 0x45, 0x8e, 0xd6, 0x41, 0x33, 0x7f, 0x0f, 0xd6, 0x12,
  0x58, 0x2c, 0xdd, 0xe8, 0x72, 0x83, 0xde, 0xdb, 0xde, 0xda, 0xd9, 0x63,
  0x46, 0xd0, 0xd7, 0xe1, 0xde, 0x3a, 0x8c, 0x78, 0xfb, 0x16, 0x8f, 0x97,
  0x1f, 0xc2, 0xc1, 0xfb, 0xd1, 0xf6, 0x7b, 0xfe, 0xc9, 0xde, 0xe7, 0xfb,
  0x2f, 0x5f, 0xc8, 0x0f, 0xeb, 0x04, 0x6e, 0xe6, 0x4f, 0xd4, 0x41, 0x96,


  0x1f, 0x9a, 0x82, 0x30, 0x13, 0x58, 0xdd, 0x3c, 0xcd, 0xe0, 0x9a, 0xc0,

  0xb5, 0x12, 0x5e, 0x85, 0xf4, 0x0c, 0x93, 0x9f, 0x30, 0x67, 0x93, 0x73,
  0xad, 0x9b, 0x94, 0xf0, 0x32, 0x90, 0x2c, 0xf0, 0x72, 0x73, 0x48, 0xac,
  0x26, 0x54, 0x38, 0x91, 0x78, 0x88, 0x0c, 0x16, 0xed, 0x2a, 0x50, 0x80,
  0x93, 0xe0, 0xd7, 0x8c, 0x54, 0x84, 0x37, 0x60, 0x6e, 0x20, 0x13, 0x51,
  0xcc, 0xf9, 0xfb, 0x0e, 0xac, 0x80, 0x38, 0xe4, 0x7d, 0x5a, 0x12, 0x6b,
  0xb8, 0xcf, 0x97, 0x33, 0xb0, 0x62, 0xf0, 0x81, 0xe5, 0x82, 0x5e, 0x80,
  0x4f, 0x2d, 0x2c, 0x0f, 0x00, 0x8d, 0x05, 0x69, 0xa7, 0x39, 0x0a, 0x4c,
  0x0d, 0xfe, 0xb9, 0x00, 0x52, 0xe2, 0xe9, 0xf4, 0x9b, 0x12, 0x82, 0x78,
  0x9f, 0x47, 0x89, 0x78, 0xe7, 0x89, 0x69, 0x5f, 0x5e, 0x0c, 0xae, 0x51,

  0x03, 0xb8, 0xfc, 0x70, 0x0d, 0x03, 0x81, 0x0a, 0x50, 0x56, 0x40, 0x94,
  0xf8, 0x62, 0x96, 0x90, 0x09, 0xa9, 0xc3, 0x01, 0xed, 0xa5, 0xc4, 0xa8,
  0x48, 0xad, 0xd1, 0x4f, 0xf2, 0x1c, 0xd9, 0xc6, 0xc6, 0x2b, 0xa8, 0x16,
  0x36, 0xcb, 0x70, 0xf3, 0x4e, 0xb4, 0xfe, 0xe5, 0x06, 0xd0, 0x6c, 0x2f,
  0x37, 0xbb, 0xd3, 0xeb, 0xc9, 0xab, 0xf0, 0xed, 0x32, 0x9d, 0xa7, 0xb3,
  0xb8, 0x70, 0xa6, 0xce, 0x1c, 0x15, 0xef, 0xa7, 0xe1, 0x2b, 0x23, 0xa0,
  0x1a, 0x9a, 0xb6, 0x35, 0x25, 0x71, 0x0f, 0x89, 0x2b, 0xd9, 0xa3, 0x1a,
  0xa3, 0x42, 0x40, 0x1a, 0xf3, 0x22, 0x35, 0x5b, 0x87, 0x67, 0x86, 0xec,
  0xaa, 0xb6, 0x51, 0xcd, 0x73, 0xf3, 0x36, 0x0e, 0x25, 0x12, 0x79, 0x2a,
  0xcc, 0xd6, 0x45, 0x9d, 0x61, 0x5c, 0x74, 0x22, 0xc3, 0x8b, 0xf9, 0x6e,

  0xe2, 0x0d, 0x29, 0x92, 0xe9, 0x12, 0x56, 0x10, 0xf1, 0xee, 0xe2, 0x4a,



  0xff, 0xe8, 0xac, 0x54, 0x07, 0xe8, 0x0d, 0xf1, 0x91, 0xb4, 0x64, 0x33,
  0x73, 0x02, 0x76, 0x0b, 0x5e, 0x1a, 0xd5, 0x5f, 0x49, 0xa3, 0x11, 0x8a,
  0x09, 0x10, 0x8c, 0xa3, 0xd7, 0xc2, 0x55, 0xa9, 0x12, 0x60, 0x34, 0xc4,

  0xfe, 0xf1, 0xc9, 0x1e, 0x1c, 0x59, 0xaf, 0x57, 0xc2, 0xfe, 0xa3, 0xee,
  0xbd, 0x10, 0x9b, 0xfe, 0x82, 0x1c, 0x26, 0xc6, 0xb7, 0x72, 0x21, 0x3a,
  0x30, 0x89, 0x4d, 0x7e, 0x97, 0x58, 0x28, 0x28, 0xaa, 0xf7, 0xf0, 0xe1,
  0x18, 0x8e, 0x0c, 0x2e, 0xdc, 0x7b, 0xdc, 0x28, 0xf6, 0x8d, 0x44, 0x46,
  0x6d, 0x26, 0xca, 0x48, 0xf1, 0xde, 0xc7, 0x56, 0x97, 0x19, 0x8f, 0x53,

  0xfc, 0x2d, 0xdc, 0x2f, 0x90, 0x70, 0xcb, 0x84, 0x6c, 0x0f, 0xd9, 0xd4,
  0xb9, 0xdd, 0x4c, 0x32, 0x63, 0xcb, 0x9b, 0x1c, 0xcd, 0xc4, 0x0e, 0xf3,
  0xe2, 0x1e, 0x7e, 0xab, 0x43, 0xf2, 0x7c, 0x1e, 0xe9, 0xb7, 0xe4, 0x53,
  0xb0, 0x8e, 0xb1, 0xab, 0x9b, 0x75, 0x41, 0xd0, 0x3c, 0x3a, 0x46, 0x02,
  0xf1, 0x6a, 0x9e, 0x7b, 0x61, 0x14, 0x1e, 0x10, 0xa9, 0x0b, 0x54, 0xa6,
  0x84, 0x87, 0x93, 0x30, 0xa4, 0x2b, 0x5b, 0xf2, 0xd4, 0xba, 0xb0, 0xb7,
  0xf8, 0xe4, 0xf4, 0x46, 0x1f, 0x75, 0x04, 0x6b, 0x0c, 0x8b, 0x43, 0xe1,
  0x80, 0xf6, 0xf4, 0x58, 0xf9, 0x7e, 0x5e, 0x30, 0x33, 0x9b, 0xe5, 0x40,

  0xcb, 0x1d, 0x56, 0x59, 0x65, 0xda, 0x38, 0x6b, 0x9c, 0x25, 0xee, 0x38,
  0xfb, 0x99, 0x72, 0x73, 0x36, 0x66, 0xd2, 0xb2, 0x5f, 0xe5, 0x93, 0x53,
  0xb3, 0x1b, 0x35, 0xa0, 0x3d, 0x02, 0xd1, 0x59, 0x22, 0x1d, 0xeb, 0xce,
  0x13, 0x79, 0x83, 0xa8, 0x5b, 0xab, 0xf8, 0x3e, 0x92, 0x8d, 0xd5, 0xd8,
  0xf9, 0x92, 0xc8, 0x47, 0x04, 0x99, 0x59, 0x19, 0xac, 0x68, 0x9c, 0xc6,
  0x44, 0x27, 0x7c, 0x34, 0xa4, 0x8c, 0x58, 0x8b, 0x30, 0xa0, 0x07, 0x3f,
  0x36, 0x0d, 0xba, 0xd9, 0xcc, 0x15, 0x49, 0x3a, 0xa7, 0xde, 0x05, 0xac,
  0xfd, 0x8c, 0xd6, 0xd1, 0xbb, 0x8b, 0xf0, 0xfa, 0x81, 0xd9, 0x80, 0x77,

  0xb1, 0x77, 0x71, 0x76, 0xe7, 0x5c, 0x23, 0xb4, 0xdc, 0x33, 0xd4, 0x53,
  0xba, 0xe4, 0x1d, 0x19, 0xe6, 0x39, 0x98, 0xc9, 0x76, 0x69, 0x28, 0x0f,
  0x92, 0x0c, 0xa9, 0x5d, 0x4e, 0x14, 0x58, 0xc2, 0xc2, 0xf0, 0xdb, 0x47,
  0x30, 0x97, 0xe2, 0x69, 0x9c, 0x1a, 0x7a, 0x93, 0x9b, 0x31, 0x8e, 0xf4,
  0xe1, 0x2c, 0x97, 0xe7, 0xf1, 0xa8, 0x50, 0x05, 0x12, 0xbe, 0xb5, 0x2c,
  0xf9, 0xfa, 0xc0, 0xaa, 0x80, 0xf3, 0x10, 0xef, 0x90, 0x71, 0x51, 0x6d,
  0xd4, 0xe1, 0x86, 0xa4, 0x28, 0xa3, 0xce, 0x49, 0xcc, 0x97, 0x34, 0x48,
  0x18, 0xb1, 0xd3, 0x8f, 0xde, 0xe5, 0xf7, 0x09, 0xf9, 0x0a, 0x49, 0xbf,
  0x4f, 0xd1, 0xdb, 0x05, 0xaa, 0xe0, 0x7d, 0x12, 0xcd, 0x41, 0xf5, 0x84,
  0xdd, 0x24, 0xed, 0x83, 0x7e, 0xe6, 0x98, 0x87, 0x40, 0xe1, 0xf7, 0xbc,
  0x4b, 0x66, 0x15, 0xe6, 0x28, 0x27, 0x7c, 0x25, 0xa2, 0x75, 0x52, 0x6f,
  0x46, 0xb8, 0x5b, 0x8b, 0xca, 0xae, 0xc2, 0x6c, 0xc8, 0x7d, 0x5c, 0x3a,


  0x97, 0x2b, 0x21, 0xd3, 0xf4, 0x65, 0x7f, 0xfb, 0x55, 0x7f, 0xab, 0x0f,

  0x86, 0x48, 0x72, 0x97, 0xe6, 0xcb, 0x12, 0x3e, 0x8d, 0xd3, 0xb0, 0xef,
  0x24, 0x78, 0x2b, 0xab, 0x7c, 0x3a, 0x9d, 0xb1, 0xce, 0xb3, 0x99, 0x4f,
  0x26, 0xac, 0xfb, 0x80, 0xa6, 0x67, 0xf4, 0x67, 0xb6, 0x80, 0x70, 0x67,
  0xe4, 0xba, 0x31, 0x4b, 0xf5, 0x4d, 0xe4, 0xbe, 0x75, 0x5e, 0xf4, 0x7a,
  0xf1, 0xb0, 0xac, 0xd0, 0x98, 0xea, 0x2d, 0xb3, 0xf4, 0xa1, 0x57, 0xe6,
  0xa3, 0x5b, 0x38, 0x94, 0xc3, 0x45, 0x5c, 0xdd, 0x7c, 0xd9, 0x70, 0x09,
  0xaf, 0xa3, 0x2c, 0xd9, 0x88, 0xa2, 0x63, 0x56, 0x2b, 0x71, 0x27, 0x0a,
  0xbe, 0x6f, 0x70, 0x9a, 0x32, 0x4a, 0xf4, 0x01, 0x46, 0x01, 0x5a, 0x9e,
  0xc3, 0xa1, 0x46, 0x3c, 0x58, 0x57, 0x59, 0x69, 0x63, 0x38, 0x72, 0x38,
  0xa2, 0x18, 0x21, 0xbf, 0x1d, 0x5c, 0x9d, 0xbc, 0xb8, 0x05, 0x45, 0xfb,
  0x1c, 0x4c, 0xc6, 0x03, 0xfc, 0x37, 0xb0, 0xb0, 0x8a, 0xb6, 0x5c, 0x24,
  0x2b, 0xcc, 0x88, 0x99, 0x31, 0x5a, 0xe4, 0xf1, 0xb0, 0xd7, 0x18, 0x4e,
  0xbe, 0x2f, 0x1f, 0x8d, 0xd4, 0xd6, 0x50, 0x52, 0x8a, 0xd6, 0xbe, 0x02,
  0xfb, 0xef, 0x86, 0x8f, 0x9d, 0x06, 0xe4, 0x35, 0x02, 0x85, 0x4e, 0xc1,

  0x82, 0xc8, 0xaa, 0xe6, 0x70, 0x37, 0x24, 0xaa, 0x51, 0xca, 0xb0, 0xb1,
  0x4b, 0x44, 0x22, 0x1e, 0x20, 0x63, 0x7f, 0xf6, 0x3f, 0x6b, 0xbc, 0x76,
  0x64, 0xcf, 0x74, 0x7f, 0x17, 0xce, 0xd4, 0xdd, 0xe8, 0x59, 0xd5, 0x2b,
  0xef, 0x46, 0xd1, 0x21, 0x69, 0xdf, 0x48, 0xa6, 0xc1, 0x0d, 0x1e, 0x6c,
  0x44, 0xdf, 0x1f, 0x5d, 0x9d, 0x9f, 0x9e, 0x7f, 0x73, 0xc0, 0x1f, 0x15,
  0x4a, 0x83, 0xbf, 0x25, 0x0f, 0x20, 0x02, 0x53, 0x9c, 0x2c, 0x48, 0xb2,
  0xe8, 0x4d, 0x4e, 0xb3, 0xc3, 0xf3, 0x86, 0xef, 0x81, 0x1c, 0x69, 0xee,
  0xc8, 0x78, 0xd9, 0x70, 0xfc, 0x1a, 0x6e, 0x6d, 0x47, 0xe5, 0xbb, 0xc9,


  0x3b, 0xac, 0x13, 0x04, 0xe6, 0xc8, 0xbe, 0x63, 0x52, 0x96, 0xfa, 0x28,
  0x2a, 0xc9, 0xc6, 0xd7, 0x69, 0x37, 0x86, 0x5b, 0xe4, 0x60, 0xe9, 0xb2,
  0x91, 0x0f, 0xe3, 0x3d, 0xc0, 0x9d, 0xc1, 0x2d, 0xd2, 0xc1, 0x46, 0xc0,
  0x8b, 0x12, 0xd1, 0x1a, 0x88, 0xcf, 0x91, 0xcd, 0x20, 0x7c, 0xac, 0x1f,
  0x1d, 0x4d, 0x9a, 0xb3, 0x46, 0xc5, 0x05, 0x55, 0x7a, 0x15, 0x81, 0x63,
  0xab, 0x05, 0xb3, 0x8b, 0x97, 0x47, 0xd4, 0x61, 0x4a, 0x38, 0x9c, 0xb1,
  0x8a, 0x79, 0xfc, 0x4c, 0x63, 0x38, 0xb2, 0x3b, 0x89, 0xc7, 0xa0, 0x46,
  0x98, 0xe2, 0x69, 0xa2, 0xdd, 0x07, 0x5c, 0x7a, 0x9e, 0x8f, 0xc9, 0x88,

  0xf0, 0xf6, 0x67, 0x60, 0xbc, 0x3d, 0x9d, 0x8e, 0x5d, 0x75, 0xb4, 0x8e,
  0x7e, 0x3f, 0x20, 0x81, 0x6c, 0x5a, 0xdd, 0x6c, 0x58, 0x9f, 0x06, 0xea,
  0x28, 0xb0, 0xe0, 0x4d, 0x98, 0x08, 0xad, 0x3b, 0x6b, 0xd2, 0x39, 0xf9,
  0x9c, 0x49, 0xed, 0xfc, 0xdb, 0xb2, 0xac, 0xc8, 0x14, 0x12, 0xd9, 0xcf,
  0x2b, 0x81, 0x99, 0xcd, 0x93, 0x79, 0x5e, 0x3c, 0x7a, 0x13, 0x39, 0x25,
  0xcd, 0x03, 0xad, 0x4e, 0x39, 0x2d, 0x24, 0x02, 0x12, 0x8e, 0xea, 0x0f,
  0x44, 0x0b, 0x00, 0x1d, 0xea, 0xc6, 0x08, 0x24, 0x8d, 0x09, 0xb8, 0x0f,
  0x18, 0xdf, 0xd6, 0x5b, 0xab, 0xd6, 0x13, 0x79, 0x79, 0xd8, 0xb0, 0x17,
  0x53, 0x6a, 0x28, 0xfe, 0x1b, 0xfc, 0xff, 0x59, 0x8c, 0x2c, 0x27, 0x4b,
  0x6a, 0x27, 0x44, 0xa2, 0x83, 0x97, 0xb6, 0x8a, 0xd6, 0x5f, 0xec, 0xf5,
  0xb7, 0x6b, 0xb4, 0x9e, 0x3d, 0x62, 0x94, 0x20, 0xcc, 0x40, 0xae, 0x41,
  0x6b, 0x2c, 0x79, 0xce, 0xb0, 0x8b, 0x93, 0x74, 0xba, 0x2c, 0x12, 0x56,
  0xdf, 0x28, 0xb0, 0xa0, 0xf1, 0x04, 0xd4, 0x88, 0x6e, 0x72, 0x72, 0xc3,
  0x83, 0x24, 0x4d, 0x66, 0x93, 0x6e, 0x63, 0x38, 0xb2, 0x5d, 0x90, 0xfc,
  0x69, 0xfa, 0xc4, 0x31, 0xc1, 0x46, 0xa1, 0xc1, 0xb2, 0x44, 0x34, 0xd8,
  0x39, 0x70, 0x93, 0x08, 0xfd, 0xd0, 0xd1, 0x68, 0x16, 0xa7, 0x73, 0x22,
  0x53, 0xf1, 0xb3, 0xf6, 0x43, 0xd7, 0x02, 0xad, 0x0b, 0x7c, 0x7b, 0x88,
  0x76, 0x6f, 0x51, 0xa2, 0x58, 0xa6, 0x53, 0x55, 0xb5, 0x99, 0xad, 0xca,
  0x9b, 0x64, 0x74, 0xab, 0x9c, 0x4b, 0xf5, 0xcd, 0x26, 0x1d, 0x63, 0x80,
  0x81, 0x8c, 0x6b, 0x78, 0x6a, 0x59, 0xe2, 0x35, 0x29, 0xcb, 0x14, 0x7d,
  0x67, 0x68, 0x0b, 0x2e, 0x47, 0x64, 0x22, 0xd2, 0x85, 0x01, 0xea, 0x56,
  0xf6, 0x17, 0x01, 0x3f, 0xcd, 0xc6, 0xbd, 0xaa, 0x48, 0x17, 0x6d, 0xb3,
  0xe3, 0x53, 0xa9, 0x6b, 0xa7, 0xa5, 0x98, 0xeb, 0x64, 0x09, 0xb3, 0x6d,
  0x3c, 0x8a, 0x1a, 0xbb, 0xd9, 0x24, 0x4a, 0xda, 0xdb, 0x2e, 0x3a, 0x83,
  0x52, 0x50, 0x16, 0xd8, 0x52, 0x22, 0x5f, 0x27, 0xd8, 0x45, 0x22, 0xb5,
  0xc0, 0x84, 0x4b, 0x47, 0xa4, 0x01, 0xa5, 0xd3, 0x04, 0x03, 0x39, 0x20,
  0xc8, 0xaa, 0x19, 0xe8, 0x45, 0x3e, 0x8d, 0xc3, 0x6f, 0x92, 0x69, 0x5e,
  0xa1, 0x2a, 0xe2, 0x91, 0xc9, 0x07, 0x62, 0xf2, 0x86, 0x26, 0x54, 0xe7,
  0x77, 0x15, 0xb2, 0x94, 0x95, 0x71, 0xf8, 0x34, 0xeb, 0xfc, 0xe2, 0x6e,


  0x28, 0x2b, 0xb8, 0x59, 0xcd, 0x53, 0x87, 0xd1, 0x46, 0x09, 0x19, 0x5e,
  0xa4, 0x35, 0xaa, 0xd2, 0xaa, 0xda, 0x3e, 0xb2, 0x04, 0x54, 0x90, 0xab,
  0xfb, 0x74, 0x94, 0xa8, 0x2f, 0x4e, 0x1c, 0xd4, 0xb3, 0xd4, 0xe7, 0xf3,
  0x73, 0xbc, 0x93, 0xf0, 0x12, 0x2b, 0xe4, 0xe8, 0x3a, 0xb9, 0x4f, 0x51,

  0x61, 0x17, 0xa6, 0x47, 0xfa, 0x98, 0xc8, 0x82, 0xb8, 0x48, 0xc9, 0x4f,
  0x04, 0xc3, 0xc9, 0x3c, 0x1d, 0x73, 0xde, 0xbd, 0x63, 0x3c, 0x6f, 0x7a,
  0x5f, 0x6c, 0x18, 0x6b, 0xbb, 0xd0, 0xe5, 0x9a, 0xc4, 0xe9, 0x2c, 0xb0,
  0x4f, 0xc4, 0xc8, 0xa6, 0x09, 0xb9, 0xd4, 0xf8, 0x0c, 0x96, 0xb8, 0xe9,
  0x18, 0x74, 0xf3, 0x99, 0x54, 0x92, 0xb0, 0x31, 0x41, 0x96, 0xc7, 0xc3,
  0xa3, 0xd9, 0x5e, 0xd2, 0xd8, 0xf8, 0xec, 0xe4, 0xef, 0x7c, 0x7c, 0xce,

  0xf5, 0x8c, 0x71, 0xd4, 0x78, 0x81, 0xd1, 0xa5, 0xe6, 0x0d, 0x45, 0xbb,
  0x0b, 0x03, 0x94, 0x1b, 0xea, 0x3e, 0x4e, 0xc4, 0x79, 0x6e, 0x02, 0x7b,
  0xc4, 0x90, 0x90, 0xa7, 0xc9, 0x15, 0xe6, 0x71, 0x84, 0x03, 0x37, 0x79,
  0x39, 0x08, 0x57, 0x90, 0xc5, 0xc4, 0x43, 0x6b, 0x14, 0x9b, 0x03, 0xfb,

  0x32, 0xe1, 0x25, 0x74, 0xf7, 0x0a, 0xaf, 0x23, 0x2b, 0x8b, 0xee, 0x6c,
  0x88, 0x97, 0xa3, 0xdd, 0x87, 0x4a, 0x32, 0x4b, 0x99, 0x6e, 0xc4, 0x4a,
  0x1d, 0x33, 0xab, 0x11, 0x3b, 0x80, 0x45, 0x81, 0x60, 0x51, 0x43, 0x53,
  0x9d, 0xcc, 0xe2, 0x29, 0xf9, 0xd6, 0xa6, 0xcd, 0x1b, 0x9a, 0xe5, 0x12,
  0xe5, 0x2b, 0x73, 0x60, 0xef, 0xb8, 0x6a, 0xf1, 0x6b, 0x95, 0xd1, 0x3a,
  0x10, 0xd9, 0x6c, 0x49, 0xb2, 0xfe, 0x02, 0x96, 0x37, 0x18, 0xbc, 0xdb,

  0x70, 0xd9, 0x1b, 0xed, 0xee, 0x73, 0x98, 0x1b, 0x72, 0x27, 0xb2, 0xc0,
  0xbf, 0xe6, 0xf3, 0xa8, 0x33, 0x38, 0x63, 0xda, 0xb9, 0x6a, 0x9c, 0xd2,
  0x25, 0xae, 0x02, 0xfd, 0xa0, 0x7d, 0x73, 0xf5, 0xf1, 0x49, 0x75, 0xc7,
  0x32, 0x61, 0xd7, 0xb4, 0x83, 0x65, 0xb9, 0x24, 0xcf, 0x14, 0xc9, 0xe3,
  0xe6, 0x70, 0xc0, 0xec, 0x81, 0x15, 0x2d, 0x33, 0xfc, 0xd3, 0x28, 0xd0,
  0x29, 0x99, 0x72, 0x78, 0x16, 0x05, 0xfa, 0xbf, 0xd1, 0x08, 0x36, 0x0a,
  0x28, 0xf0, 0x14, 0x1d, 0x1b, 0xf7, 0xb2, 0x79, 0x09, 0x41, 0x3d, 0x23,
  0x76, 0x03, 0x22, 0x14, 0x04, 0x33, 0x5e, 0xb8, 0x16, 0xee, 0xbd, 0x5e,
  0x2e, 0x81, 0xbf, 0xa0, 0xdd, 0x20, 0xcc, 0x03, 0xe9, 0xb1, 0x39, 0x3b,
  0x66, 0x2f, 0x20, 0x69, 0x1c, 0x3e, 0xb2, 0xf1, 0x5b, 0x5f, 0x10, 0x3a,
  0x34, 0xf7, 0x14, 0x41, 0xfc, 0x26, 0x60, 0x8d, 0x91, 0x3e, 0xe6, 0xa9,
  0x62, 0xd7, 0x67, 0x83, 0xd0, 0x61, 0xd6, 0x83, 0x53, 0xf8, 0x3e, 0x32,
  0x5b, 0xf4, 0x21, 0xb2, 0x4f, 0x35, 0x47, 0x8b, 0xc0, 0x09, 0x50, 0xb9,
  0xce, 0xbe, 0x45, 0x82, 0x91, 0x2c, 0x36, 0x96, 0x39, 0xf2, 0x8d, 0x0c,
  0x0c, 0x85, 0x35, 0x6a, 0x27, 0xc6, 0x7f, 0x7a, 0x7c, 0xe4, 0x8e, 0x4b,

  0x0e, 0xd3, 0xe6, 0x45, 0x70, 0x7e, 0xbf, 0x5e, 0x6e, 0x18, 0x1e, 0x06,
  0xa3, 0x5c, 0x9e, 0xbc, 0x27, 0xe3, 0x35, 0x06, 0xba, 0x39, 0x57, 0x5f,
  0xa5, 0x06, 0xb6, 0x87, 0xcb, 0x74, 0x56, 0x0b, 0x08, 0x58, 0x7b, 0x9b,

  0xa2, 0xca, 0x4c, 0x5a, 0x34, 0x35, 0x0e, 0x6d, 0xa5, 0xe4, 0x1b, 0x6e,
  0x12, 0x5a, 0xf5, 0xb8, 0x10, 0xb7, 0xf6, 0xb2, 0xac, 0x79, 0x8f, 0x54,
  0x2e, 0xcf, 0x2a, 0x52, 0xb1, 0xd1, 0xa8, 0x75, 0xc6, 0xf4, 0x4e, 0x88,
  0xa6, 0x85, 0x62, 0x60, 0x9a, 0xa5, 0x3f, 0x8b, 0x0e, 0x9a, 0x64, 0x77,

  0x69, 0x91, 0x67, 0xa8, 0xe3, 0x82, 0xdd, 0x5b, 0xa4, 0xc4, 0x96, 0x51,
  0xfd, 0x02, 0xc6, 0xb1, 0x76, 0xfc, 0xe1, 0xea, 0xec, 0xe3, 0xf1, 0xd1,
  0xc7, 0xaf, 0x3f, 0x9c, 0xbf, 0x39, 0x3b, 0x59, 0x6b, 0x0c, 0x87, 0x0e,
  0xbf, 0x54, 0xbc, 0xf4, 0x25, 0x9a, 0x1d, 0x74, 0x49, 0x60, 0x8a, 0x3c,
  0xf2, 0x34, 0xbd, 0x03, 0x86, 0x46, 0x56, 0x04, 0x39, 0xe8, 0xe9, 0x6f,
  0xe4, 0xd2, 0x92, 0x0d, 0x6f, 0x0c, 0x37, 0x5c, 0xa2, 0x9e, 0xd6, 0xaf,
  0x69, 0xcb, 0x7a, 0x55, 0xc4, 0x64, 0xd7, 0x09, 0x06, 0x34, 0x6c, 0xd4,
  0xa2, 0xb2, 0x31, 0xda, 0x2e, 0x8e, 0x85, 0xe8, 0xf8, 0xea, 0x97, 0x15,
  0x98, 0x48, 0x1a, 0x1d, 0x00, 0xad, 0x2d, 0xbf, 0xd5, 0x14, 0x03, 0xb0,
  0xaf, 0x8e, 0x02, 0xc7, 0x5d, 0x5a, 0x4d, 0x74, 0x1c, 0xad, 0xe1, 0x48,
  0x40, 0xbf, 0x3d, 0x99, 0xe4, 0xa8, 0xa8, 0xc0, 0xb8, 0x49, 0x52, 0xba,
  0x18, 0x1a, 0x42, 0x45, 0x9d, 0x95, 0x3c, 0x73, 0x9e, 0x86, 0x0d, 0xba,
  0x26, 0xee, 0x01, 0x69, 0xf7, 0xc9, 0x43, 0x42, 0x37, 0x4f, 0xde, 0x3a,
  0x5e, 0x16, 0x74, 0x9b, 0xbf, 0x07, 0x6d, 0x04, 0xb9, 0xdf, 0x1b, 0x72,
  0xed, 0xc1, 0x0b, 0xfa, 0x10, 0x88, 0x99, 0xa6, 0xc8, 0xcb, 0x67, 0x18,
  0x54, 0x8d, 0xc9, 0x8d, 0x42, 0x4e, 0xaf, 0xcb, 0xa3, 0xeb, 0x77, 0x41,
  0x65, 0xd6, 0xe6, 0xf3, 0x08, 0x29, 0x92, 0x62, 0x5e, 0x56, 0x72, 0x41,
  0xce, 0x07, 0x83, 0x88, 0xb2, 0x45, 0x66, 0xe9, 0xb0, 0x88, 0xf1, 0x9b,
  0xf8, 0x63, 0xfc, 0x29, 0x90, 0x75, 0x63, 0xb8, 0xcb, 0x6f, 0x8f, 0x07,
  0x7f, 0xdc, 0xde, 0x46, 0x2d, 0x7e, 0x09, 0xfb, 0xb2, 0x0e, 0xaf, 0x64,
  0x25, 0xdc, 0xcc, 0x79, 0xbf, 0xcc, 0x37, 0x48, 0x6c, 0x97, 0xa2, 0x0e,

  0xc4, 0x77, 0x20, 0x6d, 0x89, 0x8e, 0x94, 0xa8, 0xe1, 0x38, 0xbd, 0x3d,
  0x21, 0x46, 0x27, 0xa9, 0x34, 0xc0, 0x2f, 0x40, 0x5e, 0xcf, 0x7c, 0x85,
  0x7c, 0x3d, 0xbd, 0x18, 0x48, 0x22, 0x4a, 0x3c, 0x82, 0xbf, 0xa2, 0x97,
  0x60, 0x03, 0x57, 0x56, 0xbf, 0x61, 0xba, 0xaa, 0x01, 0x6b, 0xa3, 0xd7,
  0x68, 0xbe, 0x50, 0xfe, 0x8c, 0xcf, 0x15, 0xb2, 0xe6, 0xe5, 0xb2, 0x39,
  0x4a, 0x44, 0x0e, 0xc3, 0x78, 0x74, 0x7b, 0x1f, 0x17, 0x63, 0xb6, 0x87,
  0x80, 0x62, 0x86, 0xe9, 0x2c, 0xad, 0x1e, 0xd9, 0xa8, 0x6d, 0x1a, 0xd4,
  0x1c, 0x1c, 0xc5, 0x0d, 0x84, 0x7b, 0x34, 0x05, 0x7b, 0x1f, 0xb5, 0x4f,
  0x54, 0xf1, 0xd3, 0xca, 0xb5, 0x67, 0x49, 0x45, 0xaa, 0x8c, 0x8a, 0x63,
  0xbe, 0xed, 0x89, 0xc7, 0x8a, 0xef, 0x11, 0x4d, 0xd3, 0xd2, 0xae, 0xb2,
  0x41, 0x97, 0x49, 0x29, 0xf9, 0x44, 0xe5, 0x23, 0x48, 0xf9, 0x79, 0x14,
  0x50, 0x11, 0x29, 0x75, 0x28, 0xfa, 0x36, 0x79, 0x04, 0xe3, 0x39, 0xcd,
  0x2c, 0xa7, 0x64, 0xe3, 0x3e, 0x41, 0xeb, 0x8e, 0x75, 0xd1, 0x54, 0x3d,
  0xe9, 0x89, 0x04, 0x43, 0x58, 0x92, 0xf8, 0xde, 0x03, 0x7e, 0x5f, 0xf5,
  0x70, 0x1c, 0x62, 0xad, 0xac, 0xb1, 0x64, 0xfa, 0x92, 0x7f, 0x88, 0x03,
  0xf8, 0x79, 0x96, 0x25, 0x33, 0x39, 0xbe, 0xeb, 0x55, 0x07, 0x60, 0x9e,
  0x85, 0x29, 0x7f, 0xcf, 0x37, 0xba, 0x31, 0xdc, 0x4b, 0x8e, 0xec, 0xc7,
  0x95, 0xca, 0x24, 0x4d, 0x19, 0x02, 0xab, 0x68, 0xcb, 0xfc, 0xaa, 0xdf,
  0xfa, 0x19, 0xef, 0x36, 0x15, 0xf6, 0xd0, 0xeb, 0x67, 0xce, 0x1e, 0x51,
  0x3a, 0x64, 0x3c, 0x63, 0x39, 0xe2, 0x2f, 0x8c, 0x66, 0x45, 0xd1, 0x8b,
  0xc6, 0x70, 0xae, 0x96, 0xad, 0x32, 0x4c, 0xd6, 0xb1, 0x06, 0x7a, 0x6a,
  0x5e, 0x90, 0xb3, 0xa8, 0xc8, 0xe1, 0xac, 0x6b, 0xe7, 0xb9, 0xce, 0xca,
  0x46, 0xf3, 0x9a, 0x08, 0x37, 0x77, 0x36, 0x66, 0x23, 0x74, 0xd1, 0x3d,
  0xcd, 0xc4, 0x37, 0x59, 0x5b, 0x2d, 0xce, 0xba, 0x84, 0x26, 0x2e, 0x7d,
  0x08, 0x6c, 0xec, 0x5f, 0x17, 0xd0, 0xcc, 0x0c, 0x89, 0xf9, 0xf9, 0x32,
  0x4b, 0x68, 0xb1, 0x26, 0xa8, 0xdf, 0xab, 0x44, 0xc6, 0x49, 0x18, 0xff,
  0xeb, 0x82, 0xb3, 0x05, 0x58, 0x71, 0x64, 0x47, 0xb2, 0x6f, 0x06, 0xa0,
  0x2f, 0x50, 0xfc, 0x8d, 0x07, 0x9d, 0x68, 0x3d, 0xe9, 0x4f, 0x61, 0xbc,
  0x0e, 0x8e, 0xb3, 0x7d, 0x80, 0xff, 0xdd, 0xa1, 0xff, 0xee, 0x76, 0x34,
  0xaf, 0xcf, 0xdd, 0x7a, 0x94, 0xe6, 0x4d, 0x59, 0xc4, 0xc1, 0x38, 0x2b,
  0xdc, 0xbb, 0xec, 0x60, 0x6e, 0x63, 0x3c, 0xac, 0xb3, 0x9e, 0xf1, 0x2e,

  0xfb, 0xea, 0x96, 0x6e, 0xc3, 0x9c, 0xfd, 0x11, 0x77, 0x09, 0x3b, 0x44,
  0x60, 0x65, 0x23, 0x50, 0x0f, 0xc9, 0x87, 0xa8, 0xb7, 0x6a, 0xf4, 0xb1,
  0x48, 0x6e, 0xe2, 0xf2, 0x26, 0x5a, 0x56, 0x4c, 0x84, 0x40, 0xb7, 0xcd,
  0xe1, 0x16, 0xb3, 0xd4, 0xba, 0xd9, 0xe4, 0xd3, 0x7d, 0xb5, 0xfb, 0xec,
  0x29, 0x72, 0xf8, 0x63, 0x96, 0xdf, 0xeb, 0x33, 0x3d, 0x49, 0xb4, 0x0b,
  0xa9, 0x05, 0x70, 0x9a, 0xe4, 0x37, 0xc1, 0xc7, 0xdc, 0x30, 0xf6, 0x1c,
  0xb5, 0x49, 0xcc, 0x02, 0x04, 0x16, 0x37, 0x81, 0x1d, 0x43, 0x8b, 0x6e,
  0x46, 0xe7, 0x86, 0xb6, 0x2b, 0xcd, 0xdb, 0x33, 0x4d, 0x45, 0xcf, 0x4b,
  0x27, 0xe2, 0xba, 0x95, 0x7f, 0x93, 0x3c, 0x15, 0xed, 0xab, 0xe4, 0x50,
  0x77, 0x53, 0xf5, 0x7a, 0x9a, 0xb4, 0x95, 0x41, 0x1a, 0x4d, 0x47, 0x16,
  0xcb, 0xd1, 0x12, 0xa5, 0xeb, 0x74, 0x4a, 0xb6, 0x46, 0xc8, 0x81, 0xc1,
  0x4e, 0xa9, 0x7f, 0xe9, 0x92, 0xc0, 0x8c, 0x7b, 0xe8, 0x2c, 0x5d, 0x96,

  0xcf, 0xb8, 0x23, 0x0e, 0xd3, 0xe5, 0x77, 0x8c, 0xb3, 0x98, 0x43, 0xfa,
  0xee, 0x06, 0x34, 0xa9, 0xf0, 0xd1, 0x21, 0x8c, 0x63, 0xe7, 0x66, 0x0d,
  0x78, 0xa0, 0x2b, 0x71, 0x91, 0xac, 0xc7, 0xb7, 0x71, 0x3f, 0xba, 0x38,
  0x1e, 0x5c, 0xe2, 0x27, 0x80, 0x3a, 0xb2, 0x29, 0xcc, 0xe2, 0x6c, 0xd0,
  0x18, 0x2e, 0x79, 0xa8, 0x92, 0xac, 0x0c, 0x39, 0x28, 0xfd, 0x6d, 0xd6,
  0x10, 0x82, 0xe6, 0xd6, 0xc8, 0x64, 0xc1, 0xd2, 0xa7, 0xa0, 0x38, 0xc6,

  0x78, 0x31, 0x01, 0x23, 0xe2, 0xab, 0xe6, 0x7d, 0x68, 0x01, 0x37, 0x7f,
  0xbc, 0x61, 0x5c, 0x35, 0x5d, 0xa5, 0x05, 0x13, 0x2b, 0x2c, 0x97, 0x53,
  0xb4, 0x41, 0x4a, 0xb5, 0x1b, 0xcd, 0x17, 0x60, 0x37, 0x7c, 0x55, 0x41,
  0x96, 0x6d, 0x3c, 0x89, 0x60, 0x35, 0x61, 0x1a, 0x15, 0xa9, 0x48, 0x59,
  0x6e, 0x47, 0xc5, 0x54, 0x0a, 0x4a, 0x19, 0x4d, 0x29, 0xba, 0x36, 0x4a,
  0x40, 0x05, 0x1d, 0x07, 0x94, 0x00, 0x3e, 0x14, 0x35, 0x9c, 0x26, 0x92,
  0x26, 0x1a, 0xf0, 0xff, 0xd0, 0x40, 0x23, 0x56, 0xd1, 0x90, 0xea, 0x29,
  0x4a, 0x91, 0xa2, 0x9f, 0x14, 0x15, 0x66, 0x36, 0xd5, 0x71, 0x3c, 0x73,
  0xff, 0xbf, 0xc9, 0x96, 0xb0, 0xf1, 0x01, 0x69, 0x8c, 0x4a, 0x15, 0x8a,
  0x19, 0xdc, 0xc0, 0x55, 0x8e, 0xbd, 0xbd, 0xed, 0xba, 0x13, 0x9b, 0x88,
  0x0d, 0x0c, 0x80, 0x24, 0x3a, 0xc4, 0xff, 0x3e, 0xc9, 0x95, 0x29, 0x6f,
  0x85, 0x9e, 0x97, 0x60, 0x27, 0xf3, 0x4e, 0xf1, 0xc5, 0x44, 0x75, 0x06,


  0xed, 0x49, 0x2f, 0x22, 0xb7, 0x3e, 0xf2, 0xbd, 0x6e, 0xf4, 0x06, 0xb3,

  0xb1, 0x4f, 0xce, 0xbf, 0x21, 0x1a, 0xb8, 0xdc, 0xde, 0xa1, 0xd0, 0x92,
  0xb1, 0x1e, 0xc6, 0xf4, 0x91, 0x92, 0x1d, 0x09, 0x1c, 0x1a, 0xf6, 0x15,
  0x5f, 0x92, 0x09, 0x5d, 0x62, 0xa3, 0x18, 0x13, 0xa4, 0xd4, 0xa1, 0xf1,
  0xa7, 0x93, 0x5f, 0x9e, 0x21, 0x7a, 0xd2, 0x95, 0x1d, 0x14, 0xc7, 0xcc,
  0x6d, 0xf2, 0x68, 0xff, 0x46, 0xbb, 0xea, 0x6c, 0xb5, 0x7d, 0xf8, 0xd0,
  0xd9, 0xa4, 0xbf, 0x1e, 0x60, 0x7a, 0x12, 0x68, 0xa9, 0xe3, 0x9f, 0x7e,
  0x9d, 0x44, 0x0c, 0xef, 0x7c, 0xc0, 0xd9, 0x42, 0x7e, 0x2e, 0x4d, 0x04,
  0xe2, 0xb8, 0x3f, 0xb3, 0x78, 0xc9, 0x85, 0xc7, 0x34, 0x79, 0x24, 0xf8,
  0x38, 0x33, 0x2a, 0x49, 0x8f, 0xb3, 0xbf, 0x28, 0x1b, 0xac, 0xb9, 0xf7,
  0xa3, 0x7c, 0xe6, 0xc9, 0xba, 0x9a, 0xe1, 0x4a, 0xfa, 0xfc, 0x8e, 0xc8,
  0x37, 0x32, 0xe6, 0x98, 0xd9, 0x88, 0x16, 0xdd, 0xbc, 0x0e, 0x46, 0xa7,

  0x26, 0xf5, 0xcb, 0x4a, 0x46, 0x7c, 0x93, 0x5f, 0xa4, 0x18, 0x37, 0x4d,

  0x8d, 0x35, 0xa5, 0x7e, 0x64, 0x35, 0xde, 0x90, 0xfa, 0x0f, 0x67, 0xab,
  0x7b, 0x0b, 0x87, 0x8e, 0x7e, 0x26, 0xb3, 0x6b, 0x5d, 0xd7, 0xd3, 0x04,
  0x4c, 0xae, 0x48, 0x55, 0x3f, 0x97, 0x4c, 0x52, 0x3f, 0x86, 0xc1, 0xe9,
  0x06, 0xe2, 0x8d, 0x92, 0xb4, 0xaa, 0x9a, 0x2f, 0x9f, 0xc9, 0x0f, 0x2d,
  0xd1, 0x8e, 0xb3, 0x25, 0x9d, 0xd0, 0x51, 0x54, 0x1c, 0xf9, 0x94, 0x2b,
  0x94, 0xde, 0xe1, 0xd6, 0x29, 0xed, 0x58, 0xc7, 0x66, 0x5d, 0xf5, 0xcd,
  0x33, 0xfc, 0x33, 0x43, 0x9f, 0xd8, 0x1f, 0x02, 0x04, 0x19, 0xa4, 0x45,
  0xf4, 0x8d, 0x4b, 0xec, 0x83, 0x14, 0x18, 0xcc, 0x80, 0x94, 0x14, 0xf4,
  0xd9, 0xe3, 0xb3, 0x0c, 0x3a, 0x55, 0x40, 0xd4, 0x6e, 0x73, 0x8c, 0x39,
  0xcf, 0xda, 0x69, 0x12, 0x08, 0xb0, 0xf1, 0x0a, 0xf3, 0x49, 0x98, 0x76,
  0xd1, 0xf7, 0x9a, 0x8e, 0x6e, 0x29, 0xf2, 0x22, 0x12, 0xca, 0x5d, 0x9f,
  0x26, 0xed, 0x71, 0xba, 0x69, 0xe0, 0x08, 0xc8, 0x96, 0x44, 0xa7, 0x30,
  0xd2, 0x24, 0x4a, 0xe7, 0x34, 0x63, 0x9d, 0xad, 0xd5, 0xcb, 0x00, 0x73,
  0xfd, 0xf8, 0xe6, 0xf4, 0x2a, 0x5a, 0x47, 0x0d, 0xbc, 0x69, 0xe4, 0xaa,
  0x78, 0xdf, 0x4c, 0xaa, 0xd1, 0xe6, 0xe2, 0x36, 0xdd, 0x04, 0x63, 0x73,
  0x3c, 0xdc, 0x30, 0x46, 0x14, 0x7d, 0x0e, 0xa9, 0xd0, 0x18, 0xa6, 0x6a,
  0x99, 0x92, 0x69, 0xea, 0xb9, 0x1e, 0xad, 0xa9, 0xca, 0xe5, 0x2d, 0xc6,
  0x46, 0xe5, 0x6d, 0x62, 0x82, 0xa6, 0x10, 0x0d, 0xa7, 0x46, 0x50, 0x60,
  0x27, 0x61, 0xbf, 0x34, 0xd8, 0xd8, 0xcd, 0xbb, 0xca, 0xa9, 0x8f, 0xe2,
  0xc8, 0x61, 0x07, 0x8e, 0xe6, 0xeb, 0x89, 0xb8, 0xb0, 0xda, 0x6f, 0x17,
  0x33, 0x2d, 0x71, 0x53, 0x16, 0x28, 0x92, 0xc6, 0xe8, 0x06, 0x6c, 0x0e,
  0x47, 0x9a, 0x5c, 0xa7, 0xbf, 0xd9, 0x89, 0x4c, 0x6e, 0x29, 0xec, 0x32,
  0x27, 0x4f, 0x9b, 0xc0, 0x17, 0x90, 0xd8, 0x64, 0x59, 0x1a, 0x3f, 0x66,
  0x6c, 0xce, 0xab, 0x1f, 0x62, 0xa8, 0xce, 0x71, 0x1a, 0x9d, 0x0b, 0x74,
  0x63, 0xba, 0x59, 0xae, 0xb5, 0x2e, 0x93, 0xa2, 0xa3, 0xea, 0xfc, 0xd8,
  0x89, 0x9c, 0xdc, 0xc4, 0x5a, 0x8a, 0x62, 0x6a, 0xb3, 0x87, 0x1c, 0x21,
  0x00, 0x12, 0xd9, 0xdc, 0xe1, 0x71, 0x32, 0x4b, 0xe7, 0x29, 0xd9, 0x5e,
  0xee, 0x14, 0x7a, 0xa1, 0x00, 0xa1, 0x9d, 0xd2, 0x8f, 0xfe, 0x94, 0x34,
  0xdf, 0x37, 0xc6, 0x5f, 0xc3, 0x94, 0xc8, 0x23, 0xc6, 0xe9, 0x98, 0x61,
  0xab, 0xb9, 0x3e, 0x21, 0x93, 0x31, 0xbc, 0x22, 0x6c, 0x6c, 0xee, 0x52,
  0x9b, 0x2a, 0x6f, 0x5d, 0x22, 0x7a, 0xe9, 0x99, 0xa9, 0x45, 0x8b, 0xdb,
  0x51, 0xb9, 0xbd, 0xdd, 0x14, 0x74, 0xa5, 0xa5, 0x28, 0xb1, 0xdf, 0x63,

  0x43, 0x98, 0x1f, 0xae, 0x4e, 0xa3, 0x75, 0xac, 0x10, 0x79, 0xb9, 0xbf,
  0xbd, 0xb3, 0xe1, 0xa6, 0x95, 0x28, 0x03, 0xf0, 0xe5, 0xe6, 0x23, 0x87,
  0x64, 0x9d, 0x0b, 0x38, 0xcb, 0x47, 0xb1, 0x68, 0x1c, 0x76, 0xe8, 0x71,
  0x72, 0x97, 0x8e, 0xb0, 0x40, 0x07, 0xa3, 0xf1, 0xc8, 0x83, 0x87, 0x09,
  0x4c, 0xd2, 0xdb, 0x71, 0x9b, 0xce, 0xcb, 0xb3, 0x07, 0x13, 0xc9, 0x68,
  0xca, 0x98, 0x34, 0x0d, 0x34, 0x50, 0xc9, 0xde, 0xb9, 0xb3, 0x96, 0x28,
  0x41, 0xdc, 0xe2, 0x09, 0xc2, 0x75, 0x71, 0xf9, 0x0c, 0xe9, 0x18, 0x5d,

  0x1b, 0xf8, 0xe9, 0xf5, 0x64, 0xb3, 0x84, 0xf5, 0x9a, 0xd8, 0x31, 0xa6,
  0x9f, 0x34, 0x0f, 0x50, 0xe6, 0xd4, 0x41, 0x41, 0x92, 0x91, 0x70, 0x8f,
  0xed, 0xa0, 0x66, 0xf7, 0x5d, 0x4d, 0xa8, 0x3e, 0xaa, 0xef, 0x29, 0x27,
  0xc2, 0x01, 0xcd, 0x25, 0x3c, 0xe4, 0xef, 0xe4, 0x64, 0xaa, 0xb3, 0x4f,
  0x39, 0x1e, 0x3c, 0x7b, 0xf1, 0x1a, 0x0e, 0x59, 0x51, 0x50, 0x7e, 0x1b,
  0xeb, 0xe3, 0x9e, 0x1c, 0x87, 0xd7, 0x37, 0x55, 0x08, 0x91, 0x14, 0x52,
  0x7f, 0x23, 0x7b, 0x7e, 0x80, 0x79, 0x92, 0xa7, 0xe7, 0x56, 0x1c, 0x3d,
  0xa4, 0x14, 0x9b, 0xfc, 0x0d, 0xdf, 0x57, 0xac, 0x82, 0x1f, 0x8e, 0x68,
  0x94, 0x8f, 0x1b, 0x26, 0x3b, 0x6e, 0x82, 0x23, 0xf0, 0x88, 0xfb, 0x71,
  0xa8, 0x92, 0x38, 0x5e, 0xd8, 0x93, 0x8d, 0x94, 0xca, 0xee, 0xf5, 0x5f,

  0xc4, 0x03, 0x43, 0x1e, 0x35, 0x62, 0x81, 0xbf, 0x8a, 0x03, 0x3e, 0xe1,
  0x73, 0x3a, 0xf6, 0x24, 0x76, 0x69, 0x94, 0x21, 0xab, 0xab, 0x61, 0xa6,
  0x78, 0x44, 0x1b, 0xe7, 0x5b, 0x34, 0x98, 0x33, 0x48, 0x29, 0x01, 0x98,
  0xf0, 0xd5, 0xb8, 0x9b, 0xec, 0xd8, 0x81, 0xeb, 0xb2, 0x7e, 0xc6, 0x41,
  0xca, 0xe8, 0xf2, 0xed, 0x0f, 0xca, 0x2d, 0x43, 0x06, 0x3c, 0x39, 0xa2,
  0xbe, 0x30, 0xa9, 0x61, 0x60, 0x51, 0x60, 0x9a, 0x5a, 0x2a, 0x29, 0x9f,
  0xec, 0x26, 0xa2, 0x70, 0xf8, 0x86, 0xcd, 0x64, 0xc4, 0xad, 0xee, 0x1c,
  0xd2, 0xef, 0x9a, 0xb1, 0xa6, 0x9c, 0x2d, 0x99, 0x2f, 0x7f, 0xe4, 0x5f,
  0x33, 0x8f, 0x85, 0x7f, 0x55, 0x37, 0xcb, 0xf9, 0x10, 0xce, 0x33, 0xab,
  0xbe, 0xec, 0x44, 0x1c, 0x6c, 0x9d, 0xc8, 0x7e, 0xae, 0x30, 0x3b, 0x53,
  0x2d, 0xd6, 0x51, 0xdf, 0x62, 0x6d, 0xd7, 0x78, 0x76, 0x5a, 0x38, 0x60,
  0x93, 0xf3, 0xe0, 0xf0, 0xd8, 0x97, 0xed, 0xa9, 0x7a, 0x1f, 0x80, 0x3c,
  0x7f, 0x7c, 0xff, 0x97, 0x1f, 0x5f, 0xed, 0xee, 0xc5, 0x2f, 0xe3, 0xd1,
  0x8b, 0xc9, 0xe7, 0xf1, 0xfe, 0x78, 0xff, 0xe5, 0xab, 0x9d, 0xcf, 0xf7,
  0xe3, 0x97, 0x7b, 0x93, 0xf8, 0xc5, 0x76, 0xb2, 0xfd, 0x6a, 0xb2, 0xb3,
  0x3b, 0x1e, 0x4f, 0x92, 0xcf, 0xc7, 0x2f, 0xe3, 0x4e, 0x9f, 0xcc, 0x2f,
  0x9d, 0xba, 0xcf, 0x6a, 0x35, 0xf0, 0x16, 0x47, 0x83, 0x77, 0x47, 0xbd,
  0xed, 0xe8, 0x26, 0x79, 0xd0, 0x0b, 0xc6, 0x1e, 0x4d, 0x93, 0x72, 0x97,
  0x48, 0x52, 0x75, 0xfb, 0x62, 0xb5, 0x4a, 0x10, 0x53, 0xa6, 0xd1, 0x57,
  0x42, 0x1a, 0x30, 0xef, 0xa2, 0x6e, 0x2b, 0x27, 0xd5, 0x19, 0xff, 0xe1,
  0x81, 0xfa, 0xec, 0x71, 0x5d, 0xcd, 0xcb, 0x7f, 0x06, 0xef, 0xcc, 0xde,
  0xc7, 0x23, 0x50, 0x92, 0x60, 0x4f, 0xe4, 0xc1, 0x01, 0x98, 0xb6, 0xc0,
  0xa6, 0xbb, 0x91, 0xfc, 0x05, 0xbd, 0xc4, 0xce, 0x18, 0xdf, 0x14, 0xf9,
  0x72, 0x71, 0x99, 0xcf, 0xd2, 0xd1, 0xe3, 0xaa, 0xe1, 0xdc, 0xc7, 0x6a,
  0xbf, 0x38, 0x61, 0x16, 0x9e, 0x96, 0xc9, 0xef, 0x68, 0x5a, 0x39, 0xec,
  0xf8, 0x19, 0xb6, 0x55, 0x6f, 0x94, 0x2e, 0x6e, 0x30, 0xce, 0x7b, 0x48,
  0x29, 0x7e, 0x18, 0x9a, 0xe1, 0x1f, 0x84, 0x6d, 0xaa, 0x81, 0xdc, 0xc8,
  0x52, 0xce, 0x53, 0xdf, 0x16, 0x8d, 0x2b, 0xd5, 0xfa, 0x37, 0x75, 0x53,
  0x49, 0x5a, 0x69, 0xea, 0xf9, 0xf1, 0xec, 0x87, 0xf8, 0xb6, 0xab, 0xb6,
  0xcd, 0xce, 0x0b, 0xf9, 0x55, 0x3f, 0xba, 0xa2, 0x38, 0xf9, 0x72, 0xc1,
  0xe6, 0x05, 0xf9, 0xf3, 0xf9, 0x77, 0xcd, 0x8b, 0x86, 0x93, 0x17, 0x8a,
  0xe1, 0x2a, 0x3c, 0xd8, 0xd1, 0x0f, 0x57, 0x67, 0x07, 0xcd, 0x7d, 0xa2,
  0x4a, 0xa3, 0xf2, 0x60, 0x73, 0x93, 0x42, 0x3e, 0x37, 0xf1, 0xc3, 0x43,
  0xbf, 0x4c, 0x36, 0xc7, 0xf9, 0xa8, 0xdc, 0x2c, 0xcb, 0x99, 0xee, 0x46,
  0xbd, 0xf0, 0xef, 0x13, 0x78, 0x73, 0xf3, 0x39, 0xb1, 0xad, 0x64, 0xdc,

  0x2b, 0x4b, 0x2f, 0x37, 0x68, 0x70, 0xac, 0x99, 0x07, 0x27, 0x92, 0x93,
  0x46, 0x72, 0xae, 0x07, 0xbb, 0x3b, 0x18, 0xbc, 0x8b, 0xf4, 0x65, 0xda,
  0x5e, 0x13, 0x12, 0x37, 0x79, 0x39, 0xdd, 0x80, 0x1a, 0x16, 0x0b, 0xc3,
  0xfe, 0xc2, 0x75, 0xe8, 0xa0, 0x3a, 0x9d, 0xf3, 0x1f, 0x52, 0xb8, 0x92,
  0x56, 0x2b, 0xb3, 0xf8, 0x5e, 0x34, 0x1c, 0x20, 0x66, 0x11, 0xe1, 0xf8,
  0xbf, 0x3a, 0xc1, 0xe2, 0xc8, 0x3e, 0x69, 0x3d, 0x42, 0xcd, 0xca, 0x74,
  0xa0, 0xde, 0x69, 0x5e, 0x80, 0xf0, 0x98, 0x97, 0x21, 0x2f, 0xa8, 0xde,
  0xf2, 0x92, 0xd5, 0xbe, 0x92, 0x13, 0x11, 0x61, 0x98, 0xcc, 0x19, 0x1c,
  0x8e, 0x91, 0x12, 0x18, 0xfb, 0xee, 0x61, 0x05, 0xe3, 0x5b, 0x7a, 0x78,
  0x6d, 0x5e, 0xb4, 0x65, 0x66, 0x83, 0x1f, 0x24, 0x8e, 0x61, 0xb2, 0x52,
  0x55, 0xe6, 0x59, 0x08, 0x94, 0xf8, 0x4f, 0x62, 0x02, 0x75, 0x88, 0xa2,
  0xc8, 0x1d, 0xa5, 0xb6, 0xf7, 0x2d, 0x19, 0x97, 0x20, 0x1d, 0xd3, 0xa9,
  0x86, 0xd7, 0x5b, 0x72, 0xec, 0x50, 0x74, 0x55, 0x94, 0xb8, 0x2c, 0xb5,
  0xe0, 0x28, 0x14, 0x30, 0x85, 0x8d, 0x52, 0x4b, 0x24, 0x35, 0x93, 0xd3,
  0x81, 0x6a, 0x25, 0xf0, 0xde, 0x4d, 0xc0, 0x82, 0x1f, 0xfb, 0x38, 0xa6,
  0x51, 0xe9, 0xbd, 0xa4, 0xe1, 0xc5, 0x7d, 0xe1, 0x24, 0xb6, 0xa1, 0x56,
  0x46, 0x6e, 0x06, 0x78, 0xa6, 0x69, 0xed, 0x51, 0xc2, 0xad, 0xd1, 0xf9,
  0x42, 0xf5, 0xad, 0xcd, 0xf5, 0x68, 0xde, 0xbd, 0xee, 0x6d, 0x4a, 0x15,
  0xd5, 0x31, 0x25, 0xf5, 0x87, 0x44, 0x7b, 0xee, 0x04, 0x69, 0x71, 0x40,
  0x5f, 0xe6, 0x55, 0x26, 0x6d, 0x52, 0xcb, 0x94, 0x48, 0x21, 0x00, 0x0e,
  0x04, 0x62, 0x0f, 0xd3, 0xcd, 0xb1, 0x8e, 0x7e, 0x96, 0x5b, 0x05, 0x0b,
  0x08, 0x0f, 0x78, 0x21, 0x95, 0x22, 0xf6, 0x3d, 0xbe, 0xcd, 0x05, 0x49,
  0x9c, 0x44, 0xc8, 0x85, 0x75, 0x9c, 0xed, 0xc5, 0x3f, 0x23, 0xf1, 0x35,
  0xd4, 0x18, 0xb9, 0xe5, 0x67, 0x78, 0x7e, 0x21, 0xd7, 0x90, 0xa4, 0xe4,
  0x73, 0x95, 0x63, 0x4a, 0xf5, 0xbb, 0x52, 0xf1, 0xc9, 0x15, 0x06, 0xea,
  0xd9, 0x2e, 0x73, 0x49, 0xd9, 0xc4, 0x89, 0xe2, 0x3c, 0x79, 0x8e, 0x4d,
  0x52, 0x37, 0xd5, 0x9c, 0x35, 0x63, 0x24, 0x2e, 0x6d, 0xa2, 0x7e, 0xe9,
  0x47, 0x2b, 0xed, 0x66, 0x86, 0xac, 0x57, 0xaf, 0xe8, 0x81, 0x26, 0x52,

  0x24, 0xfa, 0x85, 0x2c, 0x6f, 0x4e, 0x4a, 0xe7, 0x11, 0xca, 0x47, 0xd5,
  0xc4, 0x7e, 0x67, 0x02, 0x9a, 0xe0, 0x6f, 0x4e, 0xb9, 0x25, 0x7b, 0x33,
  0x89, 0xec, 0x23, 0x91, 0xb5, 0x33, 0xed, 0x31, 0x92, 0xbf, 0x81, 0xca,
  0x35, 0x4a, 0x9e, 0xfa, 0x01, 0xce, 0xe9, 0xf5, 0x46, 0xc8, 0x4f, 0x6c,
  0x47, 0x52, 0x8a, 0xc2, 0x7b, 0x3a, 0xcb, 0x4b, 0x8d, 0xbf, 0xa0, 0x72,
  0xc1, 0x45, 0xb7, 0xc0, 0x0d, 0xbe, 0x97, 0x1f, 0xf0, 0xd1, 0x34, 0x86,
  0xe3, 0xa7, 0xba, 0x32, 0xc5, 0x89, 0x55, 0x36, 0xc4, 0x56, 0xb5, 0x95,
  0xc2, 0xa8, 0x6d, 0x18, 0x6b, 0xf2, 0x20, 0xfa, 0xf1, 0xc7, 0x6e, 0x04,

  0x46, 0x72, 0x63, 0xb8, 0x1f, 0x2b, 0xf8, 0x29, 0xd0, 0xe2, 0x8f, 0x5c,
  0xad, 0xf4, 0xe3, 0x1d, 0x1a, 0x81, 0xe8, 0x60, 0x2e, 0x67, 0x18, 0x3d,
  0x62, 0x35, 0xbb, 0xee, 0x95, 0xe3, 0x62, 0xe8, 0x15, 0xa9, 0x59, 0xd6,
  0x6e, 0xe7, 0x54, 0x4c, 0x38, 0xb0, 0xe5, 0x3c, 0x13, 0xeb, 0x84, 0x89,
  0x93, 0xee, 0x3d, 0xc9, 0x81, 0xb5, 0x3f, 0xae, 0x59, 0x42, 0x0a, 0xed,
  0x5d, 0x91, 0xb0, 0xa4, 0x27, 0x51, 0x95, 0x3a, 0x62, 0x4a, 0x4b, 0x87,
  0xc9, 0xdc, 0x8c, 0x38, 0x5c, 0x8a, 0xcc, 0xf4, 0x02, 0x9d, 0xeb, 0x5c,
  0x03, 0xd6, 0x14, 0xe3, 0xd6, 0x94, 0xc4, 0xc2, 0xb8, 0xc5, 0xcd, 0x63,
  0x89, 0x99, 0x1c, 0x32, 0x1b, 0xef, 0xf6, 0xb4, 0x26, 0x18, 0xcb, 0xde,
  0x63, 0x45, 0x0f, 0xf2, 0x01, 0x64, 0x7e, 0x35, 0xd6, 0x09, 0x33, 0x5a,
  0xeb, 0xad, 0x99, 0x58, 0x98, 0xe4, 0xcb, 0x78, 0x89, 0xf4, 0x26, 0x39,
  0xdb, 0x26, 0x1f, 0x7a, 0x9f, 0x74, 0x92, 0xe2, 0x72, 0x37, 0xdd, 0xd1,
  0x56, 0xb6, 0x63, 0x69, 0xaa, 0x46, 0xf1, 0xe5, 0xfb, 0xc2, 0x7f, 0x02,
  0x0e, 0x27, 0x4a, 0x8b, 0x24, 0xd3, 0x43, 0x07, 0x20, 0x6f, 0x88, 0x0d,
  0x0f, 0xf5, 0x7a, 0x04, 0x32, 0xb2, 0x60, 0x60, 0x10, 0x24, 0x09, 0xca,
  0x3c, 0x78, 0xc4, 0x32, 0xb0, 0xc5, 0xcc, 0xe3, 0xb7, 0x92, 0x0a, 0xa8,
  0x95, 0xd6, 0x78, 0xc1, 0x11, 0x8d, 0xe2, 0x3e, 0x13, 0x34, 0x81, 0x41,
  0x4e, 0x5e, 0x99, 0x11, 0xe5, 0x30, 0x48, 0xba, 0x8c, 0x14, 0x94, 0x05,
  0xac, 0x40, 0x94, 0x81, 0x9e, 0x0e, 0x84, 0xf3, 0x79, 0x1d, 0x75, 0xda,
  0x35, 0xa1, 0x4e, 0xf3, 0x0d, 0xca, 0x80, 0xb4, 0x2e, 0x4e, 0x29, 0x96,
  0xa7, 0x89, 0xac, 0x4b, 0x26, 0x5d, 0xef, 0xef, 0x9c, 0xd0, 0xc6, 0xf5,
  0x5c, 0x22, 0x5f, 0x37, 0x38, 0x41, 0xb8, 0x0c, 0x44, 0xf6, 0x6d, 0x96,
  0x95, 0x43, 0x1f, 0x36, 0x4f, 0x29, 0x25, 0xf7, 0x35, 0x49, 0x2f, 0x96,




  0x76, 0xce, 0xd3, 0x5e, 0x28, 0x5e, 0xdf, 0xc6, 0x72, 0x13, 0xfc, 0x9e,
  0xb8, 0xa4, 0x55, 0x74, 0x98, 0x1b, 0xbd, 0x98, 0x11, 0x48, 0x87, 0x16,
  0xba, 0x90, 0x4a, 0xe4, 0xed, 0xce, 0xf6, 0x86, 0x29, 0x8d, 0x24, 0xa4,
  0x0d, 0xce, 0xcc, 0x16, 0x3d, 0xa1, 0x73, 0x93, 0x73, 0x2e, 0x51, 0xe7,
  0x00, 0xab, 0xf6, 0xe4, 0x36, 0xd2, 0x1a, 0x15, 0x03, 0xa1, 0x31, 0x1c,
  0x65, 0x6a, 0xbd, 0xbb, 0x78, 0x7f, 0x52, 0xcf, 0xc0, 0xa5, 0x9f, 0x84,
  0x9c, 0xaf, 0xc0, 0xae, 0xde, 0x02, 0x87, 0x61, 0x1a, 0x88, 0x3d, 0x6d,

  0x8e, 0x69, 0x0b, 0xa6, 0x35, 0x4d, 0xaa, 0xc5, 0xfd, 0x32, 0x1d, 0xaf,
  0x6f, 0x20, 0x8d, 0x60, 0xad, 0x49, 0x8f, 0x0a, 0x9c, 0xd8, 0x34, 0x2c,
  0xa3, 0x75, 0x56, 0xd0, 0x8b, 0xa4, 0x5a, 0x16, 0x19, 0x3b, 0xcc, 0x71,
  0xee, 0x4d, 0x23, 0x0b, 0xa4, 0x33, 0x8b, 0x3a, 0xd7, 0x39, 0x20, 0x80,
  0x39, 0x9c, 0xc2, 0xc4, 0x03, 0x82, 0xb9, 0x7b, 0x61, 0xf2, 0x3e, 0xe8,
  0xe0, 0x69, 0x2d, 0x9e, 0xfc, 0x72, 0x77, 0x22, 0x3a, 0xba, 0xbc, 0x7c,
  0x73, 0x74, 0x7d, 0x64, 0xd6, 0x46, 0x02, 0x9a, 0x98, 0x0b, 0x69, 0xc8,
  0xc0, 0x87, 0x50, 0x6b, 0xc2, 0x27, 0xd7, 0xfe, 0xf4, 0x61, 0x70, 0x72,
  0xd5, 0x3c, 0xd8, 0xcb, 0xab, 0x0b, 0x44, 0x23, 0xfa, 0xd3, 0x8f, 0x47,
  0x8b, 0xc5, 0x4c, 0x83, 0x82, 0x6f, 0xe2, 0x2a, 0x5e, 0xf3, 0x6e, 0xf5,
  0xce, 0x06, 0xce, 0xef, 0xde, 0xcc, 0x6f, 0x22, 0x42, 0x8e, 0x4c, 0xfd,
  0xa8, 0x8f, 0x07, 0x5a, 0x8c, 0x34, 0xfd, 0xd6, 0xec, 0x06, 0x6d, 0x00,
  0x65, 0xcf, 0xb6, 0x2f, 0x24, 0xb7, 0x9c, 0x4c, 0x13, 0xc9, 0x74, 0xb3,
  0x66, 0x60, 0x64, 0x27, 0xa3, 0x65, 0xa5, 0x24, 0x4f, 0xf4, 0x85, 0x25,
  0xdc, 0xcd, 0x7d, 0xf1, 0x8e, 0xc7, 0x86, 0x51, 0x98, 0x0b, 0x10, 0x82,
  0x00, 0x10, 0x1a, 0xa5, 0x48, 0xeb, 0x6c, 0x99, 0x8b, 0x05, 0x68, 0x6a,
  0x9c, 0x70, 0x58, 0x85, 0x10, 0x05, 0x78, 0x4a, 0xde, 0x86, 0xfc, 0x11,
  0x6e, 0x63, 0x2f, 0x3a, 0x91, 0x52, 0x37, 0x5a, 0x38, 0xfc, 0xc0, 0x7b,
  0xa8, 0x32, 0xe6, 0x83, 0xb0, 0xfb, 0x30, 0xaf, 0x70, 0x50, 0x36, 0x3a,
  0x4d, 0x11, 0xc0, 0x75, 0xad, 0xf0, 0x10, 0x4e, 0x1b, 0x37, 0x9d, 0xac,
  0xa7, 0x4e, 0x20, 0xe9, 0xa9, 0x17, 0x4f, 0x91, 0xbc, 0xe0, 0x51, 0xd0,
  0xae, 0xc1, 0x68, 0xc2, 0x7f, 0x6d, 0x6e, 0xf7, 0xb7, 0x3a, 0xfe, 0xe4,
  0xf1, 0xb2, 0x10, 0x42, 0x8a, 0x89, 0xaa, 0x21, 0x37, 0xac, 0xf2, 0xfc,
  0xc9, 0xf9, 0x31, 0x0b, 0x03, 0xfd, 0x74, 0x01, 0xe3, 0x07, 0xa7, 0xd2,
  0xbb, 0xf0, 0xb2, 0x40, 0x30, 0x73, 0xb7, 0x50, 0xa6, 0x08, 0x3c, 0x31,
  0xcb, 0xef, 0x71, 0x25, 0x40, 0x6a, 0xb3, 0x59, 0x0d, 0xca, 0xa6, 0x13,
  0xde, 0xe6, 0x8c, 0x50, 0xa3, 0x92, 0xe6, 0x6e, 0x07, 0x23, 0xd7, 0xaa,
  0x7c, 0xba, 0x1a, 0x9e, 0x49, 0x79, 0x25, 0x2b, 0xd2, 0x50, 0x82, 0x8b,
  0x24, 0x00, 0x5c, 0xce, 0xe3, 0x7b, 0x33, 0x37, 0x33, 0xa3, 0xa7, 0xe9,
  0x21, 0x3d, 0x1c, 0x04, 0xb5, 0xd2, 0x43, 0x2e, 0x54, 0xf7, 0x6c, 0xf9,
  0xf7, 0xf1, 0x43, 0x3a, 0x5f, 0xce, 0xe9, 0x63, 0x48, 0xdb, 0xf2, 0x98,
  0xc4, 0x13, 0xc8, 0xab, 0xc8, 0xe9, 0x29, 0x44, 0xe4, 0x6b, 0x65, 0xe4,
  0x58, 0xf4, 0x21, 0x21, 0x03, 0x22, 0xb9, 0x6f, 0x97, 0x47, 0xca, 0x02,
  0x05, 0x1c, 0xca, 0x86, 0x37, 0x00, 0xf4, 0x83, 0x18, 0x73, 0x0e, 0xca,
  0xdc, 0x24, 0xec, 0x04, 0xd8, 0x39, 0x23, 0x25, 0x88, 0x0e, 0xe7, 0xe4,
  0xab, 0x26, 0x45, 0x9a, 0x8f, 0xcd, 0xbd, 0x41, 0xfd, 0x31, 0xcd, 0x96,
  0xb0, 0xcf, 0xec, 0x4b, 0xe6, 0x20, 0x04, 0xfe, 0xca, 0xf3, 0x10, 0x52,
  0x56, 0xfd, 0x80, 0x8a, 0x25, 0x34, 0x05, 0xf5, 0x65, 0x7f, 0x77, 0xa7,
  0xbf, 0xd5, 0xad, 0x19, 0xf4, 0x02, 0x28, 0x01, 0xb7, 0x6b, 0x94, 0xce,
  0x4d, 0xb1, 0x69, 0xff, 0x77, 0x73, 0xdc, 0x50, 0x46, 0xf8, 0x3c, 0x7e,
  0xa0, 0xe3, 0x0b, 0x1e, 0x6b, 0x1e, 0x1d, 0xbe, 0xbb, 0x18, 0x5c, 0x6f,
  0x1f, 0x5c, 0x5e, 0x5c, 0xc1, 0x7f, 0xf1, 0xef, 0x3b, 0xf4, 0xf7, 0x1d,
  0xcf, 0xaa, 0x7c, 0x2b, 0x19, 0xb4, 0x5a, 0xac, 0x43, 0x1a, 0x0a, 0x69,

  0x34, 0xbc, 0x9b, 0x91, 0x33, 0x10, 0xea, 0xe5, 0xc4, 0x06, 0x47, 0xa6,
  0x9c, 0xb1, 0x79, 0xc4, 0xce, 0xa7, 0x34, 0xc9, 0xae, 0x1f, 0xf9, 0x89,
  0x7c, 0x69, 0xa5, 0xda, 0x94, 0x14, 0xc2, 0x6b, 0x89, 0x7d, 0xd3, 0xd7,
  0xcd, 0x45, 0xcc, 0x52, 0x9f, 0xa3, 0x60, 0x75, 0x94, 0x1b, 0x56, 0xff,
  0xd5, 0x68, 0x06, 0xda, 0x7d, 0x82, 0xb9, 0x24, 0xe3, 0x84, 0x03, 0x2c,
  0xf8, 0x93, 0x90, 0x61, 0x02, 0xd7, 0x4f, 0x4a, 0x16, 0xbc, 0x04, 0x43,
  0xa2, 0x48, 0x8d, 0xea, 0xc0, 0x6c, 0x60, 0x8e, 0x29, 0x68, 0xe2, 0xbc,
  0x1d, 0x59, 0xe2, 0x55, 0x08, 0x30, 0x88, 0x9c, 0xeb, 0xc4, 0xa2, 0x0a,
  0x7d, 0xaa, 0xb5, 0x3f, 0xbf, 0xb8, 0x8e, 0xe2, 0xc9, 0x44, 0x81, 0x01,
  0xb0, 0x2c, 0x01, 0x35, 0xd6, 0xcd, 0x05, 0x4b, 0xb2, 0xb8, 0x0a, 0xa5,
  0x6e, 0x88, 0x3e, 0x72, 0x7d, 0x36, 0xd8, 0x44, 0x17, 0x16, 0x27, 0xc1,

  0x0d, 0xce, 0x4f, 0xbb, 0x35, 0x5f, 0xb5, 0x9b, 0xfa, 0xb2, 0x81, 0x92,


  0x32, 0xac, 0x50, 0xc4, 0x8e, 0x2c, 0xb4, 0x70, 0x33, 0x98, 0x54, 0x47,
  0x47, 0xda, 0x91, 0x6a, 0xb0, 0x0e, 0x1d, 0x6d, 0x27, 0xd2, 0xa8, 0x29,
  0xd9, 0xc5, 0xf3, 0x45, 0xf5, 0xe8, 0x17, 0x8b, 0x92, 0x6f, 0x03, 0x41,
  0x58, 0x50, 0xe9, 0xe8, 0xa0, 0x59, 0x82, 0xcb, 0xa2, 0x25, 0x75, 0xfa,

  0x3c, 0xec, 0x4e, 0x87, 0x46, 0xa5, 0x41, 0xe1, 0xef, 0x38, 0x26, 0x11,
  0xed, 0x30, 0x09, 0xa5, 0xf7, 0xf3, 0x87, 0x9c, 0xc1, 0x23, 0x33, 0x3c,
  0x4c, 0xcc, 0xd4, 0xa9, 0x29, 0x75, 0x20, 0x83, 0xc9, 0x8b, 0x74, 0x8a,
  0x79, 0x02, 0xcd, 0xd2, 0x31, 0x3b, 0x11, 0xcf, 0x33, 0x85, 0xca, 0x58,
  0x59, 0x75, 0x1c, 0x57, 0x42, 0xe5, 0x25, 0xe8, 0x53, 0xda, 0x68, 0xa1,
  0x26, 0x8d, 0x4e, 0x07, 0xf9, 0x4f, 0x15, 0xd0, 0xe3, 0x59, 0xd9, 0x83,
  0xd5, 0xa1, 0xdc, 0xb1, 0x41, 0x20, 0x2d, 0xfd, 0xd1, 0xbb, 0x44, 0x30,
  0x38, 0xa7, 0x95, 0x32, 0x70, 0x0e, 0x1b, 0x35, 0x87, 0x63, 0xb8, 0x36,
  0xe0, 0x08, 0x5a, 0xf5, 0xd1, 0xd9, 0xde, 0x79, 0xd9, 0xdf, 0x82, 0xff,
  0x83, 0x43, 0x11, 0xfd, 0x88, 0xb0, 0xa2, 0x2c, 0x26, 0x90, 0x79, 0x32,
  0x79, 0x68, 0x92, 0x24, 0x0b, 0xa0, 0xbc, 0x98, 0x76, 0x56, 0xd6, 0xb0,
  0xd6, 0x44, 0x0a, 0x1e, 0xa4, 0x11, 0x27, 0xf1, 0x58, 0x7e, 0xa2, 0x77,
  0xbc, 0x58, 0xce, 0x02, 0x69, 0x7d, 0x8e, 0x1b, 0x19, 0xb5, 0xb3, 0xd9,
  0x9d, 0x38, 0x91, 0xdf, 0x21, 0x6f, 0xe2, 0x3a, 0xbe, 0x7e, 0x2d, 0x29,
  0xea, 0x55, 0xcd, 0x27, 0x78, 0x2c, 0x26, 0x1b, 0x71, 0xe6, 0x1e, 0x5c,
  0x86, 0xc3, 0x7c, 0x32, 0x29, 0x93, 0xaa, 0x29, 0x80, 0x8e, 0xe5, 0x91,
  0xcd, 0x2b, 0x42, 0x37, 0x24, 0x4e, 0xa5, 0x15, 0x37, 0x51, 0x1d, 0x93,
  0x27, 0x92, 0x2c, 0x34, 0x66, 0x5b, 0x3c, 0x5c, 0x3f, 0x50, 0x64, 0xe0,
  0xfe, 0x5e, 0x33, 0x44, 0xb8, 0x24, 0x5e, 0x91, 0x5e, 0xa8, 0xdc, 0x8a,


  0x41, 0x5c, 0x44, 0xd2, 0x35, 0x21, 0xd9, 0xf4, 0x4a, 0xdc, 0xa6, 0x8b,
  0x05, 0x9a, 0x37, 0x0c, 0x6f, 0x46, 0x64, 0x6b, 0x02, 0x68, 0x14, 0xc7,
  0x25, 0x52, 0xd6, 0x6c, 0x41, 0x50, 0x92, 0x47, 0x22, 0xf3, 0x87, 0xc9,
  0xc4, 0x0f, 0x02, 0x71, 0x52, 0xa3, 0x8b, 0x69, 0x23, 0x35, 0xba, 0x63,
  0xc4, 0xaf, 0xc9, 0x62, 0x65, 0x31, 0x13, 0x07, 0xed, 0x41, 0x8a, 0xff,
  0xba, 0x81, 0xfb, 0x6f, 0x8b, 0xb3, 0x8c, 0x1f, 0x6e, 0x70, 0xfa, 0x3f,
  0x4f, 0x2c, 0x02, 0x91, 0x81, 0xf8, 0xe1, 0x72, 0x97, 0x50, 0xf1, 0x10,
  0xdc, 0xc2, 0xde, 0x31, 0x9c, 0x57, 0x87, 0xa6, 0x62, 0x53, 0x4d, 0xf2,
  0x46, 0x39, 0x06, 0xd9, 0x3d, 0xa8, 0x49, 0x90, 0x36, 0xb4, 0x89, 0x45,

  0xff, 0x9e, 0x68, 0x60, 0x80, 0x4a, 0xf6, 0x2f, 0xca, 0x1a, 0xe9, 0x76,
  0x54, 0x52, 0x35, 0xe7, 0xd6, 0x9c, 0x88, 0xb2, 0xb8, 0x99, 0x66, 0xa8,
  0x32, 0xb2, 0x02, 0xe3, 0x95, 0x64, 0x68, 0x1d, 0x2c, 0x43, 0x9d, 0x2c,


  0xab, 0xdf, 0x31, 0x76, 0x52, 0x20, 0xfd, 0x12, 0x86, 0x9d, 0x43, 0xd4,
  0x23, 0x26, 0x6a, 0x04, 0xea, 0xec, 0xfd, 0x0d, 0xac, 0xec, 0x43, 0x75,

  0x53, 0xb4, 0xa1, 0x02, 0xa8, 0x53, 0x03, 0x8b, 0x28, 0xc8, 0x08, 0x23,
  0xda, 0x30, 0xe0, 0x34, 0xba, 0xd5, 0x8c, 0xa9, 0x13, 0x93, 0x2e, 0x43,
  0x28, 0xa0, 0xcd, 0x3b, 0x3f, 0x21, 0xc4, 0x1b, 0xa7, 0xfc, 0xdb, 0xd4,
  0x4e, 0xf6, 0x31, 0x4a, 0x35, 0xe3, 0x11, 0x4a, 0x4e, 0xac, 0x94, 0x31,
  0xd4, 0x68, 0x48, 0x3d, 0x99, 0x9b, 0x66, 0x3d, 0x2e, 0xae, 0xd6, 0x67,
  0x29, 0x98, 0x86, 0x90, 0x6d, 0x42, 0x8e, 0x7c, 0x44, 0x6c, 0x86, 0x57,
  0x92, 0x58, 0x41, 0x6a, 0x2d, 0x7d, 0x36, 0xe4, 0x46, 0x67, 0x5f, 0x24,
  0x39, 0x10, 0xf9, 0xe3, 0xe8, 0x20, 0xbb, 0x05, 0xdd, 0x39, 0xeb, 0xe2,

  0x4f, 0xa9, 0x10, 0xd5, 0x5c, 0x32, 0xf6, 0x6d, 0x54, 0x09, 0x07, 0x2d,
  0x92, 0x80, 0x2e, 0xeb, 0x3c, 0x2b, 0x8f, 0x3a, 0x6e, 0x94, 0xf3, 0xa4,
  0x92, 0xd4, 0x11, 0x9e, 0xbc, 0xd6, 0x66, 0x51, 0x7d, 0xd7, 0xe9, 0xa4,
  0x31, 0x1c, 0x61, 0xc5, 0x25, 0x55, 0xbd, 0x5a, 0x5f, 0x62, 0xb8, 0x0c,
  0x90, 0x85, 0xbe, 0xd0, 0x2e, 0x5c, 0x83, 0x8e, 0xfa, 0x65, 0x79, 0x05,
  0xe1, 0xd4, 0x05, 0x9d, 0x0e, 0xba, 0x89, 0xaa, 0x71, 0x88, 0x26, 0x59,

  0xf7, 0xd5, 0x0b, 0x29, 0xb8, 0x81, 0x6e, 0x3a, 0x04, 0x22, 0xa0, 0x51,
  0xf4, 0xde, 0x7e, 0x4d, 0x13, 0x57, 0x02, 0x55, 0x85, 0x4e, 0x55, 0x29,
  0xa6, 0xd0, 0x14, 0x63, 0xf5, 0x8c, 0xe8, 0x44, 0x81, 0x0b, 0x8b, 0x5d,
  0x74, 0x1f, 0x13, 0xa5, 0x99, 0xf1, 0x43, 0xb5, 0x0f, 0x4e, 0xfe, 0x63,
  0x6f, 0x68, 0xc9, 0xd9, 0x62, 0xe7, 0x04, 0xd3, 0x94, 0xe4, 0x21, 0xa4,
  0x79, 0x10, 0x2c, 0x6b, 0x95, 0x53, 0x5c, 0x4a, 0x70, 0x34, 0x66, 0x53,
  0x78, 0x0b, 0xef, 0x6f, 0xf2, 0x59, 0x12, 0x0a, 0x91, 0x38, 0x25, 0xbf,
  0x84, 0xec, 0x82, 0x69, 0xbd, 0xe4, 0x6d, 0xbe, 0xa3, 0x8c, 0xe1, 0x5a,

  0xe8, 0x04, 0xf4, 0xbb, 0x24, 0xc6, 0x82, 0x23, 0x93, 0x34, 0x7f, 0xd7,
  0xf5, 0xd2, 0xd8, 0xe1, 0x9e, 0x0f, 0xf3, 0xd2, 0xd0, 0x0b, 0x16, 0xd6,
  0xa2, 0x04, 0xb9, 0x8f, 0x0b, 0x62, 0xcc, 0x02, 0x91, 0xa5, 0xe8, 0xa1,
  0x6e, 0xce, 0x20, 0xaa, 0x82, 0xcd, 0x7a, 0x87, 0x14, 0x8b, 0xd1, 0x81,
  0x4c, 0x40, 0x01, 0x40, 0x37, 0x2d, 0xd1, 0x0e, 0x0e, 0x29, 0xe0, 0x57,
  0x37, 0x84, 0x83, 0x2b, 0x15, 0xeb, 0x70, 0x0f, 0x6f, 0x50, 0xa6, 0xa7,
  0xd5, 0x32, 0xae, 0x9e, 0x97, 0xb0, 0xdd, 0xc6, 0x9b, 0x98, 0x39, 0xb9,

  0xf9, 0xa8, 0x6d, 0x98, 0x0d, 0x2d, 0x51, 0x44, 0xf7, 0x20, 0x0f, 0xf1,
  0xae, 0xfd, 0xd7, 0x13, 0x8c, 0xe9, 0x92, 0xe0, 0xfc, 0x6e, 0xea, 0x78,
  0x50, 0x54, 0x93, 0x2b, 0xf2, 0x44, 0x2b, 0xdf, 0x78, 0x4c, 0x15, 0xf7,
  0xa7, 0x81, 0x40, 0x3f, 0x45, 0xc7, 0x60, 0x3a, 0xb3, 0x47, 0x3b, 0xa0,
  0x53, 0x32, 0xab, 0x19, 0xde, 0x0e, 0x56, 0x9e, 0xf9, 0x82, 0x97, 0xb5,
  0xd4, 0x19, 0x80, 0x0a, 0xce, 0xdf, 0x3c, 0xe8, 0x28, 0xf4, 0xa8, 0xc1,
  0x52, 0x12, 0x2e, 0x22, 0x45, 0x5b, 0x5a, 0xff, 0xa1, 0xbe, 0x7a, 0xbc,
  0xfe, 0xcd, 0xe1, 0x10, 0x87, 0x7b, 0xfb, 0xf5, 0x77, 0x47, 0x67, 0x1f,
  0x4e, 0xb6, 0xbf, 0x88, 0xf0, 0x5f, 0x3b, 0xfc, 0xaf, 0x9d, 0x4e, 0xe8,
  0xb8, 0x80, 0x51, 0xad, 0xbd, 0x5e, 0x8b, 0xca, 0xc7, 0xf9, 0x30, 0x9f,
  0x99, 0x03, 0x93, 0xad, 0xd0, 0x40, 0x5a, 0x57, 0xa4, 0xb8, 0x29, 0xdd,
  0x16, 0x57, 0x79, 0x93, 0x65, 0x97, 0x92, 0x74, 0xa8, 0xec, 0x86, 0x22,
  0x78, 0x6e, 0x2d, 0x71, 0x45, 0x95, 0xd6, 0xca, 0xc3, 0x24, 0x96, 0xd7,
  0x96, 0x08, 0x4a, 0x42, 0x49, 0x2f, 0x76, 0x19, 0xe0, 0x1c, 0x2c, 0x5e,
  0x2c, 0x9e, 0xb3, 0xcb, 0x30, 0xfc, 0x6c, 0x33, 0xe0, 0x4e, 0x74, 0xa5,
  0x0c, 0xe8, 0x34, 0xbf, 0x2e, 0x06, 0x02, 0xa2, 0x71, 0x3c, 0x0a, 0xfe,
  0xc0, 0x5a, 0x91, 0x18, 0xd6, 0x4b, 0xab, 0xc6, 0x77, 0x9b, 0xc3, 0x0d,
  0x45, 0x77, 0x71, 0x70, 0xb9, 0xce, 0x10, 0x0a, 0xac, 0xa7, 0xe9, 0x19,
  0xd6, 0xd5, 0x81, 0xc6, 0xe8, 0x18, 0x35, 0x6b, 0xf5, 0x67, 0x44, 0x0e,
  0xf2, 0xb3, 0xc1, 0x90, 0x14, 0x10, 0xc6, 0xa8, 0x16, 0x12, 0x64, 0x5f,
  0xb3, 0x0f, 0xbd, 0xc2, 0x28, 0x30, 0xb0, 0x39, 0x94, 0x6e, 0x32, 0xf7,
  0xb2, 0xb3, 0x32, 0xd0, 0x24, 0xd7, 0x81, 0xbd, 0x6f, 0xb8, 0x98, 0x20,
  0x7a, 0x7c, 0xe2, 0x96, 0xa8, 0x4c, 0x44, 0xb5, 0x25, 0x56, 0x70, 0x7d,
  0x53, 0x13, 0x34, 0xaa, 0xf2, 0x69, 0x81, 0x33, 0xc7, 0x67, 0x45, 0x72,
  0xf0, 0x30, 0x4c, 0xa6, 0x98, 0xbd, 0x39, 0x73, 0xc0, 0x9c, 0xd4, 0x8a,
  0xc6, 0xbb, 0xa6, 0x70, 0x18, 0x18, 0xe8, 0x37, 0x84, 0x0f, 0xdf, 0x7f,

  0x9c, 0x25, 0x1b, 0x6a, 0x18, 0xa8, 0xb0, 0xdb, 0x7c, 0x9f, 0xff, 0x0c,
  0xf3, 0x8e, 0xe5, 0x23, 0x21, 0x99, 0x29, 0x22, 0xb0, 0x75, 0xe6, 0x96,

  0xbf, 0x70, 0x99, 0xb8, 0xcb, 0x35, 0x6a, 0xb6, 0x31, 0x05, 0x81, 0x51,

  0x2f, 0xa3, 0x54, 0x6d, 0x8f, 0x74, 0x44, 0xbb, 0xf0, 0x24, 0xb4, 0x83,
  0x37, 0x03, 0xa4, 0x9c, 0x4b, 0x86, 0x8e, 0x21, 0x31, 0x11, 0x3b, 0x4d,
  0x16, 0xde, 0xd4, 0xa9, 0x5a, 0x04, 0xd1, 0xc9, 0x43, 0x52, 0x8c, 0x10,
  0x6a, 0x62, 0x04, 0x7a, 0x29, 0xf1, 0xd3, 0x89, 0xb8, 0xa7, 0x30, 0x97,

  0x4a, 0xb2, 0xe2, 0xeb, 0xb8, 0x30, 0x24, 0x7e, 0x95, 0xce, 0x5a, 0x49,
  0x8c, 0x72, 0x1f, 0x46, 0x40, 0x18, 0x7d, 0x83, 0x7f, 0xa7, 0x02, 0xb2,

  0xce, 0x3e, 0xb4, 0xc8, 0x8c, 0xc2, 0x09, 0x5e, 0xc6, 0x1e, 0xed, 0xb0,
  0xbe, 0xe8, 0x9c, 0xa6, 0x90, 0x0b, 0xcd, 0x85, 0xd1, 0xcc, 0x6c, 0x74,
  0x08, 0xa1, 0x02, 0x08, 0x14, 0xaa, 0x3d, 0x3d, 0xd1, 0x9c, 0x0e, 0xe1,
  0x77, 0x50, 0xb4, 0x24, 0x7b, 0x54, 0x28, 0xa9, 0x75, 0x12, 0x9b, 0xac,

  0x1c, 0x2a, 0xe0, 0x20, 0x69, 0x5e, 0x7e, 0x31, 0xf2, 0x2c, 0xbf, 0xc7,

  0x18, 0x4c, 0x1d, 0xfe, 0x53, 0xc1, 0x7e, 0x38, 0xa7, 0x8e, 0xf9, 0x72,
  0x0f, 0x75, 0x25, 0xfe, 0x6c, 0x5f, 0xa3, 0xb5, 0x41, 0x0a, 0xd0, 0x72,
  0xda, 0x66, 0x25, 0x52, 0x6c, 0x33, 0x28, 0x2a, 0x76, 0x26, 0xb3, 0x7e,
  0x61, 0xd1, 0xb7, 0x42, 0x82, 0x8d, 0x56, 0x3c, 0xcc, 0xab, 0x1b, 0x27,
  0x0f, 0x15, 0x11, 0xfd, 0xd0, 0xcf, 0x33, 0x59, 0x56, 0x64, 0x04, 0xa8,
  0x19, 0x58, 0x49, 0xaa, 0xb1, 0x38, 0x8b, 0xbc, 0xac, 0x87, 0x5b, 0x44,
  0x7e, 0xc3, 0x25, 0x1a, 0xf4, 0x5a, 0x4c, 0xa0, 0xcd, 0x28, 0x53, 0x1c,
  0xe9, 0x12, 0x0c, 0x60, 0x02, 0x17, 0x84, 0x6f, 0x62, 0xa2, 0x52, 0x59,
  0x22, 0x90, 0x1c, 0xa5, 0xa4, 0xc2, 0xc6, 0x7a, 0x90, 0x13, 0x04, 0x92,
  0x94, 0xb9, 0x47, 0xba, 0xce, 0xf0, 0x37, 0x16, 0xb8, 0x89, 0x71, 0x31,
  0xd0, 0x6a, 0x1f, 0xca, 0xd1, 0x94, 0x74, 0x7f, 0x91, 0x1e, 0x02, 0x4e,
  0x11, 0xa3, 0xbf, 0xb6, 0x5c, 0xd8, 0x7f, 0xd9, 0xa8, 0xf1, 0x8c, 0xbc,

  0xa2, 0x64, 0xf4, 0x5c, 0xc2, 0x1f, 0x36, 0x89, 0xf1, 0xb4, 0xdd, 0x3e,
  0xe3, 0x8a, 0x6d, 0xfc, 0x2d, 0x14, 0xe7, 0x5d, 0x2e, 0xc6, 0xa4, 0xf6,
  0xe9, 0x3b, 0xa4, 0x28, 0x39, 0x28, 0x98, 0x65, 0x2e, 0xb7, 0x91, 0x86,
  0x47, 0x26, 0x63, 0xb9, 0x4c, 0x08, 0x24, 0xa7, 0x79, 0xff, 0xdd, 0x00,
  0x4b, 0x0d, 0xa6, 0x8d, 0x7d, 0x38, 0x73, 0x97, 0x37, 0xc0, 0x8b, 0x24,
  0x7c, 0x7b, 0x40, 0xfb, 0x65, 0x28, 0x50, 0xa9, 0x02, 0x1c, 0x38, 0xfc,
  0xdf, 0x96, 0xd9, 0xa8, 0x21, 0xa3, 0xf2, 0xae, 0x03, 0xc6, 0x29, 0x51,
  0x59, 0x23, 0x21, 0x9a, 0x44, 0x4f, 0x1f, 0x12, 0xf8, 0x1b, 0xac, 0x08,
  0xc5, 0xea, 0x0d, 0x14, 0x6f, 0x33, 0xa7, 0x84, 0xf6, 0x26, 0x85, 0x13,
  0x2a, 0x46, 0x37, 0x84, 0x24, 0x40, 0x7e, 0xa4, 0x44, 0x9d, 0xa3, 0x9e,



  0x22, 0x2c, 0x9e, 0x7f, 0x1a, 0x56, 0x74, 0xb1, 0x14, 0xd9, 0x11, 0xa2,
  0x85, 0xe4, 0x99, 0x32, 0xe9, 0xb6, 0x79, 0xfa, 0x99, 0x5d, 0x37, 0xb8,
  0xe7, 0xc9, 0xac, 0xb4, 0x02, 0xd2, 0xbc, 0x63, 0x25, 0x25, 0x19, 0xe1,
  0x19, 0xf9, 0x64, 0x59, 0x14, 0xa7, 0xc1, 0x1b, 0x4e, 0x33, 0x01, 0x35,

  0x47, 0x26, 0x83, 0x76, 0x25, 0xd2, 0xc9, 0xa3, 0x62, 0xcc, 0xc8, 0x08,
  0x4d, 0x98, 0x19, 0x4f, 0xf2, 0xe4, 0x66, 0xdf, 0x04, 0xc0, 0x46, 0xb7,
  0x2a, 0x55, 0xb0, 0x75, 0x26, 0x15, 0x74, 0x64, 0x60, 0xf9, 0x34, 0x35,
  0x01, 0xc1, 0xf8, 0x57, 0xaf, 0x37, 0xa9, 0xbc, 0x74, 0x2d, 0xe7, 0xac,
  0xeb, 0x24, 0x30, 0x9b, 0x08, 0x46, 0xcf, 0x7b, 0x85, 0xe2, 0xbb, 0xc3,
  0x1a, 0x9e, 0xe8, 0xec, 0x2d, 0x7b, 0xf1, 0x8e, 0xaf, 0xf0, 0x6f, 0xa9,
  0x41, 0x28, 0xa2, 0x3a, 0x5c, 0xea, 0xea, 0xc1, 0x09, 0xb2, 0xef, 0xbf,
  0x6b, 0x96, 0x61, 0xae, 0x5f, 0x0c, 0x36, 0x77, 0x5f, 0x6d, 0x6d, 0x04,
  0x72, 0x96, 0xe1, 0x1b, 0x2e, 0x48, 0xe1, 0xde, 0x56, 0x7f, 0x6b, 0xa3,
  0x31, 0x1b, 0xdc, 0xee, 0x15, 0x00, 0x2a, 0x0a, 0xad, 0x6e, 0x84, 0x06,
  0x25, 0x23, 0xdb, 0x62, 0x2d, 0xc9, 0x9b, 0x76, 0x8b, 0x49, 0xaf, 0x92,
  0x3b, 0x20, 0xb5, 0x60, 0xfe, 0xda, 0x59, 0x5a, 0x8a, 0x61, 0x83, 0x92,
  0x4c, 0x65, 0x0b, 0x56, 0x6b, 0xd7, 0x73, 0x82, 0xe9, 0x11, 0x14, 0x96,
  0x9c, 0xeb, 0x10, 0x88, 0xb6, 0x94, 0x30, 0xa9, 0x82, 0x12, 0xf3, 0x28,
  0xa6, 0xff, 0xc9, 0x9d, 0x2d, 0x47, 0x35, 0xa8, 0xc7, 0x97, 0xee, 0x99,
  0xa2, 0xa6, 0xdf, 0x8b, 0xcb, 0x51, 0x9a, 0xb2, 0x3d, 0xd3, 0x62, 0xc6,
  0x68, 0xc6, 0x23, 0x61, 0xc8, 0x51, 0x25, 0x75, 0x1a, 0x73, 0xa8, 0xd6,
  0xa2, 0x94, 0x7a, 0xc3, 0xa2, 0xb2, 0x0a, 0x24, 0xb6, 0x6a, 0x5c, 0xb1,
  0xe1, 0xb1, 0x53, 0x8b, 0x00, 0x2b, 0x1b, 0xfd, 0xb2, 0x6c, 0xaa, 0x51,
  0x70, 0x17, 0x18, 0xae, 0x2c, 0x00, 0x36, 0x88, 0x7c, 0x82, 0x33, 0x9e,
  0xe3, 0xaa, 0xcc, 0x71, 0x9f, 0x42, 0x9b, 0x4a, 0x1e, 0x0a, 0x82, 0xa6,
  0x35, 0x06, 0x94, 0xb9, 0xfb, 0x92, 0x0f, 0xf4, 0x55, 0xd7, 0xa6, 0xeb,
  0xd4, 0x0c, 0xa0, 0x38, 0xa0, 0x08, 0x32, 0xb2, 0x7e, 0x44, 0xe1, 0x71,
  0xae, 0xa4, 0xc2, 0x85, 0x48, 0x7f, 0x09, 0x72, 0x7b, 0x70, 0x8e, 0x88,
  0x74, 0x97, 0x40, 0x18, 0x22, 0xb3, 0x5b, 0x01, 0x70, 0xa9, 0x2e, 0xac,
  0x8f, 0x70, 0x3b, 0x89, 0x82, 0xb2, 0xe4, 0x1e, 0xb9, 0x71, 0x29, 0xaa,
  0x44, 0x51, 0xa4, 0xe8, 0x37, 0x32, 0xc9, 0x05, 0xac, 0x8e, 0x61, 0x16,
  0x26, 0x0a, 0xe7, 0x71, 0xa0, 0xb6, 0x7b, 0x44, 0xb7, 0xb3, 0x34, 0x39,
  0xdb, 0x19, 0x61, 0x4f, 0x22, 0xbe, 0x9c, 0xb7, 0x37, 0xd4, 0x1c, 0x80,
  0x26, 0xa7, 0x88, 0xb3, 0x55, 0x3d, 0xfd, 0x03, 0xb5, 0x76, 0xce, 0x6f,
  0x66, 0x78, 0xb3, 0xbc, 0x66, 0x60, 0x96, 0xed, 0xe1, 0x92, 0xcd, 0x87,

  0xde, 0xfd, 0xfd, 0x7d, 0x0f, 0x2f, 0x1c, 0xe6, 0xe4, 0x48, 0x99, 0x45,
  0xbf, 0x86, 0x1c, 0x4d, 0x76, 0x25, 0x9b, 0x9c, 0xc8, 0x44, 0xfc, 0xf8,
  0x86, 0x93, 0x22, 0x55, 0x0c, 0xd3, 0x8a, 0xea, 0xf9, 0x84, 0xb8, 0xe8,
  0x35, 0xa9, 0xab, 0x93, 0xe9, 0x90, 0x86, 0xa3, 0x8e, 0xa8, 0xc0, 0xed,
  0xb3, 0x6b, 0x41, 0xf8, 0xa9, 0x51, 0x95, 0x60, 0xfd, 0x3a, 0x7c, 0x62,
  0x7e, 0x10, 0xf5, 0xde, 0x45, 0x9d, 0x63, 0x59, 0xed, 0x35, 0x3c, 0x71,
  0x50, 0x5f, 0x0b, 0x3f, 0xec, 0x07, 0x73, 0xe0, 0xdd, 0xce, 0xf3, 0xe0,
  0x13, 0x5b, 0x2f, 0x32, 0xb5, 0x56, 0xb1, 0x59, 0x33, 0x55, 0xc0, 0x59,
  0x87, 0x69, 0x2f, 0xec, 0xd6, 0x62, 0xcc, 0x33, 0x5a, 0x7a, 0x5c, 0x4a,
  0x1b, 0x9e, 0x21, 0xdf, 0xf0, 0x15, 0xd7, 0xb1, 0x88, 0xef, 0x9f, 0xbe,
  0xe3, 0xce, 0x4d, 0x14, 0xea, 0x9d, 0x91, 0xab, 0xcb, 0x01, 0x23, 0x46,

  0xff, 0x8e, 0x49, 0xc2, 0x0c, 0xcc, 0x54, 0x9a, 0x60, 0xd8, 0x62, 0x2a,
  0x36, 0x4c, 0x45, 0x2f, 0xfd, 0x6a, 0x45, 0x1d, 0x9a, 0x75, 0x0a, 0xdb,
  0x55, 0xd4, 0x22, 0x1f, 0x0d, 0x4c, 0x53, 0x5a, 0x96, 0xa1, 0xaa, 0x67,
  0x30, 0x1a, 0xbb, 0xba, 0xae, 0xb9, 0x9c, 0x42, 0xcb, 0xec, 0xd8, 0x73,
  0x96, 0x29, 0xf0, 0xb7, 0xa1, 0xf4, 0x4e, 0x8e, 0x73, 0xe0, 0x55, 0x55,
  0x80, 0x32, 0x71, 0x59, 0x25, 0x05, 0x12, 0x3a, 0x65, 0xc1, 0xf7, 0x34,
  0x85, 0x39, 0x24, 0xac, 0x81, 0xa1, 0x1c, 0x7f, 0x73, 0x4a, 0xd9, 0xdc,
  0xc0, 0x48, 0x33, 0x01, 0x71, 0xe0, 0xf9, 0x73, 0xbf, 0x23, 0x63, 0xd4,
  0x4e, 0x91, 0x95, 0x70, 0x49, 0x64, 0x1c, 0x85, 0x00, 0x50, 0xd5, 0xe6,
  0x88, 0xd4, 0xb8, 0x90, 0xa4, 0x55, 0xb1, 0x11, 0xe4, 0xf2, 0x9a, 0xf0,

  0x6e, 0x6c, 0x4b, 0x04, 0x82, 0xfb, 0x45, 0x5f, 0x57, 0xb0, 0x91, 0xb8,
  0x94, 0x08, 0x2e, 0x29, 0x6b, 0x5e, 0xfa, 0xb8, 0xa5, 0x57, 0xee, 0x1f,
  0x95, 0xf8, 0x79, 0x6f, 0xf2, 0xf9, 0x70, 0x7b, 0x37, 0x3a, 0x93, 0x86,
  0x27, 0xc5, 0x6c, 0x5d, 0xe2, 0x7a, 0x0c, 0xb8, 0x16, 0x0b, 0x7d, 0x69,
  0x21, 0xcf, 0xad, 0x49, 0x8c, 0x04, 0x66, 0xfc, 0x1f, 0x28, 0xa1, 0x48,
  0xee, 0x02, 0xcf, 0x43, 0xcd, 0x43, 0xeb, 0x25, 0xdd, 0xd1, 0x14, 0xca,
  0x4f, 0x12, 0x62, 0xc3, 0xc3, 0xa1, 0xfd, 0xf7, 0x1a, 0xb5, 0xa5, 0xaf,
  0xc4, 0x51, 0x85, 0x79, 0xf0, 0xa5, 0x63, 0x8d, 0x48, 0xb1, 0x2c, 0xcd,
  0x5d, 0x6b, 0x84, 0x70, 0x1b, 0xc2, 0xc3, 0x71, 0x84, 0xd3, 0xd9, 0x3d,
  0xa6, 0x38, 0xc4, 0x9c, 0x2f, 0xb9, 0x87, 0xd8, 0x1f, 0x9a, 0x9b, 0xf7,


  0xfa, 0xe9, 0xdd, 0xfb, 0xa5, 0xdb, 0xb7, 0x7a, 0xf7, 0xb8, 0x77, 0x83,
  0x26, 0xcb, 0xbe, 0x76, 0x1c, 0x74, 0x94, 0xec, 0xc1, 0xd6, 0x97, 0x71,
  0xd4, 0xd5, 0xb9, 0x8c, 0x63, 0x64, 0xbe, 0xfe, 0xad, 0x4e, 0x9d, 0x88,
  0x91, 0x2c, 0x7a, 0x9c, 0x7c, 0x78, 0x38, 0x0e, 0x2b, 0xd2, 0xd9, 0xbb,
  0xd8, 0x8b, 0xa2, 0x87, 0xd3, 0x08, 0x02, 0x5e, 0x3c, 0xaa, 0x98, 0x98,
  0x87, 0x94, 0xe6, 0xd9, 0x0b, 0x0f, 0xa7, 0x85, 0x80, 0xa2, 0x88, 0x7b,
  0xeb, 0xfb, 0x4a, 0x05, 0xff, 0xf3, 0x17, 0x47, 0x69, 0x45, 0xb6, 0x5f,
  0xa0, 0x9b, 0x11, 0xc2, 0x21, 0x98, 0x75, 0xdf, 0x6f, 0xa8, 0xd7, 0x47,
  0x60, 0x20, 0xb9, 0x7f, 0x94, 0xaa, 0x04, 0x1b, 0xdd, 0xfa, 0x86, 0x21,

  0xd4, 0x1d, 0x09, 0x03, 0x3d, 0xe5, 0xb4, 0xf5, 0x8c, 0xf5, 0xec, 0xb0,
  0x27, 0x43, 0xf0, 0xec, 0xfe, 0x6f, 0x5a, 0x1f, 0xd1, 0xb3, 0x25, 0x03,


  0x8c, 0x30, 0x94, 0x0c, 0xe0, 0x4d, 0x49, 0xf7, 0x11, 0x55, 0x2b, 0xa0,
  0x88, 0x6f, 0x99, 0x1d, 0xa1, 0x0f, 0xa0, 0x52, 0x84, 0xf1, 0xd6, 0x99,
  0xc0, 0x85, 0x32, 0xc6, 0xfb, 0x6b, 0xab, 0xcc, 0xf4, 0x70, 0x91, 0x3d,
  0x21, 0xd9, 0x3e, 0x11, 0xe1, 0x0a, 0x4a, 0x35, 0x94, 0x19, 0x26, 0x4a,
  0x8f, 0xfc, 0xda, 0x45, 0xa3, 0xe2, 0xab, 0x8a, 0x6c, 0xaf, 0x49, 0xca,
  0xed, 0xcf, 0x6b, 0x92, 0xd2, 0xbe, 0xb3, 0x4a, 0x46, 0x0e, 0x12, 0x4e,
  0x48, 0x73, 0x1d, 0x98, 0xf4, 0x12, 0x57, 0x59, 0x63, 0x17, 0x0f, 0x3f,
  0xb5, 0x09, 0x5f, 0xf5, 0x8a, 0x8e, 0x39, 0xb7, 0xc8, 0xa9, 0x9d, 0xa4,
  0x04, 0x73, 0x8c, 0x9a, 0x89, 0x75, 0x14, 0x0d, 0x8b, 0xfc, 0xbe, 0x24,
  0x75, 0x54, 0x0d, 0xd4, 0x98, 0x53, 0x60, 0x6f, 0xbc, 0x92, 0x68, 0xd8,
  0xde, 0x99, 0xc1, 0x81, 0x7d, 0x77, 0xfd, 0xfe, 0x8c, 0xbb, 0x3a, 0x70,
  0x75, 0x2e, 0x16, 0x21, 0xc9, 0x9c, 0x97, 0xc3, 0x39, 0x58, 0xd2, 0xa0,
  0x9d, 0x54, 0xcc, 0xca, 0x94, 0x3b, 0x7a, 0x25, 0xc4, 0x14, 0xd2, 0x93,
  0x80, 0xf0, 0x22, 0x14, 0x9f, 0x11, 0x45, 0xd2, 0xc1, 0xa1, 0x72, 0x34,

  0xe0, 0x5f, 0xae, 0xeb, 0x82, 0x9d, 0x4c, 0x19, 0x31, 0xa4, 0x47, 0xbd,
  0xc5, 0xa3, 0xc0, 0x47, 0xbc, 0xdb, 0xe7, 0xa8, 0x69, 0xd4, 0x7c, 0x8c,

  0x20, 0xa5, 0x8d, 0x87, 0x06, 0xb5, 0x2e, 0xd3, 0x79, 0x84, 0x50, 0xb3,
  0xe2, 0xba, 0xa6, 0xe5, 0x95, 0xd5, 0x1a, 0xcd, 0xcb, 0xf6, 0x10, 0x71,
  0x95, 0x2f, 0xd4, 0x43, 0x50, 0x1f, 0x92, 0x40, 0xd2, 0xb2, 0x40, 0x67,
  0x1e, 0x6b, 0xd5, 0xdd, 0x40, 0xce, 0xbd, 0x28, 0x24, 0xea, 0xcd, 0x37,
  0xa1, 0xcd, 0x9a, 0xa9, 0xa7, 0xcd, 0x12, 0x70, 0x6c, 0xe7, 0x06, 0x07,
  0x94, 0x44, 0x46, 0xa8, 0xa2, 0x62, 0x0a, 0x3a, 0x4d, 0x20, 0x36, 0x18,
  0x9d, 0x7a, 0x81, 0xc5, 0xe4, 0x1c, 0xf7, 0xd4, 0xbb, 0xa0, 0x82, 0x6d,
  0x3b, 0x89, 0x94, 0xb6, 0x79, 0x84, 0xda, 0xcb, 0x04, 0xd4, 0x45, 0xd0,
  0x5c, 0xd4, 0x3d, 0x22, 0xaf, 0xfb, 0xbb, 0x7c, 0xff, 0xa3, 0xf8, 0xbf,
  0xba, 0x4e, 0x78, 0x2d, 0x45, 0x0f, 0x94, 0x1b, 0x2f, 0xb4, 0x91, 0xf5,
  0x79, 0x52, 0x4c, 0xb9, 0x0c, 0x81, 0x21, 0x61, 0x83, 0x28, 0x16, 0x71,
  0xe4, 0xa0, 0xb4, 0x45, 0xd1, 0xff, 0xe8, 0xb1, 0x44, 0x25, 0x57, 0xd5,
  0x12, 0xeb, 0x5f, 0xc4, 0x9f, 0xbe, 0xd6, 0x1b, 0x33, 0x5b, 0x19, 0xc7,
  0x19, 0xec, 0x04, 0xdc, 0x58, 0x3f, 0x3f, 0x66, 0x36, 0x7b, 0x3d, 0xcb,
  0x97, 0xe5, 0xe3, 0x5a, 0x24, 0x8d, 0x7c, 0xa4, 0xf7, 0x45, 0x25, 0xb9,
  0x3c, 0x78, 0x96, 0x70, 0xbe, 0xcb, 0xec, 0x56, 0x85, 0x22, 0x56, 0x2a,
  0x94, 0xec, 0xa8, 0x6d, 0x0c, 0xb7, 0xe6, 0x7c, 0xec, 0x7f, 0xb8, 0x63,
  0x07, 0x77, 0x99, 0xdc, 0xff, 0x6c, 0x38, 0x3f, 0xcf, 0x72, 0xb6, 0x21,
  0x99, 0x90, 0xd9, 0x1c, 0xd5, 0x22, 0x75, 0x66, 0x40, 0x14, 0x1e, 0x0c,
  0xc3, 0xab, 0x21, 0x07, 0x9b, 0xba, 0x41, 0xfc, 0xa6, 0xa5, 0xf8, 0xc4,
  0x4a, 0x1e, 0x0e, 0x28, 0x59, 0xe4, 0x3c, 0x86, 0x30, 0x31, 0x8d, 0x6f,

  0xdc, 0x12, 0xb8, 0x7e, 0x74, 0x09, 0xfb, 0xe5, 0x41, 0x4d, 0x60, 0x24,
  0xdb, 0x0c, 0x17, 0xd7, 0x40, 0x4f, 0x27, 0x79, 0x3e, 0x8c, 0x8b, 0x35,
  0xd9, 0x7b, 0x42, 0x55, 0x87, 0x01, 0xc7, 0xec, 0x7c, 0xc1, 0xb3, 0xee,

  0x8d, 0xbb, 0xc1, 0x1b, 0x8d, 0x3a, 0x03, 0xbd, 0xdb, 0xd7, 0xa2, 0x0e,
  0xfd, 0x39, 0x06, 0xc8, 0xf3, 0xd9, 0xd8, 0x6c, 0x85, 0xfb, 0xd5, 0xc0,
  0xa1, 0x51, 0x6d, 0x82, 0x75, 0x05, 0xa8, 0x27, 0x80, 0xca, 0x5b, 0xd4,
  0x59, 0x60, 0x9c, 0xfa, 0x88, 0xe2, 0x8e, 0xb0, 0x21, 0x98, 0x38, 0x11,
  0x86, 0x6d, 0x91, 0x20, 0x89, 0x31, 0xc1, 0x1d, 0xe6, 0x80, 0x33, 0x0a,
  0xf1, 0x18, 0xcb, 0x53, 0x7c, 0x87, 0xbb, 0xcb, 0xbe, 0x24, 0x5b, 0x75,
  0x45, 0xa6, 0x9b, 0xcb, 0x35, 0x1c, 0x39, 0x66, 0x8d, 0xb9, 0xa6, 0x70,

  0x5b, 0xe1, 0xda, 0xb5, 0xb8, 0xb8, 0xc4, 0x5e, 0x85, 0xbf, 0xb2, 0x13,
  0xa4, 0x77, 0xaa, 0x59, 0x74, 0xfc, 0xcf, 0x6b, 0x42, 0x6c, 0x26, 0xe7,
  0x64, 0x2f, 0x40, 0x9a, 0x35, 0xeb, 0x32, 0x99, 0x25, 0x53, 0x5e, 0xed,
  0xe1, 0xd9, 0xc9, 0x77, 0x27, 0x67, 0x9e, 0xd8, 0xfc, 0x66, 0x30, 0xd8,
  0xbc, 0x4d, 0x8a, 0x21, 0x75, 0x64, 0xc5, 0xc0, 0x45, 0x44, 0xcf, 0x99,
  0x04, 0x2f, 0x47, 0x96, 0xdc, 0x5b, 0xc8, 0x16, 0x49, 0xf4, 0xf6, 0x7c,
  0x36, 0x98, 0xc1, 0xcb, 0x9f, 0x14, 0x98, 0x77, 0x2a, 0x39, 0x92, 0x5c,
  0x42, 0x92, 0x8d, 0xa3, 0x22, 0x19, 0x73, 0xc3, 0x52, 0x3f, 0x8b, 0x90,
  0x90, 0x3d, 0xa2, 0xe8, 0x0d, 0x1d, 0x2a, 0x67, 0x92, 0x53, 0x00, 0xcb,
  0x2c, 0xc2, 0x7b, 0x63, 0x41, 0xd5, 0xf3, 0xd1, 0x1b, 0xf9, 0xa6, 0xd4,
  0xa3, 0xe2, 0x2e, 0x31, 0xb0, 0x1b, 0x5b, 0x29, 0x17, 0xdf, 0xf6, 0x8e,
  0x06, 0xbd, 0x37, 0x27, 0x67, 0x27, 0xdf, 0x1c, 0x5d, 0x9f, 0x18, 0x3c,
  0xf3, 0x32, 0x69, 0x51, 0xc1, 0x44, 0xff, 0xfa, 0x56, 0xb6, 0x85, 0xd6,

  0x8f, 0x58, 0xf8, 0x55, 0xca, 0xdd, 0x58, 0x14, 0xf2, 0x9f, 0xdb, 0x6a,
  0xa3, 0x55, 0x54, 0x71, 0x9e, 0x60, 0x78, 0x38, 0xb8, 0x17, 0xb3, 0xb9,
  0x4c, 0xd5, 0x5b, 0x41, 0x3c, 0xbb, 0xc7, 0xae, 0x6c, 0x1f, 0x32, 0x4c,
  0xa5, 0x4f, 0x4d, 0x29, 0x29, 0xaf, 0xde, 0xf5, 0x08, 0xd9, 0x9d, 0xad,
  0x1d, 0x30, 0x21, 0xd3, 0xb7, 0xf8, 0x0b, 0xb4, 0x0c, 0x9c, 0xe2, 0xc7,
  0x6f, 0xe8, 0xc9, 0x06, 0xc6, 0xb8, 0x85, 0x46, 0x47, 0x06, 0x23, 0xbf,
  0x0a, 0x00, 0x96, 0x20, 0x01, 0x95, 0xa3, 0x9b, 0x64, 0x2e, 0xaa, 0x2c,
  0xa6, 0x26, 0x50, 0x10, 0x9c, 0x6b, 0x2a, 0x05, 0x2f, 0x88, 0x53, 0xc8,
  0x86, 0x09, 0x43, 0x2e, 0x10, 0x46, 0x1a, 0xd2, 0x75, 0x28, 0xd5, 0xf7,
  0x1e, 0x3b, 0x0e, 0x60, 0xac, 0x05, 0xd3, 0x76, 0xa8, 0xc0, 0xb8, 0x4f,
  0x09, 0x86, 0x4e, 0xde, 0x80, 0x9f, 0x27, 0xc0, 0xad, 0x03, 0x9b, 0x77,
  0xd6, 0x00, 0x98, 0x1b, 0xb4, 0xf5, 0x9c, 0x5c, 0x67, 0xf4, 0x23, 0x6e,
  0x5e, 0x22, 0x3a, 0x37, 0x4e, 0xf2, 0x57, 0x3a, 0xaa, 0xa5, 0x3c, 0x41,
  0xca, 0x0d, 0xd1, 0x8d, 0x45, 0x66, 0x70, 0x38, 0x6b, 0x3b, 0xc8, 0x34,
  0xa4, 0x15, 0xab, 0x33, 0x5d, 0x66, 0x0f, 0x0c, 0xad, 0x3e, 0x96, 0xd3,
  0xa1, 0x1f, 0x49, 0x23, 0x02, 0x93, 0xe2, 0x11, 0x74, 0xe5, 0x5b, 0x8e,
  0x51, 0xef, 0x55, 0x80, 0x18, 0xf1, 0xfa, 0x57, 0xbf, 0xa3, 0x84, 0x29,
  0xb5, 0xeb, 0x25, 0x0b, 0x0f, 0xb0, 0x7b, 0xfd, 0xad, 0xe2, 0xef, 0x1b,
  0xdd, 0xd2, 0x6d, 0xb4, 0xe6, 0xf4, 0x45, 0x3a, 0xb9, 0xbc, 0xe2, 0xd6,
  0xea, 0x67, 0xf8, 0x17, 0x89, 0xbc, 0x95, 0x21, 0xfc, 0x3b, 0xe9, 0xfe,
  0x81, 0xc9, 0x28, 0x09, 0x85, 0x6e, 0x4c, 0x30, 0x5d, 0x93, 0x11, 0x39,
  0xff, 0x54, 0x80, 0xd6, 0xe5, 0x3a, 0xd0, 0x16, 0x7b, 0xc9, 0xff, 0xa6,
  0x3b, 0x27, 0xce, 0x04, 0xa7, 0x20, 0x08, 0x45, 0x34, 0x09, 0xce, 0xa1,
  0xd5, 0x00, 0xc9, 0x05, 0xfe, 0x12, 0xf5, 0x4d, 0x96, 0x6b, 0x55, 0x1b,
  0xe7, 0xe5, 0x16, 0x08, 0xa2, 0x12, 0xe1, 0xb0, 0xf8, 0x66, 0x54, 0x50,
  0x2f, 0xd7, 0x18, 0xa6, 0xd2, 0x6f, 0x2c, 0x95, 0xba, 0x71, 0x21, 0xec,
  0xa6, 0x1f, 0x0f, 0xa1, 0x3e, 0x64, 0xe2, 0x88, 0x93, 0xac, 0x74, 0x5a,
  0xb0, 0xe6, 0xda, 0x77, 0x25, 0xc7, 0x00, 0x2d, 0x08, 0x54, 0x80, 0xa5,
  0x5e, 0x80, 0x92, 0x0f, 0x3c, 0x0d, 0x5f, 0x6a, 0x12, 0x34, 0x13, 0x2d,
  0x79, 0x94, 0xb0, 0x39, 0x2b, 0x84, 0x13, 0x09, 0x4f, 0xc6, 0x04, 0x28,
  0x4b, 0xa6, 0xcd, 0x90, 0x35, 0x18, 0xca, 0xea, 0xbb, 0x89, 0xb3, 0xc0,
  0x9d, 0x83, 0x8d, 0x37, 0x0d, 0xd1, 0x68, 0x95, 0x72, 0x6c, 0x01, 0x25,
  0x1e, 0x69, 0xa3, 0x09, 0x6b, 0x05, 0x86, 0x1e, 0x30, 0xb0, 0x14, 0xe3,
  0x1a, 0x32, 0x15, 0xde, 0x19, 0x6a, 0x0c, 0x24, 0xf4, 0x96, 0x87, 0xa8,

  0x4a, 0x98, 0x8b, 0x8d, 0xb6, 0xd4, 0x48, 0xb0, 0xbd, 0xe8, 0xdb, 0x78,
  0xe6, 0xa9, 0xc2, 0xc6, 0x41, 0xd5, 0xc5, 0x06, 0xc3, 0xf5, 0x12, 0x1c,
  0x3a, 0x3e, 0x12, 0xf6, 0x59, 0x33, 0x03, 0x25, 0xe1, 0xa2, 0x0b, 0xf8,
  0x36, 0x4d, 0x17, 0xdd, 0x40, 0x26, 0x22, 0x8b, 0xc4, 0xe3, 0x7d, 0xff,
  0x0d, 0x4d, 0x0e, 0xbf, 0x43, 0x2f, 0xd0, 0xbd, 0x47, 0xe8, 0xa1, 0xa9,
  0xf6, 0x78, 0x62, 0x52, 0x1e, 0x26, 0xf0, 0xbd, 0x14, 0x1b, 0xe0, 0xb9,
  0x61, 0x00, 0x3f, 0xcd, 0xb9, 0x04, 0x02, 0xa4, 0xaa, 0x80, 0x9c, 0x1d,
  0x40, 0xf8, 0x2e, 0xe6, 0x52, 0x24, 0x91, 0xdb, 0x3d, 0xd2, 0xf4, 0xa1,
  0xea, 0x5d, 0x76, 0x25, 0x9e, 0x49, 0xe9, 0x8d, 0x79, 0xe1, 0x97, 0xc0,
  0x8e, 0x0c, 0xd6, 0x92, 0x3e, 0x19, 0x97, 0x77, 0xe1, 0x1b, 0x5e, 0xde,
  0x05, 0x6f, 0xf8, 0x33, 0xee, 0xb9, 0xb5, 0xb7, 0x4e, 0x2e, 0x07, 0xdf,
  0x45, 0x2d, 0xa0, 0x11, 0xdc, 0xc9, 0x85, 0xaf, 0xb8, 0x5d, 0x1d, 0x12,
  0xbd, 0x7b, 0xcd, 0xdb, 0xef, 0x79, 0x30, 0x3e, 0xe0, 0xdd, 0x73, 0xf8,
  0xbe, 0x5c, 0xee, 0xcb, 0xa3, 0xc1, 0x77, 0xce, 0xb5, 0x76, 0x48, 0x20,
  0x54, 0x8c, 0x69, 0x32, 0xdb, 0x31, 0x48, 0xcc, 0xa4, 0x83, 0x83, 0x05,
  0xe9, 0xbd, 0xbc, 0x7b, 0x0e, 0xbd, 0xc3, 0x4c, 0x3c, 0x7a, 0xf7, 0xf6,
  0x78, 0x15, 0xbd, 0xbb, 0x07, 0x55, 0x4f, 0x9a, 0x75, 0xa8, 0x3d, 0xe3,
  0x16, 0xda, 0x58, 0xe0, 0xd1, 0x46, 0xe6, 0x18, 0x48, 0x14, 0xd2, 0xf6,
  0x53, 0x09, 0x69, 0x9e, 0xbf, 0x8c, 0xd0, 0xe1, 0x05, 0x8f, 0xd0, 0xf5,

  0x3c, 0xc3, 0x94, 0xde, 0x46, 0xe8, 0x9a, 0x52, 0x9c, 0x30, 0x91, 0xbb,
  0x34, 0xee, 0xd3, 0xb7, 0x43, 0xb5, 0x6e, 0x19, 0xb8, 0xbf, 0x43, 0x9a,
  0x69, 0x66, 0xa1, 0x0c, 0x2c, 0x90, 0x43, 0x00, 0x5c, 0x44, 0x41, 0x19,
  0xb8, 0x20, 0xd6, 0x77, 0xe7, 0x9b, 0xd2, 0xfc, 0x5a, 0xf5, 0x43, 0xa1,
  0x1a, 0x36, 0x37, 0x56, 0x43, 0xa1, 0x4d, 0xee, 0x01, 0x17, 0x50, 0x60,
  0xe2, 0xdd, 0xc8, 0x1a, 0x7a, 0x50, 0x12, 0xac, 0x4e, 0x2f, 0x13, 0xcc,


  0xf3, 0x20, 0x18, 0xb2, 0xe6, 0x3d, 0x45, 0x35, 0x8f, 0xb4, 0x01, 0x54,
  0x54, 0x7a, 0x69, 0xd6, 0xf3, 0xd3, 0xa0, 0xdd, 0xd0, 0x56, 0x55, 0xc3,
  0xa6, 0xc5, 0x12, 0x45, 0x52, 0x78, 0x25, 0xc8, 0x81, 0xca, 0x28, 0x59,
  0x9a, 0x12, 0x13, 0x60, 0xaf, 0x64, 0xa0, 0xa0, 0x36, 0x88, 0xb0, 0x56,
  0x6f, 0xf7, 0x52, 0xe5, 0x35, 0x67, 0xdc, 0x8b, 0x06, 0x8a, 0xf1, 0x38,
  0x2b, 0x7b, 0xb6, 0x3d, 0xfb, 0xa1, 0xf9, 0xab, 0x67, 0x5f, 0xbc, 0x39,
  0x1f, 0x60, 0xe4, 0x2a, 0xa1, 0x5a, 0x03, 0x35, 0x83, 0xcb, 0x84, 0xeb,
  0x43, 0xa6, 0xc4, 0x39, 0xe0, 0x11, 0x53, 0xf0, 0x67, 0x3a, 0x22, 0x1e,
  0x06, 0x1d, 0x42, 0xf4, 0x09, 0xaf, 0x50, 0x2f, 0xe6, 0x82, 0x1b, 0xb0,
  0xed, 0x28, 0x2e, 0x8e, 0x2b, 0xb0, 0x73, 0xd3, 0x8a, 0x76, 0xf2, 0x3c,
  0x05, 0x30, 0x8e, 0xb4, 0x2c, 0x0f, 0xa7, 0xb1, 0xa1, 0xbd, 0x99, 0x17,
  0x8c, 0xc8, 0x2e, 0x18, 0x64, 0xa6, 0xc3, 0x55, 0xd6, 0x68, 0x49, 0xdf,
  0x5c, 0xac, 0x60, 0x26, 0x49, 0xce, 0xd8, 0xc6, 0x4a, 0xe3, 0x11, 0x37,
  0x70, 0x71, 0xb7, 0xd7, 0xc3, 0x87, 0x25, 0xfd, 0xd0, 0xfc, 0xf4, 0x05,
  0xfd, 0xb4, 0xef, 0x6d, 0xb4, 0x57, 0x42, 0x23, 0xed, 0x53, 0x0d, 0x3a,
  0x2e, 0x66, 0x37, 0x66, 0x63, 0xec, 0xbc, 0x41, 0x67, 0xaf, 0x8d, 0x14,
  0x10, 0x2d, 0x91, 0x31, 0x0f, 0x6d, 0xf3, 0xb6, 0xc8, 0xc3, 0x69, 0x01,
  0xdd, 0xa6, 0xac, 0x1d, 0xfa, 0xee, 0x6e, 0xe0, 0xd0, 0xcd, 0x9c, 0x0f,
  0x65, 0x99, 0xe1, 0x23, 0xaf, 0x49, 0x97, 0x61, 0xca, 0xfd, 0xad, 0x0e,
  0xd3, 0x45, 0x4f, 0xdf, 0x62, 0xe1, 0x31, 0x8f, 0x6f, 0x45, 0xa4, 0xef,
  0x09, 0x1d, 0xf4, 0x3c, 0x98, 0x15, 0xee, 0xb5, 0x4c, 0x2d, 0xa9, 0xed,
  0x3a, 0x6b, 0x44, 0x23, 0xfa, 0x56, 0x65, 0x40, 0x5b, 0x91, 0x28, 0xf8,
  0x3b, 0xa1, 0x9a, 0x2f, 0xcd, 0xce, 0x76, 0x7d, 0x3c, 0x5a, 0xdf, 0x41,
  0x33, 0x31, 0xef, 0x3e, 0x71, 0x7e, 0x96, 0xc8, 0x56, 0x9f, 0x9f, 0xee,
  0xd9, 0xff, 0x1e, 0xe7, 0xf7, 0xe2, 0x93, 0x9c, 0xdf, 0x8b, 0xff, 0x6d,
  0xce, 0xef, 0xc5, 0xbf, 0x7c, 0x7e, 0x7b, 0xde, 0xf9, 0xbd, 0xf8, 0xdf,
  0xe5, 0xfc, 0xb4, 0xbf, 0x9a, 0x9e, 0x5e, 0xe2, 0x9d, 0xdf, 0x40, 0xd2,
  0x46, 0x14, 0x98, 0x0f, 0x77, 0x5a, 0xdf, 0xe2, 0x20, 0x8d, 0x24, 0x3a,
  0xb2, 0x17, 0x5c, 0x73, 0x6d, 0x19, 0x1a, 0xb2, 0xa5, 0x61, 0x49, 0x5f,
  0xcb, 0x2a, 0x74, 0xd0, 0xd3, 0xcb, 0xc8, 0x4c, 0xc0, 0x39, 0x06, 0x0b,
  0xb4, 0x45, 0x0a, 0x5a, 0xd0, 0x45, 0x5d, 0xa2, 0xdf, 0x12, 0xd6, 0xcf,
  0xe5, 0x95, 0xa5, 0x2d, 0x0a, 0x0e, 0x21, 0x69, 0xc1, 0xc6, 0x1d, 0x1c,
  0xe2, 0x76, 0xf5, 0xf8, 0xf1, 0x2f, 0x83, 0xc5, 0x6e, 0xd4, 0xae, 0xd9,
  0x4e, 0x29, 0x14, 0x96, 0x70, 0xb6, 0xce, 0x9e, 0x9b, 0x89, 0x66, 0x39,
  0x87, 0x16, 0x3a, 0xb3, 0xa6, 0xaa, 0x63, 0x4e, 0xf0, 0xe9, 0x23, 0xcb,

  0x6f, 0x08, 0xc7, 0xe7, 0xf0, 0xc3, 0x95, 0xef, 0x7b, 0x83, 0xa5, 0xfa,
  0xd0, 0x88, 0x70, 0x5c, 0x3d, 0xb4, 0xed, 0x7b, 0x84, 0x12, 0x0f, 0xb7,
  0xf1, 0xe2, 0xdd, 0x86, 0xe3, 0x04, 0xa2, 0xa0, 0x45, 0x1e, 0xea, 0x77,
  0xc7, 0x65, 0xb7, 0xa6, 0xb4, 0xbc, 0xec, 0x36, 0x7a, 0x5c, 0x9a, 0xb4,
  0x77, 0xab, 0xa4, 0x90, 0x77, 0x44, 0x0a, 0x76, 0x0b, 0xaf, 0xbf, 0x25,
  0x2a, 0x83, 0x69, 0x29, 0xa8, 0x71, 0x08, 0xa3, 0xa1, 0x72, 0x90, 0x66,
  0xf6, 0x7b, 0x66, 0xfc, 0xbd, 0xd8, 0xa9, 0xed, 0xea, 0x1b, 0xd2, 0x15,
  0x97, 0xf3, 0x85, 0x94, 0x16, 0x3f, 0x51, 0x5a, 0x19, 0x71, 0x37, 0x46,

  0x2a, 0x9b, 0x64, 0xf7, 0xbe, 0x54, 0x19, 0xa9, 0x65, 0x6e, 0x4a, 0x2b,

  0xc4, 0x7c, 0x6f, 0x05, 0x46, 0x0b, 0x62, 0x51, 0x5d, 0x37, 0x13, 0xa4,
  0xb8, 0x22, 0x46, 0xf1, 0xd5, 0x91, 0x4b, 0x3a, 0x5a, 0xb3, 0x14, 0x3a,
  0x10, 0x08, 0x00, 0x7f, 0x35, 0x04, 0xce, 0x4d, 0x51, 0x42, 0x2c, 0xb0,
  0xc2, 0x39, 0x33, 0xba, 0x20, 0xbc, 0x0a, 0xc3, 0xf4, 0xa5, 0xca, 0xaa,

  0x74, 0xe2, 0xd4, 0xa6, 0x30, 0x84, 0xc0, 0x9d, 0x42, 0xd5, 0x01, 0x14,
  0xec, 0x21, 0xf5, 0x56, 0xb2, 0xfa, 0x04, 0xba, 0xc3, 0x60, 0x33, 0x65,
  0x77, 0x5a, 0x7b, 0x53, 0x6b, 0x51, 0xd2, 0x1b, 0xfa, 0xe1, 0x80, 0x5a,
  0x09, 0xe0, 0x1f, 0x88, 0x36, 0x5a, 0xca, 0x32, 0x58, 0x35, 0x73, 0x1c,
  0x13, 0x81, 0x9b, 0xe4, 0x56, 0x7d, 0x04, 0x5d, 0x01, 0x68, 0xe8, 0xe8,
  0x02, 0xa5, 0x5f, 0x05, 0x37, 0x01, 0xa9, 0xbb, 0xa4, 0x1a, 0x46, 0x12,
  0x67, 0xff, 0x7a, 0x09, 0x85, 0x02, 0x30, 0x10, 0x3c, 0xc6, 0x5a, 0x0a,
  0x38, 0xe7, 0x16, 0xdf, 0x24, 0x6e, 0xd5, 0xb4, 0x81, 0xa0, 0xe4, 0x28,
  0x05, 0x27, 0x2f, 0xc2, 0x2e, 0x4a, 0x26, 0xac, 0xd7, 0x70, 0x88, 0x50,
  0x11, 0x64, 0xea, 0x1d, 0x41, 0x71, 0x5a, 0x0a, 0xf4, 0x2c, 0xb7, 0x5c,
  0x26, 0xd0, 0x9b, 0xdf, 0xaf, 0x4a, 0xd9, 0xc9, 0x0c, 0x77, 0x59, 0x54,
  0x32, 0xe5, 0xf0, 0xff, 0xaa, 0x2c, 0xe4, 0x06, 0xe0, 0x1a, 0x77, 0x12,
  0x37, 0x90, 0x6b, 0xe4, 0x11, 0xcc, 0xaa, 0x22, 0x5f, 0x3c, 0x46, 0xdf,
  0xc4, 0xb8, 0x2c, 0x52, 0xeb, 0xe3, 0x64, 0xee, 0x95, 0xa6, 0x71, 0x6f,
  0x71, 0x51, 0xb3, 0xb9, 0xcf, 0xb8, 0xae, 0x90, 0xec, 0x02, 0xde, 0x16,
  0x20, 0x56, 0xd8, 0x2f, 0x74, 0x26, 0x4b, 0xd9, 0x08, 0xa7, 0x5e, 0x0f,
  0x06, 0x67, 0xbe, 0x2d, 0xa7, 0x8d, 0x8d, 0x56, 0x62, 0x12, 0xd0, 0x68,
  0xbd, 0x66, 0x74, 0x44, 0x06, 0x3f, 0x0c, 0x72, 0x0e, 0x59, 0x77, 0x32,
  0x53, 0xcc, 0x0e, 0xc5, 0x91, 0x1f, 0x15, 0x8f, 0x0b, 0x34, 0xbe, 0xa4,
  0x08, 0x97, 0xaf, 0x39, 0xce, 0x8f, 0x41, 0x60, 0x57, 0x96, 0x3d, 0x7f,
  0x28, 0x1d, 0x2c, 0x75, 0x92, 0xa5, 0x18, 0xbf, 0x47, 0x50, 0x64, 0x04,
  0xb7, 0x12, 0xd9, 0x8a, 0x52, 0x67, 0x4c, 0x68, 0x2e, 0xad, 0x3d, 0xce,
  0xa4, 0x73, 0x59, 0xa3, 0x3b, 0x06, 0x9b, 0x33, 0x68, 0x69, 0x21, 0x22,
  0x22, 0x85, 0x53, 0x36, 0x54, 0xbe, 0xcb, 0x1b, 0x52, 0xb5, 0xd7, 0xbc,

  0x19, 0xa6, 0x79, 0x42, 0x8c, 0x08, 0x0f, 0x99, 0x07, 0x25, 0x03, 0x36,

  0xee, 0xb4, 0x27, 0xa0, 0x18, 0x2d, 0x74, 0xe2, 0x58, 0xa9, 0x42, 0xba,
  0x5c, 0x8c, 0x4c, 0xe9, 0x7b, 0xc6, 0xf1, 0x48, 0x5c, 0x4d, 0x33, 0x30,
  0x14, 0xef, 0x0b, 0xd8, 0xad, 0x17, 0x73, 0x20, 0x18, 0x97, 0x93, 0xeb,
  0x78, 0xea, 0x84, 0x15, 0x1b, 0xd5, 0xe6, 0xd4, 0x3e, 0x2c, 0x63, 0x4c,
  0x44, 0x60, 0x64, 0xc0, 0x4b, 0xe6, 0x70, 0x7b, 0x7a, 0xe7, 0xb0, 0xec,
  0x9e, 0x87, 0x5c, 0x84, 0xbe, 0x09, 0x91, 0x16, 0x96, 0xbf, 0x51, 0x2e,
  0x36, 0x65, 0xaf, 0xe0, 0x97, 0xfa, 0x21, 0x30, 0x9c, 0x51, 0x5e, 0x08,
  0x22, 0x0d, 0xa6, 0xcf, 0xc0, 0xcd, 0xa3, 0x9c, 0xa1, 0xd2, 0x00, 0x0d,
  0xd8, 0xb8, 0x7a, 0xbd, 0x1b, 0x56, 0xa0, 0x62, 0xd8, 0xe8, 0xa8, 0x02,
  0x9e, 0x48, 0x89, 0xfb, 0xe3, 0xa4, 0xc4, 0xd6, 0x4a, 0x3c, 0x81, 0xe8,
  0xc8, 0x65, 0x51, 0x04, 0x0d, 0x86, 0x9d, 0xe4, 0xa5, 0x09, 0x42, 0x93,
  0x06, 0xe8, 0xc1, 0xe0, 0xc4, 0x3f, 0x48, 0x66, 0x83, 0x1c, 0x84, 0x9c,
  0x1f, 0x83, 0xdf, 0xe6, 0xe2, 0x40, 0x31, 0x50, 0xb8, 0xbc, 0xcb, 0x12,
  0xbc, 0x89, 0x83, 0x9a, 0x85, 0xf4, 0x7c, 0x32, 0x48, 0x74, 0x4b, 0x8d,
  0xd4, 0xd8, 0x88, 0x8b, 0x12, 0x87, 0xdd, 0x5c, 0x66, 0x72, 0x38, 0xb8,
  0x0f, 0xcd, 0x1a, 0x63, 0xaa, 0x0b, 0x03, 0x64, 0x1a, 0xb0, 0x1f, 0x1f,
  0x11, 0xf6, 0xfd, 0xe5, 0xd1, 0xd5, 0xe9, 0xe0, 0xe2, 0xfc, 0x00, 0xd9,
  0x05, 0x62, 0x68, 0xc2, 0xff, 0xef, 0x70, 0x9b, 0x22, 0x02, 0x82, 0xa6,
  0x4f, 0xa6, 0x25, 0x63, 0x90, 0xd2, 0x97, 0x50, 0xe9, 0xf9, 0x3e, 0x89,
  0x6f, 0x43, 0xc5, 0x43, 0x03, 0x60, 0x50, 0xd8, 0x0b, 0xa9, 0x46, 0xa3,
  0x9c, 0xbe, 0x24, 0xe8, 0xc0, 0x54, 0xf0, 0x42, 0x70, 0x2f, 0x88, 0xf6,
  0x6a, 0x87, 0x5f, 0xa9, 0x9a, 0xd4, 0xb3, 0x94, 0x9c, 0x9d, 0x5e, 0x75,

  0x4d, 0x1a, 0x4a, 0x03, 0x3e, 0xcf, 0x59, 0x5d, 0x74, 0x3f, 0xe8, 0x40,
  0x34, 0x8f, 0xa7, 0x46, 0x5f, 0x4d, 0x6b, 0xe8, 0xa4, 0xe2, 0x50, 0xa6,

  0xe9, 0x5c, 0x8c, 0x0e, 0x10, 0xd8, 0x1a, 0xa3, 0x12, 0x70, 0x80, 0x5d,
  0x32, 0x6b, 0x1d, 0x60, 0x27, 0x89, 0xe3, 0x07, 0xa3, 0x0e, 0x91, 0x68,
  0x1c, 0x94, 0x65, 0x86, 0x73, 0xa1, 0x2a, 0x66, 0x55, 0xfe, 0x92, 0xec,
  0x2e, 0x99, 0xe5, 0x0b, 0x2d, 0x04, 0x14, 0xd4, 0x5a, 0x02, 0x43, 0xed,
  0xaf, 0x80, 0x98, 0x91, 0xab, 0xc6, 0x2e, 0x3c, 0xa6, 0x38, 0x37, 0xff,
  0x5a, 0x31, 0x56, 0x15, 0x56, 0x35, 0x74, 0x80, 0xbc, 0x4b, 0xe8, 0xf2,
  0xca, 0x64, 0x73, 0x78, 0x8b, 0x03, 0x10, 0x3f, 0xb6, 0x17, 0x1b, 0xae,
  0x81, 0xdc, 0x4d, 0x71, 0x74, 0x9f, 0x24, 0xb7, 0xfc, 0x69, 0xd3, 0x26,
  0x93, 0x3b, 0x13, 0x48, 0xaf, 0x94, 0xef, 0x37, 0x3b, 0xc1, 0x18, 0x7d,
  0x4a, 0x01, 0x6b, 0x38, 0x83, 0x42, 0xb3, 0x48, 0xad, 0xd4, 0x97, 0xa0,
  0x0e, 0x47, 0x07, 0x0b, 0x10, 0x16, 0x77, 0x14, 0x06, 0xe0, 0x05, 0x0a,
  0xe8, 0x6d, 0x00, 0x37, 0x56, 0x1a, 0x3c, 0xc7, 0xc5, 0x6d, 0x69, 0x6f,
  0xb9, 0xaf, 0x0a, 0x90, 0x22, 0xc8, 0x33, 0x8e, 0xb9, 0x9f, 0x12, 0xae,
  0xa4, 0x5e, 0x2a, 0x80, 0x15, 0xa6, 0x95, 0x53, 0xa7, 0xc9, 0x63, 0x85,
  0x5a, 0xcc, 0xd7, 0x39, 0x4b, 0x5b, 0x1d, 0xd6, 0x2a, 0xda, 0xa6, 0xcb,
  0xb2, 0xbd, 0xb5, 0xf5, 0x24, 0x52, 0x9c, 0x90, 0xf9, 0x4a, 0xc0, 0x38,
  0x54, 0x8a, 0x39, 0xcc, 0x6d, 0x90, 0x4d, 0xe2, 0x54, 0xca, 0x56, 0x9b,
  0xd8, 0x9a, 0xf0, 0x49, 0x03, 0xdc, 0x66, 0x15, 0x31, 0x56, 0xae, 0x19,


  0x50, 0x91, 0x60, 0xe3, 0x70, 0xb7, 0xf8, 0x42, 0x1f, 0xd4, 0xde, 0x69,
  0xa2, 0x43, 0xb1, 0x1c, 0x48, 0x19, 0x23, 0xd5, 0xdc, 0x88, 0xaf, 0x1f,
  0xad, 0xf7, 0x96, 0xd4, 0x62, 0x8e, 0x0a, 0xd2, 0xac, 0x38, 0xda, 0xcb,
  0xf3, 0xef, 0xaf, 0x32, 0x00, 0xc2, 0x68, 0x70, 0x7f, 0x60, 0xf5, 0x92,
  0x86, 0x05, 0x39, 0xb5, 0x28, 0x69, 0x54, 0x02, 0x95, 0x0a, 0x87, 0x2d,
  0xcc, 0x6a, 0x81, 0xf3, 0x37, 0x5b, 0xed, 0x39, 0x5d, 0xf3, 0x58, 0x17,
  0x5e, 0x89, 0xea, 0x5f, 0xc7, 0xf6, 0xab, 0xd7, 0x22, 0xbc, 0xac, 0x9f,
  0x2f, 0x02, 0x6c, 0xf4, 0x08, 0x46, 0xa3, 0x29, 0x08, 0x11, 0x79, 0x03,
  0x09, 0x9d, 0x3c, 0xce, 0x79, 0xe6, 0xf8, 0xe1, 0x11, 0x53, 0x92, 0xf3,
  0x3f, 0xb5, 0xe2, 0xb6, 0x01, 0x65, 0xee, 0xaa, 0xd7, 0xda, 0x7f, 0x45,
  0xf5, 0xbd, 0x71, 0xee, 0x20, 0x18, 0x9a, 0x22, 0xeb, 0x86, 0x43, 0x9f,
  0x3d, 0xfa, 0x3e, 0x38, 0x12, 0xd7, 0x91, 0xd8, 0x60, 0x11, 0xc3, 0x85,
  0x50, 0x8e, 0x1c, 0xf9, 0x03, 0x58, 0x53, 0x00, 0xbb, 0xb5, 0x4b, 0x87,
  0x07, 0xb7, 0x06, 0xcb, 0x86, 0xf8, 0x94, 0x83, 0x4e, 0x0e, 0x0b, 0xae,
  0xc9, 0xdd, 0x26, 0x79, 0x25, 0xa5, 0x05, 0x05, 0x45, 0xf9, 0xc3, 0x9d,
  0x33, 0x61, 0xd4, 0xd2, 0x24, 0x08, 0xfb, 0x37, 0xcd, 0xc1, 0xe9, 0x80,
  0x27, 0x11, 0xa7, 0xac, 0x5c, 0x52, 0x0c, 0x93, 0x87, 0x37, 0x38, 0x9c,
  0xac, 0x84, 0x30, 0x7e, 0x09, 0x46, 0x4b, 0x04, 0x87, 0xc1, 0x53, 0x1e,
  0x31, 0x47, 0x0a, 0x21, 0x7c, 0x23, 0x3a, 0x1c, 0x02, 0x42, 0x59, 0x16,
  0x4e, 0xa6, 0x54, 0xe7, 0x26, 0x85, 0x53, 0xcd, 0x3a, 0xa4, 0x12, 0x59,
  0xc1, 0x2a, 0x1f, 0xf5, 0x16, 0xbb, 0x9c, 0x39, 0xe1, 0x39, 0x5f, 0x77,
  0xf0, 0xaa, 0xe3, 0xbb, 0x51, 0xed, 0x42, 0xa8, 0x57, 0x81, 0x65, 0x8b,
  0x85, 0x60, 0xe1, 0x73, 0x0b, 0xc6, 0xf4, 0x6c, 0x39, 0x36, 0xde, 0x7c,
  0xea, 0xcf, 0xd8, 0x75, 0x9b, 0xa3, 0xd9, 0x70, 0x63, 0x3c, 0x47, 0x57,
  0x3e, 0x7b, 0x2c, 0x70, 0x97, 0x83, 0xad, 0xab, 0xf0, 0x20, 0x04, 0xb8,
  0x2b, 0x80, 0x2c, 0x2f, 0x09, 0xde, 0xf1, 0x23, 0xd5, 0x9e, 0x9a, 0x4f,
  0x13, 0x75, 0x7b, 0x30, 0xa0, 0x08, 0x89, 0x9b, 0x93, 0xff, 0x47, 0xe8,
  0x18, 0xb7, 0x70, 0x54, 0xa4, 0x8b, 0x8a, 0xb3, 0xd2, 0xa4, 0xc4, 0x66,
  0x25, 0x7c, 0x1a, 0xfc, 0x6d, 0x3a, 0xcb, 0x87, 0x31, 0xdf, 0x11, 0x93,
  0xe1, 0xaa, 0x71, 0xaf, 0x1a, 0x6c, 0x3d, 0xb2, 0x37, 0x24, 0xcf, 0x40,
  0xdb, 0x1d, 0x58, 0x72, 0xef, 0xa0, 0x4b, 0x79, 0x1b, 0x0f, 0xd5, 0xca,

  0x0f, 0x9a, 0x4f, 0x30, 0x08, 0x6c, 0x6f, 0xd2, 0x95, 0xdb, 0xab, 0xd8,
  0x1c, 0x94, 0x20, 0x5c, 0x3a, 0x77, 0xca, 0xb3, 0xbc, 0x09, 0x4c, 0x67,
  0xbc, 0x4c, 0xea, 0xf9, 0xc2, 0x6b, 0x92, 0x2c, 0x24, 0x8d, 0x4d, 0x29,
  0x67, 0xd5, 0xf4, 0xab, 0x91, 0xa4, 0x9c, 0x60, 0x2e, 0x2c, 0xc2, 0xc4,
  0x4b, 0xee, 0x6a, 0x37, 0xba, 0xc9, 0xef, 0xa9, 0x4e, 0x2f, 0x43, 0xdb,
  0xc4, 0x4e, 0x4e, 0xa5, 0xa7, 0xb3, 0x57, 0x0c, 0xaf, 0xe3, 0x53, 0xfc,
  0x84, 0xdd, 0x02, 0xa4, 0x4b, 0xf3, 0x99, 0xac, 0xd8, 0x19, 0xb7, 0xd7,
  0x44, 0xdd, 0x51, 0x64, 0x3e, 0x1d, 0x16, 0x4f, 0xc4, 0xd6, 0x4a, 0x74,
  0x1d, 0x61, 0x94, 0x77, 0x1d, 0x88, 0x45, 0x6a, 0xa0, 0x63, 0x4a, 0x3f,
  0x23, 0x84, 0x64, 0x55, 0x24, 0x98, 0x17, 0x84, 0xeb, 0xb3, 0xf1, 0xa6,
  0x60, 0xa6, 0xf3, 0xec, 0x91, 0x73, 0x29, 0xe9, 0xcc, 0xc9, 0xeb, 0x21,
  0x91, 0x63, 0x25, 0xa8, 0xa4, 0x1a, 0x39, 0xbf, 0x1c, 0x27, 0xf1, 0x2c,
  0xd4, 0x33, 0x09, 0x27, 0x8c, 0x3a, 0x3f, 0xb3, 0x36, 0x04, 0xcb, 0xca,
  0x24, 0x70, 0x2e, 0x95, 0x36, 0x9c, 0x6b, 0x2e, 0xca, 0xa2, 0x99, 0x21,
  0xdd, 0xaa, 0x80, 0x8f, 0x05, 0xbb, 0xb8, 0xd1, 0x03, 0x84, 0x20, 0x31,
  0x12, 0x5c, 0x1a, 0x4a, 0x7b, 0xb1, 0x85, 0x98, 0x88, 0xec, 0x89, 0x69,
  0xe9, 0xfa, 0x00, 0x51, 0x00, 0x55, 0x45, 0x35, 0x87, 0x93, 0x70, 0x1a,
  0xa3, 0x03, 0x90, 0x90, 0xd1, 0xe2, 0x3d, 0x9c, 0x18, 0x67, 0x42, 0x22,
  0x93, 0xdc, 0x90, 0x7b, 0x48, 0xd9, 0x76, 0xc2, 0x39, 0x16, 0xfe, 0x49,
  0xdf, 0x25, 0x9a, 0x1f, 0x4b, 0x06, 0x08, 0x1f, 0x40, 0x65, 0x20, 0x13,
  0x70, 0x34, 0xe1, 0x33, 0xcc, 0x64, 0x76, 0x76, 0x5a, 0x1c, 0x70, 0xdc,
  0xe3, 0x5c, 0x69, 0x8c, 0x2e, 0x7b, 0x19, 0x4f, 0x12, 0x35, 0x5a, 0x84,
  0x7d, 0xe7, 0x23, 0xd8, 0x42, 0x4a, 0xd5, 0x21, 0x68, 0x3a, 0xb4, 0x91,
  0x3d, 0x6b, 0x87, 0xb9, 0x26, 0x72, 0x49, 0x23, 0x72, 0xf1, 0x22, 0x08,
  0xbb, 0x2d, 0x67, 0xe9, 0x42, 0xa3, 0x94, 0xdd, 0x28, 0x91, 0xdc, 0xd2,
  0xd9, 0xa3, 0x9c, 0xca, 0xb2, 0x17, 0x70, 0xc0, 0x69, 0xba, 0x9d, 0x82,
  0xa0, 0xcf, 0xd0, 0x32, 0x5a, 0x6f, 0x8c, 0xbe, 0xb7, 0xb5, 0x4d, 0x93,
  0xdd, 0xdb, 0x7a, 0xb9, 0x51, 0x97, 0xca, 0xb3, 0x32, 0xe9, 0x51, 0xea,

  0x72, 0xd8, 0x47, 0xc1, 0x0d, 0x4b, 0x6d, 0x74, 0x95, 0xfc, 0x11, 0xf8,

  0x92, 0xe4, 0x3b, 0x8f, 0x97, 0x85, 0xda, 0x64, 0xd8, 0xca, 0x16, 0xdd,
  0x93, 0xe5, 0x0d, 0x62, 0xef, 0x7a, 0x52, 0xde, 0xbe, 0x43, 0xae, 0x3b,
  0x8a, 0xe0, 0xf3, 0x3e, 0xc5, 0xf4, 0xaa, 0xb4, 0xc9, 0xe4, 0x7d, 0xa0,
  0xe7, 0xd4, 0x00, 0x0f, 0x14, 0xa0, 0x38, 0x70, 0xa3, 0x9c, 0x2a, 0x2c,
  0x49, 0x1c, 0xf5, 0xa6, 0xf3, 0x86, 0xef, 0xbc, 0x4d, 0xb3, 0xb4, 0xbc,
  0xa1, 0x66, 0xf5, 0x65, 0x19, 0x4f, 0x13, 0x1f, 0xe6, 0x04, 0x18, 0x12,
  0x98, 0x00, 0x6c, 0xee, 0x17, 0xd4, 0x9f, 0x04, 0x13, 0x84, 0x79, 0xdf,
  0xa5, 0x6c, 0x51, 0x3a, 0xad, 0x12, 0x3e, 0xa6, 0x5d, 0x66, 0x88, 0x5e,
  0xd2, 0xd2, 0x69, 0x03, 0xdc, 0xd6, 0x05, 0x18, 0x7b, 0x52, 0x12, 0x50,
  0x22, 0x77, 0x88, 0xe3, 0x16, 0x71, 0xa1, 0xde, 0x5f, 0xd1, 0x3a, 0x1e,


  0xee, 0xc5, 0x00, 0x58, 0x90, 0xed, 0x58, 0x4f, 0x89, 0xe0, 0xf0, 0xb3,
  0x1f, 0x40, 0x17, 0xed, 0xbf, 0x32, 0x3f, 0xde, 0x78, 0x5e, 0xdb, 0xe0,
  0x9d, 0x86, 0x6e, 0x86, 0x15, 0x19, 0x12, 0x8f, 0x26, 0x87, 0xd5, 0x6b,
  0xfe, 0x47, 0xd8, 0xe3, 0x4d, 0xe8, 0x06, 0x60, 0x40, 0xbc, 0x3f, 0x22,
  0x60, 0x41, 0x8b, 0xf3, 0xef, 0x14, 0x6f, 0xd4, 0x2a, 0xb5, 0xa9, 0x87,
  0x32, 0xaa, 0xaa, 0x41, 0x98, 0x57, 0xe3, 0xa9, 0xe1, 0x3c, 0x72, 0x9b,
  0x7b, 0xa1, 0xba, 0x1c, 0x08, 0xde, 0x0a, 0xdd, 0x93, 0x08, 0xc0, 0x16,

  0x9d, 0x25, 0xdc, 0x32, 0x2d, 0x5a, 0xfb, 0x6a, 0x2d, 0x50, 0xd3, 0xbd,


  0x76, 0xe8, 0xf4, 0x99, 0x28, 0x6d, 0x3b, 0xc6, 0xb5, 0x2f, 0xd0, 0xb2,
  0x47, 0x48, 0x2d, 0xfe, 0xa6, 0x9c, 0x01, 0x57, 0x59, 0x84, 0x93, 0xbb,
  0x34, 0xb1, 0x5b, 0x50, 0x62, 0xeb, 0x29, 0xa4, 0x0b, 0x86, 0xe7, 0xc6,
  0xb2, 0x89, 0xfa, 0xba, 0x55, 0x9f, 0x5b, 0xf3, 0x6a, 0xbe, 0xb1, 0x80,
  0x8b, 0x31, 0xdb, 0xb8, 0x55, 0xbb, 0xd3, 0xcc, 0x9a, 0xe7, 0xc4, 0x93,
  0xa1, 0x88, 0xd5, 0x68, 0x44, 0x76, 0x21, 0x5d, 0x7d, 0xf8, 0xe5, 0x74,
  0x1a, 0x4c, 0x74, 0x85, 0x2d, 0xc0, 0x83, 0xc7, 0x35, 0x4f, 0xc0, 0xde,
  0x22, 0x7d, 0x03, 0xe5, 0x7c, 0x7b, 0x09, 0x8d, 0xd5, 0xdd, 0x03, 0xcf,
  0x38, 0xab, 0x38, 0x74, 0xab, 0x14, 0xc3, 0x54, 0x40, 0x44, 0xc0, 0x34,
  0x80, 0xae, 0x2c, 0xfa, 0x99, 0x89, 0x79, 0x4c, 0x62, 0x20, 0x8a, 0x47,
  0x49, 0x30, 0x9a, 0x51, 0x55, 0x19, 0x73, 0x90, 0x64, 0xee, 0xf1, 0xb0,
  0x99, 0x16, 0x68, 0x70, 0x1d, 0x13, 0x76, 0x94, 0xe2, 0x92, 0x17, 0xdc,
  0x67, 0x96, 0x07, 0xb6, 0xf4, 0x29, 0xd2, 0xb6, 0x4a, 0xb6, 0xa2, 0xa9,
  0xe9, 0x1b, 0x77, 0xeb, 0x9b, 0x44, 0x55, 0x51, 0x1b, 0x90, 0x4a, 0xb4,


  0x84, 0x61, 0x38, 0x11, 0xab, 0xc8, 0x2d, 0x69, 0x6f, 0x46, 0xaa, 0xc8,
  0x84, 0x00, 0x6e, 0xb4, 0x49, 0x97, 0x84, 0xeb, 0xca, 0x46, 0x08, 0x66,
  0x46, 0x4c, 0x26, 0x8f, 0xb0, 0x55, 0xe7, 0xce, 0xee, 0xe7, 0x9f, 0x07,
  0x1d, 0x7c, 0xbc, 0x4b, 0x48, 0x84, 0xb8, 0x53, 0x16, 0x19, 0xb9, 0x6b,
  0x30, 0xee, 0xf1, 0xfb, 0x48, 0x61, 0xea, 0xe6, 0xca, 0xa9, 0x47, 0x2c,
  0x7c, 0xd5, 0x77, 0xf2, 0x92, 0xff, 0x65, 0x8e, 0x6a, 0x85, 0x70, 0x31,
  0x52, 0xaf, 0x90, 0x6b, 0xcc, 0xd3, 0x16, 0x95, 0x2e, 0x91, 0x24, 0x6d,
  0x4e, 0xe8, 0x17, 0x80, 0x58, 0xa9, 0x2a, 0xe0, 0xe2, 0x0f, 0xd0, 0x1a,
  0xa8, 0xd2, 0x89, 0x73, 0xff, 0x78, 0x3b, 0xd6, 0x5a, 0x40, 0x01, 0xd6,
  0x22, 0xcd, 0x81, 0x19, 0x26, 0x06, 0x65, 0x87, 0xbd, 0x1c, 0x0d, 0x1c,
  0x34, 0xf6, 0x3f, 0x66, 0x58, 0x19, 0x8c, 0xfd, 0x8e, 0xe0, 0x03, 0x8d,
  0xe1, 0x08, 0x27, 0x63, 0x9a, 0x54, 0x7e, 0x35, 0xab, 0x53, 0xe3, 0xb1,
  0x62, 0xf0, 0x90, 0x4d, 0x24, 0xc5, 0xb8, 0xd1, 0x61, 0x5f, 0xe2, 0xc9,
  0xe3, 0x74, 0xa2, 0x97, 0xd4, 0xf4, 0x08, 0xfa, 0x8a, 0x4e, 0xe3, 0x50,
  0xb6, 0x5e, 0x8a, 0xd3, 0xbf, 0x0a, 0x22, 0x5d, 0x4a, 0xa1, 0x09, 0xc1,
  0x2e, 0x56, 0x15, 0xa8, 0xd5, 0x96, 0x77, 0x53, 0x2d, 0x11, 0x77, 0xa4,
  0xe1, 0x0a, 0x4e, 0xde, 0x60, 0xce, 0xde, 0x9f, 0x85, 0xa0, 0x96, 0x0e,
  0xcd, 0xa0, 0xd2, 0xf0, 0x0a, 0xcb, 0xb9, 0x70, 0x2a, 0xa1, 0x9d, 0xd0,
  0x6e, 0x15, 0xc8, 0x1f, 0xe0, 0x69, 0xcf, 0xea, 0xc1, 0x77, 0x9d, 0x7d,
  0xf2, 0xcf, 0xde, 0xcd, 0xaf, 0x10, 0x5c, 0x25, 0xde, 0x62, 0x5b, 0x06,
  0xe4, 0xc6, 0xe8, 0x63, 0xe3, 0xf3, 0xe6, 0x6b, 0xd1, 0x8c, 0xcb, 0xe1,
  0x52, 0x2d, 0x9e, 0x07, 0x51, 0xd6, 0x34, 0x4f, 0x78, 0x96, 0x04, 0xae,
  0xa4, 0xbb, 0x8a, 0xbe, 0xab, 0xaa, 0x58, 0x8e, 0x50, 0xb1, 0x24, 0xa3,
  0x9c, 0x3e, 0x15, 0xea, 0xc9, 0xa8, 0x41, 0x36, 0xb3, 0x62, 0xea, 0x9c,
  0x4a, 0xe7, 0x45, 0xbb, 0x2c, 0xb0, 0xb0, 0x6c, 0xe1, 0x09, 0x6a, 0x30,
  0xd7, 0x29, 0xf4, 0x82, 0xdd, 0xbc, 0x13, 0x72, 0xb7, 0x94, 0xe9, 0xcf,
  0xac, 0x94, 0x49, 0x81, 0x87, 0x82, 0x64, 0x92, 0x83, 0x23, 0xc1, 0xb6,

  0x2d, 0xd1, 0x1b, 0xec, 0x35, 0xcd, 0xa2, 0x1c, 0xe9, 0xcd, 0xe3, 0xd3,
  0x6e, 0x79, 0x13, 0x4b, 0x24, 0x54, 0xe3, 0x8a, 0x64, 0xba, 0x44, 0x29,
  0x47, 0xfb, 0xb4, 0xae, 0xa0, 0xd8, 0xfa, 0xc4, 0x22, 0x5d, 0x50, 0x3f,
  0x2b, 0xb0, 0xe7, 0xbc, 0x8a, 0x29, 0x78, 0x8b, 0xbb, 0x48, 0x2f, 0x33,
  0xd8, 0xae, 0x6a, 0x89, 0x99, 0x28, 0x82, 0x0a, 0x06, 0xfc, 0xeb, 0x6f,
  0x14, 0x00, 0xca, 0x65, 0xe9, 0xdc, 0x81, 0x69, 0x6c, 0x4c, 0xef, 0x64,

  0xe2, 0xd9, 0x2e, 0x09, 0xe5, 0x3f, 0x12, 0x9c, 0x25, 0x26, 0x14, 0x56,
  0xca, 0x00, 0xb8, 0xdd, 0x28, 0x3a, 0x62, 0xbe, 0xc0, 0x48, 0xc0, 0x28,
  0xb1, 0x60, 0xde, 0xb4, 0x29, 0x84, 0xad, 0xe1, 0xdd, 0x6a, 0xc2, 0xc5,
  0x55, 0xdd, 0xc9, 0x45, 0x4b, 0x96, 0x96, 0x57, 0x5d, 0xc6, 0xff, 0xe6,
  0x22, 0x57, 0x81, 0x7e, 0x8b, 0x4b, 0x2e, 0xa2, 0x2b, 0xfd, 0x36, 0xdc,
  0x24, 0x04, 0x58, 0xab, 0xfe, 0x9b, 0x31, 0x78, 0x91, 0xf3, 0x05, 0x40,
  0xf4, 0x08, 0x3d, 0xfc, 0x40, 0xdc, 0xa7, 0xd8, 0xd4, 0x54, 0x18, 0x9a,
  0x89, 0x4e, 0x4b, 0x91, 0x2c, 0xab, 0x88, 0x6b, 0xc0, 0x3a, 0x71, 0xef,
  0xd7, 0xe4, 0xe2, 0x86, 0x90, 0xdb, 0xac, 0x9d, 0x4f, 0xac, 0x9a, 0xaf,
  0x89, 0xc1, 0x3b, 0x36, 0x3c, 0x04, 0x55, 0xaa, 0x22, 0x06, 0x8e, 0xf9,
  0xb7, 0xc5, 0xb4, 0x05, 0x5a, 0x97, 0x3b, 0xa7, 0x81, 0xad, 0xe0, 0xb7,
  0x6a, 0x24, 0x3a, 0xec, 0xbd, 0x8d, 0x64, 0x3e, 0xaf, 0xbf, 0xaa, 0x0d,
  0xa7, 0xed, 0x8b, 0xdc, 0xee, 0x1c, 0x82, 0xf4, 0x34, 0x9a, 0xa6, 0x4f,
  0x6c, 0x02, 0xb7, 0xb6, 0x31, 0x45, 0x25, 0xe5, 0x4d, 0x9e, 0xc8, 0xd9,
  0x65, 0x64, 0x02, 0x9b, 0x4e, 0x7c, 0xb0, 0xae, 0x32, 0xd8, 0x57, 0x49,
  0x35, 0xde, 0xf6, 0x69, 0x93, 0x5c, 0xff, 0x8f, 0xfc, 0x26, 0xc3, 0x7f,
  0xe0, 0x17, 0xf0, 0x03, 0xaf, 0xb7, 0xb7, 0x83, 0x33, 0x6f, 0x9d, 0x2f,
  0x4f, 0x58, 0x67, 0x8c, 0xc2, 0x48, 0x0a, 0x05, 0x1c, 0xde, 0x56, 0x33,
  0xfd, 0xfb, 0x54, 0x3b, 0xed, 0xbb, 0xd9, 0xe8, 0x0e, 0x11, 0x2a, 0xa5,

  0xf3, 0x2a, 0x27, 0x61, 0x07, 0x59, 0x62, 0x6a, 0xe4, 0xc3, 0xcc, 0x87,
  0x38, 0x02, 0x5d, 0x0d, 0x8f, 0xa4, 0x7d, 0xf1, 0x1d, 0xcc, 0x08, 0x78,
  0x7c, 0x7d, 0x78, 0xb3, 0x9c, 0x26, 0xc4, 0x37, 0xab, 0x87, 0xaa, 0xf3,
  0xac, 0x95, 0xa3, 0x97, 0x82, 0xdd, 0x14, 0x5c, 0x68, 0x53, 0x39, 0x29,
  0xa7, 0x54, 0xb9, 0x56, 0x53, 0x21, 0x38, 0x21, 0x1f, 0x2d, 0x25, 0x4d,
  0x78, 0x68, 0x56, 0x97, 0xb2, 0x32, 0xda, 0xe5, 0x4d, 0x13, 0xf4, 0x23,
  0x8b, 0xb7, 0xb2, 0x62, 0x05, 0xf7, 0xc9, 0xf0, 0xf5, 0x57, 0xe8, 0xdb,
  0x7a, 0xa0, 0x2e, 0x32, 0xac, 0xd5, 0xe2, 0xd6, 0x6d, 0x52, 0x53, 0x99,
  0xc8, 0x59, 0x44, 0x73, 0x90, 0xbc, 0x68, 0x1f, 0xd6, 0xa9, 0x76, 0x75,
  0x86, 0x9c, 0xe4, 0xf9, 0xca, 0x11, 0xd5, 0x77, 0x43, 0x7b, 0xe2, 0xa4,

  0xb4, 0x73, 0xa2, 0xb7, 0xad, 0xe4, 0x67, 0x82, 0x20, 0x39, 0x53, 0x13,
  0x97, 0x21, 0x64, 0x15, 0x8a, 0xbb, 0xb2, 0x8d, 0xae, 0x12, 0xe7, 0x75,
  0x97, 0x8a, 0x3d, 0xc3, 0x7d, 0xc3, 0xec, 0x1a, 0xf8, 0x3a, 0x12, 0x10,
  0x1e, 0xfe, 0xf5, 0x0b, 0xf3, 0x3a, 0xfe, 0x07, 0x6e, 0x33, 0xf5, 0x65,
  0x58, 0xb1, 0x1a, 0x4c, 0x08, 0xd1, 0x77, 0x36, 0x29, 0x09, 0xc1, 0xc4,
  0x5b, 0xd7, 0xba, 0xac, 0x68, 0x7f, 0xb1, 0x56, 0x8b, 0x56, 0x51, 0x34,
  0x89, 0x78, 0xdc, 0x38, 0xf7, 0xd4, 0x5a, 0xcc, 0xc9, 0x97, 0x70, 0x13,
  0xce, 0xbe, 0x65, 0xe2, 0x38, 0x73, 0x9d, 0xfa, 0x8f, 0x1d, 0x33, 0xf9,
  0x1f, 0x3b, 0x76, 0xfa, 0x3f, 0x76, 0xec, 0x02, 0x7e, 0xec, 0x20, 0x18,
  0x31, 0x2e, 0xc2, 0x37, 0x88, 0x7f, 0xe9, 0xa1, 0xaf, 0xf1, 0x57, 0xed,
  0x47, 0x9d, 0x6f, 0x3a, 0x9f, 0xec, 0xac, 0xad, 0xda, 0x34, 0x37, 0x43,
  0x80, 0xaa, 0x23, 0x9b, 0x7b, 0x08, 0xec, 0xba, 0xb6, 0x4d, 0x76, 0x5b,
  0xd0, 0x38, 0x7b, 0xf4, 0x4a, 0x6e, 0xed, 0x03, 0xb8, 0xe3, 0xb6, 0x45,
  0xa1, 0xd3, 0x7a, 0xc7, 0x60, 0x19, 0x9b, 0xa8, 0x21, 0x81, 0x58, 0x8e,
  0x7d, 0x79, 0x64, 0x5e, 0xf7, 0xe4, 0xcf, 0x7f, 0xc2, 0x17, 0x48, 0xff,
  0xa7, 0x31, 0xe4, 0x56, 0x13, 0x8c, 0x99, 0x64, 0x67, 0x53, 0xd9, 0x4c,
  0xc6, 0xb9, 0x2b, 0x2c, 0xfe, 0x26, 0x5c, 0x6f, 0xca, 0x24, 0xe1, 0xc5,
  0x36, 0xe7, 0x29, 0x35, 0xac, 0x84, 0x55, 0xcd, 0xd8, 0x42, 0xdd, 0x44,
  0xa9, 0x40, 0x15, 0x10, 0xd4, 0x47, 0xb2, 0x24, 0x13, 0x5d, 0x8c, 0x57,
  0x37, 0xae, 0xb9, 0x82, 0xa4, 0x51, 0x11, 0x9f, 0xe5, 0x45, 0xf9, 0xba,
  0x53, 0x60, 0xff, 0xef, 0x68, 0x5a, 0x80, 0x06, 0xfb, 0x05, 0x92, 0xd6,
  0x12, 0x0e, 0xcb, 0xde, 0xd3, 0x87, 0xde, 0xfc, 0x11, 0xe6, 0xbd, 0xf6,
  0x8b, 0x28, 0xc3, 0x61, 0x69, 0x63, 0xca, 0xd5, 0xa2, 0x14, 0x87, 0x66,
  0xb6, 0x1a, 0x5f, 0x5d, 0xe7, 0x52, 0xca, 0xef, 0x5f, 0x87, 0xc0, 0x4e,
  0xbd, 0x85, 0x38, 0x9c, 0x97, 0x4c, 0xb5, 0xd7, 0x17, 0xdf, 0x7e, 0xa1,

  0x03, 0xfc, 0xd8, 0xf9, 0xa1, 0xc7, 0x3f, 0x25, 0xd4, 0x88, 0x83, 0xe8,
  0xe2, 0x5b, 0xa4, 0xee, 0x5f, 0xc6, 0xc0, 0x56, 0x7d, 0xe0, 0x2b, 0xfe,
  0x0b, 0x51, 0xf6, 0xaa, 0x61, 0xaf, 0x6d, 0xb6, 0xdc, 0x6b, 0x6c, 0x63,
  0x4f, 0xd5, 0xa6, 0x64, 0x85, 0x2f, 0x16, 0x58, 0x3f, 0xaa, 0x28, 0x09,
  0x15, 0xa3, 0x24, 0x50, 0xd4, 0x28, 0x1e, 0xe6, 0x5c, 0x28, 0x53, 0xf9,
  0x1d, 0x12, 0x08, 0xa1, 0x9d, 0xce, 0x56, 0x7c, 0x57, 0x0b, 0x72, 0x5c,
  0x90, 0x3a, 0x5c, 0x4f, 0x36, 0xab, 0x57, 0xb4, 0x77, 0xa3, 0x93, 0x40,
  0x2b, 0x1c, 0x0b, 0x71, 0xc7, 0x7f, 0x23, 0xbd, 0x8c, 0x90, 0xfc, 0xd0,
  0xc4, 0xc2, 0xb6, 0x9a, 0x71, 0x91, 0x68, 0x9f, 0x34, 0xe9, 0xec, 0x4a,
  0x01, 0x26, 0x20, 0x98, 0x40, 0x28, 0x40, 0xa2, 0x93, 0x52, 0x8e, 0x34,
  0xc9, 0x67, 0x63, 0x89, 0x4a, 0x00, 0xd5, 0xf3, 0x01, 0x9b, 0x66, 0xaa,
  0xa0, 0x71, 0xe0, 0x56, 0x48, 0xa4, 0x42, 0x3e, 0x1b, 0x50, 0x39, 0x24,

  0x9a, 0xc8, 0xde, 0x38, 0x37, 0xfb, 0x84, 0x09, 0xff, 0x0b, 0x34, 0xfa,
  0x87, 0x09, 0x39, 0x9f, 0x4c, 0x6d, 0x7e, 0x4f, 0x9c, 0xc3, 0x01, 0x0f,
  0x4e, 0x64, 0xee, 0x8d, 0x5e, 0x1c, 0x4e, 0x86, 0xd3, 0x82, 0x7d, 0xcc,
  0x16, 0x7e, 0x87, 0x2a, 0xa1, 0x94, 0x33, 0x69, 0x7f, 0x33, 0x14, 0x2f,
  0xe1, 0xc5, 0x9a, 0xdc, 0x19, 0xdc, 0x21, 0xff, 0xb6, 0x45, 0x7f, 0x14,
  0x5f, 0xb2, 0x93, 0x62, 0x43, 0xab, 0x97, 0xc3, 0xea, 0x7b, 0x2f, 0xfc,
  0x20, 0xa9, 0xa1, 0xbd, 0xed, 0x03, 0xa7, 0x57, 0x1d, 0xff, 0x2c, 0x3c,
  0xbc, 0x0b, 0x05, 0xa6, 0x01, 0xe2, 0x52, 0xb6, 0x7f, 0xc5, 0xf8, 0x3b,
  0x66, 0xfc, 0xcf, 0x02, 0xe8, 0x5b, 0x8c, 0x8f, 0x15, 0xfe, 0xec, 0xb5,
  0x4d, 0x05, 0x57, 0x2f, 0xaa, 0xf1, 0x64, 0xd4, 0x7c, 0x08, 0x0a, 0xfc,
  0xcf, 0xc8, 0x5c, 0x1c, 0x6e, 0xf0, 0x5b, 0xfd, 0x30, 0x68, 0x31, 0x99,
  0x81, 0xb4, 0x0e, 0xd8, 0xc6, 0xa6, 0x89, 0xc8, 0xa2, 0x5e, 0x08, 0x2b,
  0x9f, 0x23, 0x10, 0xf7, 0xf8, 0xc0, 0x76, 0x3e, 0x66, 0x28, 0xa1, 0xd4,

  0xad, 0xb2, 0xb2, 0x68, 0x0a, 0x5e, 0x71, 0x7b, 0x0d, 0xe6, 0xde, 0xfb,
  0x14, 0xb0, 0x62, 0x06, 0xe0, 0x73, 0xda, 0xf2, 0xae, 0xad, 0xaf, 0x89,
  0x53, 0x05, 0x3f, 0x84, 0x0d, 0x83, 0x29, 0x1d, 0x96, 0x20, 0x39, 0x62,
  0x42, 0x4e, 0x12, 0x5f, 0x4e, 0x2f, 0xa0, 0x75, 0x1c, 0x48, 0x96, 0x83,
  0xdc, 0x09, 0x86, 0x8b, 0xa3, 0x0c, 0x14, 0xb5, 0x9b, 0x19, 0xda, 0xb1,

  0x06, 0x11, 0xe7, 0x1b, 0xc9, 0xce, 0x16, 0xcb, 0x60, 0x6c, 0x9b, 0xda,
  0x9c, 0xf5, 0x38, 0x5a, 0x7b, 0xbd, 0xb1, 0x66, 0x96, 0xd6, 0x6e, 0x16,
  0x79, 0x7d, 0x7f, 0x35, 0x08, 0x69, 0xba, 0x81, 0x93, 0x67, 0x69, 0x8e,
  0xb9, 0x0f, 0x49, 0x8f, 0x0e, 0x34, 0x88, 0xa3, 0x5a, 0x56, 0xe2, 0xed,
  0xa4, 0xf2, 0x22, 0xba, 0x9d, 0x8c, 0xf8, 0xc5, 0x24, 0x1e, 0xcf, 0x2a,
  0x2c, 0xd8, 0xa2, 0x92, 0x3a, 0xc6, 0x7c, 0x2d, 0x0f, 0x1c, 0x7d, 0x3c,
  0x70, 0x3d, 0x31, 0x90, 0x43, 0xad, 0x74, 0xc4, 0x25, 0xe2, 0x78, 0x34,
  0x56, 0xa9, 0xde, 0x6b, 0xaf, 0xd7, 0x59, 0x60, 0x59, 0x7f, 0x9a, 0xf3,
  0xed, 0xb5, 0xe8, 0xc7, 0x30, 0xba, 0x41, 0xc4, 0xef, 0x3a, 0x16, 0x82,

  0x90, 0xed, 0x53, 0x6f, 0x44, 0x87, 0xc3, 0x7c, 0xfc, 0xf8, 0x25, 0x85,
  0x9d, 0xe4, 0x95, 0xc3, 0x4d, 0xfa, 0x51, 0x43, 0x65, 0x6e, 0x1b, 0x88,
  0x46, 0x81, 0xa3, 0xa2, 0x3f, 0xbf, 0xc2, 0xc7, 0xd5, 0x62, 0x58, 0x8b,
  0xfa, 0x7d, 0x60, 0x42, 0xe5, 0x9c, 0x9a, 0x32, 0xae, 0x10, 0x2c, 0x8c,
  0x7a, 0x4a, 0x22, 0x96, 0x52, 0x9b, 0x18, 0xb8, 0x8a, 0x3c, 0x3b, 0x6a,
  0x65, 0xb3, 0x13, 0x92, 0x7f, 0x55, 0xbc, 0xee, 0x47, 0x47, 0x26, 0x57,
  0x32, 0x09, 0x74, 0x4a, 0xc0, 0x6b, 0xcc, 0xb2, 0xc3, 0x01, 0x06, 0xf9,
  0x7c, 0x98, 0x8a, 0x9b, 0x7d, 0x9c, 0xd7, 0xd0, 0x97, 0x19, 0xd9, 0x07,
  0x84, 0x7b, 0x18, 0x2f, 0x93, 0x72, 0x0f, 0x31, 0x46, 0xc4, 0xee, 0x74,


  0x63, 0xbf, 0xc8, 0xd4, 0x7a, 0x27, 0x02, 0xcf, 0xa8, 0x6c, 0xb4, 0x1b,
  0xbd, 0x34, 0x5f, 0x0a, 0xe4, 0x1f, 0xb2, 0xc5, 0x5f, 0x46, 0x9f, 0xf7,
  0xf0, 0x29, 0xa7, 0x67, 0xb8, 0xd0, 0x7d, 0x3d, 0x83, 0xa3, 0x2b, 0x4a,
  0x61, 0x8f, 0xd2, 0x53, 0x03, 0x65, 0x99, 0x24, 0x09, 0x86, 0x71, 0x99,
  0xbc, 0xd8, 0x53, 0xf5, 0x92, 0x77, 0xa9, 0x54, 0xff, 0x6d, 0xcd, 0x09,
  0xcb, 0x72, 0xc8, 0x59, 0x50, 0xf3, 0x22, 0x10, 0xbc, 0x04, 0x2a, 0x67,
  0xd8, 0x02, 0x92, 0x2b, 0x31, 0x50, 0x9a, 0x82, 0x22, 0x39, 0xad, 0xa8,
  0xae, 0xf4, 0xe5, 0x0b, 0x67, 0xd2, 0x4f, 0xb8, 0x2b, 0x1a, 0x9c, 0x54,
  0x56, 0xd8, 0x5c, 0x91, 0xda, 0xeb, 0xf0, 0x5d, 0xef, 0x5e, 0xa2, 0xaf,
  0x83, 0xe1, 0x27, 0x65, 0x8d, 0xc6, 0xc1, 0xf8, 0xd4, 0x35, 0x72, 0x2f,
  0xc1, 0x17, 0x4a, 0x38, 0xcd, 0x4f, 0xaf, 0x24, 0x6a, 0xc7, 0x44, 0xd2,
  0xf7, 0x79, 0x12, 0x4c, 0xd8, 0x4f, 0xd3, 0x35, 0x06, 0x11, 0x26, 0xcb,
  0x82, 0xa4, 0x8f, 0x3c, 0xc6, 0x4a, 0x82, 0x56, 0xab, 0x8a, 0x9e, 0xfe,
  0xfe, 0xe8, 0xfc, 0xc3, 0xd1, 0xd9, 0xf3, 0x7b, 0xc3, 0xd5, 0xda, 0x8d,
  0x3e, 0x51, 0x09, 0xe1, 0x42, 0xda, 0x34, 0x00, 0xdf, 0xc2, 0x80, 0x36,
  0x5e, 0xd4, 0x01, 0x01, 0x6e, 0x9a, 0x39, 0xdb, 0x58, 0x3a, 0x8c, 0x74,
  0x85, 0x49, 0x22, 0x61, 0x20, 0x38, 0xae, 0xf6, 0x90, 0x10, 0xb9, 0x93,
  0xbf, 0x1f, 0x97, 0xd2, 0x99, 0xb7, 0xa3, 0xef, 0xe3, 0xeb, 0x1d, 0x29,
  0x21, 0x32, 0x68, 0x21, 0x21, 0x2a, 0x37, 0x08, 0x27, 0x26, 0xf5, 0x6a,
  0xc1, 0xb0, 0xdc, 0x63, 0x11, 0x68, 0x35, 0xef, 0x5b, 0x3e, 0x99, 0xd8,
  0x34, 0xd8, 0x66, 0x84, 0xef, 0xf8, 0xb8, 0x1d, 0x78, 0xe1, 0x53, 0x62,
  0x66, 0x37, 0xea, 0x92, 0x68, 0x1b, 0x2d, 0x77, 0xef, 0x55, 0x39, 0x63,
  0x92, 0x1c, 0xca, 0xdc, 0xc2, 0xbb, 0x0a, 0x13, 0x74, 0xf1, 0x63, 0x54,
  0xc5, 0xa5, 0xa6, 0xe3, 0x83, 0x93, 0x2b, 0xda, 0xac, 0xcb, 0xa3, 0xc1,
  0xc0, 0xc8, 0xc2, 0x52, 0xd2, 0x12, 0xba, 0x9e, 0x31, 0x46, 0x6a, 0xa4,
  0xdb, 0xfc, 0xaa, 0x1f, 0x99, 0x7e, 0xe1, 0x92, 0xd4, 0x4f, 0xb1, 0x1f,
  0xb0, 0xf9, 0xae, 0x97, 0x73, 0xb8, 0x30, 0xa0, 0xf1, 0x8e, 0xd7, 0x4a,

  0x09, 0xc5, 0x36, 0x09, 0x0f, 0x39, 0x97, 0x68, 0x52, 0x9c, 0x14, 0x89,
  0xff, 0x79, 0x8b, 0xf5, 0x53, 0x12, 0x43, 0x42, 0x2e, 0xcf, 0xc1, 0x6b,
  0x17, 0xe8, 0xbc, 0x1b, 0x76, 0xa6, 0x77, 0x06, 0xa7, 0xd7, 0x27, 0xb0,
  0x7d, 0x1f, 0xae, 0xdf, 0x75, 0x24, 0x75, 0xa1, 0x89, 0x85, 0x44, 0x4e,

  0x7b, 0x6c, 0xf4, 0x7d, 0x67, 0x30, 0x13, 0x0a, 0x76, 0xa4, 0x80, 0xb5,
  0x10, 0xd2, 0xc0, 0xed, 0x47, 0xfb, 0x2b, 0x4e, 0x69, 0xbf, 0xbf, 0xdf,
  0x3c, 0xa5, 0xf6, 0xa6, 0x05, 0x0c, 0x63, 0xef, 0x91, 0xbb, 0x60, 0xe3,
  0x63, 0xf6, 0xd4, 0xa6, 0x6d, 0xa1, 0x45, 0x41, 0x36, 0xc2, 0x58, 0x8b,
  0x19, 0x10, 0xc5, 0xc3, 0x50, 0x55, 0x40, 0x59, 0x27, 0x2e, 0x4e, 0x08,
  0xfe, 0x06, 0x74, 0x4e, 0xbc, 0xbd, 0x1c, 0x0e, 0x85, 0x13, 0x8b, 0x8b,
  0xb1, 0x01, 0x07, 0xf0, 0xf5, 0x43, 0xcd, 0xf5, 0xc3, 0x84, 0x73, 0x20,
  0x01, 0x6d, 0xcc, 0x55, 0xc3, 0x6c, 0xf0, 0x3b, 0xec, 0xd8, 0x7c, 0xbe,
  0x70, 0x4b, 0x05, 0xf2, 0xa2, 0x53, 0xaf, 0x2e, 0xd3, 0x1b, 0x60, 0x65,
  0xf6, 0x63, 0xb8, 0x0b, 0x00, 0xee, 0xab, 0xe4, 0x8b, 0x1c, 0xf2, 0x9f,
  0x61, 0x7a, 0x27, 0x91, 0x5b, 0xe4, 0x33, 0x76, 0x20, 0xca, 0x1b, 0x9c,
  0xc4, 0xc9, 0x25, 0x8f, 0x52, 0x8d, 0x57, 0x50, 0xc2, 0xa1, 0x84, 0x68,
  0x30, 0x09, 0x34, 0xf3, 0x9b, 0x2f, 0xae, 0x0f, 0x36, 0x8c, 0xa7, 0xf5,



  0x9a, 0x22, 0x8a, 0x34, 0x5a, 0xa0, 0x96, 0xd5, 0xc1, 0xd7, 0x15, 0xf5,
  0x32, 0x84, 0xf1, 0xe6, 0xdc, 0x5e, 0xdf, 0x62, 0x22, 0x46, 0x3d, 0xba,
  0x1f, 0xb7, 0x20, 0x96, 0x92, 0x5b, 0x8b, 0x92, 0xc8, 0xc8, 0x06, 0xe4,
  0xaa, 0x84, 0xe3, 0xef, 0xdf, 0x38, 0x2d, 0xd7, 0x34, 0x4f, 0x8d, 0xe9,
  0x45, 0x14, 0xd2, 0x36, 0x4c, 0xd0, 0xc4, 0x26, 0x5b, 0xf6, 0x29, 0xa8,
  0x3a, 0x4e, 0x92, 0x85, 0x69, 0x70, 0x91, 0x52, 0xa5, 0x65, 0x5a, 0x52,
  0x10, 0x55, 0x9a, 0x8b, 0x50, 0x53, 0xd1, 0x96, 0xd9, 0x09, 0xeb, 0xd0,
  0x4c, 0x7d, 0xb2, 0x77, 0xb0, 0x85, 0x24, 0x86, 0x71, 0xb7, 0x5f, 0xee,
  0x7e, 0x0e, 0xb2, 0xf9, 0x91, 0xf2, 0xc0, 0xed, 0x96, 0x31, 0x22, 0x7c,
  0x3b, 0xda, 0xab, 0x18, 0x35, 0x9a, 0xde, 0x2b, 0xa0, 0x3a, 0x51, 0x89,
  0x66, 0x04, 0x39, 0xa8, 0x04, 0xe2, 0xc2, 0x47, 0x24, 0x83, 0x4d, 0x94,

  0x0d, 0x93, 0xa4, 0x3b, 0xda, 0x27, 0x4e, 0x10, 0xeb, 0x3b, 0x04, 0x8c,
  0x6d, 0xaa, 0xb0, 0x9f, 0x26, 0xb0, 0x94, 0xab, 0x93, 0xeb, 0x2b, 0xf8,
  0x63, 0x70, 0x7d, 0x71, 0xd5, 0x82, 0xcf, 0x5b, 0x31, 0x58, 0x13, 0x6e,
  0x9a, 0xa6, 0xab, 0xd0, 0x36, 0xd7, 0xb1, 0x3b, 0x29, 0x13, 0x9a, 0xd9,
  0x4e, 0x19, 0x84, 0x7b, 0x74, 0x50, 0x1f, 0xcb, 0x7e, 0x6d, 0xa1, 0x13,
  0x90, 0x0f, 0x2b, 0x17, 0xc6, 0x67, 0xbe, 0x9a, 0x42, 0x68, 0xc1, 0x48,
  0x8c, 0xb8, 0x62, 0xc3, 0xe8, 0x69, 0xb6, 0x60, 0xb4, 0xa1, 0xf3, 0xdf,
  0x36, 0x33, 0xd1, 0xd2, 0x90, 0x16, 0x4c, 0x5b, 0x4e, 0xcd, 0xe5, 0x16,
  0x5d, 0x0a, 0xa2, 0x85, 0xea, 0x57, 0x47, 0x01, 0x61, 0x3a, 0xd1, 0x3a,
  0x39, 0x90, 0x45, 0x2f, 0x79, 0x82, 0x7e, 0x41, 0x17, 0xda, 0xb0, 0x0b,
  0x2e, 0xf3, 0x79, 0xc2, 0x1e, 0x7e, 0x4e, 0xce, 0x55, 0xe6, 0xc4, 0xb2,
  0x85, 0xd1, 0xc9, 0xa3, 0x10, 0x2a, 0x92, 0x01, 0x92, 0xc4, 0x53, 0x5e,
  0x33, 0xb8, 0x32, 0xb9, 0x50, 0x07, 0x9f, 0x4b, 0x02, 0x96, 0x6a, 0x45,
  0x08, 0x9d, 0x6b, 0x3a, 0x2b, 0x07, 0x61, 0xb2, 0xce, 0xbc, 0xb7, 0x9b,
  0x4c, 0x06, 0xa1, 0x79, 0xc2, 0x9c, 0x85, 0xba, 0xa9, 0x2a, 0xc4, 0x0a,
  0x25, 0x5a, 0x69, 0x8e, 0x0d, 0xe9, 0x12, 0x6e, 0x17, 0xe9, 0x4b, 0x79,
  0x2a, 0x18, 0x56, 0xa3, 0x1a, 0x76, 0xac, 0xac, 0x32, 0xb4, 0x2d, 0x47,

  0xce, 0x21, 0x9a, 0x65, 0x93, 0xe9, 0xd6, 0xf4, 0x39, 0x9f, 0xcd, 0xaa,
  0xd2, 0x16, 0xd9, 0xbe, 0x7c, 0x1e, 0x26, 0x51, 0x6b, 0xf3, 0xc7, 0xb6,
  0x5e, 0x01, 0x4d, 0x0d, 0x86, 0xd2, 0xad, 0xac, 0x93, 0x21, 0xa7, 0x7e,
  0x3d, 0x21, 0x1c, 0xb5, 0xe8, 0x43, 0x26, 0xf8, 0x61, 0x19, 0xd8, 0x16,
  0x94, 0xff, 0x30, 0x36, 0x9b, 0x86, 0xb0, 0x7a, 0x98, 0xb6, 0xc5, 0x42,
  0x6b, 0x9c, 0xb3, 0x42, 0x4f, 0xc8, 0xfe, 0x3e, 0x50, 0x24, 0xf9, 0x90,
  0x29, 0x9b, 0x40, 0x25, 0x8d, 0x8c, 0x67, 0xed, 0x92, 0x51, 0xd5, 0x5c,
  0x29, 0x61, 0xfd, 0x78, 0x0b, 0xbd, 0x74, 0x0f, 0x8d, 0x59, 0x1a, 0x59,
  0x3f, 0x96, 0x17, 0x54, 0x0c, 0xb9, 0xc3, 0xb8, 0x3a, 0xea, 0x15, 0x10,
  0x70, 0xa3, 0x2c, 0x58, 0xa0, 0xcb, 0xc0, 0x46, 0xcb, 0x6c, 0x86, 0x39,
  0xe2, 0x75, 0xc0, 0x20, 0x55, 0x03, 0xfb, 0x2b, 0xb0, 0x0c, 0x5c, 0x7c,
  0xa1, 0x1a, 0x49, 0xd6, 0x51, 0x5b, 0xea, 0xab, 0x6b, 0xc5, 0x7f, 0x20,
  0x02, 0xbd, 0xc2, 0x23, 0x53, 0x5c, 0x62, 0xa5, 0xad, 0x34, 0x4b, 0x11,
  0x4f, 0x2e, 0x2f, 0x36, 0xb1, 0x56, 0x11, 0x91, 0x5b, 0xc1, 0xaa, 0xcc,
  0x67, 0xd4, 0xe0, 0x4d, 0x55, 0x37, 0xaf, 0xa1, 0x9e, 0xaa, 0x72, 0x8c,
  0xc4, 0x06, 0x83, 0xf7, 0x03, 0x55, 0x82, 0x02, 0xce, 0x9f, 0xb8, 0xe0,

  0x41, 0xfd, 0x50, 0x53, 0x50, 0xce, 0x08, 0xa1, 0x8c, 0xc7, 0xba, 0x3a,
  0xa6, 0x0d, 0xaa, 0xb5, 0xc5, 0x14, 0x9d, 0x2b, 0xa9, 0x7c, 0x94, 0x7f,
  0xdf, 0x52, 0xd1, 0xad, 0xed, 0xbd, 0x08, 0x22, 0x10, 0x76, 0xa5, 0xcb,
  0xd9, 0x21, 0xf5, 0x9b, 0x49, 0x96, 0x43, 0xfd, 0x6b, 0x65, 0x52, 0x2d,
  0x17, 0xbe, 0x9c, 0xb7, 0x18, 0x04, 0x66, 0x44, 0x0d, 0x8a, 0x3a, 0x53,
  0x44, 0x6c, 0x1d, 0xbb, 0xfd, 0x6e, 0x8f, 0x96, 0xe6, 0x6d, 0x24, 0x4d,
  0xc0, 0x93, 0xee, 0x6d, 0x78, 0x30, 0x2a, 0x5e, 0xb0, 0x4d, 0x7c, 0xd4,
  0x01, 0xfd, 0x62, 0xab, 0xc3, 0x70, 0x3b, 0x52, 0xbc, 0x2b, 0x65, 0x4f,
  0xfa, 0x36, 0xec, 0x8b, 0x33, 0x5f, 0xff, 0xce, 0x68, 0x3d, 0x8a, 0x14,

  0xae, 0xe3, 0xe9, 0xac, 0x7f, 0xc8, 0xd2, 0x07, 0xba, 0xbf, 0x1b, 0x9f,
  0xb5, 0x2e, 0x7d, 0xc5, 0xac, 0x3a, 0xdb, 0xaf, 0x76, 0xfa, 0xdb, 0x2f,
  0x3e, 0xef, 0x6f, 0x53, 0x3f, 0x73, 0x67, 0x6e, 0xb6, 0xef, 0xb6, 0x33,
  0x50, 0xa0, 0xab, 0x7b, 0xd4, 0x8e, 0xeb, 0xce, 0x5f, 0x98, 0x3f, 0xf6,
  0xf1, 0xb9, 0x3e, 0xf7, 0x56, 0xf3, 0xbe, 0x31, 0x07, 0x9d, 0x26, 0xcd,
  0xbc, 0x38, 0x48, 0xcf, 0x66, 0x15, 0x31, 0x2d, 0x2e, 0x52, 0x24, 0x23,
  0xc5, 0x5a, 0x76, 0xf6, 0x49, 0xdb, 0xc2, 0x9a, 0x36, 0x57, 0x74, 0x3b,
  0xc3, 0x33, 0x52, 0x96, 0x3e, 0x12, 0x35, 0xd2, 0x72, 0x75, 0xf3, 0x7d,
  0x8f, 0x6d, 0xfe, 0x62, 0xab, 0x0f, 0x81, 0xbc, 0xcc, 0xa5, 0x6b, 0x82,
  0x35, 0x12, 0xd0, 0x5f, 0x13, 0x2b, 0x4e, 0xa0, 0xbf, 0xf8, 0x41, 0xd5,

  0xb8, 0x4d, 0x40, 0xdc, 0x15, 0x32, 0x04, 0x81, 0x67, 0x2b, 0x71, 0x5c,
  0x3c, 0x09, 0x1a, 0xd9, 0xa0, 0x05, 0x34, 0x40, 0xfd, 0x0c, 0xd8, 0x1e,
  0x33, 0x69, 0x1d, 0x0e, 0xdf, 0xf9, 0xf3, 0x9f, 0x2d, 0x47, 0x1a, 0x50,
  0x16, 0x0c, 0x75, 0x74, 0xda, 0x27, 0xc0, 0x6e, 0x8e, 0x55, 0x73, 0x6f,
  0x98, 0xce, 0xc1, 0x5f, 0xc9, 0x39, 0xfc, 0x53, 0xef, 0xaf, 0xf0, 0xcf,
  0x9f, 0x3a, 0x7a, 0xa9, 0x19, 0x9c, 0xd1, 0x16, 0x8c, 0x58, 0x10, 0x5c,
  0x3a, 0xa0, 0x6e, 0x54, 0x6f, 0x4e, 0x4e, 0x9a, 0xc1, 0xf5, 0xf1, 0x25,
  0x5f, 0xc6, 0x82, 0xc3, 0xde, 0x44, 0xcd, 0xc8, 0x87, 0x48, 0xad, 0x47,
  0x16, 0x4e, 0x7d, 0x95, 0x98, 0x4e, 0xcc, 0x5e, 0x3a, 0xaf, 0x74, 0x6d,

  0x52, 0xc3, 0x3d, 0x73, 0x80, 0x18, 0xf4, 0xdb, 0x29, 0xfa, 0x57, 0x18,
  0x98, 0x04, 0xf8, 0xae, 0x2a, 0xd2, 0xd2, 0x37, 0x1e, 0xe1, 0x1d, 0x81,
  0x0d, 0x98, 0xeb, 0x70, 0x0f, 0x53, 0xea, 0x46, 0x02, 0x82, 0xce, 0xb5,
  0x11, 0x95, 0x20, 0xea, 0xc2, 0x36, 0xc0, 0x46, 0x29, 0xb7, 0x2d, 0xd2,
  0xf2, 0x16, 0xd7, 0x27, 0x65, 0x3e, 0x4e, 0xae, 0x10, 0xce, 0xe7, 0x33,
  0xa3, 0xf5, 0x3d, 0x2a, 0x70, 0x99, 0x29, 0xdf, 0x76, 0x76, 0xd6, 0x4a,
  0x07, 0x3d, 0x76, 0x85, 0x23, 0x0e, 0x82, 0x2f, 0xca, 0x63, 0x45, 0xf2,

  0x0c, 0x4c, 0x50, 0x49, 0x85, 0xb9, 0x04, 0x3d, 0xd7, 0x90, 0x86, 0x03,
  0xd0, 0x87, 0xc0, 0x26, 0x48, 0x2c, 0x28, 0xfd, 0x36, 0x9a, 0x52, 0x0b,
  0xfb, 0x94, 0xa1, 0xa3, 0x98, 0x41, 0x02, 0x0d, 0xca, 0x25, 0x75, 0x4e,
  0xc4, 0xf2, 0x89, 0x02, 0xa6, 0x31, 0xee, 0x2a, 0x42, 0x0b, 0xdf, 0x0c,
  0x0c, 0xf2, 0xaa, 0x4e, 0xf7, 0x59, 0xd0, 0x56, 0xa0, 0x8b, 0x66, 0x95,
  0xd1, 0x19, 0xfb, 0xd4, 0x71, 0xf3, 0x69, 0xd7, 0xf1, 0x4f, 0xe0, 0xd6,
  0xda, 0x57, 0xf3, 0x3e, 0x43, 0xcf, 0x12, 0xb5, 0x2d, 0x6d, 0x8a, 0x76,
  0x9c, 0xfe, 0x3c, 0x04, 0xd4, 0xee, 0x08, 0xd5, 0x9d, 0x2d, 0xdf, 0x95,
  0x52, 0xde, 0xa6, 0xbc, 0xc9, 0xbd, 0x74, 0xf1, 0xf4, 0x06, 0x2a, 0xd8,
  0x23, 0x1e, 0x69, 0x8d, 0xb3, 0x18, 0x09, 0x53, 0x2e, 0xa7, 0x53, 0x42,
  0x46, 0xf2, 0x33, 0xf3, 0xa8, 0x62, 0x51, 0x0a, 0x07, 0xa4, 0xab, 0x0d,
  0x30, 0x72, 0x9a, 0xb9, 0xee, 0x86, 0x2d, 0x8b, 0x14, 0x86, 0x53, 0xda,
  0xfe, 0x54, 0xad, 0x00, 0x0a, 0xd8, 0xd1, 0x54, 0xae, 0xb7, 0xd5, 0x64,
  0x8a, 0xa4, 0xa7, 0x13, 0x6d, 0xf2, 0x41, 0x4c, 0x0d, 0xf2, 0x32, 0x60,
  0x99, 0x23, 0x92, 0xaf, 0xa1, 0x9d, 0xf7, 0xad, 0x74, 0x37, 0xa2, 0x87,

  0x0d, 0xbb, 0xa4, 0x31, 0x28, 0x5b, 0x3a, 0x11, 0x28, 0x57, 0xc6, 0xe2,
  0x2c, 0x0c, 0xb6, 0x21, 0xeb, 0x95, 0xc2, 0x8f, 0x9a, 0x52, 0x73, 0x42,
  0xdb, 0xb1, 0xca, 0x2f, 0x60, 0x59, 0xa1, 0xab, 0x2d, 0xed, 0xf5, 0x77,
  0xbc, 0x83, 0x2d, 0x67, 0xbd, 0xd1, 0x68, 0xd4, 0x23, 0x3d, 0xe0, 0x90,
  0x95, 0x93, 0x4d, 0x51, 0x0e, 0x5a, 0x7c, 0x06, 0x83, 0x44, 0xf6, 0xfb,
  0xf8, 0xf8, 0x58, 0xf4, 0x98, 0xeb, 0x9b, 0x86, 0x46, 0x61, 0x60, 0x07,
  0x45, 0xa3, 0x0a, 0x35, 0xbb, 0x2d, 0x6f, 0x96, 0x15, 0x12, 0x2b, 0x2b,
  0xf2, 0xca, 0x7a, 0x4d, 0x8d, 0x6c, 0x03, 0x1b, 0x3a, 0x87, 0x03, 0xe9,
  0xda, 0xcc, 0x44, 0x18, 0xdb, 0x3b, 0x9a, 0x05, 0xb7, 0xc1, 0xa2, 0x17,
  0x65, 0xec, 0x66, 0xa3, 0x6d, 0x9e, 0xaa, 0x0b, 0xe0, 0xa8, 0x13, 0x2c,
  0x43, 0x99, 0x6c, 0x3a, 0x0a, 0x7d, 0x36, 0x4e, 0x25, 0x03, 0x2c, 0x96,
  0x6f, 0x35, 0xc7, 0x7e, 0xe2, 0x3c, 0x64, 0xab, 0xeb, 0x47, 0xf2, 0xa2,
  0xf5, 0x48, 0x82, 0x9b, 0x8f, 0x56, 0x15, 0x6e, 0xfb, 0xfa, 0x31, 0xe1,
  0x4a, 0x1f, 0xcb, 0x85, 0x38, 0xbe, 0xc1, 0xfc, 0xad, 0x19, 0x1e, 0x0e,
  0x4c, 0xb9, 0x64, 0x26, 0x20, 0xf2, 0x63, 0x30, 0x38, 0xdb, 0xbc, 0x3e,
  0x1b, 0x78, 0x19, 0xef, 0x8f, 0xe8, 0x32, 0x26, 0xd7, 0x70, 0xdd, 0xe5,
  0xc9, 0x5b, 0x44, 0x2d, 0x02, 0xf2, 0x49, 0x9d, 0xc2, 0xf9, 0x2b, 0x41,
  0xd4, 0xab, 0x65, 0xa6, 0xc5, 0x30, 0x46, 0x76, 0x67, 0x49, 0x46, 0x50,

  0x22, 0x28, 0xc2, 0xe9, 0x06, 0x50, 0x42, 0x6c, 0x19, 0x9d, 0x1f, 0x5d,
  0x63, 0x79, 0x4b, 0x25, 0x29, 0x1e, 0xe8, 0x02, 0xf2, 0x3d, 0xe3, 0xf7,

  0x06, 0x9d, 0x86, 0xa2, 0x36, 0xf1, 0xc8, 0xb6, 0xc4, 0x52, 0x65, 0x9d,
  0x8f, 0xaf, 0x54, 0xc2, 0x5b, 0xb5, 0xfd, 0xb0, 0xa5, 0x22, 0x1d, 0x9a,
  0x34, 0xdf, 0x3c, 0x8d, 0xed, 0xe0, 0x69, 0xf0, 0x06, 0x84, 0xaf, 0xc3,
  0x95, 0xb0, 0x72, 0xdd, 0x68, 0xc1, 0x72, 0xd1, 0xe9, 0xcf, 0xf2, 0x69,
  0x8a, 0x9e, 0x40, 0x3a, 0x2f, 0x37, 0xf0, 0xe6, 0xb9, 0x49, 0x79, 0x77,
  0x4a, 0x2e, 0xc5, 0xa9, 0xc3, 0x98, 0xf3, 0x15, 0x41, 0x39, 0x61, 0xf6,
  0xd4, 0x74, 0xe3, 0xd3, 0x12, 0x48, 0xbf, 0xc2, 0x90, 0x10, 0x54, 0xd3,

  0x11, 0x98, 0x08, 0x23, 0xcc, 0xfe, 0xa0, 0x72, 0xc0, 0xb2, 0x9e, 0x62,
  0x9b, 0xd6, 0xc0, 0x59, 0xd5, 0x43, 0x5a, 0xfa, 0xb1, 0x0a, 0xd2, 0x14,
  0x64, 0x85, 0x2b, 0xfd, 0xf0, 0x2f, 0x6a, 0xc2, 0xe3, 0x1b, 0xb4, 0xc8,
  0xa6, 0x9e, 0xd0, 0x35, 0x58, 0x44, 0x01, 0xfc, 0x57, 0x52, 0x51, 0x09,
  0xe4, 0x45, 0x3a, 0xdc, 0xbb, 0x8d, 0x3d, 0x56, 0xf5, 0x70, 0xe8, 0x36,
  0x9b, 0x5a, 0x32, 0x36, 0x6d, 0xbd, 0x65, 0x41, 0x0d, 0x20, 0x4e, 0x13,
  0x7d, 0x1b, 0xc3, 0x7d, 0x73, 0x62, 0x9b, 0xe8, 0x34, 0x50, 0xe4, 0x6a,
  0x0d, 0x76, 0x38, 0x0e, 0x89, 0x31, 0xa8, 0x7b, 0xec, 0xc5, 0x7d, 0xdf,
  0x62, 0xe4, 0xb0, 0x12, 0x7b, 0x6d, 0x7b, 0x72, 0xf0, 0xfd, 0x60, 0x2d,
  0x30, 0x31, 0x59, 0xaa, 0x08, 0x40, 0xa6, 0x01, 0xfa, 0x7f, 0x5f, 0xb3,
  0x3d, 0xe2, 0xfa, 0x01, 0x3f, 0x84, 0x4a, 0x07, 0x1f, 0x46, 0xde, 0x86,
  0x9e, 0xba, 0x76, 0xc2, 0xf6, 0xbb, 0x7e, 0x93, 0x27, 0x5e, 0xde, 0xea,
  0xf9, 0xbc, 0x3b, 0x39, 0x7a, 0xd3, 0x8a, 0x62, 0xf2, 0x29, 0xf0, 0xe5,
  0xad, 0x57, 0x73, 0x98, 0x70, 0x2f, 0xa0, 0xa5, 0x3a, 0x4a, 0xe8, 0x74,
  0x94, 0x50, 0x19, 0xab, 0x26, 0x21, 0xf0, 0x16, 0xbc, 0x21, 0xad, 0x2d,
  0x71, 0x5a, 0x3d, 0x23, 0x6e, 0xf6, 0x81, 0x78, 0xac, 0x51, 0x53, 0xe6,
  0xda, 0x2a, 0x87, 0x90, 0xa7, 0x44, 0xc8, 0xb3, 0x7c, 0x98, 0x4f, 0x26,
  0x2b, 0xa4, 0x3b, 0x83, 0x04, 0x53, 0x0d, 0x14, 0x13, 0x4c, 0x07, 0xb7,
  0x11, 0xdf, 0x1b, 0xe2, 0xec, 0x09, 0xbb, 0xa2, 0xe8, 0x48, 0x61, 0x02,
  0xa9, 0xe4, 0xde, 0xdd, 0xa8, 0x17, 0xa6, 0xab, 0xcd, 0xa0, 0x26, 0x1e,
  0x15, 0xe6, 0xb3, 0x3b, 0x46, 0xd3, 0x84, 0x4c, 0x7b, 0x97, 0x32, 0xfa,
  0xc7, 0x3f, 0xff, 0xfa, 0x53, 0xa0, 0xc7, 0x0d, 0x3a, 0xfc, 0x6e, 0xb8,


  0xb2, 0x10, 0x9e, 0x9e, 0x0b, 0x76, 0x97, 0xe9, 0x16, 0xc2, 0x89, 0x26,
  0x1c, 0xcf, 0xa8, 0xca, 0x64, 0x36, 0xe9, 0x3b, 0x39, 0x95, 0xbe, 0x58,
  0x44, 0x13, 0x4a, 0x3f, 0x48, 0x3d, 0x4b, 0xb1, 0x14, 0x9c, 0xcb, 0x77,
  0xb1, 0x7f, 0x03, 0x35, 0x8a, 0xb3, 0x29, 0xd3, 0x06, 0xdf, 0x9d, 0x4f,
  0xc2, 0x43, 0x11, 0xb3, 0xcd, 0xdc, 0x9a, 0xc1, 0xf4, 0x0f, 0x57, 0xa7,
  0xc6, 0xd5, 0xe9, 0x72, 0xe5, 0x1b, 0xa0, 0xd4, 0xc7, 0x5e, 0xf2, 0x98,
  0x0c, 0x81, 0x4b, 0x94, 0x0a, 0xfc, 0xd0, 0x9b, 0x97, 0xd1, 0xe1, 0x1c,
  0x68, 0x3c, 0x6d, 0x81, 0xec, 0x78, 0x87, 0xaf, 0x45, 0xfa, 0x9a, 0x41,
  0xb1, 0x9e, 0xe6, 0x05, 0xec, 0xd0, 0x5c, 0xaa, 0x71, 0xa5, 0x24, 0xb9,
  0xee, 0xcc, 0x88, 0xa8, 0xc0, 0xc4, 0x73, 0x07, 0xdc, 0xed, 0x89, 0xc6,
  0x4d, 0x90, 0x9c, 0x0e, 0x5c, 0x24, 0x29, 0xeb, 0x4b, 0x50, 0x1e, 0x61,
  0xf6, 0x60, 0x64, 0xa3, 0xb5, 0x5e, 0x76, 0x85, 0xa4, 0x0a, 0x45, 0x13,
  0x0d, 0xc2, 0x08, 0x98, 0x32, 0x44, 0xb6, 0xb0, 0x80, 0xe9, 0xb8, 0x2b,
  0x32, 0xbd, 0xac, 0x5d, 0x0c, 0x50, 0x41, 0x46, 0xf1, 0xf7, 0x55, 0x17,
  0xc0, 0x6e, 0xd0, 0xc8, 0x66, 0xaf, 0x62, 0xc1, 0x46, 0xaa, 0x5d, 0xe6,
  0x5d, 0x4f, 0xac, 0x31, 0x95, 0xbd, 0x4b, 0x39, 0x8f, 0xc7, 0xa6, 0x90,
  0xde, 0x05, 0x90, 0xa5, 0x32, 0xc4, 0x18, 0xeb, 0x22, 0x93, 0x19, 0xb3,
  0x38, 0x49, 0xab, 0xb2, 0x63, 0x12, 0xc3, 0x6d, 0x02, 0xb5, 0x94, 0x98,
  0x22, 0xc0, 0xd5, 0xb0, 0xe2, 0xd0, 0xa7, 0xb2, 0x72, 0xf1, 0x3c, 0x04,
  0x63, 0xbd, 0xd7, 0x82, 0x9a, 0x36, 0x25, 0xb3, 0x5f, 0xec, 0x07, 0x82,
  0xcc, 0xa7, 0x0e, 0x92, 0x0c, 0x43, 0x82, 0x6f, 0x53, 0x7a, 0x05, 0xf2,
  0x10, 0x3e, 0xf0, 0x13, 0x39, 0xf0, 0xc6, 0x70, 0x18, 0x6b, 0x79, 0xb1,
  0xbf, 0xbf, 0xcf, 0xb1, 0x96, 0xce, 0x29, 0x7d, 0xf8, 0xea, 0xe4, 0xf8,
  0xe2, 0xfd, 0xfb, 0x93, 0xf3, 0x37, 0x27, 0x6f, 0x34, 0xe3, 0xc3, 0x59,
  0x89, 0xa5, 0x0e, 0x7f, 0x45, 0x98, 0x25, 0x08, 0xfb, 0xbc, 0xbd, 0xbf,
  0xd5, 0xdb, 0xd9, 0xdf, 0x8a, 0x80, 0x16, 0x63, 0x53, 0xa7, 0x16, 0xcf,
  0x62, 0xb4, 0x6f, 0x6f, 0x96, 0xa0, 0xaa, 0x21, 0xc0, 0x73, 0x85, 0x98,
  0x1b, 0xe4, 0x7a, 0x45, 0x6f, 0x4f, 0x52, 0xa1, 0x1d, 0x1d, 0xc8, 0x0c,

  0xe8, 0x77, 0x0c, 0x54, 0xa7, 0x0d, 0x58, 0x8a, 0xee, 0x43, 0x04, 0xba,
  0xb3, 0x85, 0x1f, 0xea, 0x47, 0x6f, 0x41, 0xfb, 0x98, 0xe4, 0x0f, 0x4c,

  0x8b, 0xc7, 0x37, 0xa0, 0x94, 0x26, 0x7e, 0xa8, 0xb2, 0xfe, 0x3e, 0xbe,
  0xbe, 0xcb, 0xaf, 0xff, 0x8e, 0x31, 0xfa, 0xfd, 0x57, 0x75, 0xc3, 0x12,
  0x2e, 0x32, 0xf5, 0x06, 0xd1, 0x92, 0xc4, 0x16, 0x28, 0xa9, 0x01, 0x9b,
  0xe3, 0xef, 0x8e, 0x2e, 0xf1, 0x69, 0x30, 0xcb, 0x2f, 0x7e, 0xf8, 0x8b,
  0x2d, 0xf3, 0xbc, 0xdb, 0xd6, 0x6c, 0x46, 0xa9, 0x64, 0xa5, 0x76, 0xac,
  0x99, 0x1f, 0xf4, 0xb6, 0xca, 0xac, 0x31, 0x08, 0x55, 0xc8, 0xd0, 0x0a,
  0x31, 0x03, 0x15, 0xb6, 0x8e, 0x3b, 0x25, 0xca, 0xa1, 0x15, 0xa5, 0x5c,
  0xf1, 0x50, 0x5d, 0x3f, 0xb0, 0x72, 0x9c, 0xc6, 0x43, 0xca, 0xdd, 0x7f,
  0xd2, 0x6c, 0xcc, 0xed, 0xc9, 0x6b, 0x8e, 0xd9, 0xaa, 0x58, 0x26, 0x21,
  0xaf, 0xe9, 0x4a, 0x8c, 0x1d, 0x02, 0x6e, 0x4a, 0xe7, 0x71, 0x91, 0xce,
  0x1e, 0x95, 0xc0, 0xef, 0xb9, 0x63, 0x32, 0xa7, 0x4a, 0x51, 0xec, 0xcb,
  0x42, 0x8a, 0xe7, 0x5e, 0xda, 0xa9, 0xe9, 0xe8, 0x83, 0x44, 0x2c, 0x18,
  0x60, 0x7c, 0xae, 0xbc, 0x59, 0x2b, 0x51, 0x91, 0xea, 0xf6, 0xbf, 0x51,
  0x28, 0xda, 0xa0, 0x47, 0xa3, 0xb7, 0xa7, 0x67, 0x27, 0x1b, 0xd1, 0xdb,
  0xa4, 0x92, 0x12, 0x27, 0xcd, 0x30, 0x46, 0x91, 0xff, 0x07, 0x52, 0xb0,
  0x0c, 0x34, 0xad, 0xd4, 0x08, 0x07, 0x73, 0xc1, 0xc4, 0x07, 0x47, 0xca,
  0x86, 0xd6, 0x4b, 0xf1, 0xe1, 0xd0, 0x12, 0x31, 0x1e, 0xa7, 0xb9, 0x65,
  0x1a, 0xdf, 0x94, 0x93, 0x0f, 0xe4, 0xdd, 0x2a, 0xce, 0x43, 0xdf, 0xc1,

  0xbd, 0xcc, 0xdd, 0x14, 0x02, 0x9c, 0xb4, 0xe4, 0x3c, 0x6b, 0xbc, 0x38,
  0x2d, 0x17, 0x33, 0xe4, 0x06, 0x41, 0x94, 0x97, 0x59, 0x62, 0x2b, 0xfb,
  0x88, 0xf2, 0xc1, 0x7a, 0x30, 0x89, 0x98, 0xcc, 0x50, 0x71, 0xbd, 0xce,
  0xc6, 0xbd, 0xd3, 0x8d, 0xc3, 0xb4, 0x13, 0xfe, 0x73, 0xf3, 0xab, 0x55,

  0x98, 0x69, 0x27, 0xd4, 0x39, 0x5d, 0xde, 0x20, 0x8a, 0xa2, 0x5e, 0xae,
  0x1a, 0x33, 0x54, 0xb5, 0xb3, 0x46, 0x09, 0x01, 0xf5, 0x95, 0x7c, 0x77,
  0x6a, 0xee, 0xfe, 0x45, 0xba, 0xf5, 0xa9, 0xfe, 0x80, 0x25, 0xe0, 0x56,
  0xba, 0x70, 0xaf, 0x76, 0x93, 0x65, 0x1c, 0x85, 0x1a, 0x63, 0x32, 0x57,


  0x96, 0xc6, 0xec, 0xac, 0x4d, 0x61, 0xb6, 0xbe, 0x41, 0x24, 0xd4, 0xf9,
  0xe2, 0x63, 0x37, 0xd2, 0xc2, 0x80, 0x7c, 0x29, 0x5c, 0x45, 0x56, 0x06,
  0x5d, 0xfe, 0x52, 0xde, 0x26, 0xa1, 0x3d, 0x6a, 0xac, 0xcd, 0x4e, 0x19,



  0xd6, 0xa1, 0x97, 0xa8, 0xd0, 0x71, 0x65, 0x17, 0x75, 0xa3, 0x29, 0x18,
  0x35, 0x39, 0xa0, 0x2d, 0xc9, 0xd7, 0x5d, 0x16, 0xd4, 0xd4, 0xd9, 0xdd,
  0xcf, 0xd4, 0x2d, 0x51, 0x5f, 0x5d, 0x84, 0xbd, 0x23, 0x9d, 0x12, 0xbb,
  0x3f, 0x61, 0xd5, 0xfb, 0xe8, 0x36, 0xa5, 0x42, 0xc4, 0x25, 0xa9, 0x73,

  0x71, 0xa6, 0xf5, 0x56, 0x3c, 0x4d, 0xd3, 0xed, 0x03, 0xc8, 0xad, 0x4f,
  0xe5, 0x0c, 0x61, 0xed, 0x93, 0x81, 0x2b, 0xd1, 0x69, 0x80, 0x58, 0xdc,
  0x3a, 0x9f, 0x19, 0x55, 0x34, 0x98, 0xdb, 0xa2, 0x8a, 0x1a, 0xd6, 0x43,
  0x92, 0xae, 0x18, 0xe8, 0x0e, 0x00, 0xd7, 0x18, 0x81, 0x38, 0xd0, 0xd7,

  0x76, 0x2f, 0x10, 0x63, 0x6b, 0x45, 0xc2, 0x0d, 0x4a, 0xfa, 0x60, 0x89,
  0xce, 0xb1, 0x24, 0x40, 0x51, 0xfc, 0x71, 0xc9, 0xb2, 0x3d, 0xc0, 0xdb,
  0xa6, 0xe9, 0x5d, 0x28, 0xcb, 0x82, 0x21, 0xf3, 0x68, 0x62, 0x94, 0xa5,

  0x61, 0x41, 0xeb, 0x34, 0xed, 0xd8, 0x84, 0xb4, 0xd9, 0x2f, 0x8d, 0xb8,
  0x70, 0xb2, 0xb3, 0xde, 0x0d, 0x9e, 0xa1, 0xc6, 0x8a, 0x80, 0x5e, 0x19,
  0xb7, 0x69, 0x7f, 0x07, 0x9a, 0xcf, 0x41, 0xc7, 0xf4, 0xd5, 0x20, 0xbf,
  0x2a, 0x71, 0xc7, 0x1a, 0xe5, 0x90, 0x91, 0x91, 0x79, 0xb5, 0x74, 0x0c,
  0x45, 0x20, 0x9a, 0x7b, 0xa5, 0x8c, 0xcb, 0x14, 0xdc, 0xf8, 0x69, 0xcd,
  0xa6, 0x00, 0x86, 0x2b, 0x46, 0xfd, 0xbe, 0x21, 0x38, 0xa5, 0x1f, 0x7a,
  0xc7, 0xf4, 0xf1, 0xde, 0x3b, 0x1a, 0xee, 0x8b, 0x8e, 0x71, 0xf8, 0x36,
  0x7f, 0x75, 0xe0, 0xb7, 0x8b, 0xb7, 0x7e, 0xc3, 0x06, 0x48, 0x26, 0x25,
  0x92, 0xc8, 0x04, 0xb9, 0x13, 0x23, 0x5c, 0x91, 0x4d, 0x3d, 0x70, 0x8a,
  0xa6, 0x94, 0x7e, 0xaf, 0x65, 0x93, 0x72, 0x00, 0x52, 0x64, 0x41, 0x60,
  0x3a, 0xe3, 0x5e, 0x3e, 0xe9, 0x51, 0x86, 0x34, 0x42, 0xe7, 0x61, 0x32,
  0x92, 0x73, 0xeb, 0x08, 0x20, 0x84, 0x3a, 0x30, 0x8c, 0xc7, 0x21, 0xd5,
  0x9c, 0x0b, 0x19, 0x05, 0x20, 0xd1, 0xe1, 0x8e, 0x72, 0x90, 0x07, 0xe2,
  0x95, 0xa7, 0xd7, 0x4d, 0x2f, 0x42, 0x44, 0xe6, 0x92, 0x82, 0x08, 0xcf,
  0x9f, 0x46, 0xe5, 0x11, 0x5d, 0xd6, 0xde, 0x69, 0xd5, 0x64, 0xc3, 0xcd,
  0xd9, 0x95, 0x4b, 0xfe, 0xe7, 0xe5, 0x82, 0x54, 0x56, 0xc4, 0x6d, 0xf6,
  0xbc, 0x2f, 0x5a, 0x24, 0x42, 0x88, 0xcc, 0x20, 0xfc, 0xf7, 0xfb, 0x5b,
  0x5d, 0x2f, 0x50, 0x5f, 0x91, 0xb1, 0x9f, 0xd9, 0x2c, 0x21, 0x78, 0x98,
  0x78, 0x64, 0x2f, 0x54, 0x5d, 0x5b, 0x56, 0x8f, 0xc8, 0xaf, 0x4d, 0x31,
  0x2d, 0xa5, 0x16, 0xdb, 0xba, 0x07, 0x9b, 0xd3, 0x43, 0x5b, 0x28, 0x6c,
  0x93, 0xab, 0x68, 0x43, 0x40, 0xd7, 0x92, 0xb1, 0xf5, 0x55, 0xaf, 0xd9,
  0x2c, 0xd9, 0xf4, 0xbc, 0x74, 0xab, 0x37, 0x9c, 0xee, 0x95, 0xad, 0x9e,
  0x26, 0xc2, 0x94, 0x3e, 0xd2, 0x06, 0x68, 0x3d, 0xd8, 0x54, 0xe9, 0xeb,

  0xdd, 0x4b, 0xf0, 0x87, 0x0c, 0xd8, 0xa1, 0xf0, 0xd1, 0x65, 0xfb, 0x9e,
  0x31, 0xd4, 0xfa, 0x4b, 0xdc, 0x31, 0xd3, 0x60, 0x46, 0x3b, 0xa9, 0x59,
  0xf9, 0x40, 0x64, 0xeb, 0xdc, 0xa5, 0xe6, 0x9e, 0x21, 0x57, 0x41, 0x4e,
  0x90, 0x69, 0xce, 0x77, 0x4c, 0xfa, 0xca, 0x63, 0x6b, 0x6a, 0x71, 0x4b,
  0xce, 0x2f, 0x5d, 0x9b, 0xb7, 0xa8, 0xd8, 0xf7, 0xce, 0xe1, 0x18, 0x0e,
  0xa2, 0xff, 0xc8, 0x13, 0xae, 0x59, 0x7d, 0xa2, 0x64, 0xf5, 0xfb, 0xa3,
  0xab, 0xf3, 0xd3, 0xf3, 0x6f, 0x0e, 0x0c, 0x8f, 0x43, 0x7e, 0xd7, 0xec,
  0x6c, 0x64, 0x78, 0x37, 0xfd, 0x96, 0xf1, 0xbb, 0xd1, 0xfb, 0xd3, 0xd6,
  0x69, 0x01, 0x63, 0x99, 0xc4, 0x9e, 0xd9, 0x79, 0x59, 0x24, 0x1c, 0x17,
  0x61, 0x5b, 0x54, 0x2b, 0x27, 0xa4, 0x5c, 0x93, 0x44, 0x25, 0xb5, 0xef,
  0x0c, 0x00, 0x36, 0xf4, 0xce, 0xf0, 0x4c, 0x66, 0x79, 0xad, 0x53, 0x20,
  0x12, 0xe5, 0x8c, 0x8e, 0x3f, 0x77, 0x29, 0x80, 0x2d, 0x66, 0xca, 0x7e,
  0x45, 0x5b, 0x2a, 0x0f, 0x34, 0x93, 0x25, 0x33, 0x8f, 0xd3, 0x70, 0xc4,
  0xcf, 0x61, 0xba, 0xa4, 0x49, 0xab, 0xa3, 0x92, 0x8e, 0xac, 0x4c, 0xc9,
  0xd9, 0x60, 0xb6, 0x44, 0x73, 0xbc, 0x02, 0x7e, 0x10, 0x69, 0x32, 0x10,
  0x2f, 0xf9, 0xbe, 0x30, 0x3a, 0x99, 0xfc, 0xd4, 0xd6, 0x65, 0x98, 0x1d,
  0x78, 0x76, 0x9a, 0xb3, 0xcd, 0x73, 0x66, 0x7d, 0x9e, 0x0d, 0x44, 0x87,
  0x65, 0xc1, 0x9f, 0x28, 0x4a, 0x82, 0x38, 0x24, 0xb3, 0xc4, 0x56, 0x25,
  0x19, 0x5d, 0xe7, 0x86, 0x75, 0x9d, 0xd9, 0xc2, 0x03, 0xdb, 0xc3, 0x34,
  0xf3, 0x08, 0x7f, 0xa3, 0x4e, 0x1d, 0x0c, 0x5e, 0x91, 0x04, 0x56, 0xb3,
  0xa4, 0x06, 0x6e, 0x67, 0x1a, 0x04, 0x33, 0x53, 0xf7, 0xe5, 0x29, 0xe2,
  0x3d, 0x25, 0x8c, 0x37, 0xe6, 0x56, 0xc0, 0xc0, 0xd7, 0x61, 0x8f, 0x17,

  0xcb, 0xe1, 0x7c, 0xbc, 0x1f, 0x1d, 0xc2, 0x7f, 0x3c, 0x25, 0x8b, 0x72,
  0x46, 0x07, 0xc7, 0xa0, 0x68, 0x61, 0x82, 0x0b, 0xc3, 0xe0, 0xa6, 0x04,
  0x83, 0x6b, 0x7a, 0x09, 0xed, 0xee, 0xc0, 0x4c, 0x1f, 0x62, 0x85, 0xb6,
  0x04, 0x8d, 0x70, 0x9a, 0x56, 0x9c, 0xa7, 0xd7, 0x82, 0x1b, 0xe4, 0xa4,
  0x36, 0xd0, 0x99, 0x6f, 0xef, 0x7c, 0x1e, 0x61, 0xf1, 0xc1, 0xfb, 0x37,
  0xfb, 0xd1, 0xe8, 0x26, 0x19, 0xdd, 0x96, 0xcb, 0xb9, 0xb2, 0x63, 0xdc,
  0x53, 0x30, 0x0f, 0x70, 0x9e, 0x1e, 0xe2, 0x03, 0x4c, 0x7c, 0x96, 0x8e,
  0xb0, 0xf4, 0xaf, 0x5b, 0x8b, 0x4e, 0x4d, 0x34, 0x3a, 0xe5, 0xd8, 0xa1,
  0x46, 0x6c, 0x50, 0xba, 0x00, 0xe7, 0xd4, 0x04, 0x82, 0x17, 0xb0, 0x07,

  0xf0, 0x71, 0x04, 0xc4, 0x06, 0xbd, 0x7c, 0xa5, 0xcb, 0xf6, 0x65, 0xdd,
  0xeb, 0x8d, 0x17, 0x7b, 0xab, 0xff, 0xaa, 0x05, 0xff, 0xba, 0xd6, 0xa0,
  0x09, 0x6b, 0x95, 0x4c, 0xb5, 0x1d, 0xd9, 0x03, 0xa8, 0xe5, 0xe3, 0x24,
  0x11, 0x10, 0x4a, 0xc3, 0x78, 0xde, 0xc7, 0xf1, 0xc9, 0x4d, 0x7c, 0x42,
  0x3a, 0x8c, 0x52, 0x16, 0x5b, 0x42, 0x98, 0x14, 0x4c, 0x5a, 0x94, 0x26,
  0x64, 0xa2, 0x80, 0x06, 0xe1, 0x8c, 0x42, 0xb0, 0xbe, 0xd2, 0x66, 0xea,
  0xbf, 0xd5, 0x65, 0x63, 0x59, 0x8c, 0x94, 0xd0, 0x3a, 0x68, 0x0e, 0x5a,
  0x4b, 0x48, 0x78, 0x6d, 0x68, 0x53, 0x78, 0x44, 0x66, 0xbe, 0xcb, 0x71,
  0x69, 0x7b, 0x1c, 0x25, 0xa3, 0x11, 0x92, 0xf3, 0x1c, 0xb1, 0xa0, 0xd9,

  0xa2, 0xce, 0xef, 0xb3, 0x69, 0x81, 0xfe, 0x11, 0x2a, 0x0a, 0x8b, 0x43,
  0xb1, 0x8c, 0x10, 0x82, 0xa9, 0x1d, 0x1b, 0x2c, 0xae, 0x17, 0xc8, 0xe9,
  0xcd, 0xae, 0x60, 0xbe, 0x3d, 0x07, 0xb1, 0xb9, 0x62, 0x99, 0x6d, 0x76,
  0xe7, 0x88, 0xb6, 0xba, 0x72, 0x4c, 0xdb, 0xfd, 0xad, 0xe7, 0x1c, 0x13,
  0x12, 0x51, 0xed, 0x74, 0xe0, 0x3d, 0x57, 0x4b, 0xd6, 0x24, 0x72, 0x20,
  0xf6, 0x96, 0xec, 0x3b, 0x84, 0x5e, 0x66, 0xff, 0x55, 0x32, 0xae, 0x0d,
  0xb5, 0x92, 0xe7, 0xb8, 0x2d, 0x3c, 0x79, 0xba, 0xdb, 0x12, 0x86, 0xc1,
  0x7f, 0xed, 0x34, 0x89, 0x0e, 0x7e, 0xfd, 0x2b, 0x57, 0xb3, 0xfd, 0x0b,
  0x4a, 0x35, 0xb6, 0xba, 0xf6, 0x7b, 0x5b, 0xa6, 0x31, 0x0e, 0x4f, 0xc8,
  0xde, 0x8b, 0xc6, 0x70, 0x7e, 0xe3, 0x13, 0x7a, 0x01, 0xcb, 0x5d, 0xf2,
  0xa2, 0x87, 0x2a, 0x3b, 0x1c, 0x96, 0xa7, 0x42, 0x05, 0xa7, 0x0f, 0xc7,
  0x5b, 0xa2, 0x62, 0x8b, 0x3a, 0x2d, 0x11, 0x27, 0xc5, 0x8c, 0x18, 0xd5,
  0xcc, 0x98, 0xf4, 0xc1, 0xb4, 0x7d, 0x22, 0x90, 0x1d, 0x47, 0x45, 0xa7,
  0x1f, 0xe0, 0xa6, 0x46, 0x1f, 0x16, 0x44, 0x83, 0x7d, 0xc2, 0x54, 0x36,
  0xed, 0x5f, 0x68, 0x76, 0x51, 0xdb, 0xec, 0x2c, 0xf6, 0x97, 0xc6, 0xe4,

  0xa9, 0x58, 0xb3, 0xd4, 0xef, 0x94, 0x58, 0x05, 0x8b, 0x2a, 0xbf, 0x34,
  0x0a, 0xe5, 0xb6, 0x28, 0x76, 0x92, 0x21, 0x58, 0x5f, 0xbd, 0x58, 0xa0,
  0x6a, 0xca, 0x28, 0xb5, 0x6c, 0x7a, 0x6c, 0x92, 0xc1, 0xea, 0xbe, 0x76,

  0x6e, 0xb5, 0x4d, 0x4a, 0x02, 0xfe, 0x15, 0xf2, 0x85, 0x64, 0x21, 0x60,
  0x3f, 0x2f, 0x00, 0x14, 0x3c, 0x8e, 0x67, 0x37, 0xc2, 0xf1, 0xf0, 0xbb,
  0x1a, 0xad, 0x8c, 0x78, 0x2d, 0xfd, 0xe7, 0x11, 0xf7, 0x56, 0x37, 0x38,
  0x3b, 0xa4, 0x36, 0x97, 0xf8, 0x6b, 0x60, 0x78, 0xaf, 0x02, 0xc4, 0xf5,
  0xab, 0xee, 0xc2, 0xce, 0xaa, 0x30, 0xa8, 0x7f, 0x07, 0x77, 0xfb, 0xfa,
  0xb5, 0xb6, 0xbd, 0xf2, 0xd8, 0x59, 0x6b, 0x13, 0xa1, 0xe7, 0xed, 0x56,
  0xcb, 0xde, 0x98, 0xbd, 0x6b, 0xec, 0x56, 0xdb, 0xd1, 0xea, 0x55, 0xf5,
  0xa1, 0xf7, 0xc3, 0x57, 0x75, 0xb7, 0xc5, 0xe7, 0x62, 0x54, 0xd4, 0x86,
  0xd3, 0x13, 0x7d, 0x66, 0x45, 0x3a, 0x27, 0x00, 0xbc, 0x7e, 0xf4, 0xc6,
  0xe6, 0xb4, 0x10, 0xf0, 0x9e, 0x67, 0xac, 0x8e, 0x97, 0x2d, 0x99, 0x1f,
  0xab, 0x4f, 0x6b, 0x57, 0x92, 0x7a, 0x6c, 0xe2, 0x02, 0xc9, 0x74, 0x29,
  0xca, 0xca, 0x3d, 0x40, 0x4c, 0xf1, 0xdc, 0x68, 0xf8, 0x52, 0xc2, 0x74,
  0x98, 0x9a, 0x25, 0x01, 0x18, 0xda, 0xfa, 0x5d, 0x37, 0x66, 0x6e, 0xd4,
  0x6b, 0x2c, 0x21, 0x08, 0x79, 0x8a, 0xe8, 0x8b, 0xa6, 0xf3, 0x01, 0x4a,
  0x44, 0x55, 0x28, 0xe1, 0x23, 0x77, 0x69, 0x1c, 0x1d, 0xcd, 0xaa, 0xde,


  0xe0, 0xbb, 0x11, 0x47, 0xd8, 0x6a, 0xe1, 0x29, 0xaf, 0xd5, 0x37, 0x79,
  0x55, 0xa8, 0x4b, 0x63, 0x29, 0x49, 0xab, 0x69, 0x31, 0x5a, 0xce, 0x09,
  0x03, 0x95, 0xc8, 0xca, 0x74, 0x0b, 0xc2, 0x83, 0xb4, 0x94, 0xc6, 0xe9,
  0xf6, 0x3e, 0xf8, 0x61, 0x7c, 0x5b, 0xea, 0x92, 0xa4, 0x48, 0x87, 0xeb,
  0x30, 0xcc, 0x9c, 0xeb, 0x4d, 0x36, 0x03, 0x22, 0xa8, 0x61, 0xd9, 0x31,
  0x4c, 0x2f, 0xa2, 0xc0, 0xfc, 0xe7, 0x87, 0xd3, 0xe3, 0x9a, 0x77, 0x5f,
  0x10, 0xe6, 0x57, 0x46, 0x2b, 0x18, 0x56, 0x56, 0x9e, 0x9c, 0xa0, 0x0e,
  0xab, 0xd9, 0xb8, 0x9a, 0x38, 0x57, 0x3b, 0xde, 0x3c, 0x0b, 0x88, 0x54,
  0xd0, 0x17, 0x7e, 0xd9, 0x1d, 0xdd, 0xd1, 0x3b, 0xba, 0xfb, 0x5b, 0xdf,
  0xd1, 0xdd, 0xdf, 0xe6, 0x8e, 0x2a, 0x07, 0x71, 0xfe, 0xee, 0x5e, 0x57,
  0xcf, 0x2c, 0xa5, 0xeb, 0xeb, 0x3a, 0x9c, 0xeb, 0x39, 0x03, 0x3d, 0x06,
  0x8f, 0xe8, 0x89, 0xdf, 0xa2, 0xc7, 0x05, 0xb2, 0xa1, 0xda, 0xb0, 0x48,
  0x2e, 0xb1, 0x82, 0x3f, 0x76, 0xa3, 0x53, 0x06, 0x36, 0xa7, 0xec, 0x24,
  0x79, 0xfd, 0x8c, 0xeb, 0x6b, 0xc5, 0xef, 0xad, 0x3e, 0xff, 0x40, 0x05,
  0x7e, 0x3a, 0x42, 0x78, 0x35, 0xeb, 0x71, 0x47, 0x8b, 0x59, 0x75, 0xc6,
  0x62, 0x49, 0x21, 0x85, 0xe8, 0x68, 0x81, 0x25, 0xb2, 0xa0, 0x71, 0x3c,


  0x30, 0xce, 0x1e, 0xf6, 0xdd, 0x44, 0x12, 0xf3, 0x73, 0x91, 0x70, 0x93,
  0xd1, 0x83, 0x2b, 0x99, 0xf7, 0xcd, 0xe9, 0xd0, 0xe8, 0x0c, 0x7f, 0x38,
  0x43, 0xe2, 0x2f, 0xd8, 0x70, 0xdc, 0x01, 0x02, 0x9f, 0x7a, 0xcd, 0x75,
  0x86, 0x8f, 0x55, 0xa0, 0x0c, 0x0c, 0x57, 0x8d, 0xbb, 0xb0, 0x5e, 0x4a,
  0x96, 0xe9, 0x1e, 0xec, 0xe3, 0x06, 0x98, 0x99, 0xb7, 0x04, 0xe0, 0x9b,
  0x50, 0x9d, 0x8e, 0x31, 0xae, 0xa8, 0x2f, 0xca, 0x14, 0x3d, 0x56, 0xda,
  0x92, 0xc2, 0xab, 0x98, 0xf9, 0x39, 0xd1, 0x34, 0x47, 0xcd, 0x21, 0x14,
  0xb8, 0xd9, 0x7a, 0x89, 0x6a, 0xda, 0xa5, 0xfe, 0xa3, 0xe4, 0x9b, 0x6e,
  0x06, 0x8f, 0xc4, 0x63, 0xcd, 0xf6, 0xaf, 0xea, 0x34, 0x0a, 0xeb, 0x2f,
  0x16, 0xaf, 0x30, 0x2e, 0x69, 0xd4, 0x44, 0x81, 0x3d, 0xe9, 0x9a, 0x13,
  0xee, 0xcb, 0x62, 0x5e, 0x1c, 0x91, 0x67, 0x93, 0xbf, 0x20, 0x0e, 0x28,
  0x36, 0xf3, 0x0d, 0x44, 0x34, 0x7a, 0x89, 0xd0, 0x9f, 0xcf, 0xfd, 0xb6,
  0xba, 0x3e, 0xac, 0x9e, 0xf1, 0x3d, 0x5b, 0xa0, 0xe8, 0xda, 0x8d, 0x55,

  0x70, 0xe7, 0x7e, 0xbf, 0x1f, 0x80, 0xb3, 0xb8, 0x4b, 0x93, 0xfb, 0x9a,
  0x2b, 0x5e, 0x66, 0xd6, 0x35, 0x0d, 0x33, 0xd8, 0x03, 0x74, 0x87, 0x3b,
  0x04, 0x43, 0x0e, 0x11, 0x49, 0xb3, 0xa5, 0x9c, 0xc4, 0x5e, 0x79, 0xf7,
  0x69, 0x67, 0x9b, 0x6f, 0x79, 0x9b, 0xcb, 0x50, 0x3d, 0x28, 0x03, 0x23,
  0xdb, 0x7e, 0x0e, 0x5d, 0xf4, 0x88, 0x14, 0x8f, 0x11, 0xb5, 0x6f, 0xb2,
  0x3c, 0x8d, 0xae, 0x3f, 0xd7, 0x1f, 0xa4, 0x25, 0xe3, 0x12, 0x33, 0xae,
  0x90, 0x1f, 0x2d, 0xe6, 0xcf, 0xd4, 0xf9, 0x81, 0xf0, 0x73, 0x95, 0x5e,
  0x20, 0xf6, 0x46, 0xe8, 0x88, 0xe2, 0x86, 0x20, 0xd2, 0x8c, 0x80, 0x5c,
  0x31, 0x81, 0xd4, 0x23, 0x39, 0x11, 0xa7, 0x7f, 0x95, 0x93, 0x29, 0x63,
  0xdb, 0x8b, 0x44, 0xba, 0xc0, 0x70, 0xbc, 0xd7, 0x74, 0x39, 0x71, 0xf8,
  0xb4, 0xbb, 0x12, 0xb0, 0x8e, 0xa4, 0x41, 0xa7, 0xf8, 0x62, 0x2d, 0xde,
  0x72, 0xd3, 0x46, 0xb4, 0xf5, 0xa9, 0x16, 0x53, 0xcb, 0x7a, 0xb5, 0x19,
  0xbc, 0x8f, 0x56, 0x26, 0x83, 0x97, 0x2e, 0x50, 0xb6, 0x07, 0x35, 0x60,
  0xbb, 0x00, 0xe1, 0xc0, 0xdc, 0xe6, 0x2d, 0x78, 0xc4, 0xac, 0x56, 0x30,


  0xea, 0x05, 0x36, 0x22, 0x5c, 0x62, 0xe2, 0x09, 0xdd, 0x7d, 0xa9, 0x5e,


  0x97, 0x82, 0xf5, 0x26, 0x98, 0x89, 0x81, 0x84, 0xc3, 0xdd, 0xef, 0xdf,


  0xc4, 0x0f, 0x0f, 0xfd, 0x32, 0xd9, 0x04, 0xaa, 0x2d, 0x37, 0xcb, 0x72,
  0x86, 0x1f, 0x2d, 0x09, 0x7d, 0x6d, 0x65, 0x8f, 0xe3, 0x87, 0x47, 0x43,
  0x40, 0xc2, 0x9c, 0x47, 0x31, 0xbe, 0x5a, 0x63, 0xb6, 0xb6, 0xc9, 0x31,
  0xb7, 0x09, 0x6b, 0xa6, 0x0c, 0x33, 0xf0, 0x34, 0x41, 0xa8, 0xbb, 0xd5,
  0xb6, 0xcc, 0x1a, 0x6c, 0x72, 0x96, 0x19, 0xc7, 0xe2, 0xe9, 0x23, 0xd4,
  0x74, 0xd1, 0x56, 0xda, 0x21, 0x77, 0xd5, 0x09, 0x8d, 0xc2, 0xa6, 0x98,
  0x02, 0x08, 0xee, 0x14, 0x25, 0xb0, 0x3a, 0xdc, 0xf7, 0x0f, 0x2d, 0xe9,
  0xfc, 0x36, 0x00, 0xf9, 0xd4, 0xe6, 0xb6, 0x74, 0x96, 0x86, 0xa5, 0x22,
  0x07, 0x16, 0x60, 0xf0, 0xfe, 0xfe, 0xbe, 0xbf, 0xca, 0x6f, 0xf9, 0x2f,
  0xc7, 0xc0, 0xeb, 0xc3, 0x5d, 0x00, 0xd5, 0x9e, 0xa5, 0xd9, 0xf2, 0x21,
  0x72, 0x30, 0x5e, 0x4c, 0x4b, 0x38, 0x0d, 0xcc, 0x45, 0xdf, 0x5d, 0xbd,
  0xed, 0x9a, 0xc8, 0xa6, 0xa4, 0xb0, 0xa1, 0xe7, 0xb7, 0xf4, 0xb5, 0xb6,
  0x24, 0x65, 0xdc, 0x1d, 0x04, 0x8d, 0x3e, 0x3e, 0xba, 0xfc, 0x78, 0x7e,
  0x72, 0xfd, 0xf1, 0xea, 0xe8, 0x7b, 0xdc, 0x42, 0xf6, 0xca, 0x80, 0xbc,
  0xc2, 0x78, 0x40, 0x91, 0xe7, 0xd8, 0x09, 0xe9, 0x3d, 0x95, 0x0d, 0xa6,
  0x19, 0xc1, 0xab, 0x84, 0x3a, 0xb7, 0x59, 0xcc, 0x28, 0x99, 0x27, 0xcc,
  0xe5, 0x20, 0xaa, 0xed, 0xd7, 0x6d, 0x52, 0x64, 0xc9, 0xac, 0x9f, 0x17,
  0x53, 0xa4, 0xc2, 0xcd, 0x37, 0xc2, 0x3f, 0x83, 0xc3, 0x6d, 0x4a, 0x56,
  0x03, 0x42, 0x90, 0xdd, 0x15, 0x13, 0x44, 0x2c, 0x79, 0x6e, 0xa7, 0x5a,
  0x87, 0x34, 0xf7, 0x88, 0x01, 0x2e, 0xee, 0xf6, 0x56, 0xa8, 0x77, 0xf5,
  0x7e, 0xe1, 0xd2, 0xe9, 0x93, 0x28, 0x88, 0x7c, 0x3f, 0x6e, 0xae, 0x0a,
  0x57, 0x67, 0xce, 0x1e, 0xbb, 0x01, 0x00, 0x04, 0x52, 0xe7, 0x72, 0x03,
  0x25, 0x41, 0x05, 0x6e, 0x98, 0x64, 0x13, 0xbc, 0xd2, 0x82, 0xd4, 0x66,
  0xb5, 0xa2, 0xa6, 0x0f, 0xa1, 0xcd, 0xf7, 0xd0, 0x7b, 0xe1, 0x5b, 0x86,
  0xd8, 0x7a, 0xd7, 0x59, 0xf3, 0x0b, 0x59, 0xf3, 0x8b, 0x7f, 0x69, 0xcd,
  0x2f, 0xfe, 0x85, 0x35, 0xef, 0xfd, 0xc6, 0x6b, 0xde, 0x0b, 0xae, 0xd9,
  0xf9, 0x4a, 0xef, 0x6f, 0xb8, 0xe6, 0xbf, 0x2d, 0xb3, 0xdb, 0x1e, 0xcc,
  0x17, 0xa5, 0xb0, 0x74, 0xda, 0x2c, 0xc3, 0x26, 0x5b, 0xad, 0xd1, 0x0e,
  0xf9, 0xf6, 0x2d, 0xc0, 0xb0, 0xd3, 0x39, 0x34, 0x76, 0x3a, 0xe9, 0x71,
  0xdc, 0xa9, 0xa9, 0x87, 0x37, 0x0d, 0x84, 0x14, 0xeb, 0x7d, 0xcb, 0x11,

  0xfa, 0x29, 0x50, 0xb3, 0xef, 0xc8, 0x6c, 0x74, 0xd8, 0x8e, 0xf6, 0x5d,
  0xa1, 0x9b, 0x1e, 0xfb, 0x38, 0x47, 0x23, 0x72, 0x93, 0xdd, 0x68, 0xdb,
  0x39, 0x8a, 0x81, 0x4b, 0x9a, 0x3f, 0x37, 0x39, 0x52, 0x0c, 0x28, 0x1d,
  0x98, 0xe3, 0x82, 0x18, 0xf3, 0xf1, 0x79, 0xc6, 0xf5, 0xe3, 0x02, 0x07,
  0x04, 0xd9, 0x5c, 0x80, 0x0c, 0xe6, 0x44, 0x94, 0xd9, 0x3d, 0x65, 0x27,
  0xe8, 0x24, 0xa3, 0xc6, 0x04, 0x25, 0xda, 0x71, 0x93, 0x3c, 0xae, 0x79,
  0x0a, 0xc3, 0x68, 0x96, 0x23, 0xbf, 0x19, 0xaf, 0x36, 0x3e, 0x86, 0xb6,
  0xcd, 0x29, 0xcb, 0x8b, 0x46, 0xdf, 0x53, 0x57, 0x6e, 0xdc, 0x26, 0xc9,
  0x22, 0x9e, 0x11, 0xb4, 0x06, 0xe6, 0x3e, 0xb4, 0x35, 0xca, 0xaa, 0x25,
  0x47, 0x6a, 0xe1, 0x00, 0xbd, 0x51, 0xcb, 0x3c, 0x23, 0x3e, 0xc7, 0x07,
  0x89, 0x95, 0x32, 0x51, 0x3a, 0xa6, 0x5a, 0xd7, 0x70, 0xdf, 0x14, 0xdb,
  0x94, 0xc1, 0x4c, 0x02, 0x5b, 0x6f, 0xe4, 0x43, 0xc1, 0x80, 0x31, 0x9f,
  0x50, 0x1c, 0x39, 0x4c, 0xcd, 0xb9, 0x4b, 0x31, 0x25, 0xaf, 0x89, 0x3d,
  0x6c, 0xde, 0xe7, 0xd7, 0x09, 0x55, 0xaa, 0xd6, 0x39, 0x81, 0x0f, 0x10,
  0x9f, 0xc8, 0x8d, 0xfc, 0x43, 0x75, 0x83, 0xba, 0x49, 0x7b, 0x24, 0xa5,
  0x00, 0xca, 0xac, 0xff, 0x5e, 0x1f, 0x5f, 0x7e, 0xfc, 0xf6, 0xe4, 0xe4,
  0xf2, 0xf4, 0xcd, 0xd9, 0x89, 0x5c, 0x18, 0xf3, 0xa3, 0xf3, 0xeb, 0xef,
  0xce, 0xb4, 0x5b, 0xa8, 0xd2, 0xa2, 0x47, 0xf0, 0x02, 0xfb, 0xcf, 0x4c,
  0xb9, 0x4b, 0xed, 0xb0, 0xc0, 0x90, 0x3e, 0x3a, 0xfd, 0x01, 0xb4, 0xd6,
  0xcb, 0xde, 0x87, 0x1f, 0xbc, 0x5e, 0x24, 0x4e, 0x8d, 0x89, 0xdf, 0x4c,
  0xc0, 0x96, 0x9c, 0xf4, 0x7a, 0x59, 0x6e, 0x0f, 0xb0, 0x35, 0xe5, 0xee,
  0x37, 0x16, 0x83, 0x30, 0xdc, 0x32, 0x33, 0x0a, 0x43, 0xd7, 0x6d, 0xe0,
  0xe8, 0xa6, 0xb5, 0xbd, 0xd8, 0xd2, 0x36, 0x6a, 0x2b, 0x83, 0x16, 0x8d,
  0xd6, 0x6d, 0xb7, 0xc9, 0x23, 0x61, 0x38, 0x46, 0x87, 0xf8, 0xdf, 0x70,
  0xb3, 0xd3, 0xcb, 0x22, 0xbd, 0x43, 0xfd, 0x0f, 0x9e, 0xe5, 0x90, 0x2e,
  0x3e, 0xda, 0x37, 0xad, 0x5f, 0x25, 0xac, 0x8c, 0x83, 0x50, 0xe6, 0x09,
  0x0d, 0x1a, 0x85, 0xbc, 0x3d, 0x84, 0x8c, 0x83, 0xbf, 0xe1, 0xf1, 0x68,
  0x40, 0xd8, 0x9e, 0x7e, 0xf4, 0xe6, 0xe4, 0xaa, 0x1b, 0x5d, 0x9e, 0xbc,
  0xe7, 0x42, 0x95, 0x93, 0xf3, 0x6f, 0xb8, 0x1b, 0xae, 0x36, 0x39, 0xa5,
  0x4c, 0x08, 0x3f, 0x59, 0xd3, 0xd9, 0x13, 0x78, 0x97, 0x32, 0x53, 0xcb,
  0x12, 0xa4, 0xeb, 0x27, 0x04, 0xd0, 0xe1, 0xb5, 0x1d, 0xc2, 0x7f, 0x42,
  0x5b, 0x05, 0x76, 0xc4, 0xbb, 0xc0, 0x76, 0x89, 0x62, 0x66, 0x72, 0x67,
  0xc4, 0x28, 0xc0, 0xdd, 0xe0, 0x1d, 0x83, 0x0d, 0xf1, 0xb3, 0x38, 0x74,
  0x83, 0xc8, 0xec, 0x23, 0x08, 0x21, 0x6e, 0xa1, 0x2e, 0x31, 0x78, 0xb4,
  0x62, 0xe1, 0x73, 0x5d, 0xa4, 0x4b, 0x02, 0x24, 0xb7, 0x9b, 0x11, 0xaa,
  0x8e, 0x2e, 0x52, 0x6e, 0x47, 0xdf, 0x40, 0xa6, 0x83, 0xed, 0x4e, 0xc7,
  0x8c, 0xc0, 0x80, 0x01, 0xe4, 0xbc, 0xc0, 0x04, 0x0e, 0x84, 0x3e, 0xf8,
  0x5f, 0x9b, 0xfd, 0xb2, 0xbc, 0xd9, 0x4c, 0xc7, 0x1f, 0x8b, 0x32, 0x5e,

  0x6b, 0xca, 0x22, 0xe7, 0xd7, 0x63, 0xfc, 0x75, 0xb4, 0xd6, 0x37, 0x8f,
  0xca, 0xdf, 0xf1, 0xe7, 0x41, 0x2c, 0x00, 0x15, 0x41, 0xec, 0x5a, 0xd1,


  0x7c, 0x4e, 0x6d, 0xa2, 0x3b, 0x4b, 0x87, 0x05, 0x28, 0x70, 0xb6, 0xfb,
  0x87, 0xf4, 0xc4, 0x5d, 0xdc, 0x8e, 0xca, 0xed, 0x6d, 0x1f, 0x8d, 0xde,
  0x94, 0x38, 0x76, 0x35, 0x2f, 0xf7, 0xf2, 0xdb, 0xe3, 0xc1, 0x1f, 0xb7,
  0xb7, 0x29, 0x0d, 0x7a, 0x1d, 0xd3, 0x55, 0x5f, 0xee, 0x6f, 0xef, 0x6c,
  0x84, 0xd4, 0x47, 0x2f, 0xaf, 0x67, 0xc2, 0xad, 0x30, 0x17, 0xce, 0x01,
  0x52, 0x98, 0x5b, 0x8a, 0x1e, 0xcc, 0xd0, 0xe3, 0x04, 0x93, 0x04, 0xa9,
  0xb2, 0x93, 0xc3, 0x99, 0x94, 0x3b, 0xe9, 0xa5, 0x5e, 0x18, 0x1c, 0xa4,
  0x0e, 0xcf, 0xfe, 0xa0, 0x63, 0xa8, 0xca, 0xcd, 0x21, 0xa7, 0xfc, 0x13,
  0x67, 0xd6, 0x7d, 0xde, 0xa7, 0x66, 0x78, 0xcd, 0x5d, 0x17, 0x25, 0x3a,
  0x5a, 0xa0, 0x29, 0x16, 0x5f, 0xb6, 0x81, 0x70, 0x23, 0x41, 0x00, 0xf3,
  0x03, 0x3c, 0x5f, 0xbd, 0xcc, 0xa9, 0xc3, 0xf4, 0x83, 0x04, 0x1f, 0xdb,
  0x41, 0xcd, 0xee, 0x3b, 0x0c, 0xc2, 0x1d, 0xd4, 0x77, 0xf6, 0xf1, 0x37,
  0xa2, 0x0e, 0xdc, 0xdd, 0xf0, 0x90, 0x9f, 0xf4, 0x4e, 0x16, 0xc3, 0xe8,
  0x70, 0x06, 0x2f, 0xce, 0x5a, 0x4a, 0xef, 0x4e, 0xb8, 0xdd, 0xd6, 0xb7,
  0x49, 0x31, 0x4c, 0x8a, 0xbc, 0x6c, 0x54, 0x09, 0x69, 0x8f, 0x57, 0xf6,
  0xa9, 0xd0, 0x38, 0x9a, 0x2e, 0xe5, 0xb5, 0x57, 0xae, 0xc8, 0xfa, 0x16,
  0x8c, 0xf7, 0x3a, 0x2e, 0xcf, 0x1a, 0xd5, 0x2a, 0xe1, 0x05, 0xc0, 0xfe,

  0x52, 0xf8, 0x27, 0x70, 0xe3, 0x09, 0x37, 0x09, 0x8d, 0x67, 0x6b, 0xd8,
  0xf5, 0xa7, 0x79, 0x8d, 0x84, 0xd2, 0xd6, 0xfa, 0x58, 0x80, 0xc6, 0xc6,
  0x1a, 0x65, 0x41, 0x51, 0xb9, 0x75, 0x1c, 0xc9, 0x5c, 0x34, 0xbf, 0x1b,

  0xaf, 0xb9, 0x4d, 0x03, 0x2c, 0xbd, 0x4e, 0x48, 0x66, 0xb8, 0x3a, 0x74,
  0x52, 0x5b, 0x86, 0xf1, 0x6f, 0x2c, 0xa6, 0xf8, 0x18, 0x9e, 0x1b, 0x39,
  0xb2, 0x9e, 0x55, 0x65, 0xf3, 0x8d, 0xe1, 0xf4, 0xac, 0xdc, 0x73, 0xd6,
  0xf7, 0x83, 0x1d, 0x74, 0x8f, 0xb8, 0x3a, 0xbc, 0x81, 0x35, 0x42, 0x5d,

  0x09, 0xb0, 0xa4, 0x69, 0xcc, 0x86, 0xa1, 0x54, 0xbf, 0xda, 0xc4, 0x09,
  0xe6, 0x34, 0x7e, 0x70, 0x9c, 0x96, 0x4a, 0xfd, 0x43, 0x74, 0xda, 0x3d,
  0x36, 0xde, 0x8f, 0x23, 0xf1, 0x46, 0x50, 0x5d, 0xd4, 0x7d, 0x81, 0x68,
  0xa9, 0x99, 0xc5, 0x5c, 0x9e, 0x25, 0xad, 0x20, 0x5a, 0x8a, 0xa8, 0x0a,



  0x87, 0x34, 0x93, 0xde, 0x86, 0x9a, 0x8d, 0x58, 0xe8, 0x9c, 0x7a, 0x92,
  0xcc, 0xa1, 0x0e, 0x03, 0x7c, 0xef, 0x0f, 0x4f, 0x42, 0xaa, 0x3c, 0x75,





  0x76, 0x4e, 0x73, 0xec, 0x00, 0x4c, 0xc2, 0xb3, 0xb1, 0xe2, 0x1a, 0x65,
  0x7e, 0x54, 0x31, 0xd0, 0x23, 0x99, 0x74, 0x08, 0xfc, 0x34, 0xf1, 0xc0,
  0xb2, 0x06, 0x35, 0x7c, 0x05, 0x69, 0xf9, 0xaa, 0x25, 0x74, 0xf4, 0x1e,

  0x52, 0x3b, 0xe1, 0x48, 0x98, 0x26, 0x65, 0x4c, 0xfb, 0x3d, 0x52, 0x59,
  0x9b, 0xee, 0x36, 0x6c, 0x57, 0x62, 0xcb, 0xb4, 0xe9, 0xd6, 0x12, 0x18,
  0xbd, 0x82, 0x1c, 0x69, 0x96, 0x34, 0x6f, 0x07, 0xfa, 0xa2, 0x25, 0xff,
  0x96, 0x8c, 0x8b, 0xd8, 0xf3, 0x81, 0x50, 0xc1, 0x03, 0x77, 0x00, 0x11,
  0x22, 0x58, 0x1b, 0xb3, 0x67, 0x94, 0x8e, 0xc4, 0x4c, 0x15, 0x2f, 0x9e,
  0x84, 0xa1, 0xb8, 0x6b, 0x02, 0xdc, 0x68, 0xcf, 0x54, 0x18, 0xc2, 0x10,
  0xf7, 0xe9, 0xb8, 0xba, 0xa1, 0x9e, 0x3c, 0x6a, 0x19, 0x95, 0x82, 0x0b,
  0x80, 0x4e, 0xea, 0xd4, 0xaf, 0x7a, 0x1b, 0xb6, 0x38, 0xf0, 0xf8, 0xc0,
  0x68, 0x53, 0x23, 0x06, 0xc8, 0x42, 0x47, 0x1d, 0x9d, 0x03, 0x39, 0xb5,
  0x37, 0x59, 0xd5, 0x33, 0xd0, 0x30, 0xd8, 0x37, 0x7b, 0x82, 0xed, 0x76,
  0x3c, 0x73, 0x4d, 0xcb, 0xd3, 0xfa, 0x7a, 0x43, 0x90, 0x86, 0xd7, 0x6e,
  0x19, 0x14, 0xff, 0xdb, 0x35, 0xed, 0x2a, 0xbb, 0xcc, 0x2a, 0xb7, 0x82,
  0x06, 0x79, 0x79, 0x74, 0x9b, 0xfa, 0x9d, 0x1a, 0xe8, 0xeb, 0x5d, 0xe0,
  0x35, 0x73, 0x1e, 0xe1, 0xfd, 0x9a, 0x3a, 0x4a, 0x11, 0x30, 0x61, 0x1a,
  0xcb, 0xef, 0x19, 0x2c, 0x65, 0x6d, 0xca, 0x0f, 0x7d, 0x63, 0x1f, 0x6a,
  0x0c, 0x87, 0x5e, 0x7b, 0xf6, 0xd2, 0x6b, 0x32, 0x5d, 0x79, 0x80, 0x05,
  0x1a, 0xdf, 0x76, 0xa3, 0xdd, 0x39, 0x1d, 0xca, 0xf6, 0x37, 0x21, 0xc6,
  0xc5, 0x3d, 0x82, 0xcb, 0xdc, 0x94, 0xcb, 0xf7, 0xfe, 0x82, 0x26, 0x17,
  0x6d, 0x18, 0xd3, 0xa5, 0xa9, 0x04, 0xe3, 0x7a, 0x14, 0xe5, 0x07, 0x81,
  0xa0, 0x03, 0xe5, 0x52, 0x2e, 0xd0, 0x48, 0x18, 0x27, 0x8a, 0x12, 0x3e,
  0x27, 0xef, 0x26, 0x66, 0x4b, 0x2d, 0x04, 0x0e, 0x03, 0xc9, 0xb5, 0x67,
  0x20, 0x48, 0xcb, 0x19, 0x3e, 0x40, 0x6d, 0xb2, 0x72, 0x2f, 0xb3, 0x7a,
  0xb6, 0x20, 0x03, 0xc9, 0x74, 0xb2, 0x73, 0x26, 0x85, 0x55, 0xad, 0xa3,
  0x48, 0x7c, 0x3c, 0x9f, 0x50, 0x24, 0xce, 0x28, 0x45, 0x2f, 0x2d, 0xab,
  0x5e, 0x00, 0xef, 0x95, 0x62, 0x40, 0x97, 0x17, 0x97, 0xbb, 0x1b, 0x2e,
  0x28, 0xa6, 0x80, 0x23, 0x70, 0xcf, 0x47, 0x8a, 0x12, 0x19, 0xe0, 0x84,
  0xae, 0xb2, 0x1b, 0x2e, 0xd3, 0xf3, 0x6d, 0xcb, 0x91, 0x20, 0xc6, 0x21,
  0x73, 0xa1, 0x2f, 0x92, 0xcb, 0xdf, 0x16, 0x8a, 0x38, 0xdd, 0x10, 0xed,
  0xc5, 0x54, 0x78, 0xc4, 0xcf, 0x7c, 0x58, 0x99, 0x92, 0x13, 0xca, 0x09,
  0x91, 0xa5, 0x47, 0xc5, 0x7f, 0xf5, 0x7e, 0x22, 0x58, 0xb8, 0xe0, 0xcd,
  0x32, 0xe2, 0xc4, 0xa3, 0x40, 0x4a, 0x97, 0x04, 0x79, 0xed, 0x93, 0x14,

  0x90, 0xd0, 0x62, 0x48, 0x42, 0x17, 0xb2, 0xb9, 0x16, 0xe8, 0x2d, 0x45,
  0xaa, 0x65, 0x4c, 0xe5, 0x7e, 0x5b, 0x05, 0xae, 0xed, 0x6b, 0x51, 0xb3,
  0xc8, 0xa4, 0x6b, 0x59, 0x1c, 0x9d, 0x9f, 0x0d, 0xae, 0xdd, 0x20, 0x12,
  0xe9, 0x61, 0x5e, 0x2a, 0x73, 0x1d, 0xd8, 0xcd, 0x49, 0x2d, 0x3a, 0x3b,
  0x1d, 0x5c, 0xf7, 0x43, 0x1d, 0x1b, 0x40, 0x3b, 0x1f, 0x60, 0xb9, 0x4d,
  0x0d, 0x28, 0x23, 0xa2, 0xd3, 0x93, 0x62, 0x51, 0x8e, 0x8e, 0x71, 0xb4,
  0x28, 0x2d, 0x5c, 0x50, 0x88, 0xe6, 0x70, 0x30, 0xc5, 0x2f, 0x38, 0x4d,
  0x59, 0x52, 0x9c, 0x35, 0x4a, 0x54, 0x2e, 0x87, 0x3d, 0x07, 0x49, 0x91,
  0xf5, 0x1d, 0x6a, 0xd1, 0x05, 0xd4, 0x0b, 0x12, 0xea, 0xd6, 0xb7, 0x31,

  0xd7, 0x99, 0xa0, 0x68, 0x7f, 0x04, 0x01, 0xb3, 0xe6, 0xea, 0x1e, 0x45,
  0x09, 0x21, 0xee, 0x92, 0x93, 0x09, 0x9f, 0x7d, 0x36, 0x51, 0xe1, 0x56,
  0x34, 0x76, 0x52, 0xba, 0x3a, 0xd6, 0x6b, 0x16, 0x30, 0x6c, 0xf7, 0x4b,
  0xe2, 0x94, 0x0e, 0x09, 0x5a, 0xa2, 0x2b, 0x93, 0x84, 0x5d, 0x4e, 0x66,
  0xda, 0xad, 0x20, 0xc0, 0xe9, 0x98, 0x71, 0x30, 0xcb, 0x3a, 0x10, 0x26,
  0x83, 0x1e, 0x20, 0xd3, 0xe1, 0x06, 0x40, 0xa8, 0xba, 0xb5, 0x9d, 0x24,
  0xfb, 0xe4, 0x6a, 0xf9, 0xa9, 0xbd, 0x1f, 0x38, 0xe3, 0x99, 0x02, 0x65,
  0xdd, 0x36, 0x84, 0x36, 0x9f, 0x8c, 0xb4, 0x19, 0xd3, 0x87, 0xd3, 0x37,
  0x67, 0x66, 0xb7, 0x64, 0x77, 0x28, 0x85, 0xd6, 0xac, 0x15, 0xcb, 0x5a,
  0x94, 0x6d, 0xd2, 0x99, 0x78, 0x41, 0x9f, 0x65, 0x96, 0xfe, 0x9d, 0x52,
  0xad, 0x6c, 0x83, 0x7b, 0xe4, 0x7f, 0xe8, 0x3a, 0x57, 0x49, 0xb6, 0x56,
  0x9a, 0x4e, 0x76, 0xe9, 0xd8, 0x94, 0x7f, 0x70, 0x8c, 0x2f, 0x98, 0x7f,
  0xbc, 0x12, 0x39, 0x65, 0xbb, 0x0e, 0x6f, 0x4a, 0x28, 0xc7, 0x02, 0x46,
  0x06, 0x02, 0x69, 0x93, 0xca, 0x17, 0x3d, 0xe5, 0x82, 0x74, 0x33, 0x9b,
  0x5d, 0x57, 0x07, 0xd9, 0xc9, 0x0b, 0x29, 0x7a, 0x5c, 0x7f, 0x7b, 0x75,
  0xf1, 0xbe, 0x77, 0x7d, 0xb1, 0x41, 0x09, 0x7b, 0x34, 0xf2, 0x8a, 0x14,
  0x91, 0xd2, 0xf4, 0x49, 0xb5, 0x28, 0x25, 0xe2, 0x6b, 0x5b, 0x2f, 0x37,
  0xa4, 0xd0, 0x87, 0x45, 0x0a, 0x4d, 0x4f, 0xdf, 0xf2, 0xda, 0x97, 0x64,
  0xac, 0x89, 0xc4, 0xd4, 0x22, 0x15, 0xfd, 0x8e, 0x23, 0x27, 0x8e, 0xc5,
  0x29, 0x1d, 0xc2, 0xb9, 0x87, 0xcb, 0xf2, 0x31, 0x92, 0xda, 0x52, 0xc4,


  0x2c, 0x24, 0x5b, 0xca, 0x8f, 0x0e, 0x98, 0xde, 0xdb, 0x06, 0xa9, 0x08,
  0xab, 0xee, 0xb8, 0xac, 0xab, 0xca, 0xe1, 0xfa, 0xc6, 0x45, 0x91, 0xdf,
  0xab, 0xe0, 0x92, 0xda, 0x6f, 0x98, 0x3a, 0x1e, 0x52, 0xf1, 0xd8, 0x8a,
  0xee, 0x22, 0x80, 0x65, 0xda, 0x39, 0x7c, 0xa5, 0xfa, 0xb7, 0x5f, 0xc7,
  0xdc, 0xd0, 0x0c, 0xf0, 0x5e, 0x55, 0x2c, 0xb1, 0xa4, 0x34, 0xec, 0x76,
  0x3e, 0x43, 0x36, 0x59, 0x4f, 0x19, 0xef, 0x0a, 0xa2, 0x22, 0x02, 0xf0,

  0x50, 0xaf, 0x37, 0xe3, 0x97, 0x24, 0xff, 0x04, 0xc7, 0x14, 0xff, 0xec,
  0xdd, 0x60, 0x81, 0x5a, 0x46, 0x8d, 0x1e, 0xdb, 0xb8, 0x52, 0xda, 0xb8,
  0xcd, 0xc5, 0x4b, 0x2b, 0xee, 0xbf, 0xa9, 0x49, 0x38, 0x04, 0xa6, 0x46,
  0xcc, 0x00, 0x7f, 0xea, 0xe9, 0x92, 0x8a, 0x92, 0x94, 0x22, 0x42, 0xc5,
  0x78, 0x39, 0xa2, 0x63, 0xc2, 0x88, 0x1f, 0xb6, 0xf7, 0x1c, 0x32, 0x6e,
  0xab, 0x82, 0x3c, 0xe0, 0xd0, 0x36, 0x5d, 0x9e, 0x1d, 0x38, 0x4d, 0x2d,
  0x2b, 0xe2, 0xc7, 0x6c, 0xcf, 0x32, 0x54, 0x26, 0x31, 0xf7, 0x35, 0x61,
  0xc5, 0xb2, 0x68, 0xda, 0x9c, 0x18, 0x55, 0xd2, 0x9e, 0xc9, 0x3e, 0xbb,
  0x42, 0xd0, 0x7c, 0x82, 0x0b, 0x97, 0xa0, 0x3f, 0x22, 0x5b, 0x22, 0x01,
  0x53, 0xd0, 0xfd, 0xeb, 0xb8, 0x04, 0xbe, 0x54, 0x1f, 0x6f, 0x63, 0x85,
  0x7b, 0x7a, 0xa9, 0x85, 0x15, 0xce, 0xe9, 0xd5, 0x0e, 0x24, 0x7c, 0x72,
  0xa7, 0x35, 0x8c, 0x0b, 0x4e, 0xcd, 0x70, 0x76, 0x5c, 0x58, 0x14, 0x01,
  0x2f, 0x52, 0xae, 0x7a, 0x4c, 0xdd, 0xae, 0xef, 0x42, 0xcc, 0x29, 0x36,
  0xfd, 0x1c, 0xab, 0x48, 0x3f, 0x1a, 0xad, 0x6b, 0xe5, 0xa7, 0xa9, 0x44,
  0x3a, 0x93, 0x5f, 0x1d, 0x98, 0xd2, 0x54, 0xe4, 0x69, 0x8d, 0xe1, 0x76,
  0x7f, 0xf8, 0xa1, 0xde, 0x7f, 0x79, 0xa3, 0x0d, 0x0c, 0x43, 0x6a, 0x52,
  0xc6, 0xcc, 0xfb, 0x74, 0xc2, 0x5e, 0x5d, 0x9d, 0x92, 0x1d, 0x86, 0x18,
  0x28, 0x8b, 0x9f, 0x1d, 0x30, 0xe2, 0x29, 0x02, 0x13, 0xf0, 0x46, 0x8b,
  0xad, 0x6a, 0x29, 0x1c, 0x04, 0x93, 0x71, 0x1a, 0xc8, 0x59, 0x24, 0x86,
  0xab, 0xb9, 0x17, 0x1c, 0x53, 0xa1, 0x9c, 0x74, 0x77, 0xbb, 0x4a, 0xeb,
  0x9c, 0xb9, 0xc1, 0xd8, 0x82, 0x00, 0x35, 0xaf, 0x6e, 0x12, 0x6d, 0x80,
  0x33, 0x4d, 0xe9, 0x25, 0xc9, 0x7b, 0x6e, 0x2b, 0x81, 0x69, 0xb1, 0xa3,
  0x22, 0x11, 0x6f, 0x83, 0x36, 0x01, 0xf2, 0xa2, 0xc8, 0x08, 0xda, 0xc3,
  0x97, 0x87, 0x9c, 0xaa, 0xb1, 0x73, 0x5f, 0x2c, 0xde, 0x62, 0xe3, 0xc4,
  0xa4, 0x0c, 0xc3, 0xd7, 0xde, 0xef, 0x73, 0x82, 0xd8, 0xa4, 0xde, 0x4b,
  0x04, 0x1b, 0x97, 0xb3, 0x63, 0x4b, 0xda, 0x07, 0xb3, 0xbc, 0xf9, 0xb3,
  0xde, 0xdc, 0xbe, 0x1b, 0xbc, 0x44, 0x2a, 0x08, 0x85, 0x40, 0x95, 0x99,

  0xe0, 0xb9, 0x20, 0xb6, 0x2f, 0xe6, 0xc2, 0x69, 0x4b, 0x32, 0xf4, 0x14,


  0x6b, 0x8c, 0x9c, 0xd5, 0x69, 0x42, 0xa2, 0x98, 0x93, 0xf1, 0xe2, 0x03,





  0x4d, 0xdb, 0x2b, 0x8b, 0x39, 0x3c, 0xe4, 0xf4, 0xb4, 0xb8, 0x74, 0xec,
  0xdc, 0x02, 0xa3, 0xb4, 0x47, 0x8f, 0x95, 0x6d, 0xe9, 0x26, 0x82, 0x3c,

  0x4e, 0x39, 0x70, 0xdc, 0x3e, 0xc5, 0xdd, 0x33, 0x75, 0x93, 0x19, 0xd4,
  0x13, 0x29, 0x34, 0x93, 0x3e, 0x1c, 0xdf, 0x9c, 0x5c, 0x37, 0xaf, 0x96,
  0x1b, 0x39, 0x24, 0x8c, 0x11, 0xf8, 0xf7, 0xe5, 0x87, 0xeb, 0x0d, 0x6a,

  0x4e, 0xa6, 0x80, 0xc1, 0x55, 0xad, 0xe9, 0x8c, 0xa9, 0x5f, 0xf5, 0x4b,
  0x71, 0x18, 0xd5, 0x43, 0xf8, 0x94, 0x24, 0x03, 0xc9, 0xcd, 0x40, 0x1f,
  0xcb, 0xee, 0xd6, 0x36, 0xd8, 0x51, 0x5b, 0x3b, 0xd4, 0x70, 0x7a, 0x77,
  0x6b, 0xd7, 0x00, 0x21, 0xe8, 0x53, 0x7e, 0x9b, 0x0a, 0x7e, 0x91, 0x5c,
  0x26, 0x44, 0xf7, 0xbb, 0x0f, 0x0f, 0xf4, 0xe3, 0x7a, 0x79, 0x45, 0xcf,
  0x94, 0x24, 0xba, 0xd3, 0x0c, 0xca, 0x7d, 0x67, 0xbf, 0x29, 0xb2, 0xb7,
  0xcc, 0xb8, 0x00, 0x98, 0x1a, 0x7a, 0x23, 0x6e, 0x48, 0xbf, 0xbd, 0xbb,
  0x95, 0xd3, 0xaa, 0x4f, 0xd0, 0xd1, 0xdc, 0xf6, 0x74, 0x40, 0x2c, 0x2e,
  0xe2, 0x8c, 0xa0, 0x90, 0x78, 0xac, 0x19, 0x9f, 0x11, 0xbc, 0x26, 0xd8,
  0x83, 0x07, 0xbb, 0x43, 0xa6, 0x65, 0xaa, 0x30, 0x00, 0x10, 0x74, 0xc2,
  0x8e, 0x4c, 0x31, 0x4d, 0xc0, 0x09, 0x81, 0xfc, 0xef, 0x00, 0xd3, 0x44,
  0xe0, 0x4e, 0xd0, 0xfe, 0xea, 0x5f, 0x35, 0x8f, 0x8f, 0xff, 0xb5, 0x5b,
  0x97, 0x94, 0xe8, 0x1e, 0xd6, 0x41, 0x0f, 0xe5, 0x2f, 0x9e, 0xaf, 0x92,
  0xfa, 0x0c, 0x93, 0x6e, 0x4c, 0x1d, 0x62, 0x36, 0x6a, 0xfe, 0x13, 0x1a,
  0xc3, 0x4c, 0x4c, 0xb4, 0x14, 0xe9, 0xe0, 0xce, 0x2c, 0xba, 0x49, 0x1b,
  0x35, 0xf9, 0xd0, 0x6f, 0x6b, 0x00, 0xa8, 0x9a, 0xa0, 0x37, 0xbe, 0x26,
  0x58, 0x18, 0xc4, 0x00, 0x47, 0x25, 0xce, 0x17, 0xa1, 0xbb, 0x5b, 0x2a,

  0xf8, 0x03, 0x0a, 0x57, 0xe3, 0x6c, 0x97, 0x39, 0x36, 0xa6, 0x13, 0x1d,
  0x55, 0xd4, 0x0f, 0x9a, 0xfc, 0x60, 0xbe, 0x89, 0x8a, 0x5b, 0xd1, 0xe5,
  0xad, 0xa0, 0x3e, 0xeb, 0xd8, 0x30, 0x47, 0x53, 0x30, 0x6b, 0x33, 0xe5,
  0x40, 0xc8, 0xdc, 0x4d, 0xd4, 0x08, 0x65, 0xd8, 0x0e, 0x35, 0x79, 0x2f,
  0x6a, 0x2c, 0x14, 0xee, 0x21, 0x8a, 0x56, 0x54, 0xfb, 0xa5, 0x1b, 0xf4,
  0x5e, 0x97, 0xfe, 0xb6, 0xbf, 0xf5, 0x8a, 0x4f, 0xf4, 0xf4, 0xe4, 0xfa,
  0x6d, 0xd3, 0x99, 0x57, 0x00, 0x41, 0xf1, 0x7f, 0x7b, 0x49, 0x5c, 0xdc,
  0x80, 0x71, 0x81, 0x50, 0x49, 0x3d, 0xec, 0xbf, 0xd1, 0xdb, 0xda, 0x0a,
  0xe5, 0x6d, 0x7c, 0x42, 0x78, 0x88, 0xdd, 0xbd, 0x7a, 0x48, 0x0f, 0x55,
  0xfa, 0x1e, 0x6e, 0x77, 0x3b, 0x92, 0x6f, 0x9d, 0xbc, 0x62, 0xd5, 0x9d,
  0xe5, 0xf1, 0x5a, 0xc0, 0x3e, 0x89, 0x0c, 0x24, 0x74, 0xd4, 0x04, 0xc2,
  0x74, 0x4c, 0xec, 0xa6, 0x7a, 0x63, 0xb2, 0x93, 0x40, 0xcc, 0x93, 0x4c,
  0xaa, 0x1e, 0x37, 0x22, 0xee, 0x23, 0xc9, 0xed, 0xde, 0x2a, 0x62, 0x00,
  0x64, 0x41, 0x04, 0x0b, 0xe7, 0x4b, 0xa9, 0x1d, 0x2c, 0x12, 0x84, 0x5c,
  0x63, 0xb5, 0x4f, 0xda, 0x66, 0x3d, 0x0d, 0x1b, 0x47, 0x5b, 0x50, 0x8c,
  0x16, 0x52, 0x44, 0xca, 0xff, 0x46, 0x51, 0x5c, 0xcb, 0x9f, 0xdd, 0xd9,
  0x0f, 0x6c, 0x1c, 0x09, 0xec, 0x5f, 0xb9, 0x71, 0x56, 0x39, 0x62, 0xff,
  0x1d, 0x19, 0xbc, 0xa6, 0xd4, 0x2d, 0x90, 0xa9, 0xad, 0x6d, 0x9d, 0x7f,
  0xf1, 0x5a, 0x70, 0xb7, 0xfb, 0xab, 0xc0, 0x27, 0xed, 0x5b, 0xbf, 0x72,

  0x2d, 0x5d, 0xdb, 0xf9, 0x04, 0xa5, 0xc7, 0x5c, 0x1a, 0xbb, 0x91, 0x9f,
  0x81, 0x02, 0x9a, 0x4d, 0x60, 0x98, 0x64, 0x91, 0xd0, 0xe2, 0xdd, 0xbc,
  0x05, 0x87, 0xb8, 0x8d, 0x8d, 0x8a, 0xb6, 0xa2, 0x16, 0x44, 0x82, 0x10,
  0x4d, 0x17, 0x88, 0xf8, 0x51, 0x06, 0xfd, 0x2c, 0x62, 0xe6, 0xb3, 0x1f,
  0x81, 0x36, 0x53, 0x5d, 0xb2, 0x5d, 0x11, 0x63, 0xf2, 0xba, 0xee, 0xb1,


  0xf2, 0x2c, 0x4f, 0x69, 0xbc, 0x8b, 0x67, 0x68, 0xae, 0xd3, 0x18, 0xe6,


  0xb0, 0x72, 0x5b, 0x59, 0xcf, 0x83, 0xe7, 0x2d, 0xe2, 0xdf, 0x9d, 0x47,
  0x66, 0xde, 0xe7, 0x84, 0x47, 0x55, 0x66, 0xbf, 0xbb, 0x7a, 0xfb, 0x17,
  0xb5, 0xbb, 0x37, 0xba, 0x2d, 0x96, 0x70, 0x63, 0xba, 0xc3, 0xc4, 0x49,
  0x04, 0x14, 0x08, 0x88, 0xda, 0xae, 0xf3, 0xbf, 0x6c, 0x96, 0xa5, 0x17,
  0x54, 0xa0, 0xa4, 0x8f, 0x75, 0x0c, 0xb3, 0xc1, 0x73, 0x03, 0x31, 0xe9,
  0x76, 0xfb, 0xfb, 0xe4, 0x0f, 0x79, 0x7b, 0xbc, 0xbf, 0xbb, 0xb3, 0x0d,
  0x56, 0xeb, 0x7a, 0x83, 0x5b, 0x6c, 0x7c, 0xf6, 0xac, 0xdd, 0x36, 0xe7,
  0x9d, 0x3c, 0x2c, 0x90, 0xf6, 0xd6, 0x4f, 0x7e, 0xb8, 0x3c, 0xf7, 0xd6,
  0x08, 0x6b, 0xf2, 0x02, 0xa9, 0x6d, 0x6b, 0xb4, 0xba, 0x40, 0x6d, 0x7c,
  0xcd, 0x3f, 0xa6, 0x86, 0xd5, 0x81, 0x50, 0xe5, 0xdb, 0x22, 0x45, 0x1d,
  0xb7, 0x83, 0x5b, 0xd2, 0x39, 0xcb, 0xb3, 0x31, 0x88, 0xfe, 0x0b, 0x84,
  0xe8, 0x4b, 0x3a, 0xa0, 0xab, 0x3f, 0xb9, 0xba, 0xf6, 0x6b, 0xf2, 0xbe,
  0x4b, 0x57, 0x25, 0xf3, 0x33, 0x5c, 0xde, 0xd3, 0x0f, 0x09, 0x11, 0x19,
  0xc1, 0x4d, 0xb8, 0xc6, 0x64, 0x39, 0x4d, 0xd8, 0xbd, 0x8b, 0xa6, 0x59,
  0xfd, 0xb6, 0x3d, 0x50, 0x43, 0x22, 0xf2, 0xf8, 0x1c, 0x92, 0x43, 0xbb,

  0x2d, 0x16, 0xc2, 0xdc, 0x52, 0xa3, 0x21, 0xec, 0x23, 0x5a, 0x57, 0xb7,
  0xfe, 0x86, 0xd3, 0xd1, 0x9d, 0xc0, 0x3b, 0x39, 0xd6, 0x81, 0x7a, 0x5b,
  0x80, 0xe7, 0xd2, 0x63, 0xd6, 0xae, 0x48, 0xeb, 0x29, 0xf1, 0x74, 0x13,
  0x09, 0x0c, 0xa2, 0x5b, 0xc7, 0x2e, 0x0c, 0xf9, 0xc0, 0x29, 0x83, 0x80,
  0x3a, 0xee, 0xc5, 0x59, 0x1d, 0xe7, 0x15, 0xc1, 0x0c, 0xd8, 0xfa, 0x49,
  0x1e, 0xa8, 0x89, 0x2a, 0xa8, 0x88, 0x2f, 0x76, 0x7d, 0x79, 0x24, 0x4b,
  0x11, 0x78, 0x17, 0x71, 0x33, 0x19, 0x28, 0xea, 0xb7, 0x56, 0xed, 0xed,
  0x06, 0xe3, 0x10, 0xa1, 0x90, 0x14, 0x47, 0x25, 0xc4, 0x3a, 0x6b, 0xc4,
  0x25, 0xdc, 0x38, 0x04, 0xdd, 0x14, 0x8c, 0x44, 0x48, 0x94, 0xc1, 0x37,
  0x54, 0x9c, 0xc8, 0x44, 0x7b, 0x68, 0x62, 0x45, 0x30, 0xa2, 0x69, 0x82,
  0x9a, 0xd0, 0x44, 0x8d, 0xf8, 0xf6, 0x3f, 0x0f, 0x10, 0xdf, 0xf9, 0xc5,

  0xf5, 0xc9, 0x81, 0x40, 0x7c, 0x29, 0x16, 0x8e, 0x9a, 0x09, 0x9c, 0x98,
  0xc6, 0x8d, 0xdc, 0xb9, 0xe6, 0x10, 0x85, 0xac, 0x9e, 0x7a, 0x37, 0x74,
  0xe5, 0x29, 0x47, 0x1c, 0xaf, 0x09, 0x7b, 0x79, 0xab, 0x56, 0x84, 0x5c,
  0x2a, 0xf5, 0x17, 0xcb, 0x80, 0xe9, 0x09, 0xcf, 0xdf, 0x47, 0x46, 0x21,
  0xf8, 0x0c, 0x42, 0xa4, 0x60, 0x79, 0xeb, 0x91, 0x10, 0x8b, 0x32, 0x36,
  0xb8, 0x4c, 0xc2, 0xe2, 0x08, 0xfb, 0xa9, 0xfa, 0x4d, 0x40, 0x29, 0x42,
  0xf7, 0x56, 0x1a, 0xc9, 0x93, 0x3d, 0x62, 0x60, 0x36, 0x57, 0x89, 0x38,
  0x1b, 0x48, 0x6c, 0x5e, 0x2a, 0x31, 0xce, 0xd0, 0x0b, 0xf8, 0x65, 0x2b,
  0xcc, 0x55, 0xe5, 0xdc, 0x27, 0xa5, 0x13, 0xb8, 0x47, 0x6a, 0xa5, 0xa1,
  0x55, 0x69, 0xcc, 0x14, 0xc1, 0xb0, 0xf1, 0xc3, 0xd7, 0xc4, 0x02, 0xeb,
  0x6e, 0x11, 0xd5, 0xd2, 0xba, 0x46, 0x5d, 0xa3, 0xc4, 0x9d, 0x84, 0xca,
  0xb2, 0xd8, 0x00, 0x27, 0x6d, 0xa1, 0x05, 0x89, 0xd5, 0xc5, 0x18, 0x10,

  0xa5, 0x1a, 0x45, 0xdf, 0x08, 0x04, 0xb7, 0x5b, 0x81, 0x40, 0x3a, 0x1f,
  0x59, 0xb3, 0x29, 0x03, 0x3d, 0xc0, 0x47, 0xf6, 0xb7, 0x5a, 0x6c, 0x59,
  0x56, 0x79, 0x07, 0x49, 0x5d, 0xd0, 0xc2, 0x1b, 0xbd, 0x6d, 0xe3, 0x84,
  0x4d, 0xa9, 0xb8, 0x5d, 0xd0, 0xdc, 0x3e, 0x5d, 0x88, 0x69, 0xde, 0x95,
  0x33, 0x5a, 0x99, 0xc7, 0xf8, 0x5e, 0xc3, 0xbe, 0xf8, 0x50, 0x9a, 0x69,
  0x8a, 0x1a, 0x6b, 0x4a, 0x1c, 0xc5, 0x53, 0xd0, 0x5a, 0xb8, 0x99, 0x39,
  0x46, 0xcf, 0x6d, 0xf0, 0xdb, 0x37, 0xe6, 0xd0, 0x49, 0xd1, 0x8f, 0x22,
  0x17, 0x81, 0x4c, 0x4b, 0x8e, 0xe4, 0x60, 0x70, 0xd7, 0xc9, 0xdf, 0x36,

  0xc4, 0xfa, 0xfd, 0xe8, 0x6f, 0xf9, 0x50, 0x9c, 0x30, 0x68, 0x39, 0x86,
  0x90, 0x7c, 0x26, 0x94, 0x3f, 0xbf, 0x04, 0x2a, 0x1b, 0x2f, 0xd9, 0xaf,

  0x8a, 0x13, 0x92, 0x4c, 0x6c, 0x6e, 0xfd, 0x8c, 0x01, 0x8f, 0x68, 0x4a,
  0x38, 0x9a, 0x9c, 0x0a, 0xaa, 0x85, 0xe8, 0x7e, 0xb5, 0xf3, 0x4e, 0x13,
  0xad, 0x25, 0x1e, 0xa1, 0x37, 0x04, 0x06, 0x17, 0x70, 0x04, 0x06, 0xdc,
  0xb3, 0x09, 0xeb, 0xf1, 0xa8, 0x5a, 0xca, 0xc6, 0x37, 0x67, 0x97, 0xab,
  0x97, 0x14, 0xde, 0x25, 0x18, 0x78, 0xca, 0x42, 0x1a, 0x01, 0xe5, 0xc5,
  0xa3, 0x47, 0xd5, 0x17, 0xac, 0x70, 0x15, 0x40, 0x47, 0x0b, 0x1a, 0xef,
  0xd7, 0x78, 0xea, 0x24, 0x30, 0xda, 0x99, 0x96, 0x2d, 0xdd, 0x5a, 0x7e,
  0x53, 0x3b, 0xc5, 0xed, 0xb9, 0xc5, 0x4e, 0x67, 0x05, 0x9e, 0xac, 0x5d,
  0xf5, 0xa4, 0x8a, 0x71, 0x97, 0x57, 0x16, 0xa3, 0x5b, 0x97, 0x80, 0xa9,

  0xac, 0xa1, 0xc8, 0x20, 0xd5, 0x33, 0x62, 0x8d, 0x0d, 0xc5, 0xc1, 0xb5,
  0xe1, 0xd4, 0xa9, 0xaf, 0x47, 0xbc, 0x97, 0xaf, 0x30, 0x3f, 0x5c, 0x27,
  0x66, 0x65, 0x2b, 0x4a, 0x71, 0x98, 0x3d, 0xce, 0x18, 0x8b, 0xf6, 0x3f,
  0xdf, 0xdf, 0xdb, 0xd0, 0xe6, 0xc5, 0x9a, 0x85, 0xb8, 0x11, 0xea, 0x00,
  0x48, 0x37, 0x4e, 0x7a, 0x2a, 0x90, 0x5e, 0x93, 0x62, 0x8f, 0x4c, 0x46,
  0xeb, 0x10, 0xc7, 0x66, 0xca, 0x4d, 0xb3, 0xd0, 0xc5, 0x4e, 0xed, 0xe7,
  0x98, 0x29, 0x7b, 0xf9, 0x03, 0xf8, 0xb1, 0x84, 0x5f, 0x5e, 0x27, 0x0e,
  0x1f, 0x97, 0x96, 0x79, 0xdb, 0xca, 0x20, 0x86, 0xf6, 0x27, 0x25, 0x4d,
  0x53, 0xdf, 0x36, 0xa8, 0x7c, 0x3d, 0x58, 0x56, 0xce, 0xe9, 0xe7, 0xa4,
  0xa9, 0x8a, 0xea, 0x71, 0x83, 0x1d, 0xd9, 0x73, 0x47, 0x2e, 0xb0, 0x6f,
  0x84, 0x6b, 0xbb, 0x58, 0xf0, 0x84, 0x80, 0xaa, 0x09, 0x67, 0xa2, 0xe4,

  0x0c, 0xa9, 0xfa, 0x3e, 0x32, 0xf4, 0x29, 0x81, 0x2f, 0xc8, 0xfb, 0x92,
  0x20, 0x25, 0x67, 0xc2, 0x88, 0xbb, 0x9e, 0x40, 0x9e, 0x6b, 0x77, 0x28,
  0x56, 0x3d, 0xf2, 0xc2, 0x96, 0xe6, 0x72, 0x90, 0x86, 0xc5, 0x25, 0xe5,
  0x0b, 0xb7, 0x01, 0xef, 0xa8, 0x1b, 0x24, 0x56, 0x8c, 0x90, 0xda, 0xcc,
  0x5a, 0xeb, 0x5b, 0x94, 0xda, 0x14, 0x8a, 0xa7, 0x59, 0xd6, 0xa2, 0x7f,
  0x37, 0x54, 0xe9, 0x57, 0xb4, 0xf1, 0x57, 0x1b, 0x1b, 0xd1, 0x32, 0x7b,
  0xb2, 0xa4, 0x18, 0x37, 0x8f, 0x7c, 0x29, 0x7e, 0x73, 0xd8, 0x59, 0xb4,
  0x4e, 0x13, 0xde, 0xdc, 0xdc, 0x78, 0x7a, 0xd2, 0xf2, 0xe4, 0x53, 0x93,
  0xbc, 0x64, 0xc7, 0x86, 0xd3, 0x4e, 0x62, 0xe2, 0xcc, 0x01, 0xbf, 0xe9,
  0xc0, 0x65, 0x74, 0x99, 0x22, 0xc9, 0xc1, 0x9c, 0x21, 0xe6, 0x69, 0xfc,

  0xe8, 0x3b, 0xf1, 0x35, 0x2b, 0x8d, 0x17, 0x58, 0x5f, 0xbb, 0xd6, 0x23,
  0x13, 0x9c, 0x9f, 0xb0, 0x10, 0x4c, 0x8d, 0x22, 0x7c, 0xb5, 0x23, 0x20,

  0x42, 0x5f, 0xdf, 0xb4, 0xd3, 0x72, 0x16, 0x47, 0x26, 0x6e, 0xda, 0x8d,
  0x1c, 0x37, 0x3b, 0xdf, 0x42, 0xf5, 0x41, 0xb0, 0x3b, 0x3e, 0x50, 0x1b,
  0xa1, 0x4f, 0x9b, 0x0c, 0x4b, 0xee, 0xa4, 0xde, 0xf7, 0x10, 0x91, 0xf9,
  0x49, 0xdb, 0xcd, 0x3b, 0xd0, 0x4b, 0xc1, 0x75, 0x91, 0xca, 0x80, 0xc0,
  0x51, 0x6f, 0xed, 0x9a, 0x19, 0x8f, 0x98, 0x3b, 0xb6, 0x4b, 0x43, 0x3e,
  0x1d, 0x0c, 0xa7, 0xeb, 0x31, 0x5e, 0x9a, 0x9b, 0xa1, 0x6f, 0xda, 0x31,

  0x06, 0xe3, 0x19, 0xf2, 0x4f, 0x6b, 0x9b, 0xd9, 0xe5, 0x3b, 0x4a, 0x30,
  0x38, 0x21, 0x5d, 0x9d, 0xba, 0x26, 0xfa, 0x48, 0x0e, 0x66, 0x0f, 0x57,
  0xa6, 0xe0, 0x99, 0x1c, 0x3c, 0xf2, 0xf3, 0x4a, 0x16, 0x9e, 0x2f, 0x67,
  0xd5, 0xd7, 0xa6, 0x83, 0xd6, 0x7d, 0x0d, 0x2f, 0xeb, 0xbe, 0x06, 0x03,
  0x4a, 0x11, 0xd6, 0xd0, 0x38, 0xf9, 0xb2, 0x8c, 0xce, 0xf5, 0xb1, 0x68,
  0x7d, 0x70, 0x79, 0x7e, 0xf2, 0xcd, 0xc5, 0xc6, 0x53, 0x3e, 0xca, 0x3a,
  0xff, 0x37, 0xeb, 0x8a, 0x35, 0x4b, 0x58, 0xa6, 0x4f, 0xd6, 0xc9, 0x37,
  0x83, 0x41, 0xef, 0xe8, 0xf2, 0x94, 0xba, 0x5c, 0x0e, 0xe0, 0xcf, 0x16,
  0x2c, 0xf6, 0x3e, 0xb5, 0x02, 0xe8, 0x7d, 0x27, 0xb5, 0xa3, 0xa5, 0x26,
  0x09, 0x92, 0x07, 0x10, 0x0f, 0x53, 0xd0, 0x13, 0x79, 0x8f, 0x0c, 0xb4,
  0x07, 0x0d, 0xdf, 0x34, 0x79, 0x2e, 0x4f, 0x37, 0xe9, 0x53, 0xf8, 0x49,
  0x5a, 0x50, 0x8b, 0xfb, 0x60, 0xe9, 0x37, 0xb8, 0x44, 0xcd, 0x87, 0x52,
  0x4c, 0x89, 0x41, 0x6b, 0x32, 0x38, 0x58, 0x7e, 0x28, 0x4e, 0x6c, 0xc0,
  0x2e, 0x5c, 0x7a, 0x83, 0xae, 0x30, 0xac, 0xad, 0x50, 0xd0, 0xd4, 0x86,
  0xeb, 0x8d, 0x4c, 0x34, 0x86, 0xc6, 0x9b, 0x21, 0xfc, 0xc8, 0x40, 0xa3,
  0xab, 0x4d, 0xa7, 0xc8, 0x5a, 0x6f, 0x19, 0x45, 0x07, 0x6b, 0xd2, 0x38,
  0x3e, 0xcb, 0x97, 0xd3, 0x1b, 0x36, 0xb0, 0xea, 0x7e, 0x08, 0xe2, 0xe5,
  0x1a, 0x7d, 0x35, 0xbd, 0x1b, 0x60, 0x92, 0x1e, 0x09, 0xd2, 0x3b, 0xaa,
  0xf7, 0x14, 0x09, 0x06, 0x87, 0x58, 0xbd, 0xe1, 0xa4, 0x8b, 0xf1, 0xef,
  0x82, 0x81, 0xbe, 0x42, 0x03, 0x19, 0x72, 0xe0, 0x94, 0xdc, 0x68, 0x59,
  0x35, 0x9b, 0xcb, 0x5f, 0xe3, 0xec, 0x91, 0xdc, 0xa5, 0xe2, 0xbf, 0xa7,
  0xfa, 0x4f, 0x43, 0xd3, 0x75, 0x42, 0xaf, 0x8a, 0x11, 0x19, 0xfa, 0x9c,
  0x82, 0xca, 0x85, 0x9f, 0xab, 0x68, 0x96, 0x7a, 0xda, 0xcf, 0x41, 0x4c,
  0x93, 0x69, 0xd7, 0xcb, 0xba, 0x3a, 0x4a, 0x17, 0xcc, 0x61, 0x09, 0x93,
  0x89, 0x22, 0x2c, 0x44, 0x10, 0x60, 0x45, 0xd4, 0x02, 0x72, 0x3d, 0x1e,
  0x96, 0xf9, 0x6c, 0x59, 0x91, 0x2e, 0x80, 0x4e, 0x51, 0x2c, 0xae, 0xd9,
  0x20, 0xd2, 0x95, 0xf0, 0x25, 0x8c, 0x1a, 0x39, 0x09, 0xa8, 0x51, 0xa8,
  0x0e, 0xc0, 0xb6, 0x27, 0xed, 0xdb, 0x10, 0x00, 0x47, 0x11, 0xc5, 0x3f,
  0x81, 0x3b, 0xcb, 0x63, 0xd1, 0x50, 0x0b, 0x4a, 0x4b, 0xba, 0x53, 0xb0,
  0x37, 0xff, 0xfc, 0xf4, 0xac, 0x6a, 0xbb, 0xa3, 0xde, 0x75, 0x64, 0xdd,
  0xb5, 0x44, 0x75, 0xab, 0x35, 0x86, 0x38, 0x5b, 0x6b, 0xa6, 0xb2, 0x66,
  0x0b, 0x0c, 0xf1, 0x96, 0x0c, 0x1f, 0xcd, 0xc7, 0xf8, 0x3b, 0x31, 0xe5,
  0xf2, 0x18, 0x45, 0xf8, 0xb9, 0xd0, 0x4a, 0xf6, 0x30, 0xfa, 0xab, 0x92,
  0x51, 0xea, 0x5f, 0x6a, 0x0c, 0xfd, 0x5d, 0xc2, 0x79, 0x67, 0x7c, 0xc4,
  0x74, 0x1a, 0xb5, 0x43, 0x66, 0x2d, 0xbf, 0xd9, 0xd4, 0x0e, 0x37, 0xa2,

  0x4f, 0x4f, 0x78, 0x04, 0x8c, 0xa1, 0x74, 0xb3, 0x2a, 0x55, 0x8f, 0xd0,
  0xdf, 0x16, 0x73, 0x3b, 0x4d, 0x7e, 0xd9, 0xf9, 0x86, 0x29, 0x05, 0xca,

  0x57, 0x77, 0xbc, 0xb5, 0xa7, 0xd3, 0x7f, 0xc6, 0x86, 0xd8, 0xf5, 0xdb,
  0x1f, 0x7a, 0x96, 0x9d, 0x89, 0x17, 0x97, 0x04, 0x49, 0x69, 0x16, 0x05,

  0x9c, 0xff, 0xa3, 0xfc, 0x05, 0xef, 0xc0, 0xf7, 0x69, 0x06, 0x9a, 0x61,
  0xb9, 0xa1, 0xc4, 0x99, 0x66, 0x21, 0x18, 0x05, 0xe4, 0x1d, 0x6b, 0x25,
  0x58, 0x62, 0xc0, 0x71, 0x6c, 0xa2, 0x1e, 0x2a, 0xce, 0x1c, 0xb0, 0xf1,
  0x58, 0x91, 0xd3, 0xd8, 0xf4, 0x71, 0xe1, 0xd5, 0xcf, 0x8c, 0x0c, 0xd3,
  0xa1, 0x31, 0x08, 0xbc, 0x18, 0xcc, 0x82, 0x2c, 0x7d, 0xe8, 0x9b, 0xe0,
  0xbe, 0x41, 0x5f, 0x73, 0x83, 0x9b, 0xc0, 0x08, 0x03, 0x3d, 0xed, 0x89,
  0xb3, 0x35, 0x43, 0x58, 0xb8, 0xbb, 0xb4, 0xce, 0xf5, 0xfd, 0x8d, 0x68,
  0x52, 0x2d, 0xd6, 0xb7, 0x37, 0x18, 0xc3, 0x5e, 0x7a, 0xa9, 0xe7, 0x56,
  0xdc, 0xfb, 0x5e, 0x1c, 0xcc, 0x2d, 0x8c, 0x8e, 0xcd, 0x67, 0x29, 0xb8,

  0x89, 0x70, 0x6e, 0x54, 0xc5, 0x37, 0x91, 0x1b, 0xcc, 0x1b, 0x66, 0x1a,
  0x30, 0x53, 0x1a, 0x73, 0x60, 0xef, 0xb8, 0x16, 0x7f, 0x81, 0xc8, 0xae,
  0x54, 0xd9, 0x08, 0x16, 0x84, 0xed, 0x82, 0x2b, 0xbd, 0xc0, 0xa4, 0xf4,
  0x19, 0x76, 0x6e, 0x36, 0xee, 0x21, 0x0f, 0x99, 0x16, 0x39, 0x88, 0xc8,
  0x22, 0x80, 0x7f, 0x29, 0x36, 0xc5, 0x35, 0x55, 0xdf, 0xdc, 0xa5, 0x45,
  0x9e, 0x11, 0xc4, 0xe8, 0x5d, 0x5c, 0xa4, 0x14, 0xe6, 0xef, 0xbc, 0xbb,
  0x78, 0x7f, 0xd2, 0x71, 0x9d, 0x22, 0x93, 0x54, 0xfc, 0xe8, 0x74, 0x7e,
  0x4d, 0x2f, 0xb5, 0x9e, 0x66, 0xc8, 0x69, 0x08, 0x22, 0x7d, 0xc4, 0x6a,

  0x1f, 0x01, 0x31, 0x10, 0x54, 0x5c, 0x62, 0x22, 0xe4, 0xa0, 0x4a, 0x4a,
  0x12, 0x80, 0xf4, 0x55, 0x54, 0x0a, 0xa3, 0x24, 0xa0, 0x50, 0xf7, 0x1b,
  0x35, 0x0d, 0xa9, 0x03, 0x4e, 0xee, 0x76, 0xf6, 0x8b, 0x9c, 0xee, 0x7f,
  0xa8, 0xe6, 0x6b, 0x5b, 0x14, 0xeb, 0x62, 0x6f, 0x8a, 0xc7, 0xf9, 0x23,
  0x5a, 0x36, 0x6b, 0x75, 0x01, 0xb8, 0x56, 0xa2, 0x31, 0x5e, 0xad, 0xe9,
  0xf6, 0x52, 0xba, 0xa8, 0xe5, 0xf1, 0x7e, 0xc7, 0xe5, 0x96, 0xaf, 0x33,
  0x55, 0xf3, 0x27, 0xec, 0xe8, 0x3c, 0xb8, 0xbd, 0x7d, 0x07, 0x7c, 0xfb,
  0x1e, 0xaa, 0x27, 0xf1, 0x91, 0x62, 0x5b, 0x20, 0x56, 0x6f, 0xd6, 0x5c,
  0x8f, 0xd2, 0x63, 0x8f, 0x09, 0xdf, 0xab, 0x08, 0x9f, 0xcf, 0x47, 0x0c,
  0x2b, 0x66, 0xe2, 0xaa, 0x0d, 0xc0, 0x67, 0xd5, 0x92, 0x32, 0xa7, 0x6d,

  0x2b, 0x8d, 0xd6, 0x0a, 0x38, 0x0a, 0x82, 0x9b, 0xd2, 0xa8, 0x14, 0x77,
  0x31, 0x2d, 0x10, 0xc3, 0xc7, 0x46, 0x91, 0xe5, 0x4b, 0x5d, 0xb7, 0x9a,
  0xba, 0x0d, 0x82, 0xd8, 0x26, 0xa3, 0x18, 0xbd, 0x84, 0x31, 0x78, 0x19,
  0xc5, 0xd5, 0xe0, 0xbf, 0x29, 0x92, 0xad, 0xaf, 0x1f, 0x9b, 0x9d, 0x54,

  0xc7, 0x36, 0x55, 0x2c, 0xc1, 0xdf, 0xd8, 0x9c, 0x31, 0x11, 0x7f, 0x46,
  0xe9, 0x20, 0x85, 0x03, 0xdb, 0x8f, 0xc4, 0x94, 0x65, 0x93, 0x84, 0x41,
  0xdb, 0xcc, 0x7d, 0x84, 0xa5, 0x49, 0x23, 0x85, 0x72, 0x59, 0xdc, 0x51,
  0xd5, 0xab, 0xf4, 0xdf, 0xe2, 0xd4, 0x60, 0x7b, 0x1e, 0x72, 0x0e, 0x01,
  0x29, 0xef, 0xcc, 0x10, 0xd3, 0x36, 0x0b, 0x41, 0xc6, 0x8a, 0xbe, 0xe1,
  0x59, 0x98, 0x09, 0x1a, 0x4b, 0x07, 0x01, 0x50, 0x58, 0x8b, 0xf5, 0x92,
  0xf4, 0xf3, 0x92, 0x70, 0x73, 0xab, 0x22, 0x1e, 0xd9, 0xbf, 0xf4, 0xe2,
  0x72, 0x94, 0xa6, 0xda, 0xcf, 0x09, 0xe3, 0x83, 0x09, 0xa6, 0xc3, 0x06,
  0xf1, 0x71, 0xec, 0x79, 0x98, 0x4e, 0x2a, 0xe3, 0x9c, 0xdd, 0xbb, 0x9c,
  0x73, 0x12, 0x73, 0xab, 0x3f, 0xcc, 0x60, 0xa1, 0xd2, 0x38, 0x09, 0x1e,

  0x86, 0x5a, 0x5c, 0x69, 0xa5, 0x4d, 0x8b, 0x69, 0x0b, 0xd6, 0xf7, 0xb6,
  0x6b, 0x7e, 0xeb, 0x26, 0xf4, 0x10, 0xa5, 0xaa, 0xac, 0xd8, 0x94, 0xbc,
  0xbf, 0xdf, 0x71, 0x9f, 0x59, 0x15, 0x0d, 0x6f, 0x80, 0x22, 0x65, 0x79,
  0x2f, 0x9e, 0x2d, 0x82, 0x29, 0x6e, 0x83, 0x8d, 0x5a, 0xc3, 0xcb, 0xa3,

  0xb3, 0xcb, 0x73, 0xc2, 0xcb, 0x43, 0xe4, 0xf4, 0xac, 0xe4, 0x2c, 0x05,
  0xfc, 0x19, 0x26, 0xb0, 0x67, 0x0c, 0x2b, 0x49, 0x49, 0x23, 0x63, 0xbf,

  0xbc, 0x9a, 0x9a, 0x43, 0x90, 0xf9, 0x10, 0xb2, 0xaf, 0x38, 0xbd, 0x2d,
  0x8b, 0x9c, 0x02, 0x47, 0x66, 0xf0, 0x6a, 0x5f, 0x34, 0x97, 0x03, 0x5f,
  0xb5, 0xdf, 0xd6, 0x2e, 0x0b, 0xa6, 0x10, 0xa9, 0xfe, 0xae, 0x01, 0x0c,
  0xcc, 0x23, 0x81, 0x07, 0xf4, 0xf8, 0x79, 0x95, 0x18, 0x6c, 0x42, 0xb1,
  0xeb, 0x0c, 0x16, 0xaa, 0x76, 0xb0, 0xe2, 0x24, 0x0d, 0x02, 0xae, 0xd0,
  0xfa, 0xf8, 0x72, 0x35, 0xa2, 0x01, 0x6c, 0x6c, 0xb6, 0xc8, 0x9a, 0x78,
  0x5b, 0xb2, 0xdd, 0x41, 0x23, 0xd4, 0x03, 0x7f, 0x5b, 0x59, 0x17, 0xa6,
  0x53, 0xc5, 0xc6, 0x59, 0x2b, 0x0e, 0xf8, 0xbc, 0xcb, 0x5f, 0x1d, 0x2e,
  0x91, 0x43, 0x34, 0xbe, 0x20, 0xc7, 0xcb, 0x4a, 0x13, 0x3f, 0x81, 0xdf,
  0x13, 0xf7, 0x17, 0x23, 0x29, 0x61, 0x0d, 0x67, 0x12, 0xcf, 0x41, 0x2d,
  0xc8, 0xb4, 0x50, 0x00, 0x3d, 0xbf, 0x98, 0xcf, 0xd9, 0x9c, 0xf0, 0x32,
  0x16, 0x8e, 0xa5, 0x70, 0xf6, 0xc4, 0x05, 0x1a, 0xf5, 0x03, 0xfc, 0x19,
  0xe4, 0xa4, 0xee, 0xf0, 0xa1, 0x9a, 0x30, 0x7a, 0xdd, 0xe0, 0x1e, 0x48,

  0xdc, 0x46, 0x5b, 0x7f, 0x32, 0x70, 0x38, 0x0f, 0x61, 0xba, 0x7f, 0x63,
  0xe7, 0xaa, 0x9b, 0x65, 0x76, 0x0b, 0x53, 0xf0, 0xcb, 0xa1, 0x35, 0xd9,
  0x17, 0x9b, 0x5f, 0x70, 0xcb, 0x5c, 0xfc, 0x0b, 0xf7, 0x5f, 0x36, 0x23,
  0x20, 0x66, 0xf9, 0x1d, 0x3a, 0xf2, 0x04, 0xc4, 0xdb, 0x51, 0x4e, 0x43,
  0xb3, 0x1b, 0x9b, 0xfb, 0x01, 0xb3, 0x32, 0x1b, 0x18, 0x4c, 0x67, 0xd7,
  0x93, 0xb6, 0xcd, 0xe6, 0x81, 0x1a, 0x1d, 0x91, 0x22, 0x51, 0x6c, 0x05,
  0x90, 0xa2, 0x8a, 0x24, 0x4d, 0xf5, 0xf2, 0xd8, 0xe1, 0x92, 0xc8, 0x1e,

  0x4d, 0x36, 0xfa, 0x26, 0x61, 0xb7, 0x38, 0xdd, 0xa7, 0x02, 0x33, 0xa9,
  0xd7, 0xe6, 0xb7, 0xd1, 0x01, 0x2b, 0x29, 0xe4, 0xc8, 0x02, 0x22, 0xb0,
  0xa5, 0xfc, 0x92, 0x89, 0x62, 0x74, 0x36, 0xec, 0x0b, 0xeb, 0x36, 0xa6,
  0x0c, 0xf0, 0x2d, 0x5b, 0xca, 0x95, 0x64, 0x86, 0xc8, 0xe6, 0x41, 0xe0,
  0xd9, 0x4f, 0xbe, 0x4b, 0x76, 0x21, 0xce, 0x46, 0x99, 0x1f, 0x36, 0x36,
  0x29, 0x7b, 0x16, 0x37, 0x3c, 0xf7, 0x99, 0xe1, 0x79, 0x9d, 0x17, 0xda,
  0x95, 0x7a, 0x75, 0xd4, 0x81, 0x1b, 0xfd, 0x24, 0x0f, 0xc4, 0xe1, 0x31,
  0xc1, 0xfe, 0xf2, 0xdc, 0xaf, 0xf2, 0x16, 0xf7, 0xdf, 0x90, 0xea, 0xb3,
  0x9f, 0xe2, 0x82, 0xc6, 0x74, 0x97, 0x9f, 0xb5, 0xb8, 0xb6, 0x7e, 0x3d,
  0x0b, 0x54, 0x8b, 0x4a, 0x58, 0x9d, 0xcf, 0x01, 0x33, 0x8f, 0x01, 0x0a,
  0xdd, 0x7d, 0x1a, 0x16, 0x88, 0x9f, 0x04, 0x2b, 0x7b, 0x8a, 0x59, 0x29,
  0xe8, 0x06, 0xf4, 0xd8, 0xe0, 0x85, 0xf1, 0x1b, 0x71, 0xad, 0x8d, 0xe9,
  0xb2, 0xa6, 0x6f, 0x45, 0xf4, 0x96, 0xb2, 0x1b, 0xc5, 0xc9, 0x9d, 0x2f,
  0x29, 0x9a, 0xe6, 0xa5, 0x40, 0x5a, 0xca, 0x8f, 0x19, 0xe5, 0x03, 0xeb,
  0xdc, 0xe3, 0x22, 0xe3, 0xfc, 0x98, 0xb1, 0x9b, 0x87, 0x07, 0xcc, 0xd4,
  0x5c, 0x2d, 0x86, 0x9c, 0xeb, 0x95, 0xbe, 0xdf, 0xa8, 0x4c, 0xa9, 0x1e,
  0x36, 0x68, 0xc2, 0xda, 0x8e, 0x6a, 0x5a, 0x2f, 0xb4, 0xe2, 0xde, 0xb8,
  0xd7, 0x46, 0xbc, 0x1b, 0xed, 0x97, 0xa6, 0xbe, 0x65, 0x7c, 0x73, 0x0c,

  0xf9, 0x37, 0x76, 0x86, 0x60, 0x0a, 0x9e, 0x89, 0x45, 0xc7, 0x04, 0x51,
  0x76, 0xcd, 0xc2, 0xea, 0xa0, 0x8d, 0x2f, 0xbd, 0xb3, 0x13, 0x62, 0x4b,
  0xc7, 0x41, 0xf4, 0x0d, 0xbd, 0x94, 0xd2, 0xd0, 0x57, 0x62, 0x4d, 0x78,
  0x8d, 0x14, 0xf6, 0xe7, 0xf4, 0x0d, 0x2c, 0x14, 0xad, 0x0c, 0x6c, 0xef,
  0xfe, 0x35, 0x29, 0x28, 0xa1, 0x6b, 0x49, 0xdd, 0x01, 0x4c, 0x3c, 0x9e,
  0x7c, 0x33, 0x88, 0x6d, 0xea, 0x62, 0xb2, 0x21, 0x48, 0x63, 0xdf, 0xe1,
  0x53, 0x9c, 0x2b, 0x21, 0xdd, 0x83, 0xc2, 0xae, 0x24, 0x34, 0x05, 0xa8,
  0x4e, 0xfa, 0x66, 0x09, 0x94, 0x8a, 0x6a, 0x0a, 0x77, 0xfb, 0xe2, 0xbc,
  0xda, 0x1c, 0xcd, 0x03, 0x62, 0xb7, 0x38, 0x61, 0x67, 0xc6, 0x1e, 0x15,
  0x70, 0x00, 0xa2, 0x4c, 0x80, 0x85, 0x72, 0x8d, 0xd7, 0xb0, 0xc8, 0x6f,
  0x13, 0xe6, 0x17, 0x64, 0x14, 0x12, 0x6a, 0x16, 0xeb, 0xc0, 0xe2, 0x47,
  0x07, 0x09, 0xc5, 0x0d, 0x3d, 0x30, 0xd7, 0xc4, 0x0b, 0x98, 0x73, 0x77,
  0x51, 0x81, 0xdb, 0xb0, 0x72, 0x2c, 0xa5, 0xd7, 0x09, 0xe8, 0x42, 0x7b,
  0x70, 0xf0, 0x55, 0x1b, 0x21, 0x48, 0xdf, 0xef, 0xc8, 0xb3, 0xcd, 0xa9,
  0xbb, 0x3c, 0x3b, 0x70, 0xa4, 0xcf, 0x6f, 0x1a, 0x0a, 0xb4, 0x44, 0xce,
  0xcb, 0xe8, 0x90, 0x19, 0xc2, 0xc3, 0x23, 0x95, 0x80, 0x36, 0x3d, 0x94,

  0xd4, 0xfc, 0xb6, 0xa7, 0xd6, 0xe2, 0xd8, 0xd4, 0x0e, 0x4e, 0xa4, 0xa6,

  0x86, 0x6b, 0x52, 0xc6, 0x16, 0xba, 0x57, 0xda, 0x5f, 0x10, 0xd4, 0x88,
  0x0f, 0x86, 0x8b, 0x2e, 0x4e, 0xe3, 0x7a, 0xe3, 0xf2, 0x65, 0x32, 0x9f,
  0xf0, 0x74, 0x08, 0x6f, 0x29, 0x2d, 0xad, 0x7d, 0xf0, 0x6f, 0x98, 0xc1,
  0x0d, 0xc6, 0x48, 0x85, 0x29, 0x7c, 0xfc, 0x25, 0xcf, 0x5c, 0xe0, 0x46,

  0x90, 0xa6, 0xc6, 0x87, 0x0b, 0xf4, 0x0d, 0x9e, 0x10, 0x42, 0xc7, 0xbb,
  0x5a, 0x1d, 0x77, 0xe6, 0x88, 0x4e, 0xd0, 0xd2, 0x0c, 0x18, 0xf1, 0x8a,
  0x9e, 0x42, 0x6b, 0x4c, 0x05, 0xd5, 0x9f, 0xb3, 0xed, 0xc4, 0x23, 0x12,
  0x6b, 0x1a, 0x9d, 0xe2, 0x92, 0x1a, 0x98, 0xc3, 0x80, 0xa7, 0x05, 0x67,
  0x24, 0xc9, 0x6a, 0xda, 0xac, 0x56, 0x7f, 0x64, 0x7a, 0x40, 0xd6, 0x72,
  0x9d, 0xc8, 0xba, 0x24, 0xb3, 0xe6, 0x3e, 0xd0, 0xc6, 0x91, 0x66, 0x13,
  0xd9, 0x87, 0xba, 0xce, 0xdf, 0x0f, 0x3e, 0xdf, 0xea, 0x8a, 0x39, 0x8a,
  0x01, 0x4a, 0xf7, 0x19, 0x02, 0x14, 0x0e, 0x68, 0x80, 0xf8, 0x1c, 0xfc,
  0xd4, 0x3c, 0xda, 0x82, 0x9e, 0x8f, 0xa9, 0x4a, 0xbb, 0x98, 0xa7, 0x50,
  0x77, 0x56, 0x5b, 0x4f, 0x60, 0xd5, 0xe2, 0xf9, 0x29, 0x43, 0x99, 0xba,
  0x63, 0x47, 0x69, 0x90, 0xc3, 0x38, 0x95, 0x08, 0xf7, 0x1a, 0xf5, 0x8a,
  0x0c, 0xfa, 0x90, 0xf0, 0xb5, 0x80, 0xdf, 0x89, 0x93, 0x0f, 0x85, 0xdc,
  0x4c, 0x0f, 0x4f, 0xea, 0x60, 0xc6, 0xa4, 0x4d, 0xe7, 0x08, 0x17, 0xa6,
  0x43, 0x0d, 0x88, 0x74, 0xca, 0xb0, 0xf7, 0x2b, 0xef, 0xc9, 0xab, 0xfe,
  0x5e, 0xed, 0x9e, 0x54, 0xb3, 0x79, 0xef, 0x7e, 0xf8, 0x44, 0xb8, 0xea,
  0xfa, 0xec, 0x3d, 0xa5, 0xeb, 0x28, 0xbb, 0xa1, 0x2e, 0x3a, 0x1a, 0x39,
  0x40, 0x59, 0xc5, 0xee, 0x5d, 0x44, 0x57, 0xa7, 0x89, 0x04, 0x6c, 0xfa,
  0x46, 0x64, 0xc6, 0x54, 0xfb, 0x8a, 0xa3, 0x46, 0xc0, 0x0a, 0x23, 0x1c,
  0x91, 0x22, 0x10, 0x58, 0xad, 0x3f, 0x4b, 0x83, 0x45, 0x59, 0x9a, 0x15,
  0x9d, 0x3c, 0x24, 0xa3, 0x25, 0xa5, 0x16, 0xa0, 0x62, 0x8f, 0xf8, 0x5f,
  0xab, 0x63, 0x1e, 0x4e, 0x9c, 0x43, 0x22, 0x1b, 0xf0, 0x83, 0xe6, 0x66,
  0xd8, 0x56, 0x6a, 0xb2, 0x78, 0x5e, 0xbd, 0xe7, 0xf1, 0x64, 0x70, 0x02,
  0xfa, 0x5d, 0xfd, 0x57, 0x5e, 0x78, 0x9f, 0x6a, 0x31, 0x50, 0x99, 0x01,
  0x7a, 0x4a, 0xa7, 0x19, 0xab, 0x8b, 0xef, 0xd3, 0x51, 0x91, 0x97, 0xf9,
  0x84, 0xb3, 0x0c, 0x1d, 0xd3, 0xf6, 0xf4, 0x74, 0x10, 0xdd, 0x27, 0x43,
  0x2d, 0x67, 0xee, 0xfb, 0xfe, 0x7f, 0xe6, 0x22, 0x18, 0xd5, 0x2a, 0xd2,
  0xa4, 0xc2, 0x5d, 0xd3, 0x38, 0x36, 0xe2, 0x7b, 0x51, 0x53, 0x41, 0x41,
  0xbf, 0x21, 0xdb, 0x0b, 0xfb, 0xb2, 0xce, 0x48, 0x34, 0x2d, 0x92, 0x3c,
  0x90, 0xcb, 0xc0, 0x13, 0x50, 0xb1, 0xc2, 0x74, 0x42, 0xfa, 0xd7, 0x30,
  0x96, 0x8e, 0x77, 0xec, 0xd5, 0x01, 0xb6, 0x83, 0xda, 0xa5, 0x78, 0xc3,

  0x6e, 0xd1, 0xcd, 0xe9, 0xd5, 0x19, 0x0d, 0x13, 0xec, 0x11, 0x8b, 0xec,
  0xc0, 0x6d, 0x5b, 0x46, 0x1d, 0x5a, 0xc7, 0x79, 0x41, 0xf9, 0x63, 0x4e,
  0x37, 0x2a, 0x6c, 0xdb, 0xba, 0x2c, 0xd0, 0xcd, 0x4f, 0xd0, 0xb3, 0x3e,

  0x3f, 0xbd, 0xbf, 0xc9, 0xb9, 0x77, 0x1f, 0x6d, 0xb3, 0xd5, 0xd9, 0xa8,
  0x28, 0x4b, 0xfa, 0x9d, 0x10, 0x57, 0xb0, 0xf2, 0xc6, 0x3d, 0xa8, 0x20,
  0x4c, 0xa5, 0x9c, 0x87, 0x2d, 0x07, 0x96, 0xfc, 0x92, 0x37, 0xe9, 0xb4,
  0xa5, 0x35, 0x31, 0xbb, 0xfc, 0x08, 0x9a, 0xc3, 0x2a, 0x46, 0x34, 0x23,
  0x11, 0x9a, 0x05, 0xdf, 0x52, 0xaf, 0xe1, 0x36, 0xfe, 0xcb, 0x77, 0x9e,

  0xb7, 0x50, 0xdf, 0xef, 0x1c, 0x06, 0x34, 0xbe, 0x0b, 0x67, 0x2e, 0xe6,

  0x0a, 0x58, 0x8d, 0xdd, 0x51, 0xd9, 0x6d, 0xe4, 0xdc, 0x03, 0x0f, 0x79,
  0x4a, 0x5f, 0x0f, 0x07, 0x59, 0x34, 0x0a, 0x19, 0xc8, 0x25, 0x72, 0x02,
  0xe9, 0xf2, 0xef, 0x31, 0x1d, 0x4f, 0x3d, 0x4a, 0xe9, 0x5e, 0xdd, 0x1c,

  0x7f, 0xb0, 0xd3, 0x1b, 0x26, 0x31, 0x76, 0xc7, 0x3a, 0xac, 0x50, 0x61,
  0x5a, 0x55, 0x55, 0x14, 0x28, 0x2b, 0xfa, 0x9a, 0xdf, 0xbd, 0x26, 0x5d,
  0x0b, 0x8f, 0xf6, 0xe2, 0xe8, 0xc3, 0xf5, 0xbb, 0x68, 0xa7, 0xbf, 0xf5,
  0xac, 0xaa, 0x22, 0x62, 0x08, 0xb5, 0x31, 0xf4, 0xf0, 0xa8, 0xc9, 0x76,
  0xf6, 0xb7, 0x65, 0x56, 0x6f, 0xbe, 0x13, 0x8a, 0xab, 0x88, 0xfe, 0xa4,
  0xe2, 0x17, 0xd3, 0xbc, 0x9a, 0x99, 0xf1, 0x6e, 0x7b, 0xb6, 0x5e, 0x8f,
  0xcc, 0xef, 0xe2, 0xa9, 0x10, 0x74, 0x19, 0x84, 0x56, 0xa9, 0x4d, 0x56,
  0x80, 0x9f, 0x34, 0xd0, 0x4d, 0x8d, 0xb0, 0xd0, 0x72, 0xe1, 0x3b, 0x65,
  0x1a, 0x2b, 0x93, 0x1e, 0x7b, 0xf5, 0xf6, 0xb8, 0x31, 0xdc, 0x8b, 0x97,
  0xfb, 0x5b, 0x9f, 0x30, 0xc1, 0x32, 0x47, 0x0b, 0x42, 0x4c, 0xb2, 0x20,
  0xe2, 0xd1, 0xf7, 0x05, 0x96, 0x1c, 0xab, 0x8f, 0x28, 0x97, 0x87, 0x5c,
  0x48, 0x84, 0xb2, 0x1a, 0x63, 0xa6, 0x9d, 0x41, 0x4c, 0x29, 0x54, 0xdb,
  0xff, 0xc7, 0x3f, 0x7d, 0xb3, 0xee, 0xaf, 0x3f, 0x51, 0x28, 0x87, 0xda,
  0x91, 0x9a, 0x0a, 0x0d, 0x65, 0x32, 0xa5, 0x15, 0xc7, 0x78, 0x9d, 0xd7,
  0xfe, 0xb8, 0x16, 0x99, 0xa6, 0x61, 0x62, 0x98, 0x87, 0x7b, 0x2e, 0x68,
  0xb8, 0x4f, 0x67, 0xa7, 0xc7, 0x4a, 0x90, 0xf2, 0xb1, 0xa3, 0x11, 0xe8,
  0x2e, 0x48, 0x2b, 0xad, 0x71, 0x5b, 0xd3, 0x3f, 0xed, 0x7e, 0x25, 0xd0,
  0x6b, 0x1a, 0xe2, 0xc0, 0x50, 0x04, 0xe7, 0xc5, 0xd1, 0x0a, 0x50, 0x17,
  0xa5, 0xd2, 0xf3, 0x34, 0x6b, 0xf1, 0x3b, 0x4b, 0xf2, 0xd7, 0x3f, 0xe0,
  0x04, 0xba, 0xd5, 0x7d, 0xfe, 0xcf, 0xba, 0x0f, 0x1a, 0x34, 0x0c, 0x9c,
  0xef, 0xc7, 0x3f, 0x6e, 0x63, 0x35, 0x57, 0xa7, 0x39, 0x44, 0x4e, 0xcd,
  0x24, 0xcc, 0xa9, 0x1a, 0x05, 0x69, 0x15, 0xb0, 0xb2, 0x7e, 0x10, 0x0b,
  0xc5, 0xbb, 0xa8, 0x35, 0xfe, 0xb3, 0x8f, 0xff, 0xfd, 0xeb, 0x76, 0x6f,
  0xff, 0x27, 0xf3, 0xd1, 0x3f, 0x6e, 0x7f, 0xfc, 0xe3, 0x4e, 0x27, 0x54,
  0xac, 0x67, 0x61, 0x1b, 0x9c, 0xe4, 0x52, 0x54, 0x68, 0xb3, 0x47, 0xa9,
  0xb0, 0x91, 0xe0, 0xb0, 0x6d, 0x53, 0x4a, 0x4d, 0xcf, 0x03, 0xd8, 0x56,
  0xe8, 0x73, 0xec, 0x37, 0x1d, 0xfd, 0xda, 0xaa, 0x54, 0x99, 0xc3, 0x7d,
  0xce, 0xef, 0x2b, 0xb8, 0x05, 0xde, 0x10, 0xa9, 0xfd, 0xf0, 0x78, 0x21,
  0xc2, 0x68, 0xb9, 0xe4, 0x81, 0x48, 0x37, 0x0a, 0x8f, 0xe2, 0xef, 0x86,
  0xa4, 0xb4, 0x81, 0x3c, 0x8b, 0xa3, 0xc6, 0xa6, 0x0f, 0x87, 0xe6, 0x27,
  0x59, 0xe2, 0x15, 0xd1, 0x69, 0xb9, 0x2d, 0x5b, 0x6f, 0xca, 0x0e, 0x72,
  0x9b, 0x6e, 0xc0, 0xf8, 0x5f, 0x49, 0x24, 0x2b, 0x37, 0x81, 0x53, 0xba,
  0xd2, 0x5e, 0xd6, 0xd8, 0xdf, 0x30, 0x01, 0xc7, 0xf5, 0xcf, 0xb0, 0x54,
  0x81, 0x01, 0xd3, 0xd2, 0x86, 0xce, 0xe8, 0x67, 0x12, 0x36, 0x43, 0x78,
  0x06, 0xea, 0x93, 0x19, 0x2a, 0xae, 0x8e, 0x87, 0xd8, 0x45, 0xb4, 0xd6,
  0x94, 0xcd, 0x74, 0xd8, 0x1a, 0x5a, 0xa4, 0xb0, 0xb8, 0x6c, 0xd9, 0x10,
  0x77, 0x2b, 0x9c, 0x4d, 0x90, 0x8d, 0xa2, 0xcd, 0x59, 0xdd, 0x40, 0xb1,
  0x87, 0x79, 0xbf, 0x55, 0xd2, 0x73, 0xea, 0x99, 0xa9, 0x7e, 0x9a, 0x7e,
  0xaa, 0xc5, 0x8f, 0x23, 0x6e, 0xd0, 0x46, 0x21, 0xd9, 0x9e, 0x17, 0x47,
  0x46, 0x09, 0x35, 0x7e, 0x04, 0x6e, 0xc8, 0xa8, 0xbc, 0x7d, 0x53, 0xb7,
  0xa2, 0x2e, 0x02, 0xe1, 0x36, 0x40, 0x6a, 0x6b, 0xbd, 0xb5, 0x68, 0xdd,
  0x18, 0x76, 0xe3, 0xb8, 0xbc, 0xd9, 0x08, 0x79, 0x90, 0xad, 0xd3, 0xd6,
  0x32, 0x2a, 0xe9, 0xaa, 0x42, 0x22, 0x93, 0x39, 0x54, 0xbb, 0x02, 0x7b,
  0xc1, 0x70, 0x28, 0x98, 0xde, 0xd9, 0x33, 0x39, 0x00, 0xb5, 0x9f, 0xf4,
  0xd0, 0x54, 0x64, 0x58, 0xe5, 0xff, 0xa0, 0x88, 0x98, 0x1f, 0x90, 0xa4,
  0x67, 0x39, 0x43, 0xaf, 0xc7, 0xc5, 0x6b, 0x56, 0x88, 0x6a, 0x1f, 0xf6,
  0x5e, 0x3a, 0x9f, 0x27, 0xe3, 0x40, 0x1a, 0x1b, 0x27, 0x71, 0x8d, 0x39,
  0xfd, 0x5b, 0x9f, 0x76, 0x3c, 0x29, 0x01, 0xf8, 0x01, 0x0d, 0xe0, 0x05,
  0xa1, 0x38, 0xc5, 0xc1, 0x2f, 0xfa, 0xa0, 0xe0, 0xaa, 0x30, 0x8e, 0x09,
  0x86, 0x0a, 0xc9, 0x8d, 0xb6, 0x5c, 0x70, 0x4d, 0xab, 0xdb, 0x07, 0x80,
  0x7b, 0xc6, 0xf7, 0x7c, 0xaf, 0x0e, 0xcc, 0x26, 0x46, 0x49, 0x32, 0x4a,
  0x74, 0x34, 0xaa, 0xde, 0xb8, 0x8f, 0x19, 0xab, 0xca, 0xa2, 0xda, 0x20,
  0xc4, 0x81, 0x75, 0x00, 0x31, 0x9c, 0x4c, 0x73, 0x38, 0xb2, 0x9a, 0x90,
  0xaf, 0x88, 0x04, 0x78, 0x40, 0xe1, 0x45, 0x21, 0x8c, 0x92, 0x1b, 0x41,
  0x73, 0x0d, 0xa6, 0xeb, 0x1c, 0x6f, 0x3d, 0xbb, 0xff, 0xd9, 0x75, 0xf6,

  0x57, 0x8d, 0x10, 0xdd, 0xee, 0x79, 0xfc, 0x50, 0x77, 0x8c, 0x35, 0x90,

  0x69, 0xdd, 0x07, 0x43, 0x27, 0x12, 0x97, 0xb7, 0x9c, 0x7c, 0x30, 0xce,

  0xed, 0xa9, 0x38, 0x87, 0xc2, 0x82, 0xae, 0x3e, 0x07, 0xc1, 0x1c, 0x0a,



  0xa7, 0xd5, 0xa1, 0xdd, 0x5f, 0xe4, 0xb3, 0xb2, 0x06, 0x57, 0x27, 0xe8,

  0x02, 0xc8, 0x6b, 0xcc, 0xc6, 0xf1, 0x37, 0xcb, 0x14, 0xb7, 0x28, 0xce,
  0x02, 0x69, 0xfb, 0x65, 0x20, 0xaa, 0x8a, 0xba, 0x87, 0x76, 0x91, 0x07,
  0x6a, 0x09, 0x68, 0x0e, 0x2d, 0xfb, 0xb6, 0xaa, 0xe5, 0x4b, 0xed, 0xc1,
  0xf6, 0xfc, 0x1c, 0xa9, 0xec, 0x23, 0x8c, 0x08, 0xbb, 0x0c, 0xa6, 0x27,
  0x39, 0x9b, 0x92, 0xb2, 0x4f, 0xe2, 0x82, 0xb7, 0x34, 0x94, 0x63, 0x92,
  0x4c, 0x11, 0x3e, 0x09, 0xb5, 0x42, 0x44, 0x90, 0x00, 0x1e, 0x97, 0x3d,
  0xd1, 0x0e, 0xfd, 0x45, 0xf3, 0x3c, 0xcb, 0x32, 0x3a, 0x5c, 0xdc, 0x14,
  0x60, 0x61, 0xf9, 0xb5, 0xa8, 0x83, 0x77, 0x11, 0x63, 0x0d, 0xc3, 0x53,
  0xfc, 0x8c, 0xe1, 0xc0, 0x0e, 0x1c, 0xeb, 0x27, 0xc4, 0x10, 0xc5, 0x24,
  0xbb, 0x5e, 0x5c, 0xf6, 0x3c, 0xea, 0xb8, 0xb6, 0x20, 0x04, 0x1c, 0x63,
  0xcd, 0xd9, 0xe6, 0xc7, 0xfc, 0x6e, 0x4c, 0x3b, 0xc8, 0x10, 0xa7, 0x0a,
  0xe8, 0x63, 0xb3, 0xdf, 0xdf, 0x44, 0xbd, 0x60, 0x13, 0xfe, 0x48, 0x9d,
  0xa6, 0x4b, 0xcd, 0xce, 0x9e, 0x20, 0x49, 0xf0, 0x5b, 0xe8, 0x66, 0x95,
  0x2e, 0xd8, 0x4e, 0xa7, 0xc4, 0xbf, 0x2f, 0x29, 0x3d, 0xbf, 0x00, 0x8b,
  0xad, 0x60, 0x9c, 0x83, 0x79, 0x43, 0x11, 0xf5, 0xfa, 0x69, 0x72, 0xd8,
  0xb1, 0x14, 0x4c, 0x9d, 0x46, 0x8f, 0x58, 0x74, 0x9d, 0x90, 0x87, 0x13,
  0x17, 0x91, 0x56, 0x8a, 0x64, 0x48, 0x18, 0x13, 0xf1, 0x4a, 0x9f, 0xc9,
  0xde, 0x4e, 0xe3, 0xf8, 0x52, 0x38, 0xf0, 0x31, 0xd8, 0x9f, 0x04, 0x80,
  0x8c, 0x19, 0xca, 0x7e, 0x8d, 0x23, 0x3b, 0xac, 0x25, 0x39, 0xa5, 0x09,
  0xe9, 0x48, 0xf2, 0xc7, 0x2a, 0xf5, 0x4e, 0xeb, 0x4e, 0xa9, 0xc7, 0xf0,
  0x14, 0x52, 0xfe, 0x08, 0xe5, 0x38, 0x4a, 0x05, 0x03, 0x91, 0x43, 0x62,
  0xda, 0x11, 0x09, 0x20, 0x56, 0xcc, 0x19, 0x92, 0x64, 0x20, 0x4b, 0xca,
  0x54, 0xc8, 0xb3, 0x68, 0xfc, 0x7a, 0x46, 0x68, 0x39, 0x53, 0x80, 0x35,
  0x23, 0x86, 0x34, 0xec, 0xfc, 0x9b, 0x93, 0x2b, 0xb1, 0x02, 0x08, 0x36,
  0xc3, 0x36, 0x7e, 0xf7, 0x40, 0xcb, 0xc9, 0x59, 0xf0, 0x62, 0x8f, 0x4c,
  0x7a, 0xdc, 0xb7, 0xf2, 0x26, 0xde, 0xd9, 0x7f, 0x21, 0xd3, 0x56, 0x44,
  0x41, 0xf2, 0x45, 0xac, 0xf1, 0xaf, 0x36, 0x37, 0x39, 0x99, 0x08, 0x1d,
  0x40, 0x9e, 0xec, 0x25, 0x5f, 0x2c, 0x3e, 0xfb, 0xc5, 0x5a, 0x38, 0x8d,
  0x58, 0xad, 0x43, 0x6d, 0x3f, 0x4e, 0xfd, 0x0f, 0x29, 0xdd, 0xd9, 0x6d,
  0x5e, 0xd3, 0xad, 0xb5, 0x26, 0xa4, 0xda, 0xbe, 0x78, 0x45, 0x4f, 0x17,
  0xc1, 0xe0, 0xa1, 0xe6, 0xc9, 0xc0, 0x1d, 0xb4, 0x56, 0x1f, 0xb1, 0x8d,
  0x9d, 0xdd, 0xe1, 0x0c, 0x61, 0x6c, 0x7a, 0x3f, 0xf2, 0x81, 0x9e, 0xb8,
  0x06, 0x8e, 0xa8, 0xce, 0x1d, 0x59, 0x92, 0xe3, 0x53, 0x8e, 0xeb, 0x10,
  0xe5, 0x69, 0x50, 0x9a, 0xdd, 0x9e, 0x74, 0x98, 0xcb, 0xa1, 0x97, 0xc5,
  0x25, 0xdf, 0x34, 0x58, 0xc4, 0xe4, 0x35, 0x73, 0x72, 0xa7, 0xed, 0x75,
  0x01, 0x8d, 0xab, 0xe0, 0xe8, 0xb8, 0xb3, 0x01, 0x9e, 0x77, 0x86, 0xb0,
  0xef, 0x15, 0x62, 0x8a, 0x92, 0x67, 0x47, 0x49, 0xca, 0xe0, 0x74, 0x70,
  0xb6, 0x18, 0x15, 0xf7, 0xee, 0x01, 0x90, 0xc2, 0x26, 0xd2, 0x81, 0x18,
  0xf4, 0x5e, 0x93, 0x19, 0x8c, 0xc1, 0xbd, 0xea, 0x6f, 0x1d, 0x28, 0x6c,
  0x75, 0x37, 0xfa, 0x26, 0x5b, 0xe2, 0x79, 0xe0, 0xa2, 0xbf, 0x19, 0x7c,
  0xeb, 0x15, 0xa0, 0xe2, 0x1b, 0x7b, 0xbb, 0xf8, 0xc6, 0xf9, 0x80, 0x9f,

  0xba, 0xcf, 0x67, 0x13, 0x78, 0x33, 0xf4, 0xdc, 0x4b, 0x7c, 0x0e, 0x28,


  0x6e, 0x5c, 0xcd, 0x4a, 0x25, 0xaa, 0x15, 0x33, 0xd9, 0xdb, 0x0b, 0xcc,
  0xa4, 0xfb, 0x8b, 0x3f, 0x74, 0x41, 0x72, 0x1d, 0x89, 0x09, 0x7b, 0xb3,
  0x11, 0xe1, 0x50, 0x69, 0x8e, 0x01, 0x61, 0xff, 0x94, 0xcc, 0x97, 0xc1,
  0x54, 0x9e, 0xd3, 0xb9, 0xb1, 0x20, 0x2c, 0xc9, 0x8a, 0x30, 0x3a, 0x5e,
  0xee, 0xec, 0x6e, 0x6f, 0xbe, 0xe8, 0xef, 0xf5, 0x77, 0x4c, 0xaa, 0x2c,
  0xd0, 0xc1, 0x1d, 0x76, 0x16, 0xc2, 0xcc, 0xa4, 0x40, 0x48, 0x88, 0x92,
  0xc4, 0xd2, 0x0c, 0xc6, 0x71, 0xa0, 0x63, 0xa4, 0x03, 0x84, 0x4d, 0x92,
  0x43, 0xa0, 0x98, 0x6d, 0xb7, 0xe6, 0xb2, 0x1f, 0xe8, 0x64, 0x8c, 0xf8,
  0x33, 0x54, 0x2c, 0x26, 0xfe, 0x3f, 0xac, 0x1a, 0xa0, 0x50, 0xf5, 0x30,
  0xfd, 0xfb, 0x32, 0xad, 0x40, 0x0b, 0x40, 0xa6, 0x82, 0x5e, 0x4d, 0x6d,
  0x45, 0x41, 0x76, 0x03, 0xad, 0x03, 0x6f, 0x44, 0xc0, 0x5d, 0xcc, 0x93,
  0xa7, 0x9a, 0x04, 0x1b, 0x5c, 0xe7, 0xba, 0xce, 0x94, 0x78, 0x57, 0xc4,
  0x2d, 0xa0, 0xc0, 0xbe, 0xcf, 0x46, 0xd4, 0x59, 0x14, 0xcc, 0xef, 0x3b,
  0x0a, 0xa5, 0x78, 0x1d, 0x9f, 0xa5, 0x03, 0x14, 0x41, 0xb1, 0x68, 0x30,
  0x4c, 0x33, 0xb6, 0x6c, 0xbf, 0x08, 0xf9, 0x01, 0xd7, 0x80, 0xb1, 0x57,
  0x90, 0xd6, 0xed, 0x71, 0x27, 0xbb, 0x0f, 0xb5, 0x13, 0x97, 0x4e, 0x0b,
  0x58, 0x83, 0xc9, 0x41, 0x1f, 0x86, 0xc7, 0x24, 0x16, 0x85, 0xc5, 0xb4,
  0x2b, 0x90, 0x9e, 0x9e, 0xf0, 0xd0, 0x09, 0xa6, 0x4e, 0x1d, 0x54, 0x87,
  0xff, 0xd5, 0xe8, 0x3f, 0xde, 0xda, 0x7a, 0xb6, 0xd9, 0xa0, 0x59, 0xc6,
  0xfc, 0xd5, 0x54, 0xb6, 0xfb, 0xdb, 0x53, 0xd9, 0xce, 0x73, 0xa9, 0xcc,
  0x12, 0x19, 0xde, 0xb3, 0x15, 0x24, 0x46, 0x08, 0x82, 0x2c, 0x7a, 0x5b,
  0xa8, 0xcc, 0x25, 0x33, 0xc9, 0x67, 0xf3, 0x09, 0xad, 0x46, 0x67, 0x86,
  0xcc, 0x5a, 0xa8, 0x8c, 0x71, 0xf7, 0x98, 0xc6, 0x56, 0x93, 0x98, 0x42,
  0x3c, 0x44, 0xab, 0xa9, 0xac, 0x1e, 0x98, 0x5a, 0x4d, 0x67, 0x96, 0x1c,
  0x9e, 0x4d, 0x65, 0xda, 0xe9, 0x8b, 0xb9, 0x4e, 0x0b, 0x89, 0xd5, 0x68,
  0x4c, 0x88, 0x2c, 0x48, 0x65, 0xaf, 0x42, 0x54, 0xb6, 0xfb, 0x1c, 0x2a,
  0x83, 0x03, 0x9d, 0xa1, 0xa8, 0xac, 0x51, 0xd9, 0xde, 0x6f, 0x4b, 0x65,
  0x88, 0xfb, 0xd5, 0xac, 0x1f, 0x8f, 0x8e, 0xfe, 0xd5, 0x73, 0x8c, 0x69,
  0x58, 0x1d, 0xd5, 0x2b, 0xab, 0xfe, 0x65, 0x9c, 0xa2, 0x71, 0xa1, 0x9f,
  0x3c, 0xb1, 0x3a, 0xd2, 0xd6, 0xf6, 0x2f, 0x3e, 0xb1, 0x9d, 0xa6, 0x65,
  0x52, 0x24, 0x1c, 0xcb, 0xf8, 0xab, 0xc6, 0x94, 0x0e, 0x36, 0x37, 0x7f,
  0x22, 0xdf, 0xdc, 0x01, 0xca, 0xbe, 0x9f, 0x9a, 0x2a, 0x7c, 0x48, 0x9d,
  0x1d, 0x5c, 0x1c, 0x7f, 0x3b, 0x90, 0x98, 0x88, 0xe8, 0x1c, 0xaa, 0x93,
  0xb0, 0x0d, 0x0e, 0xba, 0x2a, 0x21, 0x22, 0x78, 0x6a, 0x2e, 0xb7, 0x87,
  0xee, 0x3d, 0x74, 0x35, 0x30, 0x41, 0xa9, 0x88, 0xc2, 0x8c, 0x09, 0xf8,
  0x51, 0xb0, 0x06, 0x38, 0xe6, 0x21, 0xa3, 0x96, 0x51, 0x8b, 0xa1, 0xc6,
  0x13, 0x91, 0x99, 0x18, 0x97, 0x58, 0xe6, 0xbc, 0xb8, 0x5e, 0xdd, 0x14,
  0x54, 0xec, 0x45, 0x8f, 0x6e, 0x68, 0x58, 0x72, 0xd5, 0xec, 0x64, 0x5e,
  0xef, 0x08, 0x20, 0x7b, 0x51, 0x68, 0xa4, 0x37, 0x64, 0xe4, 0x9a, 0xdf,
  0xaa, 0x87, 0x36, 0x04, 0x04, 0x23, 0x80, 0x8f, 0xce, 0x7e, 0xe3, 0x7b,
  0x5e, 0x5a, 0x6d, 0xfa, 0x50, 0xc3, 0x9d, 0x42, 0xf1, 0x40, 0x7d, 0xd5,
  0x2b, 0x6d, 0x5d, 0xf4, 0xc0, 0x8d, 0x66, 0x68, 0x10, 0x4e, 0x6a, 0x4c,
  0xa8, 0x39, 0x50, 0xb9, 0x07, 0x43, 0x36, 0xfd, 0x7d, 0xfc, 0x8b, 0x18,
  0x7f, 0xc3, 0x7f, 0xdf, 0xc7, 0xef, 0x52, 0xe0, 0x8e, 0xfe, 0x75, 0x83,



  0xff, 0x94, 0x9c, 0x15, 0xc6, 0x94, 0xab, 0x9d, 0xf2, 0x28, 0xbc, 0xd1,
  0x6e, 0x15, 0xa1, 0xc1, 0x3b, 0x39, 0xcf, 0x6d, 0x9d, 0xad, 0xbb, 0x6a,
  0x17, 0x9a, 0xd2, 0x4b, 0x05, 0x33, 0x5c, 0x98, 0x46, 0xde, 0x0b, 0x2b,
  0x5c, 0x89, 0x0b, 0x3c, 0xab, 0x48, 0x22, 0x6e, 0x3b, 0x41, 0x1b, 0x88,
  0x97, 0x03, 0xe0, 0xe6, 0xbb, 0x01, 0x64, 0x78, 0x6e, 0x96, 0x23, 0xf3,
  0xde, 0xde, 0xfa, 0xdc, 0x77, 0x49, 0x7c, 0xd0, 0x2a, 0x57, 0x8b, 0xbe,
  0x4a, 0xe9, 0x36, 0x54, 0x6f, 0x32, 0xb4, 0xb5, 0x5d, 0xa1, 0xcf, 0x06,
  0x0a, 0x61, 0xd1, 0xf6, 0x1d, 0x27, 0x6c, 0x2c, 0x0d, 0xd9, 0xee, 0xf5,
  0xeb, 0x0c, 0xa8, 0xae, 0xbf, 0x24, 0xc9, 0x26, 0xa8, 0xe1, 0x91, 0x24,
  0x8d, 0x78, 0xfc, 0x1d, 0xbd, 0x18, 0x1a, 0xca, 0xfc, 0xca, 0x62, 0x3b,
  0xfe, 0x69, 0x6f, 0x0b, 0x4f, 0x55, 0x47, 0xc1, 0x86, 0x59, 0x33, 0x0d,
  0x41, 0xfd, 0x69, 0x37, 0xee, 0xff, 0x8e, 0xd8, 0x6c, 0xfb, 0x75, 0x2b,
  0xfa, 0x8f, 0x5d, 0x37, 0xef, 0x6c, 0x18, 0x17, 0x01, 0x9f, 0x8d, 0x68,
  0x88, 0x8a, 0x3b, 0xa4, 0xa8, 0x3d, 0x26, 0x21, 0x2d, 0x66, 0x03, 0x96,
  0xea, 0x63, 0xcc, 0x0f, 0x61, 0xa8, 0xc8, 0xef, 0x40, 0x63, 0xe2, 0x40,
  0x6e, 0x33, 0xf9, 0x2e, 0x7b, 0x16, 0x6b, 0x49, 0x7a, 0x5d, 0x4e, 0x73,
  0x0b, 0x57, 0xce, 0xd5, 0x3e, 0x32, 0x2e, 0xe2, 0x7b, 0xc7, 0x82, 0xe6,
  0x6e, 0x15, 0x13, 0x8e, 0x07, 0x99, 0xd4, 0x1e, 0x2c, 0xa3, 0xc0, 0x48,
  0x7f, 0x48, 0xfb, 0x28, 0x47, 0x45, 0x22, 0x91, 0x37, 0x84, 0x3e, 0xa5,
  0xa8, 0x3e, 0x22, 0x86, 0x82, 0xda, 0x31, 0x4d, 0xb4, 0x9a, 0xda, 0xac,
  0x5a, 0xe1, 0x72, 0x08, 0x23, 0xa7, 0x1f, 0x28, 0x54, 0xb0, 0xee, 0x2c,
  0xcd, 0x5a, 0x8c, 0x05, 0x50, 0x07, 0x5f, 0xd5, 0xba, 0x76, 0xd3, 0xb5,
  0x06, 0x2f, 0x33, 0x36, 0xb6, 0x84, 0x6f, 0xa7, 0x8b, 0xa6, 0x88, 0xee,
  0xbd, 0xce, 0x5f, 0xf7, 0x36, 0x0c, 0x88, 0x61, 0x7e, 0x97, 0x94, 0xdc,
  0xa7, 0x1a, 0x27, 0x8b, 0x79, 0x00, 0x37, 0xe4, 0x64, 0x11, 0xf1, 0x45,
  0x45, 0xdc, 0x94, 0x94, 0x2d, 0x50, 0x75, 0x5e, 0xcb, 0x25, 0x9e, 0x59,
  0x81, 0x09, 0x00, 0xc2, 0xef, 0xd0, 0x1d, 0x03, 0xbb, 0x35, 0xe1, 0x9c,
  0x4f, 0x2a, 0xf3, 0xc6, 0xec, 0x08, 0xc1, 0x56, 0xe7, 0x58, 0x4b, 0xbe,


  0xa8, 0xcb, 0x26, 0x44, 0x0c, 0x50, 0xde, 0x70, 0xa8, 0x4c, 0xe5, 0xcb,
  0x27, 0xeb, 0x81, 0x0c, 0xfb, 0x99, 0x88, 0x13, 0x03, 0x2f, 0x1f, 0xd5,
  0x87, 0x31, 0x2a, 0xfb, 0xe8, 0x26, 0x99, 0x4b, 0x6b, 0xaa, 0x16, 0x74,

  0x85, 0x56, 0x28, 0x82, 0xfa, 0x9c, 0x38, 0x61, 0x76, 0x52, 0x2d, 0xfa,

  0xf3, 0xfc, 0x67, 0xd8, 0xe6, 0x18, 0x7b, 0x5d, 0x7a, 0x57, 0x02, 0x64,
  0x7d, 0xc6, 0xe7, 0x82, 0xa1, 0xb3, 0xcc, 0x58, 0x95, 0x91, 0x83, 0x2f,
  0x29, 0xd8, 0xf9, 0x8c, 0x82, 0x11, 0x45, 0xc7, 0x30, 0xe3, 0x93, 0x8f,
  0x1f, 0xce, 0x07, 0x1f, 0x2e, 0x9b, 0x84, 0x7d, 0x79, 0x71, 0x75, 0x7d,
  0xf2, 0xe6, 0xe3, 0xe5, 0xd5, 0xc5, 0xf5, 0xc5, 0xf1, 0xc5, 0x59, 0xb4,
  0xbe, 0xbd, 0xb1, 0xb2, 0xea, 0xd3, 0x78, 0x20, 0x1c, 0xfc, 0x50, 0x9d,
  0x3f, 0xf3, 0x2c, 0x33, 0x8b, 0x75, 0x5c, 0x8f, 0x3f, 0xda, 0xf7, 0x42,
  0x5d, 0xf5, 0xbe, 0x2b, 0xec, 0x8a, 0x20, 0xf1, 0x46, 0x6c, 0x3d, 0x8e,

  0xa6, 0x4b, 0xbe, 0x29, 0x36, 0x8b, 0x84, 0xd1, 0x73, 0x3d, 0x85, 0x4b,
  0xe3, 0xd8, 0x4e, 0xc1, 0xe0, 0x4a, 0x77, 0xdc, 0x7e, 0x53, 0x67, 0xc1,
  0x33, 0x20, 0x05, 0xcc, 0x52, 0x45, 0xb9, 0x9a, 0x2c, 0x18, 0x65, 0x88,
  0xa0, 0xe9, 0xcd, 0x1b, 0xd4, 0xb7, 0x43, 0x22, 0x8b, 0x79, 0x66, 0x34,
  0x3a, 0x10, 0xa5, 0x97, 0x7e, 0xff, 0x36, 0x79, 0x05, 0xe6, 0x9b, 0x49,
  0x17, 0x61, 0x99, 0x08, 0x45, 0x96, 0xa9, 0x3d, 0x11, 0x27, 0x3a, 0xc0,
  0x03, 0xf8, 0x5b, 0x87, 0xab, 0x52, 0xb5, 0xa4, 0x17, 0xad, 0xe7, 0x97,
  0x19, 0x81, 0xe7, 0xde, 0x99, 0x14, 0x0e, 0x87, 0x4a, 0x19, 0xe1, 0x83,
  0x06, 0x38, 0xec, 0x89, 0x06, 0x2d, 0x19, 0x3d, 0x88, 0x6e, 0x24, 0xa9,
  0x2f, 0x8a, 0x3b, 0x35, 0x70, 0x17, 0xf3, 0x04, 0x21, 0xf3, 0x26, 0x62,

  0x14, 0xa9, 0x8b, 0x67, 0xdf, 0x65, 0x82, 0x96, 0x68, 0xed, 0x8a, 0xa2,
  0x23, 0x0b, 0xe2, 0xe4, 0xba, 0xa4, 0x68, 0x42, 0x5c, 0x54, 0x4a, 0x13,
  0xe9, 0x1a, 0x3c, 0xac, 0xb7, 0x8d, 0x69, 0x35, 0xd9, 0xcf, 0xcb, 0xfe,
  0x8b, 0xfd, 0xfe, 0x0e, 0x82, 0xb9, 0x5c, 0xcc, 0x30, 0xbe, 0x29, 0x8a,
  0x05, 0x39, 0x97, 0xe9, 0x03, 0x82, 0x5c, 0x45, 0xa9, 0x91, 0x76, 0xaf,
  0x64, 0xc4, 0x90, 0x2d, 0xa5, 0x35, 0xe6, 0x2a, 0xc9, 0x14, 0xee, 0x43,
  0x3a, 0x4d, 0x0b, 0xda, 0x39, 0x82, 0x05, 0xc1, 0x67, 0x0e, 0x6c, 0x76,
  0x20, 0xe6, 0xcb, 0x35, 0x79, 0xed, 0xa9, 0xe9, 0xc5, 0x38, 0x38, 0xbe,
  0x14, 0x50, 0x0e, 0x0b, 0x1f, 0x42, 0xec, 0x5c, 0xdb, 0xa9, 0x6f, 0xf5,
  0xb7, 0xa2, 0xc1, 0xfb, 0xaf, 0x05, 0xb9, 0xf5, 0xeb, 0x41, 0x40, 0x13,
  0x20, 0x7d, 0x5e, 0x5f, 0xef, 0xbb, 0x41, 0x46, 0x5c, 0x1c, 0xcc, 0xee,
  0xcf, 0xf8, 0xa7, 0x16, 0x56, 0x50, 0xe6, 0xb2, 0x5d, 0x71, 0xe4, 0x39,
  0xf9, 0x74, 0x4b, 0xbb, 0x0e, 0xba, 0x07, 0xdc, 0x57, 0x44, 0xc8, 0x0d,
  0x2d, 0xb9, 0xbf, 0x1a, 0x21, 0x70, 0xc7, 0xbb, 0x68, 0x4f, 0x5e, 0x31,
  0xeb, 0xec, 0x7e, 0xea, 0x92, 0x89, 0xa6, 0xa4, 0xd2, 0xa1, 0x29, 0xd3,
  0x2e, 0x6b, 0x77, 0x20, 0xc1, 0xaa, 0x42, 0x72, 0x0c, 0xcf, 0x92, 0x09,
  0xa9, 0x86, 0x54, 0xea, 0xdb, 0xa5, 0x5f, 0x52, 0xa4, 0xd9, 0x24, 0x13,
  0x86, 0xe1, 0xe2, 0xe8, 0x98, 0xa8, 0x0a, 0xd3, 0xd1, 0xb6, 0x0d, 0xbc,

  0xe4, 0x1a, 0x6c, 0x2c, 0xf6, 0x25, 0x93, 0x7a, 0xf3, 0xd9, 0x23, 0x85,
  0x21, 0xd3, 0x07, 0xbe, 0xdb, 0x3f, 0x27, 0x45, 0xee, 0xa7, 0x3d, 0x90,
  0xf2, 0xa0, 0x20, 0x7f, 0xa0, 0x72, 0x1f, 0x29, 0x0a, 0x91, 0xfd, 0x21,



  0x7e, 0xd5, 0xbb, 0x73, 0x7f, 0xa6, 0x96, 0xd8, 0x0c, 0xda, 0xcd, 0x4a,
  0x85, 0xa0, 0xd0, 0x10, 0xa0, 0x66, 0xaa, 0xc1, 0x6a, 0x87, 0x07, 0xcc,
  0xb0, 0x36, 0xf9, 0x91, 0xcb, 0x9a, 0x3d, 0x13, 0x93, 0xd4, 0xbf, 0x31,
  0x9a, 0x32, 0x36, 0x2b, 0xdb, 0x84, 0xd7, 0xb0, 0xfd, 0x9c, 0x05, 0x22,
  0x14, 0x7d, 0xce, 0xe7, 0xe9, 0xbd, 0x28, 0x7a, 0x93, 0x64, 0x8f, 0xca,
  0xd3, 0x6d, 0x42, 0x21, 0xc1, 0x09, 0xdd, 0xb1, 0x4f, 0xdc, 0x22, 0x5e,
  0x50, 0xea, 0x29, 0xdc, 0x45, 0x33, 0x45, 0x7f, 0x4a, 0xf5, 0x39, 0x87,
  0x38, 0xd7, 0x6b, 0xb3, 0x0d, 0xc4, 0xb4, 0xea, 0x7b, 0xb1, 0x4e, 0xa0,
  0x35, 0x1a, 0x6a, 0xa7, 0xef, 0xe9, 0x88, 0x2b, 0xb7, 0x61, 0x83, 0xe2,
  0x9a, 0x64, 0xd2, 0x95, 0xcb, 0xe1, 0xdf, 0xb8, 0xfb, 0x41, 0x84, 0xae,
  0x85, 0x42, 0xb6, 0x41, 0x12, 0x50, 0xe1, 0x54, 0xe1, 0x01, 0x0e, 0x5b,
  0x01, 0x77, 0xc8, 0x42, 0xc3, 0x51, 0x12, 0x80, 0xb6, 0x1d, 0xa8, 0x93,
  0x18, 0x4d, 0x29, 0x58, 0x2f, 0x9a, 0xb4, 0xa8, 0x0c, 0x7a, 0x7f, 0x7a,
  0x13, 0xe4, 0xa9, 0x9c, 0xd7, 0xd8, 0x10, 0xbe, 0xbc, 0x97, 0x9c, 0x4b,

  0x6b, 0x32, 0xbb, 0xf1, 0xf1, 0xd6, 0xb1, 0x94, 0x53, 0x97, 0xdd, 0x3f,
  0xe3, 0x1f, 0xfe, 0x1a, 0x6a, 0x24, 0x8b, 0xdb, 0xac, 0x8c, 0x04, 0x1f,
  0x27, 0xb6, 0x44, 0xaf, 0xb7, 0x7d, 0xe0, 0xb5, 0x15, 0x03, 0xab, 0xc7,
  0x26, 0x2e, 0xf6, 0x9c, 0x0f, 0x7c, 0xc8, 0x14, 0xe4, 0x51, 0xa9, 0x7b,
  0x61, 0xba, 0x4e, 0x48, 0xe5, 0x4c, 0xdd, 0x10, 0x42, 0x6c, 0xa0, 0x85,
  0x74, 0xa4, 0x89, 0x27, 0x98, 0xf4, 0x5e, 0x24, 0x16, 0x24, 0x1b, 0x4f,
  0x92, 0x21, 0xc0, 0x04, 0x75, 0x5f, 0x73, 0xb0, 0x17, 0x79, 0xc5, 0xf8,
  0xff, 0x98, 0x25, 0x8f, 0x9a, 0x4e, 0x81, 0x3e, 0x42, 0x67, 0x93, 0x55,
  0x49, 0xc6, 0xd1, 0xcc, 0xe1, 0x73, 0xc2, 0x01, 0x46, 0x0b, 0x25, 0x7f,
  0x91, 0x23, 0xaf, 0x0e, 0x07, 0x93, 0xcf, 0x71, 0xa2, 0x23, 0xb9, 0x9c,

  0x6c, 0x70, 0x2f, 0xbe, 0xcb, 0x53, 0xcc, 0x96, 0x33, 0x3c, 0x99, 0xd4,
  0x37, 0x4b, 0x25, 0xd7, 0xe1, 0x0e, 0x36, 0x36, 0xc5, 0x4c, 0xec, 0x2b,
  0xf4, 0x64, 0x52, 0x06, 0x20, 0xb9, 0x3c, 0x9c, 0x8a, 0x48, 0xbe, 0xdd,
  0x3a, 0x1c, 0xe5, 0x21, 0x51, 0xb8, 0x3a, 0xc3, 0x30, 0x53, 0xc6, 0xb1,
  0x2b, 0x31, 0x3e, 0x95, 0xdd, 0xe2, 0x0c, 0xd1, 0x4c, 0xc3, 0x3c, 0x8c,


  0x18, 0xa5, 0x92, 0x56, 0x7c, 0x36, 0x40, 0xfe, 0x5d, 0xd7, 0x92, 0xa3,
  0x0b, 0x98, 0x74, 0x69, 0xab, 0xe6, 0xf6, 0x9f, 0x90, 0x11, 0x0f, 0x8f,
  0x9a, 0xa0, 0xb9, 0x52, 0x05, 0x5b, 0x10, 0xda, 0x01, 0x6c, 0x74, 0x5a,
  0xd1, 0x81, 0x35, 0x12, 0xc4, 0x35, 0x6f, 0x5a, 0xfc, 0x35, 0xf3, 0xf9,
  0xd2, 0x6f, 0x2a, 0x2a, 0xd1, 0x3a, 0x41, 0x2f, 0xa8, 0x6c, 0xb7, 0x38,

  0x52, 0x80, 0xc4, 0x51, 0xc3, 0x8d, 0x4f, 0x9c, 0x5e, 0x30, 0x98, 0x87,
  0x8f, 0xf1, 0xbb, 0xb0, 0x1f, 0x71, 0xd3, 0xa0, 0x5d, 0x01, 0xc1, 0x64,

  0xe3, 0x1e, 0x30, 0x81, 0xc5, 0x0a, 0x3f, 0x9c, 0x75, 0x55, 0xd5, 0x32,
  0xcb, 0x5d, 0x78, 0x1d, 0xfe, 0x09, 0x27, 0xb0, 0xca, 0xde, 0xf9, 0x95,
  0x19, 0xa0, 0x69, 0xec, 0x86, 0x76, 0x32, 0x94, 0x21, 0xdb, 0x94, 0xb3,
  0xb8, 0xa8, 0xd6, 0x6e, 0x28, 0xbc, 0x83, 0xb4, 0x81, 0xba, 0x61, 0x6d,
  0xe9, 0x84, 0xbc, 0x77, 0xb2, 0x6d, 0x1f, 0xb8, 0xe6, 0x94, 0x46, 0x24,
  0x28, 0x81, 0x4c, 0x6a, 0x12, 0x9c, 0x2f, 0xb1, 0x29, 0xe7, 0xed, 0x23,
  0xe1, 0xcf, 0x49, 0x63, 0x0d, 0x79, 0x92, 0xc2, 0x41, 0x2e, 0xb7, 0x0b,
  0x9f, 0x76, 0xc0, 0x17, 0x44, 0x7c, 0x92, 0x3e, 0x84, 0x13, 0x4b, 0x57,
  0x22, 0xbb, 0xb4, 0x1c, 0x46, 0x08, 0xd4, 0x68, 0xdc, 0x48, 0xf7, 0xd6,
  0x9f, 0x8f, 0x62, 0x0c, 0xdc, 0x86, 0x93, 0x4c, 0x07, 0x72, 0xdf, 0x7a,
  0xfa, 0x14, 0xf2, 0x69, 0xcd, 0xf0, 0x75, 0x9c, 0x83, 0xdc, 0x9c, 0xed,
  0x61, 0x45, 0x2a, 0x97, 0xf3, 0x39, 0x8a, 0xd7, 0x4b, 0xce, 0x96, 0x8e,
  0x6b, 0xff, 0xe9, 0xfe, 0xf6, 0xa1, 0x1b, 0x62, 0xd2, 0x78, 0x56, 0xed,

  0x5e, 0x96, 0xfa, 0x67, 0x0e, 0xe1, 0x46, 0xaf, 0x5a, 0x14, 0x3d, 0xf4,
  0x6b, 0x16, 0xe5, 0xad, 0x8a, 0x96, 0x41, 0xfb, 0xed, 0x9d, 0x09, 0x7f,
  0x66, 0x45, 0xac, 0xaa, 0x65, 0x09, 0x30, 0xe2, 0x8a, 0xf6, 0xdc, 0xce,
  0x32, 0xcc, 0x83, 0xbf, 0x74, 0x25, 0x4f, 0x6f, 0x23, 0x91, 0x06, 0xfe,
  0xf7, 0xaf, 0x07, 0xe4, 0x06, 0x1c, 0xff, 0xd4, 0x3a, 0x8f, 0x93, 0xae,


  0xcc, 0xe5, 0x13, 0x4c, 0x23, 0x5d, 0xdc, 0xa0, 0x6e, 0x79, 0x18, 0x2a,

  0x69, 0x73, 0x36, 0x42, 0x1e, 0xfb, 0xed, 0xbf, 0x5f, 0xcc, 0x2c, 0xf0,

  0xd7, 0x8a, 0xef, 0xcb, 0x63, 0xbf, 0xf9, 0xf7, 0xf9, 0xee, 0x3e, 0xe9,
  0xf6, 0x21, 0x46, 0xf5, 0x46, 0xea, 0x06, 0x02, 0x3c, 0xf1, 0x57, 0x33,
  0x45, 0xa9, 0x45, 0xf0, 0xb9, 0xa2, 0x7c, 0x2c, 0xd8, 0x9d, 0x46, 0xd8,
  0x22, 0x71, 0xc5, 0xdf, 0x84, 0x83, 0x11, 0x6b, 0xf6, 0x37, 0x47, 0xda,
  0x45, 0x1d, 0xf2, 0x9f, 0x9b, 0x5f, 0x85, 0xce, 0x48, 0xcb, 0xbb, 0x50,
  0x0a, 0x6a, 0x7f, 0x29, 0x6a, 0x58, 0xc4, 0x70, 0x2a, 0xa2, 0xf1, 0x9a,
  0x66, 0x3b, 0xb8, 0x59, 0xa6, 0x2f, 0x19, 0xbe, 0x1a, 0xea, 0x6a, 0x25,
  0x3b, 0xa4, 0xe9, 0xd9, 0x1a, 0xa6, 0xb0, 0x39, 0x43, 0xa8, 0x78, 0x24,
  0xce, 0x17, 0xcb, 0xb6, 0x06, 0x85, 0xcd, 0xd6, 0xc0, 0x16, 0xd8, 0xf9,
  0x5d, 0x57, 0x9a, 0x4a, 0xc1, 0x68, 0x48, 0x55, 0x92, 0x9b, 0x2c, 0xc1,

  0x0f, 0x39, 0x4e, 0x1f, 0xfe, 0x8a, 0xf1, 0xe7, 0xb8, 0x64, 0x86, 0x2b,
  0xaf, 0x61, 0x85, 0xc7, 0x17, 0xe7, 0xe7, 0x27, 0xc7, 0xcd, 0x60, 0xa1,
  0x69, 0xc2, 0x6b, 0x55, 0x7d, 0xaf, 0xa7, 0x29, 0x7d, 0x9e, 0xfa, 0x55,
  0x48, 0xb4, 0x88, 0xbf, 0x4f, 0xed, 0xce, 0x62, 0x81, 0xae, 0xe6, 0x5f,
  0x4a, 0x3b, 0x10, 0x86, 0x35, 0x16, 0x0a, 0x08, 0x54, 0x51, 0x7a, 0xf4,
  0xe0, 0x42, 0x6a, 0x90, 0x33, 0x0d, 0xb1, 0x74, 0xb4, 0xf4, 0x9b, 0x4c,

  0x58, 0x99, 0x05, 0x55, 0x32, 0x8c, 0xc7, 0x9b, 0x52, 0x28, 0xa0, 0xdf,
  0x6e, 0xa3, 0x65, 0x46, 0x42, 0xc4, 0x62, 0xac, 0x5e, 0x3e, 0xe1, 0xf6,
  0xca, 0xf3, 0xb8, 0xb8, 0xc5, 0x70, 0xb6, 0x53, 0x96, 0x45, 0x85, 0xb9,
  0x04, 0xca, 0x3e, 0x1e, 0x87, 0xb0, 0x3a, 0xc8, 0xeb, 0xee, 0x56, 0xa1,
  0xc8, 0x64, 0xa4, 0x25, 0xe9, 0x81, 0xd6, 0xcb, 0xe2, 0xeb, 0x59, 0x72,
  0x8f, 0x9f, 0x61, 0x80, 0x22, 0x04, 0xdc, 0xf0, 0x7b, 0x9c, 0x30, 0xae,
  0x3e, 0x47, 0x15, 0x1e, 0x05, 0xeb, 0x03, 0x8f, 0x6a, 0xce, 0x5d, 0x44,
  0x08, 0xa8, 0x1c, 0xdb, 0xf2, 0x71, 0xad, 0x95, 0xb7, 0x57, 0xef, 0x04,
  0x6c, 0xb4, 0x11, 0x50, 0xf3, 0xf2, 0x90, 0xa5, 0x10, 0xcd, 0x00, 0x90,
  0x52, 0x31, 0x46, 0x1b, 0x5e, 0x13, 0xef, 0x34, 0x1d, 0x03, 0x5a, 0x2b,
  0x65, 0x6d, 0x08, 0x3d, 0xdd, 0xb8, 0x25, 0xf2, 0x37, 0xc0, 0xe6, 0x01,
  0x74, 0x57, 0xf0, 0x13, 0xc0, 0xc4, 0xf6, 0x9b, 0x40, 0xd8, 0x84, 0x11,
  0x47, 0x4e, 0x52, 0x04, 0x87, 0x9c, 0x52, 0x55, 0x09, 0x3e, 0x4c, 0x97,
  0xd5, 0x53, 0x73, 0x91, 0xa1, 0x52, 0xc1, 0x65, 0x57, 0xac, 0x02, 0x8a,
  0x61, 0xc2, 0xee, 0xe2, 0x39, 0xc8, 0xde, 0x2b, 0xd8, 0x13, 0x47, 0x21,
  0xe4, 0x02, 0xc3, 0x9f, 0x8b, 0x65, 0xe5, 0x05, 0x12, 0x11, 0xf6, 0x8e,
  0x11, 0x4f, 0xbe, 0xea, 0xf9, 0x2d, 0xe2, 0xe2, 0xb1, 0x7b, 0xa6, 0xc4,
  0xc0, 0xc9, 0xec, 0x2f, 0xab, 0x71, 0xfa, 0x14, 0x2c, 0xa9, 0xd6, 0x2b,
  0x85, 0xac, 0x1a, 0xda, 0x31, 0x4b, 0xaa, 0x9b, 0xe4, 0x57, 0x68, 0xd2,
  0x82, 0x79, 0x45, 0x59, 0xc4, 0x2a, 0x74, 0x23, 0x42, 0x0f, 0x68, 0x70,
  0x3f, 0xb0, 0x72, 0xd0, 0xb1, 0x95, 0xb4, 0x09, 0xa5, 0x5b, 0xee, 0x5a,

  0xc7, 0x0f, 0xfd, 0xf6, 0x92, 0xe9, 0x36, 0x79, 0x7c, 0x96, 0x8e, 0x62,
  0x9e, 0xfb, 0x14, 0x33, 0x88, 0x0e, 0xe1, 0x3f, 0x2b, 0xbf, 0xfd, 0xfc,
  0xcf, 0x7a, 0x18, 0xa0, 0xcf, 0x93, 0xba, 0x16, 0xdf, 0xd6, 0x02, 0xdc,
  0x7a, 0x6d, 0x91, 0xee, 0xfd, 0xf2, 0xc8, 0x9a, 0x44, 0x5e, 0x29, 0x83,
  0x6d, 0x7d, 0xa0, 0x2b, 0x86, 0x03, 0x01, 0xfb, 0x10, 0xd6, 0xae, 0x84,
  0xa0, 0x9e, 0x27, 0x92, 0x9f, 0x14, 0xc1, 0xb5, 0xf2, 0xea, 0x66, 0x9e,
  0x95, 0xa9, 0xae, 0x7c, 0xe6, 0xc6, 0x05, 0x6a, 0x8d, 0xa3, 0x7f, 0x51,
  0x5d, 0xa1, 0x92, 0xce, 0x9a, 0xb2, 0x42, 0x5f, 0xa9, 0x6d, 0xc2, 0x73,
  0xa4, 0x92, 0xb7, 0x25, 0xcd, 0x1a, 0xcd, 0xda, 0x46, 0xf9, 0xbb, 0xb0,
  0x2a, 0xeb, 0xdd, 0x92, 0x27, 0x3d, 0xf5, 0x9b, 0x5f, 0x8b, 0xe7, 0xa7,
  0x6c, 0xd7, 0x0f, 0x66, 0x65, 0xbe, 0x36, 0xe7, 0x03, 0x73, 0x96, 0x75,
  0x7b, 0xca, 0x76, 0x33, 0x67, 0xdb, 0xf1, 0x4a, 0x04, 0x92, 0xb6, 0x69,
  0xb4, 0xff, 0x0b, 0x53, 0xb6, 0xdd, 0x8c, 0xed, 0x98, 0xf2, 0xb5, 0x03,
  0xe9, 0xda, 0xb2, 0xd1, 0x92, 0xaf, 0xc9, 0x19, 0xdb, 0x2b, 0x53, 0xb6,
  0xdd, 0x9c, 0xed, 0x55, 0x49, 0xdb, 0x04, 0x16, 0xb0, 0x22, 0x65, 0xfb,
  0xd7, 0x65, 0x6c, 0xb7, 0xa5, 0x6c, 0xff, 0xf2, 0x9c, 0xed, 0xdf, 0x36,
  0x65, 0xfb, 0xb7, 0xcc, 0x46, 0xa6, 0xdb, 0x83, 0x27, 0x92, 0x8e, 0xa4,
  0xe8, 0xec, 0xb0, 0x15, 0xea, 0x59, 0x2b, 0x31, 0x6b, 0x09, 0x2c, 0x4e,
  0x98, 0x59, 0x86, 0x61, 0x8d, 0xc6, 0x51, 0xdc, 0xfd, 0xba, 0x21, 0xa1,
  0x95, 0x40, 0x06, 0x9c, 0x1b, 0x07, 0xde, 0x0d, 0xdd, 0xf4, 0xb2, 0x9c,
  0xf5, 0x68, 0x06, 0x58, 0x0b, 0xee, 0x59, 0x89, 0x96, 0xcf, 0x34, 0x9e,
  0xfb, 0xed, 0x59, 0x4e, 0x35, 0x2b, 0xb7, 0x77, 0xad, 0xad, 0x2e, 0x7f,
  0x59, 0x62, 0x9d, 0x72, 0xc8, 0x6e, 0x97, 0x82, 0x91, 0x81, 0x70, 0x19,
  0xc5, 0x9e, 0xe1, 0xd7, 0xc8, 0x4b, 0x9a, 0x98, 0x5e, 0x97, 0x26, 0x24,
  0x61, 0x5a, 0x57, 0x7b, 0xc5, 0x30, 0x04, 0x4b, 0xe0, 0xae, 0x83, 0x64,
  0x08, 0x96, 0xbd, 0x28, 0xd3, 0x2e, 0xe9, 0x16, 0x6e, 0xf7, 0x77, 0xb9,
  0x72, 0x5d, 0x43, 0x3a, 0x32, 0x4f, 0x0f, 0x29, 0x8c, 0xbe, 0xcf, 0x40,
  0xed, 0x36, 0x07, 0x8d, 0x7b, 0xc9, 0xe9, 0x3b, 0xfd, 0xe8, 0x0a, 0xd5,
  0x47, 0x50, 0xd6, 0x61, 0x46, 0x32, 0xb8, 0xfc, 0x2e, 0x34, 0x5c, 0x1d,
  0x1c, 0x18, 0xe8, 0xe7, 0xc3, 0xd5, 0x99, 0x1f, 0x9f, 0xa6, 0xe8, 0xc1,
  0xc1, 0xe6, 0x26, 0x65, 0x48, 0xdd, 0xc4, 0x0f, 0x0f, 0xfd, 0x32, 0xd9,


  0x1c, 0xe7, 0xa3, 0x72, 0x13, 0x4f, 0x50, 0xbf, 0x7c, 0x53, 0xcd, 0x67,
  0xab, 0xb2, 0x1e, 0xd2, 0x52, 0x8b, 0xa5, 0x15, 0x0a, 0xd9, 0x66, 0x5e,
  0xb2, 0xb5, 0x95, 0xba, 0x2d, 0x00, 0x88, 0xef, 0x7b, 0xc8, 0x61, 0x54,
  0x55, 0x00, 0x8b, 0x82, 0xff, 0xa3, 0x5e, 0x38, 0x18, 0x54, 0x0a, 0x14,
  0x94, 0xbb, 0xfd, 0x82, 0x9d, 0x1a, 0x02, 0xff, 0x80, 0xd8, 0x0e, 0x40,
  0xa8, 0xdf, 0xa4, 0x22, 0x16, 0x56, 0xdf, 0x33, 0xdd, 0xf4, 0x5a, 0xa3,
  0x5e, 0x43, 0x5e, 0x7e, 0x3b, 0x3d, 0xa2, 0xb3, 0x96, 0xde, 0xbd, 0xbf,
  0x39, 0x4b, 0x00, 0xea, 0x46, 0x29, 0xff, 0x1c, 0x65, 0xd7, 0x7d, 0xf4,
  0x53, 0xdc, 0x32, 0x93, 0x90, 0x77, 0xc8, 0xd9, 0x76, 0x2b, 0x67, 0x62,
  0x1e, 0xfe, 0x14, 0x33, 0x21, 0xfc, 0x84, 0x20, 0x7f, 0xac, 0xcd, 0x81,
  0x1e, 0xfb, 0x14, 0xdf, 0xbf, 0xdb, 0x6e, 0xfb, 0x2c, 0x35, 0xe7, 0xa5,
  0x27, 0x7e, 0xc3, 0x0f, 0x7f, 0x30, 0xce, 0x2a, 0xc6, 0x9a, 0x38, 0xc4,
  0xff, 0x1e, 0xe8, 0x0e, 0xaf, 0xec, 0xfa, 0xd7, 0xd2, 0x52, 0x41, 0xf8,
  0x9b, 0x95, 0x0d, 0xab, 0xc1, 0x5c, 0x42, 0x64, 0x8e, 0xf7, 0x8a, 0x91,
  0xba, 0x04, 0x6c, 0x9d, 0x7a, 0x60, 0xf4, 0x14, 0xa9, 0x91, 0x91, 0x6d,

  0x18, 0x6c, 0x08, 0x3f, 0x3d, 0xce, 0x15, 0xfc, 0x0a, 0x0c, 0x85, 0xb0,
  0x18, 0x4a, 0x28, 0xd8, 0x1f, 0x40, 0xfa, 0x61, 0x43, 0xdc, 0x5c, 0x64,
  0xb7, 0x1d, 0x53, 0x99, 0xcc, 0xfc, 0xb4, 0x96, 0xa7, 0x7a, 0x49, 0x10,
  0xcf, 0x76, 0x21, 0xa2, 0x86, 0xc6, 0x8f, 0x46, 0x7c, 0xa5, 0xc9, 0x44,
  0x15, 0x67, 0x78, 0x66, 0x41, 0x45, 0xcc, 0x15, 0x3f, 0x88, 0x3a, 0xbd,
  0x0f, 0xd1, 0x41, 0xc7, 0xdb, 0xa2, 0x8b, 0x4c, 0x7a, 0xf1, 0x90, 0xc7,
  0xab, 0x20, 0x80, 0x02, 0x6a, 0xef, 0xe5, 0x6a, 0x26, 0x37, 0x08, 0x24,
  0x65, 0xcd, 0x09, 0xd3, 0xc7, 0x62, 0xea, 0x05, 0xe1, 0xe6, 0xda, 0xb7,
  0xd5, 0xf4, 0x9d, 0x42, 0x41, 0x82, 0x4e, 0x1b, 0x0b, 0x4a, 0x4f, 0xda,



  0x13, 0xf7, 0xd4, 0x40, 0xd6, 0x8a, 0xc1, 0x44, 0x0c, 0x66, 0x62, 0x35,
  0xbe, 0x0f, 0x02, 0x29, 0x3d, 0xdb, 0xa5, 0x94, 0x6e, 0x91, 0x97, 0x65,
  0x3a, 0x04, 0x4e, 0x3d, 0x15, 0x16, 0x59, 0x26, 0x9c, 0x4f, 0xc5, 0xa5,
  0xd7, 0xb8, 0x9b, 0x35, 0x58, 0x86, 0xe6, 0x16, 0xd1, 0x4a, 0x05, 0x0d,
  0x42, 0x9c, 0x4b, 0x30, 0x3b, 0x66, 0x6c, 0x77, 0x29, 0x0e, 0xcd, 0xd4,
  0x16, 0x47, 0xc3, 0x22, 0x4d, 0x26, 0x98, 0xea, 0x48, 0x2b, 0x12, 0xc5,
  0xab, 0xc9, 0x64, 0x67, 0x88, 0x98, 0x82, 0x49, 0x3a, 0x98, 0x69, 0x5b,
  0x22, 0x18, 0x28, 0xa5, 0x5f, 0x53, 0xee, 0xa3, 0xcd, 0xed, 0x2e, 0x12,
  0xcc, 0x1c, 0xb8, 0x4b, 0xe4, 0x58, 0x63, 0xed, 0x89, 0xd4, 0x92, 0x93,
  0x5a, 0x18, 0xcc, 0x74, 0xaa, 0x76, 0x20, 0xa8, 0x26, 0x83, 0x1b, 0x83,
  0x5f, 0xa4, 0x1e, 0x9b, 0x9a, 0xbe, 0x6b, 0x21, 0x15, 0xfa, 0x9f, 0x8c,
  0xc7, 0x3b, 0x5e, 0xe8, 0x5f, 0x50, 0x07, 0x50, 0x6f, 0xc1, 0xb6, 0x2a,
  0x2b, 0xde, 0xc9, 0x8c, 0x16, 0x13, 0xe8, 0xa9, 0x74, 0xf8, 0x09, 0x36,
  0x2b, 0x88, 0xce, 0x9b, 0x5a, 0x4e, 0x20, 0xb1, 0x1c, 0x13, 0xe8, 0x38,
  0x5f, 0xcd, 0xac, 0xae, 0x22, 0xd4, 0x07, 0x2a, 0xe5, 0x77, 0x03, 0xc3,
  0x1f, 0x3c, 0x11, 0x6f, 0xd3, 0xe5, 0xdb, 0x13, 0xe4, 0x9d, 0xfc, 0x78,
  0x2a, 0x08, 0x61, 0x1f, 0x79, 0x8c, 0x33, 0xf0, 0x65, 0x32, 0x62, 0xbb,
  0x73, 0x6e, 0xbc, 0xa6, 0xc6, 0xbb, 0x99, 0xf1, 0xa0, 0xf3, 0x39, 0xb1,
  0x7a, 0x8b, 0xc6, 0x8a, 0x0e, 0xd6, 0x70, 0x94, 0x98, 0x6e, 0x28, 0xf5,
  0xe5, 0x78, 0xe9, 0x75, 0xd7, 0x74, 0x79, 0xb9, 0x0e, 0x75, 0x97, 0xc6,
  0x46, 0x81, 0xb2, 0x1f, 0xe2, 0xfd, 0x14, 0x58, 0xee, 0xb8, 0xb5, 0x36,


  0x04, 0xb9, 0x3d, 0xe3, 0x20, 0x05, 0x2a, 0x3b, 0xcf, 0x07, 0x03, 0x3f,
  0x45, 0x3e, 0x03, 0xe3, 0x24, 0x9f, 0x66, 0xe9, 0xcf, 0x84, 0x19, 0x84,
  0x41, 0xcb, 0x66, 0x7a, 0x6b, 0xad, 0x48, 0x21, 0x72, 0x02, 0xf2, 0x98,
  0x28, 0xe1, 0xf3, 0x37, 0x4a, 0xa2, 0x23, 0xa9, 0x83, 0xe9, 0x60, 0x08,
  0x2c, 0x66, 0x32, 0x01, 0x31, 0xc8, 0xc0, 0x8d, 0xad, 0xc4, 0x16, 0x33,
  0xb9, 0xb3, 0xfc, 0x61, 0xef, 0x70, 0x95, 0x2a, 0x04, 0x13, 0x28, 0x88,
  0xf4, 0xc5, 0x23, 0xfd, 0xe2, 0xa2, 0x02, 0x6a, 0x58, 0xf9, 0xcb, 0x4b,
  0x0a, 0xc2, 0xb0, 0x58, 0xc9, 0x03, 0x33, 0xd0, 0x9a, 0x24, 0x70, 0x60,
  0x75, 0x24, 0x27, 0xbb, 0x4c, 0x42, 0xe2, 0x45, 0xf7, 0x98, 0x05, 0xe9,
  0xb3, 0xe0, 0x07, 0x55, 0xf9, 0x8c, 0xfd, 0xbb, 0xd5, 0x44, 0x1e, 0x34,
  0x81, 0x8e, 0x67, 0x40, 0x0e, 0xa2, 0x1b, 0x5f, 0xc1, 0xfe, 0xc5, 0x9f,
  0x4e, 0x2d, 0x70, 0x18, 0x7f, 0x21, 0x61, 0x9c, 0x40, 0x53, 0x09, 0x24,
  0x36, 0x0a, 0x5e, 0xd8, 0x60, 0x73, 0x56, 0x84, 0x63, 0x20, 0xdd, 0x9d,
  0xdc, 0xcb, 0x52, 0x0d, 0x26, 0xad, 0xd8, 0x71, 0x80, 0x3e, 0x02, 0xe3,
  0x61, 0x5d, 0x95, 0xba, 0xee, 0xe1, 0xd7, 0x58, 0xa9, 0xa5, 0x54, 0xd1,
  0x24, 0x2d, 0xdb, 0x78, 0xc1, 0x4c, 0x91, 0x53, 0x44, 0xc4, 0xc7, 0x6f,
  0x1a, 0x0a, 0xd6, 0xa5, 0x18, 0x23, 0xc3, 0x7a, 0xa4, 0x25, 0x78, 0x41,
  0xa4, 0x05, 0x2c, 0xc1, 0x26, 0x43, 0x40, 0x66, 0x2e, 0x2b, 0x32, 0xb4,
  0xd2, 0x45, 0xee, 0xc3, 0x2c, 0x57, 0x3c, 0x75, 0xbd, 0x85, 0x72, 0xd9,
  0xe6, 0x62, 0x1f, 0x65, 0x90, 0x16, 0x5d, 0xfe, 0x13, 0x54, 0xa2, 0xfc,
  0xaa, 0x52, 0x94, 0x4f, 0x5b, 0x89, 0x62, 0x25, 0x05, 0x4a, 0x1d, 0x5f,
  0x4e, 0x50, 0x94, 0x10, 0x5d, 0x32, 0x9c, 0x06, 0x75, 0x1f, 0x9b, 0x8e,
  0x40, 0xfc, 0x5a, 0x63, 0xb8, 0xf0, 0x65, 0xea, 0x46, 0xb5, 0x2c, 0xd9,
  0xc4, 0xe3, 0x91, 0xeb, 0xc2, 0x35, 0x36, 0x5a, 0xe0, 0x97, 0x12, 0x2c,
  0x19, 0x1f, 0x27, 0x02, 0x9d, 0xf6, 0x67, 0xdb, 0x91, 0xe7, 0x53, 0x1b,
  0x60, 0xdb, 0xc0, 0x9b, 0x0f, 0x1d, 0x79, 0xfc, 0xe5, 0x93, 0x02, 0x99,
  0xee, 0x19, 0xbe, 0x66, 0x91, 0x49, 0x1d, 0x7e, 0x67, 0x31, 0xca, 0xca,
  0x10, 0x9c, 0xaa, 0x19, 0x46, 0x98, 0x9d, 0x61, 0x6f, 0x98, 0x19, 0x87,
  0xef, 0xb7, 0x30, 0xb8, 0x44, 0xe3, 0xae, 0x6a, 0x12, 0x03, 0x47, 0x1f,
  0x26, 0xd5, 0x3d, 0x6a, 0x71, 0xb4, 0x1f, 0xba, 0x91, 0x0e, 0x17, 0x90,
  0x2d, 0x6a, 0xcd, 0x77, 0xe9, 0x72, 0x1a, 0x1c, 0x32, 0x14, 0xc6, 0x57,
  0x36, 0x7e, 0x11, 0x8d, 0xe9, 0x7a, 0xb7, 0x2f, 0xd8, 0x62, 0xcb, 0x86,
  0xa8, 0x6b, 0x7b, 0xa3, 0xb9, 0xb8, 0xb5, 0x8a, 0x21, 0x4d, 0x5b, 0x92,
  0x07, 0x5d, 0x1f, 0xbf, 0xb9, 0xc6, 0x72, 0x6d, 0x83, 0x80, 0x15, 0x18,
  0x18, 0xa3, 0x77, 0x65, 0x3e, 0x7a, 0xfe, 0x8e, 0xaa, 0x15, 0xc0, 0x4e,
  0xc2, 0xb8, 0x5c, 0x28, 0x34, 0xdc, 0xc6, 0x64, 0xd8, 0x93, 0x23, 0xbf,
  0x8d, 0x17, 0xf0, 0x33, 0x0c, 0x09, 0x12, 0xd4, 0x2f, 0xf7, 0x83, 0xf4,
  0xf2, 0x12, 0x88, 0x00, 0xdc, 0x89, 0x35, 0xc2, 0xe2, 0x74, 0x3e, 0x7e,
  0x03, 0x0b, 0x31, 0xce, 0x42, 0x6d, 0x87, 0x4a, 0x41, 0xd4, 0x52, 0xef,
  0x94, 0x06, 0xc9, 0x25, 0xd8, 0xe2, 0x0a, 0x57, 0x41, 0x8d, 0xcc, 0xf8,
  0x00, 0x2b, 0x1f, 0x12, 0xbe, 0xb6, 0xc8, 0xbc, 0x1f, 0x68, 0x3e, 0x4a,
  0x9a, 0x0e, 0x55, 0x64, 0x79, 0xf3, 0x97, 0x2c, 0x3e, 0x6d, 0x46, 0x69,
  0x5d, 0x3d, 0xa6, 0xb7, 0xb4, 0xdf, 0x63, 0x18, 0x41, 0xb9, 0xf4, 0x05,
  0x81, 0xa6, 0x96, 0xf1, 0x4d, 0xcb, 0xde, 0xb6, 0xc8, 0x64, 0x28, 0x87,
  0xa3, 0x76, 0x6b, 0x25, 0xf6, 0x10, 0x88, 0xcd, 0xad, 0x0f, 0xb0, 0x2e,
  0x62, 0x70, 0x7c, 0xb9, 0x11, 0x5d, 0x36, 0x90, 0x60, 0xa8, 0x28, 0x09,

  0x85, 0xa9, 0xcb, 0x87, 0xa5, 0x45, 0x22, 0x23, 0x8f, 0xb6, 0xa3, 0x86,
  0x28, 0xde, 0xb3, 0xc1, 0xd8, 0xa5, 0xd0, 0xef, 0x6f, 0xce, 0x98, 0x1a,
  0x6b, 0x39, 0xa2, 0x22, 0x0d, 0x06, 0x05, 0x11, 0x93, 0xd2, 0xbd, 0xa6,
  0x60, 0x41, 0xe7, 0x58, 0x6a, 0xc7, 0x4d, 0xc9, 0xc4, 0x29, 0xaf, 0xf8,
  0x27, 0x33, 0x2f, 0xd5, 0x91, 0x36, 0x42, 0xb3, 0xce, 0x1d, 0xf4, 0x23,
  0xe9, 0x0e, 0x5a, 0xb2, 0x54, 0x6a, 0x74, 0xef, 0x20, 0x1e, 0x36, 0x4d,
  0xb2, 0x24, 0x84, 0x10, 0xf6, 0x48, 0x82, 0x5c, 0x48, 0x7a, 0xdc, 0x6f,
  0xa2, 0x9a, 0x3b, 0x41, 0x03, 0x99, 0x5c, 0x9a, 0xdb, 0x0e, 0x06, 0x2d,
  0xc8, 0xa7, 0xac, 0xe3, 0x61, 0x73, 0x50, 0xe4, 0x88, 0x88, 0x8f, 0x4f,
  0x26, 0xc1, 0x28, 0x5f, 0x3c, 0xe2, 0x66, 0xc0, 0x63, 0x65, 0x79, 0xb3,
  0x03, 0x7c, 0x63, 0xa7, 0xff, 0x39, 0xa3, 0x65, 0xdf, 0x80, 0xb0, 0x0e,
  0xc0, 0x24, 0x73, 0xfa, 0x88, 0xb4, 0x11, 0x6e, 0x8c, 0x27, 0x5a, 0x78,
  0xdf, 0x2a, 0xfe, 0xbd, 0xff, 0x44, 0x4a, 0xfb, 0xfb, 0xd2, 0x8f, 0xdf,
  0xad, 0x23, 0x41, 0x45, 0x48, 0x56, 0x1b, 0xdc, 0xf4, 0x92, 0x33, 0x0d,
  0x86, 0x69, 0x45, 0xcd, 0x26, 0xd4, 0x8a, 0xac, 0x5f, 0x4d, 0x6a, 0x0c,
  0x57, 0xd0, 0x5b, 0xc1, 0x9a, 0xf8, 0x7e, 0xf4, 0x9f, 0xf8, 0x29, 0x7d,
  0x9b, 0xcb, 0x32, 0x28, 0x19, 0xe2, 0xeb, 0x93, 0xb7, 0x17, 0x57, 0x27,

  0xf5, 0x72, 0xc5, 0x8a, 0x30, 0xb7, 0x22, 0x0a, 0xf6, 0x37, 0x67, 0xc7,
  0x68, 0x83, 0x02, 0x83, 0x20, 0x99, 0x0a, 0x29, 0xda, 0xfd, 0xd1, 0xe5,
  0xf7, 0x6f, 0xcc, 0xec, 0x50, 0x4b, 0xc8, 0xb8, 0x7b, 0x99, 0x0c, 0xda,
  0xe5, 0x9d, 0x6e, 0x8a, 0x76, 0xd4, 0x02, 0xb0, 0x49, 0x9b, 0x34, 0x7d,
  0x37, 0xf3, 0xa3, 0x14, 0x0b, 0x4e, 0x8c, 0xd1, 0x52, 0x7d, 0xc2, 0xb6,
  0x2f, 0x4b, 0x2c, 0xbd, 0x37, 0x83, 0x7a, 0x7a, 0x2f, 0x5b, 0x47, 0x0c,
  0x38, 0xc5, 0xa9, 0xc5, 0x71, 0x44, 0xa8, 0x7e, 0x08, 0xf4, 0xd7, 0x8f,
  0xfc, 0x0f, 0x69, 0x52, 0x08, 0x7d, 0x25, 0xc4, 0xb0, 0x6f, 0x30, 0x4b,
  0x9b, 0x02, 0x21, 0x2c, 0xed, 0xd0, 0xe1, 0x82, 0x44, 0x6b, 0xfa, 0xc1,
  0x75, 0x19, 0x81, 0x51, 0xc2, 0x3d, 0xee, 0x46, 0x06, 0x22, 0xe4, 0xf0,
  0xcd, 0xf5, 0x12, 0x0b, 0x1d, 0x9c, 0xa9, 0x9a, 0xdf, 0x44, 0x6a, 0x41,
  0xaf, 0xfd, 0x79, 0xcd, 0xd6, 0x84, 0x70, 0x5f, 0xcb, 0x70, 0x1f, 0x58,
  0xdb, 0x17, 0x70, 0xe3, 0xa9, 0xfc, 0x2d, 0x5d, 0x71, 0x5b, 0x3d, 0xb6,
  0x84, 0xee, 0x24, 0xa5, 0x87, 0xda, 0xf3, 0x2e, 0x19, 0x49, 0x96, 0x18,
  0x87, 0x08, 0x53, 0x1d, 0x45, 0x03, 0x7e, 0x7e, 0xf1, 0x45, 0x85, 0xb0,
  0x0b, 0xb6, 0x57, 0x98, 0x32, 0x1c, 0x0a, 0x98, 0x69, 0x43, 0x0b, 0x0a,

  0x45, 0x50, 0x13, 0xb6, 0xf2, 0x31, 0xab, 0xf0, 0xa2, 0x32, 0x4f, 0x19,
  0xe5, 0x45, 0xb0, 0x00, 0x0c, 0x09, 0xc9, 0x92, 0x6e, 0x49, 0x48, 0x13,
  0xaf, 0xf6, 0x5f, 0xa1, 0x68, 0xa7, 0x0c, 0x25, 0xe9, 0x94, 0x27, 0xb8,
  0xdb, 0x14, 0x3d, 0x65, 0x50, 0x65, 0x0f, 0xe5, 0xda, 0x5d, 0x83, 0x76,
  0x37, 0x1f, 0x26, 0x33, 0xee, 0xce, 0x37, 0x70, 0x06, 0xf1, 0xc1, 0x94,
  0x56, 0x1c, 0x18, 0xc2, 0xf8, 0x01, 0xf9, 0xa4, 0xe5, 0x6d, 0xb4, 0xfe,

  0x6f, 0x1b, 0x8c, 0x40, 0xa2, 0x69, 0x39, 0xe8, 0x9b, 0x4d, 0xb3, 0xa5,
  0x47, 0xf9, 0xe8, 0x9c, 0x4b, 0x6b, 0x9b, 0x4a, 0x7b, 0x4e, 0xeb, 0x1b,
  0x86, 0x6a, 0xf2, 0xca, 0x2a, 0x5f, 0x44, 0xdc, 0x4e, 0xb1, 0xf0, 0x82,
  0x63, 0x72, 0x5c, 0x2b, 0xed, 0xd4, 0xf6, 0xb2, 0x05, 0x5f, 0x22, 0x12,
  0x13, 0x22, 0xb0, 0x72, 0x71, 0xb8, 0xaa, 0x76, 0xd5, 0x8f, 0x3e, 0x64,
  0x94, 0x88, 0x27, 0x74, 0x27, 0x72, 0x22, 0xcd, 0x60, 0xfd, 0x40, 0xd3,

  0x20, 0x29, 0x02, 0x4c, 0xe8, 0xef, 0x75, 0xe6, 0x23, 0x4c, 0xb2, 0x11,

  0x20, 0xa5, 0x4b, 0x2b, 0x6c, 0xcd, 0xb0, 0xad, 0x28, 0x7a, 0xeb, 0xf7,
  0x9d, 0xe4, 0xbe, 0x79, 0x48, 0xea, 0xb0, 0x1c, 0x1a, 0x1b, 0x43, 0xe0,
  0xc9, 0x6c, 0xd6, 0x63, 0x70, 0x7b, 0x84, 0xfa, 0x46, 0xe5, 0x9e, 0xab,
  0xa4, 0x29, 0x81, 0xcd, 0x35, 0x7c, 0x3c, 0xc9, 0x42, 0xc5, 0xde, 0x84,
  0x24, 0xab, 0x70, 0x23, 0x52, 0x8a, 0xa5, 0x81, 0x35, 0xac, 0xdc, 0xb3,
  0xce, 0x10, 0xda, 0x1c, 0x5e, 0x52, 0x5b, 0xa7, 0x38, 0x1f, 0x2e, 0x76,
  0x74, 0x33, 0x2d, 0x16, 0xdc, 0xad, 0x32, 0xd4, 0x4a, 0xd3, 0xd5, 0xba,
  0xf9, 0x51, 0x25, 0x8a, 0x32, 0xa9, 0x78, 0x32, 0xfc, 0xee, 0xe9, 0x9b,
  0x5a, 0xdb, 0x7b, 0xdc, 0x0a, 0x34, 0xfd, 0xc2, 0xc3, 0x99, 0xc7, 0xe8,

  0x3e, 0x5a, 0xa9, 0x61, 0x86, 0xb2, 0x26, 0xc6, 0x50, 0x31, 0xc9, 0xe9,
  0x77, 0xe1, 0xe1, 0x64, 0x14, 0x56, 0x55, 0x79, 0x0c, 0x1d, 0x98, 0x48,
  0x05, 0x2c, 0xd1, 0x14, 0x1b, 0x8f, 0x21, 0x31, 0x4c, 0x93, 0xc2, 0x7c,
  0xc6, 0x4f, 0x92, 0xbc, 0x99, 0xe7, 0x63, 0xac, 0xe9, 0x4a, 0x9e, 0xde,
  0x0b, 0x7c, 0xd2, 0xde, 0x37, 0x29, 0x87, 0x2b, 0x0d, 0xd4, 0x2d, 0x57,
  0xec, 0x61, 0x13, 0x82, 0xaa, 0x94, 0x9d, 0x09, 0x0f, 0x67, 0x97, 0xaa,
  0xdd, 0x63, 0xe5, 0x4d, 0x77, 0x09, 0x59, 0x94, 0x8f, 0x2a, 0x67, 0x05,
  0xf8, 0x40, 0x78, 0x38, 0x66, 0xac, 0x81, 0x95, 0x61, 0x81, 0x14, 0x59,
  0x94, 0xab, 0x57, 0xc6, 0x0f, 0x7a, 0x87, 0x0c, 0x3f, 0xb4, 0x98, 0xc0,
  0xb5, 0x13, 0x6e, 0x5f, 0x59, 0xe8, 0x84, 0x69, 0x06, 0xcd, 0x03, 0xd6,
  0xae, 0x61, 0x05, 0x1f, 0x65, 0x2f, 0x3c, 0x9c, 0x39, 0x61, 0x01, 0x21,
  0x5f, 0x71, 0xc0, 0xf2, 0x15, 0x6f, 0x17, 0x66, 0x19, 0xa8, 0x77, 0xcb,
  0x62, 0x94, 0x7c, 0xa4, 0xb9, 0x55, 0x71, 0x31, 0x4d, 0xaa, 0x8f, 0xab,
  0x37, 0x64, 0x26, 0x68, 0x0a, 0x8f, 0x73, 0x6a, 0xff, 0x6e, 0x98, 0x85,
  0xe0, 0xfe, 0xc6, 0x82, 0x2e, 0x00, 0x0a, 0x1e, 0xfd, 0x9e, 0xad, 0x99,
  0x16, 0xb2, 0xb7, 0xdf, 0x8b, 0x14, 0x4a, 0x07, 0xc4, 0x65, 0x9a, 0x29,
  0x88, 0x8d, 0xf0, 0x18, 0x67, 0x8a, 0x51, 0x08, 0x79, 0x69, 0x55, 0xb8,
  0x6a, 0x7e, 0x8b, 0x25, 0x56, 0x46, 0x09, 0xf8, 0x18, 0x68, 0xda, 0xe2,
  0xd2, 0x31, 0x3f, 0xae, 0xc7, 0xcd, 0x6b, 0x92, 0x1a, 0x42, 0xd3, 0x25,
  0xd8, 0x3d, 0xe9, 0xc8, 0x2f, 0x85, 0x76, 0x04, 0xa2, 0x7e, 0xd0, 0xdc,
  0xc8, 0xe6, 0xec, 0x16, 0xf7, 0x63, 0xe3, 0x88, 0x81, 0xbf, 0xea, 0x77,

  0x55, 0xb8, 0x53, 0x53, 0x0f, 0x6d, 0xc4, 0x8d, 0x09, 0x4c, 0x3c, 0xd8,
  0x44, 0x91, 0xc9, 0x5b, 0x3f, 0x9d, 0x55, 0xbe, 0xfe, 0xe3, 0x7d, 0xbc,
  0x48, 0x38, 0xef, 0x95, 0xb6, 0x57, 0x0e, 0xa3, 0x7d, 0x6b, 0xe4, 0x69,
  0x3b, 0x45, 0xe6, 0xee, 0x96, 0x75, 0x15, 0x81, 0x2d, 0x6a, 0x67, 0x77,
  0xf2, 0xd5, 0xc6, 0x75, 0x18, 0x27, 0xe8, 0x97, 0x15, 0x42, 0xc0, 0x84,
  0x2d, 0x1e, 0x48, 0xb9, 0xde, 0x2a, 0x32, 0x6a, 0xdd, 0xe3, 0x62, 0xfe,
  0xc4, 0x15, 0x87, 0x07, 0xec, 0xaa, 0x18, 0x87, 0xc3, 0xac, 0xca, 0xbb,
  0x97, 0x72, 0x89, 0x5b, 0x76, 0xbe, 0x6d, 0x06, 0x35, 0x1a, 0x5c, 0x35,
  0x13, 0x97, 0xfa, 0xdc, 0xc9, 0xd8, 0xad, 0x05, 0x55, 0xae, 0xa2, 0x2e,
  0xe0, 0x3a, 0xb3, 0xf0, 0x70, 0x86, 0x3c, 0xf5, 0x3d, 0xd9, 0x9e, 0xae,
  0xe3, 0xbb, 0xe4, 0x0e, 0x2f, 0x60, 0x36, 0xfa, 0xb4, 0xa1, 0xd7, 0xfb,
  0x17, 0xb1, 0x07, 0xb4, 0xcf, 0x67, 0x99, 0x6b, 0x91, 0xe3, 0x17, 0x41,
  0xf2, 0xae, 0x28, 0x65, 0x71, 0x9a, 0x43, 0x98, 0x03, 0xe7, 0x1e, 0xcf,
  0x14, 0x77, 0xa5, 0x84, 0x3c, 0x4a, 0x54, 0xa5, 0x06, 0x61, 0xa2, 0xa4,
  0x12, 0x5c, 0xdc, 0x18, 0x5b, 0xaf, 0xf8, 0x79, 0xf3, 0xfc, 0x49, 0xce,
  0xda, 0x62, 0x18, 0x64, 0x8c, 0x1c, 0x8a, 0x12, 0xa2, 0x1d, 0xa4, 0xcb,
  0x44, 0xac, 0x04, 0x7d, 0x3c, 0xe2, 0x6e, 0x2e, 0x7e, 0xe3, 0xec, 0x46,
  0x02, 0x1d, 0xaa, 0x1f, 0x0d, 0x18, 0xf4, 0x64, 0x3a, 0x76, 0xdb, 0xd0,
  0x3b, 0xcb, 0x2f, 0xba, 0xbc, 0x05, 0x53, 0x58, 0x3c, 0xfd, 0x11, 0x2c,
  0x12, 0x21, 0x95, 0x98, 0x74, 0x15, 0x44, 0x3d, 0xd8, 0x88, 0xae, 0x24,
  0xb4, 0x89, 0x3a, 0xdd, 0x63, 0x85, 0x20, 0xdb, 0x38, 0xc0, 0x7a, 0xda,
  0x07, 0x61, 0xc8, 0x45, 0x01, 0xa8, 0x20, 0x61, 0xa7, 0x84, 0x50, 0xa0,
  0x78, 0x43, 0x02, 0xa2, 0xec, 0x70, 0xdb, 0xdc, 0xee, 0x6f, 0x77, 0x5d,
  0xab, 0xd3, 0xa6, 0xfe, 0xa1, 0xee, 0x1d, 0x1b, 0x88, 0x76, 0xfc, 0x74,
  0xd3, 0xcf, 0x70, 0x85, 0x1f, 0x2e, 0x7d, 0xb7, 0x30, 0xb9, 0x96, 0xad,
  0xc1, 0x72, 0x1f, 0x3f, 0xfa, 0x8a, 0xe9, 0x56, 0x6f, 0xef, 0xd5, 0xab,
  0x9a, 0x3c, 0x2f, 0x1d, 0x7c, 0xfb, 0xfd, 0xad, 0x2d, 0x5a, 0x9b, 0x57,
  0x13, 0x0d, 0xbf, 0xe8, 0xbd, 0xa2, 0x17, 0xeb, 0xaf, 0x95, 0x09, 0x1c,
  0xc1, 0xb8, 0xfd, 0xbd, 0x1e, 0xfe, 0x26, 0xf0, 0x39, 0xf2, 0xa7, 0xb4,
  0xbe, 0xf5, 0x0a, 0x3f, 0x17, 0x78, 0x8b, 0x1e, 0xe6, 0x7d, 0xcc, 0x27,
  0x13, 0x74, 0x64, 0xe1, 0x93, 0x8a, 0xcb, 0x73, 0x1f, 0x17, 0x63, 0x7f,
  0xb9, 0x5b, 0xdd, 0xde, 0x76, 0xdb, 0x72, 0x29, 0x9a, 0x4c, 0x09, 0x70,
  0x78, 0x9e, 0x68, 0x27, 0x82, 0xf5, 0xc1, 0x05, 0x42, 0xcd, 0x81, 0xb6,
  0x61, 0x46, 0xdb, 0xaf, 0x5e, 0x75, 0x71, 0x66, 0xfb, 0xaf, 0x5e, 0xb5,
  0x16, 0x84, 0x3b, 0x9f, 0xb9, 0xcf, 0xad, 0xfb, 0x09, 0x5f, 0xb7, 0x44,
  0x53, 0xa2, 0x91, 0x13, 0xfe, 0x0e, 0xfe, 0x26, 0x7a, 0x1d, 0x9d, 0x5f,
  0x5c, 0x9f, 0x38, 0x9e, 0x19, 0xba, 0x5f, 0x1c, 0x30, 0x74, 0x4c, 0x4d,
  0x8a, 0xc1, 0x2e, 0xa8, 0xc7, 0x1a, 0x59, 0xbd, 0x60, 0x93, 0xf8, 0xc6,
  0x24, 0x15, 0xab, 0xa8, 0x47, 0xf0, 0x0f, 0x7e, 0x46, 0x04, 0x35, 0x52,
  0x9b, 0xa6, 0x95, 0x0b, 0xdb, 0xb4, 0x0e, 0x87, 0xbd, 0x41, 0x2e, 0x0e,
  0x4e, 0x72, 0x93, 0x60, 0xca, 0x5a, 0x89, 0xd5, 0x1d, 0x9c, 0x08, 0x8b,

  0xff, 0xc8, 0x17, 0x6b, 0x5e, 0x81, 0x45, 0x32, 0xc3, 0xbc, 0x55, 0x91,
  0x84, 0xfc, 0x42, 0x8f, 0x9e, 0x94, 0xeb, 0x42, 0xf6, 0xea, 0x03, 0x79,
  0xe0, 0x63, 0x42, 0xb5, 0x74, 0x3f, 0x1e, 0x88, 0xa7, 0x20, 0x27, 0xe4,
  0x44, 0x0c, 0xad, 0xcc, 0xc2, 0x61, 0x5c, 0x74, 0xe3, 0xb5, 0xd2, 0x3a,
  0x3c, 0x8d, 0x77, 0x2e, 0xc3, 0x73, 0xf0, 0xf0, 0x08, 0xd9, 0x89, 0x3f,
  0x4e, 0x16, 0x9a, 0x52, 0x9a, 0xd5, 0xc7, 0x01, 0x5a, 0x9e, 0xa4, 0xd3,
  0x65, 0x11, 0x4e, 0xbf, 0xa4, 0x5e, 0x7e, 0x92, 0xe9, 0xa0, 0xdd, 0x1c,
  0xe2, 0xfb, 0xb8, 0x48, 0xb4, 0xf9, 0x60, 0xf6, 0x68, 0xee, 0xb6, 0x5a,
  0xc1, 0x5a, 0x0f, 0x84, 0xad, 0x36, 0x3c, 0x4b, 0x1a, 0x4b, 0xb8, 0x40,


  0x8f, 0x41, 0x2f, 0x81, 0xa4, 0xe8, 0x48, 0x4b, 0x89, 0xb8, 0xb2, 0x15,
  0x59, 0xe2, 0x40, 0xc4, 0xc3, 0x46, 0x61, 0x4a, 0x98, 0x99, 0xb4, 0x05,
  0x7e, 0x4e, 0xdd, 0xda, 0xcc, 0xfa, 0xee, 0xf1, 0x59, 0xf2, 0xb6, 0xdc,
  0xe4, 0x4e, 0xfb, 0x16, 0x1f, 0xb4, 0x01, 0x39, 0x0f, 0xc3, 0xb9, 0xd0,
  0x5f, 0xf9, 0x90, 0xe0, 0xf9, 0xfb, 0x6c, 0x96, 0xc7, 0x63, 0xeb, 0x3c,
  0x59, 0x68, 0xba, 0xae, 0x40, 0x8e, 0xc9, 0xd1, 0x7a, 0x59, 0x1d, 0x78,
  0xd2, 0x7c, 0xc6, 0xd1, 0xba, 0x03, 0x28, 0x42, 0x14, 0xea, 0xb8, 0x41,
  0x98, 0x4b, 0x21, 0xa5, 0x30, 0x40, 0x06, 0xc2, 0xdd, 0xf8, 0x66, 0x2f,
  0xd2, 0x3b, 0x9f, 0x96, 0x49, 0x74, 0xa1, 0x3e, 0xb4, 0x28, 0x24, 0x1d,
  0x97, 0x46, 0x34, 0x38, 0xfd, 0x9f, 0x27, 0x9f, 0x32, 0xea, 0x54, 0xc4,
  0xf7, 0xa6, 0x70, 0xf0, 0x7b, 0x06, 0xac, 0x94, 0x68, 0x90, 0x41, 0xaa,
  0x88, 0x67, 0x62, 0xc3, 0x63, 0xaf, 0x53, 0x92, 0x1e, 0x14, 0x56, 0x94,

  0x36, 0xd3, 0x40, 0x58, 0x3e, 0x6d, 0x63, 0x7d, 0x9f, 0x45, 0x2e, 0xe3,
  0x5c, 0x74, 0xaa, 0xf8, 0x62, 0x07, 0x20, 0x9f, 0xe3, 0x9c, 0x5c, 0x89,
  0x64, 0xda, 0xa3, 0xb7, 0x97, 0xe1, 0xa4, 0x02, 0x1d, 0x64, 0x09, 0x11,
  0x11, 0x27, 0x05, 0x73, 0x7d, 0xa2, 0x57, 0xa4, 0x5b, 0x69, 0x9f, 0x70,
  0x5b, 0x0d, 0x0c, 0x4f, 0x15, 0xd1, 0xe1, 0x87, 0xab, 0xb3, 0x96, 0x72,
  0xc9, 0x01, 0x9d, 0x01, 0x6e, 0x56, 0xe7, 0x2a, 0x21, 0x34, 0xb3, 0x22,
  0xba, 0x8c, 0xa7, 0x49, 0xc7, 0x05, 0x90, 0xab, 0x21, 0x48, 0x8a, 0x03,
  0x22, 0xe4, 0x4e, 0x71, 0xdb, 0xa1, 0x20, 0x13, 0xb7, 0x61, 0x61, 0xb7,
  0xc8, 0x71, 0x32, 0x8b, 0x65, 0xef, 0x96, 0x05, 0x86, 0xf3, 0x69, 0xe7,
  0x03, 0x2d, 0xbe, 0xd4, 0x4f, 0xd9, 0x80, 0xfe, 0x94, 0xd6, 0x65, 0x54,
  0x96, 0x15, 0x2f, 0x90, 0x86, 0xa2, 0xce, 0x17, 0xe8, 0x81, 0xef, 0xe8,
  0x34, 0x7b, 0x89, 0x1f, 0x64, 0xd3, 0xad, 0xc0, 0xc0, 0x70, 0xcd, 0x0b,

  0x55, 0xf7, 0xdd, 0xe3, 0xac, 0x35, 0xde, 0x9a, 0x20, 0x1e, 0x6f, 0x49,
  0xb1, 0x64, 0xaf, 0x85, 0x1b, 0x86, 0xbf, 0x10, 0x74, 0x91, 0x71, 0x58,
  0x31, 0xe3, 0x24, 0x3a, 0x93, 0xf9, 0x1d, 0x48, 0xb0, 0x85, 0x75, 0x21,
  0x9d, 0x5a, 0x2d, 0x33, 0x28, 0xb4, 0xd8, 0x78, 0x86, 0x8d, 0x8a, 0x8c,
  0xf7, 0x0b, 0xd7, 0x38, 0xce, 0xb1, 0xb9, 0x0d, 0x4e, 0x29, 0xce, 0x8c,
  0x33, 0xb9, 0x76, 0xb2, 0x9f, 0x1c, 0xea, 0xd0, 0x06, 0x80, 0x8e, 0xba,
  0xd2, 0x7d, 0xab, 0x07, 0xd4, 0x91, 0x49, 0x1d, 0xbc, 0x73, 0xac, 0x0e,
  0xed, 0xfd, 0x87, 0xd3, 0xd2, 0xc5, 0x69, 0xca, 0xd2, 0x82, 0x98, 0xeb,
  0x4c, 0xb7, 0xa2, 0x32, 0x15, 0x3a, 0x42, 0xaf, 0x2d, 0x8c, 0xad, 0x98,
  0x15, 0x61, 0x19, 0x74, 0xe7, 0xf7, 0x9c, 0x82, 0x96, 0x63, 0x2e, 0xdd,
  0xec, 0xbd, 0x49, 0x41, 0x88, 0x94, 0x8c, 0x40, 0x44, 0x5a, 0x2e, 0xb7,
  0x23, 0xd3, 0x8b, 0xc8, 0x25, 0xbc, 0x3d, 0x1f, 0xdd, 0x6f, 0x24, 0x75,
  0x1d, 0xe6, 0x15, 0x13, 0xb3, 0x01, 0x8a, 0x78, 0xc2, 0x59, 0x6c, 0xb5,

  0x85, 0xd8, 0x3a, 0x2b, 0x68, 0xcf, 0x62, 0xed, 0x60, 0x20, 0xf0, 0x1e,
  0xe8, 0xb7, 0x0c, 0xec, 0x8e, 0xc1, 0x05, 0xa2, 0xcc, 0x99, 0x32, 0x32,
  0xe9, 0xf1, 0xd2, 0x1d, 0xcb, 0x33, 0x36, 0x4d, 0x4f, 0x79, 0x4e, 0xf6,
  0x68, 0x86, 0x01, 0x61, 0x52, 0xa6, 0x41, 0x11, 0x47, 0x4e, 0x18, 0x85,
  0x8f, 0x4b, 0x53, 0x47, 0x30, 0x6c, 0xbf, 0xb1, 0x04, 0x6d, 0xae, 0x14,
  0x16, 0xb8, 0x8f, 0xb5, 0x85, 0x51, 0xce, 0xa8, 0x4b, 0x78, 0x18, 0x1b,
  0xc8, 0x72, 0x41, 0x78, 0x09, 0x85, 0xd0, 0x29, 0x7b, 0x07, 0x1f, 0x71,
  0xe5, 0x20, 0x27, 0x6c, 0x44, 0x7f, 0xea, 0xd9, 0xc6, 0x1b, 0xeb, 0x8f,
  0x09, 0x68, 0xd8, 0x36, 0xe9, 0x83, 0x0c, 0xa9, 0x40, 0xf5, 0x67, 0xc4,

  0x5d, 0x5b, 0xcb, 0x5a, 0x5d, 0x0a, 0x19, 0x21, 0x4e, 0x64, 0x91, 0x37,
  0x5d, 0x7a, 0xe8, 0x2c, 0xb3, 0xe4, 0x01, 0x31, 0xc0, 0xdb, 0x87, 0xf3,
  0x95, 0xec, 0xef, 0x8f, 0xae, 0xce, 0x4f, 0xcf, 0xbf, 0x39, 0x40, 0x84,
  0xba, 0xa4, 0x18, 0x61, 0x8b, 0xec, 0xe8, 0x6f, 0xcb, 0x71, 0x3a, 0x62,
  0x4e, 0x21, 0xbd, 0x9b, 0x6b, 0x95, 0x31, 0x89, 0x38, 0x58, 0x81, 0xb9,

  0x78, 0x85, 0x30, 0x92, 0xcc, 0x8b, 0x75, 0x3d, 0x45, 0x3e, 0x5d, 0x9a,
  0xad, 0x1f, 0x91, 0x2a, 0x42, 0x61, 0x00, 0x0a, 0x8f, 0x22, 0x3f, 0x62,

  0xa2, 0x85, 0xd1, 0x51, 0x51, 0x78, 0x73, 0x76, 0x16, 0xb5, 0xf4, 0xed,
  0xd6, 0xda, 0x2d, 0xce, 0x18, 0xa2, 0x81, 0x4c, 0xbe, 0x29, 0xc6, 0xf3,
  0x40, 0xf8, 0x23, 0xb7, 0xa9, 0x71, 0x3d, 0x30, 0x5d, 0xbf, 0xf7, 0x33,
  0x39, 0x29, 0xcf, 0x98, 0x92, 0x03, 0xe9, 0x84, 0xd3, 0x62, 0x4c, 0xb6,
  0x10, 0x30, 0xc9, 0x7c, 0x52, 0xa1, 0x7a, 0x54, 0x93, 0xa4, 0xf5, 0x7e,
  0x4d, 0xab, 0x9c, 0xed, 0x37, 0x6c, 0xe5, 0xd4, 0x80, 0x53, 0x38, 0x22,
  0x49, 0x49, 0xab, 0x40, 0x8f, 0xac, 0x17, 0x52, 0x8f, 0x2f, 0xf4, 0x49,
  0x79, 0xd4, 0x3c, 0x4e, 0x62, 0xd3, 0x71, 0xbe, 0x44, 0x6e, 0xe9, 0xb3,
  0x8b, 0xfb, 0xa4, 0x10, 0xe3, 0xd3, 0x54, 0x11, 0x03, 0xb3, 0xeb, 0x47,
  0x83, 0x1c, 0x9e, 0x0f, 0x54, 0x2d, 0x68, 0x27, 0x4c, 0xdb, 0xed, 0x36,
  0xae, 0x24, 0x89, 0xd6, 0xe4, 0x55, 0x51, 0x93, 0x30, 0x8a, 0xb9, 0xd5,
  0xd7, 0x1b, 0xe8, 0xc3, 0x8d, 0xf4, 0x3f, 0x4c, 0x8c, 0x42, 0xf1, 0xa8,
  0xa1, 0x1d, 0xa4, 0x90, 0x4e, 0x0f, 0xd8, 0x69, 0x87, 0x1a, 0x1c, 0x62,
  0x77, 0x70, 0x67, 0xa4, 0x27, 0x7a, 0xdc, 0xba, 0x69, 0xea, 0xcd, 0x05,
  0x07, 0x5b, 0x07, 0x3a, 0x2d, 0xb9, 0x62, 0xb1, 0x3b, 0x1d, 0xcf, 0xa9,
  0x74, 0x70, 0x33, 0xa1, 0x52, 0xae, 0xd2, 0x4b, 0x50, 0xc3, 0xf4, 0x02,
  0xe0, 0x17, 0x0c, 0x66, 0x26, 0x0f, 0xb9, 0x75, 0xf2, 0xee, 0xcb, 0x22,
  0x6e, 0xba, 0xd6, 0xb9, 0x90, 0x12, 0xa4, 0x4f, 0xe5, 0xd5, 0xe9, 0x4d,
  0xfa, 0x1b, 0xc1, 0xbc, 0x1a, 0x9e, 0x83, 0x48, 0xa4, 0x32, 0xbe, 0xb3,
  0x09, 0x5f, 0xad, 0x8c, 0x4f, 0x8b, 0x55, 0x9a, 0x32, 0x9a, 0x0e, 0xd4,
  0x78, 0x95, 0x74, 0xa8, 0x38, 0x72, 0x0a, 0x59, 0xdc, 0x50, 0x65, 0x0d,
  0x93, 0xc0, 0x1f, 0x4e, 0x2a, 0xbe, 0x24, 0xc8, 0xd5, 0xca, 0x84, 0x25,
  0x72, 0x93, 0x66, 0x77, 0x39, 0xfd, 0x46, 0x82, 0x54, 0x81, 0x14, 0x95,
  0xb4, 0xb5, 0xac, 0xe5, 0xba, 0xb1, 0xab, 0xea, 0xa0, 0xd1, 0x22, 0x02,
  0x58, 0x0b, 0x97, 0x06, 0xba, 0x3d, 0x5b, 0x6c, 0x9b, 0x96, 0x26, 0x29,

  0xf0, 0x65, 0x42, 0xe2, 0xed, 0x46, 0xda, 0xea, 0x1d, 0x5e, 0x9c, 0x95,

  0x89, 0xb4, 0x9f, 0xe6, 0x92, 0x40, 0x15, 0x38, 0x22, 0x6f, 0x52, 0xe3,

  0xfb, 0x69, 0x97, 0x24, 0xa6, 0x4c, 0xc8, 0xec, 0xb5, 0xb5, 0x5f, 0x31,
  0xa3, 0x91, 0x1b, 0x41, 0xe3, 0x0d, 0x1e, 0xdd, 0xe4, 0xb9, 0xd4, 0x9c,
  0xb6, 0x31, 0xdb, 0x88, 0x1b, 0xa4, 0x21, 0x22, 0x46, 0x8b, 0xfe, 0x60,
  0xe0, 0xc3, 0x6c, 0xb0, 0xce, 0x4b, 0xf0, 0x75, 0xa1, 0x06, 0x6b, 0xe8,
  0xa4, 0x75, 0xd9, 0xc6, 0xf3, 0x31, 0xc2, 0x59, 0x98, 0xab, 0x0f, 0xaf,
  0x48, 0x5c, 0x80, 0x45, 0x77, 0x78, 0x7b, 0x24, 0xb3, 0xd2, 0xdd, 0x94,
  0xa0, 0xb0, 0xe3, 0x5c, 0x4b, 0x0b, 0x90, 0x4d, 0x54, 0x43, 0x66, 0x53,
  0x56, 0x0f, 0x68, 0xd0, 0x4c, 0xd3, 0x8a, 0x18, 0xc8, 0x9f, 0x76, 0xb6,

  0xda, 0x98, 0x3c, 0x0e, 0xa4, 0x35, 0xae, 0x78, 0x1b, 0x4b, 0x63, 0x7f,
  0x91, 0x18, 0xb4, 0x85, 0x01, 0x28, 0x43, 0x96, 0x0b, 0xf4, 0xd3, 0xf5,
  0x90, 0x5e, 0xe2, 0xb2, 0x6d, 0xff, 0xc3, 0x56, 0xf1, 0xaf, 0x6d, 0x4a,

  0xd9, 0xd2, 0x93, 0xd2, 0xf2, 0xaf, 0x2b, 0xe7, 0x8c, 0x71, 0xa0, 0x50,
  0x82, 0x99, 0xf2, 0x12, 0xf5, 0x93, 0x38, 0x4a, 0xbb, 0xd5, 0x19, 0xc8,
  0xae, 0xa7, 0xe6, 0x83, 0x72, 0x39, 0x71, 0x34, 0xdf, 0x7c, 0x8d, 0xe7,
  0x8b, 0x28, 0xc0, 0xb2, 0xba, 0x7a, 0x03, 0x34, 0x4d, 0x25, 0xb6, 0x70,
  0x97, 0xb1, 0xb0, 0xc7, 0x59, 0xee, 0xa3, 0xaf, 0x08, 0x23, 0x65, 0x63,
  0x3c, 0x96, 0x74, 0x4d, 0xda, 0x10, 0xfc, 0x52, 0x5d, 0x30, 0x52, 0xce,
  0x59, 0x2f, 0xe8, 0xed, 0x0f, 0x76, 0x8d, 0x90, 0xec, 0x71, 0x17, 0x0a,
  0xbf, 0xc3, 0x6f, 0x77, 0xa2, 0x75, 0xe4, 0xaa, 0x1b, 0x46, 0x79, 0xf5,
  0xeb, 0x9f, 0xb5, 0x39, 0x0b, 0xdb, 0x30, 0x31, 0x4b, 0xc8, 0x66, 0xf2,
  0x2c, 0xea, 0xaf, 0x60, 0xe5, 0x15, 0x20, 0xff, 0xb1, 0xe7, 0x1b, 0x57,
  0x0f, 0x4e, 0x96, 0xb3, 0x90, 0x99, 0x83, 0x77, 0x5b, 0x82, 0x43, 0x69,
  0x59, 0x2e, 0xc5, 0x08, 0x34, 0x00, 0x33, 0x06, 0x71, 0x30, 0x9a, 0xc1,
  0x7c, 0xe8, 0xd3, 0xe5, 0x0c, 0xb3, 0x4a, 0x5a, 0xd5, 0x13, 0xf2, 0x0e,
  0x8b, 0xe2, 0x6b, 0x1a, 0x78, 0xb2, 0x1d, 0x25, 0xa7, 0xc3, 0x8d, 0xe8,
  0xa4, 0x91, 0x1a, 0x6e, 0x42, 0x97, 0x64, 0x55, 0x63, 0xb8, 0xce, 0xc5,
  0xe5, 0xf5, 0xe9, 0xc5, 0xf9, 0x20, 0xfa, 0xb7, 0xce, 0xca, 0xf2, 0xae,
  0x3a, 0xb0, 0xf2, 0x0f, 0x5d, 0x7b, 0x26, 0xd1, 0xa1, 0xf8, 0x19, 0xda,


  0x6c, 0x63, 0x47, 0x89, 0x1f, 0x81, 0xf4, 0x06, 0xfe, 0xaa, 0x6f, 0x0a,
  0xb4, 0x9b, 0x9c, 0x56, 0x03, 0x8d, 0xce, 0xd3, 0x96, 0x0d, 0x9c, 0x5f,
  0xd3, 0x88, 0x66, 0x66, 0x6f, 0x6d, 0x96, 0xc6, 0xf0, 0x61, 0x0e, 0x2c,
  0x9c, 0xaf, 0x96, 0xca, 0x29, 0x2f, 0xd0, 0x16, 0xdf, 0x93, 0x5a, 0xca,
  0x16, 0xf4, 0xba, 0x34, 0x5d, 0x16, 0x45, 0xab, 0x0c, 0x74, 0x98, 0xfb,
  0xe6, 0xe4, 0x1a, 0x9d, 0x34, 0x54, 0xe5, 0x6a, 0x27, 0x48, 0xae, 0x2e,
  0x51, 0x7c, 0x62, 0xa3, 0x9c, 0x69, 0x71, 0x2b, 0x5e, 0x1a, 0xd0, 0x9e,
  0x67, 0x71, 0x16, 0x2c, 0x61, 0x03, 0x8d, 0xf6, 0x18, 0x76, 0x23, 0xb7,
  0xd0, 0xaf, 0xea, 0x3b, 0x71, 0xfa, 0x9a, 0x30, 0x2c, 0xd3, 0xe5, 0x87,
  0x6b, 0xf1, 0x53, 0xbd, 0x39, 0x39, 0x3b, 0xb9, 0x3e, 0x69, 0x5a, 0xee,

  0x43, 0x06, 0xb3, 0xa4, 0x52, 0x97, 0x2a, 0x19, 0xdd, 0x64, 0xf9, 0x2c,
  0x9f, 0xa6, 0xd2, 0x88, 0x37, 0xfa, 0x3e, 0x19, 0xbe, 0x39, 0xfa, 0x0e,
  0xf5, 0x09, 0xf4, 0x39, 0x5d, 0x5e, 0x5d, 0x5c, 0xbe, 0x3d, 0x3d, 0x7f,
  0xd3, 0x8d, 0x8e, 0x2f, 0x2e, 0xff, 0xd2, 0x8d, 0xde, 0x5f, 0x7c, 0x77,
  0x12, 0x48, 0x71, 0x46, 0x84, 0x5b, 0x8f, 0x62, 0x4c, 0xb3, 0x3e, 0x6b,
  0x78, 0x67, 0x1c, 0xb2, 0x70, 0x84, 0x08, 0xe6, 0xff, 0x83, 0xf6, 0x8b,
  0xec, 0x96, 0xee, 0x1a, 0x6c, 0x1d, 0xc8, 0xd0, 0x77, 0x27, 0x47, 0x6f,
  0xba, 0x1e, 0x80, 0x39, 0xb6, 0x52, 0x81, 0x8f, 0xe1, 0xfa, 0xcc, 0xa2,
  0x09, 0xf6, 0x9a, 0xad, 0x0f, 0xd2, 0x10, 0x38, 0xc8, 0xc5, 0x37, 0x16,
  0x08, 0x96, 0xaa, 0xf4, 0xc7, 0x6d, 0x99, 0x13, 0x82, 0xc5, 0xdf, 0xda,
  0xfa, 0xda, 0x29, 0xbb, 0x40, 0x65, 0xcd, 0x55, 0xb3, 0x05, 0xac, 0x89,
  0xd2, 0xea, 0xb5, 0x08, 0xcb, 0xcd, 0x92, 0x6d, 0x41, 0x0c, 0xea, 0xd6,
  0xa0, 0x02, 0x88, 0x1f, 0xb1, 0xeb, 0x31, 0x96, 0x9e, 0x86, 0xd4, 0xb4,

  0x08, 0xcc, 0x24, 0xd4, 0xaa, 0x27, 0x16, 0x25, 0x76, 0xb5, 0x86, 0x2d,
  0x40, 0xea, 0x02, 0xdb, 0x84, 0x9b, 0xa7, 0x1b, 0x64, 0x7a, 0x7a, 0xfe,
  0xc0, 0x3f, 0x16, 0xb0, 0xa8, 0x40, 0xe2, 0xf6, 0x72, 0x02, 0x64, 0x99,
  0x70, 0xca, 0x14, 0x1f, 0x93, 0x71, 0x0b, 0x44, 0xbd, 0x53, 0x75, 0x4a,
  0xac, 0x52, 0xb0, 0xf4, 0xc6, 0xa8, 0x63, 0x86, 0xb1, 0xa2, 0xd4, 0x67,
  0x55, 0x67, 0x13, 0xae, 0x87, 0x04, 0xd7, 0x19, 0xd0, 0xf7, 0xf5, 0x88,
  0x15, 0xcd, 0x48, 0x3c, 0x38, 0xee, 0xa6, 0x10, 0xe8, 0x86, 0xe7, 0xcb,
  0x02, 0x01, 0xeb, 0x09, 0x17, 0x7a, 0x12, 0x58, 0x49, 0x26, 0x1e, 0xd1,
  0x08, 0x43, 0x6f, 0x3d, 0xb6, 0xa5, 0xdd, 0x9c, 0x5f, 0xe5, 0x9e, 0xa2,
  0x9b, 0xca, 0x1c, 0xbc, 0x10, 0x15, 0xad, 0xd3, 0xf6, 0x98, 0x74, 0x7d,
  0x79, 0xbb, 0x5b, 0x0f, 0xd6, 0xc7, 0x8e, 0xda, 0x44, 0x19, 0xf5, 0x04,
  0xeb, 0x9b, 0x8a, 0xf7, 0xbc, 0xad, 0x5b, 0x7f, 0xdb, 0xc2, 0x18, 0x5d,
  0xaf, 0xad, 0x29, 0xe8, 0x37, 0x2c, 0xea, 0xec, 0x14, 0xae, 0x43, 0x00,
  0x1a, 0x87, 0x9b, 0xee, 0x72, 0x3a, 0x02, 0xe9, 0x55, 0xb4, 0xfb, 0x30,
  0x96, 0xff, 0x61, 0x6c, 0x70, 0x1f, 0xfc, 0x32, 0xfe, 0xe2, 0xa9, 0x4f,
  0x7b, 0x67, 0x76, 0x75, 0x72, 0x7d, 0xd5, 0x8f, 0xd6, 0x5d, 0xcc, 0xd7,
  0x17, 0xfd, 0x2d, 0x3f, 0x68, 0x73, 0xfa, 0xfe, 0x28, 0xbc, 0x5e, 0xfc,
  0x45, 0xdb, 0x57, 0x89, 0x37, 0xe0, 0x77, 0xfd, 0x3c, 0x62, 0x07, 0xe9,
  0x69, 0x2b, 0xf4, 0xbd, 0xc1, 0xfb, 0x96, 0xfd, 0xc5, 0x5f, 0xac, 0x58,
  0xe5, 0xbb, 0x93, 0xb3, 0x40, 0x6f, 0x9f, 0xef, 0xae, 0xde, 0xfe, 0xa5,
  0xbe, 0xca, 0xdd, 0xbd, 0xc0, 0x57, 0x7f, 0x4b, 0x87, 0x7a, 0x52, 0xe6,
  0x33, 0x50, 0x58, 0xa8, 0x8a, 0x83, 0x8a, 0x38, 0x0e, 0x40, 0x04, 0x60,
  0xae, 0xf9, 0x5f, 0xbb, 0xf2, 0x97, 0x9f, 0xfa, 0xfd, 0xfe, 0x97, 0x3e,


  0x2a, 0x3a, 0xf9, 0x68, 0xcc, 0x72, 0xe5, 0xd9, 0xa6, 0x05, 0x4e, 0x55,
  0x33, 0x54, 0x25, 0x84, 0x51, 0x8b, 0x45, 0x9c, 0x16, 0xd4, 0x13, 0x28,
  0x28, 0x70, 0x71, 0x49, 0xb6, 0xd2, 0xcb, 0x68, 0x73, 0x82, 0x08, 0xc6,
  0xd7, 0x75, 0xbd, 0xdc, 0x90, 0xba, 0x6a, 0x2b, 0x83, 0xe3, 0xb1, 0xe7,
  0x08, 0xe1, 0xbe, 0x2c, 0xf8, 0xd9, 0x02, 0xfd, 0xb3, 0x6c, 0xeb, 0x58,
  0x59, 0x9b, 0xa9, 0xec, 0x90, 0xd5, 0x8f, 0xcd, 0xf4, 0x83, 0xde, 0x0b,
  0xa9, 0x93, 0x3c, 0x96, 0x90, 0x3a, 0x39, 0x92, 0x63, 0x12, 0x2b, 0xd4,
  0x66, 0x36, 0xa9, 0x46, 0x9b, 0xb8, 0xce, 0xb2, 0xa6, 0x01, 0x1a, 0x15,
  0xce, 0x73, 0x22, 0xb9, 0x79, 0x92, 0x54, 0x41, 0xcb, 0xc9, 0x2d, 0x4e,




  0x49, 0x82, 0x2d, 0xe2, 0x75, 0x34, 0x75, 0xd6, 0x0f, 0x7c, 0x6e, 0x56,
  0xeb, 0x88, 0xe4, 0x56, 0x20, 0x6a, 0xab, 0x0b, 0x8f, 0x1d, 0x3a, 0x65,
  0x6a, 0xbe, 0xda, 0x4f, 0xdc, 0x59, 0x29, 0x09, 0x13, 0x29, 0x08, 0x7d,

  0x7c, 0x52, 0x93, 0x08, 0xea, 0xa1, 0x73, 0x0f, 0xbd, 0xa5, 0xf6, 0x99,
  0x26, 0xc0, 0x48, 0xe2, 0x6a, 0xc4, 0xe3, 0x4a, 0x7d, 0x79, 0xf8, 0xb5,
  0x49, 0xd8, 0xa0, 0x32, 0xf3, 0xb5, 0x7f, 0x5b, 0x43, 0x45, 0x98, 0x5e,
  0x0f, 0xd6, 0xb6, 0x2b, 0xe1, 0xa2, 0x61, 0x83, 0x4f, 0x05, 0xf4, 0x06,
  0xb3, 0x29, 0x86, 0xf8, 0x94, 0x97, 0xba, 0xc4, 0x43, 0x4b, 0xe8, 0x47,
  0xdf, 0xa7, 0xb3, 0xf1, 0x28, 0x2e, 0x28, 0x3d, 0xcc, 0x17, 0xaf, 0x42,
  0x26, 0x7c, 0x9f, 0xca, 0x9c, 0xbe, 0x6a, 0x2f, 0x8f, 0x36, 0x93, 0x09,
  0x53, 0x7d, 0xa0, 0xe8, 0xc7, 0x1c, 0x06, 0x06, 0xbf, 0xdb, 0x8a, 0xce,
  0x98, 0x7c, 0x74, 0x8f, 0x51, 0xd4, 0xd5, 0x3b, 0x78, 0xd4, 0xcf, 0x55,
  0xe3, 0x10, 0xbd, 0x3d, 0x3f, 0x96, 0x92, 0x2e, 0xee, 0xf6, 0xc8, 0x7d,
  0xf5, 0xa2, 0xcb, 0xff, 0x7a, 0x61, 0xcb, 0x4f, 0x1c, 0x23, 0x8d, 0xed,
  0x18, 0xd6, 0xfa, 0x4f, 0x2f, 0xb5, 0xc8, 0xb5, 0xc9, 0x13, 0x07, 0x0e,
  0x26, 0x39, 0xcf, 0x52, 0xcb, 0xd6, 0xe0, 0x1d, 0x9d, 0x2d, 0xee, 0x08,
  0xf0, 0xaf, 0xbf, 0x0e, 0x0b, 0x84, 0x1d, 0xa9, 0xca, 0x9f, 0x56, 0xd5,
  0x13, 0x83, 0xce, 0xff, 0xb2, 0x1f, 0x68, 0xbf, 0x1d, 0xfc, 0x90, 0x49,
  0xf7, 0xb5, 0x5f, 0x43, 0xa0, 0x28, 0x0a, 0xdb, 0x61, 0xd6, 0x8f, 0x2d,
  0x27, 0x0e, 0x7e, 0xe8, 0xd5, 0x13, 0x1f, 0xe2, 0x23, 0x35, 0xb8, 0x6f,
  0xf7, 0x4a, 0x15, 0x66, 0xfa, 0xd2, 0x4b, 0x7b, 0xaf, 0xbf, 0xf5, 0xfc,
  0x0c, 0x65, 0x6b, 0x7c, 0x33, 0xfc, 0x20, 0xff, 0x84, 0xa8, 0x44, 0x52,
  0xc4, 0xf2, 0x36, 0x9a, 0x5b, 0xd9, 0x19, 0x03, 0x61, 0x73, 0x6a, 0xbc,
  0x1c, 0x36, 0x80, 0x4a, 0x84, 0x0a, 0x30, 0x0e, 0x4b, 0x6f, 0x07, 0x4e,
  0xb3, 0x86, 0xbb, 0x45, 0x78, 0x22, 0x06, 0x45, 0xf9, 0xc7, 0x08, 0xbf,
  0xa0, 0x5c, 0xee, 0x04, 0x8b, 0x98, 0xae, 0x4e, 0xde, 0x7e, 0x18, 0x9c,
  0xbc, 0x89, 0xe2, 0x00, 0x04, 0x16, 0xc5, 0x4b, 0x53, 0x72, 0xcb, 0x49,


  0x83, 0xa0, 0x2a, 0xcf, 0x39, 0x23, 0x48, 0xe6, 0xe2, 0xf5, 0x1c, 0x94,
  0xe4, 0x22, 0xb0, 0x8c, 0xfd, 0xba, 0x13, 0xd6, 0xe3, 0xe4, 0xc5, 0x5f,
  0x80, 0x3b, 0xc2, 0xab, 0x1e, 0x27, 0xd8, 0x9c, 0xeb, 0x90, 0xb3, 0x60,






  0x3c, 0x50, 0x35, 0xdb, 0xc6, 0xab, 0x9c, 0x25, 0xc9, 0x42, 0x8a, 0xfe,
  0x6c, 0x27, 0x79, 0x38, 0x1b, 0xf5, 0x04, 0x4a, 0x73, 0x0e, 0x1a, 0x55,
  0x03, 0x87, 0x71, 0x4b, 0x27, 0x29, 0x82, 0x57, 0xe3, 0x8c, 0x75, 0x8b,



  0x19, 0x60, 0xb7, 0x85, 0x77, 0x65, 0x3d, 0xad, 0x1a, 0x2e, 0x74, 0xaf,
  0xab, 0x1e, 0xb9, 0xd4, 0x11, 0xa0, 0x07, 0xec, 0x22, 0x9e, 0x4c, 0x3c,

  0x9b, 0xe6, 0x05, 0x8c, 0x37, 0x37, 0x75, 0x8a, 0x0c, 0xe7, 0x50, 0x6e,
  0x34, 0x7b, 0x71, 0xfa, 0x35, 0xdf, 0x5c, 0xea, 0x48, 0x21, 0xf0, 0x84,

  0x6b, 0xb8, 0x91, 0x2d, 0xf0, 0x3e, 0x91, 0xc7, 0x04, 0xc3, 0x83, 0x2c,
  0xd3, 0x06, 0x52, 0x75, 0x4d, 0xfb, 0xc1, 0x5b, 0xe8, 0x99, 0x9b, 0xd8,

  0x75, 0xa4, 0xe9, 0xce, 0x51, 0xd5, 0x5d, 0xc3, 0x01, 0xee, 0xdc, 0x7f,
  0xcf, 0x6e, 0x6e, 0xdb, 0x3b, 0xa1, 0x1b, 0x30, 0x8f, 0x1f, 0xc8, 0x45,
  0xd5, 0x4a, 0x0e, 0xec, 0xb0, 0xc5, 0xed, 0xc0, 0xc7, 0x0a, 0x66, 0xf9,
  0xc4, 0x60, 0x6d, 0xe5, 0x0b, 0xe7, 0x25, 0x99, 0x93, 0x16, 0x07, 0x16,
  0xd9, 0xdd, 0x7e, 0xe8, 0x91, 0xd2, 0xb8, 0x4d, 0x4b, 0x33, 0xf2, 0x13,
  0xc6, 0xb8, 0x4c, 0x34, 0xe2, 0xd6, 0xb9, 0xb5, 0x14, 0x7d, 0x6f, 0x03,

  0x7f, 0x3c, 0xcb, 0x31, 0x4a, 0xc9, 0xc4, 0x40, 0xdf, 0xf7, 0x21, 0xfb,
  0xd0, 0x48, 0x28, 0x90, 0x10, 0xd5, 0xa0, 0x65, 0x9f, 0x30, 0xb5, 0xb2,
  0xa1, 0x62, 0x31, 0x04, 0x30, 0x63, 0x0f, 0xd8, 0xc4, 0x8e, 0x23, 0x6f,
  0x7a, 0x39, 0xac, 0x3c, 0x0e, 0x2b, 0x0a, 0x34, 0x44, 0xb7, 0x8e, 0xac,

  0x2c, 0x9b, 0x4d, 0xe5, 0x99, 0xd4, 0xa0, 0x9a, 0x5a, 0xa9, 0x49, 0x8d,
  0x7c, 0x40, 0x55, 0xeb, 0x6a, 0xfb, 0x1c, 0x2a, 0x6d, 0xc2, 0xe5, 0x90,
  0x9d, 0x19, 0x67, 0xee, 0x5c, 0xe9, 0x00, 0x60, 0x8c, 0x34, 0x1f, 0x53,
  0x51, 0x14, 0xb7, 0xe1, 0x69, 0x83, 0x8f, 0x91, 0xb9, 0xac, 0xa1, 0xa7,
  0xf2, 0x21, 0x9d, 0x2f, 0xe7, 0xf4, 0x7e, 0x97, 0xcb, 0x1f, 0xe7, 0x28,
  0xb5, 0xf4, 0x50, 0x29, 0xbb, 0xb0, 0x52, 0x8a, 0x0a, 0x39, 0x33, 0x90,
  0xb7, 0x11, 0xd1, 0x56, 0x9c, 0xf1, 0x83, 0x6f, 0x71, 0x8b, 0x0d, 0x3a,
  0xa8, 0xff, 0x76, 0xfa, 0x8c, 0x0e, 0x41, 0xa3, 0xfb, 0xd2, 0x9f, 0x84,
  0xcf, 0x3a, 0x88, 0x2e, 0x31, 0xcf, 0x39, 0x19, 0x3b, 0x56, 0xa4, 0x90,
  0x1b, 0x81, 0xd8, 0xf0, 0x19, 0xb5, 0x73, 0x28, 0x69, 0x35, 0x49, 0xf3,
  0x15, 0x8a, 0xc7, 0xa5, 0x5a, 0xe7, 0x2f, 0x8b, 0x25, 0xa1, 0xfb, 0x29,

  0x43, 0xfa, 0x2d, 0x17, 0x9e, 0xcc, 0x37, 0x7c, 0xc2, 0xa8, 0xa3, 0xf0,
  0xf9, 0x2d, 0xc9, 0x89, 0x11, 0xdb, 0x16, 0xfd, 0xe5, 0xb2, 0xc7, 0xc6,
  0x8d, 0x25, 0x0d, 0x17, 0xc2, 0x9d, 0x35, 0x89, 0x97, 0x79, 0x42, 0x84,

  0x15, 0x53, 0x86, 0x43, 0x3a, 0xc0, 0x4d, 0xe1, 0xe3, 0xeb, 0x6a, 0x19,



  0xde, 0xde, 0xc3, 0x83, 0x47, 0xe1, 0x8e, 0x41, 0xcc, 0x78, 0x93, 0x6c,
  0x2d, 0xef, 0x6d, 0x7d, 0x8e, 0xff, 0xdc, 0x7f, 0x68, 0x18, 0xcd, 0xfd,



  0x20, 0x38, 0xa4, 0x96, 0xe5, 0xc6, 0xc3, 0x9c, 0x43, 0x70, 0xbc, 0x61,
  0xb1, 0xb3, 0x99, 0x1a, 0x45, 0x90, 0xce, 0xaf, 0xf7, 0x31, 0x6e, 0x6e,
  0x9e, 0xf9, 0xa9, 0x0d, 0x94, 0x8b, 0xe9, 0xf4, 0x7a, 0xd5, 0x40, 0x29,
  0x35, 0x2d, 0x04, 0xe5, 0x1f, 0x37, 0x53, 0xf7, 0x4a, 0x07, 0x1d, 0xe7,
  0x4b, 0x0e, 0x64, 0x26, 0x5e, 0x64, 0x2c, 0xe5, 0xdd, 0xc7, 0x2b, 0x05,


  0x22, 0x2b, 0x9d, 0xe1, 0x3b, 0x7c, 0xaf, 0xcb, 0x68, 0x1b, 0x8e, 0x21,

  0xcd, 0x96, 0x95, 0x01, 0xeb, 0xa3, 0x0f, 0x2a, 0x85, 0x06, 0x77, 0x1f,
  0xf9, 0xbc, 0x11, 0x2c, 0xc2, 0x0b, 0x4a, 0x27, 0x40, 0xc8, 0xf7, 0x84,
  0x74, 0x72, 0x71, 0xf0, 0xb8, 0x52, 0x36, 0xe0, 0x2a, 0x32, 0x51, 0x58,
  0xe9, 0xdc, 0x94, 0x3c, 0xc0, 0x66, 0x33, 0x88, 0x52, 0x64, 0x84, 0x83,
  0x15, 0x6a, 0x92, 0x21, 0xcc, 0x0d, 0x1b, 0x02, 0x99, 0x3f, 0x35, 0x26,
  0x6e, 0x5a, 0x78, 0x11, 0x9f, 0xcb, 0x2b, 0xb9, 0x92, 0xa6, 0xf9, 0x1a,

  0x6b, 0x6d, 0xe1, 0xab, 0x2d, 0x0d, 0xd4, 0x18, 0x5b, 0x0f, 0xb4, 0xb6,
  0x17, 0x58, 0x0d, 0xec, 0x14, 0xa2, 0xc1, 0x49, 0x98, 0xac, 0x4d, 0x1c,
  0xfe, 0x8a, 0x3e, 0x7d, 0x84, 0x21, 0xe3, 0x83, 0x90, 0x46, 0xe6, 0x16,
  0x73, 0x23, 0xeb, 0x25, 0x5e, 0x40, 0xfe, 0xfa, 0x44, 0xf1, 0xb8, 0x11,
  0xa9, 0x9b, 0x2f, 0xab, 0x71, 0xc0, 0x73, 0x3a, 0x40, 0xf2, 0xe0, 0x73,



  0xe6, 0x90, 0xaa, 0xf3, 0x3b, 0xb2, 0xa3, 0x32, 0x46, 0xf8, 0xc9, 0x65,
  0x75, 0xf3, 0x73, 0x3a, 0x0e, 0x22, 0x37, 0xe0, 0x6d, 0x80, 0x5f, 0xc3,
  0xa9, 0x95, 0xec, 0xfe, 0x52, 0x64, 0xd3, 0x68, 0x5d, 0x5e, 0xdb, 0xe8,
  0x46, 0xe3, 0x25, 0x39, 0xe4, 0x06, 0x47, 0x83, 0xb3, 0xe8, 0xf2, 0xec,
  0xe8, 0xf4, 0x1c, 0xde, 0xe9, 0xf9, 0x46, 0xaa, 0x01, 0x2c, 0xeb, 0x36,
  0x5b, 0x8c, 0x91, 0xc7, 0xb3, 0x8e, 0x69, 0x66, 0xbe, 0xc3, 0x1f, 0xf2,
  0x31, 0x8d, 0xc6, 0x24, 0x4a, 0x6b, 0xb5, 0x07, 0xbd, 0xa5, 0x66, 0x3c,
  0xb5, 0xa3, 0xea, 0x58, 0xa5, 0x49, 0x33, 0x65, 0x24, 0x15, 0xd5, 0x89,
  0x35, 0xf2, 0x65, 0x04, 0xc9, 0x75, 0x97, 0xc8, 0xd4, 0xfc, 0xd5, 0xc0,
  0xca, 0x6d, 0x76, 0x11, 0xce, 0x10, 0x66, 0xc4, 0x1d, 0xb3, 0x80, 0x2a,
  0x9c, 0x61, 0x09, 0xdc, 0xcd, 0x64, 0xb9, 0x52, 0xc6, 0x60, 0x5b, 0x26,
  0x14, 0x4c, 0x0a, 0xdd, 0x8e, 0x98, 0x1c, 0x2a, 0xdb, 0xa4, 0x62, 0xd6,
  0xc9, 0xca, 0x8f, 0xa9, 0x70, 0xd8, 0x58, 0x69, 0xb8, 0xd8, 0xb5, 0xd2,
  0x93, 0xd0, 0xc3, 0xfc, 0xa1, 0x6b, 0x61, 0x12, 0xa8, 0xb4, 0xc9, 0xe4,
  0x37, 0x4c, 0x81, 0x99, 0x11, 0x0c, 0x15, 0x8f, 0x04, 0x83, 0x76, 0x4d,
  0xa6, 0x7b, 0x79, 0x13, 0xfb, 0x05, 0x03, 0x73, 0xd0, 0x6e, 0x61, 0x40,
  0xd7, 0x35, 0xba, 0x8a, 0xc6, 0x5e, 0x34, 0x7a, 0x79, 0x13, 0x8d, 0xa5,
  0x4d, 0x1d, 0xe7, 0x84, 0xb2, 0x6c, 0x4d, 0x8e, 0x9c, 0xe1, 0xce, 0x30,
  0x04, 0xd1, 0x51, 0x9d, 0x1c, 0x56, 0x02, 0xb0, 0x6f, 0x37, 0xbe, 0xf7,
  0x89, 0x50, 0x62, 0x19, 0xb5, 0xbb, 0xad, 0xf1, 0x65, 0x79, 0xc0, 0x5f,
  0xb7, 0x60, 0xd4, 0xfe, 0x64, 0x18, 0xd9, 0x0b, 0xab, 0x99, 0xb8, 0x41,
  0x69, 0x08, 0x1e, 0x8a, 0x9e, 0xd8, 0x94, 0xd4, 0xb8, 0xa7, 0x32, 0x4c,
  0x18, 0x7a, 0x56, 0x57, 0x3e, 0x40, 0xea, 0xc7, 0x0e, 0xbe, 0xbd, 0x10,
  0x8c, 0x95, 0x89, 0xcf, 0x8a, 0x9d, 0x55, 0xd2, 0xd3, 0x98, 0x28, 0x57,
  0x89, 0x3a, 0x67, 0x24, 0x39, 0x8e, 0x61, 0xf3, 0xcd, 0xb0, 0x01, 0x82,
  0xdf, 0x2e, 0x81, 0x53, 0x10, 0x26, 0xdc, 0x24, 0x55, 0x67, 0xe0, 0x8c,
  0xe9, 0xf1, 0x61, 0x6a, 0xa2, 0x41, 0x74, 0xf6, 0xf7, 0x65, 0x9a, 0x50,
  0x37, 0x5f, 0x90, 0xc3, 0xd1, 0x1b, 0xce, 0x98, 0x94, 0x66, 0xa3, 0xdc,
  0xd5, 0x98, 0x3a, 0x1f, 0xe3, 0xa3, 0x66, 0x02, 0x1e, 0x1f, 0x86, 0x09,
  0xa1, 0x7c, 0x7a, 0x4f, 0x93, 0x3e, 0xc6, 0x49, 0xcf, 0x41, 0x00, 0x92,
  0x5f, 0xcb, 0x41, 0xd7, 0xd3, 0x64, 0x1a, 0xad, 0x70, 0x61, 0x51, 0x15,
  0x97, 0xb7, 0x7e, 0x0d, 0x4b, 0xb7, 0xd6, 0xa9, 0x8d, 0x7c, 0x29, 0xc2,

  0x98, 0x2a, 0x6c, 0xf3, 0x97, 0xc5, 0xb3, 0xcd, 0xb2, 0x1a, 0xa3, 0x5e,
  0xb0, 0xcc, 0x66, 0x38, 0x49, 0x1c, 0xaa, 0xa5, 0x6f, 0x68, 0x00, 0x87,
  0x8a, 0x20, 0xd0, 0x1b, 0x07, 0x44, 0x31, 0x1d, 0xc3, 0x06, 0xa5, 0x96,
  0xcf, 0x35, 0xec, 0xf0, 0x27, 0x22, 0x57, 0x7d, 0x50, 0x2c, 0x77, 0xab,
  0x90, 0xed, 0xf0, 0x8a, 0x69, 0x23, 0x6b, 0xe7, 0xb6, 0x0a, 0x22, 0xe4,
  0x0e, 0x27, 0x04, 0x84, 0x36, 0xcc, 0x4b, 0x05, 0x4f, 0x87, 0x45, 0xc2,
  0xeb, 0xb5, 0xfb, 0x44, 0x10, 0x74, 0xbf, 0x10, 0xe5, 0x87, 0xfb, 0xa5,
  0x3b, 0x18, 0x3f, 0xab, 0xda, 0xa4, 0xfb, 0x4d, 0xe6, 0x7f, 0x31, 0xc0,
  0x4f, 0x08, 0xc1, 0x0c, 0x5d, 0x2c, 0x26, 0x27, 0x58, 0x12, 0xfd, 0x6a,
  0x40, 0x37, 0xe4, 0xd4, 0xc0, 0xc4, 0x8b, 0x40, 0x8b, 0x4e, 0x20, 0xa7,
  0xa5, 0x60, 0x83, 0x8c, 0x66, 0xa0, 0x03, 0x05, 0x1c, 0x31, 0x03, 0x01,
  0x86, 0x43, 0x18, 0xbc, 0x6e, 0x53, 0x64, 0x97, 0x4b, 0x54, 0xcd, 0x67,
  0x4b, 0xfc, 0x36, 0x23, 0xc8, 0x19, 0x04, 0x33, 0x85, 0x34, 0x08, 0xa2,
  0xfe, 0x19, 0x08, 0x32, 0xbc, 0xa3, 0x0e, 0x00, 0xa2, 0x62, 0xfa, 0x1a,
  0x6c, 0xc0, 0x26, 0x46, 0x54, 0xbf, 0x65, 0x76, 0xe8, 0x2d, 0xe1, 0x61,
  0x12, 0x01, 0x58, 0x75, 0x1c, 0x53, 0x58, 0xe6, 0xa5, 0xd3, 0x11, 0x84,

  0x40, 0xc1, 0xd4, 0x09, 0xa2, 0xba, 0x51, 0xce, 0x04, 0x2b, 0x5f, 0xee,





  0xdc, 0x54, 0x43, 0x51, 0x00, 0x01, 0xaa, 0xbc, 0x70, 0x70, 0x00, 0x81,
  0x00, 0x32, 0x2f, 0x1e, 0x88, 0xc8, 0x5c, 0xdc, 0x58, 0x90, 0x78, 0x0e,
  0x2b, 0xd4, 0x52, 0x44, 0x56, 0xea, 0xdd, 0xab, 0x4d, 0x89, 0x21, 0x9a,
  0xb2, 0x50, 0x06, 0x3f, 0xbf, 0xb4, 0xae, 0x20, 0x3d, 0xf4, 0xda, 0x46,
  0x2d, 0x6e, 0x96, 0xd7, 0x60, 0xa8, 0x7f, 0x57, 0x9d, 0x6b, 0xbf, 0xde,
  0x50, 0x4f, 0x20, 0x1d, 0x7f, 0xd5, 0x85, 0x8a, 0x9f, 0x77, 0xa3, 0x5a,
  0xaa, 0x6d, 0xfe, 0xdf, 0xbc, 0x51, 0xf1, 0xf3, 0xae, 0x54, 0x5c, 0xbb,
  0x53, 0xb8, 0x4c, 0x9f, 0x2d, 0x3d, 0xb4, 0xce, 0xf8, 0x37, 0xbc, 0x65,
  0x26, 0x31, 0xe9, 0xb9, 0x77, 0x4c, 0x69, 0xe2, 0xff, 0xed, 0x5b, 0xf6,
  0x79, 0x43, 0x0b, 0x24, 0x7c, 0xd4, 0x15, 0x7d, 0x2b, 0xdd, 0xdc, 0x2d,
  0x54, 0x90, 0x51, 0xd7, 0xda, 0x34, 0x50, 0x86, 0xe1, 0xe6, 0x95, 0x0c,
  0xbd, 0x15, 0x0c, 0x5d, 0xe6, 0x7a, 0xb4, 0xfb, 0xe6, 0x38, 0x14, 0x77,
  0x60, 0xe5, 0xc8, 0x9e, 0xf3, 0x56, 0x11, 0xa2, 0x2d, 0x6e, 0x4a, 0x5f,
  0xd4, 0x07, 0x5d, 0xd3, 0x14, 0xe4, 0xfa, 0x22, 0x25, 0xed, 0x00, 0x14,
  0x17, 0x34, 0x6f, 0xbf, 0x19, 0x0c, 0x7a, 0x47, 0x97, 0xa7, 0xd1, 0x13,
  0x76, 0x17, 0xe1, 0xc2, 0xd8, 0x39, 0x86, 0xec, 0xe5, 0xf6, 0x34, 0xac,

  0xfa, 0xd7, 0x41, 0xcf, 0x6d, 0x6e, 0xeb, 0x51, 0x19, 0xd5, 0xd2, 0x8c,
  0x75, 0x52, 0xa6, 0xe5, 0x06, 0x6a, 0xdb, 0x8a, 0xba, 0x4c, 0xa9, 0xfe,
  0xe8, 0xac, 0x41, 0xae, 0x45, 0x0f, 0x78, 0x39, 0xd9, 0x84, 0xb0, 0x83,
  0xe8, 0x38, 0xdb, 0xaf, 0x5e, 0x6c, 0xc3, 0xad, 0x78, 0x64, 0xd4, 0x47,
  0x79, 0x79, 0xaf, 0xbf, 0xbb, 0xb9, 0xd7, 0xdf, 0x43, 0x9e, 0x26, 0xc1,
  0x52, 0x72, 0x76, 0xc8, 0xf0, 0xc0, 0xed, 0x02, 0x59, 0x49, 0x2c, 0xc4,


  0xce, 0x4f, 0x8e, 0x23, 0x4e, 0x5d, 0x25, 0x18, 0xc0, 0x86, 0xd1, 0xc5,
  0x19, 0x6e, 0x94, 0xc2, 0x22, 0x47, 0xc8, 0xc4, 0xea, 0x39, 0x29, 0xbc,
  0xed, 0x50, 0x53, 0x82, 0x2c, 0xae, 0xcc, 0x4c, 0x04, 0xd9, 0x1d, 0x5b,
  0x15, 0xb2, 0x2f, 0x38, 0x47, 0xbf, 0x02, 0xcd, 0xd9, 0x12, 0x67, 0xc3,
  0x9e, 0x48, 0x2f, 0xdf, 0x6b, 0x3f, 0x1f, 0x35, 0x5f, 0x5a, 0x0c, 0x20,
  0xeb, 0xb9, 0xf7, 0xec, 0x1c, 0x61, 0x88, 0x6a, 0x94, 0xa2, 0x0b, 0x72,

  0x34, 0x37, 0x26, 0xc9, 0xe4, 0xef, 0xe3, 0xac, 0xff, 0x4b, 0xed, 0xa9,
  0x80, 0x42, 0xec, 0x98, 0x4d, 0x3a, 0x75, 0x61, 0x64, 0x62, 0x2b, 0xb5,
  0x2d, 0x48, 0x4c, 0xa4, 0xa6, 0x87, 0x8c, 0x49, 0x00, 0x2f, 0x33, 0x5b,
  0x50, 0xce, 0x50, 0x66, 0xfc, 0xc0, 0xcf, 0x74, 0xf4, 0x80, 0x41, 0x8e,
  0x1f, 0xe3, 0xb1, 0x8a, 0x24, 0x9e, 0xc9, 0xac, 0x9c, 0xef, 0xf8, 0xbf,
  0xc4, 0xdd, 0x23, 0x66, 0x5b, 0xfa, 0x69, 0x99, 0x12, 0x54, 0x70, 0xa6,
  0x60, 0xd2, 0xb4, 0x6c, 0x27, 0x97, 0x45, 0x01, 0xe2, 0x24, 0x5d, 0xc4,
  0xb3, 0xe8, 0x19, 0xb5, 0x05, 0xed, 0x87, 0xff, 0x44, 0x9f, 0x5e, 0x9a,
  0xbd, 0xde, 0xce, 0x15, 0x8c, 0x4e, 0x52, 0x8f, 0x9a, 0x52, 0x35, 0xc0,

  0xe5, 0x5a, 0x06, 0x43, 0xe4, 0x04, 0xcb, 0xcd, 0x94, 0xe2, 0x9a, 0x09,
  0x34, 0x60, 0x49, 0x1a, 0xcf, 0x2b, 0xba, 0xe3, 0x6c, 0x28, 0x4d, 0x87,
  0x95, 0x9a, 0xd7, 0x8d, 0x26, 0x23, 0x0c, 0x31, 0xf7, 0x2a, 0x17, 0xa6,
  0xf8, 0x24, 0xe7, 0xfd, 0x2d, 0x98, 0x21, 0xaa, 0x70, 0xec, 0x67, 0xf8,
  0xe5, 0xca, 0x9c, 0x6c, 0x61, 0xb4, 0x4e, 0x69, 0x20, 0x52, 0x23, 0xac,
  0x38, 0xa1, 0x9a, 0x58, 0x10, 0x70, 0x16, 0x51, 0xd4, 0x98, 0x08, 0x04,
  0x37, 0xe4, 0x09, 0xd3, 0x2a, 0xa0, 0xf8, 0x79, 0x7c, 0xf6, 0xff, 0x09,

  0x35, 0x70, 0x3f, 0x32, 0x67, 0xf5, 0x1c, 0x75, 0x90, 0x91, 0xd5, 0xb9,
  0xdf, 0xb8, 0x07, 0x7d, 0x67, 0x4d, 0xae, 0xff, 0x5f, 0x1b, 0xfc, 0x3f,
  0x49, 0x1b, 0xfc, 0x57, 0x6e, 0x69, 0x4f, 0xf2, 0x9a, 0xf9, 0x5a, 0x9a,
  0xcc, 0x2a, 0xa9, 0x43, 0x09, 0x16, 0x1c, 0xcc, 0x1e, 0xfb, 0x51, 0x0b,
  0xbc, 0xf1, 0x13, 0x57, 0xd4, 0x27, 0x85, 0xff, 0x37, 0xae, 0xe8, 0xb3,
  0x6e, 0xe6, 0xff, 0xef, 0xfb, 0xf8, 0xdf, 0xed, 0x1e, 0x06, 0x08, 0x52,
  0x07, 0x5b, 0x07, 0x32, 0xbb, 0xc7, 0xac, 0x3d, 0x6e, 0x76, 0x46, 0x96,
  0xf6, 0x86, 0x55, 0x7d, 0xb0, 0x1c, 0x8f, 0xb7, 0xee, 0xf4, 0xf2, 0xbb,


  0x17, 0x84, 0xc2, 0x33, 0x68, 0x26, 0xb3, 0x14, 0xd1, 0xd9, 0x9b, 0xa3,

  0xcb, 0x5f, 0x70, 0xdb, 0xff, 0x42, 0x6e, 0xd6, 0x45, 0x92, 0x8c, 0x7b,
  0x1c, 0x37, 0x3c, 0xa4, 0x7f, 0x04, 0x03, 0xee, 0x8a, 0xae, 0x41, 0x64,
  0x8b, 0xe1, 0x44, 0x3f, 0x8f, 0x81, 0x5e, 0x06, 0x35, 0x25, 0x13, 0xcc,

  0x9b, 0x05, 0xb5, 0x5d, 0xf6, 0x7c, 0x2c, 0x79, 0x36, 0xde, 0x10, 0x15,
  0x90, 0xbf, 0x4d, 0xa4, 0x22, 0xf9, 0x27, 0x78, 0xbd, 0xa7, 0x88, 0x8b,

  0x67, 0xa0, 0x43, 0x9d, 0x67, 0x38, 0x13, 0x2f, 0x98, 0x0c, 0xf5, 0x68,
  0x97, 0xc2, 0x21, 0x4f, 0x46, 0xaf, 0xdb, 0xdd, 0x42, 0xff, 0x3b, 0x71,
  0x90, 0xa4, 0xfa, 0x84, 0x68, 0x1b, 0xcd, 0xcf, 0xb7, 0xa5, 0xd3, 0xac,
  0xdc, 0x4a, 0xf7, 0x24, 0x6a, 0x3b, 0x88, 0x11, 0x72, 0x0e, 0x1d, 0x7a,
  0x5d, 0xca, 0x9d, 0x6f, 0x72, 0x06, 0x09, 0xcf, 0xd7, 0x7c, 0xa2, 0xbe,
  0x97, 0xa7, 0x93, 0xfa, 0x76, 0x06, 0xb2, 0x77, 0xbb, 0xb5, 0x6c, 0x25,
  0x77, 0x4a, 0x26, 0x4e, 0xbe, 0x1d, 0xa9, 0x6b, 0x9f, 0x31, 0x25, 0x04,
  0xca, 0xe2, 0x2f, 0x7e, 0x36, 0xa5, 0xf3, 0xfa, 0x53, 0x9d, 0x88, 0xf3,
  0xac, 0x2a, 0xa8, 0xc5, 0x88, 0xa6, 0x10, 0x94, 0x0a, 0xda, 0xbf, 0x74,
  0xba, 0x39, 0xc7, 0x54, 0x28, 0x40, 0xbb, 0xe6, 0xb7, 0xdb, 0xe4, 0xfb,
  0x9d, 0x54, 0xa3, 0xbe, 0x39, 0x59, 0x02, 0x30, 0x84, 0x5f, 0x8d, 0x40,
  0xc5, 0xd5, 0x8e, 0xd4, 0x5d, 0x6a, 0xe1, 0xa6, 0xcd, 0xd9, 0x5a, 0x7c,
  0x15, 0x9a, 0x09, 0xf3, 0xe9, 0xdb, 0xb3, 0xad, 0xee, 0x7f, 0xe8, 0x43,
  0x48, 0xa8, 0x3b, 0xc6, 0x70, 0x85, 0x18, 0xd8, 0x19, 0x81, 0x2f, 0x50,
  0x93, 0x64, 0x8c, 0x04, 0x4f, 0x66, 0xf1, 0xbd, 0xd4, 0xc3, 0x35, 0xf9,
  0xfd, 0xe0, 0x6c, 0x97, 0xb6, 0xf5, 0xfa, 0x6c, 0xe0, 0xc2, 0xe7, 0x97,
  0x14, 0x8c, 0xa7, 0xfa, 0xc7, 0xaf, 0x4f, 0x8e, 0x06, 0xd7, 0x7d, 0x6f,
  0x89, 0x1c, 0x07, 0x0e, 0x12, 0x0c, 0x33, 0xe1, 0xc1, 0x19, 0xac, 0xf5,
  0x11, 0xe1, 0x33, 0xa5, 0xae, 0x12, 0x27, 0xc7, 0x73, 0xd3, 0xd1, 0xd1,
  0xce, 0x8d, 0x39, 0xbb, 0xbf, 0x4a, 0x0a, 0x3f, 0x25, 0x09, 0xf6, 0x6e,
  0x98, 0xce, 0x70, 0x05, 0x30, 0x2f, 0xb0, 0x86, 0xe6, 0x52, 0x34, 0x41,
  0x55, 0xfa, 0xf9, 0x0c, 0x33, 0x09, 0xf0, 0x33, 0x75, 0x3f, 0x04, 0x26,
  0x24, 0x0b, 0x74, 0x41, 0x7b, 0x21, 0x32, 0xe8, 0x1d, 0x39, 0xb6, 0x7f,
  0x32, 0x53, 0xd5, 0xbd, 0xe2, 0xb8, 0xb3, 0xd3, 0xb1, 0x0f, 0xf1, 0x8d,
  0x10, 0xc4, 0xc5, 0x4f, 0xf7, 0x8e, 0xcb, 0x5b, 0x8d, 0xec, 0x52, 0x5f,
  0x51, 0x8c, 0x1a, 0xaf, 0xcc, 0x39, 0x6d, 0x5a, 0x42, 0x70, 0xd0, 0x54,
  0x13, 0x8f, 0xd5, 0x51, 0x5e, 0x71, 0x04, 0x3a, 0x00, 0xb2, 0x64, 0xb6,
  0xb1, 0xe2, 0xc4, 0x35, 0x73, 0xc4, 0xed, 0x7b, 0x8a, 0xa3, 0x85, 0x7b,

  0xad, 0x45, 0xa3, 0x9b, 0x04, 0x84, 0x48, 0xdf, 0x41, 0x76, 0x78, 0xf6,
  0x86, 0x7c, 0xe6, 0xc1, 0xff, 0x05, 0xb6, 0xe7, 0x17, 0x6f, 0xc8, 0xde,



  0x9e, 0xbf, 0x21, 0x45, 0xf2, 0xf7, 0x71, 0x08, 0x0b, 0x9d, 0x6a, 0x50,

  0xa8, 0xfc, 0x85, 0xcb, 0x46, 0xae, 0x18, 0xd0, 0x1d, 0xa7, 0xba, 0x89,
  0x2d, 0x8d, 0x34, 0x8f, 0xde, 0x82, 0xe9, 0xa1, 0x85, 0x8d, 0x01, 0x48,
  0xbf, 0x1d, 0xbb, 0x82, 0x6e, 0x3a, 0xed, 0x37, 0xd3, 0x30, 0x1c, 0x88,
  0x64, 0x37, 0xcb, 0x47, 0x56, 0x6a, 0x90, 0x98, 0xcb, 0x42, 0x8d, 0x71,
  0xb0, 0xc4, 0xd4, 0x5c, 0x9e, 0x5e, 0x6f, 0x52, 0x2d, 0xcc, 0xc2, 0x56,

  0x52, 0xc7, 0x96, 0xb7, 0x19, 0x2d, 0x4b, 0xbf, 0x2e, 0x1e, 0xd5, 0xfd,
  0xba, 0x72, 0xf5, 0x7e, 0xb6, 0x25, 0xf6, 0xdc, 0xe1, 0x44, 0x6a, 0x42,
  0x2d, 0x93, 0x26, 0xea, 0xad, 0xdb, 0x60, 0x4b, 0x56, 0x65, 0x23, 0x7c,
  0xe6, 0x41, 0xdb, 0x52, 0x8b, 0x8c, 0x9a, 0x05, 0x0b, 0x07, 0xd7, 0xe8,
  0xa8, 0x6c, 0x01, 0x97, 0x56, 0x52, 0x41, 0x83, 0x77, 0xdb, 0xb3, 0x0a,
  0xac, 0xf9, 0xbb, 0x64, 0x46, 0x05, 0xde, 0x49, 0x36, 0x2a, 0x1e, 0x17,
  0x2e, 0x78, 0xff, 0xf8, 0x5f, 0xd9, 0x7f, 0xad, 0x0c, 0xa2, 0xd0, 0x31,
  0x28, 0x3e, 0xc0, 0xec, 0x36, 0x7c, 0xfd, 0x0b, 0xeb, 0x74, 0x65, 0x3c,
  0xc6, 0x23, 0x45, 0x29, 0x5c, 0xb9, 0xb5, 0x02, 0x68, 0xcb, 0x28, 0xe7,
  0x66, 0x08, 0x4d, 0x81, 0x5a, 0x98, 0xf8, 0x0e, 0x64, 0xdc, 0x5c, 0x53,
  0x09, 0xf0, 0xec, 0x93, 0xdf, 0xe9, 0xf2, 0x76, 0xdd, 0xed, 0x78, 0x3c,

  0x61, 0x70, 0xb6, 0x11, 0xbd, 0x45, 0x1f, 0x4d, 0xdd, 0x09, 0x8f, 0xd7,
  0x55, 0xdb, 0x93, 0xed, 0xb0, 0x23, 0xca, 0xed, 0xd6, 0xac, 0x10, 0xf8,
  0x5e, 0x0a, 0x15, 0x55, 0x86, 0xd3, 0xdb, 0xb6, 0x46, 0x77, 0x00, 0xac,
  0x95, 0x13, 0x1b, 0xd5, 0xb3, 0xc4, 0x3d, 0x55, 0xb5, 0xf4, 0x19, 0x9e,
  0xbe, 0xdb, 0x69, 0x03, 0xa2, 0xef, 0xcb, 0xaf, 0xa9, 0x88, 0x7d, 0x9c,
  0x10, 0x96, 0xbb, 0x62, 0x69, 0x62, 0x05, 0x17, 0xd3, 0x1b, 0x65, 0xf5,
  0xa2, 0x7b, 0xfa, 0xc5, 0xf6, 0xcb, 0x17, 0x1b, 0xab, 0xba, 0x94, 0x63,
  0xef, 0x1e, 0x2c, 0xce, 0x65, 0x12, 0xc2, 0x7f, 0xed, 0xf4, 0xdd, 0x0d,
  0x8a, 0x6c, 0x67, 0x13, 0x29, 0xb2, 0xf6, 0x25, 0x1c, 0x88, 0x1b, 0x24,
  0x09, 0xda, 0x08, 0x6d, 0xf7, 0x40, 0xc4, 0xc2, 0xeb, 0x42, 0x5b, 0x46,
  0x6e, 0x39, 0x91, 0x72, 0xd3, 0x28, 0xf4, 0x90, 0xe8, 0xc9, 0x48, 0xec,
  0xed, 0xea, 0x1c, 0x58, 0x7a, 0xba, 0xed, 0x39, 0x79, 0xb2, 0xf4, 0xf7,
  0x7e, 0xfd, 0x5f, 0x6e, 0x30, 0xd3, 0x0e, 0xf0, 0x6b, 0x4e, 0x79, 0xf7,
  0x77, 0x38, 0xe5, 0xdd, 0xd5, 0xa7, 0xbc, 0xfb, 0xdc, 0x53, 0x7e, 0xb9,
  0xff, 0xe2, 0xf3, 0x5f, 0x71, 0xca, 0xce, 0x0e, 0xff, 0xb7, 0x9d, 0xb2,
  0x43, 0x69, 0xbf, 0xee, 0x94, 0x25, 0x29, 0xa4, 0x59, 0x90, 0x29, 0xc9,
  0x2f, 0x94, 0xd6, 0x8a, 0x50, 0x1a, 0x5c, 0xc6, 0xc2, 0xcf, 0xfa, 0x75,
  0x56, 0xd2, 0x7c, 0x92, 0x9b, 0xde, 0xa1, 0x1e, 0x16, 0x30, 0xb2, 0x2d,

  0xb4, 0x08, 0x69, 0xb8, 0x8b, 0x19, 0xf6, 0x4e, 0x5b, 0xeb, 0xad, 0xa9,
  0x7b, 0x44, 0xcb, 0x27, 0x15, 0x17, 0x8b, 0x3f, 0x07, 0x47, 0xfd, 0x3b,
  0xa2, 0xaa, 0xf9, 0x39, 0x33, 0x4e, 0xd6, 0x53, 0x7d, 0xd3, 0x1e, 0x67,
  0x60, 0x26, 0x70, 0x0e, 0x52, 0x30, 0xfb, 0x4d, 0x90, 0xdf, 0x0d, 0xb2,




  0x93, 0x3a, 0x6a, 0x86, 0xa0, 0x14, 0x82, 0x14, 0xc8, 0x30, 0xa9, 0xe7,

  0x71, 0x96, 0x48, 0x01, 0x31, 0x2e, 0x1a, 0x29, 0x03, 0x4d, 0xf9, 0xa6,
  0x4b, 0x58, 0x7a, 0x05, 0x35, 0x32, 0x96, 0xfa, 0xe2, 0x2e, 0x07, 0xf5,
  0xac, 0x36, 0x19, 0x0a, 0x02, 0x94, 0x70, 0x4b, 0x46, 0x37, 0xdc, 0x5f,

  0x24, 0x00, 0xf6, 0xb3, 0x2a, 0xc1, 0xaf, 0x99, 0x70, 0xd7, 0xd2, 0x9b,
  0x28, 0xd8, 0x81, 0x0a, 0xfb, 0x54, 0xd5, 0x1b, 0x55, 0x71, 0x8e, 0x38,


  0x23, 0xea, 0x91, 0xc2, 0xdf, 0xec, 0xfd, 0x24, 0x8d, 0xa3, 0xbc, 0x42,
  0x64, 0x94, 0xe9, 0xb2, 0xa0, 0x7a, 0xd3, 0x25, 0x9b, 0x4d, 0xa8, 0x3b,
  0xf3, 0x74, 0xcd, 0x0c, 0x26, 0x9d, 0x4b, 0xcf, 0x6d, 0x15, 0x92, 0x6c,
  0x82, 0xbf, 0xc1, 0xd3, 0x1d, 0x2f, 0xe7, 0x0b, 0x05, 0x43, 0xc4, 0xea,
  0xa6, 0x94, 0xca, 0xe8, 0x04, 0x10, 0x81, 0x92, 0xae, 0x03, 0x6e, 0x34,
  0xe3, 0x65, 0x92, 0xe4, 0x36, 0xf6, 0x58, 0xe9, 0x59, 0x09, 0xb0, 0x07,
  0x2f, 0x80, 0x12, 0xd7, 0xa8, 0x94, 0x08, 0xf1, 0xd5, 0x92, 0x89, 0x97,
  0x7a, 0x40, 0x8d, 0x6a, 0x29, 0x3a, 0x99, 0x0c, 0x97, 0x53, 0xc5, 0x14,
  0x30, 0x0d, 0xee, 0xea, 0x54, 0x49, 0xf5, 0x57, 0x88, 0x32, 0x94, 0x74,

  0x39, 0x19, 0xfe, 0xd1, 0x07, 0x57, 0xa9, 0xb0, 0xbb, 0xe3, 0x68, 0x55,
  0x72, 0x98, 0xb7, 0x70, 0x22, 0xf6, 0xda, 0xca, 0xe9, 0x27, 0xb5, 0xc6,
  0x63, 0x81, 0xd6, 0x59, 0x2e, 0xa9, 0x54, 0xa3, 0x45, 0x6f, 0x12, 0x23,
  0x34, 0xa9, 0x57, 0x58, 0x2e, 0x09, 0xa1, 0x72, 0x05, 0xae, 0x8f, 0x2f,
  0xa3, 0xb7, 0xb1, 0xb4, 0x1b, 0x8a, 0xd6, 0x81, 0x03, 0xbf, 0xdc, 0xdb,



  0xde, 0xdd, 0x58, 0xa9, 0x87, 0xd7, 0xe1, 0xb6, 0xe8, 0x5b, 0x59, 0x1e,
  0x4a, 0x58, 0xbf, 0x5e, 0x82, 0xd9, 0xac, 0x38, 0x3e, 0xf0, 0xa5, 0x8f,
  0xe7, 0x17, 0x6f, 0x4e, 0xce, 0x8e, 0xfe, 0x62, 0x50, 0x23, 0x70, 0x13,

  0xb4, 0xf2, 0xf8, 0x23, 0x98, 0xaf, 0x8f, 0x1f, 0xcb, 0x04, 0xe6, 0x5c,
  0xad, 0xef, 0x6e, 0x60, 0xe5, 0x9e, 0xd7, 0x14, 0x72, 0x9a, 0xd4, 0xb1,
  0x36, 0xb8, 0x7e, 0x60, 0x05, 0x60, 0x94, 0x71, 0x50, 0x6e, 0xf5, 0x77,
  0xa4, 0xeb, 0x88, 0xb4, 0x4d, 0xb0, 0x3c, 0xcb, 0x69, 0x9c, 0x12, 0x0b,
  0xac, 0x1c, 0xd7, 0xe6, 0xfa, 0x15, 0x5a, 0x08, 0xec, 0x91, 0x8e, 0x52,
  0xb4, 0x56, 0xe4, 0x5a, 0xa7, 0x18, 0x86, 0x9f, 0xd4, 0x61, 0x29, 0xa9,
  0x78, 0x17, 0x7f, 0xb1, 0x3a, 0xac, 0x5c, 0xe7, 0xfd, 0x15, 0x09, 0x8b,
  0x64, 0x96, 0x25, 0x55, 0x4f, 0x26, 0x76, 0x08, 0x7f, 0xbe, 0xbe, 0x8b,
  0x67, 0x5e, 0x49, 0x38, 0xf6, 0x54, 0x54, 0xca, 0x34, 0xac, 0x08, 0xdf,
  0x74, 0x3a, 0xae, 0x0c, 0x4c, 0xeb, 0x11, 0x7d, 0x12, 0xae, 0x8a, 0xd7,
  0x61, 0xe4, 0xfa, 0xfa, 0x2f, 0x97, 0x27, 0xaf, 0x0f, 0x91, 0x91, 0x7d,
  0x89, 0xb5, 0x27, 0x65, 0x8d, 0xaf, 0x45, 0xd8, 0xc3, 0xdd, 0x5b, 0xc3,

  0x0f, 0x6f, 0x4e, 0x07, 0x97, 0x67, 0x17, 0xc7, 0xaf, 0x0f, 0x7f, 0x40,
  0x9b, 0x12, 0x84, 0xc7, 0xa3, 0xf3, 0xae, 0xf9, 0x99, 0xe9, 0xa2, 0xe0,
  0x03, 0x8a, 0x9c, 0x7c, 0xff, 0xf1, 0xe4, 0xfc, 0xbb, 0xd7, 0x87, 0x77,
  0x71, 0xd1, 0xc5, 0xf5, 0xf1, 0xdb, 0x2d, 0x0d, 0x4b, 0x6b, 0xa4, 0x86,
  0xea, 0xf9, 0x70, 0x76, 0x5b, 0xa6, 0x3f, 0x27, 0x11, 0xbc, 0x3e, 0x5b,
  0xfa, 0x30, 0xe6, 0xd7, 0x8c, 0xc3, 0x00, 0x9b, 0x81, 0x7f, 0x8b, 0xbe,
  0x3e, 0xfb, 0x16, 0xa1, 0x72, 0x8d, 0x9f, 0x74, 0xce, 0x7d, 0x97, 0xa2,
  0x2f, 0xf7, 0xb7, 0x77, 0x36, 0x6c, 0xb7, 0x4f, 0x82, 0xda, 0x86, 0x19,

  0xdf, 0x7a, 0x55, 0x53, 0x3f, 0x4b, 0xfd, 0x97, 0xad, 0x65, 0xa8, 0xac,
  0x45, 0xc5, 0xe5, 0x07, 0xe2, 0x72, 0xa2, 0xe4, 0x7c, 0xca, 0x7f, 0xc5,
  0x66, 0xa9, 0x05, 0xa5, 0xad, 0x7b, 0x1e, 0xb7, 0xeb, 0xb7, 0x0e, 0xc6,
  0xcd, 0xd7, 0x96, 0xf4, 0x60, 0x3a, 0xe2, 0xb5, 0x5b, 0x29, 0x1f, 0x3f,
  0x61, 0x2c, 0xa7, 0x69, 0x52, 0xd2, 0x66, 0x83, 0x48, 0x13, 0xfa, 0x09,
  0xef, 0xb3, 0x93, 0xe3, 0x43, 0x15, 0x60, 0x39, 0x63, 0x33, 0xd2, 0x2a,
  0x95, 0xf0, 0x14, 0x52, 0xe0, 0x09, 0x1f, 0x5e, 0x3a, 0xc7, 0xda, 0xe3,
  0xa4, 0x8c, 0xd4, 0xbf, 0xe3, 0x78, 0x6f, 0x66, 0xc9, 0x34, 0x1e, 0x3d,
  0x1a, 0x84, 0x69, 0x3a, 0x90, 0x71, 0xf3, 0x76, 0x92, 0x87, 0x6f, 0x84,
  0xc6, 0x1c, 0x88, 0xe0, 0x29, 0xb1, 0x67, 0x86, 0x52, 0x81, 0xeb, 0x6a,
  0x9c, 0x3e, 0x3c, 0x35, 0x03, 0x16, 0xa3, 0xe2, 0x12, 0x37, 0xb5, 0x29,
  0x9d, 0xeb, 0x5b, 0xdc, 0xa0, 0x3e, 0x24, 0x1b, 0x6a, 0x47, 0xbc, 0x72,
  0x4f, 0xf7, 0xea, 0x1e, 0xf3, 0x9f, 0xe9, 0x92, 0x23, 0x0a, 0x17, 0x39,
  0x65, 0x0f, 0xf1, 0xaf, 0x61, 0x1c, 0x7e, 0x6a, 0xcf, 0x45, 0x6e, 0x0b,
  0x6e, 0x37, 0xcd, 0x4d, 0x0f, 0x70, 0xd9, 0xa6, 0xbe, 0x40, 0xda, 0xda,
  0x20, 0x9c, 0x7b, 0x65, 0xdd, 0xe9, 0x61, 0x8c, 0x3b, 0xe3, 0xd4, 0x06,
  0xf2, 0x64, 0x61, 0x85, 0x94, 0xd1, 0x32, 0x9e, 0x29, 0xd0, 0xc5, 0xdf,
  0x07, 0x1c, 0x9b, 0x92, 0x8c, 0x70, 0x88, 0x63, 0x21, 0x4b, 0x44, 0x9d,
  0x04, 0x76, 0xea, 0x4b, 0x8d, 0xfa, 0x50, 0xe7, 0xa3, 0x5c, 0x90, 0xd7,
  0xe8, 0x21, 0x46, 0x92, 0x29, 0x7d, 0x18, 0x0e, 0xce, 0x6e, 0x57, 0xc7,
  0x01, 0x27, 0x68, 0x60, 0x48, 0xcd, 0xc0, 0x4a, 0xc3, 0x34, 0x4b, 0xd5,
  0x4a, 0xb1, 0x08, 0x92, 0xcc, 0x74, 0x0b, 0x3c, 0x1b, 0xc0, 0x22, 0x70,
  0xaa, 0xf6, 0x14, 0x10, 0x9c, 0x57, 0x26, 0xe9, 0x08, 0x34, 0xa1, 0xf5,
  0x39, 0x2e, 0x44, 0xfa, 0x13, 0x70, 0x33, 0x88, 0xb6, 0x86, 0xed, 0x0d,
  0x29, 0x05, 0x63, 0xe2, 0x08, 0x22, 0xa1, 0x48, 0x26, 0x31, 0x2c, 0x43,
  0x63, 0x37, 0x02, 0xd5, 0xc7, 0x15, 0x27, 0xf1, 0x37, 0x45, 0x14, 0x82,
  0x8a, 0x6b, 0xea, 0x7c, 0x6d, 0x04, 0x29, 0x73, 0xa6, 0x4e, 0x74, 0xeb,
  0x3d, 0xdb, 0x22, 0x2c, 0xad, 0x8c, 0xca, 0x16, 0x80, 0xdc, 0x31, 0xc0,
  0xe7, 0x06, 0xb8, 0x8d, 0x5d, 0x9f, 0x4a, 0x1f, 0x42, 0x11, 0xf8, 0xb1,

  0x4d, 0x2e, 0xfd, 0x54, 0x16, 0x94, 0x06, 0x4a, 0xcf, 0xbd, 0xc1, 0xb2,
  0xe4, 0xde, 0x1d, 0xcc, 0xda, 0x1d, 0x66, 0xc0, 0x4f, 0xe9, 0xed, 0x06,
  0x9b, 0x09, 0xeb, 0xd5, 0xa2, 0xc3, 0xef, 0x4e, 0xae, 0x06, 0xa7, 0x17,
  0xe7, 0x5f, 0x06, 0xcd, 0x61, 0xf9, 0xa5, 0x69, 0xf5, 0xa6, 0x95, 0xae,
  0xb6, 0x1d, 0x17, 0x7a, 0xc1, 0xd4, 0xd7, 0xc2, 0x5d, 0x9d, 0xd2, 0x0c,
  0x1f, 0xf1, 0xba, 0x7c, 0x8d, 0x92, 0x45, 0x45, 0xfa, 0x92, 0xda, 0xd2,
  0xb4, 0x4b, 0x14, 0xb7, 0xa0, 0x3e, 0x30, 0x64, 0xc3, 0x61, 0xa9, 0x9b,
  0xd8, 0x76, 0xe6, 0x6f, 0x3b, 0x01, 0x98, 0x37, 0xfe, 0xcd, 0xae, 0xb7,
  0x41, 0xe1, 0x84, 0x1d, 0x27, 0x5e, 0xbe, 0x5c, 0x70, 0x95, 0x24, 0x82,
  0x99, 0x30, 0xf0, 0x91, 0xbb, 0x00, 0xaf, 0x6f, 0x43, 0x7f, 0xab, 0xfe,

  0x22, 0x3c, 0x7c, 0xb7, 0xed, 0x54, 0xb0, 0x98, 0xe7, 0xb6, 0x43, 0xcf,
  0x6d, 0xfb, 0xcf, 0xed, 0x84, 0x9e, 0xdb, 0xf1, 0x9f, 0xdb, 0x0d, 0x3d,
  0xe7, 0xac, 0xd7, 0x31, 0xe3, 0x65, 0xe7, 0x56, 0x59, 0xc6, 0xb5, 0x7f,
  0xed, 0xf6, 0xed, 0xf1, 0x7f, 0x66, 0xbc, 0x15, 0xcd, 0x46, 0xb5, 0x8e,
  0x61, 0xaf, 0x76, 0x7d, 0xbb, 0x59, 0xaf, 0x7c, 0x5a, 0x87, 0x03, 0x35,
  0xb1, 0xe1, 0x62, 0x86, 0xef, 0x6d, 0xef, 0xf6, 0x46, 0xe9, 0xe2, 0x06,
  0xa5, 0xce, 0xa1, 0xb6, 0x76, 0xc3, 0xcd, 0xc7, 0xc5, 0xca, 0x2f, 0x96,
  0x68, 0x92, 0xfb, 0x7a, 0xc8, 0xd9, 0x60, 0x23, 0x72, 0xf0, 0x8a, 0x04,
  0xa2, 0x93, 0x5e, 0x89, 0xf8, 0x1d, 0x8b, 0x56, 0xe4, 0x3b, 0x98, 0xbd,
  0x52, 0x17, 0xe3, 0xbe, 0x81, 0xf7, 0x64, 0x02, 0x4c, 0xba, 0x3a, 0x2b,
  0x9d, 0xa6, 0x8c, 0xcd, 0xa8, 0xba, 0x1a, 0x7a, 0x6f, 0xba, 0x76, 0xa9,
  0xc7, 0x85, 0xbe, 0xa2, 0x18, 0x77, 0xd8, 0x9b, 0x2d, 0x6b, 0xac, 0x8e,
  0x87, 0x33, 0x2a, 0x77, 0x9e, 0x85, 0x44, 0xe5, 0x87, 0xab, 0x33, 0x4f,
  0xb5, 0x8c, 0xd0, 0x35, 0x53, 0x1e, 0x6c, 0x6e, 0x52, 0x83, 0xf1, 0x9b,
  0xf8, 0xe1, 0xa1, 0x5f, 0x26, 0x9b, 0xc0, 0x4f, 0xca, 0x4d, 0xf2, 0xf7,
  0xca, 0xa7, 0x6f, 0xaa, 0xf9, 0x6c, 0x95, 0xa3, 0x36, 0x2d, 0x15, 0x53,
  0x96, 0xb1, 0x18, 0xc7, 0x8c, 0xba, 0x60, 0x8b, 0xb4, 0xe9, 0x42, 0xf2,

  0x01, 0x6b, 0xd2, 0x5d, 0xb3, 0xe1, 0x07, 0x77, 0x52, 0xa5, 0x3e, 0xce,




  0xdb, 0x28, 0xfb, 0x48, 0x60, 0x1a, 0x88, 0x56, 0x36, 0x21, 0x39, 0xf3,
  0xc1, 0x62, 0xe7, 0xe0, 0x0b, 0x58, 0x4f, 0x9b, 0x78, 0xe1, 0x0c, 0x03,
  0x92, 0x53, 0x10, 0x28, 0x3e, 0xf9, 0x0a, 0x42, 0x7b, 0x56, 0xba, 0x81,

  0x0f, 0x74, 0x0f, 0xc8, 0x92, 0x83, 0x6a, 0xc6, 0x27, 0x66, 0x9a, 0x98,
  0x92, 0x87, 0xca, 0x3c, 0xa8, 0x1c, 0xf0, 0xdf, 0x2f, 0xfd, 0xa2, 0xf3,
  0x88, 0x96, 0xe0, 0xa5, 0xee, 0xa1, 0xfe, 0x8f, 0x65, 0x5f, 0xbc, 0xff,
  0xfc, 0x3d, 0xb7, 0x3d, 0x06, 0x99, 0x17, 0xc1, 0xf0, 0x11, 0x1d, 0x4b,
  0x67, 0x70, 0x75, 0xd9, 0xe9, 0x4a, 0xb4, 0x1e, 0x3e, 0xd0, 0x83, 0x7f,
  0x47, 0x64, 0x65, 0x62, 0x7b, 0x9d, 0xfd, 0x3d, 0x49, 0xac, 0xe3, 0x39,
  0x72, 0x93, 0x39, 0x3f, 0x7c, 0x44, 0xbf, 0x34, 0xc9, 0x85, 0xdc, 0x85,
  0xd6, 0x56, 0xa3, 0x82, 0x01, 0x58, 0x5f, 0x21, 0xa7, 0xfc, 0x74, 0x2d,
  0xf0, 0x7a, 0x58, 0xad, 0x33, 0xb0, 0x8f, 0x40, 0x33, 0x34, 0xcd, 0x7e,
  0x23, 0x40, 0x90, 0x17, 0xb7, 0xd2, 0x0a, 0x44, 0xc2, 0x1c, 0xcc, 0x5c,
  0xbc, 0xee, 0xcb, 0x0d, 0x2f, 0xa2, 0x43, 0x8d, 0xec, 0x62, 0xd5, 0x65,
  0xcb, 0x8e, 0x29, 0x0c, 0x5e, 0x4b, 0x8b, 0x61, 0xa5, 0x55, 0xd8, 0xb0,
  0x6f, 0xb2, 0x25, 0x9e, 0x09, 0x8d, 0xd2, 0x18, 0xe4, 0x09, 0xac, 0x9a,
  0xbd, 0xc6, 0xe9, 0xeb, 0xe6, 0x05, 0x8e, 0xdd, 0xec, 0x2b, 0x1e, 0x11,

  0x59, 0x34, 0x5a, 0xa1, 0x8d, 0xdf, 0x6e, 0x90, 0x83, 0x45, 0x06, 0x6c,
  0xab, 0x26, 0x53, 0x6c, 0x19, 0xe7, 0x40, 0xfa, 0x1a, 0x7c, 0x13, 0x36,
  0x6d, 0xcf, 0xda, 0xe9, 0x87, 0x11, 0x36, 0x0d, 0x54, 0x2f, 0xb4, 0xd9,
  0x2b, 0xca, 0xf8, 0x9e, 0x5c, 0xbf, 0xbb, 0x7c, 0xfa, 0x58, 0x30, 0x3f,
  0x9b, 0x08, 0x5f, 0x13, 0x58, 0xa3, 0x67, 0xed, 0x81, 0x6c, 0xc1, 0xaf,
  0xdc, 0x01, 0xf1, 0x48, 0x37, 0x49, 0x1a, 0x37, 0xc2, 0x77, 0x95, 0x7d,
  0x8a, 0x7d, 0xa9, 0x6d, 0x0c, 0x0a, 0xe0, 0xb0, 0xd8, 0x0a, 0x04, 0x14,
  0x1c, 0x8d, 0x83, 0x34, 0x0c, 0xe5, 0xa3, 0x4f, 0xd6, 0x6c, 0x50, 0x00,
  0x51, 0x02, 0x0b, 0x38, 0x88, 0x76, 0x49, 0xf1, 0x31, 0x93, 0xd0, 0x1d,
  0x2b, 0x9f, 0x20, 0xdb, 0x81, 0x3f, 0x5f, 0x33, 0x12, 0x09, 0x74, 0x4a,
  0x95, 0x52, 0xf6, 0xd1, 0x44, 0x9c, 0x0b, 0xdf, 0x18, 0xee, 0x23, 0x5e,
  0xdd, 0x8f, 0xc2, 0xd6, 0x48, 0x45, 0x43, 0x56, 0x41, 0xb0, 0x9c, 0x29,
  0x36, 0x77, 0x88, 0x09, 0x68, 0x15, 0x23, 0x11, 0x25, 0xb5, 0xa5, 0x69,
  0x76, 0x48, 0x6a, 0xee, 0x3b, 0x0c, 0x03, 0x77, 0x1c, 0xdb, 0x69, 0xab,
  0xb7, 0x57, 0x75, 0xd1, 0x06, 0x64, 0x1b, 0x35, 0x25, 0x31, 0x2a, 0xa7,
  0xec, 0x9a, 0x67, 0x59, 0x3c, 0x55, 0x6b, 0xed, 0x2b, 0x22, 0xa8, 0x1f,


  0xfd, 0xca, 0xc3, 0xda, 0xfe, 0x3f, 0xec, 0xb0, 0xb6, 0xff, 0x6f, 0x38,
  0xac, 0x9d, 0x5f, 0x79, 0x58, 0x3b, 0xff, 0x87, 0x1d, 0xd6, 0xce, 0xff,
  0x0d, 0x87, 0xb5, 0xfb, 0x2b, 0x0f, 0x6b, 0xf7, 0x37, 0x3f, 0xac, 0x73,
  0xfc, 0x3d, 0x49, 0x09, 0xd5, 0x29, 0xd3, 0xb2, 0xa9, 0x72, 0x0d, 0x1f,
  0xa9, 0xb5, 0xfd, 0x10, 0x37, 0x44, 0xcc, 0x11, 0x51, 0x55, 0xcb, 0xa6,
  0x4d, 0x76, 0x54, 0x19, 0xd4, 0x2a, 0xd3, 0x7f, 0x45, 0x02, 0x5c, 0x82,
  0x85, 0x8f, 0xfa, 0xd4, 0xd7, 0x39, 0xfa, 0x67, 0x40, 0xef, 0xe8, 0x46,
  0xe7, 0x83, 0x01, 0x27, 0x35, 0x0d, 0x28, 0x30, 0xdb, 0x3c, 0x2c, 0x74,
  0x75, 0x92, 0x05, 0xb5, 0x8e, 0x4a, 0xe9, 0x05, 0xcc, 0xd0, 0x32, 0x17,
  0x7e, 0x6f, 0x1e, 0x8f, 0xf0, 0xc7, 0x5b, 0xfd, 0x6d, 0xbb, 0x39, 0x1b,
  0xbf, 0x00, 0x66, 0xce, 0x46, 0x4d, 0x83, 0xb6, 0x7d, 0x00, 0x10, 0x1e,
  0xf3, 0x40, 0x50, 0x07, 0xae, 0x1f, 0xcd, 0x83, 0x40, 0xca, 0xa9, 0xd9,
  0xd4, 0x0e, 0x3d, 0x4e, 0xfd, 0xe5, 0x24, 0xf0, 0x4d, 0x44, 0xad, 0xee,
  0x59, 0xca, 0xf0, 0x60, 0x94, 0x24, 0x5f, 0xfa, 0x35, 0x43, 0x83, 0xe9,
  0x14, 0x91, 0xf6, 0x7e, 0x69, 0xdc, 0xda, 0x89, 0x11, 0xff, 0xb7, 0xc5,
  0xad, 0x9f, 0x65, 0x7d, 0xbb, 0x57, 0xa6, 0xe8, 0x69, 0xe3, 0xb6, 0x30,
  0x3a, 0xbc, 0x75, 0x5b, 0x62, 0x9d, 0x11, 0x01, 0x47, 0x8e, 0x99, 0x74,

  0x30, 0x8f, 0xe7, 0x44, 0xde, 0xb5, 0xd1, 0x43, 0x36, 0x92, 0x7c, 0x74,
  0xa7, 0x5c, 0x73, 0xfa, 0x0d, 0x9e, 0x91, 0x02, 0x67, 0xf0, 0x2a, 0x4b,
  0xa6, 0xb8, 0x65, 0xa6, 0x9f, 0xb1, 0x08, 0x14, 0x84, 0xac, 0xe6, 0x25,
  0x37, 0x8c, 0x12, 0xc6, 0xdd, 0x4a, 0x9f, 0xd2, 0xa0, 0x5f, 0xd4, 0xd7,
  0x1b, 0x8f, 0x92, 0x5e, 0x5c, 0x8e, 0xd2, 0x34, 0xdc, 0x38, 0x56, 0xa3,
  0xcc, 0x98, 0xd6, 0x43, 0xf1, 0x01, 0x78, 0x3e, 0xc2, 0x88, 0x9e, 0xf6,
  0x81, 0x47, 0x7e, 0x48, 0x48, 0x54, 0x38, 0xdd, 0x7c, 0x59, 0x4d, 0x73,
  0x0d, 0x15, 0x74, 0x03, 0x6e, 0x47, 0x8c, 0xf9, 0xd1, 0x11, 0xc3, 0xe9,

  0x8c, 0x8a, 0x74, 0x41, 0x28, 0xb7, 0x6e, 0xd3, 0xb9, 0xae, 0xe9, 0xc9,

  0x4e, 0xae, 0x3c, 0x89, 0xcd, 0x72, 0x8b, 0xf2, 0x0f, 0x9e, 0xf9, 0xdb,
  0xe9, 0x75, 0xd0, 0x69, 0x6a, 0x7a, 0x75, 0xc1, 0xbb, 0x88, 0x4d, 0xee,
  0x44, 0x45, 0x23, 0x85, 0x54, 0x6a, 0x09, 0xf2, 0x6b, 0x90, 0x04, 0x48,
  0xe8, 0x51, 0xf1, 0xaf, 0xa9, 0x1d, 0x89, 0x06, 0x3f, 0x51, 0x00, 0xc0,
  0x1d, 0x44, 0xe7, 0x7d, 0x2e, 0x38, 0x20, 0x37, 0xc9, 0x03, 0x57, 0xa9,
  0xfa, 0x06, 0x1d, 0xc3, 0x26, 0x62, 0xb4, 0x56, 0x02, 0xf3, 0x47, 0x83,
  0xe3, 0xd3, 0xd3, 0x5a, 0x4d, 0x2b, 0x6e, 0x1e, 0x83, 0xe7, 0x12, 0xf0,
  0x48, 0x89, 0x20, 0xc2, 0x18, 0x12, 0x0e, 0xc5, 0xf8, 0xb9, 0x13, 0x25,
  0x5c, 0x3f, 0x8a, 0xeb, 0x00, 0x27, 0x48, 0xb5, 0x4f, 0x68, 0x2c, 0x66,
  0x4d, 0x06, 0xd3, 0x4c, 0x11, 0xda, 0xed, 0x66, 0x39, 0x8f, 0xb3, 0x4f,
  0x8f, 0x4b, 0x17, 0x2e, 0x15, 0x91, 0xdd, 0xe2, 0x7b, 0xe5, 0xc6, 0x91,
  0x7d, 0x5a, 0x0b, 0xb4, 0xfd, 0xb8, 0x2c, 0xa4, 0x29, 0x24, 0xe3, 0xb4,



  0x49, 0xdf, 0x0e, 0x58, 0x26, 0xa1, 0x68, 0xf2, 0xc8, 0xb0, 0x56, 0x0d,

  0x4d, 0x33, 0x24, 0xbe, 0x30, 0x12, 0xbc, 0x33, 0x4d, 0x97, 0x23, 0x07,
  0xe9, 0x56, 0xd6, 0xe2, 0x6d, 0x37, 0x45, 0x25, 0x7d, 0xe4, 0xf7, 0xbc,

  0x01, 0xee, 0x05, 0x78, 0x92, 0xfe, 0xe5, 0x02, 0xb4, 0xdc, 0x00, 0xaa,
  0xc3, 0xb1, 0x2d, 0xee, 0x9e, 0xbe, 0x04, 0xa4, 0x8b, 0x74, 0xfe, 0xd4,
  0x09, 0x37, 0x86, 0x79, 0xc6, 0x4d, 0xaa, 0xc1, 0xbb, 0xfc, 0xbe, 0x94,
  0x16, 0xc0, 0x9b, 0x71, 0x98, 0x98, 0x7b, 0xa6, 0xcb, 0x2c, 0x7d, 0xa0,
  0x72, 0x11, 0x50, 0x25, 0x0e, 0xb1, 0x29, 0x4a, 0x4b, 0xc3, 0x8f, 0x63,
  0x56, 0x6c, 0x22, 0xad, 0x7e, 0xa1, 0x55, 0x7c, 0x80, 0x97, 0x41, 0x65,
  0x9c, 0x63, 0xf6, 0x10, 0x8f, 0xd1, 0x75, 0x91, 0xd7, 0x89, 0xad, 0x07,
  0xb2, 0x8f, 0xb2, 0xa4, 0x42, 0xcb, 0x75, 0x65, 0xdc, 0xac, 0x1e, 0x8b,



  0xbc, 0x26, 0xbc, 0xb1, 0x05, 0x96, 0x24, 0xac, 0xe8, 0xdf, 0xcd, 0xe1,
  0x44, 0xa7, 0x00, 0xc0, 0x05, 0xec, 0xc6, 0x38, 0x99, 0x6d, 0xf3, 0x25,
  0xf4, 0x23, 0x52, 0x9f, 0x9a, 0xbe, 0x84, 0x12, 0xa5, 0x4c, 0x77, 0x22,
  0xdb, 0xdb, 0x2b, 0x6d, 0xc6, 0x3d, 0xa8, 0x7b, 0x94, 0x0d, 0x0e, 0x4b,
  0xdf, 0x4d, 0x5f, 0x76, 0x37, 0x9a, 0x8c, 0xf5, 0x9d, 0x7e, 0xc7, 0xb5,
  0x1e, 0x68, 0x84, 0x82, 0x98, 0xce, 0x90, 0xfc, 0x37, 0x35, 0x77, 0x62,
  0xe6, 0x67, 0xf6, 0xdb, 0xc6, 0x5a, 0xcc, 0xea, 0xb0, 0x8c, 0x8c, 0xe2,
  0xa7, 0xf8, 0xef, 0x63, 0x56, 0xef, 0xd9, 0x29, 0x5e, 0x5f, 0x84, 0x34,
  0xcb, 0x6b, 0xaa, 0x2f, 0x4e, 0x74, 0xfb, 0x06, 0x7b, 0xad, 0xeb, 0xbc,
  0x0a, 0x26, 0x44, 0xfb, 0x35, 0xcd, 0x1a, 0x6b, 0x74, 0x0b, 0xf2, 0xb2,
  0xa6, 0x4d, 0x63, 0x2e, 0x51, 0xa3, 0x18, 0xd7, 0x16, 0x4b, 0xf9, 0xb0,
  0x3d, 0x09, 0x66, 0x01, 0x9a, 0xd6, 0xce, 0x7c, 0xb0, 0xdc, 0x14, 0x5e,
  0x2a, 0x86, 0x3d, 0xdc, 0xde, 0x74, 0x56, 0xab, 0xca, 0x10, 0x47, 0xb0,
  0x16, 0x82, 0xad, 0x83, 0xb2, 0xce, 0x4a, 0x1b, 0x5f, 0x1e, 0x6c, 0x2d,
  0xa2, 0xc0, 0xef, 0xed, 0xa0, 0xe0, 0x41, 0xf0, 0xa8, 0x7a, 0x7a, 0x1c,
  0x72, 0x8e, 0xf5, 0x58, 0xb1, 0x53, 0x31, 0x12, 0xb7, 0xa1, 0x6a, 0x27,
  0xdc, 0xf0, 0x34, 0x73, 0xc9, 0xdd, 0x8b, 0x9d, 0x49, 0x7b, 0x31, 0x61,
  0x4b, 0xd1, 0x91, 0x60, 0xd6, 0x27, 0xe8, 0x48, 0x6d, 0x7e, 0xa7, 0xef,
  0x7e, 0x87, 0x4b, 0x71, 0x36, 0x3c, 0x78, 0xb8, 0xc7, 0x66, 0xef, 0x73,
  0xf3, 0x6d, 0x9c, 0xa7, 0x56, 0x9c, 0xcb, 0xcc, 0x28, 0x75, 0x19, 0xf3,

  0xb6, 0x29, 0xad, 0xc1, 0xbf, 0x89, 0x04, 0x81, 0x60, 0x8d, 0x3c, 0x82,
  0xaf, 0x95, 0x2e, 0x45, 0x9c, 0xcf, 0x2d, 0x1c, 0x8d, 0x31, 0x6a, 0x65,
  0xb5, 0x18, 0x2a, 0x66, 0xe0, 0x52, 0xcf, 0x0f, 0x4a, 0xdd, 0x13, 0x83,
  0xad, 0xb2, 0xdc, 0x82, 0x44, 0xe4, 0x68, 0xfe, 0x75, 0x36, 0x8d, 0x08,
  0xb1, 0xb3, 0x51, 0xae, 0x1d, 0x58, 0xda, 0xba, 0xbd, 0x08, 0x96, 0x7f,
  0x74, 0x82, 0x6f, 0xf8, 0x83, 0xfd, 0x59, 0xfa, 0x23, 0xa5, 0x6e, 0xaf,
  0xd1, 0x7b, 0xba, 0x0c, 0x4d, 0xba, 0x12, 0xca, 0x93, 0xc6, 0x11, 0x84,
  0x1e, 0xd0, 0x97, 0x36, 0x5a, 0xa8, 0xb4, 0xab, 0x9a, 0x19, 0x75, 0xa6,
  0xb3, 0x7c, 0x38, 0x84, 0x85, 0x77, 0x1c, 0xa5, 0x14, 0xbe, 0xec, 0x79,
  0xaa, 0xdd, 0x79, 0x80, 0x65, 0x35, 0x25, 0x63, 0xba, 0xcb, 0x59, 0x6f,
  0xd2, 0x7a, 0x01, 0x05, 0xb2, 0x86, 0x10, 0xe4, 0xfb, 0x8a, 0xb4, 0x1e,
  0x90, 0x33, 0x92, 0x7f, 0x2f, 0x84, 0x81, 0x0b, 0xab, 0x05, 0x15, 0xa8,
  0x58, 0x12, 0x7f, 0xaa, 0x13, 0xe4, 0x4c, 0xc6, 0xa8, 0x2d, 0x19, 0xb7,
  0xd6, 0xe8, 0xaa, 0xab, 0x7d, 0x0e, 0xd3, 0xd2, 0x8f, 0xde, 0xd0, 0x2e,
  0xd4, 0x17, 0xd4, 0xf9, 0x07, 0xfe, 0xb1, 0xdd, 0xc5, 0xff, 0xee, 0xfc,
  0xb3, 0x43, 0x01, 0x9e, 0x83, 0xcd, 0xcd, 0xfb, 0xfb, 0xfb, 0xbe, 0xc2,
  0x15, 0xc2, 0x91, 0x7d, 0xe6, 0xd7, 0x15, 0x22, 0xca, 0x5b, 0xcb, 0x07,
  0xae, 0xa3, 0x4e, 0x3a, 0x9f, 0xfe, 0x75, 0xbb, 0xb7, 0xbd, 0xb5, 0xb5,
  0xf5, 0x53, 0x7f, 0x81, 0x5b, 0x3c, 0xa1, 0x61, 0xe1, 0xbf, 0xee, 0xb0,
  0x9b, 0x3c, 0x93, 0xcd, 0x20, 0xa0, 0xac, 0x6c, 0xa4, 0x41, 0x88, 0xc9,
  0xb8, 0x29, 0x08, 0x13, 0xf2, 0x81, 0xc3, 0x64, 0x38, 0x4e, 0x1d, 0xb7,
  0x57, 0xe9, 0x73, 0x7f, 0x3e, 0x0c, 0x50, 0xec, 0xef, 0xee, 0xec, 0x44,
  0xac, 0x72, 0x70, 0xf1, 0x1b, 0xa7, 0x4a, 0x20, 0xee, 0x81, 0x34, 0x30,
  0x67, 0x59, 0x86, 0xe0, 0x8e, 0x31, 0x87, 0x82, 0x80, 0x36, 0x5a, 0x12,
  0x46, 0x39, 0x33, 0x01, 0x01, 0x1e, 0x81, 0xfb, 0xe4, 0xe3, 0x47, 0x3b,
  0x30, 0x50, 0x79, 0x81, 0xbc, 0x95, 0x7b, 0x8d, 0x1a, 0x14, 0xc9, 0xb8,
  0x0c, 0x69, 0x6d, 0xa6, 0x90, 0x8d, 0x84, 0x1c, 0x81, 0xf0, 0x66, 0xb9,

  0xb4, 0xd1, 0xa6, 0xbc, 0x80, 0xc9, 0xb2, 0x90, 0x1e, 0x4a, 0x94, 0x46,
  0x71, 0x1f, 0x3f, 0xd6, 0x84, 0x3d, 0xec, 0xf8, 0x21, 0xfc, 0xc7, 0x73,
  0x83, 0x9b, 0xf2, 0x5c, 0xe9, 0x01, 0x3d, 0x49, 0xaa, 0xd1, 0x8d, 0x87,
  0x29, 0x4f, 0xec, 0x1b, 0x55, 0xf7, 0x1b, 0x58, 0x8d, 0x81, 0x6c, 0x6f,
  0xeb, 0x2f, 0x69, 0xab, 0x7e, 0x61, 0x50, 0xec, 0x26, 0x42, 0x75, 0x0f,
  0xdc, 0x6e, 0x9e, 0x79, 0x62, 0x1b, 0x76, 0xa8, 0xe9, 0x71, 0x4a, 0x19,
  0xa9, 0x69, 0xa9, 0x55, 0xc9, 0xa3, 0x9b, 0x64, 0x2e, 0xfc, 0x72, 0x5d,
  0x13, 0x32, 0x3b, 0x42, 0x84, 0x1d, 0x5f, 0xa4, 0x75, 0x26, 0xf2, 0x1b,
  0x58, 0xcc, 0x86, 0x54, 0xf5, 0x1a, 0x29, 0x27, 0xad, 0x96, 0xa6, 0x4b,
  0xb4, 0x1a, 0x87, 0xb1, 0x88, 0x13, 0x2d, 0x37, 0x6f, 0xcb, 0x9b, 0x46,
  0x9e, 0x98, 0x14, 0x24, 0xc5, 0xd0, 0xff, 0xd2, 0x13, 0xdd, 0x47, 0x84,
  0x2a, 0xa5, 0xaf, 0xc0, 0x8d, 0x7d, 0x73, 0x7a, 0x7c, 0x4d, 0x25, 0xb6,
  0x5d, 0x2a, 0xc6, 0xe9, 0x52, 0x5d, 0xad, 0xdf, 0x06, 0xeb, 0x92, 0xfc,
  0x23, 0x44, 0xa8, 0x12, 0xab, 0x8a, 0x6d, 0x02, 0x9f, 0xc5, 0x38, 0xd7,
  0x2a, 0x39, 0xa7, 0x81, 0x59, 0x20, 0x33, 0xb9, 0xa6, 0x25, 0x9a, 0xb4,
  0xc7, 0xbd, 0xfd, 0xfe, 0x16, 0xaf, 0xd1, 0x76, 0xd8, 0xd6, 0x3a, 0x30,




  0x72, 0x23, 0x69, 0xfc, 0x32, 0x0e, 0x67, 0x24, 0x98, 0xe9, 0x74, 0x23,

  0xc6, 0x56, 0x67, 0xa0, 0x06, 0xfd, 0xad, 0x93, 0x8b, 0xb9, 0x52, 0x33,
  0x75, 0xa1, 0x55, 0x91, 0x2c, 0x1b, 0xa0, 0xd8, 0x18, 0x79, 0xcb, 0x4d,
  0x0d, 0xa7, 0xa0, 0xb8, 0x84, 0x8a, 0xf1, 0x88, 0x26, 0x22, 0xf1, 0x60,
  0x55, 0x49, 0xd6, 0xb5, 0x9d, 0xad, 0x72, 0x94, 0x02, 0x22, 0xb1, 0xa4,
  0xba, 0xa9, 0xd6, 0x08, 0x36, 0xa4, 0x9f, 0x78, 0x0d, 0xc3, 0x7a, 0x5f,
  0x0b, 0xae, 0x2d, 0xeb, 0xc9, 0xa1, 0xc2, 0x32, 0x3c, 0xca, 0x0d, 0xcd,
  0xa1, 0x65, 0xbb, 0x55, 0x15, 0xce, 0x3e, 0xba, 0x0b, 0xf9, 0xd8, 0xab,
  0x66, 0xcb, 0x77, 0xb8, 0xa2, 0x3d, 0x1f, 0x0b, 0x73, 0x44, 0xc9, 0x56,
  0x8f, 0xa6, 0x33, 0x61, 0x2c, 0x2b, 0x24, 0x4a, 0x20, 0x63, 0x8f, 0xfc,
  0x53, 0x9d, 0x2f, 0x30, 0x8a, 0xf4, 0xfa, 0xa8, 0x53, 0xbb, 0x91, 0xa1,
  0xde, 0x58, 0x25, 0x73, 0xb7, 0xba, 0x25, 0x23, 0x3c, 0x0d, 0xf9, 0x7e,
  0xf2, 0x50, 0xb1, 0xdc, 0x9f, 0x50, 0x7f, 0xeb, 0x6c, 0x77, 0x27, 0x2a,
  0x1f, 0x41, 0x89, 0x98, 0xbb, 0x9b, 0xd0, 0x6c, 0x67, 0x1e, 0x8c, 0x9c,
  0xd5, 0xfa, 0x00, 0x32, 0xdf, 0xfa, 0x80, 0xaf, 0x1c, 0xd1, 0x2b, 0xd2,
  0x39, 0x4c, 0xb3, 0x01, 0xdd, 0x1a, 0x79, 0x75, 0x7b, 0x36, 0xa8, 0x05,
  0xb3, 0xb1, 0x99, 0x8b, 0x0d, 0x67, 0x71, 0x76, 0x6b, 0xd2, 0xb6, 0x79,
  0xa4, 0x2e, 0x36, 0x9f, 0xe5, 0x3a, 0x55, 0xfb, 0x43, 0x49, 0x0f, 0x24,
  0xc9, 0xe8, 0xf5, 0x68, 0x43, 0xbd, 0x74, 0x1e, 0x17, 0x58, 0xc0, 0x48,





  0x7b, 0x26, 0xa9, 0xd5, 0xee, 0x99, 0x98, 0x96, 0x66, 0x2c, 0xcd, 0xdf,
  0x51, 0xbe, 0x3c, 0x3f, 0xe7, 0x8b, 0x30, 0x8e, 0xe0, 0x33, 0xaa, 0x90,


  0xe6, 0xa7, 0xb7, 0xf4, 0x9b, 0xfb, 0xed, 0x22, 0xf7, 0x06, 0x66, 0x19,
  0xb8, 0x36, 0xfc, 0xf7, 0x40, 0x23, 0x86, 0x6d, 0xfc, 0xdb, 0x48, 0x0f,
  0xd3, 0x52, 0xdd, 0xc4, 0x18, 0xdd, 0x26, 0xb9, 0xac, 0xde, 0xd9, 0xb8,
  0x66, 0x28, 0x7e, 0xdf, 0x8f, 0x2e, 0xac, 0x39, 0x99, 0x75, 0x09, 0x70,
  0xb7, 0x2a, 0x46, 0x62, 0x4c, 0xd2, 0xdf, 0x25, 0x31, 0x34, 0x9e, 0x85,
  0x76, 0x80, 0x7a, 0xc6, 0xa5, 0x84, 0xf9, 0x5d, 0x86, 0x66, 0xa7, 0xe0,
  0xe0, 0xc2, 0xe7, 0x60, 0x63, 0xb1, 0x69, 0x29, 0x27, 0x0a, 0xc4, 0x5e,
  0xde, 0x37, 0x2f, 0x22, 0xdc, 0xad, 0x8e, 0xd3, 0x06, 0x4c, 0x9b, 0x5a,
  0xfb, 0x78, 0x29, 0xa9, 0x02, 0x33, 0x90, 0x8b, 0x9c, 0xd9, 0x62, 0xbb,
  0x4d, 0x00, 0x4b, 0xcb, 0xb3, 0xae, 0x87, 0x1e, 0x85, 0x81, 0x79, 0xf6,
  0x38, 0x61, 0xc6, 0xe1, 0x5c, 0xba, 0x83, 0x9b, 0x16, 0xc3, 0x31, 0xbf,
  0xa7, 0xb4, 0xe9, 0x7e, 0xf9, 0x89, 0x46, 0xc6, 0xdc, 0x69, 0x48, 0x0f,
  0x03, 0xa8, 0xb0, 0xcb, 0x85, 0x82, 0xde, 0x92, 0x2e, 0x32, 0xbd, 0x91,
  0x02, 0x66, 0x95, 0x72, 0x98, 0xb7, 0x74, 0x6d, 0xcc, 0x1b, 0x6c, 0x09,
  0xe5, 0xf8, 0x3f, 0x04, 0x11, 0x0c, 0xd4, 0x4d, 0x4f, 0x5f, 0xc6, 0xdb,
  0x48, 0x49, 0x8e, 0xb0, 0xc3, 0x04, 0x43, 0x8d, 0xd9, 0x42, 0x98, 0x8b,
  0x69, 0x53, 0x9f, 0x51, 0x9f, 0x48, 0x32, 0xb6, 0xea, 0x73, 0x83, 0xec,

  0x06, 0xe7, 0xe3, 0x23, 0x33, 0x8e, 0x19, 0xb8, 0xb7, 0xd4, 0x96, 0xca,
  0xa6, 0x7d, 0xfa, 0x54, 0xe4, 0x48, 0x89, 0x89, 0xa4, 0xc0, 0xd1, 0x2c,
  0x68, 0x76, 0xa9, 0x1b, 0x1f, 0x68, 0x59, 0xc5, 0x2b, 0x95, 0x0e, 0x1d,
  0x8f, 0x2e, 0xa0, 0x30, 0xdc, 0x85, 0xbb, 0x94, 0xf7, 0x9e, 0xa1, 0xd2,
  0x86, 0x45, 0x9a, 0x4c, 0x50, 0x03, 0xa1, 0x15, 0x49, 0x86, 0xaa, 0xe7,
  0x35, 0x4a, 0x10, 0x55, 0x1b, 0x73, 0xdf, 0xe1, 0x1c, 0xb1, 0x3c, 0x39,
  0x25, 0xcf, 0x11, 0xf3, 0x44, 0xd3, 0xe9, 0x8b, 0x21, 0xec, 0xb1, 0x12,
  0x93, 0x16, 0x11, 0x6b, 0xc5, 0x54, 0x30, 0xfb, 0x93, 0xba, 0xbc, 0x8b,
  0xc7, 0x13, 0xa9, 0x2b, 0xc3, 0x5b, 0x6c, 0x3a, 0x45, 0xd2, 0x17, 0x99,

  0xad, 0x8a, 0x76, 0xe3, 0x34, 0x1b, 0x0b, 0xe3, 0x42, 0xe3, 0x2e, 0x7d,
  0x9b, 0x14, 0x20, 0xff, 0xf2, 0x32, 0xfa, 0x6e, 0x5f, 0x93, 0x3c, 0xa5,
  0xdf, 0xbd, 0xa8, 0x22, 0xa6, 0xa4, 0x96, 0x8a, 0x11, 0x78, 0xea, 0x5e,
  0xf8, 0x82, 0x4b, 0x43, 0x98, 0x7b, 0xe9, 0xeb, 0xa2, 0x90, 0xb0, 0x91,
  0x9e, 0x35, 0xaf, 0x1c, 0xfc, 0x04, 0xc8, 0x0f, 0xfe, 0x19, 0xee, 0x6d,
  0x66, 0x5b, 0x54, 0x83, 0x76, 0x85, 0xc4, 0x82, 0xbe, 0x3c, 0x38, 0xcb,
  0x61, 0x45, 0x4a, 0x0e, 0x48, 0x27, 0x33, 0xf1, 0xe8, 0x3a, 0x45, 0x77,
  0x8f, 0xa4, 0xef, 0xf8, 0x2a, 0x20, 0x17, 0x42, 0x88, 0x5a, 0x63, 0xd1,
  0xc7, 0x1b, 0xb9, 0x14, 0xa8, 0x47, 0x96, 0x37, 0xa8, 0x89, 0xa1, 0x86,
  0x40, 0x46, 0x7e, 0x8b, 0x7a, 0xcf, 0xf2, 0xf1, 0xfc, 0xfa, 0xec, 0xbd,
  0x98, 0xce, 0x96, 0xcd, 0x89, 0x56, 0x63, 0xcd, 0x62, 0x61, 0x3b, 0x4c,
  0x55, 0x3e, 0xe2, 0x80, 0x6e, 0x86, 0x16, 0x2f, 0x32, 0xde, 0x05, 0x6e,
  0x5b, 0x57, 0x32, 0x7d, 0x0a, 0x29, 0x8b, 0x13, 0xa3, 0x4b, 0x37, 0x35,
  0xe0, 0xc9, 0x46, 0x22, 0x2c, 0xe9, 0xec, 0xc9, 0x55, 0x02, 0x12, 0x05,
  0x18, 0xcd, 0x2a, 0xf8, 0x76, 0x94, 0x73, 0xca, 0x0f, 0x9d, 0x2f, 0xf3,
  0x4a, 0x90, 0xc5, 0x70, 0x37, 0x8e, 0xe8, 0x4d, 0x7e, 0x9f, 0xf5, 0xce,
  0xb0, 0xba, 0x39, 0x3a, 0xcb, 0xa7, 0xb0, 0x55, 0xe7, 0xa4, 0xb0, 0x34,
  0x4f, 0xed, 0xc3, 0xe5, 0x79, 0xb4, 0x8e, 0x72, 0x37, 0xba, 0x34, 0x88,
  0x76, 0xf8, 0xe4, 0x86, 0xd8, 0x17, 0x25, 0xeb, 0x24, 0x32, 0x9b, 0x6e,
  0x74, 0xf2, 0xc3, 0xd1, 0xfb, 0xcb, 0xb3, 0x93, 0x1f, 0xd9, 0xc4, 0xf0,
  0x96, 0x83, 0x3f, 0xfe, 0xca, 0xb1, 0xb9, 0x28, 0x42, 0x83, 0x19, 0x89,
  0x30, 0x8f, 0x20, 0x9c, 0x0d, 0xd3, 0x27, 0xb3, 0x46, 0x25, 0xc1, 0xc1,


  0xe0, 0xf2, 0xb4, 0xa7, 0x70, 0x74, 0xdc, 0x0b, 0x35, 0xcd, 0xd0, 0x40,


  0x22, 0x79, 0x24, 0x6d, 0x54, 0xbe, 0xf5, 0x83, 0x51, 0x7a, 0x23, 0xba,
  0xd1, 0xb9, 0x26, 0x3a, 0x76, 0xe9, 0xc4, 0xf1, 0x0a, 0xbe, 0x49, 0xa7,


  0x14, 0x50, 0x6a, 0xa4, 0xa7, 0x21, 0x71, 0xd0, 0x14, 0x46, 0x5e, 0xb1,



  0x10, 0xb5, 0xb0, 0xb3, 0x58, 0x7c, 0x65, 0x32, 0x63, 0xf7, 0x65, 0xab,
  0x84, 0x24, 0x66, 0x40, 0xc7, 0x88, 0x55, 0x28, 0x5e, 0xa8, 0x4c, 0xaa,
  0x52, 0x86, 0x8f, 0x6e, 0xef, 0x3c, 0x43, 0x23, 0x2c, 0x17, 0x44, 0x9b,


  0x30, 0x6c, 0xff, 0x20, 0xea, 0xf4, 0x96, 0xd1, 0x41, 0xe7, 0x13, 0xaa,
  0x08, 0xae, 0xa7, 0x37, 0xd0, 0x8a, 0x4b, 0xe2, 0x65, 0xea, 0x0a, 0x96,

  0x06, 0x12, 0xe4, 0xaf, 0x56, 0x6f, 0x1b, 0x7b, 0xcc, 0xe1, 0xaa, 0x8b,
  0xf4, 0xa5, 0xc2, 0xb7, 0x69, 0x00, 0x2c, 0x26, 0x23, 0xbe, 0x94, 0x70,
  0xdc, 0x14, 0x34, 0xd4, 0x35, 0x60, 0x03, 0xec, 0xc6, 0x47, 0x16, 0xdf,
  0xa1, 0xd8, 0xa4, 0x58, 0x50, 0xf9, 0x18, 0x74, 0xd5, 0x23, 0x8e, 0x41,
  0x94, 0x98, 0xdf, 0xee, 0x0f, 0x47, 0x7b, 0xb5, 0xf6, 0xe5, 0x9a, 0xc4,
  0x57, 0x3b, 0xa2, 0x54, 0x21, 0xaf, 0xee, 0xb0, 0x02, 0x8b, 0x8a, 0x31,
  0xce, 0x1e, 0x6e, 0xfc, 0xda, 0xe1, 0x9a, 0xb6, 0xab, 0xd1, 0x27, 0x9b,
  0x0c, 0x87, 0xde, 0x93, 0x10, 0x9f, 0xaa, 0xd5, 0x72, 0xfa, 0x92, 0xb9,
  0x0e, 0x52, 0x73, 0x9c, 0x90, 0xf0, 0xe6, 0xae, 0x94, 0x8c, 0x20, 0xc9,



  0x21, 0xc4, 0xa6, 0xca, 0x51, 0x9b, 0xb9, 0xcc, 0xf5, 0xdf, 0x74, 0xae,
  0x4e, 0xe7, 0x66, 0x0c, 0x4a, 0xd8, 0x0e, 0x82, 0x43, 0x6e, 0xfe, 0xdb,
  0xa6, 0x0f, 0x71, 0xe2, 0x2a, 0x1a, 0xc7, 0xa4, 0x09, 0x07, 0x0b, 0x14,
  0xbb, 0x8d, 0xca, 0x3f, 0x8a, 0x6b, 0xf9, 0xee, 0xcb, 0xca, 0xe0, 0xa5,
  0xe2, 0xc8, 0x6b, 0x05, 0x36, 0x87, 0xca, 0x6f, 0xa9, 0x63, 0x6c, 0x5e,
  0xb4, 0xde, 0x54, 0x75, 0xed, 0x5a, 0xca, 0x63, 0x69, 0xab, 0xf9, 0x64,
  0xa8, 0x4e, 0xd0, 0x83, 0xa2, 0x0e, 0x88, 0x6d, 0xd7, 0xf5, 0xb1, 0x72,
  0xb8, 0x71, 0x9d, 0xb6, 0xac, 0x31, 0xd1, 0xa7, 0x7a, 0xac, 0x54, 0x8b,
  0x90, 0x83, 0x18, 0xfd, 0x4e, 0x31, 0x6f, 0xbd, 0x37, 0xa2, 0xf8, 0xb2,
  0xa9, 0x79, 0x41, 0x7b, 0xd5, 0x24, 0x6d, 0x93, 0xdd, 0x27, 0xaf, 0xee,
  0xd4, 0x06, 0x43, 0xcc, 0xfc, 0xc2, 0xa9, 0xa5, 0xc1, 0xb0, 0xc8, 0x77,
  0x72, 0xab, 0x4a, 0xdf, 0xce, 0x7a, 0x23, 0x81, 0x33, 0x37, 0x1e, 0x25,

  0x85, 0x88, 0xec, 0x38, 0x14, 0x1b, 0x45, 0xc3, 0xf3, 0x9a, 0x34, 0x90,






  0x92, 0x77, 0xbf, 0xec, 0x87, 0x54, 0x58, 0x69, 0x72, 0xc4, 0x21, 0x3b,
  0x59, 0x11, 0x7b, 0xd8, 0x29, 0x9a, 0xa6, 0x43, 0x48, 0xde, 0x4e, 0xd7,





  0x8c, 0x1d, 0x08, 0xad, 0x92, 0xf4, 0xd8, 0x2d, 0xc6, 0x14, 0xac, 0x78,
  0x94, 0xc4, 0x1a, 0x6e, 0x0a, 0x9e, 0xdd, 0x6a, 0x76, 0x22, 0x8e, 0x9c,

  0x3c, 0x24, 0xa3, 0x65, 0x55, 0x2f, 0xb0, 0x73, 0xe6, 0x24, 0xb0, 0x51,
  0x34, 0xa5, 0x75, 0xba, 0x08, 0x6a, 0x8c, 0x5e, 0x2a, 0xe6, 0xcf, 0x41,

  0x67, 0x43, 0x83, 0xb8, 0xb1, 0xe8, 0xf0, 0xfc, 0x8b, 0x50, 0x7c, 0x56,
  0xa7, 0x5c, 0x24, 0xec, 0x51, 0xb5, 0xa9, 0x0a, 0xc1, 0xcf, 0x03, 0x8d,
  0x16, 0xc1, 0xaf, 0xbf, 0x65, 0xdf, 0x9b, 0xf3, 0x71, 0xd3, 0x0b, 0x54,
  0xdc, 0x72, 0xa5, 0x77, 0x95, 0xbd, 0x2f, 0x53, 0x53, 0x74, 0x60, 0x50,
  0x77, 0x40, 0xdd, 0x64, 0xc8, 0xeb, 0xab, 0xba, 0xf9, 0x9e, 0x3b, 0xf4,
  0xf4, 0xf2, 0xee, 0x85, 0xe3, 0xcd, 0x46, 0x89, 0x47, 0x3f, 0x32, 0x1c,
  0xdf, 0x5b, 0xc5, 0x6d, 0x31, 0xdc, 0x83, 0x3f, 0xbe, 0xc5, 0x3f, 0x26,
  0xec, 0x17, 0x10, 0xc8, 0x3e, 0xf6, 0xc3, 0xfa, 0xa4, 0x8d, 0x90, 0x0b,
  0x91, 0x8b, 0xdb, 0x40, 0x99, 0x5a, 0x58, 0x06, 0x89, 0xf8, 0x7e, 0x16,
  0x6a, 0x89, 0xac, 0x1a, 0x1d, 0xa6, 0xcb, 0xa5, 0xc9, 0x7e, 0x90, 0x52,
  0xfe, 0x47, 0x78, 0x74, 0x8c, 0xf7, 0xd6, 0x25, 0x9f, 0xd3, 0x80, 0x1b,
  0xb6, 0xe6, 0xa1, 0xea, 0x54, 0xd8, 0xaa, 0x9f, 0x31, 0x50, 0x61, 0xea,
  0xe4, 0x81, 0x03, 0x68, 0x6a, 0x85, 0x12, 0xa0, 0x4d, 0xe8, 0x60, 0xf7,
  0x34, 0x5e, 0x34, 0xe6, 0x67, 0x69, 0xcb, 0x14, 0xda, 0x97, 0x4c, 0xd2,


  0x5d, 0xfe, 0xf0, 0x21, 0x6d, 0xdb, 0xdf, 0x7b, 0x43, 0xb5, 0xd9, 0x7c,
  0xe3, 0xb5, 0x4b, 0x22, 0x2a, 0x6c, 0x7a, 0xd4, 0x16, 0x9d, 0x82, 0x1f,

  0x35, 0xdc, 0x81, 0xd5, 0x92, 0x96, 0x79, 0xce, 0xb9, 0x29, 0x25, 0xf6,

  0xf4, 0x20, 0xb6, 0x70, 0xcb, 0x3e, 0x19, 0x4c, 0x69, 0x4a, 0xe6, 0x18,
  0xfa, 0x32, 0x92, 0x91, 0x41, 0xc2, 0x50, 0xb3, 0xc2, 0xcf, 0xf5, 0xc2,
  0xc3, 0x8d, 0x51, 0x7b, 0x43, 0x29, 0xcb, 0xe9, 0x5b, 0x7f, 0xf0, 0xa2,
  0x9d, 0xe5, 0x63, 0x36, 0xba, 0x79, 0x73, 0x3e, 0x08, 0xbf, 0xde, 0x5c,
  0x1c, 0x3d, 0x0d, 0x5a, 0x08, 0xd2, 0x02, 0x9b, 0x9c, 0x82, 0x91, 0x89,
  0xee, 0xb3, 0x23, 0xe7, 0xb7, 0xe1, 0xe1, 0xea, 0xaf, 0x18, 0x57, 0x20,

  0x6a, 0x16, 0xcc, 0xc5, 0x45, 0xf1, 0xa4, 0x3a, 0x94, 0x5e, 0x8c, 0x77,
  0x81, 0xbd, 0x1e, 0xe1, 0xe1, 0xaa, 0x1b, 0x8c, 0x16, 0x01, 0x11, 0xc8,
  0x88, 0x85, 0x93, 0x80, 0xd6, 0xa4, 0x6b, 0x6a, 0xe7, 0xa3, 0x7f, 0xfc,
  0x92, 0x63, 0x3e, 0x03, 0x8b, 0x36, 0x09, 0x04, 0x17, 0xbd, 0x1d, 0x32,
  0x71, 0x1a, 0x1b, 0xfb, 0x05, 0x52, 0x9d, 0xe1, 0xeb, 0x4c, 0xa5, 0x5d,
  0x21, 0x56, 0xfa, 0x51, 0xd1, 0xb6, 0x24, 0xd8, 0x93, 0x9d, 0x6f, 0xbe,
  0xf6, 0xa5, 0xe7, 0x9b, 0xf3, 0x96, 0xcf, 0xe1, 0x6f, 0x7a, 0x5a, 0xab,
  0x28, 0x1a, 0x81, 0xa3, 0xd0, 0xfb, 0x7b, 0x21, 0x40, 0xcb, 0xe1, 0x09,
  0x28, 0x0a, 0xf3, 0x13, 0x5c, 0x02, 0xe1, 0xe7, 0xf9, 0x8f, 0x95, 0x0f,
  0x4a, 0xc5, 0x40, 0xf8, 0x53, 0x5c, 0x86, 0xc1, 0x19, 0x7e, 0xd1, 0x15,
  0x47, 0x71, 0x2f, 0x45, 0x11, 0xde, 0x58, 0x75, 0x46, 0xe1, 0xe1, 0x90,
  0xbf, 0x85, 0x00, 0xaf, 0x90, 0x2d, 0xec, 0xf0, 0x1f, 0x9b, 0x3b, 0x26,
  0x35, 0xcd, 0x14, 0x9c, 0xd2, 0x35, 0x05, 0x09, 0xee, 0x2b, 0x08, 0x59,
  0xfa, 0x30, 0xa0, 0x7c, 0x82, 0x16, 0x6a, 0xa6, 0xc4, 0x03, 0xce, 0x38,
  0x30, 0x93, 0xc3, 0x79, 0xaa, 0x26, 0x16, 0x9c, 0xc9, 0x80, 0xdd, 0x77,
  0x4f, 0x11, 0x53, 0x1a, 0xc8, 0xa6, 0x5b, 0x85, 0xea, 0xf9, 0x1e, 0x94,
  0x24, 0x14, 0xae, 0xcf, 0x26, 0x52, 0x7d, 0x21, 0x5a, 0x1f, 0x82, 0xb8,
  0x76, 0x40, 0x7a, 0x58, 0xc5, 0xde, 0xe3, 0x02, 0x99, 0xf0, 0x70, 0xfb,

  0x9f, 0xef, 0xef, 0x6d, 0x6c, 0x74, 0xd5, 0x57, 0x25, 0x09, 0x32, 0x43,
  0x2a, 0xf7, 0x4a, 0x91, 0x73, 0x71, 0x33, 0x76, 0xd8, 0xe2, 0x1b, 0x62,
  0x0c, 0xc6, 0x67, 0x14, 0x1e, 0x0e, 0xe5, 0x98, 0xbe, 0x87, 0x87, 0x88,
  0x26, 0x38, 0x31, 0x74, 0x63, 0x08, 0xa3, 0xb0, 0x49, 0xf8, 0x01, 0x13,
  0x73, 0x69, 0xe5, 0x0a, 0xe4, 0x48, 0xb1, 0x1e, 0x46, 0x74, 0x2c, 0x71,
  0xb8, 0x38, 0x56, 0x49, 0xeb, 0x27, 0x82, 0x5e, 0xb2, 0xd8, 0xa3, 0x3f,
  0xa8, 0xb4, 0xf2, 0x46, 0x1b, 0x44, 0x5f, 0x2e, 0x87, 0x33, 0x90, 0x41,
  0x83, 0xe5, 0x64, 0x02, 0xa7, 0x7d, 0x96, 0x4a, 0xa7, 0x6f, 0xd6, 0xc1,
  0x25, 0xb9, 0xa1, 0x4d, 0xe6, 0xd0, 0xba, 0xeb, 0x84, 0x26, 0xb9, 0x9e,
  0xb6, 0x3c, 0x5c, 0xb4, 0xb6, 0xa8, 0xb3, 0xe0, 0x0f, 0xc1, 0x09, 0x4d,
  0x7a, 0x6d, 0x0b, 0x7b, 0x48, 0x4a, 0xdf, 0x8c, 0x7b, 0x8f, 0x71, 0x5b,
  0x10, 0xd8, 0xcf, 0x3e, 0x7a, 0xd3, 0x52, 0xbb, 0x9e, 0xb2, 0x6b, 0xf4,
  0xce, 0x7b, 0xd4, 0x3b, 0x09, 0xe2, 0x07, 0x63, 0x19, 0xd1, 0x21, 0x6b,
  0x98, 0xed, 0x3d, 0x96, 0x15, 0x6a, 0xc1, 0xd5, 0x45, 0x49, 0xab, 0x27,






  0xbf, 0x7f, 0x8c, 0xdd, 0x15, 0x25, 0x09, 0x73, 0x96, 0x60, 0xac, 0x91,
  0xf8, 0xa3, 0x8f, 0x79, 0x52, 0xb0, 0x7f, 0x92, 0xc7, 0x10, 0xdf, 0x87,
  0x78, 0xf0, 0x29, 0xb7, 0x2e, 0x26, 0xcc, 0x26, 0xf6, 0x02, 0x31, 0x56,
  0x10, 0xfb, 0xbc, 0x80, 0x76, 0x1e, 0x3c, 0x9e, 0x20, 0x29, 0xb5, 0xd9,
  0x63, 0xe4, 0xc4, 0x79, 0x14, 0xcc, 0xa1, 0xac, 0x7d, 0xc9, 0x73, 0xdd,
  0x60, 0x6d, 0xb7, 0xa7, 0x93, 0x54, 0x64, 0x13, 0x77, 0x78, 0x46, 0x1d,
  0x2a, 0x5e, 0xd7, 0xf8, 0x39, 0x65, 0x5f, 0xa9, 0xd5, 0xc0, 0x7a, 0xb7,
  0x8e, 0x2d, 0x1e, 0xca, 0x38, 0x10, 0x53, 0xd7, 0x39, 0x76, 0xbe, 0xd2,

  0x4c, 0xae, 0x8e, 0xa6, 0x00, 0x34, 0x1a, 0xdf, 0xcb, 0x98, 0x32, 0x64,

  0x00, 0xcf, 0x81, 0xd3, 0x22, 0x28, 0x49, 0x1d, 0x4f, 0x0d, 0x86, 0xec,

  0x75, 0x82, 0x0a, 0xad, 0xd9, 0x00, 0xd3, 0xc1, 0xb2, 0x66, 0xf6, 0xe9,
  0x27, 0x6c, 0xd4, 0x0f, 0xd3, 0xbb, 0xab, 0xb4, 0x5a, 0xfa, 0x4c, 0x77,
  0xa8, 0xe8, 0xa3, 0x84, 0x7f, 0x41, 0x62, 0x1a, 0x0f, 0xc3, 0x82, 0x54,


  0x90, 0x99, 0x87, 0x09, 0x9f, 0xd8, 0xca, 0xb5, 0x34, 0x3c, 0x02, 0x9d,
  0x9f, 0xb3, 0xfc, 0xde, 0xcb, 0x10, 0x47, 0x0b, 0xc3, 0xcc, 0xae, 0x5e,
  0x5d, 0x07, 0x6f, 0xff, 0xe9, 0x1f, 0xfa, 0xcb, 0x8f, 0xb8, 0x53, 0xff,
  0xd4, 0x9d, 0xd2, 0xa4, 0xbb, 0xd8, 0x03, 0x61, 0x20, 0xdb, 0x3a, 0xfa,
  0x13, 0xed, 0xca, 0xdf, 0x30, 0xab, 0x89, 0xb7, 0x06, 0xf1, 0x8f, 0x68,
  0xc0, 0x3f, 0xf5, 0x8d, 0x1e, 0x2d, 0x83, 0xc4, 0x58, 0x55, 0x4e, 0xca,

  0xfe, 0xf0, 0xd1, 0x73, 0x49, 0x21, 0x19, 0xfe, 0x98, 0x75, 0x09, 0xc8,
  0x19, 0x4c, 0x3a, 0xc4, 0x80, 0xe1, 0x56, 0xbd, 0x7c, 0x8a, 0x3f, 0x16,
  0x82, 0x66, 0x04, 0xb6, 0x0c, 0xcc, 0x1c, 0x0d, 0x3d, 0xfe, 0x79, 0xd8,
  0xb0, 0xd0, 0xa4, 0x16, 0xf1, 0xa6, 0xd4, 0x00, 0xae, 0x60, 0x1c, 0x6c,
  0x40, 0xaf, 0x86, 0xf8, 0x50, 0xb1, 0x65, 0x68, 0xaa, 0xf0, 0x74, 0xf3,
  0xec, 0x09, 0x01, 0x46, 0xa0, 0x87, 0xf4, 0x65, 0x6e, 0x09, 0x67, 0x72,
  0x34, 0xfe, 0xf4, 0x0f, 0x4e, 0x04, 0xfc, 0xa7, 0xaf, 0xfb, 0x5e, 0x5c,
  0x9f, 0x1c, 0xd0, 0x94, 0xfe, 0xd4, 0x2b, 0x1f, 0xe7, 0xc3, 0x7c, 0x26,
  0x17, 0x0f, 0x37, 0x1f, 0x36, 0x50, 0x7f, 0xc6, 0x54, 0x42, 0xb1, 0xba,
  0x9e, 0x03, 0x8f, 0xd2, 0x0d, 0x76, 0xbe, 0x40, 0x3b, 0x2c, 0x1f, 0x71,
  0xbd, 0x2c, 0x16, 0x2e, 0xc0, 0xcd, 0xfb, 0x53, 0xa4, 0x88, 0x27, 0xdc,
  0xf5, 0x56, 0xfa, 0x1b, 0x8b, 0x47, 0x55, 0x4b, 0x40, 0x82, 0x21, 0xa0,
  0xd5, 0x74, 0x6c, 0x78, 0x7a, 0x10, 0x58, 0x06, 0xf9, 0x05, 0x4c, 0xf3,
  0x23, 0x95, 0x64, 0x8a, 0x99, 0x7b, 0xcc, 0x3f, 0xeb, 0x5d, 0xd3, 0xcf,
  0x34, 0x8f, 0x46, 0xa0, 0x0c, 0x30, 0x33, 0x43, 0x8a, 0x4f, 0xba, 0x7e,
  0xf9, 0x73, 0x14, 0x4a, 0xcd, 0xc3, 0xc4, 0x77, 0xe0, 0x33, 0xde, 0x3c,
  0xf5, 0x56, 0x7f, 0x4c, 0x08, 0xee, 0x37, 0xbd, 0x4b, 0x56, 0x8f, 0x46,
  0xfd, 0x83, 0x80, 0x31, 0xcf, 0x63, 0x49, 0x66, 0xe3, 0xec, 0x35, 0x73,
  0x9f, 0x14, 0x74, 0x8d, 0x72, 0x9b, 0xe1, 0xb4, 0xfb, 0x4f, 0x0d, 0x87,
  0x7b, 0xaa, 0x55, 0x1b, 0x92, 0xf9, 0x83, 0xfe, 0xb5, 0x74, 0x62, 0x34,
  0x8c, 0x0a, 0x0b, 0x72, 0x30, 0xe5, 0x08, 0x47, 0x7e, 0x62, 0xad, 0xb9,
  0x86, 0x28, 0x84, 0x6d, 0x71, 0xb8, 0xf2, 0xa2, 0x1b, 0xd9, 0xe8, 0xb6,
  0x26, 0xf5, 0x45, 0x18, 0x08, 0x5f, 0x3d, 0x9c, 0x89, 0x92, 0x9b, 0xd0,
  0xd4, 0x29, 0x35, 0x03, 0xcf, 0x39, 0xfd, 0x90, 0xe6, 0x89, 0x75, 0x2c,
  0x73, 0xf4, 0xda, 0x06, 0xe2, 0xcc, 0x51, 0x80, 0xdb, 0x53, 0x70, 0xf4,
  0x3f, 0x9c, 0x68, 0x3b, 0xbb, 0xb6, 0x7a, 0x4e, 0x94, 0x1d, 0x74, 0x11,


  0x86, 0xd4, 0x5c, 0x3d, 0x1c, 0xe7, 0xdf, 0xbf, 0xe8, 0x6f, 0x6d, 0x78,

  0x87, 0x5a, 0x2d, 0x3e, 0x02, 0x6d, 0x14, 0x8f, 0x1f, 0x31, 0x4b, 0x95,
  0xce, 0x4c, 0xa3, 0x0a, 0xf4, 0x03, 0xda, 0x59, 0xc6, 0x46, 0x58, 0x2e,
  0x70, 0x1c, 0x22, 0xf3, 0x59, 0xce, 0x06, 0xdb, 0x53, 0xcb, 0xa8, 0xe7,
  0x83, 0xba, 0x10, 0x3d, 0xeb, 0xf5, 0x0e, 0x73, 0x7b, 0xde, 0xc4, 0x30,
  0x01, 0xe5, 0x23, 0x45, 0xae, 0x0d, 0x31, 0x81, 0xdc, 0x4b, 0x8a, 0x74,
  0xe4, 0xb6, 0x5b, 0xa5, 0x07, 0x88, 0xa4, 0x18, 0x79, 0x14, 0x43, 0xd9,
  0x41, 0x88, 0xe5, 0xc6, 0xff, 0xc8, 0xff, 0xeb, 0x84, 0xac, 0x4c, 0xba,
  0x23, 0x9d, 0x36, 0x4c, 0x14, 0x33, 0x6b, 0x6c, 0x06, 0xc2, 0xe9, 0x13,
  0xeb, 0x24, 0x0c, 0xf7, 0x1d, 0x46, 0xc3, 0x9b, 0xa5, 0x71, 0x69, 0x26,
  0xc8, 0x2b, 0xa0, 0x1b, 0x45, 0xeb, 0x25, 0xe4, 0xba, 0x1b, 0xaf, 0xf6,
  0x2b, 0x0a, 0x44, 0x8d, 0x38, 0xd6, 0x34, 0xc9, 0xfb, 0x2d, 0x3b, 0xc3,
  0x89, 0xc3, 0xcd, 0x9d, 0x69, 0xdf, 0x10, 0x5e, 0xb3, 0x1f, 0x7c, 0x6c,
  0xba, 0x15, 0x78, 0x63, 0xd7, 0x25, 0x88, 0x47, 0xca, 0xf9, 0x06, 0xdf,






  0x16, 0xa2, 0x05, 0x07, 0xa4, 0x8e, 0x18, 0xcc, 0x13, 0xb7, 0x76, 0xbd,
  0xde, 0xbd, 0xb9, 0xe5, 0x9c, 0x0d, 0x0a, 0x08, 0x73, 0x34, 0xfc, 0x59,
  0x64, 0xa1, 0x41, 0x38, 0xb9, 0x8f, 0x0a, 0xe9, 0x0c, 0xeb, 0x99, 0x3d,
  0x46, 0x41, 0xf4, 0xfe, 0x15, 0x9f, 0xdf, 0xdf, 0x0a, 0xd0, 0x3f, 0xa5,
  0x0f, 0x7f, 0x4c, 0x17, 0x0e, 0xcf, 0x3a, 0xbd, 0xc4, 0xc3, 0xa2, 0xba,
  0x17, 0x29, 0x9b, 0xe0, 0x1c, 0x63, 0x4c, 0xb9, 0xd0, 0x1e, 0x58, 0x9c,

  0xab, 0xf4, 0xe4, 0x66, 0x8e, 0x18, 0x5f, 0x81, 0x1d, 0x02, 0x2e, 0x10,
  0x05, 0xd8, 0xb7, 0xa2, 0xa5, 0x89, 0x83, 0xe0, 0xf4, 0xf2, 0x6e, 0xcf,
  0x0f, 0x44, 0x45, 0x01, 0x77, 0x99, 0xbb, 0xa4, 0x9d, 0x57, 0xad, 0x4b,

  0xe2, 0x7e, 0x1d, 0xb2, 0x24, 0x5e, 0x80, 0xdb, 0x64, 0x47, 0x16, 0xa2,
  0xeb, 0x70, 0x27, 0xfa, 0xc4, 0x92, 0xec, 0x22, 0x9e, 0x9c, 0x09, 0x7c,
  0xeb, 0xa3, 0x41, 0x80, 0x07, 0xd9, 0xcc, 0x9f, 0xc6, 0x6f, 0x83, 0x62,
  0x62, 0xb1, 0xe1, 0x11, 0x1d, 0x51, 0x89, 0x94, 0xa7, 0x12, 0xd6, 0xa8,
  0xa3, 0x80, 0x82, 0xdd, 0xa0, 0xaf, 0xdd, 0xe0, 0x1c, 0xb4, 0xcf, 0x6d,
  0x69, 0xe6, 0x00, 0x53, 0xb0, 0x3f, 0xe4, 0xeb, 0x82, 0xa2, 0x6f, 0x92,
  0x4b, 0x4f, 0x76, 0x33, 0x9b, 0x27, 0xe6, 0xc0, 0x57, 0xe0, 0xe9, 0x59,
  0xd0, 0x35, 0xfa, 0x58, 0x96, 0x33, 0x24, 0xf5, 0x74, 0xf2, 0x08, 0x53,
  0x2a, 0x5b, 0xa1, 0x69, 0x5c, 0x01, 0xca, 0xcf, 0xe9, 0x71, 0x39, 0x06,
  0xf3, 0x5a, 0x49, 0x3e, 0xcd, 0x45, 0x82, 0xe9, 0x37, 0x0c, 0x3d, 0xfe,
  0x14, 0x31, 0xa2, 0x1c, 0xa6, 0xcf, 0xdb, 0x40, 0x9f, 0xf0, 0x09, 0xa3,
  0x2c, 0xf4, 0xa3, 0x2d, 0x63, 0x09, 0x3e, 0x41, 0x08, 0xb5, 0x91, 0x70,


  0x10, 0x1b, 0xdd, 0xae, 0x6f, 0x08, 0x16, 0x22, 0x7a, 0x1b, 0xa2, 0xbb,
  0xff, 0x91, 0x34, 0x01, 0x8e, 0x47, 0x4b, 0xd6, 0xb9, 0x41, 0x61, 0xc2,
  0x41, 0x89, 0x36, 0x34, 0xa6, 0xdc, 0x3b, 0x43, 0x61, 0x38, 0x0b, 0x40,
  0xab, 0x47, 0x01, 0xa8, 0x0c, 0x6a, 0xa5, 0x45, 0x39, 0xd8, 0xf6, 0xa8,


  0xd7, 0x73, 0xa9, 0x28, 0xed, 0x61, 0x25, 0x6c, 0x8f, 0x7e, 0x11, 0xb5,



  0xba, 0x58, 0x6d, 0xba, 0x47, 0xb5, 0xd1, 0x55, 0xad, 0x4e, 0x55, 0x35,
  0xc9, 0xb1, 0x21, 0x74, 0x4c, 0x62, 0xfc, 0x23, 0xec, 0x3a, 0x43, 0x99,
  0x66, 0xf1, 0xea, 0xe1, 0x74, 0x3a, 0xd2, 0x8d, 0x8d, 0xac, 0xad, 0x29,
  0x01, 0x87, 0xe5, 0x0d, 0x52, 0x02, 0xa1, 0x12, 0xd8, 0x39, 0x14, 0xa6,
  0x86, 0x65, 0x5d, 0x5b, 0xf9, 0xea, 0x33, 0xae, 0x7f, 0xe9, 0x7a, 0xb7,
  0xb0, 0xa8, 0x06, 0x17, 0x7a, 0x4a, 0x30, 0x06, 0x19, 0x83, 0xac, 0x41,
  0x79, 0x94, 0xb3, 0x86, 0x36, 0x1e, 0xf5, 0xa9, 0x58, 0x94, 0x64, 0xbf,
  0xd6, 0xe2, 0x46, 0x94, 0x2c, 0x28, 0xbf, 0x58, 0x2f, 0x2d, 0x48, 0x33,
  0x16, 0xcb, 0x8d, 0x4d, 0xc4, 0x60, 0x23, 0x84, 0xe3, 0xd6, 0x54, 0xe3,
  0x80, 0x82, 0x5d, 0x91, 0x45, 0xe1, 0xe8, 0x27, 0xef, 0x06, 0x02, 0xe1,
  0x7d, 0x34, 0xbd, 0x42, 0x38, 0x70, 0x93, 0x57, 0x98, 0xe7, 0x31, 0x07,
  0x79, 0x4e, 0xcc, 0x80, 0x21, 0x0d, 0x2d, 0xe3, 0xd2, 0xa7, 0x03, 0x3e,
  0x3a, 0x1a, 0x4d, 0xc2, 0xc0, 0xd1, 0xaa, 0xd1, 0xb4, 0x46, 0xd0, 0x0c,
  0x45, 0xa1, 0xd4, 0x27, 0x6e, 0x1a, 0x62, 0x0d, 0x05, 0xbf, 0xa8, 0x97,
  0x58, 0xf6, 0x94, 0x3f, 0xb9, 0x62, 0x05, 0x8e, 0xf1, 0xbe, 0xfa, 0x8b,
  0x2e, 0x8b, 0x08, 0x7f, 0x5a, 0xd2, 0xff, 0xa3, 0xe7, 0x6d, 0x9d, 0x66,
  0xb0, 0xfb, 0x63, 0x61, 0x9b, 0x14, 0x7b, 0x0e, 0x38, 0x56, 0x8c, 0x89,

  0x04, 0x53, 0xa7, 0x91, 0x0b, 0x37, 0xd7, 0xb1, 0x36, 0x0d, 0xf0, 0xce,
  0x72, 0x89, 0x08, 0xdc, 0x93, 0xa7, 0x64, 0x39, 0x23, 0x53, 0xb1, 0x07,
  0xc9, 0x8c, 0x87, 0xd0, 0x95, 0xf5, 0x0e, 0x33, 0x2d, 0xb3, 0x32, 0x4b,
  0xa4, 0xcd, 0xd5, 0x69, 0x69, 0xe1, 0xc3, 0x6f, 0x34, 0x2b, 0x1e, 0xed,
  0x39, 0x73, 0xfa, 0x57, 0xe5, 0x5a, 0x53, 0x92, 0x91, 0xa8, 0x32, 0x12,
  0xe6, 0x59, 0xcc, 0x7e, 0xb5, 0x28, 0xab, 0x49, 0xab, 0xa7, 0xef, 0x6c,
  0x9b, 0x28, 0xdb, 0x0e, 0xb2, 0x10, 0x46, 0x0c, 0xd7, 0xff, 0xbd, 0x45,
  0xc5, 0x99, 0x44, 0xc5, 0x22, 0x4f, 0x91, 0xe4, 0xb2, 0xae, 0xd8, 0x96,
  0xf7, 0x64, 0x5b, 0x5a, 0x3f, 0x64, 0xb8, 0xee, 0x36, 0x0a, 0x64, 0xa0,
  0x93, 0xeb, 0x4a, 0x9d, 0x2a, 0x6c, 0x44, 0xa8, 0x67, 0x84, 0x5d, 0x23,
  0xfd, 0xe7, 0x33, 0xe4, 0x17, 0xbb, 0xe1, 0x35, 0xd0, 0x8c, 0x3e, 0xf1,
  0x1a, 0xda, 0xfd, 0x42, 0xfd, 0xc8, 0xc5, 0x8c, 0x5d, 0x3d, 0x9c, 0xe4,
  0xc9, 0xb3, 0x2b, 0xc9, 0x6d, 0x89, 0x56, 0x03, 0x06, 0x47, 0x3f, 0x70,
  0xc4, 0xce, 0xda, 0x27, 0x2c, 0x1e, 0x7a, 0x41, 0x13, 0xab, 0xb9, 0xc0,
  0xb4, 0x6e, 0x39, 0x04, 0xb7, 0x0c, 0x85, 0xc2, 0xc7, 0x78, 0xb1, 0x10,
  0x69, 0xf3, 0x34, 0xc9, 0x47, 0x0c, 0x0b, 0xc9, 0x4d, 0x80, 0xb1, 0x0d,
  0x15, 0x01, 0x70, 0x56, 0x79, 0x7e, 0xcb, 0x4e, 0x55, 0x4e, 0xc1, 0xc6,
  0x62, 0x48, 0x1f, 0x87, 0xda, 0x23, 0xf9, 0x99, 0xde, 0x9b, 0xcd, 0xc1,
  0xe0, 0xdd, 0x66, 0x52, 0x8d, 0x54, 0xea, 0x6d, 0xda, 0xec, 0x3f, 0xb1,
  0xbe, 0x9f, 0xd6, 0x62, 0x49, 0xf2, 0x52, 0x3f, 0x40, 0x24, 0x7e, 0xe3,
  0xd7, 0x7e, 0x06, 0xed, 0xd3, 0x26, 0xd4, 0x6d, 0xd1, 0x4f, 0xb0, 0x4c,
  0x44, 0xd3, 0xd6, 0x8f, 0xd4, 0x5d, 0x0a, 0x34, 0xe9, 0x75, 0x46, 0xa4,
  0x05, 0x3b, 0xf5, 0xe9, 0x9b, 0x6d, 0x17, 0x17, 0x5c, 0x0a, 0xba, 0x56,
  0x30, 0xe5, 0x67, 0xb9, 0xf8, 0x6f, 0x39, 0x4f, 0xf2, 0xec, 0x70, 0xec,
  0x97, 0x12, 0xa4, 0x9e, 0x9e, 0xf0, 0x02, 0x7d, 0x18, 0xec, 0xa6, 0x78,

  0x7a, 0xc6, 0xcf, 0x9e, 0xf0, 0xf3, 0x66, 0x2c, 0x81, 0x01, 0xf2, 0xa1,
  0xe9, 0x24, 0x68, 0xce, 0xe4, 0x9e, 0x16, 0x14, 0x71, 0xac, 0x09, 0x98,
  0xa6, 0xd9, 0x73, 0x9c, 0x7b, 0x26, 0x45, 0x07, 0xfd, 0xad, 0xd8, 0xc0,
  0xde, 0x0c, 0x2a, 0x09, 0xc0, 0xa5, 0xe4, 0x0a, 0x4f, 0xf3, 0x27, 0x67,
  0x17, 0x0b, 0x8c, 0x37, 0x8a, 0x05, 0xc7, 0xf9, 0x3e, 0x52, 0xfa, 0xc1,
  0x3c, 0x9e, 0x74, 0xb4, 0xc4, 0xfc, 0xe3, 0x40, 0x3f, 0x6b, 0xcf, 0x8d,
  0x05, 0xfa, 0x1e, 0xd7, 0x5a, 0xdd, 0x61, 0x58, 0xbe, 0xe5, 0x2c, 0x8c,
  0x5e, 0xff, 0xd4, 0x66, 0x63, 0xea, 0xf5, 0x6c, 0x66, 0xec, 0x80, 0x27,
  0x45, 0x12, 0x88, 0xb3, 0x85, 0x6e, 0x0f, 0xd2, 0x05, 0x91, 0x09, 0x93,
  0x69, 0x57, 0x2f, 0x46, 0x37, 0x7a, 0x36, 0x29, 0x50, 0xa8, 0x41, 0xb7,
  0xd6, 0x82, 0x12, 0xd3, 0x59, 0x62, 0xac, 0x9d, 0x7f, 0x19, 0x8f, 0x0c,
  0x80, 0xd1, 0x53, 0xb3, 0x8b, 0xb9, 0x8f, 0x5d, 0x63, 0x17, 0x38, 0x8f,
  0xa8, 0xa6, 0x51, 0x50, 0x76, 0xd4, 0xb3, 0xc4, 0x79, 0x2a, 0xdd, 0xbc,
  0x4d, 0x68, 0xcf, 0xdd, 0xad, 0xd2, 0xf2, 0xe7, 0x67, 0x08, 0xbc, 0xa0,
  0x41, 0x4e, 0x53, 0xa5, 0x99, 0x3f, 0xff, 0xfa, 0x7c, 0x82, 0x0b, 0xcf,
  0x29, 0x6a, 0xa8, 0x92, 0x36, 0x2f, 0x8e, 0xb6, 0x72, 0x78, 0xae, 0x2b,
  0x84, 0x32, 0xf4, 0xd5, 0x49, 0x6e, 0x72, 0xdd, 0x1a, 0x2c, 0x82, 0x63,
  0x3a, 0xb3, 0x32, 0x7f, 0x5a, 0x0b, 0xa4, 0x13, 0x70, 0xd2, 0xd7, 0x11,
  0xba, 0x9f, 0x1d, 0x98, 0x60, 0x07, 0xe1, 0xc5, 0xa9, 0x94, 0x68, 0x9e,
  0x76, 0x29, 0xc2, 0x19, 0x86, 0x6f, 0x8c, 0x58, 0x05, 0x75, 0x23, 0xc1,
  0xdf, 0x65, 0x83, 0x43, 0x4b, 0x79, 0x7b, 0x94, 0x62, 0xfb, 0x1c, 0x22,
  0x42, 0x87, 0x67, 0xe0, 0xae, 0x52, 0x53, 0x04, 0x35, 0xca, 0xf8, 0xcb,
  0x54, 0x9f, 0x69, 0x9c, 0xa6, 0x09, 0xc7, 0x9f, 0xf0, 0x75, 0x5b, 0xce,
  0x41, 0x56, 0x28, 0xea, 0x93, 0xbd, 0xa7, 0x5c, 0xed, 0x14, 0x94, 0xc0,


  0xa8, 0x04, 0xe5, 0x90, 0x52, 0x13, 0x6c, 0x0c, 0x4b, 0x68, 0xf8, 0x53,
  0x7c, 0x12, 0x0a, 0xe3, 0x7f, 0xb0, 0x7a, 0x38, 0x6d, 0x00, 0xf2, 0x09,
  0x71, 0x4c, 0x1f, 0x62, 0xb8, 0x03, 0xa1, 0xfa, 0x80, 0x32, 0x26, 0x29,
  0x64, 0x9b, 0xae, 0x70, 0xc0, 0xa4, 0xde, 0x2f, 0xb7, 0x6a, 0x76, 0x67,
  0x2f, 0xab, 0x40, 0x09, 0x09, 0xa8, 0xf5, 0x14, 0xdf, 0x66, 0x61, 0x01,
  0x16, 0x75, 0x4c, 0xd5, 0x23, 0x78, 0xca, 0xc9, 0x43, 0xc5, 0xf1, 0x05,
  0xfa, 0x1d, 0xce, 0x25, 0x05, 0xbd, 0x0e, 0x43, 0xda, 0x16, 0x20, 0x35,

  0x50, 0x55, 0x21, 0x75, 0xac, 0xf4, 0x35, 0xe3, 0xaf, 0x7b, 0x18, 0x4f,
  0xfb, 0x79, 0x91, 0xa2, 0xbc, 0xa1, 0x44, 0x4e, 0x1d, 0x0c, 0xe9, 0xbe,
  0x4b, 0xfc, 0x04, 0xad, 0xc7, 0xd0, 0x70, 0x1a, 0x59, 0x8b, 0x22, 0x0e,
  0xad, 0x79, 0x43, 0xcf, 0x89, 0x5e, 0xf1, 0x77, 0x66, 0x54, 0x81, 0x4e,
  0x08, 0xd5, 0x97, 0x6b, 0x0d, 0x8e, 0xe9, 0x14, 0xab, 0x29, 0x2f, 0x66,
  0xb5, 0x76, 0xa1, 0x18, 0x83, 0x05, 0xc2, 0x2b, 0xb8, 0x92, 0xdd, 0xf3,
  0x45, 0xa5, 0x65, 0xb9, 0xa4, 0x03, 0x7b, 0x7b, 0x7a, 0x76, 0x62, 0xb2,
  0xda, 0xfe, 0xd7, 0x66, 0x1f, 0xb7, 0xbc, 0x18, 0x79, 0x39, 0x7c, 0x5c,
  0x43, 0xea, 0x14, 0x04, 0x4b, 0x91, 0xe9, 0xb7, 0x5d, 0xee, 0xab, 0x49,
  0x3f, 0xae, 0x55, 0x98, 0x9e, 0x9c, 0x7f, 0x77, 0x7a, 0x75, 0x71, 0xfe,
  0xfe, 0xe4, 0xfc, 0xfa, 0x33, 0x87, 0xdd, 0x85, 0xba, 0x46, 0x94, 0x7e,

  0x72, 0x41, 0x8a, 0xe1, 0xa0, 0x7b, 0x2a, 0x02, 0xe4, 0xde, 0x2d, 0xb0,
  0x52, 0xf9, 0x57, 0xdf, 0x1d, 0xce, 0x79, 0x48, 0x3d, 0xfb, 0x98, 0x49,
  0xb2, 0x40, 0xcf, 0xce, 0x18, 0xe3, 0xaa, 0x7d, 0x8e, 0x05, 0x98, 0xbe,
  0xc4, 0xd8, 0xb8, 0xe2, 0x01, 0x81, 0xc2, 0x29, 0x15, 0x18, 0x6b, 0xc7,
  0x3e, 0x33, 0x5b, 0xc2, 0x41, 0x40, 0x1b, 0x2b, 0xad, 0x4d, 0xc2, 0x12,
  0xf7, 0x07, 0x29, 0x00, 0xcd, 0xa2, 0xe0, 0x6a, 0x14, 0xfd, 0x8e, 0x14,
  0x02, 0xfa, 0xec, 0x0d, 0xe7, 0xe1, 0x70, 0xf4, 0x85, 0x99, 0x84, 0x93,
  0x03, 0xea, 0xa0, 0x0e, 0x3b, 0x2d, 0x94, 0x9b, 0x48, 0xc3, 0xce, 0x2a,
  0xfe, 0xaa, 0xce, 0xa2, 0x83, 0xcd, 0xcd, 0x9f, 0xa8, 0x7b, 0xf7, 0x97,
  0xd2, 0xbe, 0xdb, 0x47, 0x4c, 0x2d, 0x9d, 0x69, 0xd8, 0x92, 0x21, 0xad,
  0x2e, 0x44, 0xba, 0x35, 0xdb, 0x49, 0x6e, 0xe0, 0x8f, 0x97, 0x57, 0x17,
  0x3f, 0xfc, 0xe5, 0x37, 0xfe, 0x84, 0x93, 0x6c, 0xf6, 0x57, 0xcc, 0xc1,
  0xd4, 0xc1, 0x7f, 0xfa, 0xcd, 0xbf, 0x56, 0x1f, 0xbe, 0x2b, 0x91, 0x76,
  0x6e, 0x35, 0xee, 0x2b, 0x64, 0x5c, 0xbc, 0xcd, 0x50, 0xfa, 0x36, 0x25,
  0x3a, 0x72, 0x7c, 0x1c, 0x26, 0x19, 0x88, 0x44, 0x5c, 0x59, 0x27, 0xd0,
  0xd8, 0x07, 0xd6, 0xee, 0x73, 0x49, 0xb1, 0xcd, 0xe0, 0xd5, 0xaa, 0x72,
  0xac, 0x1c, 0xe7, 0xda, 0x72, 0xca, 0x47, 0x35, 0xfb, 0x71, 0x74, 0x76,
  0xf6, 0x9b, 0x6e, 0x02, 0x75, 0x40, 0xb6, 0x6b, 0xe9, 0x19, 0x0d, 0x55,
  0x9e, 0x7e, 0x02, 0xb8, 0xf6, 0xfc, 0x42, 0x66, 0x73, 0x48, 0xca, 0x71,

  0xaf, 0x4c, 0x40, 0xa5, 0x8d, 0x31, 0xde, 0xaf, 0xc0, 0xe5, 0x38, 0xb1,
  0x72, 0x93, 0x13, 0x27, 0x3d, 0x1c, 0x75, 0x7a, 0x88, 0x92, 0x05, 0xc8,
  0x84, 0xa2, 0xbc, 0x4a, 0xde, 0x4d, 0x2e, 0x8b, 0xa3, 0xba, 0x85, 0xdc,
  0xe0, 0x12, 0x71, 0x3f, 0x76, 0xee, 0x07, 0x3e, 0x09, 0xb4, 0x7b, 0x66,
  0x74, 0x08, 0x94, 0xb7, 0x45, 0x5a, 0xde, 0x52, 0x51, 0x07, 0xde, 0x50,
  0x52, 0x90, 0xb4, 0x7e, 0x1f, 0x55, 0x5e, 0x9a, 0x53, 0x9f, 0x21, 0x46,
  0x6c, 0x35, 0x5d, 0x5a, 0x86, 0x66, 0x47, 0x7d, 0xb3, 0x58, 0x14, 0xa3,
  0x1b, 0x95, 0x9d, 0xd0, 0x71, 0xad, 0xb4, 0x4b, 0xc0, 0xdf, 0x39, 0x89,
  0xaa, 0x34, 0x38, 0x03, 0xa1, 0xb2, 0xf4, 0xae, 0x96, 0x1b, 0xe3, 0x03,
  0xfc, 0xe9, 0xaa, 0x4c, 0x66, 0x93, 0x70, 0x85, 0x7d, 0x90, 0x5b, 0x48,

  0x85, 0xbf, 0x69, 0x48, 0xaf, 0xc4, 0x8a, 0x87, 0x95, 0x10, 0x26, 0x0d,


  0x86, 0x16, 0x7c, 0x7f, 0x9d, 0xd0, 0x61, 0x2d, 0xcf, 0xe0, 0xc1, 0xb6,
  0x11, 0x8b, 0x9c, 0x6a, 0x56, 0xce, 0x13, 0xd3, 0xb3, 0x7d, 0x3d, 0xf6,
  0x0b, 0xa6, 0x80, 0x23, 0xb9, 0xf8, 0x1d, 0x2a, 0x79, 0x7b, 0x0f, 0x91,
  0x02, 0x87, 0xf0, 0x39, 0xd5, 0x9e, 0x91, 0xdf, 0x3c, 0x67, 0x38, 0x6a,
  0xce, 0x50, 0x62, 0x6e, 0xb4, 0x4c, 0x35, 0xaa, 0x30, 0xbb, 0xb7, 0x8a,
  0xc4, 0x2f, 0xce, 0x4a, 0x38, 0x61, 0xed, 0xf8, 0x75, 0x12, 0xce, 0xc4,
  0x57, 0x4d, 0xb4, 0x75, 0xa6, 0x81, 0xd8, 0x30, 0x3c, 0x86, 0x2e, 0x78,
  0x06, 0x91, 0x71, 0xc7, 0x33, 0xf3, 0x24, 0x6d, 0x95, 0xe7, 0xc8, 0x7a,
  0x9c, 0x42, 0x69, 0x25, 0xa1, 0x20, 0x5c, 0x30, 0xfd, 0xc6, 0xbd, 0x32,
  0x72, 0x17, 0x4c, 0x49, 0x3b, 0x29, 0xe1, 0xa6, 0x2c, 0xd4, 0x46, 0xda,
  0x31, 0xdc, 0x12, 0xf9, 0xfe, 0x71, 0x8a, 0xbf, 0xa0, 0x50, 0x27, 0x46,




  0x44, 0xb1, 0x12, 0x53, 0x77, 0x20, 0xc5, 0xb2, 0x54, 0x5f, 0x37, 0xd4,
  0x32, 0x63, 0x0d, 0x6e, 0x81, 0x08, 0x9c, 0xe5, 0x65, 0x08, 0x4e, 0x73,

  0x88, 0x59, 0xf3, 0x09, 0x35, 0xfa, 0xe1, 0x2b, 0x0f, 0xff, 0xbd, 0xbe,
  0x38, 0xbe, 0x38, 0x83, 0xbf, 0x9c, 0xbc, 0x3d, 0xfd, 0xc1, 0x6a, 0x05,
  0x0c, 0x50, 0x51, 0x2b, 0x90, 0x21, 0xdc, 0xc5, 0x97, 0x5d, 0x97, 0x0d,
  0x71, 0x0e, 0x22, 0xa6, 0x1f, 0x72, 0x4a, 0x5c, 0x93, 0x42, 0x0d, 0xb7,
  0x74, 0xf8, 0x1c, 0xca, 0x69, 0xcc, 0x17, 0x75, 0xf0, 0x47, 0x62, 0x01,
  0x5e, 0x42, 0x2d, 0x9a, 0x47, 0x36, 0xc5, 0x14, 0x76, 0x93, 0xb1, 0x46,
  0xca, 0x65, 0x73, 0x92, 0x8d, 0x6a, 0x3f, 0x99, 0x2a, 0x2c, 0x51, 0x6d,
  0x72, 0x79, 0x61, 0xba, 0xe0, 0x56, 0x6e, 0x87, 0xf5, 0x46, 0x4b, 0x1b,
  0x17, 0x2f, 0x3f, 0x4b, 0xdc, 0x45, 0x9a, 0xb6, 0xe8, 0x55, 0x91, 0x10,
  0x57, 0x24, 0xa0, 0x3a, 0x54, 0x04, 0x5c, 0x94, 0x8f, 0x06, 0x45, 0x50,
  0x85, 0x8e, 0x19, 0xb1, 0xbe, 0x26, 0xd9, 0x00, 0xc9, 0xe5, 0xa3, 0xdc,
  0x0a, 0xd4, 0xe3, 0x1d, 0x88, 0x1f, 0xa1, 0xd6, 0x60, 0xb9, 0xa0, 0xd4,
  0x29, 0xe1, 0x1f, 0x94, 0x5d, 0xc5, 0x51, 0x0c, 0xe1, 0xa8, 0xd7, 0x4e,
  0x6b, 0x77, 0x96, 0x0a, 0x12, 0x7c, 0x5a, 0xf8, 0xa6, 0x15, 0x9e, 0x81,
  0x28, 0xfb, 0x75, 0x8d, 0xa3, 0x6c, 0xfb, 0x34, 0x9a, 0xa8, 0xb2, 0x07,
  0xf6, 0xd3, 0x5e, 0xd6, 0x35, 0x66, 0x7d, 0x97, 0x7b, 0xab, 0xc6, 0x40,
  0x8d, 0xf0, 0xef, 0xcb, 0xf4, 0x2e, 0xa6, 0xda, 0x32, 0xb8, 0x2c, 0xbd,
  0x1e, 0xbf, 0xd4, 0x18, 0x23, 0xfe, 0x55, 0x83, 0xc4, 0xf5, 0x51, 0xf6,
  0x7f, 0xcd, 0x20, 0xfb, 0x8d, 0x31, 0x6e, 0x7e, 0xd5, 0x20, 0x3d, 0x15,
  0x10, 0xa0, 0x18, 0xff, 0x70, 0x7a, 0x1d, 0x1d, 0x5f, 0xbc, 0xb1, 0x17,
  0xec, 0xda, 0x64, 0x6f, 0xc7, 0xd1, 0x70, 0x99, 0x01, 0x0d, 0x62, 0x2f,
  0x26, 0xd3, 0xdd, 0x82, 0xd3, 0x14, 0x31, 0x07, 0xa7, 0xd4, 0x8a, 0xb5,
  0xb4, 0x60, 0x28, 0x22, 0xcc, 0xab, 0x61, 0x24, 0x25, 0xa7, 0x46, 0x17,
  0x9f, 0x9e, 0x23, 0xd0, 0xd1, 0x54, 0xa5, 0x2f, 0xde, 0x4a, 0xc4, 0xba,
  0x8b, 0x0b, 0xad, 0x2a, 0x1d, 0xc6, 0x08, 0x66, 0x94, 0x71, 0x6d, 0x24,
  0xc8, 0xce, 0x00, 0xf4, 0xb0, 0x0e, 0xe7, 0x22, 0x10, 0x83, 0xee, 0x9c,
  0x56, 0x3a, 0x15, 0x37, 0x93, 0x70, 0x5b, 0x73, 0xfd, 0x6b, 0x94, 0x2e,
  0xed, 0xed, 0x48, 0xf8, 0x61, 0x5e, 0xf7, 0xd8, 0xc0, 0x59, 0xa3, 0x4a,
  0x9c, 0xd9, 0x9c, 0x7d, 0x6e, 0x72, 0xed, 0x49, 0x6c, 0x33, 0x84, 0xf9,
  0xce, 0x8e, 0x84, 0x12, 0x40, 0x45, 0x67, 0xbf, 0x81, 0xe4, 0x95, 0xa5,
  0x3f, 0x3b, 0x0a, 0xfa, 0xae, 0xd1, 0xc7, 0x60, 0xe5, 0x33, 0xea, 0x1c,
  0x3d, 0xe6, 0x0b, 0x51, 0x3e, 0x82, 0x50, 0x7f, 0x20, 0x83, 0x1c, 0xed,
  0x27, 0x81, 0x73, 0xb2, 0x6f, 0xee, 0x89, 0x56, 0x16, 0x19, 0xdc, 0x28,
  0x6a, 0xbf, 0xb5, 0xa8, 0x47, 0x83, 0xac, 0xd7, 0x42, 0x4b, 0xa4, 0x29,
  0xc4, 0x99, 0x94, 0xd8, 0xc9, 0x3a, 0xe0, 0xb9, 0xb0, 0x89, 0x07, 0x0c,


  0xdf, 0xc0, 0xe5, 0xd6, 0x02, 0xbf, 0xed, 0xb4, 0x29, 0x34, 0x60, 0x3f,
  0x98, 0x99, 0x44, 0xfb, 0xd5, 0xe3, 0x1e, 0x4d, 0x5e, 0x5d, 0xba, 0xad,
  0xc0, 0x54, 0x8b, 0x63, 0x9c, 0xd3, 0x06, 0x76, 0x29, 0x93, 0x17, 0xf6,
  0x6d, 0x18, 0x23, 0xd4, 0x03, 0xb5, 0x46, 0x8c, 0x33, 0xae, 0x34, 0xd4,
  0x13, 0x08, 0xd7, 0xdc, 0xd9, 0x9a, 0xa7, 0x7d, 0xfe, 0xe3, 0x58, 0x35,

  0x36, 0x29, 0x1b, 0x72, 0x19, 0x0b, 0x0b, 0x19, 0xb1, 0x6e, 0x72, 0xc2,
  0xe8, 0x40, 0x19, 0x44, 0xeb, 0x23, 0x06, 0xe9, 0x6f, 0x42, 0xd9, 0xf0,
  0x71, 0xbe, 0x68, 0xf9, 0x0a, 0x43, 0x3a, 0xd9, 0x8f, 0xb8, 0x3e, 0x79,
  0xdd, 0x42, 0x79, 0xd6, 0x19, 0xed, 0x65, 0x93, 0x2e, 0x1c, 0xcf, 0x3e,
  0x8d, 0x68, 0x9e, 0xfc, 0x5c, 0x7c, 0x11, 0x09, 0x16, 0x2d, 0x8a, 0xf2,
  0x5c, 0x24, 0x8b, 0x99, 0xac, 0x4c, 0x7e, 0x42, 0x81, 0x63, 0xf2, 0x26,
  0xd0, 0x2e, 0x8f, 0x74, 0x96, 0xa0, 0x0e, 0xbb, 0xa6, 0xe0, 0x2b, 0xf9,
  0x2c, 0x36, 0x81, 0x63, 0xd5, 0x81, 0x70, 0x37, 0x52, 0x43, 0x6f, 0xd2,
  0x74, 0x9e, 0x7e, 0x84, 0x09, 0x8e, 0x84, 0xea, 0xa0, 0xff, 0x96, 0x37,
  0x3c, 0xa4, 0xbb, 0x86, 0x2b, 0x19, 0x57, 0xbb, 0x2c, 0xb8, 0x68, 0xd7,
  0x62, 0x3b, 0x2a, 0xd8, 0xba, 0xe4, 0xff, 0x15, 0x08, 0xc9, 0xd7, 0x07,
  0x5e, 0x94, 0x7b, 0xe8, 0x93, 0xf9, 0xa4, 0x12, 0xec, 0x2f, 0xee, 0xb7,
  0xc6, 0xfb, 0x73, 0x13, 0x67, 0xd3, 0x84, 0xfd, 0x2f, 0x0e, 0x3c, 0x25,
  0xf7, 0xea, 0x63, 0x71, 0x08, 0x77, 0x9d, 0x9c, 0x3c, 0xad, 0xe8, 0x13,
  0x76, 0x1f, 0xb6, 0xb7, 0xcc, 0x3e, 0x70, 0x1b, 0x2e, 0xaa, 0x4e, 0xc1,

  0x5d, 0xf8, 0x9e, 0x10, 0x09, 0xef, 0x63, 0x6e, 0xd3, 0xab, 0xcd, 0xec,
  0xad, 0xd1, 0x62, 0xc2, 0x3c, 0x18, 0x59, 0xf3, 0xf3, 0xa4, 0x09, 0xc9,
  0x01, 0xb3, 0x60, 0x50, 0x1f, 0xe0, 0x54, 0x4f, 0x2e, 0x6f, 0x14, 0x71,
  0xd5, 0x25, 0x83, 0xde, 0x30, 0x48, 0x8e, 0xb3, 0x12, 0xef, 0xbd, 0x4b,
  0x42, 0xb0, 0x19, 0x8a, 0x5b, 0xe5, 0x64, 0x73, 0x58, 0xd0, 0x10, 0x67,
  0x3d, 0xdb, 0x66, 0x3d, 0xf7, 0x44, 0x28, 0x97, 0x47, 0x83, 0x81, 0x92,
  0xc9, 0xb1, 0x4f, 0x11, 0x12, 0x3d, 0x22, 0x04, 0x1d, 0x29, 0x92, 0x0e,
  0xa8, 0x8a, 0x32, 0x48, 0x23, 0xc9, 0x60, 0x9b, 0x79, 0xda, 0x1b, 0x66,



  0xcc, 0xa4, 0x4d, 0xc8, 0x7a, 0x99, 0xae, 0x74, 0xc5, 0xf7, 0xab, 0x77,
  0xf2, 0xb3, 0x60, 0xba, 0x0a, 0x07, 0x2c, 0x71, 0x9f, 0xa9, 0x18, 0x59,
  0x79, 0x3c, 0xa9, 0x86, 0x0f, 0x8b, 0xb4, 0xd6, 0x11, 0x71, 0x7b, 0xd7,
  0x5f, 0xf4, 0x77, 0xbc, 0xaa, 0xee, 0xbf, 0xb4, 0xe8, 0xef, 0x02, 0x8b,
  0xde, 0xb3, 0x17, 0x87, 0x3f, 0x16, 0xed, 0xec, 0xbc, 0xd4, 0x82, 0x10,
  0xa0, 0x63, 0xfa, 0x9e, 0xfd, 0xa0, 0xf3, 0x45, 0x78, 0xae, 0x47, 0xf5,
  0x07, 0xfe, 0xb7, 0x9c, 0xcb, 0xeb, 0x7c, 0x6a, 0xdf, 0x7c, 0x0a, 0xd4,
  0x6f, 0xb4, 0x40, 0x41, 0xa7, 0x67, 0x2e, 0xe3, 0x31, 0x1f, 0x35, 0xe5,
  0x50, 0x0d, 0xbf, 0xc7, 0xfc, 0xa9, 0xca, 0xe8, 0x92, 0x8d, 0x4f, 0xe9,
  0x2c, 0x9c, 0xef, 0xbc, 0x30, 0x6e, 0x94, 0xcd, 0x1d, 0x0d, 0xa0, 0x1f,
  0x11, 0x2f, 0x9e, 0x25, 0x73, 0xa2, 0xcc, 0x71, 0x82, 0x68, 0x3d, 0xd6,
  0xfd, 0xc7, 0x35, 0x77, 0x93, 0x22, 0x26, 0xb4, 0xe5, 0x59, 0xfc, 0x18,
  0x00, 0xdb, 0x12, 0x4f, 0x31, 0x9b, 0x2b, 0x31, 0xce, 0x3e, 0x43, 0x5b,
  0x81, 0x34, 0x01, 0x71, 0x9b, 0xa1, 0x1f, 0x16, 0x4f, 0x34, 0x9f, 0x18,
  0x57, 0xad, 0x7c, 0xd5, 0x83, 0x03, 0x28, 0xa5, 0x3d, 0x22, 0x5f, 0x19,
  0xd1, 0x12, 0xc2, 0xd8, 0x70, 0xdb, 0x2f, 0xed, 0x11, 0x99, 0x73, 0x40,
  0xc7, 0x16, 0x43, 0x84, 0x38, 0xbb, 0xa7, 0xbc, 0x44, 0xe3, 0x01, 0xd2,
  0x76, 0x07, 0xa3, 0x74, 0xa9, 0x6f, 0x35, 0x17, 0x8e, 0x82, 0xb8, 0xcd,
  0xdc, 0xf8, 0x12, 0x99, 0x9d, 0x00, 0xee, 0xf6, 0xa3, 0x0b, 0xf2, 0xc2,
  0xd5, 0x20, 0xc6, 0x27, 0x4c, 0xfa, 0xb6, 0x68, 0xb4, 0x4e, 0xb8, 0xaf,
  0xec, 0x09, 0xeb, 0x9c, 0x34, 0xf9, 0x65, 0x53, 0x99, 0xac, 0x11, 0x28,
  0xea, 0x6d, 0x4e, 0xa2, 0xab, 0x93, 0xeb, 0x2b, 0x8a, 0xf3, 0x12, 0x03,
  0xf0, 0x40, 0x52, 0xe3, 0x62, 0xc3, 0x80, 0x04, 0x09, 0x3b, 0xb3, 0x7a,
  0x88, 0x65, 0x10, 0x8c, 0x5f, 0x66, 0xce, 0x9b, 0xff, 0xa9, 0xef, 0x71,
  0xf5, 0x4b, 0xa2, 0xb5, 0x26, 0x36, 0xa2, 0x53, 0x47, 0x56, 0xdb, 0xd9,
  0xb1, 0x59, 0x48, 0xdc, 0x3a, 0x99, 0xc5, 0x9c, 0x64, 0x92, 0xf7, 0x25,
  0xbb, 0x45, 0x8b, 0x2f, 0xb4, 0x55, 0x1e, 0x3e, 0xc4, 0xd9, 0xd8, 0x79,
  0x11, 0x10, 0xb9, 0xf2, 0x69, 0x95, 0xff, 0x3c, 0x05, 0x8b, 0xa2, 0xc6,
  0x5f, 0xe3, 0x9f, 0x32, 0xf7, 0x94, 0x0a, 0xc0, 0x68, 0x6f, 0x6b, 0x2b,
  0x00, 0x3b, 0x1c, 0x0f, 0x81, 0xa9, 0x8a, 0x36, 0x27, 0x55, 0x3d, 0xf4,
  0x16, 0x7b, 0x4d, 0x49, 0xbd, 0x2c, 0xd1, 0xd4, 0xe8, 0x4d, 0xd0, 0x8d,
  0x89, 0x3b, 0xe6, 0x1b, 0x15, 0x3b, 0xcc, 0x63, 0xbe, 0xa7, 0x2a, 0x23,
  0xdd, 0xb4, 0x06, 0x73, 0xe1, 0x12, 0x24, 0xed, 0xcd, 0x1b, 0x3b, 0x60,
  0xcc, 0xe2, 0xff, 0xf6, 0x66, 0xe6, 0xf1, 0xef, 0x9d, 0x7d, 0x9f, 0x22,
  0x06, 0xd7, 0x17, 0x57, 0x42, 0x61, 0xbe, 0x68, 0xe6, 0x1d, 0xa1, 0x47,
  0x2c, 0xda, 0x4a, 0xd7, 0x87, 0xdc, 0x19, 0x1b, 0x7c, 0x00, 0x83, 0x62,
  0xea, 0x7c, 0x95, 0x39, 0x00, 0xb5, 0xe7, 0x93, 0xa5, 0x7d, 0x27, 0x88,
  0x00, 0x8a, 0xd7, 0xab, 0xf7, 0xd2, 0x79, 0x89, 0xaf, 0xd9, 0x05, 0xdf,
  0x5f, 0xae, 0x5e, 0x47, 0x3a, 0x92, 0x3a, 0x76, 0xc4, 0xfb, 0x95, 0x74,
  0x58, 0xd3, 0x47, 0xb4, 0x49, 0x8b, 0x7c, 0x89, 0x2e, 0x2c, 0x24, 0x33,



  0x73, 0x78, 0x59, 0xa7, 0xb1, 0x8a, 0xa9, 0x97, 0x2d, 0xf2, 0x09, 0x86,
  0x2c, 0x96, 0xc4, 0xa6, 0x98, 0x7d, 0x61, 0x23, 0x0f, 0xd6, 0x3d, 0x2f,
  0xc6, 0x92, 0xbe, 0x22, 0x82, 0x53, 0x8d, 0x05, 0xab, 0x67, 0x5b, 0xa9,
  0x7f, 0x79, 0x71, 0x75, 0x6d, 0x64, 0x3e, 0x7e, 0x96, 0x7e, 0xd0, 0xb8,
  0x3d, 0xd8, 0x2f, 0x45, 0xf0, 0x27, 0x44, 0xb2, 0x51, 0x87, 0xe0, 0xcf,
  0x82, 0x10, 0x04, 0x72, 0x24, 0x34, 0x8e, 0x0e, 0xd4, 0xa5, 0x3e, 0x7e,
  0xe3, 0x9c, 0xe1, 0x7c, 0x0c, 0xbf, 0x61, 0x0f, 0x3a, 0x09, 0x9a, 0x16,
  0x64, 0x30, 0xab, 0xdc, 0xee, 0x6e, 0xfb, 0x94, 0x81, 0x36, 0xf4, 0xd5,
  0xc9, 0xe0, 0x9a, 0x67, 0x8e, 0x7f, 0xf3, 0x66, 0xce, 0xf5, 0xa1, 0xf2,


  0x43, 0xdf, 0x89, 0x6a, 0x28, 0x03, 0x33, 0xd0, 0xc0, 0xda, 0xa0, 0xf1,
  0x4d, 0x81, 0xbb, 0xb3, 0x63, 0xbb, 0x4e, 0xb6, 0x21, 0x31, 0x4d, 0xa1,
  0x13, 0xba, 0xdf, 0xf4, 0x83, 0x8e, 0x7c, 0xa5, 0x03, 0x6a, 0xd9, 0x58,

  0x1b, 0x87, 0x39, 0x23, 0xec, 0xd9, 0x11, 0x16, 0x28, 0xa9, 0x64, 0x80,
  0x53, 0x6d, 0xc2, 0x8b, 0x3f, 0xec, 0x29, 0xa9, 0x90, 0xb0, 0x60, 0xa2,
  0xe0, 0xe7, 0xec, 0x38, 0xfb, 0x52, 0xa2, 0x7e, 0x66, 0x54, 0x05, 0x67,
  0x2a, 0xf8, 0x63, 0x4d, 0xf9, 0x21, 0x6d, 0xa3, 0x41, 0x72, 0xbb, 0x4c,
  0xe9, 0x5f, 0x63, 0xb6, 0xa0, 0x49, 0x5b, 0xe4, 0xb5, 0xbb, 0x72, 0x01,
  0x94, 0xad, 0x34, 0x5b, 0x26, 0xa4, 0xa3, 0xc5, 0xc5, 0x0c, 0x7b, 0x3d,
  0x00, 0x13, 0x29, 0xb8, 0x7e, 0xec, 0x3e, 0x0b, 0xc1, 0x52, 0x3b, 0xdf,
  0x10, 0xf9, 0x73, 0x7a, 0x76, 0x62, 0x8f, 0x8a, 0xfb, 0x44, 0xd0, 0x25,
  0xb6, 0xba, 0x3e, 0x5c, 0xd8, 0xcc, 0x88, 0x89, 0x7e, 0x74, 0x89, 0x1d,
  0xd1, 0x49, 0x67, 0x2a, 0xff, 0xdd, 0x8e, 0xc6, 0x97, 0x84, 0x3c, 0xf0,
  0x20, 0x36, 0xa9, 0xdc, 0x39, 0xcd, 0xe0, 0x64, 0xe9, 0x27, 0xf8, 0x57,
  0x07, 0xd3, 0xdc, 0x5b, 0xee, 0x2b, 0xfb, 0x72, 0x09, 0x2b, 0x01, 0x0b,
  0xbd, 0xf9, 0xc8, 0x9e, 0xd0, 0x15, 0x98, 0xef, 0x34, 0x84, 0x61, 0xcd,
  0x78, 0x97, 0xa5, 0x59, 0xcc, 0x98, 0x47, 0x98, 0xe8, 0x33, 0x35, 0x16,
  0xee, 0x0c, 0xc5, 0xc2, 0xe0, 0x68, 0x68, 0x1a, 0x08, 0x61, 0x92, 0x30,
  0x2a, 0x72, 0x30, 0x56, 0x86, 0x9c, 0x76, 0x66, 0x72, 0xed, 0xdd, 0x18,
  0x30, 0x6d, 0xad, 0xc1, 0x8b, 0x6a, 0x6e, 0x6e, 0xa3, 0xbd, 0xfb, 0x1e,
  0x53, 0xa2, 0x21, 0x1b, 0x23, 0xbf, 0x6a, 0xb3, 0x93, 0xec, 0x64, 0xc1,
  0xbd, 0x43, 0xa7, 0x01, 0xc6, 0x03, 0x40, 0xbe, 0xbb, 0xca, 0xff, 0xde,
  0xbe, 0x1d, 0x6a, 0x42, 0xe0, 0x3d, 0xca, 0xd7, 0x8f, 0x6a, 0x4e, 0x39,
  0xd3, 0x49, 0x22, 0x35, 0x4f, 0xb2, 0xd9, 0xc8, 0xb5, 0xe7, 0x81, 0x2b,
  0xe5, 0x7c, 0xe3, 0xa5, 0x98, 0xbe, 0x68, 0xfb, 0x66, 0x8f, 0x36, 0xf9,
  0xbe, 0xcf, 0x51, 0x65, 0xf6, 0x9b, 0x71, 0xa3, 0x1a, 0xf9, 0x8d, 0x80,
  0x30, 0xde, 0x88, 0x5f, 0x06, 0x5b, 0x51, 0x79, 0x88, 0x8b, 0xcb, 0xb9,
  0xe4, 0xf0, 0x3a, 0x5f, 0xfa, 0x5c, 0x3c, 0x19, 0x58, 0x7c, 0x9e, 0x59,
  0x90, 0x22, 0x67, 0x21, 0xa8, 0xe8, 0x8a, 0xd5, 0xac, 0xa1, 0x7c, 0x60,
  0x8e, 0xa3, 0xd8, 0xa4, 0x00, 0xfb, 0x18, 0x7b, 0x88, 0x5c, 0x86, 0x6c,



  0x56, 0x94, 0x5d, 0xf5, 0x28, 0xe4, 0x5a, 0x04, 0x2c, 0x9e, 0x05, 0x79,
  0x8c, 0x7f, 0x65, 0x9a, 0x06, 0xf9, 0x2e, 0xf1, 0x22, 0xf9, 0x1b, 0x29,
  0x92, 0x7d, 0xd3, 0x0b, 0x56, 0x03, 0xca, 0x71, 0xb6, 0x8c, 0x1d, 0x5b,

  0x7e, 0xef, 0x95, 0x78, 0xa8, 0xc4, 0x0d, 0x82, 0x91, 0xf5, 0x0c, 0xc1,
  0xaf, 0x1b, 0xe1, 0xc5, 0xfd, 0x6d, 0xe3, 0xab, 0xc4, 0x94, 0x59, 0xa9,
  0x03, 0x71, 0x13, 0x67, 0x11, 0xfe, 0x78, 0xf0, 0x2e, 0x7a, 0xff, 0x66,
  0x1f, 0x13, 0x7a, 0xa6, 0x49, 0xb1, 0x28, 0x30, 0x89, 0x53, 0x69, 0xf8,
  0xe2, 0x5b, 0x67, 0xb0, 0x1d, 0x9b, 0x7d, 0xa1, 0xe0, 0x88, 0xc2, 0xcc,
  0xc4, 0x5e, 0x80, 0x23, 0xc4, 0xc2, 0xe7, 0xa9, 0x36, 0xd8, 0x54, 0x1c,
  0x3f, 0x45, 0xab, 0x22, 0xad, 0xe5, 0xb3, 0x66, 0x52, 0x78, 0x8d, 0x81,


  0xed, 0xef, 0x5a, 0x06, 0x56, 0x3c, 0x2e, 0xb0, 0xb9, 0x4a, 0x36, 0x45,

  0xb3, 0x20, 0x70, 0xa3, 0xf6, 0x99, 0x69, 0x1e, 0xf3, 0xbd, 0x47, 0x1d,

  0xd6, 0x7f, 0x8d, 0xd4, 0x73, 0x72, 0x97, 0x3a, 0xef, 0xed, 0xbb, 0x5e,
  0x85, 0x52, 0x3a, 0xa3, 0x49, 0x4b, 0x0c, 0xd2, 0x50, 0x9c, 0x67, 0x5f,
  0x98, 0x67, 0xd1, 0x6f, 0x94, 0x66, 0x4e, 0x0b, 0xa3, 0x96, 0x37, 0x44,
  0xf9, 0x55, 0x03, 0x41, 0x15, 0x33, 0xd6, 0x77, 0x9c, 0xbd, 0x77, 0x5e,
  0x79, 0x55, 0x77, 0x9a, 0x50, 0x6f, 0x03, 0x43, 0x98, 0xb4, 0x28, 0xea,
  0x5b, 0xeb, 0xb8, 0x59, 0x58, 0x46, 0x5f, 0x36, 0xf3, 0xa0, 0x95, 0x07,
  0x26, 0x2e, 0x82, 0x88, 0x5e, 0x75, 0x26, 0xfd, 0xe3, 0xa3, 0xa8, 0xad,
  0x08, 0x88, 0x68, 0xdd, 0xf9, 0xc8, 0xb6, 0xdc, 0x19, 0xec, 0x7a, 0x3d,
  0xcd, 0xd2, 0x9f, 0x13, 0x27, 0x17, 0x4c, 0xdb, 0x4f, 0x39, 0x8f, 0xef,
  0x08, 0xc3, 0xe0, 0xce, 0xc6, 0xc4, 0x14, 0x31, 0x78, 0x6a, 0x1f, 0xd8,
  0x15, 0xaa, 0xe5, 0xee, 0x71, 0x9c, 0xfb, 0x00, 0xa3, 0x52, 0xe8, 0x3e,
  0xa9, 0xa5, 0xd5, 0xbf, 0xd8, 0x13, 0x9d, 0x4b, 0x75, 0x63, 0x94, 0xbc,
  0xb8, 0x11, 0x33, 0x02, 0x64, 0x6c, 0xb2, 0xe9, 0x17, 0x22, 0xf6, 0xe4,
  0x28, 0x4d, 0x0b, 0x2a, 0xd3, 0xce, 0x0b, 0xff, 0x7a, 0x9f, 0x66, 0x92,
  0xe8, 0xee, 0xbd, 0xfe, 0xa2, 0xc5, 0xfd, 0x58, 0xb2, 0xcc, 0x3c, 0x21,
  0x5a, 0x72, 0x9e, 0x7f, 0x69, 0x6f, 0x82, 0x45, 0xa0, 0xed, 0x5a, 0xdc,
  0xdb, 0xae, 0x8b, 0x59, 0xaa, 0x77, 0x89, 0x5d, 0x28, 0x09, 0xf7, 0x3a,
  0x08, 0x20, 0xcb, 0x4f, 0xcc, 0xe7, 0x67, 0x39, 0x72, 0x53, 0xe7, 0x7b,
  0x4c, 0x52, 0x6f, 0xa9, 0x57, 0x85, 0x35, 0x0e, 0xb2, 0xe8, 0xda, 0x29,
  0x93, 0xb5, 0x4f, 0xbf, 0x12, 0xda, 0x50, 0x79, 0x69, 0x8c, 0xd5, 0xb6,
  0x37, 0x5e, 0x6e, 0xb9, 0xca, 0xea, 0x18, 0xa3, 0xb2, 0x5c, 0xc6, 0xdf,
  0xfa, 0x02, 0x53, 0xc6, 0x29, 0x88, 0x91, 0x29, 0x10, 0x35, 0x3d, 0x63,
  0xd1, 0x0c, 0xed, 0x63, 0x3b, 0x35, 0xa6, 0x7b, 0xed, 0xaa, 0x4f, 0xd1,
  0xe9, 0x1b, 0xe7, 0xc1, 0x5d, 0xbb, 0xc0, 0x78, 0x86, 0xda, 0xc0, 0x23,
  0xfb, 0xa9, 0xca, 0x68, 0x1d, 0xdf, 0x72, 0x30, 0x4b, 0x5e, 0x32, 0x65,
  0x9c, 0xe7, 0x8c, 0xba, 0x45, 0xdb, 0xef, 0x3d, 0xc3, 0xe4, 0x70, 0x7c,
  0x03, 0x52, 0x6d, 0x54, 0x51, 0x4e, 0x68, 0xa6, 0x31, 0xae, 0xe6, 0xd9,
  0xbf, 0x7c, 0xb1, 0xe2, 0x59, 0x11, 0x9a, 0xa5, 0x11, 0xf5, 0xce, 0x7b,
  0x2f, 0xfd, 0x6b, 0xae, 0xe6, 0x80, 0x96, 0x29, 0xc0, 0x55, 0xc3, 0x9b,
  0x16, 0xad, 0x63, 0x79, 0xf4, 0xbf, 0xab, 0x63, 0xb0, 0x40, 0x3c, 0xc1,
  0xf2, 0xdf, 0xdd, 0xf9, 0x7e, 0xee, 0xd6, 0x3a, 0xb0, 0x57, 0xb0, 0x48,
  0x28, 0x4e, 0x30, 0xaa, 0xb5, 0x8b, 0xb0, 0x39, 0x42, 0xb4, 0x3b, 0xce,
  0x08, 0x7c, 0xe6, 0xa0, 0x47, 0x2c, 0x33, 0xcb, 0x39, 0xd8, 0x08, 0x14,
  0x34, 0x82, 0xb1, 0x0b, 0x3d, 0x89, 0x3c, 0x5f, 0x3c, 0x50, 0x8e, 0x0f,
  0x75, 0xab, 0x71, 0x0d, 0xca, 0x9b, 0x25, 0x9b, 0xdc, 0x66, 0x45, 0xd6,



  0xc1, 0xe6, 0xbc, 0xb6, 0x63, 0xb9, 0x17, 0xcd, 0x8d, 0xd4, 0xc6, 0x63,
  0x98, 0x2d, 0xdb, 0xe4, 0xa6, 0x7f, 0x00, 0xd5, 0x4b, 0xdf, 0x17, 0x39,
  0xfe, 0x55, 0x21, 0x42, 0xd6, 0xe3, 0x96, 0xd4, 0x4c, 0x49, 0x22, 0x77,
  0x3e, 0x23, 0xaa, 0x0d, 0xa6, 0x38, 0xc1, 0x29, 0xdd, 0x24, 0xa3, 0x5b,
  0xbd, 0x32, 0x32, 0x88, 0x4d, 0x3d, 0x77, 0xde, 0xda, 0x33, 0x5b, 0x4b,
  0x06, 0xcd, 0xd5, 0x49, 0xd3, 0x0a, 0xb0, 0x8f, 0x32, 0xd5, 0x5c, 0x5d,
  0x0f, 0x2e, 0x0f, 0x70, 0xce, 0x1c, 0x37, 0x84, 0x0b, 0x71, 0x3c, 0x48,
  0xfe, 0x2e, 0x75, 0x66, 0xa5, 0x7d, 0xfa, 0x45, 0xcb, 0xd3, 0x03, 0x71,
  0xec, 0x9d, 0x12, 0x52, 0x33, 0x9c, 0x83, 0xfb, 0x12, 0x13, 0xcd, 0x32,
  0x53, 0xff, 0x3e, 0xfb, 0xbf, 0x70, 0x66, 0xc4, 0x0d, 0x31, 0xb6, 0x6c,
  0x1f, 0xfe, 0xdc, 0xda, 0x34, 0x37, 0xcb, 0xec, 0xd6, 0xe8, 0x8b, 0x82,
  0xa3, 0xa7, 0x07, 0x6c, 0x5f, 0x78, 0xa5, 0x57, 0xc3, 0xf1, 0x83, 0x9a,
  0xbc, 0xa7, 0xae, 0x78, 0x28, 0xc4, 0xed, 0x28, 0x31, 0x4f, 0xe0, 0xaf,
  0x4b, 0x67, 0x0f, 0x5e, 0x6d, 0x19, 0xf1, 0x2b, 0x90, 0x3c, 0xb7, 0xc9,
  0xa3, 0xa5, 0x3a, 0xcd, 0xb1, 0x58, 0xa4, 0x19, 0xba, 0x20, 0xec, 0x23,
  0x76, 0x80, 0xed, 0x9a, 0x10, 0x68, 0xaa, 0x1b, 0x65, 0x15, 0x57, 0x4b,
  0x47, 0xc4, 0xbc, 0x62, 0xda, 0x19, 0x60, 0xd4, 0x71, 0x2e, 0xf4, 0x9a,
  0x66, 0xea, 0x6d, 0x6b, 0xb8, 0xd0, 0xf4, 0xa5, 0x1f, 0x7e, 0x60, 0x39,
  0x92, 0x2b, 0x30, 0x92, 0x84, 0xae, 0x4c, 0xf3, 0x27, 0x60, 0xba, 0xac,
  0x7a, 0xe0, 0x15, 0xa6, 0x78, 0x4f, 0x91, 0x60, 0x7f, 0x4a, 0xc5, 0xbe,
  0xa1, 0xcb, 0x13, 0x8a, 0x9e, 0xe7, 0x99, 0xc4, 0x6c, 0x31, 0x79, 0x93,

  0x5c, 0x9f, 0x0c, 0x36, 0xcd, 0xae, 0x30, 0x98, 0xc1, 0xd1, 0x87, 0xeb,
  0x77, 0x17, 0x57, 0x83, 0x68, 0x13, 0x6b, 0xdb, 0xaf, 0xaf, 0x4e, 0xbf,
  0xfe, 0x70, 0x0d, 0xff, 0xd4, 0x91, 0xde, 0xc4, 0x59, 0x0a, 0xd2, 0x69,
  0x50, 0x25, 0x19, 0xd0, 0xca, 0x54, 0x7b, 0x34, 0x51, 0x0e, 0x0a, 0xca,
  0xe3, 0xbc, 0x50, 0x48, 0x13, 0x4c, 0x47, 0xc9, 0x67, 0x36, 0x99, 0x80,
  0x3d, 0xd8, 0x98, 0xe3, 0x97, 0x5b, 0xcb, 0x39, 0x6d, 0x14, 0xe5, 0x6b,
  0xda, 0x4e, 0x74, 0xfd, 0xee, 0xe8, 0xfc, 0xdb, 0x81, 0x76, 0xf0, 0xf8,
  0xfe, 0xfb, 0xef, 0x9b, 0xc1, 0x5d, 0xd2, 0x61, 0x6f, 0xe2, 0x87, 0x87,
  0x7e, 0x99, 0x7c, 0xf6, 0xd9, 0xe0, 0xe4, 0x24, 0x3a, 0x3a, 0x1b, 0x5c,
  0x7c, 0x66, 0x71, 0x1c, 0xd6, 0xb7, 0x37, 0x40, 0x49, 0x9b, 0x26, 0x15,
  0xfc, 0xe5, 0xb3, 0xcf, 0xfe, 0x3f, 0x9c, 0x42, 0xb5, 0x6c, 0xe8, 0xa0,
  0x02, 0x00,
};
#define BUF_SIZE 0x10000
static voidpf zalloc_func(voidpf opaque, unsigned int items, unsigned int size)
{
  (void) opaque;
  /* not a typo, keep it calloc() */
  return (voidpf) calloc(items, size);







|
|


|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
<
>
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
<
|
|
>
|
<
|
>
|
|
>
>
|
<
<
|
|
|
>
>
|
|
<
<
|
|
|
|
|
|
|
|
|
|
|
<
|
|
>
|
>
|
|
>
|
|
>
|
<
<
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
|
<
|
|
>
|
|
|
>
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
>
>
|
|
|
<
<
<
|
|
|
|
|
>
>
|
>
|
|
<
<
<
|
|
<
|
>
|
|
|
|
|
|
|
<
|
|
>
|
>
>
>
|
|
<
>
|
|
|
<
|
>
|
|
|
|
|
<
|
|
>
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
<
<
|
>
>
|
>
|
<
|
|
<
<
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
>
>
|
<
|
<
|
|
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
|
|
|
|
>
|
<
|
|
<
|
>
|
<
|
|
>
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
>
|
|
<
>
|
<
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
<
|
|
|
|
|
>
|
<
|
|
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
>
>
|
>
|
|
<
|
|
|
|
|
|
|
|
>
|
>
|
<
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
<
|
|
>
|
|
|
|
|
|
<
|
|
|
>
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
<
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
>
>
|
|
<
|
<
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
>
|
>
>
|
|
<
<
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
<
|
|
>
>
|
|
|
<
|
|
|
<
<
>
|
|
|
>
>
<
|
>
|
|
|
|
<
|
|
|
>
|
|
|
|
|
|
>
|
<
|
|
|
|
<
|
>
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
<
|
<
|
>
|
<
>
|
>
|
<
<
|
>
|
|
>
|
<
<
|
>
|
>
|
|
|
<
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
>
>
>
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
<
|
|
>
>
|
|
<
|
<
|
|
|
|
>
|
|
>
>
|
|
<
<
|
<
|
|
|
|
|
|
|
|
>
|
<
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
<
|
>
|
|
|
|
|
|
|
>
|
<
|
<
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
<
|
|
|
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
>
|
>
|
|
|
<
>
|
<
<
|
|
|
|
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
>
|
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
>
|
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
|
|
|
<
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
>
|
|
|
|
|
|
|
|
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
>
|
<
<
|
|
|
|
|
|
|
>
>
|
|
|
|
<
<
|
>
|
>
>
|
<
|
|
|
|
|
|
|
|
|
<
<
|
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
<
|
|
>
|
|
|
|
|
|
|
|
<
|
|
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
|
|
>
|
|
|
|
<
|
|
|
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
|
|
|
|
|
>
|
|
<
|
|
>
|
|
|
<
|
|
|
|
|
>
|
|
|
<
|
|
|
|
|
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
>
|
|
|
|
>
|
|
|
|
|
|
<
|
<
<
|
|
|
>
>
>
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
<
|
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
<
|
|
>
|
<
|
|
|
|
|
<
|
|
>
|
|
|
|
|
|
|
|
|
>
|
<
|
<
|
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
>
|
|
>
|
|
|
|
<
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
>
|
<
|
|
|
|
|
|
|
|
<
|
|
<
<
|
<
|
>
|
|
|
|
>
|
<
<
|
>
>
|
<
|
>
>
>
|
|
|
|
>
|
<
|
|
>
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
>
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
>
>
|
|
|
<
<
|
|
|
|
|
|
|
|
|
|
|
>
>
|
|
<
|
<
<
|
|
|
|
|
|
|
>
|
<
<
|
<
<
<
<
|
|
|
<
|
|
>
>
|
>
>
|
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
<
|
>
|
|
>
>
|
|
|
|
|
|
|
<
<
<
|
|
<
<
<
|
|
>
|
|
<
>
|
|
|
<
>
|
<
<
<
>
>
>
|
|
>
>
>
>
>
|
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
<
|
|
<
<
|
<
<
|
|
|
<
<
>
>
|
<
<
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
>
>
|
>
>
>
>
>
|
|
>
|
<
<
>
|
|
|
<
<
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
>
>
|
>
>
|
|
|
|
<
|
|
<
<
<
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
>
|
|
>
|
|
|
<
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
<
|
<
<
|
>
|
<
>
|
|
|
<
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
>
|
|
>
|
<
|
|
<
|
|
<
|
>
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
>
|
|
<
|
|
|
|
|
<
|
>
|
|
|
|
>
|
<
>
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
>
|
|
<
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
<
|
>
|
|
|
|
|
>
|
>
|
<
|
>
|
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
>
|
>
|
>
>
>
|
>
|
|
|
<
<
<
|
<
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
<
|
|
>
|
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
|
|
|
>
>
|
|
|
>
|
>
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
|
>
|
|
<
>
>
>
|
|
|
<
<
<
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
>
|
|
|
|
|
>
>
|
|
|
<
<
>
|
|
>
|
|
<
<
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
>
>
|
>
|
>
|
|
<
<
|
|
|
<
|
|
>
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
<
|
|
|
|
|
>
>
|
|
|
<
|
<
|
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
|
>
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
|
|
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
<
|
|
|
>
|
|
|
<
|
|
>
|
|
<
|
<
|
>
|
>
|
|
<
|
|
|
|
|
|
>
|
|
<
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
|
>
>
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
<
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
>
|
<
>
|
<
|
|
|
|
|
|
|
|
<
|
|
|
|
|
|
|
|
|
<
<
<
|
|
>
|
>
|
>
|
|
|
|
|
|
|
|
>
|
|
|
>
|
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
|
<
|
<
|
|
|
<
|
|
>
|
|
|
|
|
|
<
|
<
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
<
|
|
>
>
|
|
|
|
|
<
|
|
|
>
>
>
>
|
|
|
>
|
|
|
<
<
<
<
|
<
|
|
|
|
|
|
|
|
|
|
<
|
<
|
|
>
>
|
<
|
>
>
>
>
>
>
|
|
|
>
>
>
|
|
>
|
<
>
|
<
>
|
<
<
<
<
<
>
|
<
<
|
>
|
<
<
|
<
<
|
<
<
|
|
>
|
|
|
>
|
>
>
>
|
<
>
>
>
|
|
|
<
<
>
>
|
>
|
|
<
|
|
|
>
|
<
<
<
|
>
>
>
|
<
<
<
<
|
|
<
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
<
|
|
>
|
>
>
>
>
>
|
|
<
<
<
<
<
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
>
>
|
|
|
|
<
|
>
|
|
|
|
|
|
<
|
|
>
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
>
>
|
>
|
|
|
>
|
<
>
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
|
<
<
<
|
>
|
|
>
>
>
|
>
|
|
|
|
<
>
|
|
<
<
<
|
<
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
<
|
|
<
|
>
|
|
|
|
>
>
>
>
|
>
|
|
<
>
|
<
>
>
|
|
|
|
<
<
<
|
<
>
|
<
|
|
<
>
>
>
|
|
|
>
|
|
<
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
>
|
>
>
>
>
|
|
<
>
|
|
|
<
<
<
<
<
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
|
|
|
<
<
|
|
|
|
|
|
|
|
|
|
<
|
>
|
<
|
|
|
|
<
|
>
|
>
|
|
<
|
|
|
|
|
|
|
|
|
>
>
>
|
>
|
|
>
|
<
<
<
|
|
|
|
>
>
>
|
|
|
<
<
|
<
|
|
|
|
|
|
|
|
|
|
<
|
|
>
|
|
|
|
|
|
|
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
>
>
>
|
>
|
|
|
|
<
<
<
<
<
|
|
|
|
|
|
|
|
|
>
>
>
>
>
|
|
>
>
|
<
<
|
|
<
<
<
<
<
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
<
<
<
<
|
|
|
|
|
|
|
|
>
>
|
>
>
|
|
>
>
|
>
>
>
|
<
<
>
>
|
<
>
|
|
<
<
<
<
|
|
<
>
>
>
|
<
<
|
<
|
<
<
|
|
|
|
>
|
>
>
>
>
>
>
|
|
>
>
>
>
>
|
|
>
|
<
>
|
|
<
<
<
|
<
<
<
|
<
<
<
|
>
>
|
|
>
|
>
|
|
<
<
|
|
>
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
<
<
<
<
<
|
|
|
|
>
>
>
>
>
>
|
<
<
|
|
|
<
|
>
|
>
|
>
|
|
|
>
>
|
<
|
|
<
|
>
|
<
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
|
>
|
<
|
|
|
|
<
<
<
|
<
<
<
>
>
>
>
>
>
|
|
|
<
|
<
>
|
<
|
>
|
<
<
<
|
|
|
<
<
<
|
|
>
>
|
|
<
|
>
>
|
>
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
<
<
|
|
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
|
|
|
>
>
|
|
|
|
<
|
|
>
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
<
|
|
|
|
<
|
|
<
>
|
>
>
|
|
|
<
|
|
|
|
|
|
|
>
>
>
>
|
<
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
<
<
|
<
|
|
<
|
>
>
|
|
|
|
|
>
|
|
|
|
|
<
|
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
>
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
<
|
|
|
|
|
>
>
>
|
|
|
|
|
<
<
<
|
>
>
|
|
|
>
|
|
|
|
|
<
|
|
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
>
|
|
<
>
|
|
<
<
<
|
|
>
>
|
>
|
>
|
|
<
|
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
>
|
|
|
|
|
|
|
|
|
|
<
|







4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497

4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527

4528
4529
4530
4531
4532
4533
4534
4535
4536

4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555



4556
4557
4558
4559

4560
4561
4562
4563
4564
4565
4566


4567
4568
4569
4570
4571
4572
4573


4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584

4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596


4597
4598
4599

4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623

4624
4625
4626
4627
4628
4629
4630
4631
4632

4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645

4646
4647
4648
4649
4650
4651
4652



4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663



4664
4665

4666
4667
4668
4669
4670
4671
4672
4673
4674

4675
4676
4677
4678
4679
4680
4681
4682
4683

4684
4685
4686
4687

4688
4689
4690
4691
4692
4693
4694

4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707

4708
4709
4710
4711
4712
4713
4714


4715
4716
4717
4718
4719
4720

4721
4722


4723
4724
4725
4726
4727
4728

4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741

4742

4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784

4785
4786

4787
4788
4789

4790
4791
4792
4793
4794
4795
4796

4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810

4811
4812
4813
4814
4815

4816
4817

4818
4819
4820
4821

4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879

4880
4881
4882
4883
4884
4885
4886

4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909

4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921

4922
4923

4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937


4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950

4951
4952

4953
4954
4955
4956
4957
4958
4959
4960
4961

4962
4963
4964
4965
4966
4967
4968

4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995

4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029

5030
5031

5032
5033
5034
5035
5036

5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063

5064

5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094


5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106

5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125


5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140

5141

5142
5143
5144
5145
5146
5147
5148

5149
5150
5151


5152
5153
5154
5155
5156
5157

5158
5159
5160
5161
5162
5163

5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175

5176
5177
5178
5179

5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209



5210

5211
5212
5213

5214
5215
5216
5217


5218
5219
5220
5221
5222
5223


5224
5225
5226
5227
5228
5229
5230

5231
5232
5233
5234
5235
5236
5237
5238
5239
5240

5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253

5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284

5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299

5300
5301
5302
5303
5304
5305

5306
5307
5308
5309
5310
5311
5312
5313
5314

5315
5316
5317
5318
5319
5320

5321

5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332


5333

5334
5335
5336
5337
5338
5339
5340
5341
5342
5343

5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363

5364
5365
5366

5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377

5378

5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389

5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424

5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442


5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480

5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496

5497
5498


5499
5500
5501
5502
5503
5504
5505

5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522


5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546


5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566

5567

5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588

5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600


5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622


5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635


5636
5637
5638
5639
5640
5641

5642
5643
5644
5645
5646
5647
5648
5649
5650


5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682

5683

5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694

5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707

5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719

5720
5721
5722
5723
5724
5725

5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740

5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753

5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766

5767
5768
5769
5770
5771
5772

5773
5774
5775
5776
5777
5778
5779
5780
5781

5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812

5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826

5827


5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842

5843
5844
5845
5846
5847
5848
5849
5850
5851

5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863

5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879

5880
5881
5882

5883
5884
5885
5886

5887
5888
5889
5890
5891

5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905

5906

5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922

5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939

5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950

5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003

6004
6005
6006
6007
6008
6009

6010
6011
6012
6013
6014
6015
6016
6017

6018
6019


6020

6021
6022
6023
6024
6025
6026
6027
6028


6029
6030
6031
6032

6033
6034
6035
6036
6037
6038
6039
6040
6041
6042

6043
6044
6045
6046
6047
6048
6049
6050

6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096

6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111

6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130

6131
6132
6133
6134

6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151


6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166

6167


6168
6169
6170
6171
6172
6173
6174
6175
6176


6177




6178
6179
6180

6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224

6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254



6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267



6268
6269



6270
6271
6272
6273
6274

6275
6276
6277
6278

6279
6280



6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337

6338
6339
6340
6341
6342

6343
6344


6345


6346
6347
6348


6349
6350
6351


6352
6353
6354
6355
6356

6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395


6396
6397
6398
6399


6400
6401
6402
6403
6404
6405
6406
6407
6408
6409

6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428

6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444

6445
6446



6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461

6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477

6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490

6491
6492
6493
6494
6495
6496
6497

6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508

6509
6510
6511

6512


6513
6514
6515

6516
6517
6518
6519

6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555

6556
6557
6558
6559
6560
6561
6562
6563
6564

6565
6566

6567
6568

6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587

6588
6589
6590
6591
6592
6593
6594
6595
6596

6597
6598
6599
6600
6601

6602
6603
6604
6605
6606
6607
6608
6609

6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625

6626
6627
6628

6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650

6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669

6670
6671
6672

6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698

6699
6700
6701

6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712

6713
6714
6715


6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781



6782



6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808



6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862

6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883


6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905

6906
6907
6908
6909
6910

6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925

6926
6927
6928
6929
6930
6931
6932

6933
6934
6935
6936
6937
6938



6939
6940
6941
6942
6943
6944
6945
6946
6947
6948

6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967


6968
6969
6970
6971
6972
6973


6974
6975
6976
6977
6978
6979
6980

6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995


6996
6997
6998

6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009

7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026

7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051



7052
7053
7054
7055
7056
7057
7058
7059
7060
7061

7062

7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074

7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100


7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152

7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169

7170
7171
7172
7173
7174
7175
7176
7177
7178
7179

7180
7181
7182
7183
7184
7185
7186

7187
7188
7189
7190
7191

7192

7193
7194
7195
7196
7197
7198

7199
7200
7201
7202
7203
7204
7205
7206
7207

7208
7209

7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222

7223
7224
7225
7226
7227
7228
7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242

7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
7264
7265
7266
7267

7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289

7290
7291
7292
7293
7294
7295
7296
7297

7298
7299
7300
7301
7302
7303
7304
7305
7306

7307
7308
7309

7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322

7323
7324
7325
7326
7327

7328
7329

7330
7331
7332
7333
7334
7335
7336
7337

7338
7339
7340
7341
7342
7343
7344
7345
7346



7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367


7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384

7385

7386
7387
7388

7389
7390
7391
7392
7393
7394
7395
7396
7397

7398

7399
7400

7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420

7421

7422
7423
7424
7425
7426
7427
7428
7429
7430

7431
7432
7433
7434
7435
7436
7437
7438
7439
7440
7441
7442
7443
7444




7445

7446
7447
7448
7449
7450
7451
7452
7453
7454
7455

7456

7457
7458
7459
7460
7461

7462
7463
7464
7465
7466
7467
7468
7469
7470
7471
7472
7473
7474
7475
7476
7477
7478

7479
7480

7481
7482





7483
7484


7485
7486
7487


7488


7489


7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501

7502
7503
7504
7505
7506
7507


7508
7509
7510
7511
7512
7513

7514
7515
7516
7517
7518



7519
7520
7521
7522
7523




7524
7525

7526

7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550

7551
7552
7553
7554
7555
7556
7557
7558
7559
7560
7561

7562
7563
7564
7565
7566
7567
7568
7569
7570
7571
7572





7573
7574
7575
7576
7577
7578
7579

7580
7581
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593

7594
7595
7596
7597
7598
7599
7600
7601

7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613

7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628

7629
7630
7631

7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649


7650



7651
7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663

7664
7665
7666



7667

7668
7669
7670
7671
7672
7673

7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684

7685
7686

7687
7688
7689
7690
7691
7692
7693
7694
7695
7696
7697
7698
7699
7700

7701
7702

7703
7704
7705
7706
7707
7708



7709

7710
7711

7712
7713

7714
7715
7716
7717
7718
7719
7720
7721
7722

7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733

7734
7735
7736
7737
7738
7739
7740
7741

7742
7743
7744
7745
7746
7747


7748
7749
7750
7751
7752
7753
7754
7755
7756
7757
7758
7759
7760
7761
7762
7763
7764

7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
7776
7777
7778

7779
7780

7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800

7801
7802
7803
7804





7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832


7833
7834
7835
7836
7837
7838
7839
7840
7841
7842

7843
7844
7845

7846
7847
7848
7849

7850
7851
7852
7853
7854
7855

7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873



7874
7875
7876
7877
7878
7879
7880
7881
7882
7883


7884

7885
7886
7887
7888
7889
7890
7891
7892
7893
7894

7895
7896
7897
7898
7899
7900
7901
7902
7903
7904
7905
7906
7907

7908
7909
7910
7911
7912
7913
7914
7915
7916
7917
7918
7919
7920
7921
7922
7923
7924
7925

7926
7927
7928
7929
7930
7931
7932
7933
7934
7935
7936
7937

7938
7939
7940
7941
7942
7943
7944
7945
7946
7947
7948





7949
7950
7951
7952
7953
7954
7955
7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967


7968
7969





7970
7971
7972
7973
7974
7975
7976
7977
7978
7979

7980
7981
7982
7983

7984
7985
7986
7987
7988
7989
7990
7991
7992
7993
7994
7995




7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008
8009
8010
8011
8012
8013
8014
8015
8016
8017


8018
8019
8020

8021
8022
8023




8024
8025

8026
8027
8028
8029


8030

8031


8032
8033
8034
8035
8036
8037
8038
8039
8040
8041
8042
8043
8044
8045
8046
8047
8048
8049
8050
8051
8052
8053
8054

8055
8056
8057



8058



8059



8060
8061
8062
8063
8064
8065
8066
8067
8068
8069


8070
8071
8072
8073
8074
8075

8076
8077
8078
8079
8080
8081
8082
8083
8084
8085
8086
8087
8088
8089
8090
8091

8092
8093
8094





8095
8096
8097
8098
8099
8100
8101
8102
8103
8104
8105


8106
8107
8108

8109
8110
8111
8112
8113
8114
8115
8116
8117
8118
8119
8120

8121
8122

8123
8124
8125



8126
8127
8128
8129
8130
8131
8132
8133
8134
8135
8136
8137
8138
8139
8140
8141
8142
8143
8144
8145
8146
8147
8148
8149
8150
8151
8152

8153
8154
8155
8156



8157



8158
8159
8160
8161
8162
8163
8164
8165
8166

8167

8168
8169

8170
8171
8172



8173
8174
8175



8176
8177
8178
8179
8180
8181

8182
8183
8184
8185
8186
8187
8188
8189
8190
8191
8192
8193
8194
8195
8196
8197
8198
8199
8200
8201
8202
8203

8204
8205
8206
8207
8208
8209
8210
8211
8212
8213
8214
8215
8216
8217
8218
8219
8220




8221
8222
8223
8224

8225
8226
8227
8228
8229
8230
8231
8232
8233
8234
8235
8236
8237
8238
8239
8240
8241
8242
8243
8244
8245


8246
8247
8248
8249
8250
8251
8252
8253
8254

8255
8256
8257
8258
8259
8260
8261
8262
8263
8264
8265
8266
8267
8268
8269
8270

8271
8272
8273
8274
8275
8276
8277
8278
8279
8280
8281
8282
8283
8284
8285
8286
8287
8288
8289

8290
8291
8292
8293

8294
8295

8296
8297
8298
8299
8300
8301
8302

8303
8304
8305
8306
8307
8308
8309
8310
8311
8312
8313
8314

8315
8316
8317
8318
8319
8320
8321
8322
8323
8324
8325
8326
8327
8328
8329
8330
8331
8332
8333
8334
8335
8336
8337
8338
8339
8340

8341


8342

8343
8344

8345
8346
8347
8348
8349
8350
8351
8352
8353
8354
8355
8356
8357
8358

8359
8360
8361
8362
8363
8364
8365
8366
8367
8368
8369
8370

8371
8372
8373
8374
8375
8376
8377
8378
8379
8380
8381
8382
8383
8384
8385
8386
8387
8388
8389
8390
8391
8392
8393
8394
8395
8396
8397
8398
8399
8400
8401
8402
8403
8404
8405
8406
8407
8408
8409
8410



8411
8412
8413
8414
8415
8416
8417
8418
8419
8420
8421
8422
8423



8424
8425
8426
8427
8428
8429
8430
8431
8432
8433
8434
8435

8436
8437


8438
8439
8440
8441
8442
8443
8444
8445
8446
8447
8448
8449
8450
8451
8452
8453
8454
8455
8456
8457
8458
8459

8460
8461
8462



8463
8464
8465
8466
8467
8468
8469
8470
8471
8472

8473


8474
8475
8476
8477
8478
8479
8480
8481
8482
8483
8484
8485
8486
8487
8488
8489
8490
8491
8492
8493
8494
8495
8496
8497
8498
8499
8500
8501
8502
8503
8504
8505
8506
8507
8508
8509
8510
8511
8512
8513
8514
8515
8516
8517
8518
8519
8520
8521
8522
8523

8524
8525
8526
8527
8528
8529
8530
8531
8532
8533
8534
8535
8536

8537
8538
8539
8540
8541
8542
8543
8544
 */
#ifdef USE_MANUAL
#include "tool_hugehelp.h"
#include <zlib.h>
#include "memdebug.h" /* keep this as LAST include */
static const unsigned char hugehelpgz[] = {
  /* This mumbo-jumbo is the huge help text compressed with gzip.
     Thanks to this operation, the size of this data shrank from 173066
     to 48513 bytes. You can disable the use of compressed help
     texts by NOT passing -c to the mkhelp.pl tool. */
  0x1f, 0x8b, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0xed, 0xbd,
  0x6b, 0x77, 0xdc, 0xc6, 0xb1, 0x2e, 0xfc, 0xdd, 0xbf, 0x02, 0x9b, 0x59,
  0x39, 0x24, 0x77, 0x66, 0x86, 0x17, 0xdd, 0x2c, 0x46, 0xce, 0x36, 0x2d,

  0x51, 0x36, 0xb7, 0x29, 0x91, 0x47, 0x43, 0xd9, 0xce, 0x89, 0xbd, 0xb4,
  0x30, 0x33, 0x20, 0x89, 0x68, 0x06, 0x98, 0x00, 0x18, 0x5e, 0x92, 0x9d,
  0xf3, 0xdb, 0xdf, 0xae, 0xa7, 0xaa, 0xba, 0x1b, 0xe8, 0xc6, 0x90, 0x76,
  0x2c, 0x9f, 0xdb, 0x9b, 0xbd, 0xb6, 0x25, 0x91, 0x40, 0xa3, 0x2f, 0xd5,
  0x75, 0xaf, 0xa7, 0x92, 0xe4, 0xbe, 0xff, 0x7d, 0xc0, 0xff, 0x7f, 0x30,
  0xff, 0x33, 0x7f, 0x7e, 0x96, 0x24, 0x67, 0x55, 0xf9, 0xd7, 0x6c, 0xda,
  0xc4, 0x9f, 0xfd, 0xf0, 0xe1, 0xbf, 0x12, 0xfe, 0x3f, 0xf3, 0xce, 0x8f,
  0xe6, 0xcf, 0xcf, 0xd6, 0x8e, 0xbd, 0x93, 0xb8, 0x17, 0xfe, 0xeb, 0xc3,
  0x76, 0x72, 0xdf, 0x0b, 0xff, 0x95, 0x6c, 0xe1, 0x85, 0x0f, 0xf2, 0x85,
  0x17, 0xf4, 0xf7, 0x0f, 0x1f, 0xd6, 0x7f, 0xe4, 0x47, 0x9a, 0x15, 0xfd,
  0x67, 0x87, 0xde, 0xfb, 0xf1, 0x03, 0xfd, 0xd5, 0xfc, 0xe4, 0xb3, 0xcf,
  0xde, 0x1e, 0xbe, 0x39, 0xd2, 0x57, 0xa7, 0xab, 0x6a, 0x9e, 0x0c, 0x93,
  0xa6, 0x4a, 0x8b, 0xfa, 0x22, 0xab, 0x92, 0x34, 0x79, 0xff, 0xee, 0xe4,
  0xb3, 0xcf, 0xc6, 0x7f, 0x7e, 0x7b, 0x7a, 0x36, 0x3e, 0x1e, 0xb7, 0x1e,
  0xfb, 0x4b, 0xb9, 0x6c, 0xf2, 0xb2, 0xa8, 0xcd, 0xf4, 0xcd, 0x43, 0xf5,
  0x4f, 0x9f, 0x7d, 0xf6, 0xea, 0x68, 0xfc, 0xf2, 0xdd, 0xf1, 0xd9, 0xf9,
  0xf1, 0xe9, 0xdb, 0xd6, 0x93, 0x49, 0x5e, 0x27, 0x66, 0xa8, 0xa6, 0x2c,
  0xe7, 0xe6, 0x3f, 0x6e, 0xf4, 0x59, 0xda, 0xa4, 0xc9, 0x45, 0x55, 0x2e,
  0x92, 0xb2, 0xa2, 0x5f, 0xa4, 0x49, 0x9d, 0x55, 0xd7, 0x59, 0x35, 0x48,
  0x56, 0x75, 0x5e, 0x5c, 0x26, 0x65, 0x91, 0x25, 0xe5, 0x45, 0xd2, 0x5c,
  0x65, 0x3a, 0x5c, 0xbd, 0x5a, 0x2e, 0xcb, 0xaa, 0xc9, 0x66, 0xc9, 0xb2,
  0x2a, 0x9b, 0x72, 0x5a, 0xce, 0xeb, 0x64, 0xeb, 0xd5, 0xf1, 0xcb, 0xf3,
  0x41, 0xf2, 0xfa, 0xf8, 0xe4, 0xc8, 0xfc, 0xf7, 0xfc, 0x0c, 0xff, 0x19,
  0x0f, 0x92, 0xaf, 0x4f, 0xcf, 0xbe, 0x39, 0x7a, 0x37, 0x48, 0xbe, 0x39,
  0xa7, 0x9f, 0xd1, 0x7f, 0xcd, 0x0f, 0x93, 0xe3, 0x37, 0x87, 0x67, 0x03,
  0x1d, 0x8e, 0xfe, 0x41, 0x3f, 0x3c, 0x79, 0x65, 0x7e, 0xc8, 0x7f, 0xd0,
  0x3f, 0xcf, 0x4e, 0xcf, 0x1e, 0xc9, 0x1f, 0xf4, 0xcf, 0x77, 0xe7, 0x6f,
  0xcc, 0x6f, 0xdf, 0x9d, 0x8f, 0xcd, 0x7f, 0xc7, 0x2f, 0xe9, 0x3f, 0xf8,
  0xca, 0xf8, 0xcd, 0x57, 0xf8, 0xcf, 0xd8, 0x0e, 0x37, 0x7e, 0xc3, 0x3f,
  0xc7, 0x97, 0xce, 0x8f, 0x4e, 0xde, 0x1e, 0x9d, 0x27, 0x69, 0x31, 0x4b,

  0xce, 0xcd, 0xf3, 0xdb, 0xa3, 0xe4, 0xfc, 0x2a, 0x4b, 0xa6, 0xe5, 0x62,
  0x41, 0x3f, 0x32, 0x3b, 0x32, 0xcb, 0xea, 0xfc, 0xb2, 0x30, 0x4b, 0x31,
  0x2b, 0xbf, 0x29, 0xab, 0x8f, 0x49, 0x72, 0x93, 0x37, 0x57, 0xe5, 0xaa,
  0xd1, 0xe1, 0x56, 0x66, 0x37, 0x92, 0xbc, 0x68, 0xb2, 0x2a, 0x9d, 0xd2,
  0x4e, 0x8f, 0x3e, 0x6b, 0xed, 0x6a, 0x79, 0x61, 0xf6, 0xb0, 0x36, 0x9b,
  0x36, 0x59, 0xd5, 0xf3, 0x32, 0x9d, 0xd1, 0x56, 0x99, 0x57, 0x2e, 0x56,
  0x66, 0x93, 0xab, 0x7c, 0xfa, 0xb1, 0x4e, 0xe6, 0xf9, 0xc7, 0x8c, 0x36,
  0xea, 0xf6, 0x4e, 0x37, 0x6e, 0xc0, 0x83, 0xa6, 0x2b, 0xb3, 0xa7, 0xc5,
  0x50, 0x87, 0x6b, 0xf2, 0x69, 0x4a, 0x1f, 0xc0, 0xce, 0x25, 0xab, 0x25,

  0x8d, 0xc6, 0x3b, 0x96, 0x2c, 0xcb, 0xda, 0xbc, 0x34, 0x1e, 0x9f, 0x98,
  0x99, 0x17, 0x45, 0x86, 0x79, 0xd4, 0x03, 0xf3, 0x8f, 0xf2, 0x63, 0x9e,
  0x99, 0xbf, 0x5c, 0xe4, 0xf3, 0x2c, 0xe1, 0x13, 0xb5, 0xc3, 0xd1, 0xd1,
  0x26, 0x55, 0x56, 0xaf, 0x16, 0x99, 0xd9, 0xbd, 0x37, 0x59, 0x93, 0xce,
  0xf3, 0xe2, 0xa3, 0xf9, 0x2b, 0x2d, 0x7c, 0x51, 0x56, 0xd9, 0x28, 0x39,
  0xac, 0x93, 0xbb, 0x72, 0x65, 0x16, 0x3c, 0x9f, 0x9b, 0x33, 0xcf, 0x92,
  0x49, 0x36, 0x2f, 0x6f, 0x06, 0x74, 0xd2, 0x49, 0xb1, 0x5a, 0x4c, 0xcc,
  0x00, 0xe5, 0x85, 0x1b, 0x2e, 0x6d, 0x56, 0x66, 0x38, 0x7e, 0x7a, 0x91,
  0x9a, 0x35, 0x99, 0x77, 0xab, 0xe4, 0x2a, 0x33, 0x6b, 0xae, 0x97, 0x79,
  0xf1, 0x6f, 0xed, 0x7d, 0x31, 0x5b, 0xbb, 0x2c, 0x6f, 0xb2, 0xca, 0xec,
  0xec, 0xe4, 0x2e, 0x31, 0x9b, 0x30, 0x61, 0x22, 0xbc, 0x30, 0x44, 0x96,
  0xa4, 0x66, 0x08, 0x4b, 0x80, 0xc3, 0x2a, 0x9b, 0xa7, 0x44, 0x4c, 0xf6,
  0x1b, 0x23, 0x73, 0x88, 0x99, 0xa5, 0x36, 0x79, 0x75, 0xeb, 0xd1, 0x36,
  0x5e, 0x9e, 0x99, 0x95, 0xe4, 0xf3, 0xda, 0x1c, 0x03, 0x5d, 0x0a, 0x79,
  0x86, 0x0e, 0x95, 0xe8, 0xdf, 0xd0, 0xe6, 0x5d, 0xd1, 0xa4, 0xb7, 0xf8,
  0xbc, 0xd0, 0xe6, 0x70, 0x96, 0x2d, 0xb3, 0x62, 0x96, 0x15, 0xcd, 0x28,
  0xf9, 0x73, 0xb9, 0xda, 0x34, 0xdf, 0xbe, 0xc8, 0xcd, 0x1e, 0xa4, 0x32,
  0x94, 0xf9, 0xb2, 0x21, 0x82, 0x69, 0x95, 0x2f, 0xbd, 0xa3, 0x28, 0x0b,
  0x73, 0xe6, 0xc9, 0xbb, 0xd7, 0x2f, 0x93, 0x47, 0xcf, 0x3f, 0x7f, 0xea,



  0xce, 0xdc, 0x0c, 0x90, 0x4c, 0xd3, 0xc2, 0xac, 0x38, 0x9b, 0xe6, 0x17,
  0x77, 0xc9, 0x62, 0x35, 0x6f, 0xf2, 0xa5, 0xd9, 0x7d, 0xba, 0x7c, 0x74,
  0x81, 0x96, 0x69, 0xd5, 0xd4, 0x44, 0x04, 0xf8, 0x01, 0xd6, 0x7e, 0x53,
  0xe5, 0x0d, 0x5d, 0x24, 0xfc, 0xce, 0xcc, 0x30, 0x6b, 0x6a, 0x1d, 0x8e,

  0x68, 0xcd, 0x7c, 0x67, 0x62, 0x68, 0xcb, 0x6c, 0x6d, 0x5a, 0x9b, 0x8f,
  0x1e, 0x7c, 0xe6, 0x38, 0xc8, 0x55, 0xd3, 0x2c, 0x0f, 0x76, 0x76, 0xea,
  0xbc, 0xc9, 0x46, 0xff, 0x30, 0xf7, 0x70, 0xd0, 0xdc, 0x94, 0x83, 0xe6,
  0xaa, 0xca, 0xb2, 0x7f, 0x8e, 0x0c, 0x0d, 0xdb, 0x27, 0xcd, 0x77, 0xef,
  0x64, 0x62, 0x97, 0x59, 0x63, 0xbe, 0xf0, 0xb7, 0x55, 0x56, 0xd0, 0x88,
  0x66, 0x1e, 0xe9, 0x7c, 0x79, 0x95, 0x9a, 0xe3, 0xcc, 0x0c, 0x35, 0xd2,
  0xcd, 0x36, 0x04, 0x43, 0xb3, 0xe2, 0xbb, 0xfd, 0x97, 0x9f, 0xc2, 0x8f,


  0x5e, 0xe0, 0x9b, 0xe6, 0xbf, 0xa3, 0xec, 0x36, 0x5d, 0x98, 0xb5, 0xd1,
  0xa7, 0x76, 0x88, 0xc4, 0xfe, 0xb2, 0x37, 0xdc, 0xdb, 0xdd, 0xfd, 0x69,
  0xd4, 0xdc, 0x36, 0x0f, 0x7b, 0x7e, 0x77, 0xd7, 0xbd, 0x41, 0x8f, 0x6e,
  0xd1, 0x7a, 0x93, 0xb9, 0x21, 0x19, 0xfa, 0xf8, 0xdf, 0xb3, 0xaa, 0xac,
  0xb7, 0x1f, 0x36, 0x52, 0x3a, 0xfc, 0x7b, 0xfb, 0xbb, 0x6f, 0xb3, 0x1a,
  0x34, 0xe3, 0xd6, 0x9a, 0xa4, 0x95, 0xa1, 0xdb, 0xb2, 0x71, 0xec, 0x69,
  0x60, 0x2e, 0x65, 0x63, 0x77, 0xc6, 0xdc, 0x39, 0xf3, 0xb4, 0x61, 0x6c,


  0xe9, 0x9c, 0x78, 0x5a, 0x9d, 0x14, 0xd9, 0xad, 0xbd, 0xe5, 0xe6, 0xf6,
  0x67, 0xe9, 0xf4, 0x2a, 0x29, 0x0d, 0xf1, 0x57, 0x91, 0x23, 0xf0, 0x27,
  0x94, 0x56, 0xd3, 0xab, 0xfc, 0xda, 0xec, 0xc6, 0xf3, 0xe7, 0x4f, 0x87,
  0xe6, 0x3f, 0xcf, 0x7f, 0xda, 0xb9, 0x2e, 0xe7, 0x66, 0x73, 0x1e, 0xff,
  0xb4, 0x43, 0x47, 0xfc, 0x8f, 0x74, 0x30, 0x19, 0x4c, 0xff, 0x39, 0xba,
  0x6a, 0x16, 0xf3, 0x5e, 0xc2, 0x49, 0x0b, 0xf3, 0xff, 0x8b, 0x72, 0x55,
  0x34, 0x96, 0x58, 0x0c, 0xcd, 0x35, 0x1e, 0x73, 0x32, 0xd7, 0xd5, 0xdc,
  0x51, 0x22, 0x6d, 0xa2, 0x21, 0xba, 0x75, 0xe6, 0x82, 0xba, 0xeb, 0xd8,
  0x4c, 0xaf, 0x68, 0xfd, 0x86, 0x7a, 0x52, 0xd9, 0x84, 0x26, 0x4f, 0xe9,
  0x66, 0x1a, 0x06, 0x41, 0x0c, 0x0b, 0x63, 0xf1, 0xd7, 0x72, 0xf3, 0x60,
  0x59, 0xcd, 0xb2, 0x6a, 0xd4, 0x9d, 0x86, 0xbd, 0xb2, 0xde, 0x37, 0x13,

  0x95, 0x28, 0xf4, 0x03, 0x4c, 0x6c, 0x91, 0xdf, 0x9a, 0x11, 0xc0, 0x30,
  0x0b, 0x4c, 0x9c, 0x47, 0x4b, 0x68, 0xc6, 0xf8, 0x8c, 0xbe, 0xef, 0xae,
  0xac, 0x99, 0x7a, 0x6b, 0xe9, 0xf8, 0xa8, 0x5b, 0x7c, 0x62, 0x0e, 0x6f,
  0x69, 0xde, 0x5a, 0x11, 0x5f, 0xc5, 0xb5, 0xa6, 0x61, 0x0c, 0x43, 0xb8,
  0x34, 0xe7, 0x62, 0xce, 0x82, 0xa8, 0x98, 0x8e, 0xea, 0x2e, 0x79, 0x6b,
  0x08, 0x86, 0x99, 0x91, 0x47, 0xec, 0xf3, 0xac, 0x69, 0xee, 0x3d, 0x26,
  0x47, 0xb1, 0x07, 0x7b, 0x01, 0xd1, 0xf6, 0x3d, 0x6f, 0xe8, 0xec, 0x60,
  0xbf, 0xfd, 0xf0, 0xf7, 0x86, 0x49, 0xbb, 0xeb, 0x62, 0xbe, 0xfe, 0x8f,
  0x7f, 0x7a, 0x54, 0x77, 0x43, 0xbf, 0xcd, 0x8b, 0xeb, 0xf2, 0xa3, 0xd9,
  0x22, 0x48, 0xd1, 0xb4, 0xbd, 0x9b, 0xc4, 0x87, 0x16, 0xcb, 0xc6, 0x8a,
  0x27, 0x22, 0x47, 0xf3, 0xa3, 0x49, 0x3a, 0x99, 0xdf, 0x25, 0x57, 0xe9,
  0x75, 0x46, 0xeb, 0x5d, 0x1a, 0x3a, 0xa5, 0x1d, 0x30, 0x62, 0x63, 0x0e,


  0x3e, 0x26, 0x8c, 0x61, 0x56, 0xae, 0x26, 0x86, 0xb9, 0xfc, 0x6d, 0x55,
  0x36, 0xbc, 0x31, 0xe9, 0x75, 0x99, 0xcf, 0x5a, 0xb2, 0xf8, 0x2a, 0x23,
  0x86, 0x46, 0x1f, 0x86, 0x90, 0x32, 0x0c, 0x95, 0x66, 0x8a, 0x8b, 0x96,

  0x37, 0x24, 0xee, 0x0c, 0x2b, 0x4c, 0xe7, 0x75, 0x99, 0x24, 0x97, 0x25,
  0xdd, 0x12, 0x30, 0x60, 0x90, 0xb9, 0x39, 0x94, 0xab, 0x94, 0xa4, 0x9a,
  0x11, 0x60, 0xf6, 0x1e, 0x54, 0x19, 0x78, 0x31, 0x4e, 0x2a, 0x9d, 0x0f,
  0x58, 0x7a, 0xd1, 0x3b, 0xb2, 0x55, 0xc9, 0xe6, 0x7f, 0xdb, 0x1c, 0x24,
  0x9b, 0xff, 0xb1, 0x09, 0x7a, 0xd8, 0xfc, 0xf7, 0x4d, 0x77, 0xce, 0x46,
  0x19, 0xbb, 0xce, 0x67, 0x19, 0x93, 0xc4, 0xf1, 0xd9, 0xf5, 0xd3, 0xe4,
  0xef, 0xa4, 0x3b, 0x18, 0x5e, 0x9b, 0xdd, 0x2a, 0x41, 0xea, 0xda, 0xcc,
  0xdb, 0x89, 0x61, 0xba, 0xe9, 0x92, 0x94, 0x88, 0xac, 0x9a, 0x1a, 0xea,
  0x4d, 0x2f, 0x0d, 0xbd, 0x1a, 0x59, 0xac, 0xc3, 0xd1, 0xf8, 0xf4, 0x0a,
  0x2f, 0xcb, 0x30, 0xc8, 0xa4, 0x48, 0x17, 0xe6, 0x46, 0x9c, 0xd0, 0x8c,
  0xf2, 0x22, 0x3c, 0xcc, 0xbf, 0x5c, 0x64, 0x9f, 0xef, 0x1e, 0x1c, 0x3c,
  0xfa, 0xfd, 0xfe, 0x93, 0xac, 0xb9, 0xda, 0xfd, 0x69, 0xc7, 0x3e, 0x72,
  0x7c, 0x81, 0x6d, 0x57, 0xf2, 0xd3, 0x49, 0x18, 0x29, 0x6f, 0xa5, 0x84,
  0x79, 0xdf, 0xfc, 0x3d, 0xbb, 0xc8, 0x6f, 0x07, 0xaa, 0x2f, 0xf1, 0x9d,
  0x4b, 0x0d, 0xa9, 0x99, 0xf3, 0x23, 0x16, 0xa1, 0xc3, 0x5d, 0xae, 0xb2,
  0xda, 0xec, 0xe4, 0xcd, 0x55, 0xda, 0x24, 0x76, 0x00, 0x3e, 0xd9, 0x45,
  0x7e, 0x79, 0xd5, 0x24, 0x37, 0x29, 0x09, 0x9b, 0xe3, 0x86, 0x87, 0x20,
  0x29, 0x6f, 0x44, 0xcc, 0x45, 0x6a, 0x64, 0x05, 0x9d, 0x21, 0x44, 0xfa,
  0xc4, 0x69, 0x18, 0x8d, 0x21, 0x73, 0x3e, 0x10, 0xa7, 0x4e, 0x4d, 0xd2,
  0x9a, 0x2e, 0x6d, 0x61, 0x98, 0x43, 0x63, 0x74, 0x84, 0x15, 0xfd, 0xeb,
  0xca, 0x68, 0x01, 0xd8, 0x03, 0x99, 0x28, 0x04, 0xe5, 0x6b, 0x3a, 0x4e,
  0x3a, 0x1b, 0x2b, 0xbc, 0xcc, 0x21, 0x0d, 0xe4, 0x98, 0xed, 0x1b, 0xb5,
  0xb9, 0x70, 0x86, 0x33, 0x59, 0xca, 0xd8, 0x20, 0x26, 0xbb, 0xc1, 0xeb,
  0xc4, 0x1c, 0xd3, 0x9a, 0x14, 0x05, 0x56, 0x07, 0xcc, 0xe4, 0xbd, 0xc5,

  0x9a, 0x4d, 0x4b, 0x3f, 0x92, 0x4a, 0xd2, 0x51, 0x7c, 0xf0, 0xda, 0xac,
  0x34, 0x44, 0x66, 0x66, 0x6b, 0x98, 0x31, 0xad, 0x8c, 0x58, 0x2c, 0x76,
  0x05, 0x44, 0x6e, 0xc6, 0xa4, 0x1f, 0xe6, 0x0d, 0xc9, 0x18, 0xe8, 0xb0,
  0x66, 0xbe, 0x66, 0x53, 0xa0, 0x88, 0x1a, 0x46, 0xed, 0xad, 0x1f, 0xe2,
  0xd1, 0x3c, 0x9b, 0x5c, 0x1b, 0x2d, 0xc5, 0x28, 0xa4, 0x99, 0x7d, 0x0b,
  0xf2, 0x7c, 0x4a, 0xba, 0xd1, 0xdc, 0xdc, 0x97, 0x69, 0x59, 0x55, 0xa4,
  0xef, 0xd3, 0x09, 0x4e, 0x98, 0x89, 0x2e, 0x32, 0xa3, 0x46, 0xf8, 0xdb,
  0x99, 0x93, 0x40, 0x33, 0xfc, 0xc5, 0xe8, 0x25, 0xe0, 0x20, 0x46, 0x7f,
  0x00, 0xcf, 0xc7, 0xc2, 0x31, 0x3b, 0x1a, 0x7b, 0x3a, 0xcd, 0x96, 0x4d,

  0x1d, 0x5b, 0x93, 0x1e, 0xb8, 0x99, 0x4e, 0x95, 0xd1, 0xce, 0xfb, 0x4a,
  0x17, 0xf6, 0xd5, 0x0a, 0x7d, 0xe8, 0x5d, 0xaa, 0xc7, 0x18, 0x3d, 0xac,
  0xb6, 0xbb, 0xd6, 0x80, 0x36, 0x0c, 0x1b, 0xc3, 0x9e, 0x2f, 0x68, 0xa2,
  0xf4, 0x70, 0xcd, 0x37, 0x15, 0xac, 0x99, 0x0e, 0x92, 0x35, 0x6d, 0xfe,
  0x2e, 0x89, 0x2e, 0xb3, 0x9f, 0x76, 0x70, 0xf3, 0x55, 0x7b, 0xa6, 0xf4,
  0x79, 0x52, 0xf1, 0x8d, 0x24, 0x9f, 0xd5, 0x57, 0x46, 0xf9, 0xaa, 0xe5,
  0x66, 0xe7, 0x0b, 0x43, 0x33, 0xd7, 0x74, 0xbe, 0xcb, 0x2c, 0x9b, 0x8d,
  0x92, 0xd3, 0x0b, 0xe2, 0xaa, 0x95, 0x99, 0x74, 0x83, 0x5f, 0x93, 0x54,
  0x31, 0xfb, 0x36, 0x83, 0x12, 0x6f, 0xaf, 0x16, 0x4f, 0xc5, 0x93, 0x0e,
  0xe0, 0xe4, 0xa9, 0xf9, 0x89, 0x99, 0xed, 0xbc, 0x2d, 0x82, 0x70, 0x0f,
  0x0d, 0xf7, 0xa6, 0xe9, 0x4d, 0xb2, 0x04, 0x94, 0x38, 0xc9, 0x9a, 0x9b,
  0x2c, 0xb3, 0xc3, 0xd5, 0x99, 0x11, 0x7b, 0x74, 0x68, 0xac, 0xf9, 0x81,
  0x19, 0xd2, 0xd6, 0x9e, 0xbd, 0x3b, 0xfd, 0xfa, 0xdd, 0xd1, 0x78, 0x9c,

  0xbc, 0x39, 0x3a, 0x3f, 0x7a, 0xd7, 0xda, 0xe9, 0xa2, 0xac, 0x16, 0x38,
  0xd1, 0x59, 0x5e, 0x2f, 0xe7, 0xe9, 0x1d, 0x1d, 0xb5, 0x59, 0xc9, 0x65,
  0x45, 0x37, 0x6b, 0x91, 0x91, 0x54, 0x98, 0xad, 0xc0, 0xc9, 0x8c, 0x38,
  0x32, 0xc7, 0x27, 0x1a, 0x2f, 0x31, 0x13, 0xa8, 0xc9, 0xc5, 0xa5, 0xdb,
  0x69, 0xc3, 0x71, 0x44, 0x92, 0x92, 0x28, 0xb5, 0xe7, 0x41, 0xaa, 0x27,
  0x8c, 0x9b, 0x81, 0xfb, 0x19, 0x6f, 0x13, 0x8b, 0x36, 0x43, 0xb3, 0xf9,
  0x02, 0xcc, 0xce, 0xfc, 0xe9, 0xb4, 0xcd, 0xec, 0xc2, 0xa8, 0xda, 0x46,



  0xba, 0xb2, 0xa5, 0xd0, 0x9d, 0x93, 0xce, 0xd6, 0xea, 0xc7, 0x86, 0x0c,
  0x89, 0x35, 0xd3, 0x80, 0x3c, 0x15, 0xfe, 0x82, 0x65, 0x62, 0x46, 0x27,
  0x21, 0xde, 0x27, 0x8f, 0x2d, 0x69, 0x0a, 0x99, 0x39, 0xd9, 0x19, 0x0f,
  0x5f, 0xaf, 0x2e, 0x70, 0x91, 0x93, 0x2d, 0xa3, 0x99, 0xbf, 0x31, 0xd6,
  0x92, 0xb1, 0x58, 0x06, 0xc9, 0xd9, 0x36, 0xde, 0xdb, 0xdb, 0xdd, 0x7f,
  0xcc, 0x8c, 0x60, 0xa4, 0xc3, 0xbd, 0xf6, 0x18, 0xf1, 0xde, 0x47, 0x3a,
  0x5e, 0x7e, 0x88, 0x06, 0x1f, 0x25, 0x7b, 0x6f, 0xf8, 0x27, 0x8f, 0x3f,
  0x7f, 0xf2, 0xec, 0xa9, 0xfc, 0xb0, 0x4d, 0xe0, 0x76, 0xfe, 0xa0, 0x0e,
  0x58, 0x7e, 0x64, 0x0a, 0x9a, 0x99, 0x98, 0xd5, 0x2d, 0xf2, 0xc2, 0x5c,
  0x13, 0x73, 0xad, 0x84, 0x57, 0x11, 0x3d, 0x9b, 0xc9, 0x5f, 0x30, 0x67,
  0x93, 0x73, 0x6d, 0x9b, 0x94, 0xe6, 0x65, 0x43, 0xb2, 0x86, 0x97, 0xdb,



  0x43, 0x62, 0x35, 0xa1, 0xa1, 0x89, 0xa4, 0x13, 0x62, 0xb0, 0x64, 0x57,
  0x19, 0x05, 0x38, 0x8b, 0x7e, 0xcd, 0x4a, 0x45, 0xf3, 0x86, 0x99, 0x9b,

  0x91, 0x89, 0x24, 0xe6, 0xc2, 0x7d, 0x37, 0xac, 0x00, 0x1c, 0xf2, 0x26,
  0xaf, 0xc1, 0x1a, 0x6e, 0xca, 0xd5, 0xdc, 0x58, 0x31, 0xf4, 0xc0, 0x6a,
  0x89, 0x17, 0xcc, 0xa7, 0x96, 0x8e, 0x07, 0x18, 0x8d, 0x85, 0x68, 0xa7,
  0x3b, 0x8a, 0x99, 0x9a, 0xf9, 0xe7, 0xd2, 0x90, 0x12, 0x4f, 0x67, 0xd4,
  0x95, 0x10, 0xe0, 0x7d, 0x01, 0x25, 0xd2, 0x9d, 0x07, 0xd3, 0x3e, 0x3b,
  0x1d, 0x9f, 0x93, 0x06, 0x70, 0xf6, 0xfe, 0xdc, 0x0c, 0x64, 0x54, 0x80,
  0xba, 0x31, 0x44, 0x49, 0x2f, 0x16, 0x19, 0x4c, 0x48, 0x1d, 0xce, 0xd0,
  0x5e, 0x0e, 0x46, 0x05, 0xb5, 0x46, 0x3f, 0xc9, 0x73, 0x64, 0x1b, 0x9b,
  0xae, 0xa0, 0x5a, 0xd8, 0x2c, 0xc3, 0xed, 0x3b, 0xc9, 0xd6, 0x9f, 0xb6,

  0x0d, 0xcd, 0x0e, 0x4b, 0xbb, 0x3b, 0xc3, 0xa1, 0xbc, 0x6a, 0xbe, 0x5d,
  0xe7, 0x8b, 0x7c, 0x9e, 0x56, 0xde, 0xd4, 0x99, 0xa3, 0xd2, 0xfd, 0xb4,
  0x7c, 0x65, 0x6a, 0xa8, 0x06, 0xd3, 0x76, 0xa6, 0x24, 0xed, 0x21, 0xb8,
  0x92, 0x3b, 0xaa, 0x19, 0x29, 0x04, 0xd0, 0x98, 0x97, 0xb9, 0xdd, 0x3a,
  0x3a, 0x33, 0x62, 0x57, 0xad, 0x8d, 0xea, 0x9e, 0x5b, 0xb0, 0x71, 0x24,
  0x91, 0xe0, 0xa9, 0xb0, 0x5b, 0x97, 0x6c, 0x4c, 0xd2, 0x6a, 0x23, 0xb1,
  0xbc, 0x98, 0xef, 0x26, 0xdd, 0x90, 0x2a, 0xbb, 0x5c, 0x99, 0x15, 0x24,
  0xbc, 0xbb, 0xb4, 0xd2, 0xdf, 0x79, 0x2b, 0xd5, 0x01, 0x86, 0x13, 0x7a,
  0x24, 0xaf, 0xd9, 0xcc, 0xbc, 0x30, 0x76, 0x0b, 0x5d, 0x1a, 0xd5, 0x5f,

  0xa1, 0xd1, 0x08, 0xc5, 0x44, 0x08, 0xc6, 0xd3, 0x6b, 0xcd, 0x55, 0x69,
  0x32, 0xc3, 0x68, 0xc0, 0xfe, 0xe9, 0xc9, 0xa1, 0x39, 0xb2, 0xe1, 0xb0,
  0x36, 0xfb, 0x4f, 0xba, 0xf7, 0x52, 0x6c, 0xfa, 0x53, 0x38, 0x4c, 0xac,
  0x6f, 0xe5, 0x54, 0x74, 0x60, 0x88, 0x4d, 0x7e, 0x17, 0x2c, 0xd4, 0x28,

  0xaa, 0x37, 0xe6, 0xc3, 0xa9, 0x39, 0x32, 0x73, 0xe1, 0xde, 0xd0, 0x46,
  0xb1, 0x6f, 0x24, 0xb1, 0x6a, 0x33, 0x28, 0x23, 0xa7, 0x7b, 0x9f, 0x3a,
  0x5d, 0x66, 0x36, 0xcb, 0xe9, 0xb7, 0xe6, 0x7e, 0x19, 0x09, 0xb7, 0xca,
  0x60, 0x7b, 0xc8, 0xa6, 0x2e, 0xdc, 0x66, 0xc2, 0x8c, 0xad, 0xaf, 0x4a,
  0x32, 0x13, 0x37, 0x98, 0x17, 0x0f, 0xe9, 0x5b, 0x1b, 0x90, 0xe7, 0x8b,
  0x44, 0xbf, 0x25, 0x9f, 0x32, 0xeb, 0x98, 0xf9, 0xba, 0xd9, 0xc0, 0x08,
  0x9a, 0x3b, 0xcf, 0x48, 0x00, 0xaf, 0xe6, 0xb9, 0x57, 0x56, 0xe1, 0x31,

  0x22, 0x75, 0x49, 0xca, 0x94, 0xf0, 0x70, 0x08, 0x43, 0x5c, 0xd9, 0x9a,
  0xa7, 0x36, 0x30, 0x7b, 0x4b, 0x4f, 0x5e, 0x5e, 0xe9, 0xa3, 0x9e, 0x60,
  0x4d, 0xcd, 0xe2, 0x48, 0x38, 0x90, 0x3d, 0x3d, 0x53, 0xbe, 0x5f, 0x56,
  0xcc, 0xcc, 0xe6, 0xa5, 0xa1, 0xe5, 0x0d, 0x56, 0x59, 0x65, 0xda, 0x34,
  0x6b, 0x9a, 0x25, 0xed, 0x38, 0xfb, 0x99, 0x4a, 0x7b, 0x36, 0x76, 0xd2,
  0xb2, 0x5f, 0xf5, 0xbd, 0x53, 0x73, 0x1b, 0x35, 0xc6, 0x1e, 0x19, 0xd1,
  0x59, 0x13, 0x1d, 0xeb, 0xce, 0x83, 0xbc, 0x8d, 0xa8, 0xdb, 0x6c, 0xf8,
  0x3e, 0xc2, 0xc6, 0xea, 0xec, 0x7c, 0x0d, 0xf2, 0x11, 0x41, 0x66, 0x57,
  0x66, 0x56, 0x34, 0xcb, 0x53, 0xd0, 0x09, 0x1f, 0x0d, 0x94, 0x11, 0x67,
  0x11, 0x46, 0xf4, 0xe0, 0xbb, 0xae, 0x41, 0x37, 0x9f, 0xfb, 0x22, 0x49,
  0xe7, 0x34, 0x3c, 0x35, 0x6b, 0x3f, 0xc1, 0x3a, 0x86, 0xd7, 0x09, 0x5d,
  0x3f, 0x63, 0x36, 0xd0, 0x5d, 0x1c, 0x9e, 0x9e, 0x5c, 0x7b, 0xd7, 0x88,
  0x2c, 0xf7, 0x82, 0xf4, 0x94, 0x01, 0xbc, 0x23, 0x93, 0xb2, 0x34, 0x66,

  0xb2, 0x5b, 0x1a, 0xc9, 0x83, 0xac, 0x20, 0x6a, 0x97, 0x13, 0x35, 0x2c,
  0x61, 0x69, 0xf9, 0xed, 0x9d, 0x31, 0x97, 0xd2, 0xcb, 0x34, 0xb7, 0xf4,
  0x26, 0x37, 0x63, 0x96, 0xe8, 0xc3, 0x45, 0x29, 0xcf, 0xd3, 0x51, 0x91,
  0x0a, 0x24, 0x7c, 0x6b, 0x55, 0xf3, 0xf5, 0x31, 0xab, 0x32, 0x9c, 0x07,
  0xbc, 0x43, 0xc6, 0x25, 0xb5, 0x51, 0x87, 0x9b, 0x40, 0x51, 0x26, 0x9d,
  0x13, 0xcc, 0x17, 0x1a, 0xa4, 0x19, 0x71, 0x63, 0x94, 0x7c, 0x53, 0xde,
  0x64, 0xf0, 0x15, 0x42, 0xbf, 0xcf, 0xc9, 0xdb, 0x65, 0x54, 0xc1, 0x9b,


  0x2c, 0x59, 0x18, 0xd5, 0xd3, 0xec, 0x26, 0xb4, 0x0f, 0xfc, 0xcc, 0x33,
  0x0f, 0x0d, 0x85, 0xdf, 0xf0, 0x2e, 0xd9, 0x55, 0xd8, 0xa3, 0xbc, 0xe0,
  0x2b, 0x91, 0x6c, 0x41, 0xbd, 0x99, 0xd2, 0x6e, 0x2d, 0x1b, 0xb7, 0x0a,
  0xbb, 0x21, 0x37, 0x69, 0xed, 0x5d, 0xae, 0x0c, 0xa6, 0xe9, 0xb3, 0xd1,
  0xde, 0xf3, 0xd1, 0xee, 0xc8, 0x18, 0x22, 0xd9, 0x75, 0x5e, 0xae, 0x6a,
  0xf3, 0x69, 0x9a, 0x86, 0x7b, 0x27, 0xa3, 0x5b, 0xd9, 0x94, 0x97, 0x97,

  0x73, 0xd6, 0x79, 0x76, 0xca, 0x8b, 0x0b, 0xd6, 0x7d, 0x8c, 0xa6, 0x67,
  0xf5, 0x67, 0xb6, 0x80, 0x68, 0x67, 0xe4, 0xba, 0x31, 0x4b, 0x0d, 0x4d,


  0xe4, 0x91, 0x73, 0x5e, 0x0c, 0x87, 0xe9, 0xa4, 0x6e, 0xc8, 0x98, 0x1a,
  0xae, 0x8a, 0xfc, 0x76, 0x58, 0x97, 0xd3, 0x8f, 0xe6, 0x50, 0x5e, 0x2c,
  0xd3, 0xe6, 0xea, 0x4f, 0x1d, 0x97, 0xf0, 0x16, 0xc9, 0x92, 0xed, 0x24,
  0x79, 0xc9, 0x6a, 0x25, 0xed, 0x44, 0xc5, 0xf7, 0xcd, 0x9c, 0xa6, 0x8c,
  0x92, 0xbc, 0x37, 0xa3, 0x18, 0x5a, 0x5e, 0x98, 0x43, 0x4d, 0x78, 0xb0,
  0x81, 0xb2, 0xd2, 0xce, 0x70, 0x70, 0x38, 0x92, 0x18, 0x81, 0xdf, 0xce,

  0x5c, 0x9d, 0xb2, 0xfa, 0x68, 0x14, 0xed, 0xb7, 0xc6, 0x64, 0x3c, 0xa0,
  0x7f, 0x1b, 0x16, 0xd6, 0x60, 0xcb, 0x45, 0xb2, 0x9a, 0x19, 0x31, 0x33,
  0x26, 0x8b, 0x3c, 0x9d, 0x0c, 0x3b, 0xc3, 0xc9, 0xf7, 0xe5, 0xa3, 0x89,
  0xda, 0x1a, 0x4a, 0x4a, 0xc9, 0xe6, 0x97, 0xc6, 0xfe, 0xbb, 0xe2, 0x63,
  0xc7, 0x80, 0xbc, 0x46, 0x43, 0xa1, 0x97, 0xc6, 0x82, 0x28, 0x9a, 0xee,
  0x70, 0x57, 0x10, 0xd5, 0x24, 0x65, 0xd8, 0xd8, 0x05, 0x91, 0x88, 0x07,
  0xc8, 0xda, 0x9f, 0xa3, 0xcf, 0x3a, 0xaf, 0x1d, 0xba, 0x33, 0x7d, 0xf2,
  0xc8, 0x9c, 0xa9, 0xbf, 0xd1, 0xf3, 0x66, 0x58, 0x5f, 0x4f, 0x93, 0x17,
  0xd0, 0xbe, 0x89, 0x4c, 0xa3, 0x1b, 0x3c, 0xde, 0x4e, 0xbe, 0x3f, 0x7c,
  0xf7, 0xf6, 0xf8, 0xed, 0xd7, 0x07, 0xfc, 0x51, 0xa1, 0x34, 0xf3, 0xb7,
  0xec, 0xd6, 0x88, 0xc0, 0x9c, 0x26, 0x6b, 0x24, 0x59, 0xf2, 0xaa, 0xc4,
  0xec, 0xe8, 0xbc, 0xcd, 0xf7, 0x8c, 0x1c, 0xe9, 0xee, 0xc8, 0x6c, 0xd5,
  0x71, 0xfc, 0x5a, 0x6e, 0xed, 0x46, 0xe5, 0xbb, 0xc9, 0x3b, 0xac, 0x13,

  0x34, 0xcc, 0x91, 0x7d, 0xc7, 0x50, 0x96, 0x46, 0x24, 0x2a, 0x61, 0xe3,

  0xeb, 0xb4, 0x3b, 0xc3, 0x2d, 0x4b, 0x63, 0xe9, 0xb2, 0x91, 0x6f, 0xc6,
  0xbb, 0x35, 0x77, 0x86, 0xb6, 0x48, 0x07, 0x9b, 0x1a, 0x5e, 0x94, 0x89,
  0xd6, 0x00, 0x3e, 0x07, 0x9b, 0x41, 0xf8, 0xd8, 0x28, 0x39, 0xbc, 0xe8,
  0xce, 0x9a, 0x14, 0x17, 0x52, 0xe9, 0x55, 0x04, 0xce, 0x9c, 0x16, 0xcc,
  0x2e, 0x5e, 0x1e, 0x51, 0x87, 0xa9, 0xcd, 0xe1, 0xcc, 0x54, 0xcc, 0xd3,
  0x67, 0x3a, 0xc3, 0xc1, 0xee, 0x04, 0x8f, 0x21, 0x8d, 0x30, 0xa7, 0xd3,
  0x24, 0xbb, 0xcf, 0x70, 0xe9, 0x45, 0x39, 0x83, 0x11, 0x11, 0xec, 0xcf,
  0xd8, 0x7a, 0x7b, 0x36, 0x36, 0xdc, 0xaa, 0x93, 0x2d, 0xf2, 0xfb, 0x19,
  0x12, 0x28, 0x2e, 0x9b, 0xab, 0x6d, 0xe7, 0xd3, 0x20, 0x1d, 0xc5, 0x2c,
  0x78, 0xc7, 0x4c, 0x04, 0xeb, 0x2e, 0xba, 0x74, 0x0e, 0x9f, 0x33, 0xd4,
  0xce, 0xbf, 0xae, 0xea, 0x06, 0xa6, 0x90, 0xc8, 0x7e, 0x5e, 0x89, 0x99,
  0xd9, 0x22, 0x5b, 0x94, 0xd5, 0x5d, 0x30, 0x91, 0x63, 0x68, 0x1e, 0x64,
  0x75, 0xca, 0x69, 0x11, 0x11, 0x40, 0x38, 0xaa, 0x3f, 0x90, 0x2c, 0x00,
  0x72, 0xa8, 0x5b, 0x23, 0x10, 0x1a, 0x93, 0xe1, 0x3e, 0xc6, 0xf8, 0x76,
  0xde, 0x5a, 0xb5, 0x9e, 0xe0, 0xe5, 0x61, 0xc3, 0x5e, 0x4c, 0xa9, 0x89,
  0xf8, 0x6f, 0xe6, 0x29, 0xb1, 0x9b, 0x22, 0x6b, 0x9d, 0x0e, 0xc4, 0x06,
  0x2f, 0x6b, 0x1d, 0x9d, 0x3f, 0x7d, 0x3c, 0xda, 0x6b, 0xd1, 0x79, 0x71,
  0x47, 0x11, 0x82, 0x38, 0xf3, 0x38, 0x37, 0x1a, 0x63, 0xcd, 0xf3, 0x35,
  0x3b, 0x78, 0x91, 0x5f, 0xae, 0xaa, 0x8c, 0x55, 0x37, 0x04, 0x15, 0x34,
  0x96, 0x40, 0xda, 0xd0, 0x55, 0x09, 0x17, 0xbc, 0x91, 0xa2, 0xd9, 0xfc,
  0x62, 0xd0, 0x19, 0x0e, 0x76, 0x0b, 0x91, 0x3e, 0xa6, 0x0f, 0x6e, 0x69,
  0xec, 0x13, 0x0c, 0x56, 0x64, 0xa2, 0xbd, 0x2e, 0x0c, 0x27, 0x49, 0xc8,
  0x07, 0x9d, 0x4c, 0xe7, 0x69, 0xbe, 0x00, 0x89, 0x8a, 0x8f, 0x75, 0x14,
  0xbb, 0x12, 0x64, 0x59, 0xd0, 0xdb, 0x13, 0xb2, 0x79, 0xab, 0x9a, 0x44,
  0x32, 0x4e, 0x54, 0x55, 0x66, 0xb6, 0x28, 0xaf, 0xb2, 0xe9, 0x47, 0xe5,
  0x5a, 0xaa, 0x6b, 0x76, 0x69, 0x98, 0x82, 0x0b, 0x30, 0xac, 0xcd, 0x53,
  0xab, 0x9a, 0xae, 0x48, 0x5d, 0xe7, 0xe4, 0x37, 0x23, 0x3b, 0x70, 0x35,
  0x85, 0x79, 0x88, 0xcb, 0x62, 0x28, 0x5b, 0x59, 0x5f, 0x62, 0x78, 0x69,
  0x31, 0x1b, 0x36, 0x55, 0xbe, 0xec, 0x9b, 0x1d, 0x9f, 0x4a, 0x5b, 0x33,
  0xad, 0xc5, 0x54, 0x87, 0x15, 0xcc, 0x76, 0xf1, 0x34, 0xe9, 0xec, 0x66,
  0x97, 0x20, 0xb1, 0xb7, 0x03, 0x72, 0x04, 0xe5, 0x46, 0x51, 0x60, 0x2b,
  0x09, 0x7e, 0x4e, 0x63, 0x13, 0x89, 0xc4, 0x32, 0xe6, 0x5b, 0x3e, 0x85,
  0xf6, 0x93, 0x5f, 0x66, 0x14, 0xc4, 0x31, 0x42, 0xac, 0x99, 0x1b, 0x9d,
  0x28, 0xa4, 0x6f, 0xf3, 0x9b, 0xec, 0xb2, 0x6c, 0x48, 0x0d, 0x09, 0xc8,
  0xe4, 0x3d, 0x18, 0xbc, 0xa5, 0x09, 0xd5, 0xf7, 0x7d, 0x65, 0x2c, 0x67,
  0x45, 0xdc, 0x7c, 0x9a, 0xf5, 0x7d, 0x71, 0x35, 0xd4, 0x8d, 0xb9, 0x55,
  0xdd, 0x53, 0x37, 0xa3, 0x4d, 0x33, 0x18, 0x5d, 0xd0, 0x18, 0x55, 0x61,
  0x55, 0x4d, 0x9f, 0xd8, 0x01, 0x29, 0xc7, 0xcd, 0x4d, 0x3e, 0xcd, 0xd4,
  0x0f, 0x27, 0xce, 0xe9, 0x79, 0x1e, 0xf2, 0xf8, 0x05, 0xdd, 0x47, 0xf3,
  0x12, 0x2b, 0xe3, 0xe4, 0x36, 0xb9, 0xc9, 0x49, 0x59, 0x17, 0x86, 0x07,
  0x5d, 0x4c, 0xe4, 0x40, 0x5a, 0xe5, 0xf0, 0x11, 0x99, 0xe1, 0x64, 0x9e,
  0x9e, 0x29, 0xef, 0xdf, 0x2f, 0x9e, 0x37, 0xde, 0x17, 0xfb, 0xc5, 0xd9,

  0x2d, 0xb8, 0x5c, 0x17, 0x69, 0x3e, 0x8f, 0xec, 0x13, 0x98, 0xd8, 0x65,
  0x06, 0x77, 0x1a, 0x9f, 0xc1, 0x8a, 0x36, 0x9d, 0x02, 0x6e, 0x21, 0x83,

  0xca, 0x32, 0x36, 0x24, 0x60, 0x75, 0xdc, 0xde, 0xd9, 0xed, 0x85, 0xb6,
  0xc6, 0x67, 0x27, 0x7f, 0xe7, 0xe3, 0xf3, 0xae, 0x67, 0x4a, 0xa3, 0xa6,
  0x4b, 0x8a, 0x2c, 0x75, 0x6f, 0x28, 0xd9, 0x5c, 0x14, 0x9c, 0xdc, 0x56,

  0xd7, 0x71, 0x26, 0x8e, 0x73, 0x1b, 0xd4, 0x03, 0x33, 0x22, 0x7e, 0x26,
  0x57, 0x98, 0xc7, 0x11, 0xee, 0xdb, 0xe5, 0xe3, 0x46, 0xb0, 0x1a, 0x39,
  0x0c, 0xfe, 0xd9, 0xa2, 0xd8, 0xd2, 0xb0, 0x2e, 0x1b, 0x5a, 0x22, 0x57,
  0xaf, 0xf0, 0x39, 0x58, 0x58, 0xb8, 0xb3, 0x31, 0x3e, 0x4e, 0x36, 0x1f,
  0x29, 0xc8, 0x2c, 0x61, 0x06, 0x09, 0x2b, 0x74, 0xcc, 0xac, 0xa6, 0xec,
  0xfc, 0x15, 0xe5, 0x81, 0xc5, 0x0c, 0xa6, 0x7a, 0x31, 0x4f, 0x2f, 0xe1,
  0x57, 0xbb, 0xec, 0xde, 0xd0, 0xa2, 0x94, 0x08, 0x5f, 0x5d, 0x1a, 0xd6,

  0x4e, 0xab, 0x16, 0x9f, 0x56, 0x9d, 0x6c, 0x19, 0x22, 0x9b, 0xaf, 0x20,
  0xe7, 0x4f, 0xcd, 0xf2, 0xc6, 0xe3, 0x6f, 0xb6, 0x7d, 0xf6, 0x86, 0xdd,
  0x7d, 0x08, 0x73, 0x23, 0xee, 0x04, 0xeb, 0xfb, 0x2b, 0x3e, 0x8f, 0x36,
  0x83, 0xb3, 0x66, 0x9d, 0xaf, 0xc2, 0x29, 0x5d, 0xd2, 0x2a, 0xc8, 0x07,
  0x3a, 0xb2, 0x57, 0x9f, 0x9e, 0x54, 0x57, 0x2c, 0x13, 0x76, 0x4b, 0x33,
  0x58, 0xd5, 0x2b, 0x78, 0xa5, 0x20, 0x8b, 0xbb, 0xc3, 0x19, 0x46, 0x6f,
  0x58, 0xd1, 0xaa, 0xa0, 0x3f, 0xad, 0xf2, 0x9c, 0xc3, 0x8c, 0xa3, 0xb3,
  0xa8, 0xc8, 0xf7, 0x4d, 0x06, 0xb0, 0x55, 0x3e, 0x0d, 0x4f, 0xd1, 0xb1,
  0x69, 0x2f, 0xbb, 0x97, 0xd0, 0xa8, 0x66, 0x60, 0x37, 0x46, 0x7c, 0x1a,
  0xa1, 0x4c, 0x17, 0xae, 0x87, 0x7b, 0x6f, 0xd5, 0x2b, 0xc3, 0x5f, 0xc8,
  0x66, 0x10, 0xe6, 0x41, 0xf4, 0xd8, 0x9d, 0x1d, 0xb3, 0x17, 0x23, 0x69,
  0x3c, 0x3e, 0xb2, 0xfd, 0x6b, 0x5f, 0x10, 0x1c, 0x9a, 0x7f, 0x8a, 0x46,
  0xf4, 0x66, 0xc6, 0x12, 0x83, 0x2e, 0x16, 0xa8, 0x61, 0xe7, 0x27, 0xe3,
  0xd8, 0x61, 0xb6, 0x03, 0x53, 0xf4, 0x3e, 0x31, 0x5b, 0xf2, 0x1f, 0xb2,

  0x3f, 0xb5, 0x24, 0x6b, 0xc0, 0x0b, 0x4e, 0xf9, 0x8e, 0xbe, 0x65, 0x46,
  0x51, 0x2c, 0x36, 0x94, 0x39, 0xea, 0x4d, 0x0c, 0x8c, 0x04, 0x35, 0x69,
  0x26, 0xd6, 0x77, 0xfa, 0xf2, 0xd0, 0x1f, 0x17, 0xce, 0xd2, 0xee, 0x45,
  0xf0, 0x7e, 0xbf, 0x55, 0x6f, 0x5b, 0x1e, 0x66, 0x46, 0x39, 0x3b, 0x7a,
  0x03, 0xc3, 0x35, 0x35, 0x74, 0xf3, 0x56, 0xfd, 0x94, 0x1a, 0xd4, 0x9e,

  0xac, 0xf2, 0x79, 0x2b, 0x18, 0xe0, 0x6c, 0x6d, 0x44, 0x94, 0x99, 0xb4,
  0x30, 0x35, 0x0e, 0x6b, 0xe5, 0xf0, 0x0b, 0x77, 0x09, 0xad, 0xb9, 0x5b,

  0x8a, 0x4b, 0x7b, 0x55, 0xb7, 0x3c, 0x47, 0x2a, 0x97, 0xe7, 0x0d, 0xd4,
  0x6b, 0x32, 0x68, 0xbd, 0x31, 0x83, 0x13, 0xc2, 0xb4, 0x48, 0x0c, 0x5c,
  0x16, 0xf9, 0xdf, 0x45, 0xff, 0xcc, 0x8a, 0xeb, 0xbc, 0x2a, 0x0b, 0xd2,
  0x6f, 0x8d, 0xcd, 0x5b, 0xe5, 0x60, 0xcb, 0xa4, 0x7a, 0x19, 0xc6, 0xb1,

  0xf9, 0xf2, 0xfd, 0xbb, 0x93, 0x0f, 0x2f, 0x0f, 0x3f, 0x7c, 0xf5, 0xfe,
  0xed, 0xab, 0x93, 0xa3, 0xcd, 0xce, 0x70, 0xe4, 0xec, 0xcb, 0xc5, 0x43,
  0x5f, 0x93, 0xc9, 0x81, 0x4b, 0x62, 0xa6, 0xc8, 0x23, 0x5f, 0xe6, 0xd7,
  0x86, 0xa1, 0xc1, 0x82, 0x80, 0x73, 0x1e, 0x7f, 0x83, 0x3b, 0x4b, 0x36,
  0xbc, 0x33, 0xdc, 0x64, 0x45, 0x3a, 0xda, 0xa8, 0xa5, 0x29, 0xeb, 0x55,
  0x11, 0x73, 0x5d, 0x27, 0x18, 0xd1, 0xae, 0x49, 0x8b, 0x2a, 0x66, 0x64,
  0xb7, 0x78, 0xd6, 0xa1, 0xe7, 0xa7, 0x5f, 0x35, 0xc6, 0x3c, 0xd2, 0xc8,
  0x80, 0xd1, 0xd8, 0xca, 0x8f, 0x9a, 0x5e, 0x60, 0x6c, 0xab, 0xc3, 0xc8,
  0x71, 0xd7, 0x4e, 0x0b, 0x9d, 0x25, 0x9b, 0x34, 0x92, 0xa1, 0xdf, 0xa1,
  0x4c, 0x72, 0x5a, 0x35, 0xc6, 0xb0, 0xc9, 0x72, 0x5c, 0x0c, 0x0d, 0x9f,
  0x92, 0xbe, 0x0a, 0xaf, 0x5c, 0xa0, 0x5d, 0x1b, 0x3d, 0x93, 0xf6, 0x00,
  0x9a, 0x7d, 0x76, 0x9b, 0xe1, 0xe6, 0xc9, 0x5b, 0x2f, 0x57, 0x15, 0x6e,
  0xf3, 0xf7, 0x46, 0x1b, 0x21, 0xee, 0xf7, 0x0a, 0x6e, 0x3d, 0xf3, 0x82,
  0x3e, 0x64, 0xc4, 0x4c, 0x57, 0xe4, 0x95, 0x73, 0x0a, 0xa8, 0xa6, 0x70,
  0xa1, 0xc0, 0xe1, 0x75, 0x76, 0x78, 0xfe, 0x4d, 0x54, 0x91, 0x75, 0xb9,
  0x3c, 0x42, 0x8a, 0x50, 0xca, 0xeb, 0x46, 0x2e, 0xc8, 0xdb, 0xf1, 0x38,
  0x41, 0xa6, 0xc8, 0x3c, 0x9f, 0x54, 0x29, 0x7d, 0x93, 0x7e, 0x4c, 0x3f,
  0x35, 0x64, 0xdd, 0x19, 0xee, 0xec, 0xdb, 0x97, 0xe3, 0xdf, 0xed, 0xed,
  0x91, 0x06, 0xbf, 0x32, 0xfb, 0xb2, 0x65, 0x5e, 0x29, 0x6a, 0x73, 0x33,
  0x17, 0xa3, 0xba, 0xdc, 0x86, 0xd8, 0xae, 0x45, 0x1d, 0x48, 0xaf, 0x8d,
  0xb4, 0x05, 0x1d, 0x29, 0x51, 0x9b, 0xe3, 0x0c, 0xf6, 0x04, 0x8c, 0x4e,
  0xd2, 0x68, 0x0c, 0xbf, 0x30, 0xf2, 0x7a, 0x1e, 0x2a, 0xe3, 0x5b, 0xf9,
  0xe9, 0x58, 0x92, 0x50, 0xd2, 0xa9, 0xf9, 0x2b, 0x79, 0x08, 0xb6, 0x69,
  0x65, 0xed, 0x1b, 0xa6, 0xab, 0x1a, 0xb3, 0x36, 0x7a, 0x4e, 0xa6, 0x0b,
  0x72, 0x67, 0x42, 0xae, 0x50, 0x74, 0x2f, 0x97, 0xcb, 0x4f, 0x02, 0x39,
  0x4c, 0xd2, 0xe9, 0xc7, 0x9b, 0xb4, 0x9a, 0xb1, 0x2d, 0x64, 0x28, 0x66,
  0x92, 0xcf, 0xf3, 0xe6, 0x8e, 0x0d, 0xda, 0xae, 0x31, 0xcd, 0x81, 0x51,
  0xda, 0x40, 0x73, 0x8f, 0x2e, 0x8d, 0xad, 0x4f, 0xda, 0x27, 0xa9, 0xf7,
  0x79, 0xe3, 0xdb, 0xb2, 0x50, 0x91, 0x1a, 0xab, 0xe2, 0xd8, 0x6f, 0x07,
  0xe2, 0xb1, 0xe1, 0x7b, 0x84, 0x69, 0x3a, 0xda, 0x55, 0x36, 0xe8, 0x33,
  0x29, 0x25, 0x9f, 0xa4, 0xbe, 0x33, 0x52, 0x7e, 0x91, 0x44, 0x54, 0x44,
  0xa4, 0x0d, 0x25, 0xdf, 0x66, 0x77, 0xc6, 0x70, 0xce, 0x0b, 0xc7, 0x29,
  0xd9, 0xb0, 0xcf, 0xc8, 0xb2, 0x63, 0x5d, 0x34, 0x57, 0x2f, 0x7a, 0x26,
  0x81, 0x10, 0x96, 0x24, 0xa1, 0xe7, 0x80, 0xdf, 0x57, 0x3d, 0x9c, 0x86,
  0xd8, 0xac, 0x5b, 0x2c, 0x19, 0x5f, 0x0a, 0x0f, 0x71, 0x6c, 0x7e, 0x5e,
  0x14, 0xd9, 0x5c, 0x8e, 0xef, 0x7c, 0xdd, 0x01, 0xd8, 0x67, 0xcd, 0x94,
  0xbf, 0xe7, 0x1b, 0xdd, 0x19, 0xee, 0x19, 0x47, 0xf5, 0xd3, 0x46, 0x65,
  0x92, 0xa6, 0x0b, 0x19, 0xab, 0x68, 0xd7, 0xfe, 0x6a, 0xd4, 0xfb, 0x99,
  0xe0, 0x36, 0x55, 0xee, 0xd0, 0xdb, 0x67, 0xce, 0xde, 0x50, 0x1c, 0x32,
  0x9d, 0xb1, 0x1c, 0xf1, 0x1f, 0xad, 0x66, 0x85, 0xc8, 0x45, 0x67, 0x38,
  0x5f, 0xcb, 0x56, 0x19, 0x26, 0xeb, 0xd8, 0x34, 0x7a, 0x6a, 0x59, 0xc1,
  0x51, 0x54, 0x95, 0xe6, 0xac, 0x5b, 0xe7, 0xb9, 0xc5, 0xca, 0x46, 0xf7,
  0x9a, 0x08, 0x37, 0xf7, 0x36, 0x66, 0x3b, 0x76, 0xd1, 0x03, 0xcd, 0x24,
  0x34, 0x57, 0x7b, 0x2d, 0xce, 0xb6, 0x84, 0x06, 0x97, 0x7e, 0x61, 0xd8,
  0xd8, 0xbf, 0x2e, 0xa0, 0x99, 0x19, 0x82, 0xf9, 0x85, 0x32, 0x4b, 0x68,
  0xb1, 0x25, 0xa8, 0xdf, 0xa8, 0x44, 0xa6, 0x49, 0x58, 0xdf, 0xeb, 0x92,
  0x33, 0x05, 0x58, 0x71, 0x64, 0x27, 0x72, 0x68, 0x06, 0x90, 0x1f, 0x50,
  0x7c, 0x8d, 0x07, 0x1b, 0xc9, 0x56, 0x36, 0xba, 0x34, 0xe3, 0x6d, 0xd0,
  0x38, 0x7b, 0x07, 0xf4, 0xdf, 0x7d, 0xfc, 0xf7, 0xd1, 0x86, 0xe6, 0xf4,
  0xf9, 0x5b, 0x4f, 0xd2, 0xbc, 0x2b, 0x8b, 0x38, 0x10, 0xe7, 0x84, 0xfb,
  0x80, 0x9d, 0xcb, 0x7d, 0x8c, 0x87, 0x75, 0xd6, 0x13, 0xde, 0xe5, 0x50,
  0xdd, 0xd2, 0x6d, 0x58, 0xb0, 0x2f, 0xe2, 0x3a, 0x63, 0x67, 0x88, 0x59,
  0xd9, 0xd4, 0xa8, 0x87, 0xf0, 0x1f, 0xea, 0xad, 0x9a, 0x7e, 0xa8, 0xb2,
  0xab, 0xb4, 0xbe, 0x4a, 0x56, 0x0d, 0x13, 0xa1, 0xa1, 0xdb, 0xee, 0x70,
  0xcb, 0x79, 0xee, 0x5c, 0x6c, 0xf2, 0xe9, 0x91, 0xda, 0x7d, 0xee, 0x14,
  0x39, 0xf4, 0x31, 0x2f, 0x6f, 0xf4, 0x99, 0xa1, 0x24, 0xd9, 0xc5, 0xd4,
  0x02, 0x73, 0x9a, 0xf0, 0x99, 0xd0, 0x63, 0x7e, 0x08, 0x7b, 0x41, 0xda,
  0x24, 0x65, 0x00, 0x1a, 0x16, 0x77, 0x61, 0x76, 0x8c, 0x2c, 0xba, 0x39,

  0xce, 0x8d, 0x6c, 0x57, 0xcc, 0x3b, 0x30, 0x4d, 0x45, 0xcf, 0xcb, 0x2f,
  0xc4, 0x6d, 0x2b, 0xff, 0x86, 0x3c, 0x15, 0xed, 0xab, 0xe6, 0x30, 0x77,
  0x57, 0xf5, 0xba, 0x9f, 0xb4, 0x95, 0x41, 0x5a, 0x4d, 0x47, 0x16, 0xcb,
  0x91, 0x12, 0xa5, 0xeb, 0xfc, 0x12, 0xb6, 0x46, 0xcc, 0x81, 0xc1, 0x0e,
  0xa9, 0x7f, 0xe9, 0x92, 0x98, 0x19, 0x0f, 0xc9, 0x51, 0xba, 0xaa, 0x1f,
  0x70, 0x47, 0x3c, 0xa6, 0xcb, 0xef, 0x58, 0x47, 0x31, 0x87, 0xf3, 0xfd,
  0x0d, 0xe8, 0x52, 0xe1, 0x9d, 0x47, 0x18, 0x2f, 0xbd, 0x9b, 0x35, 0xe6,

  0x81, 0xde, 0x89, 0x8b, 0x64, 0x2b, 0xfd, 0x98, 0x8e, 0x92, 0xd3, 0x97,
  0xe3, 0x33, 0xfa, 0x84, 0xa1, 0x8e, 0xe2, 0xd2, 0xcc, 0xe2, 0x64, 0xdc,
  0x19, 0x2e, 0xbb, 0x6d, 0xb2, 0xa2, 0x8e, 0x39, 0x27, 0xc3, 0x6d, 0xd6,
  0xf0, 0x81, 0xe6, 0xd5, 0xc8, 0x64, 0x8d, 0xa5, 0x8f, 0x80, 0x38, 0xc5,
  0x77, 0x29, 0xf9, 0x22, 0xe1, 0xab, 0x16, 0x7c, 0x68, 0x69, 0x6e, 0xfe,
  0x6c, 0xdb, 0xba, 0x6a, 0x06, 0x4a, 0x0b, 0x36, 0x4e, 0x58, 0xaf, 0x2e,
  0xc9, 0x06, 0xa9, 0xd5, 0x6e, 0xb4, 0x5f, 0x30, 0xbb, 0x11, 0xaa, 0x0a,
  0xb2, 0x6c, 0xeb, 0x45, 0x34, 0x56, 0x13, 0xa5, 0x50, 0x41, 0x45, 0x2a,
  0x4a, 0x37, 0x2a, 0xa5, 0x51, 0x20, 0x5d, 0x34, 0x47, 0x64, 0x6d, 0x9a,
  0x19, 0x15, 0x74, 0x16, 0x51, 0x02, 0xf8, 0x50, 0xd4, 0x70, 0xba, 0x90,
  0x14, 0xd1, 0x88, 0xff, 0x07, 0x03, 0x4d, 0x59, 0x45, 0x23, 0xaa, 0x47,
  0x84, 0x22, 0x27, 0x1f, 0x29, 0x29, 0xcc, 0x6c, 0xaa, 0xd3, 0x78, 0xf6,
  0xfe, 0x7f, 0x5d, 0xac, 0xcc, 0xc6, 0x47, 0xa4, 0x31, 0x29, 0x55, 0x24,
  0x66, 0x68, 0x03, 0xd7, 0x39, 0xf6, 0x1e, 0xef, 0xb5, 0x1d, 0xd8, 0x20,
  0x36, 0x63, 0x00, 0x64, 0xc9, 0x0b, 0xfa, 0xef, 0xbd, 0x5c, 0x19, 0x39,
  0x2b, 0x78, 0x5e, 0x02, 0x9d, 0xcc, 0x3b, 0xc5, 0x17, 0x93, 0xb4, 0x19,
  0x74, 0x20, 0xbd, 0x40, 0x6e, 0x23, 0xe2, 0x7b, 0x83, 0xe4, 0x15, 0x65,
  0x62, 0x1f, 0xbd, 0xfd, 0x1a, 0x34, 0x70, 0xb6, 0xb7, 0x8f, 0xb0, 0x92,
  0xb5, 0x1e, 0x66, 0xf8, 0x48, 0xcd, 0x8e, 0x04, 0x0e, 0x0b, 0x87, 0x8a,
  0x2f, 0x64, 0xc2, 0x00, 0x6c, 0x94, 0xe2, 0x81, 0x48, 0x1b, 0x9a, 0x7d,
  0x3a, 0xf9, 0x15, 0x18, 0xa2, 0x47, 0x03, 0xd9, 0x41, 0x71, 0xcc, 0x7c,
  0xcc, 0xee, 0xdc, 0xdf, 0xb0, 0xab, 0xde, 0x56, 0xbb, 0x87, 0x5f, 0x78,
  0x9b, 0xf4, 0x97, 0x03, 0x4a, 0x4d, 0x32, 0x5a, 0xea, 0xec, 0xa7, 0x5f,

  0x26, 0x11, 0xe3, 0x3b, 0x1f, 0x71, 0xb6, 0xc0, 0xcf, 0xa5, 0x49, 0x40,
  0x1c, 0xf3, 0x67, 0x16, 0x2f, 0x79, 0xf0, 0x94, 0x22, 0x4f, 0x04, 0x9f,
  0x16, 0x56, 0x25, 0x19, 0x72, 0xe6, 0x17, 0x32, 0xc1, 0xba, 0x7b, 0x3f,
  0x2d, 0xe7, 0x81, 0xac, 0x6b, 0x19, 0xae, 0xd0, 0xe7, 0xf7, 0x45, 0xbe,
  0xc1, 0x98, 0x63, 0x66, 0x23, 0x5a, 0x74, 0xf7, 0x3a, 0x58, 0x9d, 0x1a,
  0xea, 0x97, 0x93, 0x8c, 0xf4, 0x26, 0xbf, 0x88, 0xf8, 0x36, 0xa6, 0xc6,
  0x9a, 0xd2, 0x28, 0x71, 0x1a, 0x6f, 0x4c, 0xfd, 0x37, 0x67, 0xab, 0x7b,
  0x6b, 0x0e, 0x9d, 0xfc, 0x4c, 0x76, 0xd7, 0x06, 0xbe, 0xa7, 0xc9, 0x30,
  0xb9, 0x2a, 0x57, 0xfd, 0x5c, 0xb2, 0x48, 0xc3, 0xf8, 0x05, 0xa7, 0x1a,
  0x88, 0x37, 0x4a, 0x52, 0xaa, 0x5a, 0x7e, 0x7c, 0x26, 0x3f, 0xb2, 0x44,
  0x37, 0xbc, 0x2d, 0xd9, 0x88, 0x1d, 0x45, 0xc3, 0x51, 0x4f, 0xb9, 0x42,
  0xf9, 0x35, 0x6d, 0x9d, 0xd2, 0x8e, 0x73, 0x6c, 0xb6, 0x55, 0xdf, 0xb2,

  0xa0, 0x3f, 0x0b, 0xf2, 0x89, 0xfd, 0x5b, 0x84, 0x20, 0xa3, 0xb4, 0x48,
  0xbe, 0x71, 0x89, 0x7b, 0x40, 0x81, 0xa1, 0xec, 0x47, 0x49, 0x3f, 0x9f,

  0xdf, 0x3d, 0xc8, 0xa0, 0x53, 0x05, 0x44, 0xed, 0x36, 0xcf, 0x98, 0x0b,
  0xac, 0x9d, 0x2e, 0x81, 0x18, 0x36, 0xde, 0x50, 0x2e, 0x09, 0xd3, 0x2e,
  0xf9, 0x5e, 0xf3, 0xe9, 0x47, 0x44, 0x5d, 0x44, 0x42, 0xf9, 0xeb, 0xd3,
  0x84, 0x3d, 0x4e, 0x35, 0x8d, 0x1c, 0x01, 0x6c, 0x49, 0x72, 0x0a, 0x13,
  0x4d, 0x92, 0x74, 0xce, 0x0b, 0xd6, 0xd9, 0x7a, 0xbd, 0x0c, 0x66, 0xae,
  0x1f, 0x5e, 0x1d, 0xbf, 0x4b, 0xb6, 0x48, 0x03, 0xef, 0x1a, 0xb9, 0x2a,
  0xde, 0x77, 0xb2, 0x66, 0xba, 0xb3, 0xfc, 0x98, 0xef, 0x18, 0x63, 0x73,
  0x36, 0xd9, 0xb6, 0x46, 0x14, 0x3e, 0x47, 0x54, 0x68, 0x0d, 0x53, 0xb5,
  0x4c, 0x61, 0x9a, 0x06, 0xae, 0x47, 0x67, 0xaa, 0x72, 0x69, 0x8b, 0xb5,
  0x51, 0x79, 0x9b, 0x98, 0xa0, 0x11, 0x9e, 0xe1, 0xb4, 0x08, 0x04, 0x75,
  0x32, 0xf6, 0x4b, 0x1b, 0x1b, 0xbb, 0x7b, 0x57, 0x39, 0xed, 0x51, 0x1c,
  0x39, 0xec, 0xc0, 0xd1, 0x5c, 0x3d, 0x11, 0x17, 0x4e, 0xfb, 0x1d, 0x50,
  0x96, 0x25, 0x6d, 0xca, 0x92, 0x44, 0xd2, 0x8c, 0xdc, 0x80, 0xdd, 0xe1,
  0xa0, 0xc9, 0x6d, 0x8c, 0x76, 0x36, 0x12, 0x9b, 0x57, 0x6a, 0x76, 0x99,


  0x13, 0xa7, 0x6d, 0xd0, 0xcb, 0x90, 0xd8, 0xc5, 0xaa, 0xb6, 0x7e, 0xcc,
  0xd4, 0x9e, 0xd7, 0x28, 0xc6, 0x50, 0xbd, 0xe3, 0xb4, 0x3a, 0x97, 0xd1,
  0x8d, 0x71, 0xb3, 0x7c, 0x6b, 0x5d, 0x26, 0x85, 0xa3, 0xda, 0xf8, 0x71,
  0x23, 0xf1, 0xf2, 0x12, 0x5b, 0xe9, 0x89, 0xb9, 0xcb, 0x1c, 0xf2, 0x84,
  0x80, 0x91, 0xc8, 0xf6, 0x0e, 0xcf, 0xb2, 0x79, 0xbe, 0xc8, 0x61, 0x7b,
  0xf9, 0x53, 0x18, 0xc6, 0x82, 0x83, 0x6e, 0x4a, 0x3f, 0x86, 0x53, 0xd2,
  0x5c, 0xdf, 0x94, 0x7e, 0x6d, 0xa6, 0x04, 0x8f, 0x18, 0xa7, 0x62, 0xc6,
  0xad, 0xe6, 0xf6, 0x84, 0x6c, 0xb6, 0xf0, 0x9a, 0x90, 0xb1, 0xbd, 0x4b,
  0x7d, 0xaa, 0xbc, 0x73, 0x89, 0xe8, 0xa5, 0x67, 0xa6, 0x96, 0x2c, 0x3f,
  0x4e, 0xeb, 0xbd, 0xbd, 0xae, 0xa0, 0xab, 0x1d, 0x45, 0x89, 0xfd, 0x9e,
  0x5a, 0xc2, 0x7c, 0xff, 0xee, 0x38, 0xd9, 0xa2, 0xea, 0x90, 0x67, 0x4f,
  0xf6, 0xf6, 0xb7, 0xfd, 0x94, 0x12, 0x65, 0x00, 0xa1, 0xdc, 0xbc, 0xe3,
  0x70, 0xac, 0x77, 0x01, 0xe7, 0xe5, 0x34, 0x15, 0x8d, 0xc3, 0x0d, 0x3d,

  0xcb, 0xae, 0xf3, 0x29, 0x15, 0xe7, 0x50, 0x24, 0x9e, 0x78, 0xf0, 0x24,
  0x33, 0x93, 0x0c, 0x76, 0xdc, 0xa5, 0xf2, 0xf2, 0xec, 0x8d, 0x89, 0x64,

  0x35, 0x65, 0x4a, 0x98, 0x36, 0x34, 0xd0, 0xc8, 0xde, 0xf9, 0xb3, 0x96,
  0x28, 0x41, 0xda, 0xe3, 0x09, 0xa2, 0x75, 0x71, 0xe9, 0x0c, 0x74, 0x8c,
  0x81, 0x0b, 0xfc, 0x0c, 0x87, 0xb2, 0x59, 0xc2, 0x7a, 0x6d, 0xdc, 0x98,
  0x52, 0x4f, 0xba, 0x07, 0x28, 0x73, 0xda, 0x20, 0x41, 0x52, 0x40, 0xb8,
  0xa7, 0x6e, 0x50, 0xbb, 0xfb, 0xbe, 0x26, 0xd4, 0x1e, 0x35, 0xf4, 0x94,
  0x83, 0x70, 0x8c, 0xe6, 0x12, 0x1f, 0xf2, 0x37, 0x72, 0x32, 0xb5, 0xd9,
  0xa7, 0x1c, 0x0f, 0x9d, 0xbd, 0x78, 0x0d, 0x27, 0xac, 0x28, 0x28, 0xbf,
  0x4d, 0xf5, 0xf1, 0x40, 0x8e, 0x9b, 0xd7, 0x77, 0x54, 0x08, 0x41, 0x0a,
  0xa9, 0xbf, 0x91, 0x3d, 0x3f, 0x86, 0x79, 0xc2, 0xd3, 0xf3, 0x51, 0x1c,

  0x3d, 0x50, 0x8a, 0x6d, 0xee, 0x46, 0xe8, 0x2b, 0x56, 0xc1, 0x6f, 0x8e,
  0x68, 0x5a, 0xce, 0x3a, 0x26, 0x3b, 0x6d, 0x82, 0x27, 0xf0, 0xc0, 0xfd,
  0x38, 0x54, 0x09, 0x8e, 0x17, 0xf7, 0x64, 0x13, 0xa5, 0xb2, 0x7b, 0xfd,
  0x67, 0xf1, 0xc0, 0x98, 0x47, 0x0d, 0x2c, 0xf0, 0x17, 0x71, 0xc0, 0x7b,
  0x7c, 0x4e, 0x2f, 0x03, 0x89, 0x5d, 0x5b, 0x65, 0xc8, 0xe9, 0x6a, 0x94,
  0x25, 0x9e, 0x60, 0xe3, 0x42, 0x8b, 0x86, 0xf2, 0x05, 0x91, 0x0e, 0x40,
  0xc9, 0x5e, 0x9d, 0xbb, 0xc9, 0x8e, 0x1d, 0x73, 0x5d, 0xb6, 0x4e, 0x38,

  0x48, 0x99, 0x9c, 0xbd, 0xfe, 0x41, 0xb9, 0x65, 0xcc, 0x80, 0x87, 0x23,
  0xea, 0x8f, 0x36, 0x2d, 0xcc, 0x58, 0x14, 0x94, 0xa2, 0x96, 0x4b, 0xba,
  0x27, 0xbb, 0x89, 0x10, 0x0e, 0xdf, 0x76, 0x59, 0x8c, 0xb4, 0xd5, 0x1b,
  0x2f, 0xf0, 0xbb, 0x6e, 0xac, 0xa9, 0x64, 0x4b, 0xe6, 0x4f, 0x3f, 0xf2,
  0xaf, 0x99, 0xc7, 0x9a, 0x7f, 0x35, 0x57, 0xab, 0xc5, 0xc4, 0x9c, 0x67,
  0xd1, 0xfc, 0x69, 0x23, 0xe1, 0x60, 0xeb, 0x85, 0xec, 0xe7, 0x1a, 0xb3,
  0x33, 0xd7, 0x42, 0x1d, 0xf5, 0x2d, 0xb6, 0x76, 0x8d, 0x67, 0xa7, 0x45,
  0x03, 0x2e, 0x31, 0xcf, 0x1c, 0x1e, 0xfb, 0xb2, 0x03, 0x55, 0xef, 0xbd,
  0x21, 0xcf, 0x1f, 0xdf, 0xfc, 0xf9, 0xc7, 0xe7, 0x8f, 0x1e, 0xa7, 0xcf,
  0xd2, 0xe9, 0xd3, 0x8b, 0xcf, 0xd3, 0x27, 0xb3, 0x27, 0xcf, 0x9e, 0xef,
  0x7f, 0xfe, 0x24, 0x7d, 0xf6, 0xf8, 0x22, 0x7d, 0xba, 0x97, 0xed, 0x3d,
  0xbf, 0xd8, 0x7f, 0x34, 0x9b, 0x5d, 0x64, 0x9f, 0xcf, 0x9e, 0xa5, 0x1b,
  0x23, 0x98, 0x5f, 0x3a, 0xf5, 0x90, 0xd5, 0x6a, 0xe0, 0x2d, 0x4d, 0xc6,
  0xdf, 0x1c, 0x0e, 0xf7, 0x92, 0xab, 0xec, 0x56, 0x2f, 0x18, 0x7b, 0x34,
  0x6d, 0xba, 0x5d, 0x26, 0x09, 0xd5, 0xfd, 0x8b, 0xd5, 0x0a, 0x41, 0x4a,
  0x97, 0x26, 0x5f, 0x09, 0x34, 0x60, 0xde, 0x45, 0xdd, 0x56, 0x4e, 0xa8,
  0xb3, 0xfe, 0xc3, 0x03, 0xf5, 0xd9, 0xd3, 0xba, 0xba, 0x97, 0xff, 0xc4,
  0xbc, 0x33, 0x7f, 0x93, 0x4e, 0x8d, 0x92, 0x64, 0xf6, 0x44, 0x1e, 0x1c,
  0x1b, 0xd3, 0xd6, 0xb0, 0xe9, 0x41, 0x22, 0x7f, 0x21, 0x2f, 0xb1, 0x37,
  0xc6, 0xd7, 0x55, 0xb9, 0x5a, 0x9e, 0x95, 0xf3, 0x7c, 0x7a, 0xb7, 0x6e,
  0x38, 0xff, 0xb1, 0xd6, 0x2f, 0x8e, 0x98, 0x85, 0xe7, 0x75, 0xf6, 0x1b,
  0x9a, 0x56, 0x1e, 0x3b, 0x7e, 0x80, 0x6d, 0x35, 0x9c, 0xe6, 0xcb, 0x2b,
  0x8a, 0xf3, 0xbe, 0x40, 0x7a, 0x1f, 0x85, 0x66, 0xf8, 0x07, 0x71, 0x9b,
  0x6a, 0x2c, 0x37, 0xb2, 0x96, 0xf3, 0xd4, 0xb7, 0x45, 0xe3, 0xca, 0xb5,
  0xf6, 0x4d, 0xdd, 0x54, 0x92, 0x52, 0x9a, 0x07, 0x7e, 0x3c, 0xf7, 0x21,
  0xbe, 0xed, 0xaa, 0x6d, 0xb3, 0xf3, 0x42, 0x7e, 0x35, 0x4a, 0xde, 0x21,
  0x4e, 0xbe, 0x5a, 0xb2, 0x79, 0x01, 0x7f, 0x3e, 0xff, 0xae, 0x7b, 0xd1,

  0x68, 0xf2, 0x42, 0x31, 0x5c, 0x81, 0x67, 0x76, 0xf4, 0xfd, 0xbb, 0x93,
  0x83, 0xee, 0x3e, 0xa1, 0xca, 0xa8, 0x3e, 0xd8, 0xd9, 0x41, 0xc8, 0xe7,
  0x2a, 0xbd, 0xbd, 0x1d, 0xd5, 0xd9, 0xce, 0xac, 0x9c, 0xd6, 0x3b, 0x75,
  0x3d, 0xd7, 0xdd, 0x68, 0x17, 0xfd, 0x7d, 0x02, 0x6f, 0x6e, 0xb9, 0x00,
  0xdb, 0xca, 0x66, 0xc3, 0xba, 0x0e, 0x72, 0x83, 0xc6, 0x2f, 0x35, 0xf3,
  0xe0, 0x48, 0xf2, 0xd1, 0x20, 0xe7, 0x86, 0x66, 0x77, 0xc7, 0xe3, 0x6f,
  0x12, 0x7d, 0x19, 0xdb, 0x6b, 0x43, 0xe2, 0x36, 0x2f, 0x67, 0x10, 0x51,
  0xc3, 0x52, 0x61, 0xd8, 0x7f, 0xf4, 0x1d, 0x3a, 0xa4, 0x4e, 0x97, 0xfc,
  0x87, 0x14, 0xad, 0xe4, 0xcd, 0xda, 0x0c, 0xbe, 0xa7, 0x1d, 0x07, 0x88,
  0x5d, 0x44, 0x3c, 0xfe, 0xaf, 0x4e, 0xb0, 0x34, 0x71, 0x4f, 0x3a, 0x8f,
  0x50, 0xb7, 0x2a, 0xdd, 0x50, 0xef, 0x65, 0x59, 0x19, 0xe1, 0xb1, 0xa8,
  0x63, 0x5e, 0x50, 0xbd, 0xe5, 0x35, 0xab, 0x7d, 0x35, 0x27, 0x21, 0x9a,
  0x61, 0x0a, 0x6f, 0x70, 0x73, 0x8c, 0x48, 0x5e, 0x1c, 0xf9, 0x87, 0x15,
  0x8d, 0x6f, 0xe9, 0xe1, 0xf5, 0x79, 0xd1, 0x56, 0x85, 0x0b, 0x7e, 0x40,
  0x1c, 0x9b, 0xc9, 0x4a, 0x45, 0x59, 0x60, 0x21, 0x20, 0xe9, 0x1f, 0x62,
  0x82, 0x74, 0x88, 0xaa, 0x2a, 0x3d, 0xa5, 0x76, 0xf8, 0x2d, 0x8c, 0x4b,
  0x23, 0x1d, 0xf3, 0x4b, 0x0d, 0xaf, 0xf7, 0xe4, 0xd7, 0x91, 0xe8, 0x6a,
  0x90, 0xb4, 0x2c, 0x75, 0xe0, 0x24, 0x14, 0x28, 0x7d, 0x0d, 0xa9, 0x25,
  0x92, 0x96, 0xc9, 0xe9, 0x40, 0xad, 0xf2, 0xf7, 0xe0, 0x26, 0x50, 0xb1,
  0x8f, 0x7b, 0x9c, 0xd2, 0xa8, 0xf4, 0x5e, 0x62, 0x78, 0x71, 0x5f, 0x78,
  0x89, 0x6d, 0xa4, 0x95, 0xc1, 0xcd, 0x60, 0x9e, 0xe9, 0x5a, 0x7b, 0x48,
  0xb6, 0xb5, 0x3a, 0x5f, 0xac, 0xb6, 0xb5, 0xbb, 0x1e, 0xcd, 0xb9, 0xd7,
  0xbd, 0xcd, 0x51, 0x4d, 0x9d, 0x22, 0xa1, 0x3f, 0x26, 0xda, 0x4b, 0x2f,
  0x48, 0x4b, 0x03, 0x86, 0x32, 0xaf, 0xb1, 0x29, 0x93, 0x5a, 0xa2, 0x04,
  0x85, 0xc0, 0x70, 0x20, 0x23, 0xf6, 0x28, 0xd5, 0x9c, 0x6a, 0xe8, 0xe7,
  0xa5, 0x53, 0xb0, 0x0c, 0xe1, 0x19, 0x5e, 0x88, 0x32, 0xc4, 0x51, 0xc0,
  0xb7, 0xb9, 0x18, 0x89, 0x13, 0x08, 0xb9, 0xa8, 0x8e, 0xb3, 0xbd, 0xf8,
  0x67, 0x10, 0x5f, 0x13, 0x8d, 0x91, 0x3b, 0x7e, 0x46, 0xe7, 0x17, 0x73,
  0x0d, 0x49, 0x3a, 0x3e, 0x57, 0x38, 0xe6, 0xa8, 0xdd, 0x95, 0x6a, 0x4f,
  0xae, 0x2e, 0x50, 0xcf, 0x76, 0x5d, 0x4a, 0xba, 0x26, 0x4d, 0x94, 0xe6,
  0xc9, 0x73, 0xec, 0x92, 0xba, 0xad, 0xe4, 0x6c, 0x19, 0x23, 0x69, 0xed,
  0x92, 0xf4, 0xeb, 0x30, 0x5a, 0xe9, 0x36, 0x33, 0x66, 0xbd, 0x06, 0x05,
  0x0f, 0x98, 0x48, 0x95, 0xe9, 0x17, 0x8a, 0xb2, 0x3b, 0x29, 0x9d, 0x47,
  0x2c, 0x17, 0x55, 0x93, 0xfa, 0xbd, 0x09, 0x68, 0x72, 0xbf, 0x3d, 0xe5,

  0x9e, 0xcc, 0xcd, 0x2c, 0x71, 0x8f, 0x24, 0xce, 0xce, 0x74, 0xc7, 0x08,
  0x7f, 0x03, 0x4a, 0x35, 0x6a, 0x9e, 0xfa, 0x01, 0xcd, 0xe9, 0x8b, 0xed,

  0x98, 0x9f, 0xd8, 0x8d, 0xa4, 0x14, 0x45, 0xf7, 0x74, 0x5e, 0xd6, 0x1a,
  0x7f, 0x21, 0xe5, 0x82, 0x0b, 0x6e, 0x0d, 0x37, 0xf8, 0x5e, 0x7e, 0xc0,
  0x47, 0xd3, 0x19, 0x8e, 0x9f, 0x1a, 0xc8, 0x14, 0x2f, 0x9c, 0xb2, 0x21,
  0xb6, 0xaa, 0xab, 0x12, 0x26, 0x6d, 0xc3, 0x5a, 0x93, 0x07, 0xc9, 0x8f,
  0x3f, 0x0e, 0x12, 0x63, 0x24, 0x77, 0x86, 0xfb, 0xb1, 0x31, 0x3f, 0x35,

  0xb4, 0xf8, 0x23, 0x57, 0x2a, 0xfd, 0x78, 0x4d, 0x46, 0x20, 0x39, 0x98,
  0xeb, 0x39, 0x45, 0x8f, 0x58, 0xcd, 0x6e, 0x7b, 0xe5, 0xb8, 0x10, 0x7a,
  0x4d, 0x6a, 0x96, 0xb3, 0xdb, 0x39, 0x15, 0xd3, 0x1c, 0xd8, 0x6a, 0x51,
  0x88, 0x75, 0xc2, 0xc4, 0x89, 0x7b, 0x0f, 0x39, 0xb0, 0xf9, 0xbb, 0x4d,
  0x47, 0x48, 0xb1, 0xbd, 0xab, 0x32, 0x96, 0xf4, 0x10, 0x55, 0xb9, 0x27,
  0xa6, 0xb4, 0x6c, 0x18, 0xe6, 0x66, 0xc2, 0xe1, 0x52, 0x62, 0xa6, 0xa7,
  0xe4, 0x5c, 0xe7, 0xfa, 0xaf, 0xae, 0x18, 0x77, 0xa6, 0x24, 0x15, 0xc5,
  0x2d, 0xaf, 0xee, 0x6a, 0xca, 0xe4, 0x90, 0xd9, 0x04, 0xb7, 0xa7, 0x37,
  0xb9, 0x58, 0xf6, 0x9e, 0xaa, 0x79, 0x88, 0x0f, 0x10, 0xf3, 0x6b, 0xb1,
  0x4e, 0x33, 0xa3, 0xcd, 0xe1, 0xa6, 0x8d, 0x85, 0x49, 0xbe, 0x4c, 0x90,
  0x44, 0x6f, 0x13, 0xb3, 0x5d, 0xf2, 0x61, 0xf0, 0x49, 0x2f, 0x29, 0xae,
  0xf4, 0xd3, 0x1d, 0x5d, 0x55, 0x3b, 0x95, 0xa5, 0x6a, 0x14, 0x5f, 0xbe,
  0x2f, 0xfc, 0x27, 0xe2, 0x70, 0x42, 0x5a, 0x24, 0x4c, 0x0f, 0x1d, 0x00,
  0xde, 0x10, 0x17, 0x1e, 0x1a, 0x0e, 0x01, 0x30, 0xb2, 0x64, 0x50, 0x10,
  0x22, 0x09, 0x64, 0x1e, 0xdc, 0x51, 0x09, 0xd8, 0x72, 0x1e, 0xf0, 0x5b,
  0x49, 0x05, 0xd4, 0x2a, 0x6b, 0xba, 0xe0, 0x84, 0x44, 0x71, 0x53, 0x08,
  0x92, 0xc0, 0xb8, 0x84, 0x57, 0x66, 0x8a, 0x1c, 0x06, 0x49, 0x97, 0x91,
  0x62, 0xb2, 0x88, 0x15, 0x48, 0x32, 0x30, 0xd0, 0x81, 0x68, 0x3e, 0x5f,
  0x24, 0x1b, 0xfd, 0x9a, 0xd0, 0x46, 0xf7, 0x0d, 0x64, 0x40, 0x3a, 0x17,
  0xa7, 0x14, 0xca, 0x63, 0x22, 0x5b, 0x92, 0x49, 0x37, 0xfc, 0x1b, 0x27,
  0xb4, 0x71, 0x2d, 0x97, 0xc8, 0xd7, 0x6d, 0x4e, 0x10, 0xae, 0x23, 0x91,
  0x7d, 0x97, 0x65, 0xe5, 0xd1, 0x87, 0xcb, 0x53, 0xca, 0xe1, 0xbe, 0x86,
  0xf4, 0x62, 0x69, 0xe7, 0x3d, 0x1d, 0x84, 0xe2, 0xf5, 0x6d, 0x2a, 0x35,
  0xa1, 0xef, 0x89, 0x4b, 0x5a, 0x45, 0x87, 0xbd, 0xd1, 0xcb, 0x39, 0x00,
  0x3a, 0xb4, 0xc8, 0x05, 0x2a, 0x51, 0xb0, 0x3b, 0x7b, 0xdb, 0xb6, 0x2c,
  0x12, 0x28, 0x1b, 0x9c, 0x99, 0x2d, 0x7a, 0xc2, 0xc6, 0x55, 0xc9, 0xb9,
  0x44, 0x1b, 0x07, 0x54, 0xb1, 0x27, 0xb7, 0x11, 0x6b, 0x54, 0xfc, 0x83,

  0xce, 0x70, 0xc8, 0xd4, 0xfa, 0xe6, 0xf4, 0xcd, 0x51, 0x3b, 0x03, 0x17,

  0x3f, 0x89, 0x39, 0x5f, 0x0d, 0xbb, 0x7a, 0x6d, 0x38, 0x0c, 0xd3, 0x40,
  0x1a, 0x68, 0x73, 0x4c, 0x5b, 0x66, 0x5a, 0x97, 0x59, 0xb3, 0xbc, 0x59,
  0xe5, 0xb3, 0xad, 0x6d, 0xa2, 0x11, 0xaa, 0x33, 0x19, 0xa2, 0xb8, 0x89,
  0x4d, 0xc3, 0x3a, 0xd9, 0x62, 0x05, 0xbd, 0xca, 0x9a, 0x55, 0x55, 0xb0,
  0xc3, 0x9c, 0xe6, 0xde, 0x35, 0xb2, 0x8c, 0x74, 0x66, 0x51, 0xe7, 0x3b,
  0x07, 0x04, 0x2c, 0x87, 0x53, 0x98, 0x78, 0x40, 0x63, 0xee, 0x9e, 0xda,
  0xbc, 0x0f, 0x1c, 0x3c, 0xd6, 0x12, 0xc8, 0x2f, 0x7f, 0x27, 0x92, 0xc3,
  0xb3, 0xb3, 0x57, 0x87, 0xe7, 0x87, 0x76, 0x6d, 0x10, 0xd0, 0x60, 0x2e,
  0xd0, 0x90, 0x0d, 0x1f, 0x22, 0xad, 0x89, 0x9e, 0xdc, 0xfc, 0xfd, 0xfb,
  0xf1, 0xd1, 0xbb, 0xee, 0xc1, 0x9e, 0xbd, 0x3b, 0x25, 0x24, 0xa2, 0xdf,
  0xff, 0x78, 0xb8, 0x5c, 0xce, 0x35, 0x28, 0xf8, 0x2a, 0x6d, 0xd2, 0xcd,
  0xe0, 0x56, 0xef, 0x6f, 0xd3, 0xfc, 0x6e, 0xec, 0xfc, 0x2e, 0x44, 0xc8,
  0xc1, 0xd4, 0x4f, 0x46, 0x74, 0xa0, 0xd5, 0x54, 0xd3, 0x6f, 0xed, 0x6e,
  0x60, 0x03, 0x90, 0x3d, 0xdb, 0xbf, 0x90, 0xd2, 0x71, 0x32, 0x4d, 0x24,
  0xd3, 0xcd, 0x9a, 0x1b, 0x23, 0x3b, 0x9b, 0xae, 0x1a, 0x25, 0x79, 0xd0,
  0x17, 0x95, 0x6f, 0x77, 0xf7, 0x25, 0x38, 0x1e, 0x17, 0x46, 0x61, 0x2e,
  0x00, 0xf4, 0x00, 0x43, 0x68, 0x48, 0x91, 0xd6, 0xd9, 0x32, 0x17, 0x8b,
  0xd0, 0xd4, 0x2c, 0xe3, 0xb0, 0x0a, 0xd0, 0x04, 0x78, 0x4a, 0xc1, 0x86,
  0xfc, 0xce, 0xdc, 0xc6, 0x61, 0x72, 0x24, 0x65, 0x6e, 0x58, 0xb8, 0xf9,
  0x41, 0xf0, 0x50, 0x63, 0xcd, 0x07, 0x61, 0xf7, 0x71, 0x5e, 0xe1, 0x21,
  0x6c, 0x6c, 0x74, 0x45, 0x00, 0xd7, 0xb4, 0x9a, 0x87, 0x68, 0xda, 0xb4,
  0xe9, 0xb0, 0x9e, 0x36, 0x22, 0x49, 0x4f, 0xc3, 0xf4, 0x92, 0xc8, 0xcb,
  0x3c, 0x6a, 0xb4, 0x6b, 0x63, 0x34, 0xd1, 0xbf, 0x76, 0xf6, 0x46, 0xbb,
  0x1b, 0xe1, 0xe4, 0xe9, 0xb2, 0x00, 0x1d, 0xc5, 0x46, 0xd5, 0x88, 0x1b,
  0x36, 0x65, 0x79, 0xef, 0xfc, 0x98, 0x85, 0x19, 0xfd, 0x74, 0x69, 0xc6,
  0x8f, 0x4e, 0x65, 0x78, 0x1a, 0x64, 0x81, 0x50, 0xe6, 0x6e, 0xa5, 0x4c,
  0xd1, 0xf0, 0xc4, 0xa2, 0xbc, 0xa1, 0x95, 0x18, 0x52, 0x9b, 0xcf, 0x5b,
  0x30, 0x36, 0x1b, 0xf1, 0x6d, 0x2e, 0x80, 0x18, 0x95, 0x75, 0x77, 0x3b,
  0x1a, 0xb9, 0x56, 0xe5, 0xd3, 0xd7, 0xf0, 0x6c, 0xca, 0x2b, 0xac, 0x48,
  0x4b, 0x09, 0x3e, 0x8a, 0x80, 0xe1, 0x72, 0x01, 0xdf, 0x9b, 0xfb, 0x99,


  0x19, 0x43, 0x4d, 0x0f, 0x19, 0xd2, 0x20, 0xa4, 0x95, 0xbe, 0xe0, 0x22,
  0xf5, 0xc0, 0x96, 0x7f, 0x93, 0xde, 0xe6, 0x8b, 0xd5, 0x02, 0x1f, 0x23,
  0xda, 0x96, 0xc7, 0x24, 0x9e, 0x00, 0xaf, 0x22, 0xa7, 0xa7, 0x80, 0xc8,
  0x37, 0xeb, 0xc4, 0xb3, 0xe8, 0x63, 0x42, 0xc6, 0x88, 0xe4, 0x91, 0x5b,
  0x1e, 0x94, 0x05, 0x04, 0x1c, 0xea, 0x8e, 0x37, 0xc0, 0xe8, 0x07, 0x29,
  0xe5, 0x1c, 0xd4, 0xa5, 0x4d, 0xd8, 0x89, 0xb0, 0x73, 0x46, 0x49, 0x10,
  0x1d, 0xce, 0xcb, 0x57, 0xcd, 0xaa, 0xbc, 0x9c, 0xd9, 0x7b, 0x43, 0xfa,
  0x63, 0x5e, 0xac, 0xcc, 0x3e, 0xb3, 0x2f, 0x99, 0x83, 0x10, 0xf4, 0xab,
  0xc0, 0x43, 0x88, 0xac, 0xfa, 0x31, 0x8a, 0x25, 0x34, 0x05, 0xf5, 0xd9,
  0xe8, 0xd1, 0xfe, 0x68, 0x77, 0xd0, 0x32, 0xe8, 0x05, 0x4c, 0xc2, 0xdc,
  0xae, 0x69, 0xbe, 0xb0, 0x85, 0xa6, 0xa3, 0xdf, 0xcc, 0x71, 0x83, 0x8c,
  0xf0, 0x45, 0x7a, 0x8b, 0xe3, 0x8b, 0x1e, 0x6b, 0x99, 0xbc, 0xf8, 0xe6,

  0x74, 0x7c, 0xbe, 0x77, 0x70, 0x76, 0xfa, 0xce, 0xfc, 0x97, 0xfe, 0xbe,
  0x8f, 0xbf, 0xef, 0x07, 0x56, 0xe5, 0x6b, 0xc9, 0xa0, 0xd5, 0x62, 0x1d,
  0x68, 0x28, 0xd0, 0x68, 0x78, 0x37, 0x13, 0x6f, 0x20, 0xd2, 0xcb, 0xc1,
  0x06, 0xa7, 0xb6, 0x94, 0xb1, 0x7b, 0xc4, 0xde, 0xa7, 0x34, 0xc9, 0x6e,
  0x94, 0x84, 0x89, 0x7c, 0x79, 0xa3, 0xda, 0x94, 0x14, 0xc1, 0x6b, 0x79,
  0x7d, 0xd7, 0xd7, 0xcd, 0x05, 0xcc, 0x52, 0x9f, 0xa3, 0x40, 0x75, 0xc8,
  0x0d, 0x6b, 0xff, 0x6a, 0x3a, 0x37, 0xda, 0x7d, 0x46, 0xb9, 0x24, 0xb3,
  0x8c, 0x03, 0x2c, 0xf4, 0x93, 0x98, 0x61, 0x62, 0xae, 0x9f, 0x94, 0x2c,
  0x04, 0x09, 0x86, 0xa0, 0x48, 0x8d, 0xea, 0x98, 0xd9, 0x98, 0x39, 0xe6,
  0x46, 0x13, 0xe7, 0xed, 0x28, 0xb2, 0xa0, 0x42, 0x80, 0x01, 0xe4, 0x7c,
  0x27, 0x16, 0xaa, 0xf3, 0x51, 0x67, 0xff, 0xf6, 0xf4, 0x3c, 0x49, 0x2f,
  0x2e, 0x14, 0x14, 0x80, 0xca, 0x12, 0x48, 0x63, 0xdd, 0x59, 0xb2, 0x24,
  0x4b, 0x9b, 0x58, 0xea, 0x86, 0xe8, 0x23, 0xe7, 0x27, 0xe3, 0x1d, 0x72,
  0x61, 0x71, 0x12, 0xdc, 0xf8, 0xed, 0xf1, 0xa0, 0xe5, 0xab, 0xf6, 0x53,
  0x5f, 0xb6, 0x49, 0x52, 0xc6, 0x15, 0x8a, 0xd4, 0x93, 0x85, 0x0e, 0x6a,
  0x86, 0x92, 0xea, 0x70, 0xa4, 0x1b, 0x52, 0x0d, 0xb6, 0x81, 0xa3, 0xdd,
  0x48, 0x34, 0x6a, 0x0a, 0xbb, 0x78, 0xb1, 0x6c, 0xee, 0xc2, 0x42, 0x51,
  0xf8, 0x36, 0x08, 0x80, 0x85, 0x94, 0x8e, 0x0d, 0x32, 0x4b, 0x68, 0x59,
  0x58, 0xd2, 0xc6, 0x88, 0x87, 0xdd, 0xdf, 0xc0, 0xa8, 0x18, 0xd4, 0xfc,


  0x9d, 0xc6, 0x04, 0xd1, 0x4e, 0xb2, 0x58, 0x7a, 0x3f, 0x7f, 0xc8, 0x1b,
  0x3c, 0xb1, 0xc3, 0x9b, 0x89, 0xd9, 0x3a, 0x35, 0xa5, 0x0e, 0x62, 0x30,
  0x65, 0x95, 0x5f, 0x52, 0x9e, 0x40, 0xb7, 0x74, 0xcc, 0x4d, 0x24, 0xf0,
  0x4c, 0x91, 0x32, 0x56, 0x37, 0x1b, 0x9e, 0x2b, 0xa1, 0x09, 0x12, 0xf4,
  0x91, 0x36, 0x5a, 0xa9, 0x49, 0xa3, 0xd3, 0x21, 0xfe, 0xd3, 0x44, 0xf4,
  0x78, 0x56, 0xf6, 0xcc, 0xea, 0x48, 0xee, 0xb8, 0x20, 0x90, 0x96, 0xfe,
  0xe8, 0x5d, 0x02, 0x04, 0xce, 0x71, 0xa3, 0x0c, 0x9c, 0xc3, 0x46, 0xdd,
  0xe1, 0x18, 0xaa, 0xcd, 0x70, 0x04, 0xad, 0xfa, 0xd8, 0xd8, 0xdb, 0x7f,
  0x36, 0xda, 0x35, 0xff, 0x67, 0x0e, 0x45, 0xf4, 0x23, 0xe0, 0x44, 0x39,
  0x3c, 0x20, 0xfb, 0x64, 0x76, 0xdb, 0x25, 0x49, 0x16, 0x40, 0x65, 0x75,
  0xb9, 0xb1, 0xb6, 0x7e, 0xb5, 0x25, 0x52, 0xe8, 0x20, 0xad, 0x38, 0x49,
  0x67, 0xf2, 0x13, 0xbd, 0xe3, 0xd5, 0x6a, 0x1e, 0x49, 0xeb, 0xf3, 0xdc,
  0xc8, 0xa4, 0x9d, 0xcd, 0xaf, 0xc5, 0x89, 0xfc, 0x0d, 0xf1, 0x26, 0xae,
  0xe3, 0x1b, 0xb5, 0x92, 0xa2, 0x9e, 0xb7, 0x7c, 0x82, 0x2f, 0xc5, 0x64,
  0x03, 0x67, 0x1e, 0x9a, 0xcb, 0xf0, 0xa2, 0xbc, 0xb8, 0xa8, 0xb3, 0xa6,

  0x2b, 0x80, 0x5e, 0xca, 0x23, 0x3b, 0xef, 0x80, 0x6c, 0x08, 0x4e, 0xa5,

  0x15, 0x37, 0x49, 0x1b, 0x8f, 0x27, 0x91, 0x2c, 0x34, 0x66, 0x5b, 0x3c,
  0xdc, 0x28, 0x52, 0x64, 0xe0, 0xff, 0x5e, 0x33, 0x44, 0xb8, 0x1c, 0x5e,
  0x51, 0x5e, 0x50, 0x6e, 0xc5, 0x00, 0x2e, 0x22, 0xe9, 0xba, 0x70, 0x6c,
  0x7a, 0x25, 0x3e, 0xe6, 0xcb, 0x25, 0x99, 0x37, 0x0c, 0x6d, 0x06, 0xb2,
  0xb5, 0x01, 0x34, 0xc4, 0x71, 0x41, 0xca, 0x9a, 0x2d, 0x68, 0x94, 0xe4,
  0xa9, 0xc8, 0xfc, 0x49, 0x76, 0x11, 0x06, 0x81, 0x38, 0xa9, 0xd1, 0xc7,
  0xb3, 0x91, 0xfa, 0xdc, 0x19, 0x61, 0xd7, 0x14, 0xa9, 0xb2, 0x98, 0x0b,

  0x0f, 0xe9, 0x41, 0x8a, 0xff, 0x06, 0x91, 0xfb, 0xef, 0x8a, 0xb3, 0xac,
  0x1f, 0x6e, 0x7c, 0xfc, 0x3f, 0x8e, 0x1c, 0xfa, 0x90, 0x85, 0xf7, 0xe1,
  0x72, 0x97, 0x58, 0xf1, 0x90, 0xb9, 0x85, 0xc3, 0x97, 0xe6, 0xbc, 0x36,


  0x30, 0x15, 0x97, 0x6a, 0x52, 0x76, 0xca, 0x31, 0x60, 0xf7, 0x90, 0x26,
  0x01, 0x6d, 0x68, 0x87, 0x0a, 0xfe, 0x03, 0xd1, 0xc0, 0xe0, 0x94, 0xec,
  0x5f, 0x94, 0x35, 0xe2, 0x76, 0x34, 0x52, 0x35, 0xe7, 0xd7, 0x9c, 0x88,
  0xb2, 0xb8, 0x93, 0x17, 0xa4, 0x32, 0xb2, 0x02, 0x13, 0x94, 0x64, 0x68,
  0x1d, 0x2c, 0xc3, 0x9c, 0xac, 0x9a, 0xdf, 0x30, 0x76, 0x52, 0x11, 0xfd,
  0x02, 0xbf, 0xce, 0x23, 0xea, 0x29, 0x13, 0x35, 0x81, 0x74, 0x0e, 0xff,

  0x6a, 0xac, 0xec, 0x17, 0xea, 0xa6, 0xe8, 0x43, 0x04, 0x50, 0xa7, 0x06,
  0x15, 0x51, 0xc0, 0x08, 0x03, 0x6d, 0x58, 0x60, 0x1a, 0xdd, 0x6a, 0xc6,
  0xd3, 0x49, 0xa1, 0xcb, 0x00, 0x01, 0xb4, 0x7b, 0xe7, 0x2f, 0x80, 0x76,
  0xe3, 0x95, 0x7e, 0xdb, 0xda, 0xc9, 0x11, 0x45, 0xa9, 0xe6, 0x3c, 0x42,
  0xcd, 0x89, 0x95, 0x32, 0x86, 0x1a, 0x0d, 0x79, 0x20, 0x73, 0xf3, 0x62,
  0xc8, 0x85, 0xd5, 0xfa, 0x2c, 0x82, 0x69, 0x04, 0xd7, 0x26, 0xe4, 0xc8,

  0x47, 0xc4, 0x66, 0x78, 0x23, 0x89, 0x15, 0x50, 0x6b, 0xf1, 0xd9, 0x98,
  0x1b, 0x9d, 0x7d, 0x91, 0x70, 0x20, 0xf2, 0xc7, 0xc9, 0x41, 0xf6, 0xd1,
  0xe8, 0xce, 0xc5, 0x80, 0x7e, 0x8a, 0x42, 0x54, 0x7b, 0xc9, 0xd8, 0xb7,
  0xd1, 0x64, 0x1c, 0xb4, 0xc8, 0x22, 0xba, 0xac, 0xf7, 0xac, 0x3c, 0xea,
  0xb9, 0x51, 0xde, 0x66, 0x8d, 0xa4, 0x8e, 0xf0, 0xe4, 0xb5, 0x36, 0x0b,
  0xf5, 0x5d, 0xc7, 0x17, 0x9d, 0xe1, 0x80, 0x13, 0x97, 0x35, 0xed, 0x4a,
  0x7d, 0x89, 0xe1, 0x32, 0x38, 0x16, 0xf9, 0x42, 0x07, 0xe6, 0x1a, 0x6c,
  0xa8, 0x5f, 0x96, 0x57, 0x10, 0x4f, 0x5d, 0xd0, 0xe9, 0x90, 0x9b, 0xa8,
  0x99, 0xc5, 0x68, 0x92, 0x75, 0x5f, 0xbd, 0x90, 0x82, 0x19, 0xe8, 0xa7,
  0x43, 0x10, 0xfa, 0x19, 0xa2, 0xf7, 0xee, 0x6b, 0x9a, 0xb8, 0x12, 0xa9,
  0x2a, 0xf4, 0xaa, 0x4a, 0x29, 0x85, 0xa6, 0x9a, 0xa9, 0x67, 0x44, 0x27,
  0x6a, 0xb8, 0xb0, 0xd8, 0x45, 0x37, 0x29, 0x28, 0xcd, 0x8e, 0x1f, 0xab,

  0x7d, 0xf0, 0xf2, 0x1f, 0x87, 0x13, 0x47, 0xce, 0x0e, 0x37, 0x27, 0x9a,
  0xa6, 0x24, 0x0f, 0x11, 0xcd, 0x1b, 0xc1, 0xb2, 0xd9, 0x78, 0xc5, 0xa5,
  0x80, 0xa2, 0xb1, 0x9b, 0xc2, 0x5b, 0x78, 0x73, 0x55, 0xce, 0xb3, 0x58,
  0x88, 0xc4, 0x2b, 0xf9, 0x05, 0xaa, 0x0b, 0xa5, 0xf5, 0xc2, 0xdb, 0x7c,

  0x8d, 0x8c, 0xe1, 0x56, 0xe8, 0xc4, 0xe8, 0x77, 0x59, 0x4a, 0x05, 0x47,
  0x36, 0x69, 0xfe, 0x7a, 0x10, 0xa4, 0xb1, 0x9b, 0x7b, 0x3e, 0x29, 0x6b,
  0x4b, 0x2f, 0x54, 0x58, 0x4b, 0x12, 0xe4, 0x26, 0xad, 0xc0, 0x98, 0x05,
  0x1e, 0x4b, 0x91, 0x43, 0xfd, 0x9c, 0x41, 0x52, 0x05, 0xbb, 0xf5, 0x0e,
  0x39, 0x15, 0xa3, 0x1b, 0x32, 0x31, 0x0a, 0x00, 0xb9, 0x69, 0x41, 0x3b,
  0x34, 0xa4, 0x00, 0x5f, 0x5d, 0x01, 0x03, 0x57, 0x2a, 0xd6, 0xcd, 0x3d,
  0xbc, 0x22, 0x99, 0x9e, 0x37, 0xab, 0xb4, 0x79, 0x58, 0xc2, 0x76, 0x1f,
  0x6f, 0x62, 0xe6, 0xe4, 0xe7, 0xa3, 0xf6, 0xe1, 0x35, 0xf4, 0x44, 0x11,
  0xfd, 0x83, 0x7c, 0x41, 0x77, 0xed, 0xbf, 0xee, 0x61, 0x4c, 0x67, 0x80,
  0xf2, 0xbb, 0x6a, 0x63, 0x41, 0xa1, 0x26, 0x57, 0xe4, 0x89, 0x56, 0xbe,
  0xf1, 0x98, 0x2a, 0xee, 0x8f, 0x23, 0x81, 0x7e, 0x44, 0xc7, 0xcc, 0x74,
  0xe6, 0x77, 0x6e, 0x40, 0xaf, 0x64, 0x56, 0x33, 0xbc, 0x3d, 0x9c, 0x3c,
  0xfb, 0x85, 0x20, 0x6b, 0x69, 0x63, 0x6c, 0x54, 0x70, 0xfe, 0xe6, 0xc1,
  0x86, 0xc2, 0x8e, 0x5a, 0x1c, 0x25, 0xe1, 0x22, 0x52, 0xb4, 0xa5, 0xf5,
  0x1f, 0xea, 0xab, 0xa7, 0xeb, 0xdf, 0x1d, 0x8e, 0x30, 0xb8, 0xf7, 0xbe,
  0xf8, 0xee, 0xf0, 0xe4, 0xfd, 0xd1, 0xde, 0x1f, 0x13, 0xfa, 0xd7, 0x3e,
  0xff, 0x6b, 0x7f, 0x23, 0x76, 0x5c, 0x86, 0x51, 0x6d, 0x7e, 0xb1, 0x99,
  0xd4, 0x77, 0x8b, 0x49, 0x39, 0xb7, 0x07, 0x26, 0x5b, 0xa1, 0x81, 0xb4,
  0x81, 0x48, 0x71, 0x5b, 0xba, 0x2d, 0xae, 0xf2, 0x2e, 0xcb, 0xae, 0x25,
  0xe9, 0x50, 0xd9, 0x0d, 0x22, 0x78, 0x7e, 0x2d, 0x71, 0x83, 0x4a, 0x6b,
  0xe5, 0x61, 0x12, 0xcb, 0xeb, 0x4b, 0x04, 0x85, 0x50, 0xd2, 0x8b, 0x5d,
  0x47, 0x38, 0x07, 0x8b, 0x17, 0x87, 0xe5, 0xec, 0x33, 0x8c, 0x30, 0xdb,
  0xcc, 0x70, 0x27, 0x5c, 0x29, 0x0b, 0x38, 0xcd, 0xaf, 0x8b, 0x81, 0x40,
  0x48, 0x1c, 0x77, 0x82, 0x3f, 0xb0, 0x59, 0x65, 0x96, 0xf5, 0x62, 0xd5,
  0xf4, 0x6e, 0x77, 0xb8, 0x89, 0xe8, 0x2e, 0x1e, 0x26, 0xd7, 0x09, 0xc1,
  0x80, 0x0d, 0x35, 0x3d, 0xc3, 0xb9, 0x3a, 0xc8, 0x18, 0x9d, 0x91, 0x66,
  0xad, 0xfe, 0x8c, 0xc4, 0x43, 0x7d, 0xb6, 0xf8, 0x91, 0x02, 0xc0, 0x98,
  0xb4, 0x42, 0x82, 0xec, 0x6b, 0x0e, 0x61, 0x57, 0x18, 0x01, 0xc6, 0x6c,
  0x0e, 0xd2, 0x4d, 0x16, 0x41, 0x76, 0x56, 0x61, 0x34, 0xc9, 0x2d, 0xc3,
  0xde, 0xb7, 0x7d, 0x3c, 0x10, 0x3d, 0x3e, 0x71, 0x4b, 0x34, 0x36, 0xa2,



  0xda, 0x13, 0x2b, 0x38, 0xbf, 0x6a, 0x09, 0x1a, 0x55, 0xf9, 0xb4, 0xc0,

  0x99, 0xe3, 0xb3, 0x22, 0x39, 0x78, 0x18, 0x26, 0x53, 0xca, 0xde, 0x9c,
  0x7b, 0x40, 0x4e, 0x6a, 0x45, 0xd3, 0x5d, 0x53, 0x38, 0x0c, 0x0a, 0xf4,
  0x5b, 0xc2, 0x37, 0xdf, 0xbf, 0x9b, 0x67, 0xdb, 0x6a, 0x18, 0xa8, 0xb0,

  0xdb, 0x79, 0x53, 0xfe, 0xdd, 0xcc, 0x3b, 0x95, 0x8f, 0xc4, 0x64, 0xa6,
  0x88, 0xc0, 0xde, 0x99, 0x3b, 0xfe, 0xc2, 0x65, 0xe2, 0x3e, 0xd7, 0x68,
  0xd9, 0xc6, 0x08, 0x02, 0x93, 0x5e, 0x86, 0x54, 0xed, 0x80, 0x74, 0x44,
  0xbb, 0x08, 0x24, 0xb4, 0x87, 0x35, 0x63, 0x48, 0xb9, 0x94, 0x0c, 0x1d,


  0x4b, 0x62, 0x22, 0x76, 0xba, 0x2c, 0xbc, 0xab, 0x53, 0xf5, 0x08, 0xa2,
  0xa3, 0xdb, 0xac, 0x9a, 0x12, 0xd4, 0xc4, 0xd4, 0xe8, 0xa5, 0xe0, 0xa7,
  0x17, 0xe2, 0x9e, 0xa2, 0x5c, 0x2a, 0xc9, 0x8a, 0x6f, 0x63, 0xc2, 0x40,
  0xfc, 0x2a, 0x9d, 0xf5, 0x92, 0x18, 0x72, 0x1f, 0xa6, 0x86, 0x30, 0x46,
  0x16, 0xfb, 0x4e, 0x05, 0x64, 0x9b, 0x7d, 0x68, 0x91, 0x19, 0xc2, 0x09,
  0x41, 0xc6, 0x1e, 0x76, 0x58, 0x5f, 0xf4, 0x4e, 0x53, 0xc8, 0x05, 0x73,


  0x61, 0x24, 0x33, 0x17, 0x1d, 0x22, 0xa8, 0x00, 0x00, 0x42, 0xf5, 0xa7,
  0x27, 0xda, 0xd3, 0x01, 0x7e, 0x07, 0xa2, 0x25, 0xc5, 0x9d, 0xc2, 0x48,
  0x6d, 0x41, 0x6c, 0xb2, 0x72, 0xa8, 0x60, 0x83, 0xd0, 0xbc, 0xc2, 0x62,
  0xe4, 0x79, 0x79, 0x43, 0x31, 0x98, 0x36, 0xf4, 0xa7, 0x02, 0xfd, 0x70,
  0x4e, 0x1d, 0xf3, 0xe5, 0x21, 0xe9, 0x4a, 0xfc, 0xd9, 0x91, 0x46, 0x6b,
  0xa3, 0x14, 0xa0, 0xe5, 0xb4, 0xdd, 0x4a, 0xa4, 0xd4, 0x65, 0x50, 0x34,
  0xec, 0x4c, 0x66, 0xfd, 0xc2, 0x21, 0x6f, 0xc5, 0x04, 0x1b, 0x56, 0x3c,

  0x29, 0x9b, 0x2b, 0x2f, 0x0f, 0x95, 0xd0, 0xfc, 0xc8, 0xcf, 0x73, 0xb1,
  0x6a, 0x60, 0x04, 0xa8, 0x19, 0xd8, 0x48, 0xaa, 0xb1, 0x38, 0x8b, 0x82,
  0xac, 0x87, 0x8f, 0x84, 0xfa, 0x46, 0x4b, 0xb4, 0xc8, 0xb5, 0x94, 0x40,
  0x5b, 0x20, 0x53, 0x9c, 0xe8, 0xd2, 0x18, 0xc0, 0x00, 0x16, 0x34, 0xdf,
  0xa4, 0x44, 0xa5, 0xba, 0x26, 0x10, 0x39, 0xa4, 0xa4, 0x9a, 0x8d, 0x0d,
  0x20, 0x27, 0x00, 0x90, 0x54, 0xf8, 0x47, 0xba, 0xc5, 0xf0, 0x37, 0x0e,
  0xb4, 0x89, 0x71, 0x31, 0xc8, 0x6a, 0x9f, 0xc8, 0xd1, 0xd4, 0xb8, 0xbf,
  0x44, 0x0f, 0x11, 0xa7, 0x88, 0xd5, 0x5f, 0x7b, 0x2e, 0xec, 0xbf, 0x6c,
  0xd4, 0x04, 0x46, 0x5e, 0x55, 0x33, 0x72, 0x2e, 0xb0, 0x87, 0x6d, 0x62,
  0x3c, 0xb6, 0x3b, 0x64, 0x5c, 0xa9, 0x8b, 0xbf, 0xc5, 0xe2, 0xbc, 0xab,

  0xe5, 0x0c, 0x6a, 0x9f, 0xbe, 0x03, 0x45, 0xc9, 0x43, 0xc0, 0xac, 0x4b,
  0xb9, 0x8d, 0x18, 0x9e, 0x98, 0x8c, 0xe3, 0x32, 0x31, 0x90, 0x9c, 0xee,
  0xfd, 0xf7, 0x03, 0x2c, 0x2d, 0x88, 0x36, 0xf6, 0xe1, 0x2c, 0x7c, 0xde,
  0x60, 0x5e, 0x84, 0xf0, 0x1d, 0x1a, 0xda, 0xaf, 0x63, 0x81, 0x4a, 0x15,
  0xe0, 0x86, 0xc3, 0xff, 0x75, 0x55, 0x4c, 0x3b, 0x32, 0xaa, 0x1c, 0x78,
  0x40, 0x9c, 0x12, 0x95, 0xb5, 0x12, 0xa2, 0x4b, 0xf4, 0xf8, 0x90, 0xc0,
  0xdf, 0x50, 0x45, 0x28, 0x55, 0x6f, 0x90, 0x78, 0x9b, 0x7b, 0x25, 0xb4,
  0x57, 0xb9, 0x39, 0xa1, 0x6a, 0x7a, 0x05, 0x24, 0x01, 0xf8, 0x91, 0x32,
  0x75, 0x8e, 0x06, 0x8a, 0xb0, 0x78, 0xfe, 0x31, 0xac, 0xe8, 0x62, 0x39,
  0xb1, 0x23, 0x42, 0x0b, 0x29, 0x0b, 0x65, 0xd2, 0x7d, 0xf3, 0x0c, 0x33,
  0xbb, 0xae, 0x68, 0xcf, 0xb3, 0x79, 0xed, 0x04, 0xa4, 0x7d, 0xc7, 0x49,
  0x4a, 0x18, 0xe1, 0x05, 0x7c, 0xb2, 0x2c, 0x8a, 0xf3, 0xe8, 0x0d, 0xc7,
  0x4c, 0x8c, 0x9a, 0x23, 0x93, 0x21, 0xbb, 0x92, 0xe8, 0xe4, 0x4e, 0x31,

  0x66, 0x64, 0x84, 0x2e, 0xcc, 0x4c, 0x97, 0x90, 0x5f, 0x8a, 0x85, 0x80,
  0xe1, 0x88, 0x4f, 0x2f, 0x8c, 0xb8, 0xe3, 0x75, 0x2d, 0xc8, 0x8b, 0xbb,
  0xfb, 0xec, 0xc9, 0x2e, 0x5d, 0x71, 0x02, 0xd8, 0x63, 0xb1, 0x27, 0x82,
  0x8a, 0x23, 0x63, 0x81, 0x6f, 0xa7, 0xb4, 0xc7, 0x20, 0x78, 0x38, 0xba,
  0xf3, 0xb9, 0xe2, 0xb6, 0x33, 0xe5, 0x91, 0x5f, 0x84, 0xaa, 0xb1, 0xd1,
  0x4f, 0x84, 0xc2, 0x69, 0xc3, 0xe1, 0x45, 0x13, 0x64, 0x7f, 0x79, 0xa4,
  0xd3, 0xa6, 0xa8, 0xf9, 0x85, 0x40, 0xfe, 0xbc, 0x51, 0x54, 0xbf, 0x6b,
  0x2a, 0x09, 0x4a, 0x4e, 0x5e, 0xb3, 0x53, 0xf0, 0xe5, 0x3b, 0xfa, 0x5b,
  0x6e, 0x01, 0x8f, 0x50, 0xd6, 0x8b, 0x06, 0x21, 0x9c, 0x6f, 0xfb, 0xe6,
  0xbb, 0x6e, 0x55, 0xe7, 0xd6, 0xe9, 0x78, 0xe7, 0xd1, 0xf3, 0xdd, 0xed,
  0x48, 0x0a, 0xb4, 0xf9, 0x86, 0x8f, 0x77, 0xf8, 0x78, 0x77, 0xb4, 0xbb,
  0xdd, 0x99, 0x0d, 0x6d, 0xc9, 0x1a, 0x3c, 0x16, 0x45, 0x69, 0xb7, 0x32,
  0x08, 0xb9, 0xcd, 0xae, 0xf6, 0x4b, 0xd2, 0xb0, 0xfd, 0xda, 0xd4, 0x77,
  0xd9, 0xb5, 0xa1, 0xdc, 0x68, 0x3a, 0xdc, 0x49, 0x5e, 0x8b, 0x9d, 0x44,
  0x82, 0x51, 0x45, 0x15, 0x15, 0x7f, 0xb7, 0x53, 0x8c, 0xf1, 0x08, 0x9d,
  0x29, 0xa7, 0x4e, 0x44, 0x82, 0x37, 0xb5, 0x99, 0x54, 0x85, 0x3c, 0x3f,
  0xa4, 0x08, 0x7c, 0x72, 0xdf, 0xcd, 0x61, 0x0b, 0x35, 0xf2, 0x99, 0x7f,
  0xa6, 0x64, 0x38, 0x0c, 0xd3, 0x7a, 0x9a, 0xe7, 0x6c, 0x1e, 0xf5, 0x58,
  0x45, 0x9a, 0x40, 0x09, 0x38, 0x3a, 0x14, 0x66, 0xe7, 0x29, 0x47, 0x7e,
  0x1d, 0xe0, 0x69, 0x30, 0x2c, 0xe9, 0xbe, 0x86, 0xc4, 0xd6, 0x8d, 0x2b,
  0x2e, 0x01, 0x6a, 0xfa, 0x22, 0x18, 0xcd, 0x56, 0x5d, 0xad, 0xbb, 0x5a,
  0x99, 0xb9, 0x5a, 0x8c, 0x7e, 0x16, 0xc1, 0x2d, 0x24, 0xb6, 0xc3, 0x09,
  0xd4, 0x69, 0x53, 0x97, 0xb4, 0x4f, 0xb1, 0x4d, 0x85, 0xc3, 0x03, 0x28,
  0xb7, 0xd6, 0x1e, 0xb3, 0xac, 0x44, 0xd2, 0x8b, 0xbe, 0x1c, 0xb8, 0xec,
  0x9f, 0x96, 0x3d, 0x95, 0x46, 0xf4, 0x4a, 0x06, 0xe9, 0x4f, 0x10, 0x6d,
  0xe7, 0xc2, 0x2c, 0x5a, 0x88, 0xb4, 0xaa, 0x80, 0x17, 0x85, 0x53, 0x4e,
  0xa4, 0x51, 0x05, 0xa1, 0x1a, 0xd9, 0xdd, 0x8a, 0x60, 0x55, 0x0d, 0xcc,
  0xfa, 0x00, 0x01, 0x0a, 0x0a, 0x2a, 0xb2, 0x1b, 0x62, 0xee, 0xb5, 0x68,
  0x26, 0x55, 0x95, 0x93, 0x1b, 0xca, 0xe6, 0x2a, 0xb0, 0x76, 0x47, 0x49,
  0x9d, 0x24, 0xeb, 0x67, 0x91, 0x52, 0xf1, 0x29, 0x6e, 0x67, 0x6d, 0x53,
  0xc0, 0x0b, 0xc0, 0x58, 0x12, 0x5c, 0x5d, 0xb0, 0x37, 0xe8, 0x33, 0x80,

  0xc9, 0x29, 0x78, 0x6d, 0xd3, 0xce, 0x26, 0x21, 0x23, 0x80, 0xd3, 0xa5,
  0x19, 0x2d, 0xad, 0x6c, 0xd9, 0xab, 0x75, 0x7f, 0xf4, 0x65, 0xe7, 0x76,
  0x78, 0x73, 0x73, 0x33, 0xa4, 0x0b, 0x47, 0x29, 0x3e, 0x52, 0xb5, 0x31,
  0x6a, 0x81, 0x50, 0xc3, 0x4c, 0x65, 0x0b, 0x96, 0x98, 0x48, 0x18, 0x2e,
  0xf1, 0x32, 0xae, 0xaa, 0x49, 0xde, 0xa0, 0x3c, 0x50, 0x88, 0x0b, 0xaf,
  0x49, 0x99, 0x9e, 0x4c, 0x07, 0x0a, 0x93, 0xfa, 0xb5, 0x22, 0xb7, 0xcf,
  0xad, 0x85, 0xd0, 0xac, 0xa6, 0x4d, 0x46, 0xe5, 0xf0, 0xe6, 0x13, 0x8b,
  0x83, 0x64, 0xf8, 0x4d, 0xb2, 0xf1, 0x52, 0x56, 0x7b, 0x6e, 0x9e, 0x38,
  0x68, 0xaf, 0x85, 0x1f, 0x0e, 0x63, 0x43, 0xe6, 0xdd, 0x8d, 0x87, 0x21,
  0x31, 0xf6, 0x5e, 0x64, 0x74, 0x69, 0x71, 0x49, 0x38, 0x4d, 0xc4, 0xf7,
  0x47, 0x59, 0x34, 0xec, 0x25, 0x63, 0x08, 0x35, 0x2c, 0x3d, 0xad, 0xa5,
  0xa3, 0xcf, 0x84, 0x6f, 0xf8, 0x9a, 0xeb, 0x58, 0xa5, 0x37, 0xf7, 0xdf,
  0x71, 0xef, 0x26, 0x0a, 0xf5, 0xce, 0xe1, 0x39, 0xf3, 0x70, 0x8d, 0xc9,
  0x5d, 0x64, 0x73, 0x3a, 0x23, 0x33, 0x95, 0x7e, 0x1a, 0xae, 0x36, 0x8b,
  0xed, 0x5c, 0x51, 0x73, 0xbf, 0x5c, 0x53, 0xd6, 0xe6, 0x7c, 0xcc, 0x6e,

  0x15, 0xad, 0x40, 0x4a, 0x07, 0x1e, 0x15, 0xcb, 0xb2, 0x54, 0xf5, 0x00,
  0x46, 0xe3, 0x56, 0x37, 0xb0, 0x97, 0x53, 0x68, 0x99, 0xfd, 0x84, 0xde,
  0x32, 0x05, 0x49, 0x37, 0x96, 0x2d, 0xca, 0x61, 0x13, 0xba, 0xaa, 0x8a,
  0x77, 0x26, 0x1e, 0xb0, 0xac, 0x22, 0x42, 0x47, 0x52, 0xfd, 0x50, 0x33,
  0xa2, 0x43, 0xab, 0x13, 0x62, 0xe1, 0xe5, 0xd7, 0xc7, 0x48, 0x0e, 0x37,
  0x8c, 0xb4, 0x10, 0x4c, 0x08, 0x9e, 0x3f, 0xb7, 0x4e, 0xb2, 0x36, 0xf2,

  0x25, 0xb1, 0x12, 0xae, 0xb0, 0x4c, 0x93, 0x18, 0x96, 0xaa, 0x9a, 0x30,
  0x89, 0xda, 0x2a, 0x92, 0x03, 0x2b, 0x26, 0x87, 0x5c, 0x5e, 0x1b, 0x2d,
  0x4e, 0x5d, 0xc5, 0x41, 0x74, 0xbf, 0xf0, 0x75, 0xc5, 0x2e, 0x49, 0x6b,
  0x09, 0x08, 0x43, 0xf7, 0x0b, 0xb2, 0xd1, 0x1d, 0xbd, 0x72, 0x2b, 0xaa,
  0x2c, 0x4c, 0xa3, 0x93, 0xcf, 0xc7, 0x3b, 0xc5, 0xe1, 0x4c, 0x3a, 0x8e,
  0x19, 0xbb, 0x75, 0x99, 0xef, 0x80, 0xe0, 0xd2, 0x2e, 0x72, 0xcd, 0xc5,
  0x1c, 0xc1, 0x36, 0xcf, 0xd2, 0x30, 0xe3, 0xff, 0x24, 0x09, 0x05, 0xb9,
  0x6b, 0x78, 0x1e, 0x69, 0x1e, 0x5a, 0x7e, 0xe9, 0x8f, 0xa6, 0xc8, 0x80,
  0x92, 0x5f, 0x1b, 0x1f, 0x8e, 0xcc, 0xc9, 0x2f, 0x48, 0x5b, 0xfa, 0x52,

  0xfc, 0x5e, 0x94, 0x56, 0x5f, 0x7b, 0xc6, 0x8d, 0xd4, 0xde, 0x62, 0xee,
  0x5a, 0x72, 0x44, 0xdb, 0x10, 0x1f, 0x8e, 0x03, 0xa6, 0xde, 0xee, 0x31,
  0xc5, 0x11, 0x7c, 0x7d, 0xcd, 0xed, 0xc8, 0xfe, 0xad, 0xbb, 0x79, 0x5f,
  0xdc, 0xbf, 0x7b, 0x3f, 0x77, 0xfb, 0xd6, 0xef, 0x1e, 0xb7, 0x81, 0xd0,
  0xdc, 0xdb, 0x2f, 0x3c, 0x7f, 0x1f, 0x72, 0x47, 0xd8, 0x98, 0xb3, 0x7e,
  0xbf, 0x36, 0x97, 0xf1, 0x6c, 0xd6, 0x2f, 0x7e, 0xad, 0x53, 0x07, 0x31,

  0xc2, 0x41, 0x40, 0x93, 0x8f, 0x0f, 0xc7, 0x51, 0x4a, 0x9c, 0xbd, 0x0f,

  0xe5, 0x28, 0x6a, 0x3d, 0x46, 0x10, 0x1c, 0xe4, 0x69, 0xc3, 0xc4, 0x3c,
  0x41, 0xd6, 0xe8, 0x30, 0x3e, 0x9c, 0xd6, 0x15, 0x8a, 0x5e, 0x1f, 0xac,
  0xef, 0x4b, 0x15, 0xfc, 0x0f, 0x5f, 0x1c, 0xb2, 0x94, 0x5c, 0xeb, 0x41,
  0x3f, 0xc1, 0x84, 0x23, 0x3a, 0x5b, 0xa1, 0x1b, 0x52, 0xaf, 0x8f, 0xa0,
  0x4a, 0x72, 0x2b, 0x2a, 0x55, 0x09, 0xb6, 0x07, 0xed, 0x0d, 0x23, 0xe4,
  0x3c, 0x08, 0x03, 0x3d, 0xe5, 0xbc, 0xf7, 0x8c, 0xf5, 0xec, 0xa8, 0xbd,
  0x43, 0xf4, 0xec, 0xfe, 0x6f, 0x5a, 0x1f, 0xe8, 0xd9, 0x91, 0x01, 0x05,
  0x2c, 0x6a, 0xc6, 0x02, 0x47, 0x0e, 0x7f, 0x82, 0xe2, 0x07, 0x12, 0xf1,
  0x3d, 0xb3, 0x03, 0x98, 0x01, 0x29, 0x45, 0x14, 0xbe, 0x9d, 0x0b, 0xfa,
  0x28, 0xc3, 0xc5, 0x7f, 0xe1, 0x94, 0x99, 0x21, 0x2d, 0x72, 0x28, 0x24,
  0x3b, 0x02, 0x11, 0xae, 0xa1, 0x54, 0x4b, 0x99, 0x71, 0xa2, 0x0c, 0xc8,


  0xaf, 0x5f, 0x34, 0x2a, 0x5c, 0xab, 0xc8, 0xf6, 0x96, 0xa4, 0xdc, 0xfb,

  0xbc, 0x25, 0x29, 0xdd, 0x3b, 0xeb, 0x64, 0xe4, 0x38, 0xe3, 0xfc, 0x36,
  0xdf, 0x1f, 0x8a, 0x97, 0xb8, 0x68, 0x9b, 0x1a, 0x82, 0x84, 0x99, 0x52,
  0xf4, 0x6a, 0x50, 0xc3, 0xcc, 0xa9, 0x4a, 0x5e, 0x29, 0x26, 0xf2, 0xd5,
  0x29, 0x08, 0x27, 0xd6, 0x51, 0x32, 0xa9, 0xca, 0x9b, 0x1a, 0xea, 0xa8,
  0x1a, 0xa8, 0x29, 0x67, 0xd4, 0x5e, 0x05, 0x15, 0xd6, 0x66, 0x7b, 0xe7,
  0x16, 0x56, 0xf6, 0x9b, 0xf3, 0x37, 0x27, 0xdc, 0x20, 0x82, 0x8b, 0x7d,
  0xa9, 0xa6, 0x49, 0xe6, 0xbc, 0x9a, 0x2c, 0x8c, 0x61, 0x6e, 0xb4, 0x93,
  0x86, 0x59, 0x99, 0x72, 0xc7, 0xa0, 0x22, 0x19, 0x11, 0x42, 0x89, 0x2f,
  0x2f, 0x63, 0xe1, 0x1e, 0x51, 0x24, 0x3d, 0x58, 0x2b, 0x4f, 0x03, 0xfe,
  0xf9, 0xba, 0xae, 0xb1, 0x93, 0x91, 0x60, 0x03, 0x3d, 0xea, 0x35, 0x1d,

  0x05, 0x3d, 0x12, 0xdc, 0x3e, 0x4f, 0x4d, 0x43, 0x1f, 0x33, 0x20, 0x54,
  0x5b, 0x87, 0x0f, 0x69, 0x5d, 0xb6, 0x89, 0x09, 0x40, 0xb8, 0xd2, 0xb6,
  0xa6, 0x15, 0x54, 0xe9, 0x5a, 0xcd, 0xcb, 0xb5, 0x23, 0xf1, 0x95, 0x2f,
  0xd2, 0x43, 0x48, 0x1f, 0x92, 0xb8, 0xd4, 0xaa, 0x22, 0xdf, 0x20, 0x6b,
  0xd5, 0x83, 0x48, 0x0a, 0xbf, 0x28, 0x24, 0x1a, 0x1c, 0xb0, 0x91, 0xd2,
  0x96, 0xa9, 0xa7, 0x7d, 0x17, 0x68, 0x6c, 0xef, 0x06, 0x47, 0x94, 0x44,
  0x06, 0xbc, 0x42, 0x6d, 0x06, 0x4e, 0xd3, 0x10, 0x9b, 0x19, 0x1d, 0x6d,
  0xc5, 0x52, 0xf8, 0xda, 0x03, 0xf5, 0x2e, 0xaa, 0x60, 0xbb, 0xa6, 0x24,
  0xb5, 0xeb, 0x43, 0xa1, 0xf6, 0x32, 0x70, 0xbf, 0x80, 0xf4, 0x85, 0x46,
  0x14, 0x65, 0xdb, 0x7d, 0x16, 0xba, 0x33, 0xc5, 0x9d, 0x36, 0xf0, 0xa2,
  0x75, 0x39, 0x39, 0xb4, 0xfc, 0xf0, 0xa3, 0x0b, 0xd4, 0x2f, 0xb2, 0xea,
  0x92, 0xab, 0x1a, 0x18, 0x61, 0x36, 0x0a, 0x8a, 0x91, 0x26, 0x1e, 0xe8,
  0x5b, 0x92, 0xfc, 0xb7, 0x21, 0x4b, 0x54, 0x78, 0xbe, 0x56, 0x54, 0x4e,
  0x23, 0xee, 0xf9, 0xcd, 0xe1, 0x8c, 0xd9, 0xca, 0x2c, 0x2d, 0xcc, 0x4e,
  0x98, 0x1b, 0x1b, 0xa6, 0xdb, 0xcc, 0xe7, 0x5f, 0xcc, 0xcb, 0x55, 0x7d,
  0xb7, 0x99, 0x48, 0x4f, 0x20, 0x69, 0xa3, 0xd1, 0x48, 0x6a, 0x10, 0x9d,
  0xa5, 0x39, 0xdf, 0x55, 0xf1, 0x51, 0x85, 0x22, 0x15, 0x3e, 0xd4, 0xec,
  0xf7, 0xed, 0x0c, 0xb7, 0xe9, 0x7d, 0xec, 0xbf, 0xf9, 0x63, 0x47, 0x77,
  0x19, 0xd1, 0x04, 0x36, 0x9c, 0x1f, 0x66, 0x39, 0xbb, 0x08, 0x4f, 0xcc,
  0x6c, 0x4e, 0x5a, 0x81, 0x3f, 0x3b, 0x20, 0x09, 0x0f, 0x46, 0xf5, 0xd5,

  0x08, 0x86, 0xcb, 0x04, 0x01, 0xbf, 0xe9, 0xa9, 0x65, 0x11, 0xd3, 0x91,
  0x53, 0x3a, 0x38, 0x44, 0x95, 0x24, 0x67, 0x25, 0xf7, 0x14, 0x70, 0x62,
  0x29, 0x6d, 0x21, 0xa2, 0x5e, 0x94, 0xe5, 0x24, 0xad, 0x36, 0x83, 0xa4,

  0x46, 0x9a, 0x36, 0x00, 0xd8, 0xcd, 0xdc, 0x67, 0xec, 0x58, 0x21, 0x5f,
  0xad, 0x63, 0xa0, 0x5f, 0xf2, 0x9b, 0x23, 0xf6, 0xa2, 0xfa, 0x26, 0x73,
  0x2c, 0xa3, 0x60, 0x3e, 0x73, 0x53, 0x4f, 0x5a, 0xf3, 0x40, 0xa2, 0x3b,
  0x8a, 0x17, 0x9c, 0x71, 0xaf, 0xb6, 0x3d, 0xea, 0x5f, 0xb2, 0x9b, 0x61,
  0xa4, 0x6a, 0xb1, 0x76, 0x51, 0x00, 0x82, 0x7d, 0x27, 0x9c, 0x11, 0xca,
  0xb4, 0x50, 0x7b, 0x9a, 0xe3, 0x28, 0xd6, 0xaa, 0xf6, 0xee, 0x7b, 0x98,
  0x93, 0x14, 0x63, 0x22, 0x8e, 0x69, 0x78, 0x57, 0x10, 0x1c, 0x49, 0xf2,
  0x59, 0xd7, 0xe4, 0xc2, 0xf9, 0x8c, 0xc0, 0x13, 0x4d, 0xce, 0x3e, 0xeb,
  0xca, 0xab, 0x7e, 0xe7, 0xaf, 0x03, 0xce, 0x75, 0xfc, 0x92, 0x5f, 0x3f,
  0xc6, 0x7e, 0xa3, 0x13, 0x2f, 0x2b, 0x86, 0xc3, 0x73, 0xfc, 0x84, 0xfd,
  0x8d, 0xc3, 0x08, 0xb5, 0xb5, 0x0c, 0xc6, 0x6c, 0x9e, 0x5d, 0xf2, 0xfa,

  0x5e, 0x9c, 0x1c, 0x7d, 0x77, 0x74, 0x12, 0x48, 0xc2, 0xaf, 0xc7, 0xe3,

  0x9d, 0x8f, 0x59, 0x35, 0x41, 0xbf, 0x56, 0x5a, 0x1e, 0x79, 0x37, 0xe9,
  0x49, 0x9b, 0x04, 0xe6, 0x09, 0x08, 0xed, 0xb0, 0x07, 0x76, 0x0d, 0x23,
  0x2c, 0x4c, 0x29, 0x91, 0x4f, 0x0a, 0x10, 0x3c, 0x8a, 0x92, 0x24, 0xdb,
  0x10, 0xe2, 0x6e, 0x5a, 0x65, 0x33, 0x6e, 0x67, 0x1a, 0xe6, 0x19, 0x02,
  0xfb, 0x23, 0x49, 0x5e, 0xe1, 0x4c, 0x39, 0xd7, 0x1c, 0x21, 0x2e, 0xbb,
  0x88, 0xe0, 0x8d, 0x25, 0xea, 0xeb, 0x93, 0x57, 0xf2, 0xcd, 0x9a, 0x2e,
  0x12, 0xed, 0x12, 0x03, 0xbf, 0xb1, 0xd9, 0x71, 0xfa, 0xed, 0xf0, 0x70,
  0x3c, 0x7c, 0x75, 0x74, 0x72, 0xf4, 0xf5, 0xe1, 0xf9, 0x11, 0xe3, 0x9d,
  0x2b, 0x08, 0x72, 0x5c, 0x6f, 0xb1, 0x62, 0xfc, 0x5b, 0xd9, 0x18, 0x16,
  0xf1, 0x04, 0x98, 0x4f, 0x9d, 0x9c, 0xd1, 0xaf, 0xc5, 0x81, 0xb1, 0xa6,
  0x64, 0xe9, 0x34, 0xad, 0x86, 0xca, 0xdd, 0x5c, 0x38, 0x23, 0xdb, 0x64,

  0xaa, 0xc1, 0x0a, 0xd2, 0xf9, 0x0d, 0xf5, 0x6c, 0x7b, 0x5f, 0x50, 0xb2,
  0x7d, 0x6e, 0x8b, 0x4d, 0x79, 0xf5, 0xbe, 0x93, 0xc7, 0xed, 0x6c, 0xeb,
  0x80, 0x81, 0x5d, 0x1f, 0x57, 0x6f, 0xb4, 0x4e, 0x1c, 0x01, 0xe6, 0x57,
  0x78, 0xb0, 0x03, 0x42, 0xee, 0xb0, 0xd3, 0xd1, 0x2f, 0x46, 0x7e, 0x17,
  0x81, 0x34, 0x81, 0x54, 0xad, 0xa7, 0x57, 0xd9, 0xc2, 0x82, 0x75, 0x51,
  0xfe, 0x02, 0x22, 0xe5, 0x5c, 0x78, 0x29, 0xa0, 0x42, 0xb8, 0xf1, 0x93,
  0x0c, 0x26, 0x32, 0xa2, 0x76, 0xd7, 0x81, 0xa0, 0x40, 0x56, 0x10, 0xb5,
  0x24, 0xa0, 0x60, 0x0c, 0xe5, 0xf5, 0xa0, 0x02, 0x79, 0x84, 0x0c, 0x44,
  0x2f, 0xb1, 0x20, 0x4c, 0x24, 0x90, 0xc6, 0x82, 0x5d, 0x2d, 0xc2, 0x42,
  0x9c, 0x5b, 0x3c, 0xf6, 0x12, 0xde, 0x30, 0xfc, 0x88, 0x5b, 0x9b, 0x88,
  0x1a, 0x4d, 0x33, 0xfc, 0x39, 0x6e, 0xab, 0xae, 0xdf, 0x0a, 0x54, 0xe5,
  0xea, 0x2d, 0x51, 0x03, 0x14, 0xcb, 0xeb, 0x5e, 0xc3, 0x34, 0xdc, 0x64,
  0x99, 0x39, 0x30, 0xf4, 0xfa, 0x4c, 0x0e, 0x07, 0x3f, 0x92, 0x46, 0x05,
  0x23, 0x57, 0x19, 0x12, 0xf5, 0xce, 0x7b, 0x2c, 0xa3, 0xd5, 0xcd, 0x80,
  0x50, 0xe4, 0xf5, 0xaf, 0x61, 0xcf, 0x09, 0x5b, 0x8c, 0x37, 0xcc, 0x96,
  0x01, 0xa4, 0xf7, 0xd6, 0x6b, 0x45, 0xe8, 0xb7, 0xea, 0xa2, 0xdf, 0x86,
  0xcd, 0xeb, 0x9a, 0x74, 0x74, 0xf6, 0x8e, 0x1b, 0xaf, 0x9f, 0xd0, 0x5f,
  0x24, 0x36, 0x57, 0xc7, 0x10, 0xf2, 0xa4, 0x3f, 0x08, 0xa5, 0xab, 0x64,
  0x88, 0xc6, 0xd8, 0x70, 0xbb, 0xa6, 0x2b, 0x72, 0x86, 0xaa, 0x40, 0xb1,
  0xcb, 0x75, 0xc0, 0x06, 0x07, 0xe5, 0x01, 0xb6, 0x59, 0x2b, 0xa6, 0x42,
  0x73, 0x10, 0x10, 0x23, 0xcc, 0x82, 0xd3, 0x6c, 0x35, 0xe8, 0x71, 0x4a,
  0xbf, 0x24, 0x1d, 0x52, 0xc8, 0xa7, 0x87, 0xf3, 0xba, 0x92, 0x2b, 0x1a,
  0x92, 0xde, 0x4a, 0x2a, 0xb4, 0x79, 0x4d, 0xcd, 0x3c, 0x46, 0x6e, 0x9d,
  0xfc, 0x09, 0xf6, 0x41, 0x03, 0x98, 0x33, 0x0c, 0x71, 0xa0, 0xbc, 0xdd,
  0x9a, 0x09, 0x9a, 0xba, 0xce, 0xa9, 0xb9, 0x36, 0x25, 0x7f, 0x20, 0xc0,
  0x45, 0x12, 0x95, 0xa6, 0x9a, 0x82, 0xb2, 0xf0, 0xfb, 0x8b, 0xb5, 0x4c,
  0x8a, 0x5a, 0x73, 0xd5, 0xb2, 0x3b, 0x09, 0xac, 0xb3, 0x8e, 0x77, 0x21,
  0x01, 0xcc, 0x14, 0x90, 0xb3, 0xb0, 0x56, 0x26, 0xac, 0x94, 0x20, 0xef,
  0xef, 0x2a, 0x2d, 0x22, 0x77, 0xce, 0x6c, 0xbc, 0x6d, 0x97, 0x86, 0x85,
  0xca, 0xb1, 0x45, 0xf4, 0x72, 0xa2, 0x8d, 0x2e, 0xf0, 0x95, 0xb1, 0xdd,
  0x0c, 0x03, 0xcb, 0x29, 0x54, 0x21, 0x53, 0xe1, 0xcd, 0x41, 0xdb, 0x20,
  0xa1, 0xb7, 0x32, 0x46, 0x55, 0xcc, 0x5d, 0xbc, 0x00, 0x4a, 0x8b, 0x04,
  0xfb, 0xd2, 0x0c, 0xad, 0xab, 0x1d, 0x15, 0x38, 0x1e, 0xea, 0x2e, 0x35,
  0x1f, 0x6e, 0x97, 0xe8, 0xb0, 0x8a, 0x0a, 0xe9, 0x6e, 0x76, 0xb5, 0x5b,
  0xe8, 0xc3, 0x65, 0x19, 0xe6, 0xdb, 0x98, 0x2e, 0x79, 0x76, 0x6c, 0xcc,

  0x96, 0x68, 0x27, 0xf8, 0xfe, 0x2b, 0x4c, 0x0e, 0x4a, 0x2a, 0xde, 0xc0,
  0xa5, 0x27, 0x74, 0xa2, 0x4b, 0x6d, 0x01, 0xc5, 0xb4, 0x3c, 0xc9, 0xcc,
  0x17, 0x73, 0xea, 0x8f, 0xd7, 0x72, 0xed, 0x77, 0xbf, 0x5f, 0x1b, 0xfa,
  0x9b, 0x5e, 0xa9, 0xe5, 0x45, 0x2f, 0x22, 0xde, 0xe9, 0xf5, 0x95, 0x04,
  0x25, 0x30, 0x32, 0xd3, 0xf0, 0x0c, 0xb2, 0x9d, 0x22, 0x94, 0xc8, 0x7f,
  0x4c, 0xca, 0x2a, 0x2c, 0x92, 0x9d, 0x5a, 0x34, 0x26, 0x7d, 0x34, 0xad,
  0xaf, 0xe3, 0x37, 0xbc, 0xbe, 0x8e, 0xde, 0x70, 0xfd, 0x03, 0x37, 0xdd,
  0xeb, 0xf6, 0xd9, 0x77, 0xd7, 0xc7, 0xdf, 0xf5, 0xc0, 0x4a, 0x78, 0x37,
  0x5c, 0x57, 0x07, 0x6a, 0xf7, 0xee, 0x38, 0x5f, 0x72, 0x39, 0x23, 0x7b,
  0xcd, 0xe5, 0x9e, 0x47, 0x5d, 0xfe, 0x7e, 0x93, 0x5e, 0xbe, 0xe7, 0xe6,
  0xfb, 0x72, 0xb9, 0xcf, 0x0e, 0xc7, 0xdf, 0x75, 0xae, 0xb5, 0x77, 0x91,
  0x63, 0x20, 0x1c, 0x68, 0x9d, 0x59, 0x29, 0x32, 0x2f, 0x8d, 0x15, 0xa5,
  0xf7, 0xfa, 0xfa, 0x21, 0xf4, 0x6e, 0x26, 0x12, 0xd0, 0x7b, 0xb0, 0xc7,
  0xeb, 0xe8, 0xdd, 0x3f, 0xa8, 0x2e, 0x0c, 0x82, 0x47, 0xf1, 0x05, 0xb7,
  0xd8, 0xa6, 0x22, 0x90, 0x08, 0xa9, 0x83, 0xd2, 0x29, 0x38, 0x08, 0xd2,
  0x0e, 0x93, 0x0d, 0x31, 0xcf, 0x9f, 0x43, 0xe8, 0x78, 0x21, 0xa0, 0x73,
  0x3d, 0xd1, 0x9f, 0x4d, 0xe8, 0x72, 0x41, 0x02, 0x3a, 0x87, 0x86, 0x7d,
  0x36, 0xf0, 0x08, 0xdc, 0xa3, 0x5a, 0xbf, 0x50, 0x3c, 0xb2, 0x43, 0x16,


  0x92, 0xc4, 0x89, 0x5f, 0x07, 0xf6, 0x10, 0x01, 0x20, 0x19, 0xd8, 0x6a,
  0xdc, 0x6a, 0x1a, 0x7a, 0xe8, 0x6d, 0x6d, 0xb8, 0x5f, 0x1e, 0x01, 0x93,
  0x45, 0x12, 0xaa, 0x67, 0x23, 0xc8, 0x6c, 0x18, 0xfc, 0x3e, 0xe2, 0x80,
  0xdf, 0xe3, 0xb2, 0x8d, 0x48, 0xa5, 0x93, 0x88, 0xd5, 0xaf, 0xd7, 0x19,
  0x65, 0x82, 0x00, 0xa8, 0xac, 0x7b, 0x4f, 0x49, 0xcd, 0x83, 0x3e, 0x40,
  0x8a, 0xca, 0x30, 0x2f, 0x86, 0x61, 0xa2, 0x74, 0x3b, 0x72, 0xdc, 0x00,
  0xbf, 0xd6, 0x33, 0x12, 0xa9, 0x92, 0x91, 0x54, 0x5d, 0x89, 0x5d, 0xa4,
  0x89, 0x14, 0x50, 0x92, 0x9f, 0x1f, 0xa2, 0x37, 0x52, 0x72, 0x1b, 0xc5,
  0x60, 0x6b, 0x37, 0x84, 0x69, 0xca, 0x96, 0x7f, 0xed, 0x69, 0x07, 0xe7,
  0x78, 0x56, 0xd4, 0x43, 0xd7, 0xbc, 0xfd, 0x85, 0xfd, 0x6b, 0x60, 0x5f,
  0xbc, 0x7a, 0x3b, 0xee, 0xa8, 0x14, 0x75, 0xc6, 0xe5, 0x23, 0x97, 0xe0,
  0x1b, 0xe6, 0xf7, 0xb6, 0xe4, 0xab, 0x76, 0xed, 0x12, 0x65, 0xc8, 0x10,
  0x5f, 0xdf, 0x7c, 0x62, 0xd4, 0xa9, 0x99, 0x95, 0x42, 0xe5, 0x15, 0xec,
  0x39, 0x04, 0xbb, 0x69, 0x0d, 0x6e, 0x76, 0x52, 0xf4, 0x4e, 0xce, 0xa4,
  0x18, 0x0a, 0x12, 0x0b, 0x08, 0x9a, 0xa7, 0xf6, 0x6d, 0x5e, 0x32, 0x62,
  0xbb, 0x60, 0x94, 0xd9, 0x0e, 0x58, 0xa4, 0x1a, 0xda, 0x41, 0x63, 0x91,
  0xa9, 0x2d, 0x41, 0x55, 0x92, 0xac, 0xb2, 0xed, 0xe8, 0x16, 0xf3, 0x1e,
  0xeb, 0x16, 0x2e, 0xaf, 0x1f, 0x0f, 0xe9, 0xf1, 0x44, 0x8d, 0x45, 0xfe,
  0xe1, 0x53, 0xfc, 0x70, 0xd4, 0xdd, 0xe8, 0xa0, 0xc8, 0x46, 0x9a, 0xab,
  0x5a, 0x47, 0xeb, 0xaa, 0x98, 0x51, 0x63, 0x0e, 0x9a, 0xb6, 0xb6, 0x59,
  0x20, 0x2c, 0x45, 0xd7, 0xd9, 0xc6, 0x42, 0x26, 0x19, 0x12, 0x0a, 0xca,
  0xc9, 0x2a, 0x54, 0x10, 0xb8, 0x43, 0x7f, 0xf4, 0x28, 0x72, 0xe8, 0x76,
  0xc6, 0x2f, 0x64, 0x99, 0x0f, 0x38, 0xf2, 0x49, 0xce, 0x1d, 0xb0, 0x5e,
  0xe4, 0xcb, 0xa1, 0xbe, 0xc5, 0xc2, 0x63, 0x91, 0x7e, 0x14, 0xa1, 0xfe,
  0x18, 0xa4, 0x10, 0x36, 0x7a, 0xd2, 0x4e, 0xcc, 0x7e, 0x58, 0x8b, 0x9f,
  0x14, 0x9a, 0x11, 0x4d, 0xab, 0xc9, 0x5c, 0x69, 0x3c, 0x20, 0x63, 0xf9,
  0x3b, 0xb1, 0xaa, 0x30, 0xcd, 0xdf, 0xf6, 0xdd, 0x36, 0x5a, 0x01, 0x82,
  0x99, 0xd8, 0x77, 0xef, 0x3d, 0x3f, 0x47, 0x0f, 0xeb, 0xce, 0x4f, 0xf7,
  0xec, 0x7f, 0x8f, 0xf3, 0x7b, 0xfa, 0x49, 0xce, 0xef, 0xe9, 0xff, 0x36,
  0xe7, 0xf7, 0xf4, 0x5f, 0x3f, 0xbf, 0xc7, 0xdd, 0xf3, 0x7b, 0xfa, 0xbf,
  0xcb, 0xf9, 0x69, 0x07, 0x36, 0x3d, 0xbd, 0x2c, 0x38, 0xbf, 0xb1, 0x64,
  0x82, 0x28, 0x74, 0x1f, 0x6d, 0xb6, 0xbe, 0xc5, 0x71, 0x17, 0x49, 0x85,
  0x64, 0xc7, 0xb6, 0x66, 0xe3, 0x32, 0x78, 0x64, 0x4f, 0x4b, 0x13, 0x69,
  0xcb, 0xa5, 0x43, 0x1e, 0x9f, 0x25, 0xf6, 0xf3, 0xde, 0x21, 0x38, 0x20,
  0x2e, 0xf1, 0x06, 0x47, 0xbd, 0xce, 0x66, 0x8d, 0x67, 0xb4, 0x01, 0x5c,
  0x80, 0x59, 0xbb, 0xb2, 0xe1, 0x18, 0xd6, 0x96, 0xd9, 0xbc, 0x83, 0x17,
  0xb4, 0x5f, 0x43, 0x7e, 0xfc, 0x4f, 0xd1, 0x72, 0x38, 0x34, 0x73, 0x76,
  0x93, 0x8a, 0x45, 0x1a, 0xbc, 0xad, 0x7b, 0xf0, 0xb1, 0xf5, 0xf5, 0x03,

  0xd3, 0x23, 0x9c, 0x0e, 0xef, 0x3f, 0xb2, 0xf2, 0x0a, 0x48, 0x3f, 0x2f,
  0xde, 0xbf, 0x0b, 0x7d, 0x6f, 0x66, 0xa9, 0xb6, 0x30, 0xd0, 0xa1, 0x27,
  0x9a, 0xf3, 0x1a, 0x92, 0x71, 0x3f, 0x04, 0x90, 0xbc, 0xb9, 0x8e, 0xa7,
  0xdf, 0x6c, 0x7b, 0x5e, 0x20, 0x04, 0x22, 0xca, 0xc8, 0x45, 0xe3, 0xc2,
  0x5c, 0xad, 0x3d, 0xaf, 0x07, 0xfe, 0x09, 0xbb, 0xac, 0xf8, 0xcc, 0x61,
  0x75, 0xb3, 0x73, 0x24, 0x91, 0x92, 0xde, 0x2a, 0xe8, 0x80, 0x49, 0xca,
  0x60, 0x5e, 0x0b, 0xae, 0x1c, 0x01, 0x6d, 0xa8, 0x24, 0xc4, 0xc4, 0x7e,
  0xcb, 0x24, 0xbe, 0xa7, 0xfb, 0xad, 0x5d, 0x7d, 0x05, 0x5d, 0x71, 0xb5,
  0x58, 0x4a, 0xf1, 0xf1, 0x3d, 0xc5, 0x97, 0x30, 0xc1, 0xb7, 0x93, 0xef,
  0x51, 0x59, 0xc9, 0x2e, 0x7b, 0x29, 0x44, 0x52, 0xab, 0xdc, 0x56, 0x5f,
  0x68, 0x3c, 0xac, 0x07, 0x3a, 0x2d, 0x8a, 0x56, 0xd5, 0xc1, 0x15, 0xe0,
  0x8a, 0x19, 0xc5, 0x5f, 0x27, 0x1e, 0xe9, 0xe9, 0xcc, 0x52, 0x08, 0xc1,
  0xe7, 0x20, 0x1f, 0x8d, 0xc2, 0x77, 0x93, 0xb2, 0xc1, 0x45, 0x58, 0x34,
  0x69, 0x46, 0x20, 0x34, 0xaf, 0x9b, 0xa1, 0x46, 0x52, 0x89, 0x55, 0xbb,
  0xe0, 0xb3, 0xce, 0x1e, 0xf0, 0x4f, 0xb1, 0xfa, 0x01, 0xd5, 0x6e, 0xe1,
  0x29, 0x10, 0x60, 0x0f, 0x8b, 0xdc, 0x54, 0x5c, 0xdb, 0xca, 0x9c, 0xc9,

  0x5d, 0x9b, 0x52, 0x86, 0x93, 0xb0, 0xcc, 0x4e, 0xf3, 0xb7, 0x79, 0xc5,
  0xff, 0x06, 0xe2, 0xe8, 0xa9, 0xdc, 0x60, 0xcd, 0xcc, 0xf7, 0x4c, 0x04,


  0x37, 0xc9, 0xaf, 0x0b, 0xe9, 0xa9, 0xc3, 0xd2, 0xd5, 0x49, 0x3f, 0x0b,
  0x6e, 0x12, 0xd2, 0x36, 0x52, 0xdd, 0x01, 0x88, 0xa1, 0xc9, 0x09, 0xbd,
  0x41, 0x8e, 0xa0, 0x40, 0x10, 0x44, 0x8f, 0x91, 0xd1, 0xac, 0xb4, 0x7b,
  0x6c, 0xc2, 0x09, 0xc3, 0x57, 0x99, 0x5f, 0x59, 0x6d, 0x61, 0x2a, 0x25,
  0x4f, 0x11, 0x53, 0x2f, 0x24, 0xb9, 0x35, 0x68, 0x49, 0x04, 0xdc, 0x04,
  0x99, 0xfc, 0x86, 0xe0, 0x3c, 0xad, 0x04, 0x9c, 0x96, 0x1b, 0x32, 0x03,
  0x16, 0xe7, 0xb7, 0xab, 0x63, 0xf6, 0x72, 0xc7, 0x7d, 0x16, 0x95, 0x5d,

  0x72, 0x44, 0x7f, 0x5d, 0x62, 0xf1, 0xd8, 0xb5, 0x3d, 0x60, 0xa0, 0x6a,
  0x0b, 0xc8, 0xc6, 0x84, 0x72, 0x54, 0x34, 0x55, 0xb9, 0x34, 0xd4, 0xf3,
  0x75, 0x4a, 0xab, 0x02, 0x05, 0xbd, 0x4a, 0xb3, 0x45, 0x50, 0xbc, 0xc6,
  0x9d, 0xc7, 0xb5, 0xcb, 0xa3, 0xf6, 0x21, 0xb7, 0x1e, 0x57, 0x98, 0x07,
  0xbc, 0x35, 0x49, 0x65, 0xb6, 0xcc, 0x10, 0xb8, 0x94, 0x96, 0xa0, 0xa7,
  0xd6, 0xf8, 0x24, 0xb4, 0xe5, 0xb4, 0xf5, 0xd1, 0x5a, 0xd4, 0x02, 0x0c,
  0x35, 0xec, 0x46, 0x47, 0x64, 0xe8, 0x17, 0x51, 0xce, 0xc1, 0xeb, 0xce,
  0xe6, 0x0a, 0xea, 0xa1, 0x40, 0xf3, 0xd3, 0xea, 0x6e, 0x49, 0xee, 0x01,
  0xa9, 0xd2, 0xe5, 0x7b, 0x4e, 0xb3, 0x63, 0x94, 0xd8, 0x64, 0x6d, 0x61,
  0xf4, 0xfb, 0xda, 0x43, 0x5b, 0x87, 0x34, 0x25, 0xc7, 0x10, 0xc1, 0x26,
  0x13, 0xfc, 0x95, 0x48, 0x57, 0x12, 0x3b, 0x33, 0xe0, 0xbd, 0xf4, 0x76,
  0x41, 0x93, 0xde, 0x66, 0x23, 0x2f, 0x03, 0x08, 0xb6, 0x87, 0xa1, 0x03,
  0x82, 0x4b, 0x44, 0x24, 0x65, 0xdb, 0x8b, 0x83, 0xcb, 0xf3, 0x8c, 0xfb,
  0x11, 0x26, 0x9c, 0xba, 0xf6, 0x0a, 0x29, 0x61, 0x40, 0x14, 0x01, 0xd8,
  0x8c, 0xb1, 0x71, 0x2f, 0x87, 0x02, 0x9b, 0xd1, 0x43, 0x27, 0x5e, 0x4e,
  0xa5, 0x90, 0x2e, 0x97, 0x2b, 0x23, 0x23, 0xcf, 0x3a, 0x1e, 0xc1, 0xd3,
  0x34, 0xa9, 0x42, 0x11, 0xc1, 0x0c, 0xbb, 0x0d, 0x62, 0x0e, 0x00, 0x7a,


  0x39, 0x3a, 0x4f, 0x2f, 0x99, 0x73, 0x59, 0x5e, 0xe7, 0xd5, 0xa3, 0xa3,
  0xc1, 0x58, 0xc1, 0xa8, 0x89, 0x86, 0x99, 0x19, 0x5e, 0xb2, 0x30, 0xb7,
  0x67, 0xf8, 0xd6, 0xac, 0x7d, 0x18, 0x60, 0x1b, 0x91, 0x6f, 0x42, 0xa4,
  0x85, 0x4b, 0x73, 0x40, 0x7a, 0x35, 0x12, 0x52, 0xe8, 0x4b, 0xa3, 0x18,
  0x5c, 0xce, 0xb4, 0xac, 0x04, 0xb3, 0x86, 0x32, 0x62, 0xcc, 0xcd, 0x43,
  0x1a, 0x50, 0x6d, 0xa1, 0x08, 0x5c, 0xa8, 0xbc, 0xdd, 0x2f, 0x2b, 0x52,
  0x53, 0x6c, 0x75, 0x54, 0x81, 0x57, 0x44, 0x2e, 0xfe, 0x2c, 0xab, 0xa9,
  0xf9, 0x12, 0x4f, 0x20, 0x39, 0xf4, 0x59, 0x14, 0xc0, 0xc3, 0xa8, 0xcf,
  0xbc, 0xb4, 0x49, 0xe8, 0xd2, 0x00, 0x1e, 0x8c, 0x4e, 0xfc, 0xbd, 0x05,
  0x53, 0x51, 0xb6, 0x28, 0x47, 0x08, 0x84, 0x5c, 0x46, 0x53, 0x20, 0x17,
  0x8a, 0x05, 0xcc, 0xc5, 0x46, 0x4b, 0xb4, 0x36, 0xa2, 0x59, 0x48, 0x57,
  0x28, 0x8b, 0x55, 0xb7, 0xd2, 0x50, 0x8d, 0x8b, 0xb8, 0x28, 0x71, 0xb8,
  0xcd, 0x65, 0x26, 0x47, 0x23, 0x87, 0xe0, 0xad, 0x29, 0x65, 0xaf, 0x30,
  0x84, 0xa6, 0x85, 0x03, 0x0a, 0x31, 0x63, 0xdf, 0x9c, 0x1d, 0xbe, 0x3b,
  0x1e, 0x9f, 0xbe, 0x3d, 0x00, 0xbb, 0x20, 0xb9, 0x09, 0xff, 0xfb, 0x3e,
  0xf7, 0x32, 0x02, 0x5a, 0x34, 0xbe, 0x9a, 0xd7, 0x0c, 0x54, 0x4a, 0xdf,
  0x32, 0x27, 0xf4, 0x7d, 0x96, 0x7e, 0x8c, 0x94, 0x17, 0x8d, 0x0d, 0x8b,
  0xa2, 0x6e, 0x49, 0x2d, 0x1a, 0xe5, 0x8c, 0x24, 0xc1, 0x0f, 0x46, 0x49,
  0x0c, 0x00, 0x61, 0x08, 0x0f, 0xd6, 0x8d, 0xbd, 0x56, 0x35, 0x69, 0x27,
  0x1e, 0x79, 0xdb, 0xfc, 0xd0, 0x6b, 0x42, 0x0f, 0xd7, 0x9c, 0xea, 0x63,
  0xee, 0x06, 0x4e, 0xc2, 0x31, 0xd6, 0x4e, 0x21, 0x78, 0xd7, 0x1a, 0x3a,
  0x6a, 0x34, 0x98, 0xa9, 0x20, 0xeb, 0x92, 0xf9, 0x45, 0x37, 0x5f, 0x05,
  0x27, 0x47, 0xd9, 0xb5, 0xb6, 0x4f, 0x77, 0x1b, 0x02, 0x2f, 0x1a, 0x75,
  0x70, 0x80, 0xc7, 0x34, 0x19, 0x44, 0x48, 0x54, 0xf3, 0xcb, 0x8a, 0xeb,


  0x6c, 0x5e, 0x2e, 0x79, 0x2c, 0x2e, 0x5a, 0x04, 0xac, 0x2d, 0xc3, 0xa5,
  0x8e, 0xd6, 0x22, 0x9b, 0xc9, 0x65, 0xab, 0x55, 0x64, 0x60, 0xa1, 0x3e,
  0x54, 0xae, 0x8c, 0xc5, 0xc8, 0xab, 0x91, 0x03, 0xe4, 0x8d, 0x22, 0x6f,
  0x57, 0x21, 0x7a, 0x1a, 0x6f, 0x71, 0x04, 0x04, 0x48, 0xa1, 0x50, 0x00,
  0x2a, 0x8f, 0xb4, 0xe0, 0x9b, 0x2c, 0xfb, 0xc8, 0xdf, 0xb4, 0x81, 0x5b,
  0x6e, 0x5c, 0x20, 0x89, 0xc4, 0xc9, 0xc6, 0xf7, 0x3b, 0x1b, 0xf1, 0x02,
  0xad, 0x1c, 0x01, 0x6b, 0x73, 0x08, 0x15, 0x6f, 0x35, 0xfc, 0xf5, 0x4e,
  0xf0, 0x4b, 0x23, 0x5d, 0xf8, 0x4f, 0x2b, 0x23, 0x2f, 0xae, 0x49, 0xd5,
  0xc3, 0x97, 0x04, 0x16, 0x37, 0x82, 0x2c, 0x2b, 0x2d, 0xa0, 0xd3, 0xea,
  0x63, 0xed, 0x6e, 0x79, 0xa8, 0x0a, 0x34, 0x7a, 0x08, 0x64, 0x8e, 0xa0,
  0xe3, 0x12, 0x2d, 0xa6, 0x9d, 0xfd, 0x4f, 0x35, 0xa8, 0x8d, 0x57, 0xc9,
  0xc9, 0x63, 0xc5, 0x9a, 0xd0, 0xb7, 0x39, 0x4b, 0x5f, 0xa5, 0xd6, 0x3a,
  0xda, 0xc6, 0x65, 0xd9, 0xdb, 0xdd, 0xbd, 0x17, 0x4b, 0x4e, 0xc8, 0x7c,
  0x2d, 0xa4, 0x1c, 0xa9, 0xc5, 0x1c, 0xe6, 0xb6, 0xd8, 0x27, 0x69, 0x2e,
  0x85, 0xad, 0x5d, 0xf4, 0x4d, 0xf3, 0x49, 0x0b, 0xed, 0x66, 0xb5, 0xb0,
  0x1b, 0xdb, 0x77, 0x35, 0x03, 0xac, 0x1c, 0xe9, 0xcc, 0x47, 0x7c, 0x9f,
  0x0f, 0xda, 0xef, 0x74, 0x13, 0x41, 0x58, 0x0e, 0x20, 0xce, 0x4f, 0x2f,
  0xba, 0x3b, 0x91, 0x7c, 0x75, 0xe7, 0x3c, 0xb8, 0x36, 0x3a, 0x89, 0x79,
  0x91, 0xa2, 0xc5, 0xf3, 0x1f, 0xad, 0x31, 0x00, 0xe2, 0x70, 0x71, 0xff,
  0xc6, 0xda, 0x25, 0x46, 0x34, 0x62, 0x6a, 0x59, 0x63, 0x48, 0x06, 0xc1,

  0x8a, 0x87, 0x2d, 0xec, 0x6a, 0xd3, 0x3a, 0x68, 0xc6, 0xe7, 0xf5, 0xd5,

  0x63, 0x6d, 0x78, 0x2d, 0xee, 0x7f, 0x1b, 0xfd, 0xaf, 0x5d, 0x5e, 0xf0,
  0xac, 0x7d, 0xbe, 0x04, 0xc1, 0x31, 0x04, 0xd0, 0x46, 0x57, 0x10, 0x12,
  0x36, 0x07, 0x11, 0x39, 0x9c, 0xcd, 0x65, 0xe1, 0x79, 0xe1, 0x09, 0x75,
  0x92, 0x53, 0x3a, 0xb5, 0x26, 0xb7, 0x03, 0x76, 0x1e, 0x82, 0xc5, 0xaa,
  0x4a, 0x4b, 0x21, 0xa7, 0xd2, 0x03, 0x39, 0xb4, 0x75, 0xd8, 0x31, 0x7f,
  0x7e, 0x08, 0x9f, 0xc4, 0xa5, 0x21, 0x2e, 0x56, 0xc4, 0x80, 0x22, 0x48,
  0x7b, 0x83, 0x3f, 0x80, 0x35, 0x05, 0x63, 0xb7, 0x0e, 0x70, 0x76, 0xe6,
  0xd6, 0x50, 0x25, 0x10, 0x9f, 0x70, 0xd4, 0xc9, 0x31, 0x48, 0x2c, 0x5a,
  0x60, 0x22, 0x2d, 0x29, 0x79, 0x31, 0xb5, 0x43, 0x0e, 0x45, 0xe9, 0x22,
  0xfd, 0xc2, 0x8c, 0x5b, 0xab, 0x8f, 0xa2, 0x88, 0x65, 0x69, 0x41, 0x3b,
  0x37, 0x4f, 0x6d, 0x12, 0x2e, 0x06, 0x42, 0x98, 0x3c, 0xb2, 0x85, 0xe9,
  0x64, 0x0d, 0x04, 0xf0, 0x26, 0x09, 0x67, 0x0d, 0xb2, 0x41, 0x16, 0xca,
  0x5f, 0x24, 0x49, 0x11, 0xc8, 0x6f, 0x82, 0xc3, 0x01, 0x54, 0xca, 0xaa,
  0xf2, 0x52, 0xa3, 0x36, 0xae, 0x72, 0x73, 0xaa, 0xc5, 0x06, 0x54, 0x22,
  0x27, 0x58, 0xe5, 0xbb, 0xc1, 0x62, 0x57, 0x73, 0x2f, 0x42, 0x17, 0xea,
  0x0e, 0x16, 0xe1, 0x21, 0x28, 0x84, 0x75, 0x48, 0x17, 0x2c, 0x53, 0x24,
  0xb7, 0x98, 0xd7, 0x10, 0x6f, 0xf5, 0x26, 0x31, 0x3d, 0x4b, 0x1d, 0x62,
  0xdf, 0xa2, 0x89, 0x23, 0x32, 0x66, 0x6d, 0x0b, 0x35, 0x0b, 0xf9, 0xbf,
  0x20, 0x57, 0x3e, 0xfd, 0x8b, 0xf6, 0x38, 0x66, 0x1d, 0xd3, 0x21, 0x08,
  0xb2, 0x57, 0x04, 0x7a, 0x5e, 0x52, 0xb6, 0xd3, 0x3b, 0x14, 0xa7, 0xba,
  0x0f, 0x83, 0xba, 0x03, 0xa0, 0x50, 0x02, 0xcd, 0x2d, 0xe1, 0x00, 0x12,

  0x3a, 0xa6, 0x2d, 0x9c, 0x56, 0xf9, 0xb2, 0xe1, 0xb4, 0x34, 0xa9, 0x9a,
  0xb9, 0xcf, 0xea, 0xbf, 0x9c, 0x97, 0x93, 0x94, 0xef, 0x88, 0x4d, 0x5a,
  0xd5, 0xb8, 0x57, 0x0b, 0xd8, 0x9e, 0xd8, 0x1b, 0x91, 0x67, 0xa4, 0x31,
  0x8f, 0x59, 0xf1, 0xf0, 0x60, 0x80, 0xbc, 0x8d, 0xdb, 0x66, 0xed, 0x07,
  0xed, 0x27, 0x18, 0x26, 0x76, 0x78, 0x31, 0x90, 0xdb, 0xab, 0xe8, 0x1d,
  0xc8, 0xf9, 0xad, 0xbd, 0x2b, 0x15, 0x58, 0xde, 0x80, 0xdb, 0x49, 0x66,
  0x2b, 0x56, 0x07, 0x9d, 0x3c, 0xd9, 0x94, 0x7c, 0x21, 0x69, 0x7e, 0x8a,
  0x44, 0x54, 0xdb, 0xd3, 0x86, 0xd3, 0x72, 0x62, 0xd8, 0x0d, 0x04, 0x24,
  0x2f, 0xe9, 0xa8, 0x83, 0xe4, 0xaa, 0xbc, 0x41, 0xe9, 0x5d, 0x41, 0xc6,
  0x89, 0x9b, 0x9c, 0x96, 0x55, 0x78, 0x7b, 0xc5, 0x00, 0x3c, 0x21, 0xc5,
  0x5f, 0xb0, 0x5b, 0x00, 0xba, 0x34, 0x9f, 0xc9, 0x9a, 0x9d, 0xf1, 0xbb,
  0x51, 0xb4, 0x1d, 0x45, 0xf6, 0xd3, 0x3d, 0x21, 0x35, 0xf0, 0x35, 0x73,


  0xc4, 0x73, 0xee, 0x17, 0xba, 0x65, 0xe8, 0x45, 0xea, 0xa4, 0x53, 0x18,
  0x53, 0x40, 0x51, 0x16, 0x39, 0xcb, 0x9c, 0x20, 0x9a, 0xc4, 0x67, 0x56,
  0x41, 0xb9, 0xcb, 0xf3, 0x3b, 0xce, 0xa0, 0xc4, 0x91, 0xc3, 0xe7, 0x21,
  0x81, 0x63, 0xa5, 0xa7, 0xac, 0x99, 0x7a, 0xbf, 0x9c, 0x65, 0xe9, 0x3c,
  0xda, 0xa7, 0x9c, 0x26, 0x8c, 0x68, 0x27, 0xf3, 0x36, 0x34, 0xed, 0x2c,
  0x34, 0x78, 0x2e, 0xf5, 0x33, 0x9c, 0x41, 0x5e, 0xb4, 0x80, 0x7a, 0x70,
  0xa7, 0xc2, 0x93, 0xa6, 0x3e, 0x6f, 0xd7, 0xc0, 0x0c, 0xd3, 0x4e, 0x18,
  0x8c, 0xd4, 0xec, 0x0a, 0x2b, 0xe1, 0x6b, 0x7a, 0x73, 0x92, 0xd8, 0x07,
  0x90, 0xfc, 0xca, 0x19, 0xbc, 0x41, 0x7b, 0x39, 0x89, 0xa6, 0x09, 0x80,
  0x00, 0x8b, 0x19, 0xad, 0xc8, 0xa3, 0x79, 0x71, 0x2e, 0x24, 0xf1, 0xc8,
  0x6d, 0xb9, 0x8a, 0xc8, 0xb8, 0x03, 0xfb, 0x58, 0x86, 0x27, 0x7d, 0x9d,
  0x69, 0xca, 0x2b, 0xcc, 0x0f, 0xde, 0xfe, 0xc6, 0x82, 0x2a, 0xd0, 0x58,
  0xc2, 0x6b, 0x98, 0xcd, 0xec, 0xef, 0xc7, 0x6f, 0x06, 0x37, 0x41, 0x57,
  0x12, 0xc3, 0x5d, 0xaf, 0xd3, 0x8b, 0x4c, 0x6d, 0x16, 0x61, 0xdd, 0xe5,
  0xd4, 0x6c, 0x1f, 0x32, 0x75, 0x6e, 0xd8, 0xa0, 0x28, 0x22, 0xc5, 0xca,
  0xcc, 0x35, 0x89, 0x4b, 0x5a, 0x91, 0x4b, 0xd7, 0x40, 0xd8, 0x6d, 0x3d,
  0xcf, 0x97, 0x1a, 0xa6, 0x1c, 0x24, 0x99, 0x64, 0x93, 0xce, 0xef, 0xe4,
  0x48, 0x56, 0xc3, 0x88, 0x03, 0x4e, 0xf3, 0xed, 0x14, 0x26, 0x7d, 0x4e,
  0x96, 0xd1, 0x56, 0x67, 0xf4, 0xc7, 0xbb, 0x7b, 0x98, 0xed, 0xe3, 0xdd,
  0x67, 0xdb, 0x6d, 0xa9, 0x3c, 0xaf, 0xb3, 0x21, 0xb2, 0x91, 0x1f, 0xd8,
  0xd1, 0x14, 0x6f, 0x48, 0xfe, 0xf2, 0x6c, 0x55, 0x39, 0x7f, 0x1e, 0xf5,
  0xba, 0x85, 0x83, 0xb2, 0xbe, 0x22, 0x74, 0xde, 0x40, 0xca, 0xd3, 0x6b,


  0xf2, 0x1e, 0x27, 0x36, 0x92, 0x58, 0xe2, 0x9d, 0x4a, 0xf1, 0xb2, 0x74,
  0xd2, 0xe4, 0x8d, 0xc0, 0x73, 0xd6, 0x02, 0x8f, 0xb5, 0xbd, 0x96, 0x55,
  0x73, 0x15, 0x25, 0x67, 0x70, 0xb4, 0x9b, 0xd2, 0x5b, 0x9e, 0x93, 0xbc,
  0xce, 0x8b, 0xbc, 0xbe, 0x22, 0xb2, 0x5f, 0x50, 0xd2, 0xc2, 0x65, 0x16,
  0x02, 0xa1, 0x18, 0x76, 0x64, 0x4c, 0x00, 0x36, 0xf7, 0x2b, 0x74, 0x30,
  0xa1, 0x8c, 0x60, 0xde, 0x77, 0xa9, 0x44, 0x94, 0x5e, 0xac, 0x40, 0xd0,
  0x74, 0xcb, 0xec, 0x6b, 0x15, 0xec, 0x3a, 0x05, 0xf7, 0x35, 0x0a, 0xa6,
  0xb6, 0x95, 0xc0, 0x52, 0xf4, 0x9a, 0xc8, 0xc5, 0xba, 0x83, 0x25, 0x5b,
  0x74, 0xb8, 0xa7, 0x63, 0xc3, 0x82, 0x5c, 0x4f, 0x7b, 0xe4, 0x76, 0x9b,
  0x9f, 0xfd, 0x60, 0x74, 0xd1, 0xd1, 0x73, 0xfb, 0xe3, 0xed, 0x87, 0x35,
  0x16, 0xde, 0xef, 0xe8, 0x66, 0x54, 0x64, 0x21, 0x11, 0x69, 0x38, 0xac,
  0xbe, 0xe0, 0x7f, 0xc4, 0x3d, 0xde, 0xc0, 0x12, 0x38, 0x7e, 0x73, 0x48,
  0x45, 0x2e, 0xae, 0xec, 0xd3, 0xcb, 0x2d, 0xd6, 0xca, 0x6b, 0xdb, 0x79,


  0x35, 0x93, 0x12, 0x85, 0x28, 0x10, 0xac, 0xa0, 0x19, 0x70, 0x12, 0x26,
  0xf2, 0xc9, 0x5d, 0xf2, 0x85, 0x6a, 0x73, 0x73, 0x6a, 0x25, 0x49, 0x17,
  0x61, 0x94, 0x9c, 0x64, 0xdc, 0x55, 0x6d, 0xf3, 0xcb, 0xcd, 0x48, 0x99,
  0xf6, 0xe6, 0x0b, 0xaf, 0x13, 0x45, 0xed, 0x1a, 0x36, 0x6e, 0xfe, 0x91,
  0xcc, 0x7a, 0x02, 0xdd, 0xe2, 0x6f, 0xca, 0x11, 0x70, 0xe1, 0x84, 0xe4,
  0xbc, 0xf4, 0x54, 0xde, 0x0a, 0x8e, 0x6c, 0x3b, 0x87, 0x74, 0xc9, 0x00,

  0xde, 0x54, 0x09, 0xd1, 0x5e, 0xbb, 0x2a, 0x73, 0x9b, 0x41, 0x19, 0x77,
  0x71, 0x27, 0xa0, 0x6e, 0xdc, 0xcb, 0xdd, 0x35, 0xbb, 0xe6, 0x19, 0xf1,
  0x54, 0xe0, 0x42, 0x33, 0x7a, 0x3e, 0xcc, 0x42, 0xb6, 0xb9, 0xcd, 0xaf,
  0x2f, 0x2f, 0xa3, 0x89, 0xae, 0x66, 0x0b, 0xe8, 0xe0, 0x69, 0xcd, 0x17,
  0xc6, 0xde, 0x82, 0xbe, 0x41, 0x72, 0xbe, 0xbf, 0x2a, 0xc6, 0xe9, 0xee,
  0x91, 0x67, 0xbc, 0x55, 0xbc, 0xf0, 0x0b, 0x0f, 0x7b, 0xe2, 0x1e, 0x20,
  0x03, 0xa1, 0x03, 0x72, 0x66, 0xe1, 0xa7, 0x36, 0xe8, 0x71, 0x91, 0x1a,
  0xca, 0xb8, 0x93, 0x04, 0xa3, 0x39, 0x95, 0x8a, 0x89, 0x31, 0x15, 0xf0,
  0xb0, 0x39, 0x9a, 0x0d, 0x4a, 0x61, 0x12, 0x75, 0x9c, 0xe2, 0x7d, 0x2c,


  0x44, 0xdb, 0x90, 0x4a, 0x26, 0x18, 0x26, 0x89, 0xb6, 0x5d, 0x12, 0xff,
  0x05, 0x8a, 0x94, 0xba, 0xbe, 0x71, 0x29, 0x59, 0x52, 0x7c, 0x44, 0x56,
  0x56, 0x5c, 0x4e, 0x0b, 0x2a, 0xaf, 0xc0, 0x34, 0xbc, 0x7e, 0xea, 0x5e,
  0x95, 0x7a, 0x37, 0x52, 0x05, 0x0b, 0xc2, 0x30, 0xa3, 0x1d, 0x5c, 0x12,
  0x2e, 0x15, 0x9b, 0x12, 0xdc, 0x19, 0x5e, 0x2e, 0x13, 0x6a, 0xe6, 0xb9,
  0xff, 0xe8, 0xf3, 0xcf, 0xa3, 0x0e, 0x3e, 0x86, 0xdd, 0x30, 0x34, 0x48,
  0xdb, 0xe4, 0xa0, 0x93, 0x07, 0x16, 0x04, 0x9f, 0xbe, 0x4e, 0x04, 0xa6,
  0x5e, 0xae, 0x12, 0x4d, 0x64, 0xe9, 0xab, 0xa1, 0x93, 0x17, 0xce, 0x97,
  0x05, 0x69, 0x15, 0xc2, 0xc5, 0xa0, 0x5c, 0x11, 0xd7, 0x58, 0xe4, 0x7d,
  0xf0, 0x90, 0x99, 0xa4, 0x69, 0x0b, 0x84, 0x88, 0x80, 0xc8, 0x4a, 0x5d,
  0x01, 0xf7, 0xb8, 0x35, 0x8a, 0x03, 0xca, 0x97, 0x38, 0xfb, 0x0f, 0x74,
  0xd5, 0x53, 0xe7, 0xbf, 0x99, 0x68, 0x06, 0xcc, 0x24, 0xb3, 0x38, 0x3c,
  0xec, 0xe8, 0xe8, 0x20, 0xa5, 0xb1, 0xff, 0xb1, 0xa0, 0x62, 0x5f, 0xea,
  0x88, 0x64, 0x86, 0xef, 0x0c, 0x07, 0xe8, 0x8b, 0xcb, 0xac, 0x09, 0x0b,
  0x54, 0xbd, 0xb2, 0x8e, 0x35, 0x83, 0x47, 0x6e, 0x83, 0x94, 0xd7, 0xbe,
  0x90, 0xe6, 0x1d, 0xf9, 0x85, 0x5e, 0x50, 0x6d, 0x20, 0xf4, 0x25, 0x27,
  0xdb, 0xbe, 0x60, 0x47, 0x0b, 0x97, 0x1b, 0x33, 0x87, 0xfa, 0x32, 0x8a,
  0x85, 0xe9, 0x7a, 0x59, 0x02, 0x9b, 0xb1, 0x69, 0x8c, 0x66, 0xed, 0xb8,
  0x37, 0x2a, 0x84, 0x2c, 0xfa, 0x9e, 0xec, 0x2f, 0x54, 0xe4, 0x79, 0x0c,
  0x8c, 0xe9, 0x85, 0xf5, 0x58, 0x4b, 0x4b, 0x2c, 0xaa, 0xd0, 0xa2, 0xf9,
  0xc4, 0x76, 0x42, 0xfb, 0x59, 0x10, 0x87, 0x30, 0x4f, 0x07, 0x56, 0x0f,
  0xbd, 0xeb, 0xed, 0x53, 0x78, 0xf6, 0x2e, 0xf7, 0xd2, 0x61, 0xc6, 0xf1,
  0x1e, 0x3b, 0xe8, 0x39, 0x3f, 0x84, 0x9b, 0x5a, 0xa7, 0x37, 0x2e, 0x45,
  0x37, 0x2e, 0x47, 0xeb, 0x74, 0x10, 0x1d, 0xa0, 0xac, 0xcb, 0x32, 0xe3,
  0x59, 0x02, 0x7e, 0x89, 0xb7, 0xf6, 0x05, 0x1c, 0x57, 0x4d, 0xb5, 0x9a,
  0x92, 0x5e, 0x09, 0xa3, 0x1c, 0x5f, 0x8a, 0x75, 0x6d, 0xd4, 0x30, 0x9b,
  0x5d, 0x31, 0x7a, 0xab, 0xe2, 0xcc, 0xb0, 0xc5, 0x02, 0x1c, 0xcb, 0x16,
  0x9e, 0xe0, 0x0a, 0x73, 0x9d, 0xc2, 0x30, 0xda, 0xef, 0x3b, 0x83, 0xb3,
  0xa5, 0xce, 0xff, 0xce, 0x5a, 0x99, 0x14, 0x78, 0x28, 0x8c, 0x26, 0x1c,
  0x1c, 0x19, 0x35, 0x76, 0x49, 0x5e, 0x51, 0x37, 0x6a, 0x16, 0xe5, 0x44,
  0x6f, 0x01, 0x9f, 0xf6, 0x6b, 0x9c, 0x58, 0x1c, 0x91, 0x1a, 0x57, 0x65,
  0x97, 0x2b, 0x12, 0x74, 0xd8, 0xa6, 0x2d, 0x85, 0xcd, 0xd6, 0x27, 0x96,

  0xf9, 0x12, 0x1d, 0xaf, 0x8c, 0x3d, 0x17, 0xb4, 0xef, 0x35, 0x6f, 0x6d,

  0x63, 0xc9, 0x85, 0xd9, 0xad, 0x66, 0x45, 0xb9, 0x28, 0x02, 0x1b, 0x66,
  0xd8, 0xd7, 0x5f, 0x11, 0x00, 0x2a, 0x65, 0xe5, 0xdc, 0xa2, 0x69, 0x66,
  0x2d, 0xef, 0x24, 0xbb, 0x08, 0x6c, 0x97, 0x0c, 0xf9, 0x8f, 0x24, 0x17,
  0x38, 0xa5, 0xb0, 0x51, 0x0e, 0xc0, 0x1d, 0x49, 0xc9, 0x13, 0xf3, 0x47,
  0x0a, 0x05, 0xc8, 0x55, 0x86, 0xb6, 0x82, 0x5d, 0xc1, 0x14, 0xba, 0xc3,
  0x01, 0x39, 0x57, 0xb5, 0x27, 0x1f, 0x4f, 0x59, 0x9a, 0x62, 0x0d, 0x18,
  0x21, 0x9c, 0xeb, 0x56, 0x05, 0x1c, 0x2e, 0xad, 0xb9, 0x2e, 0xae, 0x0e,
  0x1b, 0x75, 0x43, 0x04, 0xb0, 0x56, 0xfd, 0x57, 0x6b, 0xf0, 0x12, 0xeb,
  0x8b, 0xc0, 0xec, 0x01, 0x5f, 0xfc, 0x40, 0x3c, 0xa8, 0xd4, 0xf6, 0x54,
  0x18, 0x5a, 0xdb, 0xee, 0x18, 0x88, 0x86, 0xb8, 0x69, 0x78, 0x27, 0xed,
  0xfd, 0xa6, 0x30, 0xcd, 0x18, 0xb6, 0x9b, 0xc5, 0x51, 0xa8, 0x28, 0x1a,

  0x47, 0x77, 0xc4, 0xc2, 0x21, 0x5b, 0x06, 0x02, 0x85, 0xaa, 0x4a, 0x0d,
  0xbf, 0xfc, 0xeb, 0xf2, 0xb2, 0x17, 0x8e, 0x9b, 0x7b, 0xab, 0x19, 0x5b,
  0x21, 0x6c, 0xe6, 0x08, 0x3a, 0x1c, 0xbe, 0x4e, 0x64, 0x3e, 0x5f, 0x7c,
  0xd9, 0x1a, 0x50, 0x1b, 0x1c, 0xf9, 0xfd, 0x3b, 0x04, 0xbc, 0x69, 0x7a,
  0x99, 0xf7, 0x6e, 0x02, 0xef, 0x02, 0x7a, 0xdf, 0xd8, 0x9a, 0x92, 0xfa,
  0xaa, 0xcc, 0xe4, 0xe4, 0x0a, 0x58, 0xc0, 0x8e, 0x6f, 0x68, 0x2a, 0x41,
  0xd4, 0xc1, 0xde, 0x3f, 0x65, 0xc8, 0xf4, 0xff, 0x2c, 0xaf, 0x0a, 0xfa,
  0x07, 0x0d, 0x4f, 0xa3, 0x7f, 0xb1, 0xb7, 0x17, 0x9d, 0xf5, 0xfa, 0x03,
  0xc3, 0x54, 0x49, 0x08, 0x49, 0x81, 0x80, 0xc7, 0xd3, 0x5a, 0x06, 0xff,
  0x08, 0x65, 0xd0, 0x11, 0x3f, 0x64, 0x0a, 0xf6, 0x0a, 0xc4, 0x4a, 0xef,
  0x65, 0xce, 0xbe, 0x8e, 0x32, 0xc3, 0xdc, 0x4a, 0x06, 0x80, 0xa1, 0x45,
  0x72, 0x27, 0xfa, 0x17, 0xbe, 0x41, 0x99, 0x00, 0x77, 0x5f, 0xbc, 0xb8,
  0x5a, 0x5d, 0x66, 0xe0, 0x97, 0xcd, 0x6d, 0xb3, 0xf1, 0xa0, 0x55, 0xab,

  0x6f, 0x82, 0xd3, 0xba, 0x1a, 0x2f, 0xa5, 0x1d, 0xd5, 0x6a, 0x2d, 0xc5,
  0x81, 0x03, 0x2b, 0x48, 0xb5, 0xb7, 0xa9, 0x0e, 0xdd, 0x42, 0x51, 0x56,
  0x42, 0x07, 0xbc, 0x69, 0x02, 0x64, 0xe4, 0xa0, 0x53, 0xd6, 0xac, 0xe0,
  0x26, 0x9b, 0x7c, 0xf1, 0x25, 0xf9, 0xb3, 0x6e, 0xd1, 0x5f, 0x86, 0xb5,
  0x59, 0xda, 0xb8, 0x1d, 0xb4, 0x9b, 0x49, 0xbc, 0x45, 0x74, 0x07, 0x29,
  0xab, 0xfe, 0x61, 0xbd, 0xc2, 0x55, 0x6f, 0xc8, 0x8b, 0xb2, 0x5c, 0x3b,
  0x22, 0xed, 0x0a, 0x77, 0x30, 0xc4, 0xbe, 0x78, 0xc9, 0xec, 0x9c, 0xe2,
  0xed, 0xca, 0xf2, 0x99, 0x24, 0x9c, 0x80, 0xe1, 0xbb, 0x10, 0x03, 0x49,
  0x41, 0xbc, 0x95, 0x6d, 0x73, 0x95, 0x34, 0x5f, 0x0c, 0xb4, 0xae, 0x33,
  0xd2, 0x51, 0xcc, 0xad, 0x81, 0xaf, 0x21, 0xa8, 0x82, 0xfe, 0xfa, 0x47,
  0xfb, 0x3a, 0xfd, 0xc7, 0xdc, 0x62, 0x74, 0x6c, 0x58, 0xb3, 0x9a, 0xe3,
  0x0b, 0xfb, 0xc5, 0x1d, 0xa4, 0x1f, 0xd8, 0x30, 0xeb, 0xe6, 0x80, 0xf5,

  0xeb, 0x3f, 0x6e, 0xb6, 0xe2, 0x54, 0x88, 0x21, 0x71, 0x90, 0x6a, 0x56,
  0x06, 0xea, 0x2c, 0xe5, 0xe2, 0x4b, 0x94, 0x89, 0x66, 0xdf, 0x33, 0x71,
  0xd2, 0xb6, 0x13, 0x9d, 0xfb, 0x8f, 0x1b, 0x76, 0xf6, 0x3f, 0x6e, 0xb8,
  0xf9, 0xff, 0xb8, 0xe1, 0x56, 0xf0, 0xe3, 0xc6, 0x06, 0xf7, 0x57, 0x0e,
  0x0d, 0xe1, 0x9f, 0x7b, 0xe8, 0x9b, 0xfc, 0x51, 0xf7, 0x4d, 0xef, 0x93,
  0xde, 0x17, 0x37, 0x36, 0xd7, 0x6d, 0x9a, 0x4b, 0x0d, 0xc8, 0x2f, 0x3c,

  0x00, 0x62, 0xde, 0x40, 0x52, 0xaf, 0x64, 0x93, 0x74, 0x97, 0xdc, 0xae,
  0x20, 0xa2, 0x75, 0x17, 0x00, 0x76, 0xb9, 0x27, 0x68, 0xcb, 0x5d, 0xf3,
  0x42, 0xaf, 0x29, 0x8f, 0x45, 0x39, 0xb6, 0x01, 0x43, 0xc0, 0x5b, 0xce,
  0x42, 0x39, 0x64, 0x5f, 0x0f, 0xe4, 0xce, 0x7f, 0x37, 0x5f, 0xb0, 0x79,
  0xd7, 0xd2, 0x4f, 0x84, 0x51, 0x07, 0xb4, 0x5c, 0xa6, 0xe0, 0x7c, 0x15,
  0xa9, 0x83, 0x26, 0xdc, 0xc2, 0xbc, 0x71, 0xbd, 0x23, 0x03, 0x96, 0xbb,
  0xc8, 0xd1, 0xca, 0xd2, 0x2c, 0x6b, 0xce, 0x86, 0xe9, 0x0e, 0x49, 0x03,
  0x54, 0x3e, 0xa0, 0xc3, 0x64, 0x0d, 0xd3, 0x5c, 0x6c, 0xd6, 0x56, 0x10,
  0xb2, 0x8f, 0x32, 0x88, 0x30, 0x36, 0x69, 0xd0, 0xaa, 0xfe, 0x62, 0xa3,
  0xa2, 0xd6, 0xe0, 0xc9, 0x65, 0x65, 0xf4, 0xd7, 0x3f, 0x12, 0x6d, 0xad,
  0xcc, 0x69, 0xb9, 0x8b, 0x7a, 0x3b, 0x5c, 0xdc, 0x99, 0xc9, 0x6f, 0xfe,
  0x1c, 0xca, 0xb0, 0x2c, 0x6d, 0x36, 0xd3, 0xbc, 0x86, 0x4e, 0x82, 0x9a,
  0xdc, 0x5a, 0x1c, 0x9d, 0xde, 0x49, 0x7d, 0xe6, 0x8b, 0x18, 0x0c, 0x6a,
  0xb0, 0x10, 0x8f, 0xf3, 0xc2, 0x44, 0xfb, 0xe2, 0xf4, 0xdb, 0x3f, 0xea,
  0x00, 0x3f, 0x6e, 0xfc, 0x30, 0xe4, 0x9f, 0x02, 0x00, 0xe2, 0x20, 0x39,

  0xfd, 0x96, 0x88, 0xfb, 0xe7, 0x31, 0xb0, 0x75, 0x1f, 0xf8, 0x92, 0xff,
  0x02, 0xca, 0x5e, 0x37, 0xec, 0xb9, 0x97, 0x26, 0xf7, 0x45, 0x42, 0x2d,
  0xee, 0x51, 0x64, 0x8a, 0x8c, 0xd1, 0xe5, 0x92, 0x4a, 0x47, 0x15, 0xf2,
  0xa0, 0x61, 0xc8, 0x03, 0xe8, 0x95, 0x93, 0x12, 0xbe, 0x82, 0x26, 0xec,
  0x9d, 0x00, 0xec, 0xf6, 0xbf, 0x09, 0x7d, 0x11, 0x49, 0xdd, 0x89, 0x0e,
  0xdc, 0xce, 0x31, 0xd3, 0x7c, 0x13, 0xb5, 0x2e, 0xcc, 0x7d, 0x38, 0x8a,
  0x34, 0xc9, 0x71, 0x68, 0x75, 0xfc, 0x37, 0xe8, 0x63, 0x00, 0xe5, 0x23,
  0xd3, 0x8a, 0x1a, 0x6e, 0x72, 0x86, 0xd8, 0x82, 0x9b, 0xee, 0xc2, 0xdf,
  0x8d, 0xa8, 0x92, 0xa1, 0x97, 0x48, 0x08, 0x40, 0xa2, 0x92, 0x52, 0x86,
  0x74, 0x51, 0xce, 0x67, 0x12, 0x8d, 0x30, 0x94, 0xcf, 0x27, 0x6c, 0xdb,
  0xac, 0x1a, 0x55, 0x83, 0x36, 0x42, 0x22, 0x14, 0xf2, 0xd9, 0x18, 0x52,
  0x80, 0x84, 0x11, 0x25, 0xbd, 0x8f, 0xfb, 0x0f, 0x48, 0xe2, 0x09, 0x48,
  0xdf, 0x4c, 0x64, 0x31, 0xc9, 0xe0, 0x75, 0xd2, 0xa2, 0xfc, 0xa1, 0xf8,

  0x85, 0x23, 0x9e, 0x9b, 0xee, 0xb5, 0x41, 0x2a, 0x9b, 0x54, 0xe5, 0x13,
  0x2c, 0xe0, 0x37, 0x70, 0xa9, 0xe6, 0x0a, 0x39, 0x23, 0x7d, 0xcf, 0x90,
  0x8b, 0x90, 0xc6, 0x17, 0x6b, 0x73, 0x66, 0x68, 0x87, 0xc2, 0xdb, 0x96,
  0xfc, 0x4e, 0x3c, 0xc8, 0x5e, 0x6a, 0x0d, 0x56, 0x2f, 0xe7, 0x35, 0x0a,
  0x5e, 0xf8, 0x41, 0x52, 0x42, 0x87, 0x7b, 0x07, 0x5e, 0x17, 0x3b, 0xfe,
  0x59, 0x7c, 0x78, 0x1f, 0xd5, 0x4b, 0x66, 0x95, 0xd7, 0xb2, 0xfd, 0x6b,
  0xc6, 0xdf, 0xb7, 0xe3, 0x7f, 0x16, 0x01, 0xd2, 0x62, 0xa8, 0xab, 0xf8,
  0x67, 0xcf, 0xfd, 0x24, 0x70, 0x75, 0x9f, 0x3a, 0x27, 0x46, 0xcb, 0x7d,
  0x20, 0x99, 0x7e, 0x0c, 0xb3, 0xc5, 0x08, 0x3a, 0x11, 0xab, 0x7f, 0xc6,
  0x19, 0x42, 0xbc, 0x0e, 0xb3, 0x8d, 0x5d, 0xd3, 0x10, 0x1c, 0x59, 0xe8,
  0xaa, 0x5c, 0x10, 0x42, 0xf7, 0xec, 0xc0, 0xb5, 0x44, 0x66, 0x50, 0xa0,
  0xdc, 0x2f, 0xad, 0x72, 0x20, 0x0a, 0x61, 0x51, 0x7b, 0x0b, 0x00, 0x3f,
  0xf8, 0x14, 0xb8, 0xb1, 0x80, 0xf3, 0x7b, 0x3d, 0x7b, 0x37, 0xb7, 0x36,

  0xc5, 0xa1, 0x42, 0x1f, 0x4b, 0x11, 0xa6, 0x10, 0x07, 0x72, 0x4a, 0xc8,
  0x0f, 0xbc, 0xfc, 0x61, 0x44, 0xeb, 0x38, 0x90, 0xec, 0x06, 0xb9, 0x13,
  0x8c, 0xfc, 0x86, 0x44, 0x16, 0x35, 0x97, 0x19, 0xa5, 0xb1, 0x85, 0xf6,
  0x16, 0x1a, 0xc7, 0xde, 0xfe, 0xca, 0x60, 0x6c, 0x93, 0x22, 0x5b, 0x5d,
  0x6e, 0xc4, 0xe6, 0x17, 0xdb, 0x9b, 0x76, 0x69, 0xfd, 0xe6, 0x50, 0x1b,
  0x08, 0x4e, 0x43, 0x8f, 0x36, 0x67, 0x86, 0x7d, 0x6e, 0x0b, 0xca, 0x78,

  0x48, 0xb2, 0x21, 0x0e, 0x33, 0x0e, 0x89, 0xca, 0x78, 0x1d, 0x8c, 0xf2,
  0x93, 0x17, 0xb8, 0x9b, 0x0c, 0xde, 0xc5, 0x24, 0x9e, 0xce, 0x1b, 0x2a,
  0xd4, 0x42, 0x29, 0x1d, 0xc3, 0xb7, 0xd6, 0x07, 0x9e, 0x36, 0x1e, 0xb9,
  0x9e, 0x14, 0xc3, 0x41, 0x93, 0x1d, 0xf1, 0x83, 0x78, 0x9e, 0x8c, 0x75,
  0xaa, 0xf7, 0xe6, 0x17, 0x5b, 0x2c, 0xaf, 0x9c, 0x1f, 0xcd, 0xfb, 0xf6,
  0x66, 0xf2, 0x63, 0x1c, 0xd5, 0x20, 0xe1, 0x77, 0x3d, 0xfb, 0x40, 0x68,
  0xf6, 0xbe, 0x37, 0x92, 0x17, 0x93, 0x72, 0x76, 0xf7, 0x27, 0x44, 0x9c,
  0xe4, 0x95, 0x17, 0x3b, 0xf8, 0x51, 0x47, 0x65, 0xee, 0x1b, 0x08, 0xa3,
  0x98, 0xa3, 0xc2, 0x9f, 0x5f, 0xd2, 0xe3, 0x6a, 0x31, 0x6c, 0x26, 0xa3,

  0x91, 0x61, 0x44, 0xf5, 0x02, 0xed, 0x1a, 0xd7, 0x08, 0x16, 0x00, 0x98,
  0x6a, 0xa7, 0x2e, 0x41, 0xa0, 0x82, 0x3f, 0x47, 0x6d, 0x6b, 0x76, 0x3c,
  0xf2, 0xaf, 0xaa, 0x2f, 0xcc, 0x98, 0x87, 0x36, 0x45, 0x32, 0xc9, 0x22,
  0x3d, 0x14, 0xe8, 0x12, 0x33, 0x43, 0xf4, 0x00, 0x41, 0x3e, 0x9f, 0xe4,
  0x82, 0x6d, 0x3a, 0x2b, 0x5b, 0xb8, 0xcc, 0x0c, 0xd2, 0x63, 0xc4, 0x7b,
  0x1c, 0xfa, 0x12, 0x39, 0x87, 0x14, 0x1b, 0xc2, 0xef, 0xad, 0x01, 0x23,
  0x73, 0x1b, 0x1e, 0x09, 0xd0, 0xa2, 0xf0, 0x97, 0x41, 0xf2, 0x6c, 0x92,
  0x37, 0x0e, 0x17, 0x2e, 0xc8, 0xde, 0x60, 0x4b, 0xbf, 0x4e, 0x3e, 0x1f,
  0xd2, 0x73, 0x5e, 0x37, 0x71, 0xa1, 0xfb, 0x76, 0xe6, 0xc6, 0x40, 0xf4,
  0xc2, 0x21, 0xd2, 0x52, 0x23, 0xe5, 0x98, 0xb4, 0xb2, 0x49, 0x5a, 0x67,
  0x4f, 0x1f, 0xf3, 0x27, 0x79, 0x93, 0x6a, 0xbd, 0xf6, 0xce, 0xf3, 0xea,
  0xb2, 0xd8, 0x5a, 0x0b, 0xea, 0x5e, 0x04, 0xa0, 0x4a, 0x90, 0x72, 0x46,
  0xcd, 0x21, 0xb9, 0x04, 0x83, 0xa4, 0xa9, 0x51, 0x24, 0x2f, 0x1b, 0xd4,
  0x93, 0x3e, 0x7b, 0xea, 0x4d, 0x7a, 0x74, 0x8f, 0x85, 0xde, 0x65, 0xa4,
  0xb2, 0xc6, 0xee, 0x9a, 0x2c, 0xc5, 0x06, 0xf7, 0x92, 0x7c, 0x1c, 0x8c,
  0x24, 0x29, 0x8b, 0xb4, 0x5e, 0xc5, 0xfb, 0xae, 0x91, 0x7f, 0x09, 0xfe,
  0xa8, 0xa4, 0xd3, 0xfd, 0xf0, 0x5a, 0xa2, 0xf6, 0x4c, 0x24, 0x7d, 0x9f,
  0x27, 0xc1, 0x84, 0x7d, 0x3f, 0x5d, 0x53, 0xf0, 0xe0, 0x62, 0x55, 0x41,
  0xfa, 0xc8, 0x63, 0xac, 0x24, 0x68, 0x95, 0xaa, 0xe8, 0xe9, 0x6f, 0x0e,
  0xdf, 0xbe, 0x3f, 0x3c, 0x79, 0x78, 0xd7, 0xb8, 0x56, 0x23, 0xd2, 0xb5,
  0xaf, 0x79, 0xb0, 0x14, 0x1d, 0xe0, 0xb6, 0xe3, 0x41, 0x0f, 0x90, 0x4d,
  0x10, 0x6d, 0x20, 0x60, 0x9b, 0x6e, 0xae, 0x36, 0x95, 0x0c, 0x13, 0x69,
  0x51, 0x6a, 0x48, 0x1c, 0xd3, 0x8d, 0x8b, 0x3c, 0x24, 0x2e, 0xee, 0x65,
  0xed, 0xa7, 0xb5, 0xf4, 0xec, 0xdd, 0xd0, 0xf7, 0xe9, 0xf5, 0x0d, 0x29,
  0x1d, 0xb2, 0x28, 0x21, 0x11, 0x2a, 0xb7, 0xa8, 0x26, 0x36, 0xe3, 0x6a,
  0xc9, 0x00, 0xdb, 0x33, 0x11, 0x66, 0x2d, 0xa7, 0x5b, 0x79, 0x71, 0xe1,
  0x15, 0x4f, 0x74, 0x23, 0x7b, 0x2f, 0x5f, 0xf6, 0x03, 0x2e, 0x7c, 0x4a,
  0xf8, 0xeb, 0x4e, 0x3d, 0x12, 0xb6, 0xd1, 0x71, 0xf7, 0x61, 0x53, 0x32,
  0x1a, 0xc9, 0x0b, 0x99, 0x5b, 0x7c, 0x57, 0x19, 0x7a, 0xcc, 0x83, 0x8e,
  0x51, 0x25, 0x17, 0x0d, 0xc9, 0xc7, 0x47, 0xef, 0xb0, 0x5d, 0x67, 0x87,
  0xe3, 0xb1, 0xc5, 0x02, 0x91, 0x0c, 0x9f, 0xc0, 0x18, 0x43, 0xb0, 0xcf,

  0xeb, 0x8a, 0x35, 0x72, 0xb9, 0x61, 0x92, 0xcb, 0xaf, 0x9c, 0xe3, 0x7c,
  0xb5, 0x30, 0xf7, 0xc5, 0x28, 0xbc, 0x33, 0x8a, 0x0f, 0x73, 0x04, 0xb6,
  0x4b, 0x78, 0xc4, 0xb9, 0x54, 0x91, 0xc2, 0x61, 0x83, 0xfe, 0x50, 0xf0,
  0x33, 0xd6, 0x52, 0x96, 0x54, 0xa3, 0xd6, 0x1e, 0x68, 0xf9, 0x20, 0xea,
  0xfb, 0xd9, 0x18, 0x1f, 0x9f, 0x1f, 0x25, 0x87, 0xef, 0xcf, 0xbf, 0xd9,
  0xe0, 0x0d, 0xee, 0xe2, 0x1f, 0xc1, 0x53, 0x4f, 0x0d, 0xc0, 0x25, 0x6d,
  0xda, 0x16, 0x53, 0x73, 0xe9, 0x62, 0x44, 0x53, 0xf2, 0xbe, 0x39, 0x5a,
  0x73, 0x4a, 0x4f, 0x46, 0x4f, 0xba, 0xa7, 0xd4, 0xdf, 0xce, 0x00, 0x88,
  0xf4, 0x80, 0xb4, 0xdf, 0xd6, 0xbd, 0x13, 0x8a, 0x17, 0xa4, 0x7b, 0x4a,
  0x9c, 0xda, 0x71, 0xfd, 0xb5, 0x24, 0xad, 0x19, 0x76, 0x7f, 0x04, 0x0e,
  0xd5, 0x62, 0xc3, 0xda, 0x68, 0x38, 0xa0, 0xfd, 0x2d, 0x7c, 0x9c, 0x38,
  0x79, 0x39, 0x0e, 0x6a, 0x4e, 0x2c, 0xad, 0x66, 0x16, 0x13, 0x20, 0xa2,
  0x1f, 0x6a, 0x8a, 0x1f, 0x25, 0x99, 0x1b, 0x12, 0x18, 0x3d, 0x2c, 0xa1,
  0xcc, 0xe5, 0xf1, 0xc5, 0x9b, 0x2d, 0xc0, 0x79, 0x8e, 0x2e, 0x5e, 0x16,

  0xe6, 0x7f, 0x6d, 0xd6, 0x63, 0x1c, 0xd0, 0x9f, 0xf6, 0x55, 0x12, 0x45,


  0x5e, 0xf0, 0x9f, 0x71, 0x7a, 0x27, 0x91, 0x5b, 0x95, 0x73, 0xf6, 0x20,
  0xca, 0x0b, 0x9c, 0xbc, 0xc9, 0xb5, 0x8e, 0xb6, 0x06, 0x2f, 0x45, 0xf4,
  0x13, 0xe6, 0x09, 0xb7, 0x99, 0x09, 0xdb, 0x32, 0x6e, 0x8d, 0xb7, 0x13,
  0xeb, 0x6a, 0x3d, 0x47, 0x2c, 0x11, 0xe3, 0x45, 0x8a, 0x58, 0x03, 0xa4,
  0xe1, 0x20, 0x52, 0x41, 0xe4, 0xec, 0x6e, 0x6f, 0x68, 0x31, 0x81, 0x51,
  0x4f, 0x6f, 0x66, 0x3d, 0xe0, 0xa3, 0xb4, 0x04, 0xe4, 0x8e, 0xd9, 0x52,
  0x84, 0x97, 0xdf, 0xbf, 0xf2, 0x3a, 0xb1, 0x69, 0x72, 0x5a, 0xc2, 0xc4,
  0x22, 0xb9, 0xe4, 0x7d, 0x78, 0xc1, 0x1e, 0xee, 0x29, 0x9a, 0x9f, 0x52,
  0x34, 0x75, 0x96, 0x65, 0x4b, 0xdb, 0xfb, 0x22, 0x47, 0x8d, 0x25, 0x92,
  0x73, 0xcc, 0x3d, 0xe5, 0xbe, 0x23, 0x8b, 0xd0, 0xb3, 0x64, 0xb5, 0x1e,
  0xe6, 0x1c, 0x0e, 0x94, 0x8a, 0x3a, 0x4b, 0x52, 0xec, 0x76, 0xef, 0xd9,
  0xa3, 0xcf, 0x8d, 0x60, 0xbe, 0x43, 0xf2, 0x77, 0x0b, 0xa4, 0x9e, 0xc1,
  0xdd, 0xfb, 0x81, 0x5b, 0xc5, 0xaa, 0xd1, 0x94, 0x5e, 0x01, 0xd3, 0x49,
  0x6a, 0x32, 0x23, 0xe0, 0xa0, 0x12, 0x68, 0x8b, 0x10, 0x89, 0xcc, 0x6c,
  0xa2, 0x7a, 0x7b, 0xb0, 0x63, 0x94, 0x4b, 0x88, 0xdd, 0xe2, 0xcc, 0xb0,

  0x91, 0x47, 0xc3, 0x46, 0xb9, 0xa3, 0x5e, 0x9b, 0x83, 0xe4, 0xdd, 0xd1,
  0xf9, 0xbb, 0x41, 0x32, 0x3e, 0x3f, 0x7d, 0xd7, 0x03, 0xb5, 0xdb, 0x30,
  0x48, 0x13, 0xed, 0x99, 0xa6, 0xa9, 0xf0, 0xad, 0x6c, 0xc1, 0x70, 0x22,
  0x03, 0x9a, 0x19, 0x4f, 0x1d, 0x45, 0x6e, 0xf4, 0x00, 0x1c, 0xbd, 0xdd,
  0x02, 0xd9, 0x18, 0xf9, 0xb0, 0x76, 0x61, 0x7c, 0xec, 0x0f, 0xa0, 0x10,
  0xa2, 0x45, 0x5a, 0xae, 0x65, 0xf3, 0x98, 0xad, 0xb1, 0xd8, 0xc8, 0xf5,
  0xef, 0xda, 0x9c, 0x68, 0x49, 0x48, 0x0f, 0x3c, 0x2d, 0xa7, 0xe4, 0xd6,
  0x2e, 0x65, 0xd8, 0x90, 0xdc, 0x86, 0xa2, 0xc0, 0x6c, 0x98, 0xeb, 0x06,
  0xef, 0xb1, 0x03, 0x5c, 0xbb, 0x87, 0x7e, 0x8d, 0x2e, 0xb4, 0x3d, 0xf2,

  0x12, 0x78, 0x92, 0xba, 0x5c, 0x64, 0xec, 0xe6, 0x87, 0x23, 0x48, 0xf9,
  0x13, 0xb7, 0xf8, 0x05, 0xd2, 0x78, 0x0c, 0x0d, 0xc9, 0x62, 0x42, 0xd2,
  0x29, 0x6f, 0x5a, 0x38, 0x19, 0xad, 0x43, 0xe0, 0x73, 0xc9, 0x8c, 0x99,
  0xda, 0x00, 0x6c, 0x73, 0x53, 0x67, 0xe5, 0x81, 0x45, 0xb6, 0x99, 0xf7,
  0x5e, 0x97, 0xc9, 0x10, 0x24, 0x4f, 0x94, 0xb3, 0x50, 0x82, 0x4a, 0x0b,
  0x08, 0x48, 0x6b, 0xa0, 0xa0, 0x4a, 0xf8, 0xdd, 0xa5, 0xcf, 0xe4, 0x29,
  0x8d, 0x84, 0x07, 0xac, 0x00, 0x6c, 0x60, 0xee, 0xca, 0x79, 0xf5, 0xcc,
  0x39, 0x42, 0xb3, 0xea, 0x72, 0xdd, 0x0e, 0xbe, 0x4d, 0xd7, 0x81, 0x27,
  0x6a, 0x5b, 0xe2, 0x3a, 0xf6, 0x75, 0xb0, 0x5a, 0xd6, 0xb6, 0x85, 0xbc,
  0x57, 0x79, 0x91, 0x06, 0xf0, 0xe2, 0xbb, 0x44, 0x4a, 0x30, 0xc0, 0xfe,
  0xe2, 0xf8, 0x69, 0x49, 0xf2, 0xbe, 0x60, 0x58, 0x21, 0xf6, 0x24, 0x15,
  0x48, 0x7c, 0x98, 0xd9, 0x9d, 0x23, 0x44, 0x3d, 0x4a, 0xd8, 0x82, 0xdc,

  0x9a, 0x95, 0x50, 0xe8, 0x69, 0xd1, 0x21, 0x8a, 0x2b, 0x9c, 0xc8, 0xc8,
  0x23, 0x50, 0x49, 0x23, 0x83, 0x49, 0xf8, 0x8a, 0x8b, 0xbb, 0x3a, 0x2b,
  0x05, 0xc6, 0x4f, 0xb0, 0xd0, 0x33, 0xff, 0xd8, 0x98, 0xa3, 0xc1, 0xfe,
  0x71, 0x8c, 0xa0, 0x61, 0xa8, 0x9d, 0x16, 0x62, 0x92, 0xac, 0x36, 0x9a,
  0x23, 0x5e, 0x08, 0x9e, 0xd1, 0xaa, 0x98, 0x53, 0x7a, 0x78, 0x1b, 0x28,
  0x48, 0x77, 0x72, 0xb4, 0x06, 0x80, 0xd2, 0xc7, 0x15, 0x6a, 0x91, 0x64,
  0x1b, 0xad, 0xa5, 0xbd, 0xba, 0x5e, 0xdc, 0x07, 0x56, 0x28, 0xde, 0xd1,
  0xc1, 0xd5, 0x59, 0xdd, 0x29, 0x16, 0xcf, 0x8b, 0x9c, 0xa0, 0xe4, 0xca,
  0x6a, 0x87, 0xca, 0x14, 0x09, 0x87, 0x35, 0x31, 0x12, 0x52, 0x33, 0x51,
  0x23, 0x0e, 0x0e, 0xd5, 0xe5, 0xc0, 0x40, 0xcc, 0xd0, 0xa3, 0x48, 0x6d,
  0xa0, 0xa0, 0xec, 0x5b, 0x4c, 0x2d, 0xec, 0xed, 0x28, 0x89, 0xb5, 0x0b,
  0x95, 0x5c, 0x10, 0xe4, 0x3a, 0xb6, 0x35, 0x32, 0xed, 0x5d, 0xad, 0xdd,
  0xa7, 0x70, 0xb0, 0xd0, 0xf8, 0x36, 0xeb, 0xde, 0x4a, 0x6e, 0x6d, 0xfc,
  0x05, 0x35, 0xdf, 0xec, 0x8a, 0x64, 0x85, 0xb4, 0xef, 0x26, 0x2c, 0x87,
  0xf6, 0xc7, 0xea, 0xac, 0x59, 0x2d, 0x43, 0x39, 0x7f, 0x7c, 0xe6, 0x86,
  0x14, 0xfc, 0x76, 0xda, 0x6a, 0x89, 0x8a, 0x7a, 0x93, 0x24, 0x58, 0x1d,

  0x7b, 0x00, 0x4e, 0xf4, 0x77, 0x6f, 0x23, 0x14, 0x81, 0x40, 0xba, 0xf7,
  0xe1, 0xc0, 0xa8, 0x78, 0xa1, 0x06, 0xf2, 0x1b, 0x46, 0xbb, 0xd8, 0x45,
  0x07, 0x67, 0x6d, 0xd8, 0x23, 0xf5, 0x4e, 0xfa, 0xae, 0xd9, 0x94, 0xd6,

  0x6c, 0xc3, 0x3b, 0xa3, 0x75, 0x28, 0x52, 0xb2, 0x4e, 0xe7, 0xb3, 0xf5,
  0x9e, 0xfa, 0x32, 0xd1, 0x1d, 0xde, 0xfe, 0x2c, 0x5c, 0xba, 0x8c, 0xb5,
  0x6e, 0x56, 0x7b, 0xcf, 0xf7, 0x47, 0x7b, 0x4f, 0x3f, 0x1f, 0xed, 0xa1,
  0xd3, 0xb9, 0x37, 0x3b, 0xd7, 0x91, 0xdb, 0x1b, 0x28, 0xd2, 0xef, 0x3d,

  0xe9, 0x87, 0x68, 0xe7, 0x2f, 0x2c, 0xee, 0x46, 0xf4, 0xdc, 0x88, 0xbb,
  0xae, 0x05, 0xdf, 0x58, 0x18, 0xb5, 0x26, 0x2f, 0x82, 0x38, 0xc8, 0xd0,
  0x65, 0x13, 0xa9, 0xb8, 0x5f, 0xe6, 0x44, 0x47, 0x0a, 0x9c, 0xec, 0x66,
  0x65, 0x5b, 0xc6, 0x6a, 0x07, 0x2c, 0xba, 0x9d, 0xf1, 0x19, 0x29, 0x53,
  0x9f, 0x8a, 0x1e, 0xe9, 0xf8, 0xba, 0xfd, 0xfe, 0xbf, 0x60, 0xf3, 0x29,

  0x8f, 0x7c, 0x95, 0x3b, 0xef, 0x05, 0x7b, 0xa6, 0xd4, 0x26, 0x81, 0xcf,
  0x1d, 0x18, 0x7f, 0x5d, 0x98, 0x38, 0x41, 0xfd, 0x62, 0xf6, 0xd7, 0x01,
  0x5a, 0xf3, 0x84, 0xcc, 0x91, 0x07, 0xeb, 0xe8, 0x27, 0x21, 0x61, 0x4c,
  0x4d, 0x41, 0xea, 0x22, 0xf9, 0xc9, 0x6b, 0x10, 0x58, 0xcc, 0xa1, 0x75,
  0x38, 0x7a, 0xed, 0x0f, 0x7f, 0x70, 0x1c, 0x69, 0x8c, 0xe4, 0x17, 0xee,
  0xce, 0xf4, 0x64, 0xc0, 0x78, 0xcb, 0x08, 0x78, 0x71, 0xa3, 0x97, 0x8d,
  0x83, 0xbf, 0xc0, 0x37, 0xfc, 0xd3, 0xf0, 0x2f, 0xe6, 0x9f, 0x3f, 0x6d,
  0xe8, 0xad, 0x66, 0x64, 0x46, 0x2d, 0x13, 0x71, 0xe0, 0xb7, 0x38, 0x9e,
  0x41, 0xbb, 0x6b, 0x39, 0xb4, 0x82, 0xf3, 0x97, 0x67, 0x7c, 0x11, 0x2b,
  0x8e, 0x79, 0x63, 0x9d, 0xc4, 0x88, 0xa0, 0xd6, 0x13, 0x07, 0x67, 0xa4,
  0x67, 0xa6, 0x13, 0xbb, 0x97, 0xde, 0x3b, 0x03, 0x97, 0xd2, 0x70, 0xc3,
  0x1c, 0x20, 0x35, 0xea, 0xed, 0x25, 0xf9, 0x57, 0x18, 0x90, 0x64, 0x44,
  0xd5, 0x86, 0xac, 0x4b, 0x4b, 0x47, 0x79, 0x02, 0x75, 0x34, 0x44, 0x62,
  0xaf, 0xc3, 0x8d, 0x99, 0xd3, 0x40, 0xe0, 0xcc, 0xb9, 0x24, 0xa2, 0x51,

  0x18, 0xdd, 0x82, 0xec, 0x14, 0xc5, 0x73, 0xaf, 0xf2, 0xfa, 0x23, 0x2d,

  0x4e, 0xaa, 0x7b, 0xbc, 0x0c, 0x21, 0xcc, 0xe7, 0x33, 0xab, 0xf5, 0xdd,
  0x29, 0x62, 0x99, 0x2d, 0xdb, 0xf6, 0x76, 0xd6, 0x49, 0x07, 0x3d, 0x73,
  0x45, 0xb6, 0x89, 0x82, 0x2e, 0xca, 0x63, 0x55, 0x16, 0xc7, 0x02, 0xed,
  0xa4, 0xa9, 0x49, 0x2d, 0xe5, 0x99, 0x51, 0x74, 0x2d, 0x75, 0x78, 0xc8,
  0x7c, 0xc9, 0x16, 0xfd, 0x80, 0xa4, 0xdf, 0x76, 0x57, 0x6a, 0x51, 0xcb,
  0xb1, 0x34, 0xf7, 0xfd, 0x32, 0x28, 0xa5, 0xce, 0x49, 0x2b, 0x98, 0x55,
  0x66, 0x0e, 0xdc, 0x75, 0x00, 0xc0, 0x2c, 0x8a, 0x00, 0x44, 0x81, 0x5e,
  0xd5, 0xe8, 0x3e, 0x8b, 0xda, 0x0a, 0x92, 0x97, 0xec, 0xd4, 0x51, 0xd4,
  0xd0, 0xb3, 0x2b, 0xb6, 0xc6, 0xc6, 0xd3, 0x9f, 0x60, 0xd8, 0x54, 0x97,
  0x73, 0x53, 0x90, 0x6b, 0xa9, 0x0e, 0x0d, 0x1a, 0x4c, 0x7e, 0x11, 0xc3,
  0x5c, 0xf7, 0x84, 0xea, 0xfe, 0x6e, 0xe8, 0x4a, 0xa9, 0x3f, 0xe6, 0xbc,
  0xc9, 0xc3, 0x7c, 0x79, 0x3f, 0x98, 0x2a, 0x1d, 0x9b, 0xe2, 0xc8, 0xb7,
  0xf8, 0x8a, 0x95, 0x30, 0xf5, 0xea, 0xf2, 0x12, 0xa0, 0x48, 0x61, 0x46,
  0x1e, 0xd7, 0x29, 0x4a, 0xc5, 0x80, 0x74, 0xa8, 0x31, 0xbc, 0x1c, 0x53,
  0xd7, 0xed, 0x70, 0x15, 0x91, 0xc2, 0x71, 0x1c, 0xd4, 0x7f, 0x2f, 0x70,
  0xc2, 0x28, 0x39, 0x96, 0xfb, 0xed, 0x14, 0x99, 0x2a, 0x1b, 0xea, 0x3c,

  0xbb, 0x4c, 0x90, 0x2c, 0xb0, 0x34, 0xc8, 0x7c, 0xb5, 0x0c, 0xb1, 0x5e,
  0xc3, 0xfb, 0x7a, 0xf2, 0x5f, 0x85, 0x03, 0x92, 0x8f, 0xcd, 0x82, 0x1a,
  0x52, 0x18, 0x89, 0x21, 0x5c, 0x19, 0x83, 0xb3, 0xb2, 0xa0, 0x86, 0x3e,
  0x76, 0x51, 0x57, 0x6a, 0x5e, 0x60, 0x37, 0xd6, 0xf9, 0x05, 0x1c, 0x1f,
  0xf4, 0xb5, 0xa5, 0xc7, 0xa3, 0xfd, 0xe0, 0x60, 0xeb, 0xf9, 0x70, 0x3a,
  0x9d, 0x0e, 0xa1, 0x07, 0xbc, 0x60, 0xf5, 0x64, 0x47, 0x94, 0x83, 0xb8,
  0xe2, 0x34, 0xce, 0x64, 0xb7, 0x5f, 0xbe, 0x7c, 0x29, 0x7a, 0xcc, 0xf9,
  0x55, 0x47, 0xa1, 0xb0, 0x70, 0x83, 0xa2, 0x4d, 0x45, 0x3b, 0x05, 0xd4,
  0x57, 0xab, 0x86, 0x68, 0x95, 0x79, 0x86, 0x32, 0x5f, 0x5b, 0x1b, 0xdb,
  0xc1, 0x84, 0x2e, 0xcd, 0x89, 0x0c, 0x5c, 0x4a, 0xa2, 0x19, 0x3c, 0x38,
  0x9a, 0x25, 0x77, 0xb4, 0xc2, 0x8b, 0x32, 0x76, 0xb7, 0x05, 0x37, 0xcf,
  0xd5, 0x07, 0x6e, 0xd4, 0x19, 0xd6, 0xb1, 0x34, 0x5e, 0x1d, 0x05, 0x9f,
  0x4d, 0x73, 0xc9, 0xff, 0x4a, 0xe5, 0x5b, 0xdd, 0xb1, 0xef, 0x39, 0x0f,
  0xd9, 0xea, 0xf6, 0x91, 0x3c, 0xed, 0x3d, 0x92, 0x38, 0x9f, 0x02, 0xe2,
  0x01, 0xed, 0x7c, 0xb2, 0xf5, 0x12, 0x98, 0xd2, 0xd4, 0x83, 0x02, 0x77,
  0xe2, 0xe5, 0x15, 0xe5, 0x70, 0xcd, 0xcd, 0x01, 0x99, 0x59, 0xd7, 0xe0,
  0x02, 0xdc, 0x98, 0x77, 0x7c, 0xb2, 0x73, 0x7e, 0x32, 0x0e, 0x32, 0xdd,

  0xef, 0xc8, 0x65, 0x0c, 0xd7, 0x70, 0xdb, 0xe1, 0xc9, 0x5b, 0x04, 0xb4,
  0x7f, 0x91, 0x40, 0x96, 0xc2, 0xf9, 0x0b, 0x51, 0xb4, 0xab, 0x55, 0xa1,
  0x45, 0x30, 0xce, 0x65, 0x5b, 0x64, 0x05, 0x40, 0x44, 0x48, 0x88, 0xe3,
  0x0a, 0x20, 0x13, 0xb6, 0x4e, 0xde, 0x1e, 0x9e, 0x53, 0x5d, 0x4b, 0x23,
  0x79, 0x1e, 0x17, 0xe5, 0x3c, 0xf4, 0x8c, 0xdf, 0x58, 0x4c, 0x1a, 0x44,
  0x6d, 0xd2, 0xa9, 0xeb, 0x6e, 0xa5, 0x9a, 0x3a, 0x1f, 0x5f, 0xad, 0x94,
  0xb7, 0x6e, 0xfb, 0xcd, 0x96, 0x8a, 0x74, 0xe8, 0xd2, 0x7c, 0xf7, 0x34,
  0xf6, 0xa2, 0xa7, 0xc1, 0x1b, 0x10, 0x3d, 0x91, 0x77, 0xc2, 0xcb, 0x65,
  0x9b, 0x2d, 0xe9, 0xc2, 0x77, 0x39, 0x2f, 0x2f, 0x73, 0x43, 0xdf, 0x02,
  0xff, 0x2d, 0xc5, 0x25, 0x12, 0x85, 0x0a, 0xdc, 0xa4, 0xbc, 0x39, 0x54,
  0x7b, 0xbd, 0x02, 0x04, 0x44, 0x0b, 0xc1, 0x9c, 0x2f, 0x09, 0x49, 0x0a,

  0xbb, 0xa9, 0xd2, 0xd9, 0x44, 0x4b, 0x1f, 0xc3, 0xca, 0x42, 0xe2, 0x31,
  0xf9, 0xd4, 0x18, 0x08, 0xd3, 0xbb, 0x11, 0xd7, 0x00, 0xd6, 0xed, 0xc4,
  0xda, 0xbc, 0x05, 0x41, 0x6c, 0x1d, 0xa4, 0x14, 0xb5, 0x8f, 0x16, 0xff,
  0xc8, 0x1a, 0xd7, 0xfa, 0xe1, 0x9f, 0xb6, 0x84, 0xc7, 0xd7, 0x64, 0x91,
  0x5d, 0x06, 0x42, 0xd7, 0x61, 0x10, 0x0d, 0xba, 0xa0, 0xe4, 0xae, 0x05,
  0x11, 0xb9, 0x86, 0xb8, 0x5f, 0x5d, 0xa7, 0x89, 0xf7, 0x6c, 0x10, 0x6d,
  0xb0, 0x32, 0xe8, 0xf6, 0x2c, 0xa9, 0xc2, 0x4e, 0x05, 0x2d, 0x5c, 0x38,
  0x0b, 0x3e, 0xd5, 0x19, 0xee, 0x6b, 0x23, 0xf5, 0x2d, 0x76, 0x4b, 0x07,
  0x3e, 0xae, 0xd5, 0x2c, 0x87, 0xf3, 0x71, 0x28, 0x08, 0x75, 0x43, 0x6d,
  0xba, 0x6f, 0xe2, 0x46, 0x0e, 0x6b, 0xb1, 0xe7, 0xae, 0xbd, 0x06, 0x5f,
  0x0f, 0xd6, 0x01, 0x33, 0x9b, 0xa5, 0x4a, 0xc0, 0x63, 0x1a, 0xa0, 0xff,
  0x8f, 0x4d, 0xd7, 0xee, 0x6d, 0x14, 0xfa, 0x21, 0x5c, 0x8b, 0xdf, 0x0e,
  0x7a, 0xbc, 0x8b, 0x3d, 0x0d, 0xdc, 0x6c, 0x39, 0x5c, 0x29, 0xd5, 0xde,
  0x61, 0x7c, 0x1e, 0xab, 0x5b, 0x3f, 0x9f, 0x6f, 0x8e, 0x0e, 0x5f, 0xf5,
  0xa2, 0x97, 0x7c, 0x0a, 0x5c, 0x79, 0xeb, 0xeb, 0x9b, 0x64, 0xdc, 0xd5,
  0x67, 0x25, 0x6e, 0x92, 0x14, 0x87, 0xa3, 0x84, 0xca, 0x10, 0x35, 0x19,
  0x30, 0x5b, 0xd0, 0xbc, 0xb0, 0xb7, 0xbb, 0x4d, 0xaf, 0x67, 0xc4, 0xcf,
  0x3e, 0x10, 0x87, 0x35, 0xa9, 0xca, 0x5c, 0x53, 0xe5, 0x11, 0xf2, 0x25,
  0x08, 0x79, 0x5e, 0x4e, 0xca, 0x8b, 0x8b, 0x35, 0x51, 0x41, 0x06, 0x07,
  0x46, 0xed, 0x13, 0xd3, 0xcb, 0x06, 0x6d, 0x23, 0xbd, 0x37, 0x61, 0xf0,
  0xe8, 0xca, 0x5c, 0xb6, 0x0d, 0x49, 0xc6, 0x42, 0xd7, 0xd2, 0xe0, 0x6e,
  0xb4, 0x02, 0x08, 0x6a, 0x30, 0xa8, 0x85, 0x87, 0x6a, 0x7c, 0xf6, 0xc6,
  0x68, 0x96, 0x90, 0x6d, 0xd4, 0x62, 0x76, 0xfd, 0x1f, 0xff, 0xfc, 0xcb,
  0x4f, 0x91, 0x76, 0x35, 0xe8, 0xe7, 0x78, 0xc5, 0x25, 0x85, 0xe6, 0x79,
  0x6d, 0x5c, 0x60, 0x1b, 0x83, 0x70, 0xa6, 0x09, 0x07, 0x34, 0x9a, 0x3a,
  0x9b, 0x5f, 0x78, 0x78, 0x4b, 0xa1, 0x58, 0xac, 0xdd, 0x07, 0xd1, 0x7d,
  0x94, 0x2a, 0xc0, 0xb9, 0x64, 0x97, 0xda, 0x36, 0xa0, 0xe5, 0x9b, 0xcb,
  0x97, 0xb6, 0xb0, 0xee, 0x72, 0x12, 0x01, 0x7a, 0x98, 0xeb, 0xcb, 0xe6,
  0x57, 0x32, 0x31, 0x01, 0x1e, 0x5b, 0x47, 0xa7, 0xcf, 0x95, 0xaf, 0x0c,
  0xa5, 0xde, 0x0d, 0xb3, 0xbb, 0x6c, 0x62, 0x38, 0x44, 0xad, 0x80, 0x0f,
  0xc3, 0x45, 0x9d, 0xbc, 0x58, 0x18, 0x22, 0xcf, 0x7b, 0xa0, 0x3a, 0xbe,
  0xa1, 0xd7, 0x8c, 0x11, 0x2d, 0xef, 0x59, 0xf8, 0xea, 0xcb, 0xb2, 0x32,
  0x5b, 0xb4, 0x90, 0x32, 0x5c, 0x29, 0x45, 0x6e, 0xbb, 0x32, 0x50, 0x58,
  0x12, 0xb8, 0x03, 0x08, 0x3f, 0x95, 0xca, 0xa9, 0x3c, 0x20, 0x4e, 0x51,
  0x0b, 0x67, 0x2b, 0xa3, 0x39, 0x9a, 0xa9, 0x1b, 0xfb, 0x1a, 0x36, 0x3d,
  0xf9, 0x05, 0x99, 0xa2, 0xb8, 0xc8, 0x90, 0x5e, 0x89, 0xc2, 0x07, 0xa8,
  0xf0, 0x10, 0x0b, 0xcb, 0xf0, 0x1c, 0x7f, 0x45, 0xb6, 0xcb, 0xb5, 0xff,
  0x49, 0x41, 0x44, 0x09, 0xf7, 0x55, 0xa6, 0xcf, 0x17, 0xda, 0xa6, 0xae,
  0x52, 0x91, 0x46, 0xae, 0xcd, 0xe7, 0x53, 0x5f, 0x3f, 0xf6, 0x1a, 0x0f,
  0x04, 0x97, 0x12, 0x4d, 0xac, 0xe5, 0x58, 0x7c, 0xe0, 0x58, 0x94, 0x1f,
  0xa6, 0x54, 0x0d, 0x99, 0xcd, 0x99, 0xc5, 0x49, 0x5e, 0x95, 0x1b, 0x15,
  0x1c, 0xb7, 0x0b, 0xd0, 0x52, 0x53, 0x8a, 0x00, 0x97, 0xc1, 0x8a, 0x43,
  0x1f, 0xf5, 0xe4, 0xe2, 0x77, 0x88, 0xc6, 0x7a, 0xcf, 0x19, 0x29, 0xed,
  0x12, 0x91, 0x23, 0x31, 0x1f, 0x80, 0x95, 0x8f, 0x5e, 0x90, 0x0c, 0x3f,
  0x42, 0x2f, 0x23, 0xbb, 0x82, 0x58, 0x88, 0x9c, 0xf7, 0x91, 0x9c, 0x77,
  0x67, 0x38, 0x0a, 0xb7, 0x24, 0x4f, 0x9f, 0x3c, 0x79, 0x92, 0x70, 0xc0,
  0x25, 0xd9, 0x38, 0x66, 0x7c, 0xb6, 0x77, 0x47, 0x2f, 0x4f, 0xdf, 0xbc,
  0x39, 0x7a, 0xfb, 0xea, 0xe8, 0x95, 0xbd, 0x68, 0xba, 0x16, 0x4b, 0x1d,
  0xc1, 0x8a, 0x28, 0x4f, 0x70, 0x96, 0xec, 0x3d, 0xd9, 0x1d, 0xee, 0x3f,
  0xd9, 0x4d, 0x0c, 0x29, 0xa6, 0xb6, 0x3c, 0x2d, 0x9d, 0xa7, 0x64, 0xdf,
  0x5e, 0xad, 0x8c, 0x96, 0x46, 0xb8, 0xce, 0x0d, 0xe1, 0x6c, 0xc0, 0xf3,
  0x4a, 0xce, 0xe1, 0x22, 0x6b, 0xc8, 0x8e, 0x8e, 0x64, 0x06, 0x8c, 0x36,
  0x12, 0x0b, 0xd2, 0xe9, 0x42, 0x96, 0xa2, 0xfc, 0x80, 0x40, 0xf7, 0x77,

  0xe9, 0x53, 0xa3, 0xe4, 0xb5, 0xd1, 0x3f, 0x2e, 0xca, 0xdb, 0x84, 0xb5,
  0x40, 0xa3, 0x94, 0x66, 0x61, 0xa8, 0xb2, 0xfd, 0x3a, 0xbd, 0xfd, 0x88,
  0xdf, 0xfe, 0x0d, 0x63, 0xf4, 0x4f, 0x9e, 0xb7, 0x0d, 0x4b, 0x73, 0x91,
  0xd1, 0x15, 0x44, 0x6b, 0x11, 0xfb, 0x9b, 0xd7, 0x91, 0x0c, 0x3a, 0x3c,
  0xa3, 0x87, 0x8d, 0x4d, 0x7e, 0xfa, 0xc3, 0x9f, 0x5d, 0x6d, 0xe7, 0xf5,
  0x9e, 0x26, 0x33, 0x4a, 0x09, 0x2b, 0x77, 0x56, 0x2d, 0xc2, 0xa0, 0xb7,

  0xc5, 0x88, 0xf3, 0x4d, 0x42, 0x95, 0x33, 0x58, 0x23, 0xe5, 0xa0, 0x9a,
  0xcd, 0xe3, 0xb6, 0x87, 0x72, 0x6e, 0x55, 0x2d, 0x45, 0x44, 0x61, 0x3d,
  0x7f, 0x45, 0x21, 0x0e, 0x33, 0xa7, 0x9c, 0xbb, 0xfe, 0xe4, 0xc5, 0x8c,
  0x3b, 0x8d, 0xb7, 0xfc, 0xb2, 0x4d, 0xb5, 0x6a, 0x99, 0x95, 0xea, 0x87,
  0x1d, 0xad, 0x87, 0xd9, 0x58, 0x56, 0xf9, 0x22, 0xad, 0xf2, 0xf9, 0x9d,
  0x12, 0xf8, 0x0d, 0xf7, 0x3e, 0xe6, 0x4c, 0x29, 0x84, 0xbe, 0x2c, 0xae,
  0x30, 0xe5, 0x10, 0xa4, 0x91, 0xfa, 0x9b, 0x7c, 0x2a, 0x57, 0x4a, 0xb0,
  0xbf, 0xf8, 0x5c, 0x79, 0xb7, 0xd6, 0xa2, 0x21, 0xb5, 0xed, 0x7f, 0xab,

  0x52, 0x44, 0x4b, 0x6f, 0x49, 0xcd, 0x7d, 0x7d, 0x7c, 0x72, 0xb4, 0x9d,
  0xbc, 0xce, 0x1a, 0xa9, 0x6e, 0xd2, 0x24, 0x63, 0x12, 0xf7, 0xff, 0x06,


  0x05, 0xcb, 0x42, 0xd2, 0x4a, 0x6d, 0x70, 0x34, 0x17, 0x8c, 0xcd, 0x18,

  0xe8, 0x1a, 0x5a, 0x29, 0xc5, 0x27, 0x83, 0x25, 0x52, 0x38, 0x4e, 0x53,
  0xcb, 0x34, 0xbc, 0x29, 0x27, 0x1f, 0xcb, 0xbb, 0x55, 0x84, 0x87, 0x51,
  0x1b, 0xf0, 0xb2, 0x2c, 0xbc, 0x14, 0x02, 0x9a, 0xb7, 0xe4, 0x3d, 0x73,
  0x3c, 0x30, 0xaf, 0x97, 0x73, 0x62, 0x06, 0x31, 0x74, 0x97, 0x79, 0xe6,
  0x2a, 0xfa, 0x40, 0xf9, 0xc6, 0x7a, 0xb0, 0x89, 0x98, 0xcc, 0x53, 0x69,
  0xbd, 0xde, 0xc6, 0x7d, 0xa3, 0x1b, 0x47, 0x69, 0x27, 0xfc, 0xe7, 0xce,
  0x97, 0x6b, 0xb0, 0xd2, 0x8e, 0xd0, 0x03, 0x5d, 0x5e, 0x00, 0x41, 0xa1,
  0x2b, 0xab, 0xa6, 0x32, 0xa9, 0xd2, 0xd9, 0xa2, 0x84, 0x98, 0xfa, 0x0a,


  0x7a, 0x70, 0xa1, 0xf8, 0x3f, 0x4b, 0xeb, 0x3d, 0x55, 0x21, 0xa8, 0xf8,
  0xdb, 0xc9, 0x97, 0xcc, 0xfb, 0x68, 0x1d, 0xed, 0x71, 0xa9, 0x95, 0x15,
  0xd0, 0x56, 0x58, 0x9b, 0xa2, 0x7c, 0xfd, 0xb4, 0x9d, 0xb1, 0xcf, 0x8f,
  0x5d, 0x49, 0xe3, 0x02, 0x38, 0x53, 0xb8, 0x7c, 0xac, 0x8e, 0xb8, 0xfc,

  0xdd, 0x5d, 0x74, 0xd1, 0x3d, 0xf4, 0xc9, 0x66, 0xcf, 0x8c, 0xa6, 0x1e,
  0x0c, 0xa4, 0xb6, 0xeb, 0x96, 0x9f, 0x99, 0xdf, 0x45, 0xb4, 0x25, 0xf9,
  0xba, 0xcf, 0x82, 0xba, 0x2a, 0xbb, 0xfd, 0x46, 0x69, 0x41, 0x73, 0xc4,
  0x10, 0x0d, 0xd5, 0x45, 0xda, 0x3b, 0xf6, 0x91, 0x67, 0x68, 0x73, 0xda,
  0x54, 0xf9, 0xf4, 0x23, 0x00, 0xd1, 0xea, 0x66, 0x05, 0x95, 0x2e, 0x2d,
  0xfc, 0x59, 0xda, 0x46, 0x1f, 0xb3, 0x12, 0x3b, 0x1d, 0xd7, 0x3e, 0x49,
  0x45, 0x22, 0x97, 0x01, 0xe1, 0x6f, 0xeb, 0x6c, 0x78, 0x35, 0xf6, 0xae,
  0x58, 0x35, 0x8d, 0xca, 0x20, 0x71, 0xb2, 0xcb, 0x48, 0x57, 0x00, 0x73,
  0x8d, 0x09, 0x80, 0x83, 0x7c, 0x6d, 0x37, 0x02, 0x2d, 0xb6, 0x59, 0x65,
  0xdc, 0x99, 0x64, 0x64, 0x4c, 0xd1, 0x05, 0x55, 0x04, 0x20, 0xcd, 0x56,

  0x96, 0x2c, 0xdb, 0x63, 0x38, 0xdb, 0x65, 0x7e, 0x1d, 0xcd, 0xb2, 0xd0,
  0x89, 0x2d, 0x18, 0xef, 0x82, 0x67, 0xa1, 0x29, 0xc7, 0x8a, 0x75, 0x94,
  0x88, 0x4b, 0x3a, 0x21, 0x28, 0x38, 0x7b, 0x7c, 0xc1, 0x0d, 0x9e, 0x93,
  0xca, 0x4a, 0x40, 0x5e, 0x05, 0x77, 0x5c, 0xff, 0xc6, 0xe8, 0x3e, 0x07,
  0x1b, 0xb6, 0x9f, 0x86, 0x24, 0x45, 0x65, 0x1d, 0xca, 0x81, 0x91, 0x51,
  0x94, 0xc3, 0x68, 0x23, 0x49, 0x56, 0xdc, 0x1b, 0xe5, 0x5b, 0xb6, 0xde,
  0x26, 0xcc, 0x6a, 0xb6, 0xf5, 0x2f, 0x03, 0x40, 0x9b, 0x5c, 0x85, 0x55,
  0x7e, 0x34, 0xa5, 0x1f, 0x86, 0x2f, 0xf1, 0xf1, 0xe1, 0x37, 0x18, 0xef,

  0x8f, 0x1b, 0xd6, 0xdd, 0xdb, 0xfd, 0xd5, 0x41, 0xd8, 0xf9, 0x7d, 0xea,
  0xb5, 0x78, 0x61, 0x2a, 0x01, 0x3e, 0xa6, 0x70, 0xd9, 0xd4, 0x21, 0x6f,
  0x02, 0xf2, 0x6d, 0x36, 0xdb, 0xb1, 0x87, 0xce, 0xa9, 0x73, 0x7d, 0x2d,
  0xc7, 0x8d, 0x14, 0x59, 0x02, 0x45, 0x67, 0x36, 0x2c, 0x2f, 0x86, 0xc8,
  0x90, 0x26, 0xc8, 0x3c, 0xca, 0x46, 0xf2, 0x6e, 0x1d, 0x80, 0x41, 0x80,
  0x7e, 0x3a, 0x9b, 0xc5, 0x54, 0xf3, 0xb4, 0x96, 0x3a, 0x62, 0x25, 0x7c,
  0x2d, 0xb4, 0xe0, 0xc3, 0x3c, 0x10, 0xb7, 0x3c, 0x5e, 0xd7, 0x86, 0xbc,
  0xc4, 0x06, 0xb5, 0x20, 0x22, 0xf0, 0xa7, 0xa1, 0x3c, 0x62, 0xc0, 0xea,
  0x3b, 0x16, 0x0d, 0xfb, 0x6d, 0xc1, 0xae, 0x5c, 0x38, 0x9f, 0x57, 0x4b,
  0xa8, 0xac, 0x84, 0xd6, 0x1c, 0x78, 0x5f, 0xb4, 0x48, 0x84, 0x45, 0xff,
  0x93, 0xd1, 0xee, 0x20, 0x88, 0xd2, 0x37, 0x30, 0xf3, 0x0b, 0x97, 0x22,
  0x84, 0x04, 0x09, 0xf0, 0xc8, 0x61, 0xac, 0xaa, 0xd6, 0x5c, 0xc2, 0x3b,
  0xe2, 0xd6, 0xb6, 0x90, 0x16, 0xb9, 0xc5, 0xae, 0xf0, 0xc1, 0xe5, 0xf5,
  0x60, 0x0f, 0x85, 0x71, 0xa2, 0x7a, 0x36, 0x06, 0x70, 0x2d, 0x19, 0x5b,
  0x5f, 0x0e, 0xbb, 0x7d, 0x8f, 0x6d, 0xfb, 0x4a, 0xbf, 0x7a, 0xc3, 0x55,
  0xab, 0xf7, 0x7b, 0x9a, 0xd0, 0x47, 0xe5, 0x50, 0x5b, 0x9f, 0x0d, 0xcd,
  0xa6, 0x4a, 0x8b, 0xee, 0x61, 0x46, 0x3f, 0x64, 0xa0, 0x0e, 0x45, 0x8d,
  0xae, 0xef, 0xd9, 0xb3, 0x47, 0xcf, 0x68, 0xcf, 0x6c, 0x63, 0x19, 0xed,
  0xa1, 0xe6, 0x04, 0x04, 0xc8, 0xd6, 0xbb, 0x4b, 0xdd, 0x3d, 0x23, 0xbe,
  0x42, 0x9c, 0xa0, 0xd0, 0xac, 0xef, 0x14, 0xfa, 0xca, 0x5d, 0x6f, 0x6a,
  0x71, 0x4f, 0xce, 0x2f, 0xae, 0xcd, 0x6b, 0x52, 0xec, 0x87, 0x6f, 0xcd,
  0x31, 0x1c, 0x24, 0xff, 0x59, 0x66, 0x5c, 0xb3, 0x7a, 0x4f, 0xc9, 0xea,
  0xf7, 0x87, 0xef, 0xde, 0x1e, 0xbf, 0xfd, 0xfa, 0xc0, 0x41, 0x74, 0x82,
  0xe7, 0x09, 0x68, 0x7e, 0xd0, 0xef, 0x07, 0xc8, 0xfa, 0xa8, 0x0b, 0x48,
  0xd9, 0x37, 0x1f, 0xed, 0xb0, 0x90, 0x0c, 0x99, 0x37, 0xb3, 0xef, 0xb2,
  0xca, 0x38, 0x28, 0xc2, 0xb6, 0xa8, 0x16, 0x4e, 0x48, 0xb5, 0x26, 0x44,
  0x25, 0xf7, 0xea, 0x8c, 0x00, 0x35, 0x0c, 0x4f, 0x90, 0x97, 0x3b, 0x2f,
  0x5b, 0x3d, 0x02, 0x89, 0x2e, 0xe7, 0x38, 0xff, 0xd2, 0x27, 0x01, 0xaf,
  0xd5, 0x1f, 0x41, 0xf0, 0x45, 0xfa, 0xc2, 0xc2, 0xd0, 0x63, 0x01, 0x01,
  0x83, 0x46, 0xfb, 0xa2, 0x71, 0x73, 0x23, 0xaa, 0xd9, 0x25, 0x4f, 0x45,
  0xce, 0xf1, 0x7f, 0xb7, 0x1f, 0x36, 0xc9, 0x2b, 0xe2, 0x07, 0xe1, 0x8d,
  0x9a, 0xa6, 0x2b, 0xbe, 0x31, 0x0c, 0x4a, 0x26, 0x3f, 0x75, 0x95, 0x19,
  0x76, 0x0b, 0xd6, 0xc7, 0x1d, 0xb8, 0x4a, 0x56, 0xc3, 0xaa, 0x9d, 0x54,
  0x67, 0x04, 0xfc, 0x1c, 0xc3, 0x32, 0x7f, 0x92, 0x28, 0x89, 0xe2, 0x8f,
  0xcc, 0x33, 0x57, 0x95, 0x64, 0x75, 0x9d, 0x2b, 0xd6, 0x75, 0xe6, 0xcb,
  0x00, 0x64, 0x8f, 0xd2, 0xcc, 0xe9, 0x17, 0xb2, 0xbd, 0x14, 0xb7, 0x82,
  0xfc, 0x55, 0xa3, 0xa4, 0x85, 0x69, 0x67, 0x3b, 0xfd, 0x6a, 0x97, 0xdd,
  0x50, 0x9e, 0x12, 0xd4, 0x53, 0xc6, 0x40, 0x63, 0x7e, 0x05, 0x8c, 0xf9,
  0xba, 0xd9, 0xe7, 0xe5, 0x6a, 0xb2, 0x98, 0x3d, 0x49, 0x5e, 0x98, 0xff,
  0x04, 0x4a, 0xd6, 0x98, 0xb3, 0x49, 0x5f, 0x92, 0x17, 0x9d, 0x52, 0x5c,
  0x18, 0x00, 0x97, 0x4b, 0x5b, 0x6c, 0x13, 0xa1, 0x47, 0xfb, 0x66, 0xb2,
  0xb7, 0xa9, 0xa2, 0x5a, 0xce, 0xcc, 0x19, 0x36, 0x48, 0x3d, 0xeb, 0xc1,
  0x0b, 0x72, 0x39, 0x8d, 0x74, 0xe6, 0x7b, 0xfb, 0x9f, 0x27, 0x54, 0x7a,
  0xf0, 0xe6, 0xd5, 0x93, 0x64, 0x7a, 0x95, 0x4d, 0x3f, 0xd6, 0xab, 0x85,
  0x32, 0xe3, 0x84, 0xb6, 0x94, 0x02, 0x21, 0x34, 0xcf, 0x00, 0xe9, 0xc1,
  0x4c, 0x7c, 0x9e, 0x4f, 0xa9, 0xf0, 0x6f, 0xd0, 0x0a, 0x4f, 0x5d, 0x68,

  0x78, 0xca, 0xb3, 0x42, 0xad, 0xd8, 0x40, 0xba, 0x00, 0xe7, 0xd4, 0x44,
  0x82, 0x17, 0x66, 0x0f, 0xcc, 0xe7, 0xa9, 0xed, 0x84, 0xd1, 0xcb, 0xd7,
  0xba, 0x6c, 0x9f, 0xb5, 0xbd, 0xde, 0x74, 0xb1, 0x77, 0x47, 0xcf, 0x7b,
  0x00, 0x7d, 0x5b, 0x20, 0x5c, 0x54, 0xab, 0x64, 0x31, 0x9e, 0x61, 0x0f,
  0x90, 0x96, 0x4f, 0x93, 0x24, 0x20, 0x28, 0x8d, 0xe2, 0x05, 0x1f, 0xa7,
  0x27, 0x77, 0xe8, 0x09, 0xe9, 0x68, 0x44, 0x0c, 0x04, 0x50, 0x14, 0x4c,
  0x58, 0x48, 0x12, 0xb2, 0x21, 0x40, 0x84, 0x3f, 0x81, 0x63, 0x84, 0xf8,
  0x6b, 0x44, 0x69, 0x73, 0xe5, 0xdf, 0xd6, 0x67, 0xe3, 0xba, 0xa6, 0x49,
  0x21, 0xad, 0x87, 0xe3, 0xa0, 0xd5, 0x84, 0xb4, 0xc3, 0x40, 0x53, 0x09,
  0x04, 0x9f, 0x7c, 0x99, 0x03, 0xd3, 0xee, 0x38, 0x6a, 0x46, 0x21, 0x84,
  0xfb, 0x9c, 0x30, 0xa0, 0xd9, 0xa2, 0x2e, 0x6f, 0x8a, 0xcb, 0x8a, 0xfc,
  0x23, 0xe8, 0x6e, 0x9c, 0xc6, 0x62, 0x19, 0x31, 0xe4, 0x52, 0x37, 0xb6,
  0xb1, 0xb8, 0x9e, 0x12, 0xa7, 0xf7, 0x77, 0x45, 0x82, 0xd8, 0xb0, 0x49,
  0xc5, 0x66, 0xf7, 0x8e, 0x68, 0x77, 0x20, 0xc7, 0xb4, 0x37, 0xda, 0xed,
  0x6b, 0xa2, 0xe5, 0xb5, 0xcf, 0x92, 0xb4, 0x87, 0xd6, 0xf9, 0x98, 0x37,

  0x7d, 0x3d, 0x99, 0xf3, 0x1c, 0x0c, 0xad, 0xf7, 0x64, 0xdf, 0x99, 0x85,
  0x8a, 0x03, 0x2b, 0x9b, 0xb5, 0x06, 0x7a, 0x68, 0x8d, 0x84, 0x4c, 0x77,
  0x4f, 0xc2, 0x30, 0xf4, 0xaf, 0xfd, 0x2e, 0xd1, 0x99, 0x5f, 0x3f, 0x84,
  0xe8, 0x22, 0x6b, 0xd9, 0x5b, 0x3b, 0x0d, 0x6f, 0x1e, 0xd8, 0x3b, 0xb7,
  0x79, 0x5a, 0xa1, 0x21, 0xf3, 0xd1, 0x6b, 0x11, 0x46, 0xa5, 0xc3, 0x86,
  0x27, 0x78, 0x83, 0xca, 0x5d, 0xca, 0x6a, 0x48, 0x3a, 0xbb, 0x39, 0xac,
  0x40, 0x85, 0x8a, 0x1d, 0x06, 0x4c, 0x8c, 0xbc, 0xae, 0x09, 0x90, 0x12,
  0xb1, 0x6e, 0xa2, 0x4e, 0x0a, 0x1c, 0xf9, 0x88, 0xf1, 0x75, 0x34, 0x6d,
  0x1f, 0x04, 0xb2, 0x6f, 0x95, 0x74, 0xfc, 0x93, 0xb6, 0xf4, 0xfd, 0x12,
  0x04, 0x38, 0x02, 0x90, 0xb2, 0xeb, 0xfa, 0x92, 0x60, 0x72, 0x6c, 0x51,
  0xc4, 0x66, 0xe7, 0x21, 0xa2, 0x69, 0x04, 0x48, 0xca, 0x35, 0x6b, 0xfd,
  0x54, 0x4d, 0x95, 0xb0, 0xae, 0x4b, 0x28, 0x37, 0x6a, 0xd1, 0x39, 0xc6,
  0xe0, 0x7c, 0xf9, 0x56, 0x19, 0x45, 0x53, 0x06, 0x68, 0x25, 0xd3, 0x53,
  0x67, 0x0c, 0xe6, 0xeb, 0xb6, 0x61, 0xeb, 0xcc, 0x75, 0x0c, 0x8d, 0xf8,
  0x57, 0xe0, 0x0c, 0x61, 0x71, 0x4a, 0x3b, 0xd4, 0x8f, 0x74, 0xd7, 0x73,
  0x1c, 0x0f, 0xee, 0x80, 0x13, 0xe0, 0x76, 0xe5, 0xec, 0x23, 0xd3, 0xf2,
  0x55, 0x5e, 0xcd, 0xe8, 0x61, 0xc4, 0xbd, 0x3b, 0x88, 0xce, 0x8e, 0xc8,
  0xcd, 0x27, 0xfe, 0x16, 0x08, 0xde, 0xf3, 0x08, 0x71, 0xfd, 0xa2, 0xbb,
  0xb0, 0xbf, 0x2e, 0x0c, 0x1a, 0xde, 0xc1, 0x47, 0x23, 0xfd, 0x5a, 0xdf,

  0x5e, 0x05, 0xec, 0xac, 0xa7, 0x7b, 0xd0, 0x43, 0x77, 0xab, 0x67, 0x6f,
  0xf6, 0xf4, 0x2a, 0xfa, 0xbc, 0xcd, 0xdf, 0xaf, 0xee, 0xd9, 0xca, 0xfe,
  0x85, 0x90, 0xfb, 0xf1, 0xab, 0xfa, 0x28, 0xbe, 0x9b, 0x56, 0x43, 0xed,
  0xf8, 0x3c, 0xc9, 0x65, 0x56, 0xe5, 0x0b, 0x00, 0xdf, 0x8d, 0x92, 0x57,

  0x2e, 0xa5, 0x85, 0x0c, 0x14, 0x43, 0xb1, 0xdd, 0x5d, 0x99, 0xad, 0x7a,
  0x32, 0x3f, 0x3a, 0x37, 0x3f, 0x38, 0xaf, 0x47, 0x92, 0xd4, 0xe3, 0x52,
  0x17, 0x20, 0xd5, 0xd5, 0x4d, 0xd8, 0xb5, 0x82, 0xd8, 0x6f, 0xa3, 0xf1,
  0x3f, 0x09, 0xd3, 0x51, 0x6a, 0x96, 0x44, 0x60, 0xb0, 0xf5, 0x8f, 0xfc,
  0x98, 0xb9, 0x55, 0xad, 0xa9, 0x84, 0x20, 0xee, 0x29, 0xb2, 0x5f, 0x84,
  0x45, 0x45, 0x22, 0x51, 0x55, 0x4a, 0xf3, 0x99, 0xeb, 0x3c, 0x4d, 0x0e,
  0xe7, 0xcd, 0x70, 0xfc, 0xdd, 0x54, 0x9b, 0xf4, 0xda, 0x9d, 0x0a, 0x5a,
  0x7c, 0xc3, 0xab, 0x22, 0x28, 0x79, 0x14, 0x41, 0xc9, 0xab, 0xe9, 0x6a,
  0x01, 0xe4, 0x53, 0x10, 0x95, 0xed, 0x12, 0x44, 0xa7, 0xe8, 0xf3, 0x1f,
  0x4e, 0xb7, 0x0f, 0x41, 0x0f, 0xd3, 0x8f, 0xb5, 0x2e, 0x49, 0x32, 0xeb,
  0xb9, 0x0c, 0xa3, 0xb5, 0x47, 0xf7, 0xa8, 0xbd, 0x1d, 0xdb, 0x8e, 0x01,
  0x7a, 0x09, 0x28, 0xe4, 0xbf, 0xbf, 0x3f, 0x7e, 0xe9, 0xeb, 0x55, 0x16,
  0x5a, 0xbe, 0x3f, 0x5a, 0x31, 0xf0, 0x20, 0xe8, 0x2f, 0x48, 0x89, 0xd5,
  0x5c, 0x5c, 0xcd, 0x9b, 0x6b, 0x9d, 0x6d, 0xc9, 0xb0, 0xeb, 0x5d, 0x07,
  0xd8, 0x4d, 0xf1, 0xf3, 0xee, 0xe8, 0xbe, 0xde, 0xd1, 0x47, 0xbf, 0xf6,
  0x1d, 0x7d, 0xf4, 0x73, 0xef, 0xa8, 0xf0, 0xb7, 0xf8, 0x0d, 0xed, 0xbb,
  0xad, 0x81, 0x59, 0xea, 0x6e, 0xaf, 0x38, 0x9c, 0xdb, 0x39, 0x03, 0x43,


  0x06, 0x8f, 0x18, 0x8a, 0xdf, 0x62, 0xc8, 0x05, 0xb2, 0xb1, 0xda, 0x30,
  0xbe, 0xc3, 0x0a, 0xf8, 0x38, 0x48, 0x8e, 0x19, 0xcb, 0xdc, 0x87, 0x51,
  0x3c, 0xe1, 0xea, 0x5a, 0xf1, 0x7a, 0xbb, 0x92, 0x8a, 0x48, 0x05, 0x7e,
  0x3e, 0x25, 0x58, 0xb5, 0x39, 0xf0, 0x92, 0xe0, 0x73, 0x87, 0xcd, 0x6c,
  0x9b, 0xa9, 0xad, 0x10, 0x54, 0x48, 0x0e, 0x97, 0x54, 0x24, 0x6b, 0x74,
  0x8e, 0x5b, 0xf5, 0x43, 0x10, 0x81, 0x85, 0xb9, 0x48, 0x25, 0x2a, 0xdc,
  0x35, 0xf1, 0xbe, 0x33, 0x1d, 0x1a, 0x98, 0x11, 0x0f, 0xe7, 0x44, 0xf9,
  0x8c, 0x16, 0x5e, 0x50, 0xc7, 0x0f, 0x43, 0xe0, 0x97, 0x41, 0x53, 0x9d,
  0xc9, 0x5d, 0x13, 0x29, 0x03, 0xa3, 0x75, 0xc3, 0x95, 0xbd, 0xc5, 0x8a,
  0xaa, 0x11, 0x23, 0x66, 0x23, 0xb7, 0x8d, 0xad, 0xf9, 0x11, 0xc8, 0xbd,
  0x19, 0xea, 0x74, 0xac, 0x7d, 0x85, 0x66, 0x28, 0x97, 0xe4, 0xaf, 0x92,
  0xfa, 0x8f, 0xa0, 0x62, 0xe6, 0xef, 0x99, 0x26, 0x39, 0x6a, 0x0a, 0xa1,
  0xc0, 0xcc, 0xb6, 0x4b, 0x54, 0xf3, 0x01, 0xba, 0x8e, 0xc2, 0x39, 0xdd,
  0x0d, 0x1e, 0x89, 0xcb, 0x9a, 0x3e, 0x2e, 0xfa, 0x8c, 0x62, 0xf9, 0x8b,
  0xc1, 0x2b, 0x5c, 0x4b, 0xba, 0x33, 0x09, 0xf2, 0x09, 0x83, 0x78, 0xf6,

  0xf5, 0x63, 0xf1, 0xac, 0xe5, 0x29, 0xf7, 0x26, 0xe5, 0x8f, 0xa8, 0x13,


  0x0a, 0xa6, 0xbe, 0x68, 0x30, 0xe4, 0x26, 0x1a, 0x68, 0x9f, 0xad, 0x41,
  0x08, 0xa7, 0x67, 0xeb, 0xce, 0x1c, 0x44, 0x74, 0xeb, 0xca, 0x2a, 0xa4,
  0xf3, 0x68, 0x34, 0x8a, 0xc0, 0x59, 0x5c, 0xe7, 0xd9, 0x4d, 0xcb, 0x17,
  0x2f, 0x13, 0x1b, 0xd8, 0x2e, 0x19, 0xec, 0x01, 0xba, 0xa6, 0x1d, 0x32,
  0x43, 0x4e, 0x08, 0x42, 0xb3, 0xa7, 0x9c, 0xc4, 0x5d, 0x79, 0xff, 0x69,
  0x6f, 0x9b, 0x3f, 0xf2, 0x36, 0xd7, 0xb1, 0x7a, 0x50, 0x06, 0x44, 0x76,
  0x3d, 0x1c, 0x06, 0xe4, 0x12, 0xa9, 0xee, 0x12, 0xf4, 0x6d, 0xf2, 0x38,
  0x1a, 0x5d, 0x7f, 0xae, 0x40, 0xc8, 0x6b, 0x46, 0x24, 0xce, 0x63, 0x45,
  0x31, 0x93, 0x4c, 0xd3, 0x8e, 0x3a, 0x5d, 0x63, 0x84, 0xa3, 0xab, 0xb6,


  0x61, 0x04, 0xdf, 0x94, 0x5c, 0x51, 0x68, 0x03, 0x22, 0x5d, 0x08, 0xc8,




  0x17, 0x13, 0x49, 0x3d, 0xd2, 0xc6, 0x24, 0xae, 0x6f, 0x95, 0x97, 0x28,
  0xe3, 0x7a, 0x8a, 0x24, 0xba, 0xc0, 0x68, 0xbc, 0x37, 0x18, 0xa4, 0xb5,
  0x8c, 0xc9, 0x9d, 0x76, 0xe5, 0xb4, 0x6e, 0x58, 0xab, 0xca, 0x06, 0x06,

  0xb6, 0x57, 0x9f, 0xea, 0x10, 0x94, 0x5a, 0xbe, 0x6d, 0x8b, 0x76, 0x27,
  0x1f, 0xa8, 0x3d, 0x80, 0xec, 0x00, 0x6a, 0xc0, 0xe1, 0xb5, 0xd2, 0xc0,
  0xdc, 0xde, 0x2d, 0x7a, 0xc4, 0x2c, 0x2d, 0x19, 0xf5, 0x82, 0x1a, 0x10,
  0xae, 0x28, 0xf1, 0x04, 0xd7, 0x5f, 0xaa, 0xd7, 0xa5, 0x60, 0xbd, 0x0b,
  0x66, 0x62, 0x21, 0xe1, 0x68, 0xef, 0x47, 0x57, 0xe9, 0xed, 0xed, 0xa8,
  0xce, 0x76, 0x0c, 0xd5, 0xd6, 0x3b, 0x75, 0x3d, 0xa7, 0x8f, 0xd6, 0x40,
  0x5f, 0x5b, 0xdb, 0xdb, 0xf8, 0xf6, 0xce, 0x12, 0x90, 0x30, 0xe7, 0x69,
  0x4a, 0xaf, 0xb6, 0x98, 0xad, 0x6b, 0x6e, 0xcc, 0xed, 0xc1, 0xba, 0x29,
  0xc3, 0x0c, 0x38, 0x4d, 0x6e, 0x5a, 0xbf, 0xd2, 0x96, 0x39, 0x83, 0xcb,
  0xcc, 0xb2, 0xc3, 0x38, 0x10, 0xfd, 0x84, 0x10, 0xa6, 0xab, 0xbe, 0xd2,
  0x8e, 0x44, 0xee, 0xaa, 0x1f, 0x1c, 0x35, 0xdb, 0x62, 0x4b, 0x20, 0xb8,
  0x47, 0x94, 0x40, 0xeb, 0xa0, 0xe1, 0x9f, 0x11, 0xb1, 0xe5, 0xc7, 0x08,
  0xe4, 0x53, 0x9f, 0xdb, 0xd2, 0x5b, 0x1a, 0xd5, 0x8a, 0x1c, 0x38, 0x70,
  0xc1, 0x9b, 0x9b, 0x9b, 0xd1, 0x3a, 0xbf, 0xe5, 0xbf, 0x1c, 0x03, 0x6f,
  0x0f, 0x77, 0x5a, 0x24, 0x27, 0x79, 0xb1, 0xba, 0xf5, 0x10, 0x5e, 0x6c,
  0x13, 0x38, 0x0d, 0xca, 0x25, 0xdf, 0xbd, 0x7b, 0x3d, 0xb0, 0x81, 0x4d,
  0x05, 0xd7, 0x80, 0xe7, 0xb7, 0x8e, 0x68, 0x6d, 0x59, 0x0e, 0xe2, 0x61,
  0xb8, 0xe8, 0x97, 0x87, 0x67, 0x1f, 0xde, 0x1e, 0x9d, 0x7f, 0x78, 0x77,
  0xf8, 0x3d, 0x6d, 0x21, 0xfb, 0x65, 0x8c, 0xbc, 0xa2, 0x88, 0x40, 0x55,
  0x96, 0x86, 0xcd, 0xbe, 0x21, 0xa6, 0x9e, 0x17, 0x80, 0x57, 0x89, 0x75,
  0x6c, 0x53, 0xc8, 0x28, 0x99, 0x27, 0x4d, 0xe6, 0xc0, 0xa3, 0x41, 0xda,
  0xaf, 0x8f, 0x59, 0x55, 0x64, 0xf3, 0x51, 0x59, 0x5d, 0x12, 0x15, 0xee,
  0xbc, 0x12, 0xfe, 0x19, 0x1d, 0x6e, 0x47, 0xb2, 0x1a, 0x08, 0x82, 0xec,
  0xba, 0xba, 0x20, 0xc4, 0x92, 0x35, 0x1a, 0x4f, 0xab, 0x3f, 0xad, 0x47,
  0x9a, 0x8f, 0xc1, 0x00, 0x97, 0xd7, 0x8f, 0xd7, 0xa9, 0x77, 0x4d, 0xcb,
  0x1c, 0x92, 0x16, 0x9f, 0x20, 0x20, 0xb8, 0x7e, 0xfc, 0x64, 0x95, 0x8c,
  0x23, 0xd2, 0x83, 0x08, 0x00, 0x02, 0xf4, 0xb9, 0xd2, 0x42, 0x49, 0xa0,
  0xc0, 0x8d, 0x92, 0x6c, 0xfa, 0xb9, 0x76, 0x68, 0xb8, 0x58, 0x1f, 0x42,
  0x5b, 0xfd, 0xf4, 0x7d, 0x0f, 0x4f, 0x43, 0xcb, 0x90, 0x5a, 0xee, 0x7a,
  0x6b, 0x7e, 0x2a, 0x6b, 0x7e, 0xfa, 0xaf, 0xad, 0xf9, 0xe9, 0x2f, 0x5f,
  0xf3, 0xe3, 0x5f, 0x79, 0xcd, 0x8f, 0xa3, 0x6b, 0xf6, 0xbe, 0x32, 0xfc,
  0x2b, 0xad, 0xf9, 0xaf, 0xab, 0xe2, 0xe3, 0xd0, 0x4c, 0x97, 0xa4, 0xb0,
  0x34, 0xd8, 0xac, 0x7b, 0x4c, 0x36, 0x9b, 0xfb, 0x0f, 0xef, 0x1e, 0xc3,
  0x7c, 0x0a, 0xae, 0xb0, 0xd7, 0x2f, 0x34, 0xf5, 0x3a, 0xe8, 0x71, 0xe4,
  0xa9, 0xab, 0x87, 0x7b, 0x91, 0x07, 0x98, 0x07, 0x39, 0xd5, 0xfb, 0xd6,
  0x53, 0xf2, 0x54, 0x90, 0x6a, 0xbf, 0x21, 0xb3, 0xd1, 0x61, 0x37, 0xb4,
  0xe1, 0x0a, 0x6e, 0x7a, 0x1a, 0xe2, 0x1c, 0x4d, 0x19, 0x23, 0xfd, 0x8a,
  0x5b, 0xcf, 0x41, 0x16, 0x21, 0x68, 0x25, 0x99, 0xfe, 0xdc, 0xe0, 0x88,
  0x51, 0xa0, 0x74, 0xe8, 0x5c, 0xc0, 0xd4, 0x42, 0x9e, 0x71, 0x7e, 0xb7,
  0xa4, 0x01, 0x93, 0x49, 0x65, 0x04, 0x30, 0x7c, 0x96, 0xf3, 0x1b, 0x4a,
  0x4d, 0xd0, 0x19, 0xda, 0x21, 0xec, 0xaa, 0xd9, 0xba, 0x42, 0xb4, 0x6e,
  0x33, 0x50, 0x18, 0xa6, 0xf3, 0x92, 0x38, 0xce, 0x6c, 0xbd, 0xf1, 0x31,
  0x71, 0xdd, 0x4d, 0x59, 0x5e, 0x74, 0xda, 0x9d, 0xfa, 0x72, 0xe3, 0x63,
  0x96, 0x2d, 0xd3, 0x39, 0xa0, 0x35, 0x28, 0xf7, 0xa1, 0xaf, 0x41, 0x56,

  0x8b, 0x30, 0x6a, 0x2d, 0x1d, 0xc0, 0x2b, 0x7e, 0x19, 0x30, 0x33, 0x3a,
  0x3e, 0x49, 0xaa, 0x96, 0x49, 0xf2, 0x19, 0x95, 0xba, 0xc6, 0xfb, 0xa5,
  0x68, 0xf2, 0x83, 0x9d, 0x02, 0x29, 0x26, 0x13, 0x01, 0x80, 0x61, 0x7b,
  0x12, 0xa8, 0x54, 0x0a, 0x23, 0x87, 0xd4, 0x9c, 0xeb, 0x9c, 0xb2, 0xf2,
  0xba, 0x98, 0xc3, 0x9d, 0x11, 0x80, 0x2a, 0xd5, 0x6a, 0x98, 0xc0, 0x87,
  0x47, 0x4f, 0x94, 0x56, 0x00, 0x92, 0xdf, 0x1f, 0x5d, 0xa4, 0x03, 0x92,
  0x52, 0xe4, 0x64, 0xe9, 0x42, 0xf1, 0xf2, 0xec, 0xc3, 0xb7, 0x47, 0x47,
  0x67, 0xc7, 0xaf, 0x4e, 0x8e, 0xe4, 0xc6, 0xd8, 0x1f, 0xbd, 0x3d, 0xff,
  0xee, 0xc4, 0xf5, 0x05, 0x95, 0xb0, 0x47, 0x97, 0xe0, 0x05, 0xee, 0x5f,
  0xd8, 0xf2, 0x00, 0x7d, 0xb0, 0x8c, 0x2d, 0x7d, 0x78, 0xfc, 0x83, 0x51,
  0x5b, 0xcf, 0x86, 0xef, 0x7f, 0x08, 0x5a, 0x90, 0xb4, 0x6a, 0x4c, 0xba,
  0x76, 0x97, 0xad, 0x38, 0x19, 0x0e, 0x8b, 0xd2, 0x1d, 0x60, 0x6f, 0xca,
  0xdd, 0xaf, 0x2c, 0x06, 0x29, 0x71, 0xb9, 0xb0, 0x1a, 0x03, 0xbf, 0xa8,
  0x7d, 0x7e, 0xbc, 0xac, 0xb6, 0xa7, 0xbb, 0xda, 0x3e, 0x6d, 0x6d, 0xd0,
  0xa2, 0xd3, 0xb2, 0xed, 0x63, 0x76, 0x07, 0x0c, 0xc7, 0xe4, 0x05, 0xfd,
  0x37, 0xde, 0xe4, 0x34, 0x39, 0xab, 0xf2, 0x6b, 0x52, 0x00, 0xcd, 0xc3,
  0x1c, 0xd3, 0xa5, 0x67, 0x47, 0xb6, 0xe9, 0xab, 0x84, 0x95, 0x69, 0x14,
  0x24, 0x9e, 0x60, 0xd4, 0x98, 0xb7, 0x07, 0xd0, 0x38, 0xe4, 0x5e, 0xb5,
  0xa3, 0xe5, 0x86, 0x74, 0x5e, 0x1d, 0xbd, 0x1b, 0x24, 0x67, 0x47, 0x6f,
  0xb8, 0x4a, 0xe5, 0xe8, 0xed, 0xd7, 0xdc, 0xc5, 0xd1, 0xb6, 0x36, 0x1d,
  0x71, 0xae, 0x74, 0x98, 0xac, 0xe9, 0xed, 0x89, 0x79, 0x1d, 0x41, 0x91,
  0xba, 0x36, 0xd2, 0xf5, 0x13, 0x02, 0xe8, 0xf0, 0xd2, 0x5e, 0x98, 0xff,
  0xc4, 0xb6, 0xca, 0xd8, 0x11, 0xdf, 0x6c, 0x87, 0xbb, 0x25, 0x6a, 0x99,
  0xcd, 0x9d, 0x11, 0x93, 0x80, 0x76, 0x83, 0x37, 0xcc, 0xec, 0x48, 0x98,
  0xc5, 0xa1, 0x3b, 0x54, 0x08, 0x2e, 0x9e, 0xf4, 0x4e, 0x97, 0x10, 0x3c,
  0x3a, 0x13, 0x8c, 0xbf, 0x19, 0x10, 0x59, 0x02, 0x88, 0xdc, 0xed, 0x45,
  0xb4, 0x3a, 0xba, 0x02, 0xab, 0x93, 0xfa, 0x7a, 0x1b, 0x02, 0x25, 0xb5,
  0x6a, 0x96, 0xcf, 0x00, 0xc1, 0x00, 0x17, 0x5d, 0x59, 0x51, 0x06, 0x47,
  0x92, 0x6c, 0xfe, 0xcf, 0x9d, 0x51, 0x5d, 0x5f, 0xed, 0xe4, 0xb3, 0x0f,
  0x55, 0x9d, 0x6e, 0x76, 0x65, 0x91, 0xf7, 0xeb, 0x19, 0xfd, 0x3a, 0xd9,



  0x1c, 0xd9, 0x47, 0xe5, 0xef, 0xf4, 0xf3, 0xd8, 0x39, 0xa8, 0x04, 0x62,
  0xcf, 0x8a, 0xe6, 0x73, 0x6a, 0xf3, 0xdc, 0x79, 0x3e, 0xa9, 0x8c, 0x02,
  0xe7, 0x9a, 0x7e, 0x48, 0x2b, 0xdc, 0x64, 0xf9, 0x71, 0x5a, 0xef, 0xed,
  0x85, 0x28, 0xf4, 0xb6, 0xc4, 0x71, 0xa0, 0xa9, 0xb9, 0x67, 0xdf, 0xbe,
  0x1c, 0xff, 0x6e, 0x6f, 0x0f, 0x69, 0xd0, 0x5b, 0x94, 0xae, 0xfa, 0xec,
  0xc9, 0xde, 0xfe, 0x76, 0x4c, 0x81, 0x0c, 0xf2, 0x7a, 0xa0, 0x50, 0xfa,
  0xe4, 0x89, 0x18, 0xb7, 0xd4, 0x3c, 0xd8, 0x81, 0x67, 0x19, 0xa5, 0x08,
  0x92, 0xf3, 0xd0, 0x76, 0x3f, 0x41, 0xee, 0x64, 0x90, 0x7a, 0x81, 0x5f,
  0xb1, 0xe3, 0x7e, 0x83, 0xe7, 0x7f, 0xb0, 0x61, 0xe9, 0xca, 0x4f, 0x22,
  0x47, 0x06, 0x8a, 0x37, 0x6f, 0x64, 0xfe, 0x74, 0xc3, 0x6b, 0xfe, 0xba,
  0x90, 0xe9, 0xe8, 0x90, 0xa6, 0x32, 0x76, 0x0e, 0xd8, 0xc6, 0xc1, 0x91,
  0xe4, 0x80, 0xc0, 0x57, 0x2f, 0x33, 0xda, 0x48, 0x98, 0x82, 0x88, 0xe2,
  0x53, 0x37, 0xaa, 0xdd, 0x7f, 0x8f, 0x43, 0xb4, 0x47, 0x0d, 0x12, 0x27,



  0x21, 0xa9, 0x37, 0xcc, 0xf5, 0xdd, 0x88, 0x8e, 0xf8, 0x49, 0xef, 0x64,
  0x35, 0x49, 0x5e, 0xcc, 0xcd, 0x8b, 0xf3, 0x78, 0xe9, 0xdd, 0x11, 0xb7,



  0xd9, 0xfa, 0x36, 0xab, 0x26, 0x59, 0x55, 0xd6, 0x9d, 0x12, 0x21, 0x6d,
  0xed, 0xca, 0x89, 0xd8, 0x18, 0x86, 0xd3, 0xa5, 0x22, 0x2e, 0x4d, 0x3a,
  0x34, 0xd9, 0x9d, 0x00, 0x96, 0x67, 0x13, 0xd5, 0x4a, 0x74, 0x01, 0xa8,
  0xb1, 0x14, 0xfd, 0x69, 0xb8, 0xf1, 0x05, 0x37, 0x07, 0x4d, 0xe7, 0x9b,
  0xd4, 0xed, 0xa7, 0x7b, 0x8d, 0x84, 0xd6, 0x36, 0x0d, 0x2f, 0xe5, 0xd1,

  0x88, 0x3b, 0x00, 0xef, 0x40, 0xe6, 0xc1, 0xbe, 0x5e, 0xdb, 0x54, 0xd4,
  0x4f, 0x02, 0xac, 0x83, 0x0e, 0x48, 0x76, 0xb8, 0x36, 0x74, 0x52, 0x5f,
  0x86, 0xf1, 0xaf, 0x2c, 0xa6, 0xf8, 0x18, 0x1e, 0x1c, 0x3a, 0x0a, 0x5c,
  0xab, 0x9d, 0xe1, 0xf4, 0xb0, 0xfc, 0x73, 0xd6, 0xd7, 0xa3, 0x9d, 0x73,

  0x0f, 0xb9, 0x36, 0xbc, 0xd3, 0x76, 0x98, 0xb2, 0x36, 0x51, 0x1e, 0x41,
  0x66, 0xa1, 0x54, 0xbe, 0x4a, 0x69, 0x30, 0xda, 0x46, 0x8a, 0x7e, 0x11,



  0x06, 0xc7, 0x39, 0x5b, 0x0d, 0x71, 0x6e, 0x9d, 0xf6, 0x90, 0xcd, 0xf7,
  0x97, 0x89, 0xb8, 0x23, 0x50, 0x19, 0x75, 0x53, 0x11, 0x5e, 0x6a, 0xa1,
  0x51, 0x08, 0x16, 0x8f, 0x71, 0x10, 0x2d, 0x85, 0x54, 0x35, 0x87, 0x34,
  0x97, 0x7e, 0x86, 0x9a, 0x8d, 0x58, 0xe9, 0xb4, 0x86, 0x92, 0xce, 0xa1,
  0x1e, 0x03, 0x7a, 0xef, 0xdf, 0xfe, 0xc5, 0x93, 0x63, 0x85, 0x5e, 0x9a,
  0x27, 0x44, 0x60, 0x12, 0x1e, 0x8c, 0x15, 0xd7, 0x29, 0xf3, 0x43, 0xc9,
  0xc0, 0x10, 0x42, 0xe9, 0x85, 0xe1, 0xa7, 0x59, 0x00, 0x96, 0xa5, 0x0a,
  0x82, 0x60, 0xf7, 0x48, 0xb3, 0x57, 0xaf, 0xe5, 0x22, 0xde, 0x25, 0x9a,
  0x07, 0x96, 0x84, 0x1f, 0x9c, 0x1b, 0x92, 0xca, 0xda, 0x75, 0xb7, 0x51,
  0x9b, 0x12, 0x57, 0xa5, 0x8d, 0x6b, 0x0b, 0x30, 0x7a, 0x05, 0x39, 0xd2,
  0x2c, 0x69, 0xde, 0x10, 0x72, 0x45, 0x4b, 0xfe, 0x2d, 0x6c, 0x8b, 0x34,
  0xf0, 0x81, 0xa0, 0xe2, 0x81, 0x3b, 0x7f, 0xa4, 0xdc, 0x11, 0x61, 0x73,
  0xc6, 0x6e, 0x51, 0x1c, 0x89, 0x9d, 0x27, 0xdd, 0x3d, 0x99, 0x17, 0x67,
  0xd6, 0x9a, 0x1b, 0x1d, 0x98, 0x0a, 0x13, 0x33, 0xc4, 0x4d, 0x3e, 0x6b,
  0xae, 0xd0, 0x89, 0x47, 0x2d, 0xa3, 0x5a, 0x70, 0x01, 0xc8, 0x4d, 0x9d,
  0xc7, 0x8a, 0xde, 0xa2, 0x0e, 0x3c, 0x3e, 0x31, 0xec, 0x69, 0xc2, 0xf0,
  0x58, 0xe4, 0xa9, 0xc3, 0x31, 0xc0, 0xa7, 0xbd, 0xc3, 0x9a, 0x9e, 0x45,
  0x86, 0xa1, 0x76, 0xd9, 0x17, 0xd4, 0x65, 0x27, 0xf4, 0xd0, 0x6b, 0x79,
  0xda, 0xc8, 0x5e, 0x11, 0x88, 0xa5, 0xcd, 0x8f, 0x8c, 0x8b, 0xff, 0xed,
  0xa6, 0xf6, 0x93, 0x5d, 0x15, 0x8d, 0x5f, 0x43, 0x63, 0x6e, 0xe8, 0xc7,
  0x7c, 0x5e, 0x46, 0x5d, 0xea, 0x86, 0xb5, 0x2d, 0xf8, 0xf5, 0x37, 0x9b,
  0xea, 0x27, 0x25, 0xc0, 0x84, 0xcb, 0x54, 0x7e, 0xcd, 0x58, 0x29, 0x9b,
  0x97, 0xfc, 0xd0, 0xd7, 0xfa, 0x50, 0xd8, 0x43, 0x82, 0xbc, 0xf6, 0xec,
  0xa5, 0xd7, 0x64, 0xba, 0xfa, 0x80, 0xea, 0x33, 0xbe, 0x1d, 0x24, 0x8f,
  0x16, 0x38, 0x94, 0xbd, 0xaf, 0xa3, 0x95, 0x73, 0xc0, 0x65, 0x80, 0xf5,
  0xa5, 0x99, 0x3e, 0xc3, 0x3f, 0x93, 0xd1, 0x85, 0x3d, 0x63, 0xca, 0xb4,
  0xc5, 0x60, 0x5c, 0x6e, 0xe8, 0xa4, 0x57, 0x57, 0x37, 0xa2, 0xa3, 0x5a,
  0x92, 0x8d, 0x30, 0xcb, 0x14, 0x23, 0x7c, 0x01, 0xd7, 0x26, 0x65, 0x4b,
  0x2d, 0x05, 0x0b, 0x83, 0x48, 0x75, 0x68, 0x21, 0x48, 0xeb, 0x39, 0x3d,
  0x80, 0xe6, 0x58, 0x65, 0x90, 0x59, 0x3d, 0x5f, 0xc2, 0x40, 0xb2, 0x3d,
  0xec, 0xbc, 0x29, 0x51, 0x61, 0xeb, 0x34, 0x11, 0x1f, 0xcf, 0x27, 0x14,
  0x89, 0xf3, 0x01, 0xee, 0x67, 0xdd, 0x0c, 0x23, 0x78, 0xaf, 0x8c, 0x0f,
  0x78, 0x76, 0x7a, 0xf6, 0x68, 0xdb, 0xd6, 0x47, 0x73, 0xb2, 0xbf, 0xa0,
  0x23, 0x58, 0xbc, 0x40, 0x0b, 0x9c, 0xa0, 0xe0, 0xcc, 0x28, 0xd3, 0x0b,
  0x6d, 0x4b, 0x80, 0x7d, 0x83, 0xb5, 0xe0, 0x7b, 0x70, 0xf8, 0xbb, 0x22,
  0x11, 0xaf, 0x07, 0xa2, 0xbb, 0x96, 0x0e, 0x1f, 0xf1, 0xb3, 0x10, 0x56,
  0xa6, 0xd6, 0x8c, 0x72, 0x60, 0xb2, 0x0c, 0x51, 0xfe, 0x97, 0xb4, 0x1b,
  0x8a, 0x50, 0x43, 0x8a, 0xce, 0x24, 0x39, 0xf1, 0x28, 0x92, 0xd2, 0x25,
  0x41, 0x5e, 0xf7, 0x20, 0x02, 0x12, 0x5a, 0x0d, 0xc9, 0xf2, 0xd6, 0x66,
  0x5b, 0x90, 0xb7, 0x94, 0xc8, 0x96, 0x31, 0x95, 0x47, 0xb1, 0x0a, 0x5c,
  0xe9, 0x67, 0x27, 0x7d, 0x2d, 0x5a, 0x16, 0x99, 0xf4, 0x2a, 0x4b, 0x93,
  0xb7, 0x27, 0xe3, 0x73, 0x3f, 0x86, 0x04, 0x3d, 0x2c, 0x48, 0x65, 0x6e,
  0x03, 0xbb, 0x79, 0x89, 0x45, 0x27, 0xc7, 0xe3, 0xf3, 0x51, 0xac, 0x63,
  0xc3, 0x41, 0x32, 0xa6, 0x5a, 0x1b, 0x0f, 0x27, 0x03, 0xa7, 0x26, 0xf8,
  0x59, 0x1c, 0x1c, 0x53, 0xbc, 0xb4, 0xbc, 0xf2, 0xb2, 0xb2, 0x42, 0x4a,
  0xa5, 0x29, 0xfe, 0x91, 0xd3, 0x94, 0x25, 0xc5, 0x59, 0x43, 0x44, 0xf5,
  0x6a, 0x32, 0xf4, 0x90, 0x14, 0x59, 0xdf, 0x41, 0x6f, 0x2e, 0x43, 0xbd,
  0x46, 0x42, 0x7d, 0x0c, 0x6d, 0xcc, 0x2d, 0xa1, 0x27, 0x26, 0x24, 0x41,
  0xc1, 0x6c, 0x79, 0xbb, 0xa7, 0x49, 0x06, 0xc4, 0x5d, 0xb8, 0x99, 0xe8,
  0xe9, 0x07, 0x11, 0x15, 0x6d, 0x44, 0x67, 0x1f, 0xa5, 0x97, 0x63, 0xbb,
  0x62, 0x81, 0x62, 0x76, 0x3f, 0x33, 0x4e, 0x29, 0x65, 0xdc, 0x88, 0xba,
  0x33, 0xd5, 0x21, 0x39, 0x38, 0x63, 0x7f, 0x93, 0x9d, 0x75, 0x1f, 0x08,
  0x70, 0x3e, 0x63, 0x20, 0xcc, 0xba, 0x8d, 0x84, 0xc9, 0xa0, 0x07, 0xc4,
  0x72, 0xb8, 0xf3, 0x0f, 0x39, 0x46, 0x7a, 0x4e, 0x92, 0x5d, 0x72, 0xad,
  0xf4, 0xd4, 0xe1, 0x0f, 0x9c, 0xf0, 0x8c, 0x38, 0xd9, 0x20, 0x86, 0xcf,
  0x16, 0x83, 0x15, 0xb2, 0xd0, 0x2b, 0x45, 0xf2, 0xfe, 0xf8, 0xd5, 0x49,
  0x17, 0x99, 0x07, 0x69, 0xb4, 0x76, 0xa9, 0x54, 0xd4, 0xa2, 0x4c, 0x13,

  0x27, 0x12, 0x04, 0x7d, 0x56, 0x45, 0x6e, 0xbe, 0xef, 0xf7, 0xb5, 0x37,
  0xdc, 0xef, 0xca, 0x89, 0xb1, 0xcd, 0xda, 0xb6, 0xaf, 0xcb, 0x67, 0x5e,
  0xed, 0x87, 0xe4, 0x6b, 0x46, 0xf3, 0x8f, 0xd7, 0x22, 0xa7, 0xec, 0xb5,
  0xe1, 0x4d, 0x81, 0x72, 0x2c, 0x60, 0x64, 0x46, 0x1c, 0xed, 0xa0, 0x7e,
  0x31, 0x50, 0x2e, 0xc8, 0x01, 0x94, 0x26, 0x5e, 0x7e, 0x5d, 0x1b, 0x66,

  0xa7, 0xac, 0xa4, 0xee, 0x71, 0xeb, 0xf5, 0xbb, 0xd3, 0x37, 0xc3, 0xf3,
  0xd3, 0x6d, 0x22, 0x13, 0x0c, 0xdd, 0x9f, 0x22, 0x52, 0xdb, 0x16, 0xa9,


  0x0e, 0xa5, 0x44, 0x5c, 0x6d, 0x5b, 0x35, 0x41, 0x0b, 0xba, 0xa6, 0x29,


  0x98, 0x9e, 0xbe, 0x15, 0xb4, 0x2f, 0x29, 0x58, 0x13, 0x81, 0x2b, 0xc3,
  0xd0, 0xd2, 0x34, 0x25, 0x85, 0xd1, 0x06, 0xb2, 0x38, 0xab, 0x43, 0x58,
  0xf7, 0x64, 0x55, 0xdf, 0x25, 0x52, 0x5f, 0x5a, 0xd3, 0x49, 0x19, 0x5b,


  0x2a, 0x8c, 0x0e, 0x28, 0x58, 0x9f, 0x45, 0x2a, 0xa2, 0x92, 0x3b, 0x2e,
  0xeb, 0x6a, 0x4a, 0x73, 0x7b, 0xd3, 0xaa, 0x2a, 0x6f, 0x54, 0x6e, 0xa1,
  0xf6, 0xdb, 0x1c, 0xa3, 0x99, 0x3a, 0x9d, 0x53, 0x75, 0xd7, 0x8b, 0xee,


  0x22, 0x80, 0x65, 0xda, 0x31, 0x7c, 0xad, 0xfa, 0xf7, 0xa4, 0x8d, 0xb9,
  0xa1, 0x09, 0xe0, 0xc3, 0xa6, 0x5a, 0x51, 0x4d, 0x69, 0x4f, 0x12, 0xdf,
  0x09, 0x10, 0x1c, 0x3b, 0x49, 0xe3, 0x03, 0x01, 0x55, 0x24, 0x00, 0x1e,
  0xb4, 0x79, 0xb3, 0x25, 0x7a, 0xda, 0x76, 0xe8, 0x0f, 0xc1, 0x0d, 0x16,
  0xac, 0x65, 0x52, 0xea, 0xe7, 0x73, 0x97, 0x36, 0x2e, 0x88, 0x9d, 0x79,

  0xc3, 0x9d, 0x37, 0x35, 0x05, 0x07, 0x48, 0x6a, 0xdc, 0xf9, 0x37, 0xbd,
  0x0b, 0x4d, 0x2f, 0x45, 0x49, 0xca, 0x09, 0xa1, 0x62, 0xb6, 0x9a, 0xe2,
  0x94, 0x28, 0xe2, 0x47, 0x7d, 0x3d, 0x27, 0x0c, 0xdc, 0xaa, 0x30, 0x0f,
  0x34, 0xb4, 0xcb, 0x97, 0x67, 0x07, 0x4e, 0x57, 0xcb, 0xe2, 0xa7, 0x6c,
  0xb3, 0x32, 0x52, 0x25, 0x29, 0xad, 0xcf, 0x36, 0xda, 0xea, 0x98, 0x9c,
  0x14, 0x53, 0x72, 0xad, 0x92, 0x43, 0x76, 0x45, 0xa0, 0xf9, 0x80, 0x0b,
  0x97, 0xb8, 0x3f, 0x21, 0x5b, 0x12, 0xf9, 0x22, 0xe8, 0xfe, 0x55, 0x5a,
  0x1b, 0xb6, 0xd4, 0x1e, 0x71, 0x7b, 0x8d, 0x7b, 0x7a, 0xa5, 0x85, 0x15,
  0xde, 0xe9, 0x9d, 0x0c, 0xbc, 0xd3, 0xe8, 0x39, 0xb9, 0x63, 0x91, 0xd2,
  0xc2, 0xd7, 0x38, 0x39, 0xc3, 0xdb, 0x73, 0xe1, 0x52, 0xc0, 0x5d, 0xa4,
  0x6c, 0xf5, 0x94, 0xda, 0x5c, 0x5f, 0xc7, 0x98, 0x53, 0x6a, 0x7b, 0x39,
  0x36, 0x89, 0x7e, 0x34, 0xd9, 0xd2, 0xca, 0x4f, 0x5b, 0x8a, 0x74, 0x22,
  0xbf, 0x3a, 0xb0, 0xb5, 0xa9, 0xc4, 0xd3, 0x3a, 0xc3, 0x3d, 0xfa, 0xe1,
  0x87, 0xa4, 0xdd, 0x78, 0x79, 0x7b, 0x10, 0xd6, 0x44, 0xf8, 0x45, 0x29,
  0xb3, 0xd2, 0x9f, 0x6e, 0x50, 0x57, 0xc7, 0x34, 0x67, 0x14, 0x02, 0xa4,
  0xf0, 0x8f, 0x2c, 0x50, 0x44, 0x53, 0x1a, 0xeb, 0xef, 0x4a, 0x0b, 0xad,
  0x90, 0xbf, 0xe1, 0x12, 0x38, 0xc8, 0x55, 0x86, 0x22, 0xcf, 0x30, 0xe7,
  0x07, 0x0c, 0x57, 0x53, 0x2f, 0x38, 0xa6, 0x82, 0x9c, 0x74, 0x7f, 0xb3,
  0x6a, 0xe7, 0x9c, 0xb9, 0xa2, 0xd8, 0x82, 0xe0, 0x92, 0xdf, 0xdb, 0x1c,
  0x9a, 0xa1, 0x3f, 0xb0, 0x2e, 0x08, 0x7c, 0xee, 0x2a, 0xc1, 0x09, 0xb1,
  0xd3, 0x2a, 0x13, 0x5f, 0x43, 0x6d, 0xa1, 0xf5, 0x83, 0x28, 0x32, 0x81,
  0xf6, 0xcc, 0x39, 0x75, 0x8d, 0xfd, 0xaa, 0xa9, 0x77, 0x63, 0x1c, 0xe6,
  0x62, 0xe7, 0xcc, 0xb8, 0x16, 0x23, 0xd0, 0xde, 0x6f, 0x4a, 0xd2, 0x9f,
  0x08, 0x03, 0x03, 0x88, 0x71, 0x25, 0x3b, 0xb5, 0xd0, 0x37, 0x58, 0xa5,
  0xcd, 0x1f, 0xf4, 0xde, 0x8e, 0x40, 0x90, 0x36, 0x20, 0x46, 0x54, 0x10,
  0x0b, 0x81, 0x2a, 0x33, 0xc1, 0xc1, 0x10, 0xbe, 0x2f, 0xa5, 0xc3, 0x69,
  0x47, 0x32, 0xf2, 0x16, 0x6b, 0x94, 0x9c, 0xf5, 0x69, 0x40, 0x51, 0x2c,
  0x60, 0xbb, 0x04, 0x40, 0xd3, 0xee, 0xca, 0x32, 0x58, 0x0e, 0xb1, 0x19,
  0x0b, 0x4d, 0xc7, 0xbe, 0x2d, 0x63, 0x92, 0x0e, 0xf1, 0x58, 0xdd, 0x97,
  0x6e, 0xe2, 0xa2, 0x66, 0xd2, 0x3d, 0xc5, 0xdf, 0x30, 0x88, 0xd8, 0x8b,
  0x56, 0x66, 0x4b, 0xce, 0x3d, 0x47, 0x09, 0x40, 0x64, 0x10, 0xb1, 0x77,
  0xd8, 0xab, 0x30, 0x2b, 0x03, 0x4f, 0xac, 0xad, 0x52, 0xe5, 0x9b, 0x40,
  0x68, 0x1d, 0x32, 0x72, 0x2b, 0x1f, 0x28, 0xd0, 0x95, 0xeb, 0xe4, 0xd1,
  0xee, 0x9e, 0x31, 0x96, 0x76, 0xf7, 0xd1, 0x4d, 0xfa, 0xd1, 0xee, 0x23,
  0x8b, 0x76, 0xd0, 0xba, 0x23, 0xfc, 0x2c, 0xdc, 0x21, 0x6c, 0x84, 0x9a,
  0x8b, 0x74, 0x7b, 0x1b, 0xb6, 0xa9, 0xc8, 0xda, 0x75, 0x14, 0x43, 0x5b,
  0x7b, 0x18, 0x4e, 0xd5, 0x6d, 0x24, 0xe2, 0x75, 0x61, 0x67, 0x4a, 0xae,
  0xf4, 0xa5, 0x9a, 0x19, 0x00, 0x84, 0x8c, 0xfa, 0xda, 0x58, 0x35, 0x5d,
  0x0c, 0x34, 0x39, 0x70, 0x1f, 0x33, 0x06, 0x87, 0x48, 0xbb, 0x22, 0xd0,


  0x4b, 0x66, 0xa5, 0xb7, 0x7d, 0xf5, 0x07, 0xae, 0x77, 0x9f, 0xc5, 0x28,
  0x55, 0x46, 0xa3, 0x75, 0x32, 0xda, 0x9b, 0xf5, 0x80, 0x12, 0x3e, 0x0c,
  0x71, 0xd3, 0x26, 0x06, 0x37, 0x99, 0x7f, 0xa1, 0xf9, 0x79, 0xfc, 0xaf,
  0x47, 0x51, 0x7b, 0x5d, 0x10, 0x50, 0xc8, 0x09, 0x6a, 0xb5, 0x38, 0xa7,


  0xc6, 0xb5, 0x02, 0xbb, 0xec, 0x0a, 0xe1, 0xe7, 0x63, 0x9e, 0x7a, 0xf6,
  0x0b, 0x38, 0x3f, 0x41, 0x9d, 0xcd, 0x05, 0x4c, 0x63, 0xd5, 0x4a, 0x73,
  0x1a, 0x02, 0x23, 0x69, 0xa8, 0x0b, 0x7a, 0x21, 0x7f, 0x09, 0x1c, 0xa0,
  0xe8, 0x5a, 0x0c, 0x75, 0x1b, 0x9d, 0x67, 0xb6, 0xad, 0x53, 0x06, 0x66,
  0x24, 0x8d, 0x61, 0x37, 0x45, 0x54, 0x1f, 0xe9, 0x08, 0xcf, 0x5c, 0xbf,
  0x2b, 0xe7, 0x5a, 0x42, 0xa7, 0xf7, 0x44, 0x55, 0xbd, 0x0c, 0xc6, 0xd7,
  0xbc, 0x0d, 0x8b, 0x43, 0xe0, 0xd4, 0x6c, 0xf3, 0x58, 0x8c, 0x21, 0xd4,
  0x9a, 0x70, 0x8f, 0xb6, 0xda, 0xea, 0xc1, 0x97, 0x39, 0x76, 0xa6, 0x93,
  0x1c, 0x36, 0x68, 0x2f, 0x0d, 0xe7, 0x5a, 0x68, 0xf7, 0xd2, 0x56, 0x0c,
  0x78, 0x2b, 0xd0, 0xb3, 0x9d, 0x1a, 0xf1, 0x68, 0x5e, 0x67, 0x6b, 0xa6,

  0x1c, 0x5e, 0x01, 0x62, 0xb4, 0x66, 0x7f, 0xc4, 0xd2, 0x76, 0x39, 0xf5,
  0x03, 0x07, 0xda, 0x5e, 0xe8, 0x72, 0x4e, 0xa8, 0x8d, 0x30, 0x25, 0xa4,
  0xb5, 0xf4, 0xe3, 0x01, 0xfe, 0xf6, 0x64, 0xf7, 0x39, 0x93, 0xd3, 0xf1,
  0xd1, 0xf9, 0xeb, 0xae, 0x87, 0xb0, 0x32, 0xa4, 0xcd, 0xff, 0x1d, 0x66,
  0x69, 0x75, 0x65, 0x2c, 0x16, 0x02, 0x60, 0x1a, 0x52, 0x53, 0x8f, 0xe1,
  0xee, 0x6e, 0x2c, 0x19, 0xe4, 0x13, 0x62, 0x4e, 0x3c, 0x7a, 0xdc, 0x8e,
  0x13, 0x92, 0x9d, 0x30, 0xa4, 0xed, 0xee, 0x87, 0x07, 0x6e, 0x93, 0x97,
  0x45, 0x90, 0x97, 0xc7, 0x5b, 0x59, 0x00, 0x5a, 0x4c, 0x07, 0x31, 0xd5,
  0x41, 0xd7, 0xf4, 0xec, 0xf6, 0xae, 0xd6, 0xe4, 0x40, 0x69, 0xb7, 0xd8,
  0x36, 0x69, 0xee, 0xb6, 0x13, 0x6e, 0x4d, 0xc9, 0x3d, 0xe4, 0x1a, 0x30,
  0x1b, 0x58, 0x26, 0xd1, 0x6a, 0xfc, 0x5a, 0xea, 0x11, 0xab, 0x8c, 0x70,
  0xdc, 0x58, 0x97, 0x94, 0x5e, 0x5c, 0xf7, 0x63, 0xd1, 0x61, 0x0b, 0xaa,
  0xe9, 0x52, 0x2a, 0x53, 0xf9, 0xdf, 0x24, 0xdf, 0x5b, 0x49, 0xb9, 0xfb,
  0x4f, 0x22, 0x1b, 0x07, 0x2d, 0xe0, 0x17, 0x6e, 0x9c, 0xd3, 0xb7, 0xd8,
  0x2b, 0xc8, 0x1d, 0xa3, 0xb4, 0xfe, 0x31, 0x92, 0xfe, 0xad, 0x2d, 0xa2,
  0x7f, 0xf6, 0x5a, 0x68, 0xb7, 0x47, 0xeb, 0x10, 0x2d, 0xed, 0x5b, 0x43,
  0x28, 0xed, 0xe8, 0xe0, 0x11, 0x5f, 0xcc, 0xf7, 0x3e, 0xd8, 0x02, 0xe3,
  0xad, 0x95, 0xae, 0x0e, 0xd2, 0x08, 0xcf, 0x7c, 0x49, 0x40, 0x1f, 0x86,
  0x3a, 0x5d, 0xa1, 0x56, 0x94, 0x1b, 0xc2, 0x42, 0x98, 0x00, 0x44, 0x8d,

  0xae, 0xab, 0x31, 0x5c, 0xc8, 0xe5, 0x21, 0xfa, 0xd0, 0x05, 0x99, 0x4d,
  0x74, 0xd7, 0x1a, 0x8d, 0xc1, 0xa8, 0x09, 0xaa, 0xe3, 0x07, 0x15, 0x6f,
  0xf0, 0xce, 0xbc, 0x7b, 0x79, 0x76, 0x9e, 0x9c, 0x9f, 0xfa, 0x6e, 0x05,
  0xae, 0xda, 0x26, 0x03, 0x1a, 0x4d, 0x8e, 0xa2, 0x5c, 0xde, 0x4e, 0xd4,
  0xb5, 0xb7, 0x10, 0x9b, 0x9c, 0x05, 0x16, 0x52, 0x2b, 0x81, 0xaa, 0x07,
  0xec, 0x5b, 0x7f, 0xb7, 0x22, 0xc5, 0x6d, 0xd8, 0xbd, 0xae, 0xdb, 0x9f,
  0x15, 0x58, 0x9b, 0x1e, 0xed, 0xa9, 0xb1, 0x9c, 0xdc, 0x9d, 0xf0, 0xf4,
  0x62, 0xcd, 0xf7, 0x34, 0xc9, 0xd4, 0x96, 0x39, 0x72, 0x46, 0x08, 0xcd,
  0xe5, 0x3a, 0x9d, 0xe7, 0x33, 0x6f, 0x57, 0x42, 0xc7, 0x63, 0xc1, 0xe0,
  0xf9, 0x9c, 0x0b, 0xc3, 0xea, 0xaa, 0x3e, 0x2c, 0xd6, 0x64, 0x64, 0xcf,
  0x68, 0x05, 0x83, 0x9f, 0x7d, 0x6a, 0x0c, 0x0b, 0x83, 0xdd, 0x86, 0x07,
  0x82, 0xd6, 0x83, 0x0c, 0x0d, 0x43, 0xdd, 0xb3, 0x78, 0x9f, 0x94, 0xd2,
  0xf1, 0xb0, 0xce, 0x34, 0x46, 0x6d, 0x04, 0x96, 0xe7, 0x3d, 0xf4, 0xfa,
  0x4b, 0xef, 0xde, 0xc0, 0xb5, 0xff, 0x21, 0xed, 0x6a, 0x21, 0xed, 0x0d,
  0xe1, 0x70, 0x43, 0x54, 0xbf, 0x8b, 0x8e, 0x94, 0x2d, 0xb3, 0xb4, 0x55,
  0xea, 0xd1, 0x66, 0xc6, 0xd6, 0x51, 0x13, 0xbf, 0x0d, 0x51, 0x67, 0xa3,

  0x78, 0xbb, 0xd8, 0x95, 0x86, 0xcb, 0xaf, 0x71, 0x89, 0x81, 0x1c, 0xb3,
  0xbc, 0xae, 0x3c, 0x41, 0x65, 0x6c, 0x60, 0x39, 0x31, 0x19, 0xb0, 0x13,



  0xce, 0x32, 0x97, 0xd2, 0xc1, 0x4b, 0xf0, 0xe0, 0x65, 0x5c, 0x07, 0x6e,
  0xcd, 0xa3, 0xb0, 0xef, 0x73, 0xd2, 0xaf, 0x5a, 0x74, 0xdf, 0xbd, 0x7b,
  0xfd, 0x67, 0x3d, 0x9a, 0x6d, 0x9d, 0x5e, 0xd0, 0x0c, 0xad, 0x3d, 0xdd,
  0x49, 0xe6, 0xa5, 0xc3, 0x0a, 0x0e, 0x4a, 0x6b, 0xd7, 0xf9, 0x5f, 0x82,
  0x64, 0x10, 0xe2, 0xe4, 0x33, 0x9e, 0x77, 0xb2, 0x45, 0xb1, 0x66, 0xf3,
  0xdc, 0x58, 0xfc, 0x1a, 0x8f, 0x46, 0x4f, 0xe0, 0x16, 0x7c, 0xfd, 0xf2,
  0xc9, 0xa3, 0xfd, 0xbd, 0xed, 0x51, 0xb2, 0xd5, 0x91, 0x6e, 0xdb, 0x9f,
  0x3d, 0x68, 0xb7, 0xed, 0x79, 0x67, 0xb7, 0x4b, 0x22, 0xdd, 0xad, 0xa3,
  0x1f, 0xce, 0xde, 0x06, 0x6b, 0x34, 0x6b, 0x0a, 0xb2, 0x09, 0xfa, 0xd6,
  0xe8, 0xf4, 0xe6, 0xd6, 0xf8, 0x9a, 0xd7, 0x8b, 0x6e, 0xed, 0x91, 0x78,
  0xfd, 0xeb, 0x2a, 0x27, 0x63, 0x6f, 0x83, 0xb6, 0x64, 0xe3, 0xa4, 0x2c,
  0x66, 0xc6, 0x58, 0x3a, 0x25, 0xa0, 0xca, 0x6c, 0xc3, 0xdc, 0x82, 0x7b,
  0x57, 0xd7, 0xcf, 0xd6, 0xdf, 0x0c, 0x70, 0x55, 0x8a, 0x30, 0xcd, 0xeb,
  0x0d, 0x7e, 0x08, 0x4c, 0x70, 0x02, 0xf8, 0xe1, 0x32, 0xab, 0x95, 0x14,
  0xa6, 0xa3, 0x43, 0x5a, 0xfb, 0xb6, 0xdd, 0xa2, 0x2b, 0x17, 0xdc, 0x9e,

  0x2f, 0x10, 0xd5, 0x79, 0x60, 0x40, 0x10, 0x6f, 0x6c, 0x69, 0x70, 0x6b,
  0xdb, 0x6b, 0x36, 0x0d, 0x04, 0x5b, 0x0e, 0xf8, 0x91, 0x5d, 0x13, 0xd1,
  0x11, 0xf0, 0x98, 0x33, 0xae, 0x73, 0x5b, 0x1a, 0x22, 0x88, 0x02, 0x94,
  0xf9, 0x4e, 0x88, 0x28, 0x83, 0x36, 0x84, 0x67, 0x2c, 0x10, 0x84, 0x3c,
  0x1a, 0xee, 0x39, 0x59, 0xb4, 0xd1, 0x8e, 0xc1, 0xad, 0xc0, 0x58, 0xb3,
  0x5b, 0x4a, 0x46, 0x26, 0x83, 0xea, 0x69, 0x68, 0x0a, 0x1c, 0xca, 0x52,
  0xd4, 0xf2, 0x61, 0x5f, 0xab, 0x6a, 0x5b, 0x50, 0x2a, 0x25, 0x6b, 0x74,
  0xe0, 0xc5, 0xe2, 0x5c, 0x28, 0x2e, 0xc6, 0x46, 0x39, 0x30, 0xc7, 0x1b,
  0x26, 0x9e, 0x4d, 0x74, 0x5e, 0xa7, 0xe0, 0x9c, 0x44, 0xdb, 0x10, 0x8d,
  0xc3, 0x4d, 0xa1, 0x78, 0x5c, 0x6f, 0xac, 0xcd, 0x8b, 0xcf, 0xf5, 0x05,
  0xe8, 0xf2, 0x66, 0x4d, 0x44, 0xae, 0xeb, 0x87, 0xb1, 0xf1, 0xb9, 0x16,
  0xf1, 0x3d, 0xf9, 0x3c, 0x42, 0x7c, 0x6f, 0x4f, 0xcf, 0x8f, 0x0e, 0x04,
  0xe7, 0x4e, 0x01, 0xa1, 0x72, 0x01, 0x65, 0xe1, 0xfc, 0x4c, 0xaa, 0x78,
  0x2a, 0xa4, 0xf2, 0x96, 0x94, 0x42, 0x3d, 0xf5, 0x41, 0xec, 0xca, 0xa3,
  0x50, 0x82, 0xae, 0x09, 0x87, 0x3b, 0x9a, 0x20, 0x83, 0x4f, 0x73, 0xf6,
  0x00, 0x78, 0x21, 0x76, 0x34, 0xd3, 0x13, 0x9d, 0x7f, 0x08, 0x0f, 0x04,

  0x0c, 0x19, 0xc0, 0xb2, 0xb0, 0x7e, 0x18, 0x90, 0x90, 0x84, 0xd0, 0xe1,
  0x74, 0xb0, 0x51, 0x86, 0x29, 0xb5, 0x14, 0x0e, 0x3b, 0xe1, 0x22, 0x4c,
  0x4d, 0xf1, 0x19, 0xee, 0xb9, 0xa9, 0x50, 0xbc, 0x17, 0xb1, 0xe6, 0x84,
  0x9e, 0x4a, 0xe6, 0xa2, 0xe9, 0xdd, 0x4b, 0x25, 0x1e, 0x0a, 0x72, 0x85,
  0xf7, 0x40, 0x60, 0xb1, 0x33, 0xdc, 0xde, 0x27, 0xa5, 0x13, 0x73, 0x8f,
  0xd4, 0x57, 0x41, 0xae, 0x15, 0x6b, 0xc2, 0x0b, 0x90, 0x53, 0x98, 0xc3,
  0x01, 0x16, 0xd8, 0xf6, 0x0d, 0x3a, 0xaf, 0x93, 0x9a, 0x17, 0xc8, 0x5e,
  0xcb, 0x50, 0x9d, 0xc8, 0xf5, 0x99, 0xdc, 0x0b, 0x39, 0x0e, 0x47, 0xec,
  0x03, 0x6d, 0x88, 0x11, 0x48, 0xa2, 0x6f, 0x6a, 0x14, 0x4d, 0xbf, 0x0c,
  0x07, 0xf2, 0x1d, 0x1e, 0x1d, 0xa4, 0xba, 0xc1, 0xde, 0x7d, 0xb2, 0xdb,
  0xe3, 0xd0, 0x61, 0x13, 0x8d, 0x96, 0xdc, 0x49, 0xf6, 0x18, 0xee, 0x41,
  0xb0, 0x4a, 0xe8, 0x7d, 0x55, 0x28, 0xa6, 0xe1, 0xa7, 0x8b, 0xb3, 0x2e,
  0x06, 0x72, 0x46, 0x6b, 0x93, 0x79, 0xdf, 0xc8, 0xc1, 0xe0, 0xa1, 0xbc,

  0xd0, 0x3c, 0x4d, 0xd6, 0xec, 0x81, 0x79, 0x34, 0x57, 0xe4, 0x66, 0x73,
  0x33, 0x4b, 0xf4, 0x44, 0xb6, 0x19, 0x20, 0xa1, 0xb3, 0x99, 0xfc, 0x74,
  0xa3, 0x24, 0xf1, 0x41, 0xf8, 0x28, 0x9c, 0x45, 0xb7, 0x42, 0x0e, 0x86,
  0x76, 0x1d, 0x6e, 0xe7, 0x09, 0x81, 0x58, 0x24, 0x7f, 0x2d, 0x27, 0xe2,
  0x89, 0x24, 0x3d, 0x35, 0x06, 0x67, 0x75, 0x81, 0x12, 0x92, 0x95, 0xa1,
  0xb2, 0xd9, 0x8a, 0xa3, 0x0b, 0x34, 0x21, 0x29, 0x47, 0xe0, 0xfe, 0xe7,
  0x14, 0xf5, 0x4b, 0x2e, 0xb9, 0xe9, 0x0e, 0xf2, 0xa1, 0x15, 0x8d, 0x21,

  0x2c, 0xf9, 0xdf, 0xef, 0x82, 0x16, 0xa5, 0x53, 0x72, 0x0a, 0x9a, 0xc1,
  0x05, 0x1f, 0x84, 0x61, 0x27, 0x5d, 0xdd, 0x46, 0x3a, 0x6d, 0x56, 0xb2,
  0xf1, 0xdd, 0xd9, 0x95, 0x1a, 0x27, 0x30, 0xef, 0xa2, 0x19, 0x02, 0x92,
  0xf1, 0xa6, 0x86, 0xf2, 0xd2, 0xe9, 0x9d, 0xea, 0x0b, 0x4e, 0xb8, 0x0a,
  0xaa, 0xa9, 0x6b, 0x9d, 0x10, 0x16, 0x3a, 0xeb, 0x24, 0x28, 0xe4, 0x9f,
  0xd7, 0xbf, 0xbc, 0x65, 0xd1, 0xc3, 0xed, 0x6a, 0xbf, 0xf1, 0x1c, 0x47,
  0x5e, 0x14, 0x7d, 0xb5, 0x75, 0xd5, 0xb3, 0x26, 0xa5, 0x5d, 0xbe, 0x1f,
  0x8c, 0xa6, 0xe5, 0x30, 0xe3, 0xe0, 0xb8, 0xb5, 0x00, 0x90, 0x0d, 0xa2,
  0x4d, 0xd7, 0x8e, 0x43, 0x3d, 0xe2, 0x8d, 0x7c, 0x85, 0xf9, 0xe1, 0x16,
  0x98, 0x95, 0x2b, 0xaa, 0xa6, 0x61, 0x1e, 0x73, 0xda, 0x64, 0xf2, 0xe4,
  0xf3, 0x27, 0x8f, 0xb7, 0x93, 0x4e, 0x32, 0xee, 0x76, 0xc4, 0xf2, 0xe0,

  0x1b, 0xb7, 0xaa, 0x6d, 0x91, 0xe0, 0x22, 0x87, 0x91, 0x02, 0xbd, 0x46,
  0x2c, 0x92, 0x9c, 0x9b, 0xc7, 0x91, 0xc9, 0x80, 0x0e, 0x8c, 0xcc, 0x94,
  0x83, 0x24, 0x1a, 0xfa, 0x18, 0x5b, 0x38, 0xc9, 0x16, 0x38, 0x7c, 0x5a,

  0x3b, 0xe6, 0xed, 0xca, 0xe3, 0xb8, 0xde, 0x18, 0x4a, 0x9a, 0xe6, 0x7f,


  0x6e, 0x03, 0xc6, 0x21, 0xea, 0x6e, 0x65, 0x9f, 0x33, 0x34, 0x55, 0x51,
  0x3d, 0x8c, 0x94, 0xb8, 0xb2, 0x9d, 0xf4, 0x68, 0x68, 0xf6, 0x2a, 0x72,
  0x81, 0x23, 0x0b, 0x9e, 0x18, 0x5a, 0x3b, 0xe0, 0x56, 0x18, 0xd6, 0xa6,

  0xb3, 0x8f, 0x0c, 0xff, 0x0b, 0x04, 0x12, 0x79, 0x5f, 0xb2, 0x04, 0xe5,
  0x4c, 0xa2, 0xe0, 0x18, 0x8b, 0x6c, 0xa1, 0x2d, 0xd2, 0x58, 0xf5, 0x28,
  0x2b, 0x57, 0x9f, 0xce, 0x81, 0x4a, 0x16, 0x97, 0x48, 0x9a, 0xef, 0x43,
  0x9f, 0x52, 0xb7, 0x5d, 0xaa, 0x48, 0x39, 0xad, 0x99, 0xf5, 0x16, 0x79,

  0x29, 0xb5, 0x29, 0x1e, 0x55, 0xb7, 0xb6, 0x4b, 0xff, 0x6e, 0xa9, 0x32,
  0x2c, 0xeb, 0xe4, 0xaf, 0x76, 0x36, 0xa2, 0x67, 0xf6, 0xb0, 0xa4, 0x18,
  0x39, 0x12, 0xbe, 0xbf, 0xb0, 0x43, 0xf2, 0x3c, 0xd9, 0xc2, 0x84, 0x77,
  0x76, 0xb6, 0xef, 0x9f, 0xb4, 0x3c, 0x79, 0xdf, 0x24, 0xcf, 0xd8, 0x11,
  0xe7, 0x35, 0x55, 0xb9, 0xf0, 0xe6, 0x40, 0xdf, 0xf4, 0x30, 0x63, 0x06,
  0x4c, 0x91, 0x92, 0x6d, 0x49, 0x0e, 0xf3, 0xbb, 0x48, 0x05, 0x19, 0x22,
  0xab, 0xa9, 0x2c, 0xb0, 0xbd, 0x76, 0x71, 0xd3, 0x30, 0xa6, 0xa5, 0xb0,
  0x10, 0x4a, 0x0f, 0x04, 0xc8, 0xe0, 0xa1, 0x21, 0xc2, 0x50, 0xdf, 0x74,
  0xd3, 0xf2, 0x16, 0x07, 0x97, 0x4c, 0x27, 0xda, 0x84, 0x5b, 0xa8, 0x3e,
  0x33, 0x8e, 0x4b, 0x45, 0x0a, 0x84, 0xf4, 0x69, 0x9b, 0x64, 0x0c, 0xa7,
  0x41, 0x04, 0x17, 0x9c, 0x9f, 0x74, 0x3d, 0xa2, 0x23, 0x0d, 0x45, 0x5a,
  0x21, 0x04, 0x1e, 0xd0, 0x70, 0xd4, 0x8f, 0x6e, 0xcd, 0x0c, 0xca, 0xed,
  0x07, 0x41, 0x5c, 0xc1, 0x71, 0x5a, 0x85, 0xa1, 0x27, 0xcc, 0xcd, 0xd2,
  0x37, 0x76, 0x8c, 0x11, 0xa9, 0x26, 0xfc, 0xd3, 0xd6, 0x66, 0x0e, 0xf8,
  0x8e, 0x02, 0x0d, 0x2a, 0xa6, 0xab, 0xa3, 0x75, 0x68, 0x08, 0x67, 0x62,
  0xf7, 0x70, 0x6d, 0x1a, 0xaa, 0xcd, 0x43, 0xe5, 0xa0, 0x08, 0x67, 0xa2,
  0x86, 0x72, 0x56, 0x7d, 0xc3, 0x3a, 0x68, 0xdb, 0x37, 0xf6, 0xac, 0xed,
  0x6b, 0xb0, 0xd0, 0x2c, 0x3d, 0x20, 0xa5, 0x48, 0x41, 0xae, 0x93, 0xb7,
  0xfa, 0x58, 0xb2, 0x35, 0x3e, 0x7b, 0x7b, 0xf4, 0xf5, 0xe9, 0xf6, 0x7d,
  0x3e, 0xf5, 0x36, 0xff, 0xb7, 0xeb, 0x4a, 0x35, 0x57, 0x5e, 0xa6, 0x0f,
  0xeb, 0xe4, 0xeb, 0xf1, 0x78, 0x78, 0x78, 0x76, 0x8c, 0x3e, 0xaf, 0x63,
  0xf3, 0x67, 0x4f, 0x43, 0x82, 0x11, 0xda, 0x61, 0x0c, 0xbf, 0x93, 0x02,
  0xea, 0x5a, 0xd4, 0x8c, 0x04, 0x1e, 0x6b, 0x24, 0x67, 0x41, 0x79, 0x10,
  0xf5, 0xce, 0x82, 0xdb, 0x60, 0xf8, 0xae, 0xc9, 0x73, 0x76, 0xbc, 0x83,
  0x4f, 0xd1, 0x27, 0xb1, 0xa0, 0x1e, 0xf7, 0xc1, 0x2a, 0xec, 0xf2, 0x4a,
  0x9a, 0x0f, 0x12, 0xad, 0xc1, 0xa0, 0xb5, 0x22, 0xc2, 0x58, 0x7e, 0x24,
  0x4e, 0x5c, 0xd4, 0x3a, 0x5e, 0x7f, 0x46, 0xae, 0x5b, 0x2a, 0x30, 0x52,
  0xe4, 0xe0, 0x8e, 0xab, 0x18, 0x26, 0x1a, 0xe3, 0x43, 0xce, 0xa9, 0x8b,
  0xc3, 0x58, 0x13, 0x1f, 0xbb, 0x4e, 0x91, 0xcd, 0xe1, 0x2a, 0x49, 0x0e,
  0x36, 0x39, 0xc9, 0x3a, 0x2b, 0xca, 0xd5, 0xe5, 0x15, 0x1b, 0x58, 0x6d,
  0x3f, 0x44, 0xab, 0xdd, 0xb3, 0x6d, 0x60, 0x62, 0x26, 0x19, 0x90, 0x20,
  0xde, 0x51, 0xbd, 0xa7, 0xca, 0x28, 0x42, 0xca, 0xea, 0x0d, 0xa7, 0xbf,
  0xcd, 0x7e, 0x93, 0x06, 0x89, 0x6b, 0x34, 0x90, 0x09, 0x67, 0x0f, 0xc0,
  0xed, 0x5b, 0x34, 0xf3, 0x85, 0xfc, 0x35, 0x2d, 0xee, 0xe0, 0xde, 0x97,
  0x60, 0x17, 0x8a, 0xa0, 0x2d, 0x4d, 0xb7, 0x09, 0xbd, 0xa9, 0xa6, 0x30,
  0xf4, 0x39, 0x0f, 0x9b, 0xab, 0x9f, 0xd7, 0xd1, 0x2c, 0xa9, 0xf4, 0x46,

  0x13, 0x37, 0x46, 0x15, 0x94, 0xf4, 0x62, 0xa0, 0xa3, 0x0c, 0x8c, 0x39,
  0x2c, 0xd1, 0x62, 0x51, 0x84, 0x85, 0x08, 0x22, 0xac, 0x08, 0x7d, 0x50,
  0xb7, 0xd2, 0x49, 0x5d, 0xce, 0x57, 0x0d, 0x74, 0x01, 0x72, 0xe2, 0x53,
  0x85, 0xd9, 0xb6, 0xeb, 0x23, 0x8f, 0x51, 0x35, 0xd3, 0x99, 0xc3, 0x46,
  0x11, 0xf7, 0xa4, 0x6b, 0xd2, 0x3b, 0x72, 0x21, 0x2b, 0x0e, 0xa7, 0x8b,
  0x7f, 0x82, 0x76, 0x96, 0xc7, 0xc2, 0x50, 0x4b, 0xe4, 0xe6, 0x5d, 0x2b,
  0xe0, 0x61, 0x78, 0x7e, 0x7a, 0x56, 0xad, 0xdd, 0xd1, 0x68, 0x10, 0xb1,
  0xee, 0x56, 0xb5, 0x86, 0xd3, 0x1a, 0x63, 0x9c, 0xad, 0x37, 0x5d, 0x5f,
  0xf3, 0x65, 0x26, 0x74, 0x4b, 0x26, 0x77, 0xf6, 0x63, 0xfc, 0x9d, 0x14,

  0xf9, 0x6c, 0x56, 0x11, 0x7e, 0x28, 0xbe, 0x98, 0x3b, 0x8c, 0xd1, 0xba,
  0x8c, 0xac, 0xf6, 0x97, 0x3a, 0x43, 0x7f, 0x47, 0x10, 0x0a, 0xf6, 0x88,

  0x71, 0x1a, 0xad, 0x43, 0xee, 0xa0, 0xdf, 0x88, 0xaf, 0x81, 0x36, 0x62,
  0x84, 0x27, 0x02, 0x02, 0xa6, 0x6c, 0x12, 0xbb, 0x2a, 0x55, 0x8f, 0xc8,

  0xdf, 0x96, 0x72, 0x4f, 0x59, 0x7e, 0xd9, 0xfb, 0x86, 0xad, 0x87, 0x2b,
  0xd7, 0xb7, 0x7d, 0x76, 0xa7, 0x33, 0x7a, 0xc0, 0x86, 0xb8, 0xf5, 0xbb,
  0x1f, 0x06, 0x96, 0x9d, 0x4d, 0x99, 0xa8, 0xa7, 0x82, 0x60, 0x39, 0x12,
  0x2a, 0xdc, 0xfa, 0x20, 0x7f, 0xa1, 0x3b, 0xf0, 0x7d, 0x5e, 0x18, 0xcd,
  0xb0, 0xde, 0x56, 0xe2, 0x94, 0x0c, 0xcd, 0xf0, 0xee, 0x56, 0x9b, 0xd4,
  0xd7, 0xd8, 0x70, 0x1c, 0x97, 0xad, 0x4a, 0x8a, 0x33, 0x07, 0x18, 0x03,
  0x56, 0xe4, 0x75, 0xf7, 0xbd, 0x5b, 0x06, 0x45, 0x64, 0x53, 0xcb, 0x74,
  0x30, 0x06, 0xe0, 0xbb, 0x8d, 0x59, 0x50, 0xe4, 0xb7, 0x2e, 0xcb, 0xc5,
  0x42, 0x10, 0xfa, 0x81, 0x7f, 0xc3, 0x08, 0x49, 0x5c, 0x45, 0x66, 0x17,
  0x84, 0x5c, 0x69, 0x77, 0xb1, 0xce, 0xad, 0x27, 0xdb, 0xc9, 0x45, 0xb3,
  0xdc, 0xda, 0xdb, 0xe6, 0x5e, 0x0e, 0x8c, 0xcf, 0xe0, 0x77, 0xf6, 0x0d,
  0xbd, 0x38, 0x94, 0x60, 0x9b, 0xbc, 0xb4, 0x9f, 0x45, 0xec, 0x9f, 0x50,
  0x0d, 0x51, 0xc9, 0x7a, 0x21, 0x37, 0x98, 0x37, 0xcc, 0x36, 0xd9, 0xb1,
  0x75, 0xc2, 0x5d, 0xef, 0x00, 0x52, 0xdf, 0x96, 0x84, 0x6f, 0x8c, 0x0a,
  0x5f, 0x63, 0x41, 0xe4, 0x8d, 0x8f, 0x24, 0x4d, 0x3d, 0x33, 0xb8, 0xfc,
  0xdf, 0xec, 0xdc, 0x7c, 0x36, 0x24, 0x1e, 0x72, 0x59, 0x95, 0x46, 0x44,
  0x56, 0x11, 0x10, 0x58, 0xb1, 0x29, 0xce, 0x51, 0x83, 0x76, 0x9d, 0x57,
  0x65, 0x01, 0xa4, 0xdd, 0xeb, 0xb4, 0xca, 0x91, 0xed, 0xb2, 0xf1, 0xcd,
  0xe9, 0x9b, 0xa3, 0x0d, 0xdf, 0x29, 0x72, 0x91, 0x6b, 0x19, 0xed, 0x55,

  0xd8, 0x4a, 0xc0, 0x9e, 0x66, 0xcc, 0x69, 0x68, 0x44, 0xfa, 0xf4, 0xa3,
  0x62, 0x68, 0xdc, 0x31, 0x5e, 0x62, 0x66, 0x0b, 0xcc, 0x8d, 0x2a, 0x29,
  0x89, 0x30, 0xd2, 0x5c, 0x54, 0x29, 0x0c, 0x99, 0x70, 0xb1, 0x16, 0x50,
  0x6a, 0x1a, 0xa2, 0x0d, 0x54, 0xe9, 0xb7, 0xb7, 0x4c, 0xbc, 0x16, 0x98,
  0xa4, 0xe6, 0x6b, 0x7d, 0x9a, 0x73, 0xb1, 0x77, 0xc5, 0xe3, 0xe2, 0x8e,
  0x2c, 0x9b, 0xcd, 0xb6, 0x00, 0xdc, 0xac, 0xc9, 0x18, 0x6f, 0x36, 0x75,
  0x7b, 0x91, 0x33, 0xed, 0x78, 0x7c, 0xd8, 0x76, 0xbc, 0xe7, 0xeb, 0x4c,
  0xd5, 0xfc, 0x09, 0x37, 0x3a, 0x0f, 0xee, 0x6e, 0xdf, 0x01, 0xdf, 0xbe,
  0xdb, 0x26, 0x0a, 0x12, 0xe6, 0x57, 0x8d, 0xa4, 0xae, 0x4c, 0xb2, 0xdd,

  0xb4, 0xbc, 0x9d, 0xc1, 0x42, 0x9d, 0x56, 0x42, 0xaf, 0xa2, 0xf9, 0x7c,
  0x39, 0xcd, 0xfd, 0x34, 0x91, 0x00, 0xf5, 0x5c, 0xb5, 0xa4, 0xc2, 0xeb,
  0xd1, 0x83, 0xd1, 0x7a, 0x51, 0x77, 0x8d, 0xe0, 0x46, 0x2e, 0xa1, 0x46,
  0xe5, 0xf2, 0x8a, 0x80, 0xac, 0x5c, 0xd6, 0x83, 0x7c, 0x69, 0xe0, 0x43,
  0x0a, 0x0c, 0x7a, 0x70, 0xb8, 0x5d, 0x3e, 0x96, 0xd5, 0x4b, 0x18, 0x88,

  0x9a, 0xa1, 0x8c, 0x6d, 0xa6, 0x8c, 0xa2, 0x39, 0x87, 0xfa, 0xb1, 0xdd,
  0x49, 0x75, 0x6c, 0xa3, 0x6c, 0xcf, 0xfc, 0x8d, 0xcd, 0x19, 0x8b, 0x22,
  0x0b, 0xab, 0x9e, 0x15, 0x0e, 0xea, 0xc1, 0xa3, 0x38, 0xf3, 0x51, 0xeb,
  0xda, 0xde, 0x47, 0xb3, 0x34, 0x69, 0x27, 0x52, 0xaf, 0xaa, 0x6b, 0x94,
  0x7e, 0x4b, 0x13, 0x3a, 0xce, 0x8f, 0x77, 0xe7, 0x21, 0xe7, 0x10, 0x91,
  0xf2, 0xde, 0x0c, 0x29, 0x77, 0xb9, 0x12, 0x78, 0xb8, 0xe4, 0x6b, 0x9e,
  0x85, 0x9d, 0xa0, 0xb5, 0x74, 0x08, 0x05, 0x88, 0xb5, 0xd8, 0xa0, 0x52,
  0xa5, 0xac, 0x01, 0x1e, 0xdd, 0x54, 0xe9, 0xd4, 0xfd, 0x65, 0x98, 0xd6,

  0xd3, 0x3c, 0xd7, 0xa6, 0x66, 0x14, 0x1f, 0xcc, 0x28, 0x27, 0x3c, 0x0e,
  0x12, 0x65, 0xcf, 0xc3, 0xf6, 0x13, 0x9a, 0x71, 0x4f, 0x1b, 0xc9, 0xd0,
  0x4a, 0xb9, 0xdb, 0x25, 0xa5, 0x29, 0xa1, 0x42, 0x54, 0x82, 0x87, 0xb1,
  0x3e, 0x6f, 0x8a, 0xd4, 0xdb, 0x63, 0xda, 0x1a, 0xeb, 0x7b, 0xcf, 0x37,
  0xbf, 0x75, 0x13, 0x86, 0x04, 0xd5, 0x56, 0x37, 0x6c, 0x4a, 0xde, 0xdc,
  0xec, 0xfb, 0xcf, 0xac, 0xcb, 0xde, 0xe8, 0x20, 0x83, 0x15, 0xe5, 0x30,
  0x9d, 0x2f, 0xa3, 0x79, 0x9e, 0xe3, 0xed, 0x56, 0xcb, 0xd7, 0xc3, 0x93,
  0xb3, 0xb7, 0x00, 0x8d, 0xa4, 0xee, 0x01, 0x45, 0xcd, 0x59, 0x35, 0xf4,
  0x33, 0xaa, 0xe3, 0x28, 0x18, 0x5b, 0x15, 0xf9, 0x55, 0xb3, 0x10, 0x63,
  0x80, 0x63, 0xe3, 0x64, 0x3e, 0xc4, 0xec, 0x2b, 0xce, 0x6c, 0x2b, 0x12,
  0xaf, 0xcc, 0x97, 0x19, 0xbc, 0xda, 0x17, 0xdd, 0xe5, 0x98, 0xaf, 0xba,
  0x6f, 0x6b, 0xa3, 0x11, 0x5b, 0x8c, 0xd7, 0x7e, 0xd7, 0xe2, 0x66, 0x96,
  0x0a, 0x92, 0x19, 0xf0, 0xf3, 0x26, 0xb3, 0xe8, 0x9c, 0x62, 0xd7, 0xd9,
  0x48, 0xb9, 0x78, 0x95, 0x24, 0xa9, 0x08, 0xe8, 0x2d, 0x8a, 0x13, 0x11,
  0x57, 0x27, 0x6c, 0x1a, 0xa3, 0xd9, 0xd8, 0x62, 0x59, 0x74, 0x41, 0xe7,
  0x64, 0xbb, 0xa3, 0x46, 0x68, 0x80, 0x80, 0xf8, 0x90, 0xda, 0x48, 0x3a,

  0x91, 0xd1, 0x9a, 0x03, 0x7e, 0x3b, 0xe0, 0xaf, 0x4e, 0x56, 0xc4, 0x21,
  0x3a, 0x5f, 0x90, 0xe3, 0x65, 0xa5, 0x89, 0x9f, 0xa0, 0xef, 0x89, 0xfb,
  0x8b, 0x11, 0xc5, 0xa8, 0x92, 0x39, 0x4b, 0x17, 0xd4, 0xeb, 0x53, 0xab,

  0x65, 0xc8, 0xf3, 0x4b, 0x59, 0xcd, 0xdd, 0x09, 0xaf, 0x52, 0xe1, 0x58,
  0x2d, 0x58, 0xff, 0x4e, 0x11, 0x0d, 0x7f, 0x86, 0x38, 0xa9, 0x3f, 0x7c,
  0xac, 0x30, 0x12, 0xaf, 0x83, 0x87, 0x20, 0x1b, 0x80, 0xe3, 0x36, 0xda,
  0x00, 0x97, 0xd1, 0xf3, 0x79, 0x08, 0x6d, 0x54, 0x8a, 0x06, 0x6e, 0x57,
  0xab, 0xe2, 0xa3, 0x99, 0x42, 0x88, 0x09, 0xa0, 0x19, 0xef, 0xd4, 0x02,
  0x86, 0xfb, 0x46, 0xd3, 0x5f, 0x2c, 0xc4, 0x07, 0x8f, 0x40, 0xc0, 0xfd,
  0xd7, 0xe4, 0xc8, 0x13, 0x24, 0xfb, 0x7e, 0x68, 0x46, 0xf6, 0x3c, 0xdb,
  0xfb, 0x61, 0x66, 0x65, 0x37, 0x30, 0x5a, 0xd3, 0xa1, 0x27, 0x2d, 0x3a,
  0x19, 0x12, 0x8b, 0x2f, 0x3d, 0x91, 0x22, 0x51, 0x6c, 0x45, 0x51, 0x43,
  0x59, 0x1e, 0x59, 0x20, 0xc4, 0x5c, 0x02, 0x76, 0xb8, 0xaa, 0xb9, 0x14,
  0x52, 0x8e, 0x95, 0xe8, 0xc1, 0x6f, 0xc1, 0x16, 0x99, 0x49, 0x1b, 0xa0,
  0xa2, 0x8f, 0x0e, 0xda, 0x6d, 0xa0, 0x1d, 0x9e, 0x85, 0x64, 0x4e, 0x59,
  0x9d, 0x8d, 0xba, 0x23, 0xfb, 0xdd, 0x59, 0x23, 0x7c, 0xcb, 0xe5, 0x29,
  0x66, 0x85, 0x25, 0xb2, 0x45, 0x14, 0x7d, 0xf9, 0x93, 0xef, 0x92, 0x5b,
  0x88, 0xb7, 0x51, 0xf6, 0x87, 0x9d, 0x4d, 0x2a, 0x1e, 0xc4, 0x0d, 0xdf,
  0x86, 0xcc, 0xf0, 0x6d, 0x9b, 0x17, 0xba, 0x95, 0x06, 0x60, 0x02, 0x91,
  0x1b, 0x7d, 0x2f, 0x0f, 0xa4, 0xe1, 0xa9, 0xca, 0xe4, 0xec, 0x6d, 0x08,
  0x75, 0x20, 0xee, 0x3f, 0x62, 0xbe, 0xf7, 0x73, 0x41, 0x6b, 0xba, 0xcb,
  0xcf, 0x7a, 0x5c, 0x5b, 0xbf, 0x9c, 0x05, 0xaa, 0x45, 0x25, 0xac, 0x2e,
  0xe4, 0x80, 0x45, 0xc0, 0x00, 0x85, 0xee, 0x3e, 0x0d, 0x0b, 0xa4, 0x4f,
  0x1a, 0x2b, 0xfb, 0x92, 0xb2, 0x52, 0xc8, 0x0d, 0x18, 0xb0, 0xc1, 0x53,
  0xeb, 0x37, 0xe2, 0x82, 0x33, 0xdb, 0x6a, 0x50, 0xdf, 0x4a, 0xf0, 0x96,

  0xb2, 0x1b, 0x45, 0x8b, 0x5e, 0xac, 0x10, 0x4d, 0x0b, 0x0a, 0x48, 0x1c,
  0xe5, 0xa7, 0x0c, 0x75, 0x63, 0x1e, 0xba, 0x49, 0xab, 0x82, 0xf3, 0x63,
  0x66, 0x7e, 0xde, 0xa8, 0x61, 0xa6, 0xf6, 0x6a, 0xcd, 0xb9, 0x1a, 0xa6,
  0x0e, 0xfd, 0x46, 0x75, 0x8e, 0xa2, 0xf0, 0xa8, 0x09, 0x8b, 0x4b, 0x63,
  0x37, 0x91, 0x2b, 0xdc, 0x7a, 0xef, 0x8d, 0x7f, 0x6d, 0xc4, 0xbb, 0xd1,
  0x7f, 0x69, 0xda, 0x5b, 0xc6, 0x37, 0xc7, 0x92, 0x7f, 0x67, 0x67, 0x00,
  0xd6, 0xf1, 0x40, 0x40, 0x46, 0x26, 0x88, 0x7a, 0x60, 0x17, 0xd6, 0x46,
  0x2e, 0x7d, 0x16, 0x9c, 0x9d, 0x10, 0x5b, 0x3e, 0x8b, 0x42, 0xd0, 0xe8,
  0xa5, 0x94, 0xa6, 0xd6, 0x12, 0x6b, 0xa2, 0x6b, 0xa4, 0xd8, 0x57, 0xc7,
  0xaf, 0xcc, 0x42, 0xc9, 0xca, 0xb8, 0x34, 0xf7, 0xe7, 0xab, 0xbb, 0xa4,
  0xe7, 0x5a, 0x92, 0xb2, 0xeb, 0xe2, 0xf1, 0xf0, 0xcd, 0x10, 0xc0, 0xaf,
  0x0f, 0x4c, 0x48, 0x38, 0xa5, 0x5e, 0x23, 0x47, 0xc9, 0x95, 0x90, 0x1e,
  0x5a, 0x71, 0x57, 0x12, 0x99, 0x02, 0xc0, 0x0a, 0xb8, 0x5a, 0x19, 0x4a,
  0x25, 0x35, 0x85, 0x3b, 0xde, 0x71, 0x0a, 0x7a, 0x49, 0xe6, 0x01, 0xd8,
  0x2d, 0x4d, 0xd8, 0x9b, 0x71, 0x40, 0x05, 0x1c, 0x80, 0xa8, 0x33, 0xc3,
  0x42, 0xb9, 0xd4, 0x71, 0x52, 0x95, 0x1f, 0x33, 0xe6, 0x17, 0x30, 0x0a,
  0x01, 0x1d, 0xc7, 0x3a, 0xb0, 0xf8, 0xd1, 0x8d, 0x84, 0xe2, 0xae, 0x36,
  0x94, 0x6b, 0x12, 0x04, 0xcc, 0xb9, 0xc7, 0xae, 0x60, 0xce, 0x38, 0x39,
  0x96, 0xe3, 0x75, 0x80, 0xbd, 0x68, 0x23, 0x1a, 0xbe, 0x6a, 0x53, 0x4a,

  0x21, 0xfc, 0x0d, 0x79, 0xb6, 0x3d, 0x75, 0x9f, 0x67, 0x47, 0x8e, 0xf4,
  0xe1, 0x9d, 0x73, 0x0d, 0x2d, 0xc1, 0x79, 0x99, 0xbc, 0x60, 0x86, 0x70,
  0x7b, 0x87, 0x3a, 0xe8, 0xae, 0x87, 0x12, 0xdd, 0x9f, 0x87, 0x6a, 0x2d,

  0xce, 0x12, 0xc9, 0xc1, 0x82, 0xad, 0x4d, 0x36, 0x14, 0xe7, 0x60, 0xce,
  0x1c, 0x80, 0xb5, 0xf4, 0x80, 0x01, 0xe0, 0x4e, 0x88, 0x08, 0x4d, 0x2e,
  0x4e, 0xeb, 0x7a, 0xe3, 0x6c, 0x51, 0x98, 0x4f, 0x74, 0x3a, 0xc0, 0x1d,
  0x43, 0xc7, 0x06, 0xb1, 0x0f, 0xfe, 0x9d, 0xf2, 0x45, 0x8d, 0x31, 0xd2,
  0x50, 0x0a, 0x1f, 0x7f, 0x29, 0x30, 0x17, 0xb8, 0x1b, 0xaa, 0x2d, 0x74,
  0x63, 0x40, 0x1c, 0x0b, 0xaa, 0x45, 0xfd, 0x13, 0x7c, 0xad, 0x8e, 0xdb,
  0xd3, 0x24, 0x47, 0x64, 0x69, 0x46, 0x8c, 0x78, 0xc5, 0x10, 0xc2, 0x1a,
  0x73, 0x69, 0x6d, 0xc1, 0xd9, 0x76, 0xe2, 0x11, 0x49, 0x35, 0x8d, 0x4e,
  0x16, 0xde, 0x86, 0xfa, 0x8c, 0x74, 0x6c, 0x91, 0x64, 0x35, 0x34, 0x66,
  0x16, 0xf0, 0x6d, 0x10, 0x80, 0xf6, 0x41, 0x6d, 0xe5, 0x3a, 0xc1, 0xba,
  0x84, 0x59, 0x73, 0x13, 0xe9, 0x65, 0x8a, 0xd9, 0x24, 0xee, 0xa1, 0x81,
  0xf7, 0xf7, 0x83, 0xcf, 0x77, 0x15, 0xa2, 0x83, 0x02, 0x94, 0xfe, 0x33,
  0x68, 0x5c, 0x1b, 0xd1, 0x00, 0xe9, 0x39, 0xf3, 0x53, 0xfb, 0x68, 0x4f,
  0x0b, 0x09, 0x4a, 0x55, 0x7a, 0x44, 0x79, 0x0a, 0x6d, 0x67, 0xb5, 0xf3,
  0x04, 0x36, 0x3d, 0x9e, 0x9f, 0x3a, 0x96, 0x59, 0x3e, 0xf3, 0x94, 0x06,
  0x39, 0x8c, 0x63, 0x89, 0x70, 0x6f, 0xa2, 0x5f, 0x6a, 0xd4, 0x87, 0x44,
  0xaf, 0x45, 0xfc, 0x4e, 0x9c, 0x7c, 0x28, 0xe4, 0x66, 0x3b, 0xd9, 0xa2,
  0x8f, 0x1f, 0x93, 0x36, 0xce, 0xd1, 0x5c, 0x98, 0x0d, 0x74, 0xe1, 0xd2,
  0x29, 0x9b, 0xbd, 0x5f, 0x7b, 0x4f, 0x9e, 0x8f, 0x1e, 0xb7, 0xee, 0x49,
  0x33, 0x5f, 0x0c, 0x6f, 0x26, 0xf7, 0x84, 0xab, 0xce, 0x4f, 0xde, 0x20,
  0x5d, 0x47, 0xd9, 0x0d, 0x3a, 0x49, 0x69, 0xe4, 0x80, 0x64, 0x15, 0xbb,
  0x77, 0xaf, 0x00, 0x6d, 0x1b, 0xd6, 0x8b, 0x44, 0x22, 0x33, 0xb6, 0xe4,
  0x5d, 0x1c, 0x35, 0x16, 0xb2, 0xd3, 0x8c, 0x88, 0x08, 0x04, 0x41, 0x56,
  0xcc, 0xf3, 0x68, 0x65, 0xa2, 0x66, 0xf1, 0x67, 0xb7, 0xd9, 0x74, 0x85,
  0xd4, 0x02, 0x52, 0xec, 0x09, 0x03, 0x6f, 0x7d, 0xcc, 0xc3, 0x8b, 0x73,
  0x48, 0x64, 0xc3, 0xfc, 0xa0, 0xbb, 0x19, 0x36, 0x99, 0x4a, 0x17, 0xcf,

  0xab, 0x0f, 0x3c, 0x9e, 0x9c, 0x0b, 0x8e, 0xdf, 0xb5, 0x7f, 0x15, 0x84,
  0xf7, 0x51, 0xe4, 0x43, 0xca, 0x8c, 0xa1, 0xa7, 0xfc, 0xb2, 0x60, 0x75,
  0xf1, 0x4d, 0x3e, 0xad, 0xca, 0xba, 0xbc, 0x90, 0xf2, 0x31, 0x67, 0xda,

  0x1e, 0x1f, 0x8f, 0x93, 0x9b, 0x6c, 0xa2, 0x65, 0xfd, 0xa3, 0xd0, 0xff,
  0xcf, 0x5c, 0x84, 0xa2, 0x5a, 0x55, 0x9e, 0x35, 0xb4, 0x6b, 0x1a, 0xc7,
  0x26, 0x8c, 0x3b, 0x74, 0xd6, 0x14, 0x08, 0x28, 0xd8, 0x5e, 0xd4, 0x9b,
  0x78, 0x0e, 0xd1, 0xb4, 0xcc, 0xca, 0x48, 0x2e, 0x03, 0x4f, 0x40, 0xc5,
  0x8a, 0xb4, 0xc6, 0x26, 0xfd, 0x6b, 0x92, 0xd2, 0x94, 0xd8, 0x0a, 0xc8,
  0xd1, 0x0e, 0x9d, 0xb4, 0x4b, 0xf1, 0x86, 0x7d, 0x24, 0x37, 0x67, 0x50,
  0x6c, 0x67, 0x33, 0xe2, 0x6d, 0x65, 0x82, 0xba, 0x5c, 0x8b, 0x59, 0x59,
  0x21, 0x7f, 0xcc, 0x6b, 0xc9, 0x46, 0xbd, 0x8b, 0x57, 0x15, 0xb9, 0xf9,
  0x81, 0xbf, 0x1c, 0xf2, 0xd3, 0x9b, 0xab, 0x92, 0x3b, 0x58, 0x62, 0x9b,
  0x9d, 0xce, 0x86, 0xba, 0x44, 0x69, 0xfa, 0x03, 0xae, 0xe0, 0xe4, 0x8d,
  0x7f, 0x50, 0x51, 0xac, 0x56, 0x39, 0x0f, 0x57, 0x13, 0x2f, 0xf9, 0x25,

  0xaf, 0xf2, 0xcb, 0xbe, 0xfe, 0xdc, 0x70, 0xf9, 0x01, 0x9b, 0xc6, 0x29,
  0x46, 0x98, 0x91, 0x08, 0xcd, 0x8a, 0x6f, 0x69, 0xd0, 0x73, 0x9e, 0xfe,
  0x15, 0x3a, 0xcf, 0x7b, 0xa8, 0xef, 0x37, 0x0e, 0x03, 0x5a, 0xdf, 0x85,


  0x37, 0x17, 0x7b, 0x05, 0xbc, 0x2e, 0x28, 0x4e, 0x65, 0x77, 0x91, 0xf3,
  0x00, 0x41, 0xe7, 0x3e, 0x7d, 0x3d, 0x1e, 0x64, 0xd1, 0x28, 0x64, 0x24,
  0x97, 0xc8, 0x0b, 0xa4, 0xcb, 0xbf, 0x67, 0x38, 0x9e, 0x76, 0x94, 0xd2,
  0xbf, 0xba, 0x25, 0xfd, 0x60, 0x7f, 0x38, 0xc9, 0x52, 0x6a, 0x11, 0xf7,
  0xa2, 0x21, 0x85, 0x69, 0x5d, 0x15, 0x1c, 0x97, 0x24, 0x24, 0x9a, 0x38,
  0xe9, 0x55, 0xc3, 0x7d, 0xc5, 0x43, 0x9c, 0x43, 0xe5, 0xa2, 0x13, 0x3e,
  0x3d, 0x7c, 0x7f, 0xfe, 0x4d, 0xb2, 0x1f, 0x34, 0x0b, 0x52, 0xa0, 0x87,
  0x0e, 0x63, 0x38, 0xef, 0x8e, 0xa1, 0x67, 0x88, 0x68, 0x8f, 0x91, 0xa8,
  0x7f, 0x5d, 0x15, 0xd3, 0xa8, 0x93, 0x81, 0xdb, 0xba, 0x09, 0x1e, 0x0a,
  0x6b, 0x52, 0x2c, 0x87, 0xa5, 0xbe, 0xa4, 0x95, 0x20, 0xef, 0xb7, 0x2a,
  0x1c, 0x0e, 0xc3, 0xf0, 0xa6, 0x99, 0xb8, 0x0b, 0x9e, 0xf7, 0xf6, 0xcc,
  0x0b, 0x26, 0x2b, 0x28, 0x68, 0x1a, 0xef, 0x46, 0x57, 0x38, 0x32, 0x60,
  0xf8, 0x6a, 0xd9, 0x26, 0xe3, 0x50, 0x67, 0xdf, 0xbd, 0x7e, 0xd9, 0x19,
  0xee, 0xe9, 0xb3, 0x27, 0xbb, 0x9f, 0x30, 0xcf, 0xb2, 0xa4, 0xf5, 0x88,
  0x65, 0x16, 0x45, 0xff, 0xfa, 0xbe, 0xa2, 0xfa, 0x7b, 0x75, 0x15, 0x95,
  0xf2, 0x90, 0x0f, 0x10, 0x52, 0x37, 0x33, 0x4a, 0xb8, 0xd3, 0xa6, 0x9a,
  0xb4, 0x40, 0x56, 0xfa, 0xff, 0xf1, 0xcf, 0xd0, 0xba, 0xfb, 0xcb, 0x4f,
  0x88, 0xe8, 0xa0, 0x35, 0xaf, 0x2d, 0xd4, 0x50, 0x5e, 0x53, 0x3b, 0xa9,
  0x4c, 0xb7, 0x7a, 0xf3, 0x77, 0x9b, 0x89, 0xed, 0xa0, 0x27, 0xf6, 0x79,
  0xbc, 0xff, 0x88, 0x46, 0xfd, 0x74, 0x76, 0x7a, 0xac, 0x15, 0xd1, 0x4e,
  0xea, 0x29, 0x06, 0xba, 0x0b, 0xd2, 0x56, 0x6e, 0xd6, 0xd7, 0x00, 0x53,
  0x7b, 0xc1, 0x09, 0x0e, 0xa1, 0x46, 0x3a, 0x28, 0x22, 0xc1, 0xe9, 0x71,
  0x58, 0x01, 0xa9, 0xa4, 0x40, 0x61, 0xc8, 0x8b, 0x1e, 0xf7, 0xb3, 0xe4,
  0x80, 0xfd, 0xc3, 0x9c, 0xc0, 0xa0, 0xb9, 0x29, 0xff, 0xd9, 0x76, 0x45,
  0x1b, 0x45, 0x83, 0xe6, 0xfb, 0xe1, 0x77, 0x7b, 0x54, 0x84, 0xb8, 0xf1,
  0x59, 0x48, 0x6f, 0x2b, 0x54, 0x3b, 0xf2, 0xa9, 0x5a, 0x3d, 0x69, 0x1d,
  0xc8, 0xb8, 0x7e, 0x90, 0x50, 0x13, 0x06, 0xa4, 0x3c, 0xfe, 0x73, 0x44,
  0xff, 0xfd, 0xcb, 0xde, 0xf0, 0xc9, 0x4f, 0xf6, 0xa3, 0xbf, 0xdb, 0xfb,
  0xf0, 0xbb, 0xfd, 0x8d, 0x58, 0x8d, 0xa9, 0x83, 0x30, 0xf1, 0x72, 0x4c,
  0x49, 0xaf, 0x2d, 0xee, 0xa4, 0xd0, 0x46, 0x62, 0xc4, 0xae, 0x61, 0xaf,
  0xd9, 0x93, 0x3a, 0x86, 0xf3, 0x46, 0xae, 0xc7, 0x51, 0xd7, 0xdf, 0xaf,
  0x6d, 0x7b, 0x95, 0x39, 0xdc, 0x94, 0xfc, 0xbe, 0x02, 0xbd, 0xd0, 0x0d,
  0x91, 0x12, 0x90, 0x80, 0x25, 0x16, 0x59, 0x9b, 0x3c, 0x08, 0xf5, 0x49,
  0xa1, 0x82, 0xc2, 0xdd, 0x90, 0xcc, 0x36, 0x23, 0xd6, 0xd2, 0xa4, 0xb3,
  0xe9, 0x93, 0x89, 0xfd, 0x49, 0x91, 0x05, 0xb5, 0x9f, 0x0a, 0xd0, 0xc8,
  0x46, 0x9c, 0xb2, 0x83, 0xd2, 0x65, 0x1d, 0x48, 0xfb, 0xb7, 0x44, 0x56,
  0x6e, 0xe3, 0xa7, 0xb8, 0xd2, 0x41, 0xf2, 0xd8, 0x5f, 0x01, 0x78, 0xe8,
  0xb9, 0x69, 0x58, 0xb8, 0x98, 0x01, 0xf3, 0xda, 0x45, 0xd0, 0xf0, 0x33,
  0x89, 0x9e, 0x11, 0x52, 0x09, 0xc9, 0x3a, 0x86, 0x96, 0x09, 0x6b, 0x63,
  0xaf, 0xb3, 0x76, 0x8b, 0x42, 0xda, 0x0f, 0x88, 0x9e, 0x89, 0x03, 0xcd,
  0x4b, 0xeb, 0x9e, 0x0d, 0xf1, 0xb7, 0xc2, 0xdb, 0x04, 0xd9, 0x28, 0x6c,
  0xce, 0xfa, 0x66, 0xa2, 0x43, 0x4a, 0xff, 0x6d, 0xb2, 0xa1, 0x57, 0xdb,
  0x0f, 0x28, 0x01, 0xfc, 0x54, 0x6b, 0x76, 0x29, 0xe6, 0xa5, 0x91, 0xd9,
  0x61, 0x10, 0x4e, 0x26, 0x41, 0x35, 0xbb, 0x33, 0xdc, 0x90, 0x11, 0xaa,
  0x47, 0x56, 0x58, 0xa8, 0xa7, 0x40, 0xb8, 0x8d, 0x21, 0xb5, 0xcd, 0xe1,
  0x66, 0xb2, 0x65, 0xed, 0xbb, 0x59, 0x5a, 0x5f, 0x6d, 0xc7, 0x1c, 0xc9,
  0xce, 0x77, 0xeb, 0x18, 0x95, 0x74, 0x18, 0x82, 0xe4, 0x64, 0x0e, 0xd5,
  0xaf, 0xc7, 0x9e, 0x32, 0x36, 0x10, 0x65, 0x79, 0x0e, 0x6d, 0x2a, 0x40,
  0xeb, 0x27, 0x54, 0x98, 0x29, 0x18, 0xe3, 0xff, 0x29, 0x25, 0xe8, 0x61,
  0x55, 0xbe, 0x79, 0x96, 0x13, 0xf5, 0x86, 0x5c, 0xc3, 0xe6, 0x64, 0x29,
  0xa9, 0xe4, 0xf3, 0x79, 0x36, 0x1f, 0xe6, 0x8b, 0x45, 0x36, 0x8b, 0x64,
  0xb3, 0x71, 0x2e, 0xd7, 0x8c, 0xb3, 0xc0, 0xf5, 0x69, 0xcf, 0xa1, 0x12,
  0x41, 0xe2, 0xd0, 0x38, 0x5e, 0x14, 0x96, 0x56, 0xfc, 0xfc, 0xa2, 0x16,
  0x0a, 0xca, 0x10, 0x23, 0xfa, 0x50, 0xc4, 0x10, 0xde, 0xb4, 0xd5, 0x92,
  0x4b, 0xb1, 0xfd, 0x9e, 0x18, 0x86, 0x91, 0x9a, 0xaf, 0x0f, 0x43, 0xe7,
  0x8e, 0x99, 0x0d, 0x81, 0xbd, 0x91, 0x85, 0xe7, 0x63, 0x16, 0xdd, 0xa4,
  0x8c, 0xdb, 0xe6, 0x00, 0x9e, 0x08, 0xf0, 0xc3, 0xf9, 0x81, 0x58, 0xce,
  0x76, 0x87, 0x83, 0xf1, 0x44, 0x7c, 0x45, 0x24, 0xc0, 0x2d, 0x09, 0x2f,
  0x44, 0x32, 0x6a, 0xee, 0x88, 0xce, 0xa5, 0xc3, 0xbe, 0x8f, 0xbc, 0xf7,
  0xec, 0xfe, 0xc7, 0xc0, 0xdb, 0x5f, 0xb5, 0x45, 0x74, 0xbb, 0x17, 0xe9,
  0x6d, 0xdb, 0x3f, 0xd6, 0x41, 0x69, 0xf6, 0x1f, 0x8c, 0x9d, 0x48, 0x5a,
  0x7f, 0xe4, 0x1c, 0x84, 0x59, 0xe9, 0x4e, 0xc5, 0x3b, 0x14, 0x16, 0x74,
  0xed, 0x39, 0x0c, 0x92, 0x35, 0xe8, 0xee, 0x64, 0xfe, 0x57, 0xe5, 0xbc,
  0x96, 0xdc, 0x01, 0x2e, 0x5f, 0xb0, 0x40, 0x1b, 0xde, 0xc6, 0xf1, 0x37,
  0xeb, 0x9c, 0xb6, 0x28, 0x2d, 0x22, 0xd9, 0xfb, 0x75, 0x24, 0xb8, 0x4a,
  0xba, 0x87, 0xd6, 0xd2, 0x1a, 0x6a, 0x89, 0x68, 0x0e, 0x3d, 0xfb, 0xb6,



  0xae, 0xfd, 0x51, 0xeb, 0xc1, 0xfe, 0x34, 0x1d, 0x29, 0xf0, 0x03, 0x64,



  0x8a, 0x5b, 0x06, 0xd3, 0x93, 0x9c, 0x0d, 0xaa, 0x72, 0xa9, 0x51, 0xe5,
  0xac, 0x07, 0x46, 0xa5, 0xca, 0x2e, 0x09, 0x4a, 0x8c, 0xf4, 0x40, 0x42,
  0x53, 0x31, 0x3c, 0xae, 0x88, 0x94, 0x8e, 0xaf, 0xe9, 0xd4, 0x44, 0xa9,
  0x0e, 0xc9, 0x8b, 0xe5, 0x55, 0x65, 0x0c, 0xad, 0xb0, 0x24, 0x75, 0xfc,
  0x4d, 0x02, 0xa7, 0x27, 0x75, 0x5b, 0xe5, 0x67, 0x2c, 0x07, 0xf6, 0xc0,
  0x89, 0x3f, 0x21, 0x9e, 0x2e, 0xe5, 0xda, 0x0d, 0xd3, 0x7a, 0x18, 0x50,
  0x07, 0x65, 0x5c, 0xf8, 0xfd, 0x18, 0xc9, 0xc6, 0x23, 0xd3, 0x9f, 0xd2,
  0xbc, 0x29, 0xfb, 0xa0, 0x20, 0xcc, 0x36, 0x43, 0x1f, 0x3b, 0xa3, 0xd1,
  0x0e, 0xe9, 0x05, 0x3b, 0xe6, 0x8f, 0xdc, 0x6b, 0x40, 0xd6, 0xed, 0x72,
  0x6b, 0x24, 0x09, 0x7d, 0x8b, 0xbc, 0xad, 0xd2, 0x0f, 0xde, 0xeb, 0x1a,
  0xfa, 0xb7, 0x15, 0xb2, 0xf4, 0x2b, 0x63, 0xb8, 0x55, 0x80, 0x7f, 0xc9,
  0x16, 0x1d, 0x45, 0x34, 0xe8, 0x2d, 0xcb, 0xd1, 0xc7, 0x5a, 0xc0, 0xa5,
  0xb4, 0x95, 0xa9, 0x43, 0xd1, 0x67, 0x47, 0x27, 0x2d, 0x22, 0x6f, 0x14,
  0xd5, 0x13, 0xe8, 0x40, 0xe9, 0x5a, 0xd7, 0xc9, 0xe3, 0xfd, 0xce, 0xf1,
  0xe5, 0xe6, 0xc0, 0x67, 0xc6, 0x0c, 0x05, 0x18, 0x38, 0x25, 0x2a, 0x87,
  0xa5, 0x8e, 0x02, 0x9d, 0x1e, 0xb4, 0xb0, 0x5c, 0xd5, 0xb6, 0xcb, 0x81,
  0x55, 0xea, 0xbd, 0x36, 0xb6, 0x52, 0x96, 0x11, 0x28, 0xa4, 0xfc, 0x11,
  0xa4, 0x3a, 0x4a, 0x21, 0x03, 0xc8, 0x21, 0x63, 0xdd, 0x31, 0x57, 0x0e,
  0x86, 0x4e, 0xe6, 0x8d, 0xd8, 0xc9, 0x92, 0x39, 0x15, 0x73, 0x30, 0x5a,
  0xf7, 0x9e, 0x15, 0x5a, 0xde, 0x14, 0xcc, 0x9a, 0x09, 0x4f, 0xdd, 0xec,
  0xfc, 0xab, 0xa3, 0x77, 0x62, 0x05, 0x00, 0x5d, 0x86, 0xd4, 0x2b, 0xd6,
  0xa8, 0x02, 0x00, 0x7f, 0xf8, 0x0c, 0x9e, 0x3e, 0x86, 0x65, 0x4f, 0xfb,
  0x56, 0x5f, 0xa5, 0xfb, 0x4f, 0x9e, 0xca, 0xb4, 0x15, 0x5d, 0x13, 0x2e,
  0x89, 0x4d, 0xfe, 0xd5, 0xce, 0x0e, 0xe7, 0x14, 0x91, 0x1f, 0x28, 0x90,
  0xbd, 0x70, 0xc9, 0xd2, 0xb3, 0x7f, 0xdc, 0x8c, 0x67, 0x13, 0xab, 0x91,
  0xc8, 0x29, 0xbd, 0x09, 0x82, 0x74, 0x9c, 0xf5, 0xec, 0x37, 0x72, 0x1a,



  0xf8, 0xa1, 0x2d, 0x86, 0x4a, 0x4a, 0xd7, 0xf4, 0x37, 0x12, 0x3c, 0x2a,
  0xe9, 0xe8, 0x9a, 0x28, 0xc4, 0x04, 0x21, 0x7d, 0x7b, 0xbb, 0xc3, 0x89,
  0xc2, 0xb7, 0x0d, 0x1c, 0xb8, 0x41, 0x65, 0x22, 0x4a, 0xe1, 0x40, 0x75,
  0xfe, 0xc8, 0x92, 0x23, 0x9f, 0x73, 0x78, 0x07, 0x94, 0xa7, 0xb1, 0x69,
  0xf6, 0x7e, 0xe2, 0x30, 0x57, 0x93, 0x20, 0x99, 0x4b, 0xbe, 0x69, 0x61,
  0xb9, 0xe1, 0x3c, 0xf3, 0x52, 0xa8, 0xdd, 0x75, 0xe1, 0x72, 0x7b, 0x10,
  0x96, 0xdb, 0x80, 0xc0, 0x49, 0xd3, 0xea, 0x03, 0x61, 0xeb, 0xee, 0x39,
  0x66, 0x75, 0x87, 0xe0, 0x78, 0x70, 0x0f, 0x0c, 0x29, 0xec, 0x10, 0x1d,
  0x88, 0x5d, 0x1f, 0x34, 0x5c, 0xa2, 0x50, 0xdc, 0xf3, 0xd1, 0xee, 0x81,
  0x62, 0xb8, 0x0f, 0x92, 0xaf, 0x8b, 0x15, 0x9d, 0x07, 0x2d, 0xfa, 0xeb,
  0xf1, 0xb7, 0x41, 0x1d, 0x2a, 0xbd, 0xf1, 0xf8, 0x11, 0xbd, 0xf1, 0x76,
  0xcc, 0x4f, 0xdd, 0x94, 0xf3, 0x0b, 0xf3, 0x66, 0xec, 0xb9, 0x67, 0xf4,
  0x9c, 0xa1, 0xb8, 0x59, 0x63, 0xae, 0x91, 0x10, 0xd5, 0x9a, 0x99, 0x3c,
  0x7e, 0x1c, 0x99, 0xc9, 0xe0, 0x67, 0x7f, 0xe8, 0x14, 0x72, 0x9d, 0x88,
  0x89, 0x1a, 0x15, 0x82, 0x70, 0x50, 0xa1, 0x63, 0x5b, 0x12, 0x7c, 0x4a,
  0xe6, 0xcb, 0x70, 0x44, 0x0f, 0xe9, 0x62, 0x5a, 0x01, 0x59, 0xb5, 0x01,
  0xb4, 0xcc, 0xb3, 0xfd, 0x47, 0x7b, 0x3b, 0x4f, 0x47, 0x8f, 0x47, 0xfb,
  0x36, 0x63, 0x96, 0x61, 0x17, 0x1a, 0x24, 0x28, 0x45, 0x22, 0x43, 0xc8,
  0x15, 0xcb, 0x0b, 0xc1, 0x55, 0xb2, 0x3f, 0x81, 0x4b, 0xd5, 0xe5, 0xca,
  0x11, 0xd2, 0xd2, 0x9e, 0x5f, 0x7a, 0x19, 0xeb, 0xea, 0x4d, 0xbd, 0x78,
  0x51, 0x33, 0x26, 0x6e, 0x40, 0x2a, 0x1e, 0x40, 0xc4, 0x7a, 0x92, 0xff,
  0x6d, 0x95, 0x37, 0x46, 0x0b, 0x20, 0xa6, 0x42, 0xce, 0x4d, 0xed, 0xcb,
  0x02, 0xbb, 0x01, 0xeb, 0xa0, 0x1b, 0x11, 0xf1, 0x1a, 0x0b, 0x66, 0x04,
  0xed, 0xa6, 0x07, 0x11, 0x82, 0xf2, 0xce, 0x1c, 0xbc, 0x2b, 0xe1, 0x76,
  0x68, 0xc6, 0xbe, 0x2f, 0xa6, 0xa4, 0x9c, 0x7f, 0x63, 0xcc, 0xef, 0x6b,
  0x44, 0x54, 0xd2, 0xb8, 0xbb, 0x86, 0x11, 0x84, 0x34, 0x26, 0xa6, 0x89,
  0x5b, 0xae, 0x75, 0x8a, 0xfc, 0x80, 0x4b, 0xc1, 0xd8, 0x39, 0x88, 0x75,
  0x07, 0xdc, 0xc9, 0xed, 0x43, 0xeb, 0xc4, 0xa5, 0xeb, 0x08, 0x95, 0x62,
  0x72, 0xec, 0x87, 0xa1, 0x62, 0xc1, 0xa2, 0x3c, 0xf8, 0xc3, 0x98, 0x6f,
  0xf2, 0x1e, 0x47, 0x9d, 0xe0, 0x50, 0xb5, 0x81, 0xa8, 0xf8, 0x5f, 0xad,
  0x5a, 0x5d, 0xa7, 0x1e, 0x05, 0x35, 0x99, 0xdd, 0x66, 0xe5, 0x32, 0xe6,
  0x2f, 0xa6, 0xb2, 0x47, 0xbf, 0x3e, 0x95, 0xed, 0x3f, 0x94, 0xca, 0x1c,
  0x91, 0xd1, 0x3d, 0x5b, 0x43, 0x62, 0x09, 0x5a, 0x9b, 0x43, 0xf4, 0xf6,
  0x50, 0x99, 0x4f, 0x66, 0x92, 0xd6, 0x16, 0x12, 0x5a, 0x8b, 0xce, 0x2c,
  0x99, 0xf5, 0x50, 0x19, 0x63, 0x50, 0x32, 0x8d, 0xad, 0x27, 0x31, 0x45,
  0x7a, 0x48, 0xd6, 0x53, 0x59, 0x3b, 0x3e, 0xb5, 0x9e, 0xce, 0x1c, 0x39,
  0x3c, 0x98, 0xca, 0xb4, 0xeb, 0x1d, 0x73, 0x9d, 0x1e, 0x12, 0x6b, 0xd1,
  0xd8, 0x9a, 0x66, 0xdf, 0x7b, 0xcf, 0x63, 0x54, 0xf6, 0xe8, 0x21, 0x54,
  0x66, 0x0e, 0x74, 0x4e, 0xa2, 0xb2, 0x45, 0x65, 0x8f, 0x7f, 0x5d, 0x2a,
  0x23, 0x78, 0xbc, 0x6e, 0x19, 0x79, 0x72, 0xf8, 0xaf, 0x9e, 0x63, 0x8a,
  0x61, 0x75, 0xd4, 0xa0, 0xba, 0xfa, 0xe7, 0x71, 0x8a, 0xce, 0x85, 0xbe,
  0xf7, 0xc4, 0xda, 0xe8, 0x74, 0x7b, 0x3f, 0xfb, 0xc4, 0xf6, 0xbb, 0x96,
  0x49, 0x95, 0x71, 0x48, 0xe3, 0x2f, 0x1a, 0x5a, 0x3a, 0xd8, 0xd9, 0xf9,
  0x09, 0xbe, 0xb9, 0x03, 0x92, 0x7d, 0x3f, 0x75, 0x55, 0xf8, 0x98, 0x3a,
  0x3b, 0x3e, 0x7d, 0xf9, 0xed, 0x58, 0x42, 0x23, 0xa2, 0x73, 0xa8, 0x4e,
  0xc2, 0x36, 0xb8, 0xd1, 0x55, 0x01, 0x8c, 0x10, 0xa8, 0xb9, 0xdc, 0x29,
  0x7d, 0x78, 0x3b, 0xd0, 0xf8, 0x04, 0x32, 0x12, 0x85, 0x19, 0x03, 0xa1,
  0x48, 0x20, 0x07, 0x38, 0xf4, 0x21, 0xa3, 0xf6, 0xe2, 0x5d, 0xf2, 0x44,
  0x64, 0x26, 0xd6, 0x25, 0x56, 0x78, 0x2f, 0x6e, 0x35, 0x57, 0x15, 0x6a,
  0xbe, 0xf0, 0xe8, 0xb6, 0x46, 0x27, 0xd7, 0xcd, 0x4e, 0xe6, 0xf5, 0x0d,
  0xc0, 0xe2, 0x97, 0x95, 0x06, 0x7c, 0x63, 0x46, 0xae, 0xfd, 0xad, 0x7a,
  0x68, 0x63, 0x78, 0x30, 0x02, 0xf9, 0xe8, 0xed, 0x37, 0xbd, 0x17, 0x64,
  0xd7, 0x12, 0xba, 0xbf, 0x07, 0x97, 0x46, 0xe2, 0xc1, 0x50, 0x5f, 0x81,
  0x12, 0x28, 0xbb, 0x44, 0x1d, 0x84, 0x73, 0x1b, 0x33, 0x34, 0xca, 0xaa,

  0x1f, 0x9b, 0x21, 0xbb, 0xfe, 0x3e, 0xfe, 0x45, 0x4a, 0xbf, 0xe1, 0xbf,
  0x3f, 0xa1, 0xef, 0x22, 0x7e, 0x87, 0x7f, 0x5d, 0xd1, 0x3f, 0x25, 0x75,
  0x45, 0x40, 0x0c, 0xfd, 0x53, 0x9e, 0xc6, 0x37, 0xda, 0x2f, 0x26, 0xb4,
  0xb0, 0x27, 0x6f, 0x4b, 0x57, 0x6e, 0xeb, 0xaf, 0xda, 0x87, 0xb7, 0x0a,
  0x32, 0xc2, 0x2c, 0x17, 0xc6, 0xc8, 0x8f, 0xe3, 0x0a, 0x57, 0xe6, 0x83,
  0x30, 0x2b, 0xa0, 0x88, 0xdf, 0x5b, 0xd3, 0xc5, 0xe3, 0xe5, 0x00, 0x80,
  0xc9, 0x19, 0xeb, 0x92, 0xc0, 0x8d, 0xa3, 0x64, 0xde, 0x7b, 0xbb, 0x9f,
  0x87, 0x2e, 0x89, 0xf7, 0x5a, 0xec, 0xea, 0x90, 0x88, 0x91, 0x75, 0x83,
  0xb2, 0x93, 0x89, 0x2b, 0xf1, 0x8a, 0x7d, 0x36, 0x52, 0x0f, 0x4b, 0xb6,
  0xef, 0x2c, 0x63, 0x63, 0x69, 0xc2, 0x76, 0x6f, 0x58, 0x6e, 0x80, 0xf2,
  0xfe, 0x1a, 0x92, 0x4d, 0x30, 0xf4, 0x13, 0xc9, 0x1d, 0x09, 0xf8, 0x3b,
  0x79, 0x31, 0x34, 0xa2, 0xf9, 0xa5, 0xc3, 0x39, 0xfd, 0xfd, 0xe3, 0x5d,
  0x3a, 0x55, 0x1d, 0x85, 0x7a, 0xc7, 0xcd, 0x4b, 0xc1, 0xb2, 0xf9, 0xfd,
  0xa3, 0x74, 0xf4, 0x1b, 0x42, 0x0a, 0x3e, 0x69, 0x5b, 0xd1, 0xbf, 0x1b,
  0xf8, 0xe9, 0x67, 0x93, 0xb4, 0x8a, 0xf8, 0x6c, 0x44, 0x43, 0x54, 0xf8,
  0x21, 0x05, 0xef, 0xb1, 0x79, 0x69, 0x29, 0x1b, 0xb0, 0x28, 0x93, 0xb1,
  0x3f, 0x34, 0x43, 0x25, 0x61, 0x37, 0x26, 0x1b, 0x07, 0xe2, 0x2c, 0x06,
  0xf6, 0x14, 0x0c, 0xd8, 0xb3, 0xd8, 0xca, 0xd5, 0x1b, 0x70, 0xb6, 0x5b,
  0xbc, 0x80, 0xae, 0xf5, 0x91, 0x59, 0x95, 0xde, 0x78, 0x16, 0x34, 0x43,
  0xb8, 0x5d, 0x70, 0x3c, 0xc8, 0x66, 0xf8, 0x50, 0x35, 0x05, 0x05, 0xfc,
  0x63, 0xda, 0x47, 0x3d, 0xad, 0x32, 0x89, 0xbc, 0x11, 0x0c, 0x30, 0x82,


  0xfb, 0x84, 0x9f, 0x6b, 0xd4, 0x8e, 0xcb, 0x4c, 0x8b, 0xaa, 0xed, 0xaa,
  0x15, 0x35, 0x07, 0x50, 0x39, 0xa3, 0x48, 0xbd, 0x82, 0x73, 0x67, 0x69,
  0xf2, 0x62, 0x2a, 0xb8, 0x3a, 0xf4, 0xaa, 0x96, 0xb7, 0x4b, 0xc2, 0x36,
  0x7a, 0x17, 0x2f, 0xd1, 0x50, 0xb6, 0xbe, 0xca, 0x97, 0x5d, 0x11, 0x3d,
  0xfc, 0xa2, 0xfc, 0x62, 0xb8, 0x6d, 0xb1, 0x37, 0xcb, 0xeb, 0xac, 0xe6,
  0xa6, 0xed, 0x34, 0x59, 0x4a, 0x07, 0xb8, 0x82, 0x93, 0x45, 0xc4, 0x17,
  0x6a, 0xb9, 0x91, 0x9b, 0x2d, 0x08, 0x8b, 0x41, 0xfb, 0x31, 0x9e, 0x59,
  0x45, 0x79, 0x00, 0xc2, 0xef, 0xc8, 0x1d, 0x63, 0x76, 0xeb, 0x82, 0x53,
  0x3f, 0x51, 0xed, 0x4d, 0x49, 0x12, 0xd2, 0x67, 0x80, 0x63, 0x2d, 0xe5,
  0xb2, 0x2d, 0x9b, 0x08, 0x38, 0x40, 0x79, 0xc3, 0x0b, 0x65, 0x2a, 0x7f,
  0xba, 0xb7, 0x2c, 0xc8, 0xb2, 0x9f, 0x0b, 0x71, 0x62, 0xd0, 0xe5, 0x43,
  0x99, 0x18, 0xf7, 0x27, 0x98, 0x5e, 0x65, 0x0b, 0x69, 0xd3, 0xd6, 0x03,
  0xb2, 0xd0, 0x8b, 0x48, 0xd0, 0x9e, 0x13, 0xe7, 0xcd, 0x5e, 0x34, 0xcb,
  0xd1, 0xa2, 0xfc, 0xbb, 0xd9, 0xe6, 0x94, 0xfa, 0xbe, 0x06, 0x57, 0xc2,
  0xc8, 0xfa, 0x82, 0xcf, 0x85, 0x42, 0x67, 0x85, 0xb5, 0x2a, 0x13, 0x0f,
  0x16, 0x55, 0x90, 0x0a, 0x05, 0x1e, 0x2f, 0x79, 0x69, 0x66, 0x7c, 0xf4,
  0xe1, 0xfd, 0xdb, 0xf1, 0xfb, 0xb3, 0x2e, 0x61, 0x9f, 0x9d, 0xbe, 0x3b,
  0x3f, 0x7a, 0xf5, 0xe1, 0xec, 0xdd, 0xe9, 0xf9, 0xe9, 0xcb, 0xd3, 0x93,
  0x64, 0x6b, 0x6f, 0x7b, 0x6d, 0xf1, 0xa7, 0xf5, 0x40, 0x58, 0x58, 0x65,
  0xe7, 0x8c, 0x65, 0x9e, 0x65, 0x67, 0xb1, 0x45, 0xeb, 0x09, 0x47, 0xfb,
  0x5e, 0xa8, 0x4b, 0x52, 0x51, 0xd5, 0x65, 0x0c, 0x57, 0x04, 0xc4, 0x1b,
  0xd8, 0x7a, 0x9a, 0x5c, 0xae, 0xf8, 0xa6, 0xb8, 0x64, 0x12, 0x06, 0x92,

  0x0e, 0x14, 0x2e, 0x89, 0x63, 0xfb, 0x75, 0x83, 0x6b, 0xdd, 0x71, 0x4f,
  0xba, 0x3a, 0x0b, 0x9d, 0x01, 0x14, 0x30, 0x47, 0x15, 0xf5, 0x7a, 0xb2,
  0x60, 0xb0, 0x21, 0xb4, 0x69, 0xb0, 0x6f, 0xa0, 0x89, 0x8d, 0x44, 0x16,
  0xcb, 0xc2, 0x6a, 0x74, 0x23, 0x6a, 0x80, 0x18, 0xc4, 0x87, 0xe4, 0x15,
  0x33, 0xdf, 0x42, 0x9a, 0x6a, 0xcb, 0x44, 0x10, 0x59, 0xa6, 0xfd, 0x95,

  0x7c, 0x07, 0xf3, 0x00, 0xfd, 0xd6, 0xe3, 0xaa, 0x28, 0x9a, 0x0c, 0xd1,
  0x86, 0xf1, 0x32, 0x03, 0xf1, 0xdc, 0x78, 0x93, 0xa2, 0xe1, 0x48, 0x29,
  0x03, 0xac, 0x6d, 0x84, 0xc3, 0x1e, 0x69, 0xd0, 0x92, 0x41, 0x84, 0x70,
  0x23, 0xa1, 0xbe, 0x28, 0xfc, 0xd4, 0xd8, 0x5f, 0xcc, 0x3d, 0x84, 0xcc,
  0x9b, 0x48, 0x51, 0xa4, 0x01, 0x9d, 0xfd, 0x80, 0x09, 0x5a, 0xa2, 0xb5,
  0x6b, 0x6a, 0x8f, 0xbe, 0x6a, 0xa3, 0x78, 0xfa, 0xc8, 0xfe, 0x5c, 0x5b,
  0x8a, 0x89, 0x0c, 0x2c, 0x2c, 0xd6, 0xeb, 0xce, 0xb4, 0xba, 0xec, 0xe7,
  0xd9, 0xe8, 0xe9, 0x93, 0xd1, 0x3e, 0x61, 0xba, 0x9c, 0xce, 0x29, 0xbe,
  0x29, 0x8a, 0x05, 0x9c, 0xcb, 0xf8, 0x80, 0x00, 0x58, 0x21, 0x43, 0xd2,
  0xed, 0x95, 0x8c, 0x18, 0xb3, 0xa5, 0xb4, 0xd4, 0x5c, 0x25, 0x99, 0xa2,
  0x7e, 0x48, 0xd7, 0x75, 0x41, 0xfe, 0x27, 0xcc, 0x20, 0xf3, 0x99, 0x03,
  0x97, 0x24, 0x48, 0x69, 0x73, 0x5d, 0x5e, 0x7b, 0x6c, 0xfb, 0x92, 0x8e,
  0x5f, 0x9e, 0x09, 0x36, 0x87, 0x43, 0x11, 0x01, 0x3b, 0xc7, 0xeb, 0x86,
  0x54, 0x77, 0x47, 0xbb, 0xc9, 0xf8, 0xcd, 0x57, 0x02, 0x38, 0xfc, 0xd5,
  0x38, 0xa2, 0x09, 0x40, 0x9f, 0xd7, 0xd7, 0x47, 0x7e, 0x90, 0x91, 0x16,

  0x67, 0x66, 0xf7, 0x07, 0xfa, 0x53, 0xeb, 0x2b, 0x90, 0xc0, 0xec, 0x56,
  0x9c, 0x04, 0x4e, 0x3e, 0xdd, 0xd2, 0x81, 0x07, 0xf2, 0x61, 0xee, 0x2b,
  0x01, 0x3b, 0xc7, 0x96, 0x3c, 0x5a, 0x0f, 0x14, 0xb8, 0x1f, 0x5c, 0xb4,
  0x7b, 0xaf, 0x98, 0x73, 0x76, 0xdf, 0x77, 0xc9, 0x44, 0x53, 0x52, 0xe9,
  0xd0, 0x95, 0x69, 0x67, 0xad, 0x3b, 0x90, 0x51, 0x71, 0x21, 0x1c, 0xc3,
  0xf3, 0xec, 0x02, 0xaa, 0x21, 0x2a, 0x7e, 0x07, 0xf8, 0x25, 0x22, 0xcd,
  0x36, 0xa7, 0x30, 0x8e, 0x1a, 0x87, 0x63, 0x42, 0x31, 0xa6, 0xa7, 0x6d,

  0x5b, 0x94, 0xc9, 0x4d, 0xb3, 0xb1, 0xd4, 0xa3, 0x4f, 0xca, 0xce, 0xe7,
  0x77, 0x08, 0x43, 0xe6, 0xb7, 0x7c, 0xb7, 0xff, 0x9e, 0x55, 0x65, 0x98,
  0xf6, 0x00, 0xe5, 0x41, 0xb1, 0xfe, 0x8c, 0xca, 0x7d, 0xa8, 0x60, 0x44,
  0xee, 0x87, 0xf4, 0xd5, 0xe0, 0xce, 0xfd, 0x01, 0xed, 0xe1, 0x19, 0xbf,
  0x9e, 0x95, 0x0a, 0x01, 0xa3, 0x01, 0xae, 0x66, 0xae, 0xc1, 0x6a, 0x8f,
  0x07, 0xcc, 0xa9, 0x44, 0xf9, 0x8e, 0xab, 0x9b, 0x03, 0x13, 0x13, 0xea,



  0xdf, 0x8c, 0x4c, 0x19, 0x97, 0x9c, 0x6d, 0xc3, 0x6b, 0xd4, 0x8a, 0xd1,
  0xe1, 0x11, 0x8a, 0x3e, 0x17, 0xf2, 0xf4, 0x61, 0x92, 0xbc, 0xca, 0x8a,
  0x3b, 0xe5, 0xe9, 0x2e, 0xaf, 0x10, 0xa8, 0x42, 0xd7, 0xec, 0x13, 0x77,
  0xc0, 0x17, 0xdc, 0x72, 0xe8, 0xc2, 0x4d, 0x31, 0x9c, 0x52, 0x7b, 0xce,
  0x31, 0xce, 0xf5, 0x85, 0xdd, 0x06, 0x30, 0xad, 0xf6, 0x5e, 0x6c, 0x01,
  0xbb, 0x46, 0x43, 0xed, 0xf8, 0x9e, 0x8e, 0xb8, 0x76, 0x1b, 0xb6, 0x11,
  0xd7, 0x84, 0x49, 0x57, 0xaf, 0x26, 0x7f, 0x15, 0xec, 0x74, 0x72, 0x2d,
  0x54, 0xb2, 0x0d, 0x92, 0x87, 0x6a, 0x4e, 0xd5, 0x3c, 0xc0, 0x61, 0x2b,
  0xc3, 0x1d, 0x8a, 0xd8, 0x70, 0x48, 0x02, 0xd0, 0x16, 0x1c, 0x6d, 0x12,
  0xc3, 0x94, 0xa2, 0x65, 0xa3, 0x59, 0x8f, 0xca, 0xa0, 0xf7, 0x67, 0x78,

  0x41, 0x3c, 0x95, 0xd3, 0x1b, 0x3b, 0xc2, 0x97, 0xf7, 0x92, 0x53, 0x6a,
  0x6d, 0x82, 0x37, 0x3d, 0xde, 0x3b, 0x96, 0x72, 0xea, 0x7a, 0xf0, 0x07,
  0xfa, 0x23, 0x5c, 0x43, 0x8b, 0x64, 0x69, 0x9b, 0x95, 0x91, 0xd0, 0xe3,
  0x60, 0x4b, 0x78, 0xbd, 0xef, 0x03, 0x5f, 0x38, 0x31, 0xb0, 0x7e, 0x6c,
  0x70, 0xb1, 0x87, 0x7c, 0xe0, 0x7d, 0xa1, 0x58, 0x8f, 0x4a, 0xdd, 0x4b,
  0xdb, 0x81, 0x45, 0x0a, 0x68, 0xda, 0x86, 0x10, 0x41, 0x04, 0x2d, 0xa5,
  0x39, 0x53, 0x7a, 0x41, 0xb9, 0xef, 0x55, 0xe6, 0xb0, 0xdd, 0xe9, 0x24,
  0x19, 0x09, 0x4c, 0x7a, 0x50, 0x68, 0x2a, 0xf6, 0xb2, 0x6c, 0xb8, 0x1b,
  0x06, 0x25, 0xcb, 0x93, 0xa6, 0x53, 0x91, 0x8f, 0xd0, 0xdb, 0x64, 0x55,
  0x92, 0x69, 0x34, 0x7b, 0xf8, 0x9c, 0x70, 0x40, 0xd1, 0x42, 0x49, 0x63,
  0xd4, 0x4e, 0x01, 0x8e, 0x32, 0xf9, 0x73, 0x9c, 0xef, 0x08, 0x97, 0x93,
  0x0b, 0xee, 0xa5, 0xd7, 0x65, 0x4e, 0xd9, 0x72, 0x96, 0x27, 0x77, 0xc0,
  0xa4, 0xcf, 0xc3, 0x76, 0x4e, 0x30, 0xaf, 0x6c, 0x8a, 0x99, 0xd8, 0x57,
  0x79, 0x61, 0xf3, 0xff, 0xea, 0x56, 0x61, 0x24, 0xdf, 0x6e, 0x1d, 0x0e,
  0x79, 0x48, 0x08, 0x57, 0x17, 0x14, 0x66, 0x2a, 0xd2, 0x46, 0xef, 0x8b,
  0xc7, 0x6e, 0x69, 0x86, 0x64, 0xa6, 0x51, 0x1e, 0x46, 0x4a, 0x52, 0x49,
  0x0b, 0x3f, 0x3b, 0x0d, 0x2f, 0x7c, 0xd7, 0x92, 0xa7, 0x0b, 0xd8, 0xac,
  0x69, 0xa7, 0xe6, 0x8e, 0xee, 0x91, 0x11, 0xb7, 0x77, 0x9a, 0xa7, 0xb9,
  0x56, 0x05, 0x5b, 0x02, 0xf4, 0xc0, 0x6c, 0x74, 0xde, 0xe0, 0xc0, 0x3a,


  0x79, 0xe2, 0x9a, 0x3e, 0x2d, 0xfe, 0x9a, 0xc5, 0x62, 0x15, 0x36, 0xd8,
  0x95, 0x68, 0x9d, 0x9f, 0x41, 0xc9, 0xd0, 0x77, 0x50, 0x80, 0xc4, 0x51,
  0xc3, 0x4d, 0x80, 0xbc, 0xc6, 0x48, 0x94, 0x8e, 0x4f, 0xf1, 0xbb, 0xb8,
  0x1f, 0x71, 0xc7, 0x82, 0x5e, 0x19, 0x82, 0x29, 0x66, 0x43, 0xc3, 0x04,
  0x96, 0x6b, 0xfc, 0x70, 0xce, 0x55, 0xd5, 0x4a, 0x30, 0xf7, 0x51, 0x76,
  0xf8, 0x27, 0x9c, 0xc7, 0x2a, 0x7b, 0x17, 0x16, 0x68, 0x18, 0x4d, 0xe3,


  0x51, 0x6c, 0x27, 0x63, 0x89, 0xb2, 0x5d, 0x39, 0x4b, 0x8b, 0xea, 0xed,
  0x0c, 0xc4, 0x3b, 0x88, 0x0d, 0xd4, 0x0d, 0xeb, 0x4b, 0x27, 0xe4, 0xbd,
  0x93, 0x6d, 0x7b, 0xcf, 0xa5, 0xa7, 0x18, 0x11, 0x88, 0x02, 0x85, 0x94,
  0x26, 0x78, 0x5f, 0x62, 0x53, 0x2e, 0xd8, 0x47, 0xc0, 0xd0, 0x69, 0x8f,
  0x19, 0x7e, 0x12, 0xe1, 0x20, 0x9f, 0xdb, 0xc5, 0x4f, 0x3b, 0xe2, 0x0b,
  0x02, 0x9f, 0xc4, 0x87, 0x68, 0x62, 0xf9, 0x5a, 0x80, 0x97, 0x9e, 0xc3,
  0x88, 0x61, 0x1b, 0xcd, 0x3a, 0x59, 0xdf, 0xfa, 0xf3, 0x69, 0x4a, 0x81,

  0xdb, 0x78, 0x92, 0xe9, 0x58, 0xee, 0xdb, 0x50, 0x9f, 0x22, 0x3e, 0x8d,
  0x0b, 0x9c, 0x17, 0xbe, 0x73, 0x90, 0xbb, 0x14, 0xde, 0xae, 0x49, 0xe5,
  0xf2, 0x3e, 0x87, 0x78, 0xbd, 0xe4, 0x6c, 0xe9, 0xb8, 0xee, 0x9f, 0xfe,
  0x6f, 0x6f, 0x07, 0x31, 0x26, 0x4d, 0x67, 0xd5, 0xef, 0x65, 0x69, 0x7f,
  0xe6, 0x85, 0xb9, 0xd1, 0xeb, 0x16, 0x85, 0x87, 0x7e, 0xc9, 0xa2, 0x82,
  0x55, 0x61, 0x19, 0xd8, 0xef, 0xe0, 0x4c, 0xf8, 0x33, 0x6b, 0x62, 0x55,
  0x3d, 0x4b, 0x30, 0x23, 0xae, 0x69, 0x55, 0xef, 0x2d, 0xc3, 0x3e, 0xf8,
  0x73, 0x57, 0x72, 0xff, 0x36, 0x82, 0x34, 0xe8, 0xbf, 0x7f, 0x39, 0x80,
  0x1b, 0x70, 0xf6, 0x53, 0xef, 0x3c, 0x8e, 0x06, 0x32, 0x97, 0x4f, 0x30,
  0x8d, 0x7c, 0x79, 0x45, 0xba, 0xe5, 0x8b, 0x58, 0x65, 0x9b, 0xb7, 0x11,
  0xf2, 0xd8, 0xaf, 0xff, 0xfd, 0x6a, 0xee, 0xf0, 0xbf, 0xd6, 0x7c, 0x5f,
  0x1e, 0xfb, 0xd5, 0xbf, 0xcf, 0x77, 0xf7, 0x5e, 0xb7, 0x0f, 0x18, 0xd5,
  0x2b, 0x29, 0x1f, 0x88, 0xf0, 0xc4, 0x5f, 0xcc, 0x14, 0xa5, 0x24, 0x21,
  0xe4, 0x8a, 0xf2, 0x31, 0x7a, 0x37, 0x68, 0x10, 0x27, 0x6c, 0x11, 0x5c,
  0xf1, 0x57, 0xe1, 0x60, 0x60, 0xcd, 0xe1, 0xe6, 0x48, 0xeb, 0xb4, 0x17,


  0xfc, 0xe7, 0xce, 0x97, 0xb1, 0x33, 0xd2, 0x2a, 0x2f, 0x92, 0x82, 0xda,
  0x6b, 0x0d, 0xed, 0xbb, 0x18, 0x55, 0x45, 0x34, 0x5e, 0xdb, 0x93, 0xca,
  0x6f, 0xe6, 0x81, 0x85, 0xc6, 0x3a, 0xbc, 0xc9, 0x0e, 0x69, 0x7a, 0xb6,

  0x86, 0x29, 0x5c, 0xce, 0x10, 0x29, 0x1e, 0x99, 0xf7, 0xc5, 0xda, 0x82,
  0x57, 0x45, 0x5c, 0xa3, 0x7e, 0x9b, 0x6c, 0x87, 0xef, 0xfc, 0xcd, 0x40,
  0x1a, 0xac, 0x99, 0xd1, 0x88, 0xaa, 0x24, 0x37, 0x59, 0x82, 0x1f, 0x72,
  0x9c, 0x21, 0x0a, 0x16, 0xc3, 0xd0, 0x71, 0xe5, 0x0c, 0x17, 0x60, 0x9b,
  0x15, 0xbe, 0x3c, 0x7d, 0xfb, 0xf6, 0xe8, 0x65, 0x37, 0x58, 0x68, 0x9b,
  0x51, 0x3b, 0x55, 0x3f, 0xe8, 0xef, 0x8b, 0xcf, 0xa3, 0xcd, 0x8a, 0x44,
  0x8b, 0xf8, 0xfb, 0x68, 0xfe, 0x97, 0x0a, 0x82, 0x35, 0xff, 0x52, 0xba,
  0xd8, 0x30, 0xba, 0xb1, 0x50, 0x40, 0xa4, 0x98, 0x32, 0xa0, 0x07, 0x1f,
  0x59, 0x83, 0x5b, 0x6b, 0xd6, 0xe8, 0x26, 0x09, 0x45, 0x14, 0x26, 0xac,
  0xcc, 0x02, 0x95, 0x0c, 0xb3, 0xd9, 0x8e, 0x14, 0x0a, 0xe8, 0xb7, 0xfb,
  0x68, 0x99, 0x01, 0x11, 0xa9, 0x26, 0x6b, 0x58, 0x5e, 0x70, 0xcf, 0x91,

  0x45, 0x5a, 0x7d, 0xa4, 0x70, 0xb6, 0x57, 0x9d, 0x85, 0xfa, 0x5c, 0x60,
  0xb3, 0xcf, 0x66, 0x31, 0xc8, 0x0e, 0x78, 0xdd, 0xfd, 0x2a, 0x14, 0x99,
  0x8c, 0xf4, 0xe6, 0x3d, 0xd0, 0xb2, 0x59, 0x7a, 0xbd, 0xc8, 0x6e, 0xe8,
  0x33, 0x8c, 0x53, 0x44, 0xb8, 0x1b, 0x61, 0x6b, 0x1e, 0x86, 0xd7, 0xe7,
  0xa8, 0xc2, 0x9d, 0x40, 0x7e, 0xd0, 0x51, 0x2d, 0xb8, 0xf9, 0x0d, 0xf0,
  0xca, 0xa9, 0x45, 0x25, 0x97, 0x5c, 0x05, 0x7b, 0xf5, 0x8d, 0x60, 0x8e,
  0x76, 0x02, 0x6a, 0x41, 0x1e, 0xb2, 0xd4, 0xa3, 0x59, 0x1c, 0x52, 0x14,
  0x63, 0xf4, 0xc1, 0x36, 0xf1, 0x4e, 0xe3, 0x18, 0xc8, 0x5a, 0xa9, 0x5b,
  0x43, 0xe8, 0xe9, 0xa6, 0x3d, 0x91, 0xbf, 0x31, 0xf5, 0x10, 0xc0, 0x5d,
  0xa1, 0x4f, 0x18, 0x26, 0xf6, 0xa4, 0x8b, 0x87, 0x0d, 0xa8, 0x38, 0x38,
  0x49, 0x09, 0x23, 0xf2, 0x12, 0x55, 0x25, 0xf4, 0x30, 0x2e, 0x6b, 0xa0,
  0xe6, 0x12, 0x43, 0x45, 0xdd, 0xe5, 0x40, 0xac, 0x02, 0xc4, 0x30, 0xcd,
  0xee, 0xd2, 0x39, 0xc8, 0xde, 0x2b, 0xe6, 0x13, 0x47, 0x21, 0xe4, 0x02,
  0x9b, 0x3f, 0x97, 0xab, 0x26, 0x08, 0x24, 0x12, 0xfa, 0x1d, 0x03, 0x9f,
  0x7c, 0x39, 0x0c, 0xbb, 0x25, 0xa6, 0x33, 0xff, 0x4c, 0xc1, 0xc0, 0x61,
  0xf6, 0xd7, 0xcd, 0x2c, 0xbf, 0x0f, 0x9d, 0x14, 0xe8, 0xd4, 0xb6, 0xbb,
  0x53, 0xdb, 0xaa, 0xc1, 0x8e, 0x39, 0x52, 0xdd, 0x81, 0x5f, 0xa1, 0x4b,

  0x0b, 0xf6, 0x15, 0x65, 0x11, 0xeb, 0x40, 0x8e, 0x00, 0x22, 0xd0, 0xe1,
  0x7e, 0xc6, 0xca, 0x21, 0xc7, 0x56, 0xd6, 0x27, 0x94, 0x3e, 0x0e, 0x80,
  0x93, 0xcb, 0x0f, 0xfd, 0xfa, 0x92, 0xe9, 0x63, 0x76, 0xf7, 0x20, 0x1d,
  0xc5, 0x3e, 0xf7, 0x29, 0x66, 0x90, 0xbc, 0x30, 0xff, 0x59, 0xfb, 0xed,
  0x87, 0x7f, 0x36, 0x80, 0x02, 0x7d, 0x98, 0xd4, 0x75, 0x30, 0xb7, 0x0e,
  0xe7, 0x36, 0xe8, 0xe6, 0x75, 0x13, 0x56, 0x49, 0xb6, 0x24, 0xf2, 0x5a,
  0x19, 0xec, 0xca, 0x04, 0x7d, 0x31, 0x1c, 0x09, 0xd8, 0xc7, 0x20, 0x77,
  0x25, 0x04, 0xf5, 0x30, 0x91, 0x7c, 0xaf, 0x08, 0x6e, 0x55, 0x59, 0x77,
  0xf3, 0xac, 0x6c, 0x91, 0xe5, 0x03, 0x37, 0x2e, 0x52, 0x72, 0x9c, 0xfc,
  0x8b, 0xea, 0x0a, 0x2a, 0x3b, 0x5b, 0xca, 0x0a, 0xbe, 0xd2, 0xda, 0x84,
  0x87, 0x48, 0xa5, 0x60, 0x4b, 0xba, 0xa5, 0x9a, 0xad, 0x8d, 0x0a, 0x77,
  0x61, 0x5d, 0xd6, 0xbb, 0x23, 0x4f, 0x3c, 0xf5, 0xab, 0x5f, 0x8b, 0x87,
  0xa7, 0x6c, 0xb7, 0x0f, 0x66, 0x6d, 0xbe, 0x36, 0xe7, 0x03, 0x73, 0x96,
  0x75, 0x7f, 0xca, 0x76, 0x37, 0x67, 0xdb, 0xf3, 0x4a, 0x44, 0x92, 0xb6,
  0x31, 0xda, 0xff, 0x85, 0x29, 0xdb, 0x7e, 0xc6, 0x76, 0x8a, 0x7c, 0xed,
  0x48, 0xba, 0xb6, 0x6c, 0xb4, 0xe4, 0x6b, 0x4a, 0x73, 0xdb, 0x75, 0x29,
  0xdb, 0x7e, 0xce, 0xf6, 0xba, 0xa4, 0x6d, 0x60, 0x06, 0xac, 0x49, 0xd9,
  0xfe, 0x65, 0x19, 0xdb, 0x7d, 0x29, 0xdb, 0x3f, 0x3f, 0x67, 0xfb, 0xd7,
  0x4d, 0xd9, 0xfe, 0x35, 0xb3, 0x91, 0x71, 0x7b, 0xe8, 0x44, 0xf2, 0xa9,
  0x14, 0x9d, 0xbd, 0xe8, 0x45, 0x7c, 0xd6, 0x4a, 0xcc, 0x56, 0x02, 0x8b,
  0x17, 0x66, 0x96, 0x61, 0x58, 0xa3, 0xf1, 0x14, 0xf7, 0xb0, 0x6e, 0x48,
  0x68, 0x25, 0x92, 0x01, 0xe7, 0xc7, 0x81, 0x1f, 0xc5, 0x6e, 0x7a, 0x5d,
  0xcf, 0xb9, 0x3d, 0x21, 0x95, 0x84, 0x07, 0x56, 0xa2, 0xe3, 0x33, 0x9d,
  0xe7, 0x7e, 0x7d, 0x96, 0xd3, 0xcc, 0xeb, 0xbd, 0x47, 0xce, 0x56, 0x97,
  0xbf, 0xac, 0xa8, 0x4e, 0x39, 0x66, 0xb7, 0x4b, 0xc1, 0xc8, 0x58, 0xb8,



  0x8c, 0x42, 0xd0, 0xf0, 0x6b, 0xf0, 0x92, 0x66, 0xb6, 0x45, 0xab, 0x0d,
  0x49, 0xd8, 0x36, 0xee, 0x41, 0x31, 0x0c, 0xd0, 0x09, 0xfc, 0x75, 0x40,
  0x86, 0x50, 0xd9, 0x8b, 0x32, 0xed, 0x1a, 0xb7, 0x70, 0x6f, 0xf4, 0x88,
  0x2b, 0xd7, 0x35, 0xa4, 0x23, 0xf3, 0x0c, 0x00, 0xc3, 0xf0, 0x7d, 0xc6,
  0x6b, 0x77, 0x39, 0x68, 0xdc, 0x52, 0x4e, 0xdf, 0x19, 0x25, 0xef, 0x48,
  0x7d, 0x34, 0xca, 0xba, 0x99, 0x91, 0x0c, 0x2e, 0xbf, 0x8b, 0x0d, 0xd7,
  0xc6, 0x08, 0x36, 0xf4, 0xf3, 0xfe, 0xdd, 0x49, 0x18, 0x9f, 0x46, 0xf4,
  0xe0, 0x60, 0x67, 0x07, 0x19, 0x52, 0x57, 0xe9, 0xed, 0xed, 0xa8, 0xce,
  0x76, 0x66, 0xe5, 0xb4, 0xde, 0xa1, 0x13, 0xd4, 0x2f, 0x5f, 0x35, 0x8b,
  0xf9, 0xba, 0xac, 0x87, 0xbc, 0xd6, 0x62, 0x69, 0x45, 0x44, 0x76, 0x99,

  0x97, 0x6c, 0x6d, 0xe5, 0x7e, 0x27, 0x00, 0xf0, 0xfd, 0x00, 0x40, 0x0c,

  0x55, 0x05, 0x66, 0x51, 0xe6, 0xff, 0xd0, 0x12, 0x87, 0x82, 0x4a, 0x91,
  0x82, 0x72, 0xbf, 0x73, 0xb6, 0x57, 0x43, 0x10, 0x1e, 0x10, 0xdb, 0x01,
  0x84, 0xf8, 0x9b, 0x35, 0x60, 0x61, 0xed, 0x3d, 0xd3, 0x4d, 0x6f, 0x35,
  0xad, 0xb6, 0xe4, 0x15, 0x76, 0xd5, 0x03, 0x9d, 0xf5, 0xf4, 0xb1, 0xfe,
  0xd5, 0x59, 0x82, 0xa1, 0x6e, 0x92, 0xf2, 0x0f, 0x51, 0x76, 0xfd, 0x47,
  0x3f, 0xc5, 0x2d, 0xb3, 0x09, 0x79, 0x2f, 0x38, 0xdb, 0x6e, 0xed, 0x4c,
  0xec, 0xc3, 0x9f, 0x62, 0x26, 0xc0, 0x4f, 0x88, 0xf2, 0xc7, 0xd6, 0x1c,
  0xf0, 0xd8, 0xa7, 0xf8, 0xfe, 0xf5, 0x5e, 0xdf, 0x67, 0xf7, 0x06, 0xfc,
  0xe9, 0xeb, 0xbd, 0x5f, 0xf1, 0xc3, 0xef, 0xad, 0xb3, 0x8a, 0xb1, 0x26,
  0x5e, 0xd0, 0x7f, 0x0f, 0x74, 0x87, 0xd7, 0x36, 0xff, 0xeb, 0xe9, 0xac,
  0x20, 0xfc, 0xcd, 0xc9, 0x86, 0xf5, 0x98, 0x2e, 0x31, 0x32, 0xa7, 0x7b,
  0xc5, 0x80, 0x5d, 0x82, 0xb9, 0x8e, 0x56, 0x18, 0x43, 0x05, 0x6c, 0x64,

  0x80, 0x1b, 0xc6, 0x1c, 0xa2, 0x4f, 0xcf, 0x4a, 0xc5, 0xc0, 0x32, 0x86,
  0x42, 0x5c, 0x0c, 0x65, 0x08, 0xf6, 0x47, 0x00, 0x7f, 0xd8, 0x10, 0xbf,
  0x8b, 0xb5, 0x31, 0xe7, 0xb6, 0xdd, 0x11, 0xc7, 0xd6, 0xba, 0x96, 0x12,
  0xe0, 0xd9, 0x3e, 0x52, 0xd4, 0xc4, 0xfa, 0xd1, 0xc0, 0x57, 0xba, 0x4c,
  0x54, 0xe1, 0x86, 0x6d, 0x46, 0xa7, 0x77, 0xc5, 0x0f, 0x92, 0x8d, 0xe1,
  0xfb, 0xe4, 0x60, 0x23, 0xd8, 0xa2, 0xd3, 0x42, 0x5a, 0xf2, 0xc0, 0xe3,
  0x55, 0x01, 0xa0, 0x00, 0x5d, 0xbe, 0x7c, 0xcd, 0xe4, 0x8a, 0xf0, 0xa4,
  0x9c, 0x39, 0x61, 0xdb, 0x59, 0x5c, 0x06, 0x41, 0xb8, 0x85, 0xb6, 0x1b,
  0xb6, 0xed, 0xa7, 0x48, 0x90, 0x90, 0xd3, 0xc6, 0x61, 0xd3, 0x43, 0x7b,
  0xe2, 0xd6, 0x1a, 0xc4, 0x5a, 0x29, 0x98, 0x48, 0xc1, 0x4c, 0xaa, 0xc6,
  0x0f, 0xb1, 0x20, 0x11, 0xb3, 0xad, 0xb5, 0x94, 0x6e, 0x59, 0xd6, 0x75,
  0x3e, 0x31, 0x9c, 0xfa, 0x52, 0x58, 0x64, 0x9d, 0x71, 0x3e, 0x15, 0x97,
  0x5e, 0xd3, 0x6e, 0xb6, 0x60, 0x19, 0xba, 0x5b, 0x84, 0x95, 0x0a, 0x1a,
  0x84, 0x38, 0x97, 0xcc, 0xec, 0x98, 0xb1, 0x5d, 0xe7, 0x34, 0x34, 0x53,
  0x5b, 0x9a, 0x4c, 0xaa, 0x3c, 0xbb, 0xa0, 0x54, 0x47, 0xac, 0x48, 0x14,
  0xaf, 0x2e, 0x93, 0x9d, 0x13, 0x62, 0x0a, 0x25, 0xe9, 0x50, 0xa6, 0x6d,
  0x4d, 0x98, 0xa0, 0x48, 0xbf, 0x46, 0xee, 0xa3, 0xcb, 0xed, 0xae, 0x32,
  0xca, 0x1c, 0xa0, 0x76, 0xb6, 0x58, 0x44, 0xaa, 0xad, 0x91, 0x7a, 0x72,
  0x52, 0x2b, 0x0b, 0x9d, 0x8e, 0x6a, 0x07, 0x20, 0x36, 0xe9, 0x05, 0xc5,
  0x17, 0xd1, 0x6a, 0x53, 0xd3, 0x77, 0x1d, 0xa4, 0xc2, 0xe8, 0x93, 0xf1,
  0x78, 0xcf, 0x0b, 0xfd, 0x33, 0xea, 0x00, 0xda, 0x9d, 0xd8, 0xd6, 0x65,
  0xc5, 0x7b, 0x99, 0xd1, 0x01, 0xc2, 0x4d, 0x3c, 0x1d, 0xfe, 0x82, 0x7a,
  0x16, 0x24, 0x6f, 0xbb, 0x5a, 0x4e, 0x24, 0xb1, 0x9c, 0x12, 0xe8, 0x38,
  0x5f, 0xcd, 0xae, 0xae, 0x01, 0xea, 0x03, 0x4a, 0xf9, 0xfd, 0xc0, 0xf0,
  0xfb, 0x40, 0xc4, 0xbb, 0x74, 0xf9, 0xfe, 0x04, 0x79, 0x2f, 0x3f, 0x1e,
  0x05, 0x21, 0xec, 0x23, 0x4f, 0x69, 0x06, 0xa1, 0x4c, 0x26, 0x88, 0x77,


  0xce, 0x8d, 0xd7, 0xd4, 0x78, 0x3f, 0x33, 0xde, 0xe8, 0x7c, 0x5e, 0xac,
  0xde, 0x81, 0xb2, 0x92, 0x83, 0x35, 0x1e, 0x25, 0xc6, 0x0d, 0x45, 0x7b,
  0x8e, 0x67, 0x41, 0x93, 0x4d, 0x9f, 0x97, 0xeb, 0x50, 0xd7, 0x79, 0x6a,
  0x15, 0x28, 0xf7, 0x21, 0xde, 0x4f, 0x41, 0xe7, 0x4e, 0x7b, 0x6b, 0x43,
  0x88, 0xdb, 0x33, 0x0e, 0x52, 0xa4, 0xb2, 0xf3, 0xed, 0x78, 0x1c, 0xa6,
  0xc8, 0x17, 0xc6, 0x38, 0x29, 0x2f, 0x8b, 0xfc, 0xef, 0xc0, 0x0c, 0xa2,
  0xa0, 0x65, 0x37, 0xbd, 0xb5, 0x55, 0xa4, 0x90, 0x78, 0x01, 0x79, 0x4a,
  0x94, 0x08, 0xf9, 0x1b, 0x92, 0xe8, 0x20, 0x75, 0x28, 0x1d, 0x8c, 0xf0,
  0xc5, 0x6c, 0x26, 0x20, 0x05, 0x19, 0xa4, 0x29, 0x36, 0xdb, 0x62, 0x36,
  0x77, 0x96, 0x3f, 0x1c, 0x1c, 0xae, 0x52, 0x85, 0x60, 0x02, 0x45, 0x01,
  0xbf, 0x78, 0xa4, 0x9f, 0x5d, 0x54, 0x80, 0xbe, 0x95, 0x3f, 0xbf, 0xa4,
  0x20, 0x8e, 0x8e, 0x95, 0xdd, 0x32, 0x03, 0x6d, 0x49, 0x02, 0x0f, 0x56,
  0x47, 0x72, 0xb2, 0xeb, 0x2c, 0x26, 0x5e, 0x74, 0x8f, 0x59, 0x90, 0x3e,
  0x08, 0x85, 0x50, 0x95, 0xcf, 0x34, 0xbc, 0x5b, 0x5d, 0x00, 0x42, 0x1b,
  0xe8, 0x78, 0x00, 0xf2, 0x20, 0xb9, 0xf1, 0x15, 0xf3, 0x5f, 0xfc, 0xe9,
  0xe8, 0x84, 0xc3, 0xf8, 0x0b, 0x19, 0xc3, 0x05, 0xda, 0x4a, 0x20, 0xb1,
  0x51, 0xe8, 0xc2, 0x46, 0x7b, 0xb4, 0x12, 0x1c, 0x03, 0x74, 0x77, 0xb8,
  0x97, 0xa5, 0x1a, 0x8c, 0xbb, 0xa1, 0x61, 0x80, 0x11, 0xe1, 0xe3, 0x51,
  0x5d, 0x95, 0xba, 0xee, 0xcd, 0xaf, 0xa9, 0x52, 0x4b, 0xa9, 0xa2, 0x4b,
  0x5a, 0xae, 0xff, 0x82, 0x9d, 0x22, 0xa7, 0x88, 0x88, 0x8f, 0xdf, 0xf6,
  0x15, 0x6c, 0x4b, 0x31, 0x06, 0x88, 0x0d, 0x48, 0x4b, 0xf0, 0x82, 0xa0,
  0x05, 0xac, 0x8c, 0x4d, 0x46, 0xb8, 0xcc, 0x5c, 0x56, 0x64, 0x69, 0x65,
  0x40, 0xdc, 0x87, 0x59, 0xae, 0x78, 0xea, 0x86, 0x4b, 0xe5, 0xb2, 0xdd,
  0xc5, 0xde, 0xc9, 0x20, 0x3d, 0xba, 0xfc, 0x27, 0xa8, 0x44, 0xf9, 0x45,
  0xa5, 0x28, 0x9f, 0xb6, 0x12, 0xc5, 0x49, 0x0a, 0x92, 0x3a, 0xa1, 0x9c,
  0x40, 0x94, 0x90, 0x5c, 0x32, 0x9c, 0x06, 0x75, 0x93, 0xda, 0xc6, 0x40,
  0xfc, 0x5a, 0x67, 0xb8, 0xf8, 0x65, 0x1a, 0x24, 0xad, 0x2c, 0xd9, 0x2c,
  0xe0, 0x91, 0x5b, 0xc2, 0x35, 0xb6, 0x7b, 0xe0, 0x97, 0x32, 0x2a, 0x19,
  0x9f, 0x65, 0x02, 0x9d, 0xf6, 0x07, 0xd7, 0x98, 0xe7, 0x53, 0x1b, 0x60,
  0x7b, 0x86, 0x37, 0xbf, 0xf0, 0xe4, 0xf1, 0x9f, 0xee, 0x15, 0xc8, 0xb8,
  0x67, 0xf4, 0x9a, 0x03, 0x28, 0xf5, 0xf8, 0x9d, 0xc3, 0x28, 0xab, 0x63,
  0xa8, 0xaa, 0x76, 0x18, 0x61, 0x76, 0x96, 0xbd, 0x51, 0x66, 0x1c, 0xbd,
  0xdf, 0xc3, 0xe0, 0x32, 0x8d, 0xbb, 0xaa, 0x49, 0x6c, 0x38, 0xfa, 0x24,
  0x6b, 0x6e, 0x48, 0x8b, 0xc3, 0x7e, 0xe8, 0x46, 0x7a, 0x5c, 0x40, 0xb6,
  0xa8, 0x37, 0xdf, 0x65, 0xc0, 0x69, 0x70, 0xc4, 0x50, 0x18, 0x66, 0xd9,
  0xfa, 0x45, 0x34, 0xa6, 0x1b, 0xdc, 0xbe, 0x68, 0xa7, 0x2d, 0x17, 0xa2,
  0x6e, 0xed, 0x8d, 0xe6, 0xe2, 0xb6, 0x2a, 0x86, 0x34, 0x6d, 0x49, 0x1e,
  0xf4, 0x7d, 0xfc, 0xf6, 0x1a, 0xcb, 0xb5, 0x8d, 0x02, 0x56, 0x50, 0x60,
  0x0c, 0xef, 0xca, 0x7c, 0xf4, 0xfc, 0x3d, 0x55, 0x2b, 0x82, 0x9d, 0x44,
  0x71, 0xb9, 0x58, 0x68, 0xb8, 0x8f, 0xc9, 0xb0, 0x27, 0x47, 0x7e, 0x9b,
  0x2e, 0xcd, 0xcf, 0x28, 0x24, 0x08, 0xc4, 0x5f, 0x6e, 0x0b, 0x19, 0xe4,
  0x25, 0x80, 0x00, 0xfc, 0x89, 0x75, 0xc2, 0xe2, 0x38, 0x9f, 0xb0, 0x8f,
  0x85, 0x18, 0x67, 0xb1, 0xee, 0x43, 0xb5, 0x20, 0x6a, 0xa9, 0x77, 0x4a,
  0x83, 0xe4, 0x12, 0x6c, 0xf1, 0x85, 0xab, 0x80, 0x47, 0x16, 0x7c, 0x80,
  0x4d, 0x88, 0x0c, 0xdf, 0x5a, 0x64, 0x39, 0x8a, 0xf4, 0x20, 0x85, 0xa6,
  0x83, 0x8a, 0xac, 0x60, 0xfe, 0x92, 0xc5, 0xa7, 0x3d, 0x29, 0x9d, 0xab,
  0xc7, 0xb6, 0x98, 0x0e, 0x5b, 0x0d, 0x13, 0x28, 0x97, 0xbe, 0x20, 0x08,
  0xd5, 0x32, 0xbe, 0xed, 0xdc, 0xdb, 0x17, 0x99, 0x8c, 0xe5, 0x70, 0xb4,
  0x6e, 0xad, 0xc4, 0x1e, 0x22, 0xb1, 0xb9, 0xad, 0x31, 0xd5, 0x45, 0x8c,
  0x5f, 0x9e, 0x6d, 0x27, 0x67, 0x1d, 0x24, 0x18, 0x14, 0x25, 0x91, 0x30,
  0xf5, 0xf9, 0xb0, 0x74, 0x4a, 0x64, 0x00, 0xd2, 0x7e, 0xd4, 0x10, 0x85,
  0x7d, 0xb6, 0x50, 0xbb, 0x08, 0xfd, 0xfe, 0xea, 0x8c, 0xa9, 0xb3, 0x96,

  0x43, 0x14, 0x69, 0x30, 0x28, 0x88, 0x98, 0x94, 0xfe, 0x35, 0x35, 0x16,
  0x74, 0x49, 0xa5, 0x76, 0xdc, 0x9b, 0x4c, 0x9c, 0xf2, 0x8a, 0x7f, 0x32,
  0x0f, 0x52, 0x1d, 0xb1, 0x11, 0x9a, 0x75, 0xee, 0xa1, 0x1f, 0x49, 0x93,
  0xd0, 0x9a, 0xa5, 0x52, 0xa7, 0x89, 0x07, 0x78, 0xd8, 0x65, 0x56, 0x64,
  0x31, 0x84, 0xb0, 0x3b, 0x08, 0x72, 0x21, 0xe9, 0xd9, 0xa8, 0x0b, 0x6e,
  0xee, 0x05, 0x0d, 0x64, 0x72, 0x79, 0xe9, 0x1a, 0x19, 0xf4, 0x00, 0xa0,
  0xb2, 0x8e, 0x47, 0x3d, 0x42, 0x89, 0x23, 0x12, 0x4c, 0x3e, 0x4c, 0x82,
  0x69, 0xb9, 0xbc, 0xa3, 0xcd, 0x30, 0x8f, 0xd5, 0xf5, 0xd5, 0xbe, 0xe1,
  0x1b, 0xfb, 0xa3, 0xcf, 0x19, 0x34, 0xfb, 0xca, 0x08, 0xeb, 0x08, 0x5a,
  0x32, 0xa7, 0x8f, 0x48, 0x37, 0xe1, 0xce, 0x78, 0xa2, 0x85, 0x8f, 0x9c,
  0xe2, 0x3f, 0xfc, 0xef, 0x44, 0x69, 0x7f, 0x5b, 0x85, 0xf1, 0xbb, 0x2d,
  0x22, 0xa8, 0x84, 0xc8, 0x6a, 0x9b, 0x7b, 0x5f, 0x72, 0xa6, 0xc1, 0x24,
  0x6f, 0xd0, 0x73, 0x42, 0xad, 0xc8, 0xf6, 0xd5, 0x44, 0x7f, 0xb8, 0x0a,
  0x6f, 0x45, 0x6b, 0xe2, 0x47, 0xc9, 0x7f, 0xa7, 0x4f, 0xe9, 0xdb, 0x5c,
  0x96, 0x81, 0x64, 0x88, 0xaf, 0x8e, 0x5e, 0x9f, 0xbe, 0x3b, 0x6a, 0x97,
  0x2b, 0x36, 0xc0, 0xdc, 0x4a, 0x10, 0xec, 0xef, 0xce, 0x8e, 0xd1, 0x06,
  0x05, 0x06, 0x41, 0x32, 0x15, 0x72, 0xb2, 0xfb, 0x93, 0xb3, 0xef, 0x5f,

  0xd9, 0xd9, 0x91, 0x96, 0x50, 0x70, 0x13, 0x33, 0x19, 0x74, 0xc0, 0x3b,
  0xdd, 0x15, 0xed, 0xa4, 0x05, 0x50, 0xaf, 0x36, 0xe9, 0xfd, 0x6e, 0xe7,
  0x87, 0x14, 0x0b, 0x4e, 0x8c, 0xd1, 0x52, 0x7d, 0x40, 0xdc, 0xd7, 0x35,
  0x95, 0xde, 0xdb, 0x41, 0x03, 0xbd, 0x97, 0xad, 0x23, 0x06, 0x9c, 0xe2,
  0xd4, 0xe2, 0x34, 0x01, 0xaa, 0x1f, 0x01, 0xfd, 0x8d, 0x92, 0xf0, 0x43,
  0x9a, 0x14, 0x82, 0xaf, 0xc4, 0x18, 0xf6, 0x15, 0x65, 0x69, 0x23, 0x10,
  0xc2, 0xd2, 0x8e, 0x1c, 0x2e, 0x44, 0xb4, 0xb6, 0x2d, 0xdc, 0x80, 0x11,
  0x18, 0x25, 0xdc, 0xe3, 0x6f, 0x64, 0x24, 0x42, 0x6e, 0xbe, 0xb9, 0x55,
  0x53, 0xa1, 0x83, 0x37, 0x55, 0xfb, 0x9b, 0x44, 0x2d, 0xe8, 0xcd, 0x3f,
  0x6c, 0xba, 0x9a, 0x10, 0x6e, 0x6f, 0x19, 0x6f, 0x07, 0xeb, 0xda, 0x03,

  0x6e, 0xdf, 0x97, 0xbf, 0xa5, 0x2b, 0xee, 0xab, 0xc7, 0x96, 0xd0, 0x9d,
  0xa4, 0xf4, 0xa0, 0x4b, 0xef, 0x8a, 0x91, 0x64, 0xc1, 0x38, 0x44, 0x98,
  0xea, 0x28, 0x1a, 0xf0, 0x0b, 0x8b, 0x2f, 0x1a, 0x82, 0x5d, 0x70, 0x2d,
  0xc3, 0x94, 0xe1, 0x20, 0x60, 0xa6, 0x7d, 0x2d, 0x10, 0x8a, 0x40, 0x2f,
  0xb6, 0xfa, 0xae, 0x68, 0xe8, 0xa2, 0x32, 0x4f, 0x99, 0x96, 0x55, 0xb4,
  0x00, 0x8c, 0x08, 0xc9, 0x91, 0x6e, 0x0d, 0xa4, 0x89, 0xe7, 0x4f, 0x9e,
  0x93, 0x68, 0x47, 0x86, 0x92, 0x34, 0xcc, 0x13, 0xf8, 0x6d, 0x44, 0x4f,

  0x19, 0x5b, 0x39, 0x00, 0xbb, 0xf6, 0xd7, 0xa0, 0x4d, 0xce, 0x27, 0xd9,
  0x9c, 0x9b, 0xf4, 0x8d, 0xbd, 0x41, 0x42, 0x30, 0xa5, 0x35, 0x07, 0x46,
  0x30, 0x7e, 0x86, 0x7c, 0xf2, 0xfa, 0x63, 0xb2, 0xf5, 0xef, 0xdb, 0x8c,
  0x40, 0xa2, 0x69, 0x39, 0xe4, 0x9b, 0xcd, 0x8b, 0x55, 0x40, 0xf9, 0xe4,
  0x9c, 0xcb, 0x5b, 0x9b, 0x8a, 0x3d, 0xc7, 0xfa, 0x26, 0xb1, 0x9a, 0xbc,

  0xba, 0x29, 0x97, 0x09, 0x77, 0x55, 0xac, 0x82, 0xe0, 0x98, 0x1c, 0xd7,

  0x5a, 0x3b, 0xb5, 0xbf, 0x6c, 0x21, 0x94, 0x88, 0x60, 0x42, 0xc0, 0x2c,
  0x17, 0x87, 0xab, 0x6a, 0x57, 0xa3, 0xe4, 0x7d, 0x81, 0x44, 0x3c, 0xa1,
  0x3b, 0x91, 0x13, 0x79, 0x61, 0xd6, 0x6f, 0x68, 0xda, 0x48, 0x8a, 0x08,
  0x13, 0xfa, 0x5b, 0x9b, 0xf9, 0x08, 0x93, 0xec, 0x04, 0x48, 0x71, 0x69,
  0x85, 0xad, 0x59, 0xb6, 0x95, 0x24, 0xaf, 0xc3, 0xf6, 0x93, 0xdc, 0x3e,
  0x8f, 0x48, 0xdd, 0x2c, 0x07, 0x63, 0x53, 0x08, 0x3c, 0x9b, 0xcf, 0x87,

  0x8c, 0x71, 0x4f, 0x88, 0xdf, 0xa4, 0xdc, 0x73, 0x95, 0x34, 0x12, 0xd8,
  0x7c, 0xc3, 0x27, 0x90, 0x2c, 0x28, 0xf6, 0x06, 0x92, 0xac, 0xc2, 0x8d,
  0x48, 0x29, 0x96, 0x06, 0xd6, 0xa8, 0x72, 0xcf, 0x39, 0x43, 0xb0, 0x39,
  0xbc, 0xa4, 0xbe, 0x86, 0x71, 0x21, 0x5c, 0xec, 0xf4, 0xea, 0xb2, 0x5a,
  0x72, 0xd3, 0xca, 0x58, 0x47, 0x4d, 0x5f, 0xeb, 0xe6, 0x47, 0x95, 0x28,
  0xea, 0xac, 0xe1, 0xc9, 0xf0, 0xbb, 0xc7, 0xaf, 0xf4, 0x2a, 0x5a, 0x25,
  0x83, 0x4c, 0xbf, 0xf8, 0x70, 0xf6, 0x31, 0xdc, 0x47, 0x27, 0x35, 0xec,
  0x50, 0xce, 0xc4, 0x98, 0x28, 0x34, 0x39, 0x7e, 0x17, 0x1f, 0x4e, 0x46,
  0x61, 0x55, 0x95, 0xc7, 0xd0, 0x81, 0x41, 0x2a, 0xc6, 0x12, 0xcd, 0xa9,

  0xff, 0x18, 0x11, 0xc3, 0x65, 0x56, 0xd9, 0xcf, 0x84, 0x49, 0x92, 0x57,
  0x8b, 0x72, 0x46, 0x35, 0x5d, 0xd9, 0xfd, 0x7b, 0x41, 0x4f, 0xba, 0xfb,

  0x26, 0xe5, 0x70, 0xb5, 0x85, 0xba, 0xe5, 0x8a, 0x3d, 0xea, 0x45, 0xd0,
  0xd4, 0xb2, 0x33, 0xf1, 0xe1, 0xdc, 0x52, 0xb5, 0x89, 0xac, 0xbc, 0xe9,
  0x2f, 0xa1, 0x48, 0xca, 0x69, 0xe3, 0xad, 0x80, 0x1e, 0x88, 0x0f, 0xc7,
  0x8c, 0x35, 0xb2, 0x32, 0x2a, 0x90, 0x82, 0x45, 0xb9, 0x7e, 0x65, 0xfc,
  0x60, 0x70, 0xc8, 0xe6, 0x87, 0x0e, 0x13, 0xb8, 0x75, 0xc2, 0xfd, 0x2b,
  0x8b, 0x9d, 0x30, 0x66, 0xd0, 0x3d, 0x60, 0x87, 0x53, 0x8e, 0xc7, 0x87,
  0xf1, 0xe1, 0xec, 0x09, 0x0b, 0x08, 0xf9, 0x9a, 0x03, 0x96, 0xaf, 0x04,
  0xbb, 0x30, 0x2f, 0x8c, 0x7a, 0xb7, 0xaa, 0xa6, 0xd9, 0x07, 0xcc, 0xad,
  0x49, 0xab, 0xcb, 0xac, 0xf9, 0xb0, 0x7e, 0x43, 0xe6, 0x82, 0xa6, 0x70,
  0xb7, 0x40, 0x17, 0x78, 0xcb, 0x2c, 0x04, 0xf7, 0x37, 0x15, 0x74, 0x01,
  0xa3, 0xe0, 0xe1, 0xf7, 0x6c, 0xcd, 0xf4, 0x90, 0xbd, 0xfb, 0x5e, 0xa2,
  0x50, 0x3a, 0x46, 0x5c, 0xe6, 0x85, 0x82, 0xd8, 0x08, 0x8f, 0xf1, 0xa6,
  0x98, 0xc4, 0x90, 0x97, 0xd6, 0x85, 0xab, 0x16, 0x1f, 0xa9, 0xc4, 0xca,

  0x2a, 0x01, 0x1f, 0x22, 0xbd, 0x5b, 0x7c, 0x3a, 0xe6, 0xc7, 0xf5, 0xb8,
  0x79, 0x4d, 0x52, 0x43, 0x68, 0x9b, 0x05, 0xfb, 0x27, 0x9d, 0x84, 0xa5,
  0xd0, 0x9e, 0x40, 0xd4, 0x0f, 0xda, 0x1b, 0xd9, 0x9d, 0xdd, 0xf2, 0x66,
  0x66, 0x1d, 0x31, 0xe6, 0xaf, 0xfa, 0x5d, 0x15, 0xee, 0xe8, 0xed, 0xa1,
  0xfd, 0xb8, 0x29, 0x81, 0x89, 0x07, 0xbb, 0x50, 0x64, 0xf2, 0xde, 0x4f,
  0x17, 0x4d, 0xa8, 0xff, 0x04, 0x1f, 0xaf, 0x32, 0xce, 0x7b, 0xc5, 0xf6,
  0xca, 0x61, 0xf4, 0x6f, 0x8d, 0x3c, 0xed, 0xa6, 0xc8, 0xdc, 0xdd, 0xb1,
  0xae, 0x2a, 0xb2, 0x45, 0xfd, 0xec, 0x4e, 0xbe, 0xda, 0xb9, 0x0e, 0xb3,
  0x8c, 0xfc, 0xb2, 0x42, 0x08, 0x94, 0xb0, 0xc5, 0x03, 0x29, 0xd7, 0x5b,
  0x47, 0x46, 0xbd, 0x7b, 0x5c, 0x2d, 0xee, 0xb9, 0xe2, 0xe6, 0x01, 0xb7,
  0x2a, 0xc6, 0xe1, 0xb0, 0xab, 0x0a, 0xee, 0xa5, 0x5c, 0xe2, 0x9e, 0x9d,
  0xef, 0x9b, 0x41, 0x8b, 0x06, 0xd7, 0xcd, 0xc4, 0xa7, 0x3e, 0x7f, 0x32,
  0x6e, 0x6b, 0x8d, 0x2a, 0xd7, 0xa0, 0x19, 0xb8, 0xce, 0x2c, 0x3e, 0x9c,
  0x25, 0x4f, 0x7d, 0x4f, 0xb6, 0x67, 0xe0, 0xf9, 0x2e, 0xb9, 0xd1, 0x8b,
  0x31, 0x1b, 0x43, 0xda, 0xd0, 0xeb, 0xfd, 0xb3, 0xd8, 0x03, 0xd9, 0xe7,
  0xf3, 0xc2, 0xb7, 0xc8, 0xe9, 0x8b, 0x46, 0xf2, 0xae, 0x29, 0x65, 0xf1,
  0x9a, 0x43, 0xd8, 0x03, 0xe7, 0x56, 0xcf, 0x88, 0xbb, 0x22, 0x21, 0x0f,
  0x89, 0xaa, 0xe8, 0x13, 0x26, 0x4a, 0x2a, 0xe0, 0xe2, 0x66, 0xd4, 0x81,
  0x25, 0xcc, 0x9b, 0xe7, 0x4f, 0x72, 0xd6, 0x16, 0xc3, 0x20, 0x53, 0xe4,
  0x50, 0x94, 0x10, 0x6d, 0x24, 0x5d, 0x67, 0x62, 0x25, 0xe8, 0xe3, 0x09,

  0x37, 0x75, 0x09, 0xfb, 0x67, 0x77, 0x12, 0xe8, 0x48, 0xfd, 0xe8, 0xc0,
  0xa0, 0x67, 0x97, 0x33, 0xbf, 0x1b, 0xbd, 0xb7, 0xfc, 0x6a, 0xc0, 0x5b,
  0x70, 0x69, 0x16, 0x8f, 0x3f, 0xa2, 0x45, 0x22, 0x50, 0x89, 0xa1, 0xab,
  0x10, 0xea, 0xc1, 0x76, 0xf2, 0x4e, 0x42, 0x9b, 0xa4, 0xd3, 0xdd, 0x35,
  0x04, 0xb2, 0x4d, 0x03, 0x6c, 0xe5, 0x23, 0x23, 0x0c, 0xb9, 0x28, 0x80,
  0x14, 0x24, 0xea, 0x94, 0x10, 0x0b, 0x14, 0x6f, 0x4b, 0x40, 0x94, 0x1d,
  0x6e, 0x3b, 0x7b, 0xa3, 0xbd, 0x81, 0x6f, 0x75, 0xba, 0xd4, 0x3f, 0xd2,
  0xbd, 0x53, 0x0b, 0xd1, 0x4e, 0x9f, 0xee, 0xfa, 0x19, 0xde, 0xd1, 0x87,
  0xeb, 0xd0, 0x2d, 0x0c, 0xd7, 0xb2, 0x33, 0x58, 0x6e, 0xd2, 0xbb, 0x50,
  0x31, 0xdd, 0x1d, 0x3e, 0x7e, 0xfe, 0xbc, 0x25, 0xcf, 0x6b, 0x0f, 0xdf,
  0xfe, 0xc9, 0xee, 0x2e, 0xd6, 0x16, 0xd4, 0x44, 0x9b, 0x5f, 0x0c, 0x9f,
  0xe3, 0xc5, 0xf6, 0x6b, 0x75, 0x66, 0x8e, 0x60, 0xd6, 0xff, 0xde, 0x90,
  0x7e, 0x13, 0xf9, 0x1c, 0xfc, 0x29, 0xbd, 0x6f, 0x3d, 0xa7, 0xcf, 0x45,
  0xde, 0xc2, 0xc3, 0xbc, 0x8f, 0xe5, 0xc5, 0x05, 0x39, 0xb2, 0xe8, 0x49,
  0xc5, 0xe5, 0xb9, 0x49, 0xab, 0x59, 0xb8, 0xdc, 0xdd, 0xc1, 0x70, 0xaf,
  0x6f, 0xb9, 0x88, 0x26, 0x23, 0x01, 0x8e, 0xce, 0x93, 0xec, 0x44, 0x63,
  0x7d, 0x70, 0x81, 0x50, 0x77, 0xa0, 0x3d, 0x33, 0xa3, 0xbd, 0xe7, 0xcf,
  0x07, 0x34, 0xb3, 0x27, 0xcf, 0x9f, 0xf7, 0x16, 0x84, 0x7b, 0x9f, 0xb9,
  0x29, 0x9d, 0xfb, 0x89, 0x5e, 0x77, 0x44, 0x53, 0x93, 0x91, 0x13, 0xff,
  0x0e, 0xfd, 0x26, 0xf9, 0x22, 0x79, 0x7b, 0x7a, 0x7e, 0xe4, 0x79, 0x66,
  0x70, 0xbf, 0x38, 0x60, 0xe8, 0x99, 0x9a, 0x88, 0xc1, 0x2e, 0xd1, 0x6a,
  0x0d, 0x56, 0xaf, 0xb1, 0x49, 0x42, 0x63, 0x12, 0xc5, 0x2a, 0xea, 0x11,
  0xfc, 0xb7, 0x30, 0x23, 0x02, 0xfd, 0xd4, 0x2e, 0xf3, 0xc6, 0x87, 0x6d,
  0xda, 0x32, 0x87, 0xbd, 0x0d, 0x17, 0x07, 0x27, 0xb9, 0x49, 0x30, 0x65,
  0xb3, 0xa6, 0xea, 0x0e, 0x4e, 0x84, 0xa5, 0x7f, 0x94, 0xcb, 0xcd, 0xa0,

  0xc0, 0x22, 0x9b, 0x53, 0xde, 0xaa, 0x48, 0x42, 0x7e, 0x61, 0x88, 0x27,
  0xe5, 0xba, 0xc0, 0x5e, 0xbd, 0x85, 0x07, 0x3e, 0x05, 0xaa, 0xa5, 0xff,
  0xf1, 0x48, 0x3c, 0x85, 0x38, 0x21, 0x27, 0x62, 0x68, 0x65, 0x16, 0x0d,
  0xe3, 0xa3, 0x1b, 0x6f, 0xd6, 0xce, 0xe1, 0x69, 0xbd, 0x73, 0x05, 0x9d,
  0x43, 0x80, 0x47, 0xc8, 0x4e, 0xfc, 0x59, 0xb6, 0xd4, 0x94, 0xd2, 0xa2,
  0x3d, 0x8e, 0xa1, 0xe5, 0x8b, 0xfc, 0x72, 0x55, 0xc5, 0xd3, 0x2f, 0xd1,
  0xd2, 0x4f, 0x32, 0x1d, 0xb4, 0x9b, 0x43, 0x7a, 0x93, 0x56, 0x99, 0xf6,
  0x20, 0x2c, 0xee, 0xec, 0xdd, 0x56, 0x2b, 0x58, 0xeb, 0x81, 0xa8, 0xd5,
  0x46, 0x60, 0x49, 0x53, 0x09, 0x97, 0xd1, 0x63, 0xc8, 0x4b, 0x20, 0x29,
  0x3a, 0xd2, 0x52, 0x22, 0x6d, 0x5c, 0x45, 0x96, 0x38, 0x10, 0xe9, 0xb0,
  0x49, 0x98, 0x02, 0x33, 0x13, 0x5b, 0x10, 0xe6, 0xd4, 0x6d, 0xce, 0x9d,
  0xef, 0x9e, 0x9e, 0x85, 0xb7, 0xe5, 0xaa, 0xf4, 0xda, 0xb7, 0x84, 0xa0,
  0x0d, 0xc4, 0x79, 0x18, 0xce, 0x05, 0x7f, 0xe5, 0x43, 0x32, 0xcf, 0xdf,
  0x14, 0xf3, 0x32, 0x9d, 0x39, 0xe7, 0xc9, 0x52, 0xd3, 0x75, 0x05, 0x72,
  0x4c, 0x8e, 0x36, 0xc8, 0xea, 0xa0, 0x93, 0xe6, 0x33, 0x4e, 0xb6, 0x3c,
  0x40, 0x11, 0x50, 0xa8, 0xe7, 0x06, 0x61, 0x2e, 0x45, 0x94, 0xc2, 0x00,
  0x19, 0x04, 0x77, 0x13, 0x9a, 0xbd, 0x44, 0xef, 0x7c, 0x5a, 0x36, 0xd1,
  0x05, 0xed, 0x68, 0x49, 0x48, 0x7a, 0x2e, 0x8d, 0x64, 0x7c, 0xfc, 0x3f,
  0x8e, 0x3e, 0x65, 0xd4, 0xa9, 0x4a, 0x6f, 0x6c, 0xe1, 0xe0, 0xf7, 0x0c,
  0x58, 0x29, 0xd1, 0x20, 0x8b, 0x54, 0x91, 0xce, 0xc5, 0x86, 0xa7, 0x96,
  0xa7, 0x90, 0x1e, 0x08, 0x2b, 0x4a, 0xb7, 0x69, 0x43, 0x58, 0x21, 0x6d,
  0x53, 0x7d, 0x9f, 0x43, 0x2e, 0xe3, 0x5c, 0x74, 0x54, 0x7c, 0xb1, 0x03,

  0x90, 0xcf, 0x71, 0x01, 0x57, 0x22, 0x4c, 0x7b, 0xf2, 0xf6, 0x32, 0x9c,
  0x54, 0xa4, 0x91, 0x2c, 0x10, 0x11, 0x69, 0x52, 0x66, 0xae, 0xf7, 0xb4,
  0x8c, 0xf4, 0x2b, 0xed, 0x33, 0x6e, 0xab, 0x41, 0xe1, 0xa9, 0x2a, 0x79,
  0xf1, 0xfe, 0xdd, 0x49, 0x4f, 0xb9, 0xe4, 0x18, 0x67, 0x40, 0x9b, 0xb5,
  0xf1, 0x2e, 0x03, 0x9a, 0x59, 0x95, 0x9c, 0xa5, 0x97, 0xd9, 0x86, 0x0f,
  0x20, 0xd7, 0x42, 0x90, 0x14, 0x07, 0x44, 0xcc, 0x9d, 0xe2, 0xb7, 0x43,
  0x21, 0x26, 0xee, 0xc2, 0xc2, 0x7e, 0x91, 0xe3, 0xc5, 0x3c, 0x95, 0xbd,
  0x5b, 0x55, 0x14, 0xce, 0xc7, 0xce, 0x47, 0x3a, 0x7d, 0xa9, 0x9f, 0xb2,

  0x03, 0xfd, 0x29, 0x1d, 0xcc, 0x50, 0x96, 0x95, 0x2e, 0x89, 0x86, 0x92,
  0x8d, 0x3f, 0x92, 0x07, 0x7e, 0x43, 0xa7, 0x39, 0xcc, 0xc2, 0x20, 0x9b,
  0x6e, 0x05, 0x05, 0x86, 0x5b, 0x5e, 0xa8, 0xb6, 0xef, 0x9e, 0x66, 0xad,
  0xf1, 0xd6, 0x8c, 0xf0, 0x78, 0x6b, 0xc4, 0x92, 0x83, 0x4e, 0x6e, 0x14,
  0xfe, 0x22, 0xd0, 0x45, 0xc6, 0x61, 0xa5, 0x8c, 0x93, 0xe4, 0x44, 0xe6,
  0x77, 0x20, 0xc1, 0x16, 0xd6, 0x85, 0x74, 0x6a, 0xad, 0xcc, 0xa0, 0xd8,
  0x62, 0xd3, 0x39, 0x35, 0x2a, 0xb2, 0xde, 0x2f, 0x5a, 0xe3, 0xac, 0xa4,
  0xe6, 0x36, 0x34, 0xa5, 0xb4, 0xb0, 0xce, 0xe4, 0xd6, 0xc9, 0x7e, 0x72,
  0xa8, 0x43, 0x17, 0x00, 0x3a, 0xd4, 0xee, 0x5b, 0x43, 0x43, 0x1d, 0x85,

  0xd4, 0xc1, 0x7b, 0xc7, 0xea, 0xd1, 0xde, 0x7f, 0x7a, 0x2d, 0x5d, 0xbc,
  0xa6, 0x2c, 0x3d, 0x88, 0xb9, 0xde, 0x74, 0x1b, 0x94, 0xa9, 0xe0, 0x08,
  0x83, 0xb6, 0x30, 0xae, 0x62, 0x56, 0x84, 0x65, 0xd4, 0x9d, 0x3f, 0xf4,

  0x0a, 0x5a, 0x5e, 0x72, 0xe9, 0xe6, 0xf0, 0x55, 0x6e, 0x84, 0x48, 0xcd,
  0x08, 0x44, 0xd0, 0x72, 0xb9, 0xab, 0xab, 0x5e, 0x44, 0x2e, 0xe1, 0x1d,
  0x86, 0xe8, 0x7e, 0x53, 0xa9, 0xeb, 0xb0, 0xaf, 0xd8, 0x98, 0x8d, 0xa1,
  0x88, 0x7b, 0x9c, 0xc5, 0x4e, 0x5b, 0x48, 0x9d, 0xb3, 0x02, 0x7b, 0x96,
  0x6a, 0x07, 0x03, 0x81, 0xf7, 0x20, 0xbf, 0x65, 0x64, 0x77, 0x2c, 0x2e,
  0x10, 0x32, 0x67, 0xea, 0xc4, 0xa6, 0xc7, 0x4b, 0x77, 0xac, 0xc0, 0xd8,
  0xb4, 0xad, 0xe5, 0x39, 0xd9, 0xa3, 0x1b, 0x06, 0x34, 0x93, 0xb2, 0x0d,
  0x8a, 0x38, 0x72, 0xc2, 0x28, 0x7c, 0x5c, 0x9a, 0x3a, 0x35, 0xc3, 0x8e,
  0x3a, 0x4b, 0xd0, 0xe6, 0x4a, 0x71, 0x81, 0x7b, 0xd7, 0x5a, 0x18, 0x72,
  0x46, 0x7d, 0xc2, 0xa3, 0xd8, 0x40, 0x51, 0x0a, 0xc2, 0x4b, 0x2c, 0x84,
  0x8e, 0xec, 0x1d, 0x7a, 0xc4, 0x97, 0x83, 0x9c, 0xb0, 0x91, 0xfc, 0x7e,
  0xe8, 0x1a, 0x6f, 0x6c, 0xdd, 0x65, 0x46, 0xc3, 0x76, 0x49, 0x1f, 0x30,
  0xa4, 0x22, 0xd5, 0x9f, 0x09, 0x37, 0x6f, 0xad, 0x5b, 0x75, 0x29, 0x30,

  0x42, 0xbc, 0xc8, 0x22, 0x6f, 0xba, 0xf4, 0xd0, 0x59, 0x15, 0xd9, 0x2d,
  0x61, 0x80, 0xf7, 0x0f, 0x17, 0x2a, 0xd9, 0xdf, 0x1f, 0xbe, 0x7b, 0x7b,
  0xfc, 0xf6, 0xeb, 0x03, 0x42, 0xa8, 0xcb, 0xaa, 0x29, 0x75, 0xca, 0x4e,
  0xfe, 0xba, 0x9a, 0xe5, 0x53, 0xe6, 0x14, 0xd2, 0xc2, 0xb9, 0x55, 0x19,
  0x93, 0x89, 0x83, 0xd5, 0x30, 0x97, 0xa0, 0x10, 0x46, 0x92, 0x79, 0xa9,

  0xae, 0xa7, 0x2a, 0x2f, 0x57, 0x76, 0xeb, 0xa7, 0x50, 0x45, 0x10, 0x06,
  0x40, 0x78, 0x94, 0xf8, 0x11, 0x13, 0xad, 0x19, 0x9d, 0x14, 0x85, 0x57,

  0x27, 0x27, 0x49, 0x4f, 0xfb, 0x6e, 0xad, 0xdd, 0xe2, 0x8c, 0x21, 0x0c,
  0x64, 0xf3, 0x4d, 0x29, 0x9e, 0x67, 0x84, 0x3f, 0x71, 0x9b, 0x16, 0xd7,
  0x33, 0xa6, 0xeb, 0xf7, 0x61, 0x26, 0x27, 0xf2, 0x8c, 0x91, 0x1c, 0x88,
  0x13, 0xce, 0xab, 0x19, 0x6c, 0x21, 0xc3, 0x24, 0xcb, 0x8b, 0x86, 0xd4,
  0xa3, 0x96, 0x24, 0x6d, 0xf7, 0x6b, 0x5a, 0xe7, 0x6c, 0xbf, 0x62, 0x2b,
  0xa7, 0x05, 0x9c, 0xc2, 0x11, 0x49, 0x24, 0xad, 0x1a, 0x7a, 0x64, 0xbd,
  0x10, 0x3d, 0xbe, 0xc8, 0x27, 0x15, 0x50, 0xf3, 0x2c, 0x4b, 0x6d, 0xe3,
  0xf9, 0x9a, 0xb8, 0x65, 0xc8, 0x2e, 0x6e, 0xb2, 0x4a, 0x8c, 0x4f, 0x5b,

  0x45, 0x6c, 0x98, 0xdd, 0x28, 0x19, 0x97, 0xe6, 0xf9, 0x48, 0xd5, 0x82,
  0x36, 0xc4, 0x74, 0x4d, 0x6f, 0xd3, 0x46, 0x92, 0x68, 0x6d, 0x5e, 0x15,
  0x9a, 0x84, 0x21, 0xe6, 0xd6, 0x5e, 0x6f, 0xa4, 0x1d, 0x37, 0xd1, 0xff,
  0x24, 0xb3, 0x0a, 0xc5, 0x9d, 0x86, 0x76, 0x88, 0x42, 0x36, 0x86, 0x86,
  0x9d, 0x6e, 0xa0, 0xa5, 0x21, 0x35, 0x09, 0xf7, 0x46, 0xba, 0xa7, 0xd5,
  0xad, 0x9f, 0xa6, 0xde, 0x5d, 0x70, 0xb4, 0x75, 0xa0, 0xd7, 0x92, 0x2b,
  0x15, 0xbb, 0xd3, 0xf3, 0x9c, 0x4a, 0x07, 0x37, 0x1b, 0x2a, 0xe5, 0x2a,
  0xbd, 0x8c, 0x34, 0xcc, 0x20, 0x00, 0x7e, 0xca, 0x60, 0x66, 0xf2, 0x90,
  0x5f, 0x27, 0xef, 0xbf, 0x2c, 0xe2, 0x66, 0xe0, 0x9c, 0x0b, 0x39, 0x20,



  0x7d, 0x9a, 0xa0, 0x4e, 0xef, 0x62, 0xb4, 0x1d, 0xcd, 0xab, 0xe1, 0x39,
  0x88, 0x44, 0xaa, 0xd3, 0x6b, 0x97, 0xf0, 0xd5, 0xcb, 0xf8, 0xb4, 0x58,
  0xa5, 0x2b, 0xa3, 0x71, 0xa0, 0xd6, 0xab, 0xa4, 0x43, 0xa5, 0x89, 0x57,
  0xc8, 0xe2, 0x87, 0x2a, 0x5b, 0x98, 0x04, 0xe1, 0x70, 0x52, 0xf1, 0x25,
  0x41, 0xae, 0x5e, 0x26, 0x2c, 0x91, 0x9b, 0xbc, 0xb8, 0x2e, 0xf1, 0x1b,
  0x09, 0x52, 0x45, 0x52, 0x54, 0xf2, 0xde, 0xb2, 0x96, 0xf3, 0xce, 0xae,
  0xaa, 0x83, 0x46, 0x8b, 0x08, 0xcc, 0x5a, 0xb8, 0x34, 0xd0, 0xef, 0xd9,
  0xe2, 0xda, 0xb4, 0x74, 0x49, 0x81, 0x2f, 0x13, 0x11, 0xef, 0x20, 0xd1,
  0x8e, 0xef, 0xe6, 0xc5, 0x79, 0x9d, 0x49, 0x17, 0x6a, 0x2e, 0x09, 0x54,
  0x81, 0x23, 0xf2, 0x26, 0xb7, 0xbe, 0x9f, 0x7e, 0x49, 0x62, 0xcb, 0x84,
  0xec, 0x5e, 0x3b, 0xfb, 0x95, 0x32, 0x1a, 0xb9, 0x1f, 0x34, 0xdd, 0xe0,
  0xe9, 0x55, 0x59, 0x4a, 0xcd, 0x69, 0x1f, 0xb3, 0x4d, 0xb8, 0x41, 0x1a,
  0x21, 0x62, 0xf4, 0xe8, 0x0f, 0xed, 0xf6, 0xa1, 0x92, 0x4c, 0x1e, 0xb6,
  0x37, 0xcb, 0x9d, 0xc6, 0xea, 0xa1, 0x93, 0xb6, 0x65, 0x1b, 0xcf, 0xc7,
  0x0a, 0x67, 0x61, 0xae, 0x21, 0xbc, 0x22, 0xb8, 0x00, 0x8b, 0xee, 0xf8,
  0xf6, 0x48, 0x66, 0xa5, 0xbf, 0x29, 0x51, 0x61, 0xc7, 0xb9, 0x96, 0x0e,
  0x20, 0x1b, 0x54, 0x03, 0xb3, 0xa9, 0x68, 0x07, 0x34, 0x30, 0xd3, 0xbc,
  0x01, 0x03, 0xf9, 0xfd, 0xfe, 0x6e, 0x1f, 0x93, 0xa7, 0x81, 0xb4, 0xc6,
  0x95, 0x6e, 0x63, 0x6d, 0xed, 0x2f, 0x88, 0x41, 0x57, 0x18, 0x40, 0x32,
  0x64, 0xb5, 0x24, 0x3f, 0xdd, 0x90, 0xe8, 0x25, 0xad, 0xfb, 0xf6, 0x3f,
  0x6e, 0x15, 0xff, 0xd2, 0xa6, 0x94, 0x3d, 0x3d, 0x29, 0x1d, 0xff, 0x7a,


  0xe7, 0x9d, 0x31, 0x0d, 0x14, 0x4b, 0x30, 0x53, 0x5e, 0xa2, 0x7e, 0x12,
  0x4f, 0x69, 0x77, 0x3a, 0x03, 0xec, 0x7a, 0x34, 0x1f, 0x94, 0xcb, 0x49,
  0xa3, 0x85, 0xe6, 0x6b, 0xba, 0x58, 0x26, 0x11, 0x96, 0x35, 0xd0, 0x1b,
  0xa0, 0x69, 0x2a, 0xa9, 0x83, 0xbb, 0x4c, 0x85, 0x3d, 0xce, 0xcb, 0x10,
  0x7d, 0x45, 0x18, 0x29, 0x1b, 0xe3, 0xa9, 0xa4, 0x6b, 0x62, 0x43, 0xe8,
  0x4b, 0x6d, 0xc1, 0x88, 0x9c, 0xb3, 0x61, 0xd4, 0xdb, 0x1f, 0xed, 0x1a,
  0x21, 0xd9, 0xe3, 0x3e, 0x14, 0xfe, 0x06, 0xbf, 0xbd, 0x91, 0x6c, 0x11,
  0x57, 0xdd, 0xb6, 0xca, 0x6b, 0x58, 0xff, 0xac, 0xcd, 0x59, 0xd8, 0x86,
  0x49, 0x59, 0x42, 0x76, 0x93, 0x67, 0x49, 0x7f, 0x35, 0x56, 0x5e, 0x65,
  0xe4, 0x3f, 0xf5, 0x7c, 0xe3, 0xea, 0xc1, 0x8b, 0xd5, 0x3c, 0x66, 0xe6,
  0xd0, 0xdd, 0x96, 0xe0, 0x50, 0x5e, 0xd7, 0x2b, 0x31, 0x02, 0x2d, 0xc0,
  0x8c, 0x45, 0x1c, 0x4c, 0xe6, 0x66, 0x3e, 0xf8, 0x74, 0x3d, 0xa7, 0xac,
  0x92, 0x5e, 0xf5, 0x04, 0xde, 0x61, 0x51, 0x7c, 0x6d, 0x03, 0x4f, 0xb6,
  0xa3, 0xe4, 0x74, 0xb8, 0x11, 0x9d, 0x34, 0x52, 0xa3, 0x4d, 0x18, 0x40,
  0x56, 0x75, 0x86, 0xdb, 0x38, 0x3d, 0x3b, 0x3f, 0x3e, 0x7d, 0x3b, 0x4e,
  0xfe, 0x7d, 0x63, 0x6d, 0x79, 0x57, 0x1b, 0x58, 0xf9, 0x87, 0x81, 0x3b,
  0x93, 0xe4, 0x85, 0xf8, 0x19, 0xfa, 0x6c, 0x63, 0x4f, 0x89, 0x9f, 0x1a,

  0xe9, 0x6d, 0xf8, 0xab, 0xbe, 0x29, 0xd0, 0x6e, 0x72, 0x5a, 0x1d, 0x34,

  0xba, 0x40, 0x5b, 0xb6, 0x70, 0x7e, 0x5d, 0x23, 0x9a, 0x99, 0xbd, 0xb3,
  0x59, 0x3a, 0xc3, 0xc7, 0x39, 0xb0, 0x70, 0xbe, 0x56, 0x2a, 0xa7, 0xbc,
  0x80, 0x2d, 0xbe, 0x81, 0x5a, 0xca, 0x16, 0xf4, 0x16, 0xf3, 0x4c, 0x55,

  0xb4, 0xea, 0x48, 0x87, 0xb9, 0xaf, 0x8f, 0xce, 0xc9, 0x49, 0x83, 0x2a,
  0x57, 0x37, 0x41, 0xb8, 0xba, 0x44, 0xf1, 0x49, 0xad, 0x72, 0xa6, 0xc5,
  0xad, 0x74, 0x69, 0x8c, 0xf6, 0x3c, 0x4f, 0x8b, 0x68, 0x09, 0x9b, 0xd1,
  0x68, 0x5f, 0x9a, 0xdd, 0x28, 0x1d, 0xf4, 0xab, 0xfa, 0x4e, 0xbc, 0xbe,
  0x26, 0x0c, 0xcb, 0x74, 0xf6, 0xfe, 0x5c, 0xfc, 0x54, 0xaf, 0x8e, 0x4e,
  0x8e, 0xce, 0x8f, 0xba, 0x96, 0xfb, 0x84, 0xc1, 0x2c, 0x51, 0xea, 0xd2,
  0x64, 0xd3, 0xab, 0xa2, 0x9c, 0x97, 0x97, 0xb9, 0x34, 0xe2, 0x4d, 0xbe,
  0xcf, 0x26, 0xaf, 0x0e, 0xbf, 0x23, 0x7d, 0x82, 0x7c, 0x4e, 0x67, 0xef,
  0x4e, 0xcf, 0x5e, 0x1f, 0xbf, 0x7d, 0x35, 0x48, 0x5e, 0x9e, 0x9e, 0xfd,

  0x79, 0x90, 0xbc, 0x39, 0xfd, 0xee, 0x28, 0x92, 0xe2, 0x4c, 0x08, 0xb7,

  0x01, 0xc5, 0xd8, 0x66, 0x7d, 0xce, 0xf0, 0x2e, 0x38, 0x64, 0xe1, 0x09,
  0x11, 0xca, 0xff, 0x37, 0xda, 0x2f, 0xb1, 0x5b, 0xdc, 0x35, 0xb3, 0x75,

  0x46, 0x86, 0x7e, 0x73, 0x74, 0xf8, 0x6a, 0x10, 0x00, 0x98, 0x53, 0x2b,
  0x15, 0xf3, 0x31, 0x5a, 0x9f, 0x5d, 0x34, 0x60, 0xaf, 0xd9, 0xfa, 0x80,
  0x86, 0xc0, 0x41, 0x2e, 0xbe, 0xb1, 0x86, 0x60, 0x51, 0xa5, 0x3f, 0xeb,
  0xcb, 0x9c, 0x10, 0x2c, 0xfe, 0xde, 0xd6, 0xd7, 0x5e, 0xd9, 0x05, 0x29,
  0x6b, 0xbe, 0x9a, 0x2d, 0x60, 0x4d, 0x48, 0xab, 0xd7, 0x22, 0x2c, 0x3f,
  0x4b, 0xb6, 0x07, 0x31, 0x68, 0xd0, 0x82, 0x0a, 0x00, 0x3f, 0x62, 0xd7,
  0x63, 0x2a, 0x3d, 0x0d, 0xd1, 0xb4, 0xc8, 0x98, 0x49, 0xa4, 0x55, 0x5f,
  0x38, 0x94, 0xd8, 0xf5, 0x1a, 0xb6, 0x00, 0xa9, 0x0b, 0x6c, 0x13, 0x6d,
  0x9e, 0x6e, 0x90, 0xed, 0xe9, 0xf9, 0x03, 0xff, 0x58, 0xc0, 0xa2, 0x22,
  0x89, 0xdb, 0xab, 0x0b, 0x43, 0x96, 0x19, 0xa7, 0x4c, 0xf1, 0x31, 0x59,
  0xb7, 0x40, 0x32, 0x3c, 0x56, 0xa7, 0xc4, 0x3a, 0x05, 0x4b, 0x6f, 0x8c,
  0x3a, 0x66, 0x18, 0x2b, 0x4a, 0x7d, 0x56, 0x6d, 0x36, 0xe1, 0x7b, 0x48,
  0x68, 0x9d, 0x11, 0x7d, 0x5f, 0x8f, 0x58, 0xd1, 0x8c, 0xc4, 0x83, 0xe3,
  0x6f, 0x0a, 0x40, 0x37, 0x02, 0x5f, 0x96, 0x11, 0xb0, 0x81, 0x70, 0xc1,
  0x93, 0x86, 0x95, 0x14, 0xe2, 0x11, 0x4d, 0x28, 0xf4, 0x36, 0x64, 0x5b,
  0xda, 0xcf, 0xf9, 0x55, 0xee, 0x29, 0xba, 0xa9, 0xcc, 0x21, 0x08, 0x51,
  0x61, 0x9d, 0xae, 0xc7, 0xa4, 0xef, 0xcb, 0x7b, 0xb4, 0x7b, 0xeb, 0x7c,
  0xec, 0xa4, 0x4d, 0xd4, 0xc9, 0x50, 0xb0, 0xbe, 0x51, 0xbc, 0x17, 0x6c,
  0xdd, 0xd6, 0xeb, 0x1e, 0xc6, 0xe8, 0x7b, 0x6d, 0x6d, 0x41, 0xbf, 0x65,
  0x51, 0x27, 0xc7, 0xe6, 0x3a, 0x44, 0xa0, 0x71, 0xb8, 0xe9, 0x2e, 0xa7,

  0x23, 0x40, 0xaf, 0xc2, 0xee, 0x9b, 0xb1, 0xc2, 0x0f, 0x53, 0x9f, 0xfb,

  0xe8, 0x97, 0xe9, 0x17, 0xf7, 0x7d, 0x3a, 0x38, 0xb3, 0x77, 0x47, 0xe7,
  0xef, 0x46, 0xc9, 0x96, 0x8f, 0xf9, 0xfa, 0x74, 0xb4, 0x1b, 0x06, 0x6d,
  0x8e, 0xdf, 0x1c, 0xc6, 0xd7, 0x4b, 0xbf, 0xe8, 0xfb, 0x2a, 0x78, 0x03,
  0x7d, 0x37, 0xcc, 0x23, 0xf6, 0x90, 0x9e, 0x76, 0x63, 0xdf, 0x1b, 0xbf,
  0xe9, 0xd9, 0x5f, 0xfa, 0xc5, 0x9a, 0x55, 0x7e, 0x73, 0x74, 0x12, 0xe9,
  0xed, 0xf3, 0xdd, 0xbb, 0xd7, 0x7f, 0x6e, 0xaf, 0xf2, 0xd1, 0xe3, 0xc8,
  0x57, 0x7f, 0x4d, 0x87, 0x7a, 0x56, 0x97, 0x73, 0xa3, 0xb0, 0xa0, 0x8a,
  0x03, 0x45, 0x1c, 0x07, 0x46, 0x04, 0x50, 0xae, 0xf9, 0x5f, 0x06, 0xf2,
  0x97, 0x9f, 0x46, 0xa3, 0xd1, 0x9f, 0x42, 0x54, 0x74, 0xf8, 0x68, 0xec,

  0x72, 0xe5, 0xd9, 0xae, 0x05, 0x8e, 0xaa, 0x19, 0x54, 0x09, 0x51, 0xd4,
  0x62, 0x99, 0xe6, 0x15, 0x7a, 0x02, 0x45, 0x05, 0x2e, 0x2d, 0xc9, 0x55,
  0x7a, 0x59, 0x6d, 0x4e, 0x10, 0xc1, 0xf8, 0xba, 0x6e, 0xd5, 0xdb, 0x52,
  0x57, 0xed, 0x64, 0x70, 0x3a, 0x0b, 0x1c, 0x21, 0xdc, 0x97, 0x85, 0x3e,
  0x5b, 0x91, 0x7f, 0x96, 0x6d, 0x1d, 0x27, 0x6b, 0x0b, 0x95, 0x1d, 0xb2,
  0xfa, 0x99, 0x9d, 0x7e, 0xd4, 0x7b, 0x21, 0x75, 0x92, 0x2f, 0x25, 0xa4,
  0x0e, 0x47, 0x72, 0x0a, 0xb1, 0x82, 0x36, 0xb3, 0x59, 0x33, 0xdd, 0xa1,
  0x75, 0xd6, 0x2d, 0x0d, 0xd0, 0xaa, 0x70, 0x81, 0x13, 0xc9, 0xcf, 0x93,
  0x44, 0x05, 0x2d, 0x27, 0xb7, 0x78, 0x25, 0x09, 0xae, 0x88, 0xd7, 0xd3,
  0xd4, 0x59, 0x3f, 0x08, 0xb9, 0x59, 0xab, 0x23, 0x92, 0x5f, 0x81, 0xa8,
  0xad, 0x2e, 0x02, 0x76, 0xe8, 0x95, 0xa9, 0x85, 0x6a, 0x3f, 0xb8, 0xb3,
  0x52, 0x12, 0x25, 0x52, 0x00, 0x7d, 0xfc, 0xa2, 0x25, 0x11, 0xd4, 0x43,
  0xe7, 0x1f, 0x7a, 0x4f, 0xed, 0x33, 0x26, 0xc0, 0x48, 0xe2, 0x6a, 0xc4,
  0xd3, 0x4a, 0x43, 0x79, 0xf8, 0x95, 0x4d, 0xd8, 0x40, 0x99, 0xf9, 0xe6,




  0xbf, 0x6f, 0x92, 0x22, 0x8c, 0xd7, 0xa3, 0xb5, 0xed, 0x4a, 0xb8, 0x64,

  0xd8, 0xd0, 0x53, 0x11, 0xbd, 0xc1, 0x6e, 0x8a, 0x25, 0x3e, 0xe5, 0xa5,
  0x3e, 0xf1, 0x60, 0x09, 0xa3, 0xe4, 0xfb, 0x7c, 0x3e, 0x9b, 0xa6, 0x15,
  0xd2, 0xc3, 0x42, 0xf1, 0x2a, 0x64, 0xc2, 0xf7, 0xa9, 0x2e, 0xf1, 0x55,
  0x77, 0x79, 0xb4, 0x99, 0x4c, 0x9c, 0xea, 0x23, 0x45, 0x3f, 0xf6, 0x30,
  0x28, 0xf8, 0xdd, 0x57, 0x74, 0xc6, 0xe4, 0xa3, 0x7b, 0x4c, 0xa2, 0xae,
  0xdd, 0xc1, 0xa3, 0x7d, 0xae, 0x1a, 0x87, 0x18, 0x3e, 0x0e, 0x63, 0x29,
  0xf9, 0xf2, 0xfa, 0x31, 0xdc, 0x57, 0x4f, 0x07, 0xfc, 0xaf, 0xa7, 0xae,
  0xfc, 0xc4, 0x33, 0xd2, 0xd8, 0x8e, 0x61, 0xad, 0xff, 0xf8, 0x4c, 0x8b,
  0x5c, 0xbb, 0x3c, 0x71, 0xec, 0x61, 0x92, 0xf3, 0x2c, 0xb5, 0x6c, 0xcd,
  0xbc, 0xa3, 0xb3, 0xa5, 0x1d, 0x31, 0xfc, 0xeb, 0x2f, 0x93, 0x8a, 0x60,

  0x47, 0x9a, 0xfa, 0xa7, 0x75, 0xf5, 0xc4, 0x46, 0xe7, 0x7f, 0x36, 0x8a,

  0xb4, 0xdf, 0x8e, 0x7e, 0xc8, 0xa6, 0xfb, 0xba, 0xaf, 0x11, 0x50, 0x14,
  0xc2, 0x76, 0x94, 0xf5, 0xe3, 0xca, 0x89, 0xa3, 0x1f, 0x7a, 0x7e, 0xcf,
  0x87, 0xf8, 0x48, 0x2d, 0xee, 0xdb, 0x8d, 0x52, 0x85, 0x9d, 0xbe, 0xf4,
  0xd2, 0x7e, 0x3c, 0xda, 0x7d, 0x78, 0x86, 0xb2, 0x33, 0xbe, 0x19, 0x7e,
  0x90, 0x7f, 0x02, 0x2a, 0x91, 0x14, 0xb1, 0xb2, 0x8f, 0xe6, 0xd6, 0x76,

  0xc6, 0x20, 0xd8, 0x9c, 0x16, 0x2f, 0x37, 0x1b, 0x80, 0x12, 0xa1, 0xca,
  0x18, 0x87, 0x75, 0xb0, 0x03, 0xc7, 0x45, 0xc7, 0xdd, 0x22, 0x3c, 0x91,
  0x82, 0xa2, 0xfc, 0x63, 0x82, 0x5f, 0x50, 0x2e, 0x77, 0x44, 0x45, 0x4c,
  0xef, 0x8e, 0x5e, 0xbf, 0x1f, 0x1f, 0xbd, 0x4a, 0xd2, 0x08, 0x04, 0x16,
  0xe2, 0xa5, 0x39, 0xdc, 0x72, 0xd2, 0x20, 0xa8, 0x29, 0x4b, 0xce, 0x08,
  0x92, 0xb9, 0x04, 0x3d, 0x07, 0x25, 0xb9, 0xc8, 0x58, 0xc6, 0x61, 0xdd,
  0x09, 0xeb, 0x71, 0xf2, 0xe2, 0xcf, 0xc0, 0x1d, 0xe1, 0x55, 0xcf, 0x32,
  0x6a, 0xce, 0xf5, 0x82, 0xb3, 0x60, 0x02, 0x50, 0x35, 0xd7, 0xc6, 0xab,
  0x9e, 0x67, 0xd9, 0x52, 0x8a, 0xfe, 0x5c, 0x27, 0x79, 0x73, 0x36, 0xea,
  0x09, 0x94, 0xe6, 0x1c, 0x18, 0x55, 0x03, 0x87, 0x69, 0x4f, 0x27, 0x29,
  0xc0, 0xab, 0x71, 0xc6, 0xba, 0xc3, 0x0c, 0x70, 0xdb, 0xc2, 0xbb, 0xb2,
  0x95, 0x37, 0x1d, 0x17, 0x7a, 0xd0, 0x55, 0x0f, 0x2e, 0x75, 0x02, 0xe8,
  0x31, 0x76, 0x11, 0x4f, 0x26, 0x9d, 0x5f, 0x96, 0x95, 0x19, 0x6f, 0x61,
  0xeb, 0x14, 0x19, 0xce, 0xa1, 0xde, 0xee, 0xf6, 0xe2, 0x0c, 0x6b, 0xbe,
  0xb9, 0xd4, 0x11, 0x21, 0xf0, 0x8c, 0x6b, 0xb8, 0x89, 0x2d, 0xf0, 0x3e,
  0xc1, 0x63, 0x42, 0xe1, 0x41, 0x96, 0x69, 0x63, 0xa9, 0xba, 0xc6, 0x7e,
  0xf0, 0x16, 0x06, 0xe6, 0x26, 0x75, 0x1d, 0xe9, 0xba, 0x73, 0x54, 0x75,

  0xd7, 0x70, 0x80, 0x3f, 0xf7, 0xdf, 0xb2, 0x9b, 0xdb, 0xde, 0x7e, 0xec,
  0x06, 0x2c, 0xd2, 0x5b, 0xb8, 0xa8, 0x7a, 0xc9, 0x81, 0x1d, 0xb6, 0xb4,

  0x1d, 0xf4, 0x58, 0xc5, 0x2c, 0x1f, 0x0c, 0xd6, 0x55, 0xbe, 0x70, 0x5e,
  0x92, 0x3d, 0x69, 0x71, 0x60, 0xc1, 0xee, 0x0e, 0x43, 0x8f, 0x48, 0xe3,





  0xb6, 0x2d, 0xcd, 0xe0, 0x27, 0x4c, 0x69, 0x99, 0x64, 0xc4, 0x6d, 0x71,
  0x6b, 0x29, 0x7c, 0x6f, 0x9b, 0x7e, 0x3c, 0x2f, 0x29, 0x4a, 0xc9, 0xc4,


  0x80, 0xef, 0x87, 0x90, 0x7d, 0x64, 0x24, 0x54, 0x44, 0x88, 0x6a, 0xd0,
  0xb2, 0x4f, 0x18, 0xad, 0x6c, 0x50, 0x2c, 0x46, 0x00, 0x66, 0xec, 0x01,
  0xbb, 0x70, 0xe3, 0xc8, 0x9b, 0x41, 0x0e, 0x2b, 0x8f, 0xc3, 0x8a, 0x02,


  0x86, 0x18, 0xb4, 0x91, 0x95, 0x65, 0xb3, 0x51, 0x9e, 0x89, 0x06, 0xd5,


  0x68, 0xa5, 0x26, 0x35, 0xf2, 0x11, 0x55, 0x6d, 0xa0, 0xed, 0x73, 0x50,


  0xda, 0x44, 0xcb, 0x81, 0x9d, 0x99, 0x16, 0xfe, 0x5c, 0x71, 0x00, 0x66,
  0x8c, 0xbc, 0x9c, 0xa1, 0x28, 0x8a, 0xdb, 0xf0, 0xf4, 0xc1, 0xc7, 0xc8,
  0x5c, 0x36, 0xc9, 0x53, 0x79, 0x9b, 0x2f, 0x56, 0x0b, 0xbc, 0x3f, 0xe0,
  0xf2, 0xc7, 0x05, 0x49, 0x2d, 0x3d, 0x54, 0x64, 0x17, 0x36, 0x4a, 0x51,
  0x31, 0x67, 0x06, 0xf1, 0x36, 0x10, 0x6d, 0xc3, 0x19, 0x3f, 0xf4, 0x16,
  0xb7, 0xd8, 0xc0, 0x41, 0xfd, 0x2f, 0xa7, 0xcf, 0xe4, 0x85, 0xd1, 0xe8,
  0xfe, 0x14, 0x4e, 0x22, 0x64, 0x1d, 0xa0, 0x4b, 0xca, 0x73, 0xce, 0x66,
  0x9e, 0x15, 0x29, 0xe4, 0x06, 0x10, 0x1b, 0x3e, 0xa3, 0x7e, 0x0e, 0x25,
  0xad, 0x26, 0x31, 0x5f, 0xa1, 0x78, 0x5a, 0xaa, 0x73, 0xfe, 0xb2, 0x58,
  0x12, 0xba, 0xbf, 0x64, 0x48, 0xbf, 0xd5, 0x32, 0x90, 0xf9, 0x96, 0x4f,
  0x58, 0x75, 0xd4, 0x7c, 0x7e, 0x57, 0x72, 0x62, 0xc4, 0xb6, 0x25, 0x7f,
  0xb9, 0xec, 0xb1, 0x75, 0x63, 0x49, 0xc3, 0x85, 0x78, 0x67, 0x4d, 0xf0,

  0xb2, 0x40, 0x88, 0xb0, 0x62, 0xca, 0x70, 0x48, 0x07, 0xb4, 0x29, 0x7c,
  0x7c, 0x03, 0x2d, 0xc3, 0x7b, 0x7c, 0x7b, 0x1b, 0x50, 0xb8, 0x67, 0x10,
  0x33, 0xde, 0x24, 0x5b, 0xcb, 0x8f, 0x77, 0x3f, 0xa7, 0x7f, 0x3e, 0xb9,
  0xed, 0x18, 0xcd, 0xa3, 0x28, 0x38, 0xa4, 0x96, 0xe5, 0xa6, 0x93, 0x92,
  0x43, 0x70, 0xbc, 0x61, 0xa9, 0xb7, 0x99, 0x1a, 0x45, 0x90, 0xce, 0xaf,
  0x37, 0x29, 0x6d, 0x6e, 0x59, 0x84, 0xa9, 0x0d, 0xc8, 0xc5, 0xf4, 0x7a,


  0xbd, 0x6a, 0xa0, 0x14, 0x4d, 0x0b, 0x8d, 0xf2, 0x4f, 0x9b, 0xa9, 0x7b,
  0xa5, 0x83, 0xce, 0xca, 0x15, 0x07, 0x32, 0xb3, 0x20, 0x32, 0x96, 0xf3,
  0xee, 0xd3, 0x95, 0x32, 0x22, 0x2b, 0x9f, 0xd3, 0x3b, 0x7c, 0xaf, 0xeb,
  0x64, 0xcf, 0x1c, 0x43, 0x5e, 0xac, 0x1a, 0x0b, 0xd6, 0x87, 0x0f, 0x2a,
  0x85, 0x46, 0x77, 0x9f, 0xf8, 0xbc, 0x15, 0x2c, 0xc2, 0x0b, 0x6a, 0x2f,
  0x40, 0xc8, 0xf7, 0x04, 0x3a, 0xb9, 0x38, 0x78, 0x7c, 0x29, 0x1b, 0x71,

  0x15, 0xd9, 0x28, 0xac, 0x74, 0x6e, 0xca, 0x6e, 0xcd, 0x66, 0x33, 0x88,
  0x52, 0x62, 0x85, 0x83, 0x13, 0x6a, 0x92, 0x21, 0xcc, 0x0d, 0x1b, 0x22,
  0x99, 0x3f, 0x2d, 0x26, 0x6e, 0x5b, 0x78, 0x81, 0xcf, 0x95, 0x8d, 0x5c,
  0x49, 0xdb, 0x7c, 0x8d, 0xb5, 0xb6, 0xf8, 0xd5, 0x96, 0x06, 0x6a, 0x8c,
  0xad, 0x67, 0xb4, 0xb6, 0xa7, 0x54, 0x0d, 0xec, 0x15, 0xa2, 0x99, 0x93,



  0xb0, 0x59, 0x9b, 0x34, 0xfc, 0x3b, 0x7c, 0xfa, 0x90, 0x42, 0xc6, 0x07,
  0x31, 0x8d, 0xcc, 0x2f, 0xe6, 0x26, 0xd6, 0x0b, 0x5e, 0x00, 0x7f, 0x7d,
  0xa6, 0x78, 0xdc, 0x84, 0xd4, 0xcd, 0x97, 0xd5, 0x3a, 0xe0, 0x39, 0x1d,
  0x20, 0xbb, 0x0d, 0x39, 0x73, 0x4c, 0xd5, 0xf9, 0x0d, 0xd9, 0x51, 0x9d,
  0x12, 0xfc, 0xe4, 0xaa, 0xb9, 0xfa, 0x7b, 0x3e, 0x8b, 0x22, 0x37, 0xd0,




  0x6d, 0x30, 0xbf, 0x36, 0xa7, 0x56, 0xb3, 0xfb, 0x4b, 0x91, 0x4d, 0x93,
  0x2d, 0x79, 0x6d, 0x7b, 0x90, 0xcc, 0x56, 0x70, 0xc8, 0x8d, 0x0f, 0xc7,

  0x27, 0xc9, 0xd9, 0xc9, 0xe1, 0xf1, 0x5b, 0xf3, 0xce, 0x30, 0x34, 0x52,

  0x2d, 0x60, 0xd9, 0xa0, 0xdb, 0x62, 0x0c, 0x1e, 0xcf, 0x36, 0xa6, 0x99,
  0xfd, 0x0e, 0x7f, 0x28, 0xc4, 0x34, 0x9a, 0x41, 0x94, 0xb6, 0x6a, 0x0f,
  0x86, 0x2b, 0xcd, 0x78, 0xea, 0x47, 0xd5, 0x71, 0x4a, 0x93, 0x66, 0xca,
  0x48, 0x2a, 0xaa, 0x17, 0x6b, 0xe4, 0xcb, 0x68, 0x24, 0xd7, 0x75, 0x26,
  0x53, 0x0b, 0x57, 0x63, 0x56, 0xee, 0xb2, 0x8b, 0x68, 0x86, 0x66, 0x46,
  0xdc, 0x31, 0xcb, 0x50, 0x85, 0x37, 0x2c, 0xc0, 0xdd, 0x6c, 0x96, 0x2b,
  0x32, 0x06, 0xfb, 0x32, 0xa1, 0xcc, 0xa4, 0xc8, 0xed, 0x48, 0xc9, 0xa1,
  0xb2, 0x4d, 0x2a, 0x66, 0xbd, 0xac, 0xfc, 0x14, 0x85, 0xc3, 0xd6, 0x4a,
  0xa3, 0xc5, 0x6e, 0xd6, 0x81, 0x84, 0x9e, 0x94, 0xb7, 0x03, 0x07, 0x93,
  0x80, 0xd2, 0x26, 0x9b, 0xdf, 0x70, 0x69, 0x98, 0x19, 0x60, 0xa8, 0x78,
  0x24, 0x33, 0xe8, 0xc0, 0x66, 0xba, 0xd7, 0x57, 0x69, 0x58, 0x30, 0xb0,
  0x30, 0xda, 0xad, 0x19, 0xd0, 0x77, 0x8d, 0xae, 0xa3, 0xb1, 0xa7, 0x9d,
  0x5e, 0xde, 0xa0, 0xb1, 0xbc, 0xab, 0xe3, 0x1c, 0x21, 0xcb, 0xd6, 0xe6,
  0xc8, 0x59, 0xee, 0x6c, 0x86, 0x00, 0x1d, 0xb5, 0xc9, 0x61, 0x2d, 0x00,
  0xfb, 0x5e, 0xe7, 0x7b, 0x9f, 0x08, 0x25, 0x96, 0x51, 0xbb, 0xfb, 0x1a,
  0x5f, 0xd6, 0x07, 0xfc, 0x75, 0x07, 0x46, 0x1d, 0x4e, 0x86, 0x91, 0xbd,
  0xa8, 0x9a, 0x89, 0x1b, 0x94, 0xc6, 0xe0, 0xa1, 0xf0, 0xc4, 0x8e, 0xa4,
  0xc6, 0xdd, 0x97, 0x61, 0xc2, 0xd0, 0xb3, 0xba, 0xf2, 0x31, 0x51, 0x3f,
  0x75, 0xf0, 0x1d, 0xc6, 0x60, 0xac, 0x6c, 0x7c, 0x56, 0xec, 0xac, 0x1a,
  0x4f, 0x53, 0xa2, 0x5c, 0x23, 0xea, 0x9c, 0x95, 0xe4, 0x34, 0x86, 0xcb,
  0x37, 0xa3, 0x06, 0x08, 0x61, 0xbb, 0x04, 0x4e, 0x41, 0xb8, 0xe0, 0x26,
  0xa9, 0x3a, 0x03, 0x6f, 0xcc, 0x80, 0x0f, 0xa3, 0x89, 0x06, 0xe8, 0xec,
  0x6f, 0xab, 0x3c, 0x43, 0x37, 0x5f, 0x23, 0x87, 0x93, 0x57, 0x9c, 0x31,
  0x29, 0xcd, 0x46, 0xb9, 0xab, 0x31, 0x3a, 0x1f, 0xd3, 0xa3, 0x76, 0x02,

  0x01, 0x1f, 0x36, 0x13, 0x22, 0xf9, 0xf4, 0x06, 0x93, 0x7e, 0x49, 0x93,
  0x5e, 0x18, 0x01, 0x08, 0xbf, 0x96, 0x87, 0xae, 0xa7, 0xc9, 0x34, 0x5a,
  0xe1, 0xc2, 0xa2, 0x2a, 0xad, 0x3f, 0x86, 0x35, 0x2c, 0x83, 0x56, 0xa7,
  0x36, 0xf8, 0x52, 0x84, 0x31, 0x35, 0xd4, 0xe6, 0xaf, 0x48, 0xe7, 0x3b,
  0x75, 0x33, 0x23, 0xbd, 0x60, 0x55, 0xcc, 0x69, 0x92, 0x34, 0x54, 0x4f,
  0xdf, 0xd0, 0x08, 0x0e, 0x15, 0x20, 0xd0, 0x3b, 0x07, 0x84, 0x98, 0x8e,
  0x65, 0x83, 0x52, 0xcb, 0xe7, 0x1b, 0x76, 0xf4, 0x13, 0x91, 0xab, 0x21,
  0x28, 0x96, 0xbf, 0x55, 0xc4, 0x76, 0x78, 0xc5, 0xd8, 0xc8, 0xd6, 0xb9,
  0xad, 0x83, 0x08, 0xb9, 0xa6, 0x09, 0x19, 0x42, 0x9b, 0x94, 0xb5, 0x82,
  0xa7, 0x9b, 0x45, 0x9a, 0xd7, 0x5b, 0xf7, 0x09, 0x10, 0x74, 0x3f, 0x13,
  0xe5, 0x87, 0xfb, 0xa5, 0x7b, 0x18, 0x3f, 0xeb, 0xda, 0xa4, 0x87, 0x4d,

  0xe6, 0x7f, 0x36, 0xc0, 0x4f, 0x0c, 0xc1, 0x8c, 0x5c, 0x2c, 0x36, 0x27,
  0x58, 0x12, 0xfd, 0x5a, 0x40, 0x37, 0x70, 0x6a, 0x50, 0xe2, 0x45, 0xa4,
  0x45, 0xa7, 0x21, 0xa7, 0x95, 0x60, 0x83, 0x4c, 0xe7, 0x46, 0x07, 0x8a,
  0x38, 0x62, 0xc6, 0x02, 0x0c, 0x47, 0x30, 0x78, 0x83, 0xae, 0xc8, 0xae,
  0x57, 0xa4, 0x9a, 0xcf, 0x57, 0xf4, 0x6d, 0x46, 0x90, 0xb3, 0x08, 0x66,
  0x0a, 0x69, 0x10, 0x45, 0xfd, 0xb3, 0x10, 0x64, 0x74, 0x47, 0x3d, 0x00,
  0x44, 0xc5, 0xf4, 0xb5, 0xd8, 0x80, 0x5d, 0x8c, 0xa8, 0x51, 0xcf, 0xec,
  0xc8, 0x5b, 0xc2, 0xc3, 0x64, 0x02, 0xb0, 0xea, 0x39, 0xa6, 0xa8, 0xcc,
  0x4b, 0xa7, 0x23, 0x08, 0x81, 0x82, 0xa9, 0x13, 0x45, 0x75, 0x43, 0xce,
  0x04, 0x2b, 0x5f, 0xfe, 0xdc, 0x54, 0x43, 0x51, 0x00, 0x01, 0x54, 0x5e,
  0x78, 0x38, 0x80, 0x86, 0x00, 0x8a, 0x20, 0x1e, 0x48, 0xc8, 0x5c, 0xdc,





  0x58, 0x10, 0x3c, 0x87, 0x15, 0x6a, 0x29, 0x22, 0xab, 0xf5, 0xee, 0xb5,
  0xa6, 0xc4, 0x10, 0x4d, 0x45, 0x2c, 0x83, 0x9f, 0x5f, 0xda, 0x52, 0x90,
  0x1e, 0xbc, 0xb6, 0xdd, 0x8a, 0x9b, 0x95, 0x2d, 0x18, 0xea, 0xdf, 0x54,
  0xe7, 0x7a, 0xd2, 0x6e, 0xa8, 0x27, 0x90, 0x8e, 0xbf, 0xe8, 0x42, 0xa5,
  0x0f, 0xbb, 0x51, 0x3d, 0xd5, 0x36, 0xff, 0x6f, 0xde, 0xa8, 0xf4, 0x61,
  0x57, 0x2a, 0x6d, 0xdd, 0x29, 0x5a, 0x66, 0xc8, 0x96, 0x6e, 0x7b, 0x67,
  0xfc, 0x2b, 0xde, 0x32, 0x9b, 0x98, 0xf4, 0xd0, 0x3b, 0xa6, 0x34, 0xf1,

  0xff, 0xf6, 0x2d, 0xfb, 0xbc, 0xa3, 0x05, 0x02, 0x1f, 0x75, 0x4d, 0xdf,
  0x4a, 0x3f, 0x77, 0x8b, 0x14, 0x64, 0xd2, 0xb5, 0x76, 0x2c, 0x94, 0x61,
  0xbc, 0x79, 0x25, 0x43, 0x6f, 0x45, 0x43, 0x97, 0xa5, 0x1e, 0xed, 0x13,
  0x7b, 0x1c, 0x8a, 0x3b, 0xb0, 0x76, 0xe4, 0xc0, 0x79, 0xab, 0x08, 0xd1,
  0x0e, 0x37, 0x65, 0x24, 0xea, 0x83, 0xae, 0xe9, 0xd2, 0xc8, 0xf5, 0x65,
  0x0e, 0xed, 0xc0, 0x28, 0x2e, 0x64, 0xde, 0x7e, 0x3d, 0x1e, 0x0f, 0x0f,
  0xcf, 0x8e, 0x93, 0x7b, 0xec, 0x2e, 0xe0, 0xc2, 0xb8, 0x39, 0xc6, 0xec,
  0xe5, 0xfe, 0x34, 0xac, 0xf6, 0xd7, 0x8d, 0x9e, 0xdb, 0xdd, 0xd6, 0xc3,
  0x3a, 0x69, 0xa5, 0x19, 0xeb, 0xa4, 0x6c, 0xcb, 0x0d, 0xd2, 0xb6, 0x15,
  0x75, 0x19, 0xa9, 0xfe, 0xe4, 0xac, 0x21, 0xae, 0x85, 0x07, 0x82, 0x9c,
  0x6c, 0x20, 0xec, 0x10, 0x3a, 0xce, 0xde, 0xf3, 0xa7, 0x7b, 0xe6, 0x56,
  0xdc, 0x31, 0xea, 0xa3, 0xbc, 0xfc, 0x78, 0xf4, 0x68, 0xe7, 0xf1, 0xe8,
  0x31, 0xf1, 0x34, 0x09, 0x96, 0xc2, 0xd9, 0x21, 0xc3, 0x1b, 0x6e, 0x17,
  0xc9, 0x4a, 0x62, 0x21, 0xf6, 0xf6, 0xe8, 0x65, 0xc2, 0xa9, 0xab, 0x80,

  0x01, 0xec, 0x18, 0x5d, 0x9c, 0xe1, 0x86, 0x14, 0x16, 0x39, 0x42, 0x26,
  0xd6, 0xc0, 0x49, 0x11, 0x6c, 0x87, 0x9a, 0x12, 0xb0, 0xb8, 0x0a, 0x3b,
  0x11, 0x62, 0x77, 0x6c, 0x55, 0xc8, 0xbe, 0xd0, 0x1c, 0xc3, 0x0a, 0x34,
  0x6f, 0x4b, 0xbc, 0x0d, 0xbb, 0x27, 0xbd, 0xfc, 0x71, 0xff, 0xf9, 0xa8,
  0xf9, 0xd2, 0x63, 0x00, 0x39, 0xcf, 0x7d, 0x60, 0xe7, 0x08, 0x43, 0x54,
  0xa3, 0x94, 0x5c, 0x90, 0xd3, 0x85, 0x35, 0x49, 0x2e, 0xfe, 0x36, 0x2b,
  0x46, 0x3f, 0xd7, 0x9e, 0x8a, 0x28, 0xc4, 0x9e, 0xd9, 0xa4, 0x53, 0x17,
  0x46, 0x26, 0xb6, 0x52, 0xdf, 0x82, 0xc4, 0x44, 0xea, 0x7a, 0xc8, 0x98,

  0x04, 0xe8, 0x32, 0xb3, 0x05, 0xe5, 0x0d, 0x65, 0xc7, 0x8f, 0xfc, 0x4c,
  0x47, 0x8f, 0x18, 0xe4, 0xf4, 0x31, 0x1e, 0xab, 0xca, 0xd2, 0xb9, 0xcc,
  0xca, 0xfb, 0x4e, 0xf8, 0x4b, 0xda, 0x3d, 0x30, 0xdb, 0x3a, 0x4c, 0xcb,
  0x94, 0xa0, 0x82, 0x37, 0x05, 0x9b, 0xa6, 0xe5, 0x3a, 0xb9, 0x2c, 0x2b,
  0x23, 0x4e, 0xf2, 0x65, 0x3a, 0x4f, 0x1e, 0x50, 0x5b, 0xd0, 0x7f, 0xf8,
  0xf7, 0xf4, 0xe9, 0xc5, 0xec, 0xf5, 0x76, 0xae, 0x61, 0x74, 0x92, 0x7a,
  0xd4, 0x95, 0xaa, 0x11, 0x2e, 0xd7, 0x33, 0x18, 0x21, 0x27, 0x38, 0x6e,
  0xa6, 0x14, 0xd7, 0x4d, 0xa0, 0x31, 0x96, 0xa4, 0xf5, 0xbc, 0x92, 0x3b,
  0xce, 0x85, 0xd2, 0x74, 0x58, 0xa9, 0x79, 0xdd, 0xee, 0x32, 0xc2, 0x18,
  0x73, 0x6f, 0x4a, 0x61, 0x8a, 0xf7, 0x72, 0xde, 0x5f, 0x83, 0x19, 0x92,
  0x0a, 0xc7, 0x7e, 0x86, 0x9f, 0xaf, 0xcc, 0xc9, 0x16, 0x26, 0x5b, 0x48,
  0x03, 0x91, 0x1a, 0x61, 0xc5, 0x09, 0xd5, 0xc4, 0x82, 0x88, 0xb3, 0x08,

  0x51, 0x63, 0x10, 0x08, 0x6d, 0xc8, 0x3d, 0xa6, 0x55, 0x44, 0xf1, 0x0b,
  0xf8, 0xec, 0xff, 0x13, 0x6a, 0xe0, 0x93, 0xc4, 0x9e, 0xd5, 0x43, 0xd4,
  0x41, 0x46, 0x56, 0xe7, 0x7e, 0xe3, 0x01, 0xf4, 0x9d, 0x33, 0xb9, 0xfe,
  0x7f, 0x6d, 0xf0, 0xff, 0x24, 0x6d, 0xf0, 0x5f, 0xb9, 0xa5, 0x43, 0xc9,
  0x6b, 0xe6, 0x6b, 0x69, 0x33, 0xab, 0xa4, 0x0e, 0x25, 0x5a, 0x70, 0x30,
  0xbf, 0x1b, 0x25, 0x3d, 0xf0, 0xc6, 0xf7, 0x5c, 0xd1, 0x90, 0x14, 0xfe,
  0xdf, 0xb8, 0xa2, 0x0f, 0xba, 0x99, 0xff, 0xbf, 0xef, 0xe3, 0x7f, 0xb7,
  0x7b, 0x18, 0x21, 0x48, 0x1d, 0x6c, 0xcb, 0x90, 0xd9, 0x0d, 0x65, 0xed,
  0x71, 0xb3, 0x33, 0x58, 0xda, 0xdb, 0x4e, 0xf5, 0xa1, 0x72, 0x3c, 0xde,
  0xba, 0xe3, 0xb3, 0xef, 0x9e, 0x02, 0x85, 0x67, 0xdc, 0x4d, 0x66, 0xa9,
  0x92, 0x93, 0x57, 0x87, 0x67, 0x3f, 0xe3, 0xb6, 0xff, 0x19, 0x6e, 0xd6,
  0x65, 0x96, 0xcd, 0x86, 0x1c, 0x37, 0x7c, 0x81, 0x7f, 0x44, 0x03, 0xee,
  0x8a, 0xae, 0x01, 0xb2, 0xa5, 0x70, 0x62, 0x98, 0xc7, 0x80, 0x97, 0x8d,
  0x9a, 0x52, 0x08, 0xe6, 0xcd, 0x12, 0x6d, 0x97, 0x03, 0x1f, 0x4b, 0x59,
  0xcc, 0xb6, 0x45, 0x05, 0xe4, 0x6f, 0x83, 0x54, 0x24, 0xff, 0x84, 0xae,

  0xf7, 0x25, 0xe1, 0xe2, 0x59, 0xe8, 0x50, 0xef, 0x19, 0xce, 0xc4, 0x8b,
  0x26, 0x43, 0xdd, 0xb9, 0xa5, 0x70, 0xc8, 0x93, 0xd1, 0xeb, 0x1e, 0xed,
  0x92, 0xff, 0x1d, 0x1c, 0x24, 0x6b, 0x3e, 0x21, 0xda, 0x46, 0xf7, 0xf3,

  0x7d, 0xe9, 0x34, 0x6b, 0xb7, 0xd2, 0x3f, 0x89, 0xd6, 0x0e, 0x52, 0x84,
  0x9c, 0x43, 0x87, 0x41, 0x97, 0x72, 0xef, 0x9b, 0x9c, 0x41, 0xc2, 0xf3,
  0xb5, 0x9f, 0x68, 0xef, 0xe5, 0xf1, 0x45, 0x7b, 0x3b, 0x23, 0xd9, 0xbb,
  0x83, 0x56, 0xb6, 0x92, 0x3f, 0x25, 0x1b, 0x27, 0xdf, 0x4b, 0xd4, 0xb5,
  0xcf, 0x98, 0x12, 0x02, 0x65, 0xf1, 0xe7, 0x30, 0x9b, 0xd2, 0x7b, 0xfd,
  0xbe, 0x4e, 0xc4, 0x65, 0xd1, 0x54, 0x68, 0x31, 0xa2, 0x29, 0x04, 0xb5,
  0x82, 0xf6, 0xaf, 0xbc, 0x6e, 0xce, 0x29, 0x0a, 0x05, 0xb0, 0x6b, 0x61,
  0xbb, 0x4d, 0xbe, 0xdf, 0x59, 0x33, 0x1d, 0xd9, 0x93, 0x05, 0x80, 0xa1,
  0xf9, 0xd5, 0xd4, 0xa8, 0xb8, 0xda, 0x91, 0x7a, 0x80, 0x16, 0x6e, 0xda,
  0x9c, 0xad, 0xc7, 0x57, 0xa1, 0x99, 0x30, 0x9f, 0xbe, 0x3d, 0xdb, 0xfa,
  0xfe, 0x87, 0x21, 0x84, 0x84, 0xba, 0x63, 0x2c, 0x57, 0x48, 0x0d, 0x3b,
  0x03, 0xf8, 0x02, 0x9a, 0x24, 0x53, 0x24, 0xf8, 0x62, 0x9e, 0xde, 0x48,
  0x3d, 0x5c, 0x97, 0xdf, 0x8f, 0x4f, 0x1e, 0x61, 0x5b, 0xcf, 0x4f, 0xc6,
  0x3e, 0x7c, 0x7e, 0x8d, 0x60, 0x3c, 0xea, 0x1f, 0xbf, 0x3a, 0x3a, 0x1c,
  0x9f, 0x8f, 0x82, 0x25, 0x72, 0x1c, 0x38, 0x4a, 0x30, 0xcc, 0x84, 0xc7,
  0x27, 0x66, 0xad, 0x77, 0x04, 0x9f, 0x29, 0x75, 0x95, 0x34, 0x39, 0x9e,
  0x9b, 0x8e, 0x4e, 0x76, 0x6e, 0xca, 0xd9, 0xfd, 0x4d, 0x56, 0x85, 0x29,
  0x49, 0x66, 0xef, 0x26, 0xf9, 0x9c, 0x56, 0x60, 0xe6, 0x65, 0xac, 0xa1,


  0x85, 0x14, 0x4d, 0xa0, 0x4a, 0xbf, 0x9c, 0x53, 0x26, 0x01, 0x7d, 0xa6,



  0xed, 0x87, 0xa0, 0x84, 0x64, 0x81, 0x2e, 0xe8, 0x2f, 0x44, 0x36, 0x7a,
  0x47, 0x49, 0xed, 0x9f, 0xec, 0x54, 0x75, 0xaf, 0x38, 0xee, 0xec, 0x75,
  0xec, 0x23, 0x7c, 0x23, 0x02, 0x71, 0x09, 0xd3, 0xbd, 0xd3, 0xfa, 0xa3,
  0x46, 0x76, 0xd1, 0x57, 0x94, 0xa2, 0xc6, 0x6b, 0x73, 0x4e, 0xbb, 0x96,
  0x90, 0x39, 0x68, 0xd4, 0xc4, 0x53, 0x75, 0x54, 0x50, 0x1c, 0x41, 0x0e,
  0x80, 0x22, 0x9b, 0x6f, 0xaf, 0x39, 0x71, 0xcd, 0x1c, 0xf1, 0xfb, 0x9e,
  0xd2, 0x68, 0xf1, 0x5e, 0x6b, 0xc9, 0xf4, 0x2a, 0x33, 0x42, 0x64, 0xe4,
  0x21, 0x3b, 0x3c, 0x78, 0x43, 0x3e, 0x0b, 0xe0, 0xff, 0x22, 0xdb, 0xf3,
  0xb3, 0x37, 0xe4, 0xf1, 0xe3, 0x70, 0x43, 0xaa, 0xec, 0x6f, 0xb3, 0x18,
  0x16, 0x3a, 0x6a, 0x50, 0x50, 0xfe, 0xc2, 0x65, 0x23, 0xef, 0x18, 0xd0,
  0x9d, 0xa6, 0xba, 0x43, 0x2d, 0x8d, 0x34, 0x8f, 0xde, 0x81, 0xe9, 0x91,
  0x85, 0x4d, 0x01, 0xc8, 0xb0, 0x1d, 0xbb, 0x82, 0x6e, 0x7a, 0xed, 0x37,
  0xf3, 0x38, 0x1c, 0x88, 0x64, 0x37, 0xcb, 0x47, 0xd6, 0x6a, 0x90, 0x94,

  0xcb, 0x82, 0xc6, 0x38, 0x54, 0x62, 0x6a, 0x2f, 0xcf, 0x70, 0x78, 0xd1,
  0x2c, 0xed, 0xc2, 0xd6, 0x52, 0xc7, 0x6e, 0xb0, 0x19, 0x3d, 0x4b, 0x3f,
  0xaf, 0xee, 0xd4, 0xfd, 0xba, 0x76, 0xf5, 0x61, 0xb6, 0x25, 0xf5, 0xdc,



  0xe1, 0x44, 0x6a, 0xa0, 0x96, 0x49, 0x13, 0xf5, 0xde, 0x6d, 0x70, 0x25,

  0xab, 0xb2, 0x11, 0x21, 0xf3, 0xc0, 0xb6, 0xb4, 0x22, 0xa3, 0x76, 0xc1,
  0xc2, 0xc1, 0x35, 0x3a, 0x2a, 0x5b, 0xc0, 0xa5, 0x95, 0x28, 0x68, 0x08,
  0x6e, 0x7b, 0xd1, 0x18, 0x6b, 0xfe, 0x3a, 0x9b, 0xa3, 0xc0, 0x3b, 0x2b,
  0xa6, 0xd5, 0xdd, 0xd2, 0x07, 0xef, 0x9f, 0xfd, 0x2b, 0xfb, 0xaf, 0x95,
  0x41, 0x08, 0x1d, 0x1b, 0xc5, 0xc7, 0x30, 0xbb, 0xed, 0x50, 0xff, 0xa2,
  0x3a, 0x5d, 0x19, 0x8f, 0xf1, 0x48, 0x49, 0x0a, 0x37, 0x7e, 0xad, 0x00,

  0xd9, 0x32, 0xca, 0xb9, 0x19, 0x42, 0x53, 0xa0, 0x16, 0x2e, 0x42, 0x07,
  0x32, 0x6d, 0xae, 0xad, 0x04, 0x78, 0xf0, 0xc9, 0xef, 0x0f, 0x78, 0xbb,
  0xae, 0xf7, 0x03, 0x9e, 0x30, 0x3e, 0xd9, 0x4e, 0x5e, 0x93, 0x8f, 0xa6,
  0xed, 0x84, 0xa7, 0xeb, 0xaa, 0xed, 0xc9, 0xf6, 0xd9, 0x11, 0xe5, 0x77,
  0x6b, 0x56, 0x08, 0xfc, 0x20, 0x85, 0x0a, 0x95, 0xe1, 0x78, 0xdb, 0xd5,
  0xe8, 0x8e, 0x0d, 0x6b, 0xe5, 0xc4, 0x46, 0xf5, 0x2c, 0x71, 0x4f, 0x55,
  0x2d, 0x7d, 0x36, 0x4f, 0x5f, 0xef, 0xf7, 0x01, 0xd1, 0x8f, 0xe4, 0xd7,
  0x28, 0x62, 0x9f, 0x65, 0xc0, 0x72, 0x57, 0x2c, 0x4d, 0xaa, 0xe0, 0x62,
  0x7a, 0x43, 0x56, 0x2f, 0xb9, 0xa7, 0x9f, 0xee, 0x3d, 0x7b, 0xba, 0xbd,
  0xae, 0x4b, 0x39, 0xf5, 0xee, 0xa1, 0xe2, 0x5c, 0x26, 0x21, 0xfa, 0xd7,
  0xfe, 0xc8, 0xdf, 0xa0, 0xc4, 0x75, 0x36, 0x91, 0x22, 0xeb, 0x50, 0xc2,

  0x19, 0x71, 0x43, 0x24, 0x81, 0x8d, 0xd0, 0x76, 0x0f, 0x20, 0x16, 0x5e,
  0x17, 0xd9, 0x32, 0x72, 0xcb, 0x41, 0xca, 0x5d, 0xa3, 0x30, 0x40, 0xa2,

  0x87, 0x91, 0x38, 0x7c, 0xa4, 0x73, 0x60, 0xe9, 0xe9, 0xb7, 0xe7, 0xe4,
  0xc9, 0xe2, 0xef, 0xa3, 0xf6, 0xbf, 0xfc, 0x60, 0xa6, 0x1b, 0xe0, 0x97,
  0x9c, 0xf2, 0xa3, 0xdf, 0xe0, 0x94, 0x1f, 0xad, 0x3f, 0xe5, 0x47, 0x0f,
  0x3d, 0xe5, 0x67, 0x4f, 0x9e, 0x7e, 0xfe, 0x0b, 0x4e, 0xd9, 0xdb, 0xe1,
  0xff, 0x65, 0xa7, 0xec, 0x51, 0xda, 0x2f, 0x3b, 0x65, 0x49, 0x0a, 0xe9,
  0x16, 0x64, 0x4a, 0xf2, 0x0b, 0xd2, 0x5a, 0x09, 0x4a, 0x83, 0xcb, 0x58,
  0xf8, 0xd9, 0xb0, 0xce, 0x4a, 0x9a, 0x4f, 0x72, 0xd3, 0x3b, 0xd2, 0xc3,
  0x22, 0x46, 0xb6, 0x83, 0x16, 0x81, 0x86, 0xbb, 0x9c, 0x53, 0xef, 0xb4,
  0xcd, 0xe1, 0xa6, 0xba, 0x47, 0xb4, 0x7c, 0x52, 0x71, 0xb1, 0xf8, 0x73,
  0xe6, 0xa8, 0x7f, 0x43, 0x54, 0xb5, 0x30, 0x67, 0xc6, 0xcb, 0x7a, 0x6a,
  0x6f, 0xda, 0xdd, 0xdc, 0x98, 0x09, 0x9c, 0x83, 0x14, 0xcd, 0x7e, 0x13,
  0xe4, 0x77, 0x8b, 0xec, 0xa4, 0x8e, 0x9a, 0x89, 0x51, 0x0a, 0x8d, 0x14,
  0x28, 0x28, 0xa9, 0xe7, 0x6e, 0x9e, 0x49, 0x01, 0x31, 0x2d, 0x9a, 0x28,
  0x83, 0x4c, 0xf9, 0xae, 0x4b, 0x58, 0x7a, 0x05, 0x75, 0x32, 0x96, 0x46,

  0xe2, 0x2e, 0x37, 0xea, 0x59, 0x6b, 0x32, 0x08, 0x02, 0xd4, 0xe6, 0x96,
  0x4c, 0xaf, 0xb8, 0xbf, 0x48, 0x04, 0xec, 0x67, 0x5d, 0x82, 0x5f, 0x37,

  0xe1, 0xae, 0xa7, 0x37, 0x51, 0xb4, 0x03, 0x15, 0xf5, 0xa9, 0x6a, 0x37,
  0xaa, 0xe2, 0x1c, 0x71, 0x46, 0xd4, 0x83, 0xc2, 0xdf, 0xed, 0xfd, 0x24,
  0x8d, 0xa3, 0x82, 0x42, 0x64, 0x92, 0xe9, 0xb2, 0xa0, 0x76, 0xd3, 0x25,
  0x97, 0x4d, 0xa8, 0x3b, 0x73, 0x7f, 0xcd, 0x0c, 0x25, 0x9d, 0x4b, 0xcf,
  0x6d, 0x15, 0x92, 0x6c, 0x82, 0xbf, 0xa2, 0xd3, 0x9d, 0xad, 0x16, 0x4b,
  0x05, 0x43, 0xa4, 0xea, 0xa6, 0x1c, 0x65, 0x74, 0x02, 0x88, 0x80, 0xa4,



  0xeb, 0x88, 0x1b, 0xcd, 0x7a, 0x99, 0x24, 0xb9, 0x8d, 0x3d, 0x56, 0x7a,

  0x56, 0x02, 0xec, 0xc1, 0x0b, 0x40, 0xe2, 0x1a, 0x4a, 0x89, 0x08, 0x5f,
  0x2d, 0xbb, 0x08, 0x52, 0x0f, 0xd0, 0xa8, 0x16, 0xd1, 0xc9, 0x6c, 0xb2,

  0xba, 0x54, 0x4c, 0x01, 0xdb, 0xe0, 0xae, 0x4d, 0x95, 0xa8, 0xbf, 0x22,
  0x94, 0xa1, 0x6c, 0xc0, 0xc9, 0xf0, 0x77, 0x21, 0xb8, 0x4a, 0x43, 0xdd,

  0x1d, 0xa7, 0xeb, 0x92, 0xc3, 0x82, 0x85, 0x83, 0xd8, 0x5b, 0x2b, 0xc7,
  0x4f, 0x5a, 0x8d, 0xc7, 0x22, 0xad, 0xb3, 0x7c, 0x52, 0x69, 0xa6, 0xcb,
  0xe1, 0x45, 0x4a, 0xd0, 0xa4, 0x41, 0x61, 0xb9, 0x24, 0x84, 0xca, 0x15,
  0x38, 0x7f, 0x79, 0x96, 0xbc, 0x4e, 0xa5, 0xdd, 0x50, 0xb2, 0x65, 0x38,
  0xf0, 0xb3, 0xc7, 0x7b, 0x8f, 0xb6, 0xd7, 0xea, 0xe1, 0x6d, 0xb8, 0x2d,
  0x7c, 0xab, 0x28, 0x63, 0x09, 0xeb, 0xe7, 0x2b, 0x63, 0x36, 0x2b, 0x8e,
  0x8f, 0xf9, 0xd2, 0x87, 0xb7, 0xa7, 0xaf, 0x8e, 0x4e, 0x0e, 0xff, 0x6c,
  0x51, 0x23, 0x68, 0x13, 0xb4, 0xf2, 0xf8, 0x83, 0x31, 0x5f, 0xef, 0x3e,
  0xd4, 0x99, 0x99, 0x73, 0xb3, 0xf5, 0x68, 0x9b, 0x2a, 0xf7, 0x82, 0xa6,

  0x90, 0x97, 0x59, 0x1b, 0x6b, 0x83, 0xeb, 0x07, 0xd6, 0x00, 0x46, 0x59,
  0x07, 0xe5, 0xee, 0x68, 0x5f, 0xba, 0x8e, 0x48, 0xdb, 0x04, 0xc7, 0xb3,
  0xbc, 0xc6, 0x29, 0xa9, 0xc0, 0xca, 0x71, 0x6d, 0x6e, 0x58, 0xa1, 0x45,
  0xc0, 0x1e, 0xf9, 0x34, 0x27, 0x6b, 0x45, 0xae, 0x75, 0x4e, 0x61, 0xf8,
  0x8b, 0x36, 0x2c, 0x25, 0x8a, 0x77, 0xe9, 0x17, 0xeb, 0xc3, 0xca, 0x6d,
  0xde, 0xdf, 0x40, 0x58, 0x64, 0xf3, 0x22, 0x6b, 0x86, 0x32, 0xb1, 0x17,
  0xe6, 0xcf, 0x2f, 0xae, 0xd3, 0x79, 0x50, 0x12, 0x4e, 0x3d, 0x15, 0x95,
  0x32, 0x2d, 0x2b, 0xa2, 0x37, 0xbd, 0x8e, 0x2b, 0x63, 0xdb, 0x7a, 0x44,
  0x9f, 0x34, 0x57, 0x25, 0xe8, 0x30, 0x72, 0x7e, 0xfe, 0xe7, 0xb3, 0xa3,
  0x2f, 0x5e, 0x10, 0x23, 0xfb, 0x13, 0xd5, 0x9e, 0xd4, 0x2d, 0xbe, 0x96,
  0x50, 0x0f, 0xf7, 0x60, 0x0d, 0x3f, 0xbc, 0x3a, 0x1e, 0x9f, 0x9d, 0x9c,

  0xbe, 0xfc, 0xe2, 0xc5, 0x0f, 0x64, 0x53, 0x1a, 0xe1, 0x71, 0xe7, 0xbd,
  0x6b, 0x7f, 0x66, 0xbb, 0x28, 0x84, 0x80, 0x22, 0x47, 0xdf, 0x7f, 0x38,
  0x7a, 0xfb, 0xdd, 0x17, 0x2f, 0xae, 0xd3, 0x6a, 0x40, 0xeb, 0xe3, 0xb7,
  0x7b, 0x1a, 0x96, 0xb6, 0x48, 0x8d, 0xd4, 0xf3, 0xc9, 0xfc, 0x63, 0x9d,
  0xff, 0x3d, 0x4b, 0xcc, 0xeb, 0xf3, 0x55, 0x08, 0x63, 0x7e, 0xce, 0x38,
  0x0c, 0x66, 0x33, 0xe8, 0x6f, 0xc9, 0x57, 0x27, 0xdf, 0x12, 0x54, 0xae,
  0xf5, 0x93, 0x2e, 0xb8, 0xef, 0x52, 0xf2, 0xa7, 0x27, 0x7b, 0xfb, 0xdb,
  0xae, 0xdb, 0x27, 0xa0, 0xb6, 0xcd, 0x8c, 0x3f, 0x06, 0x55, 0x53, 0x7f,

  0x97, 0xfa, 0x2f, 0x57, 0xcb, 0xd0, 0x38, 0x8b, 0x8a, 0xcb, 0x0f, 0xc4,
  0xe5, 0x84, 0xe4, 0x7c, 0xe4, 0xbf, 0x52, 0xb3, 0xd4, 0x0a, 0x69, 0xeb,
  0x81, 0xc7, 0xed, 0xfc, 0xb5, 0x87, 0x71, 0xf3, 0x95, 0x23, 0x3d, 0x33,
  0x1d, 0xf1, 0xda, 0xad, 0x95, 0x8f, 0x9f, 0x30, 0x96, 0xd3, 0x35, 0x29,
  0xb1, 0xd9, 0x46, 0xa4, 0x09, 0xfd, 0xc4, 0xf7, 0xd9, 0xcb, 0xf1, 0x41,
  0x05, 0x58, 0xc9, 0xd8, 0x8c, 0x58, 0xa5, 0x12, 0x9e, 0x42, 0x0a, 0xdc,


  0xe3, 0xc3, 0xcb, 0x17, 0x54, 0x7b, 0x9c, 0xd5, 0x89, 0xfa, 0x77, 0x3c,
  0xef, 0xcd, 0x3c, 0xbb, 0x4c, 0xa7, 0x77, 0x16, 0x61, 0x1a, 0x07, 0x32,
  0xeb, 0xde, 0x4e, 0x78, 0xf8, 0xa6, 0x64, 0xcc, 0x19, 0x11, 0x7c, 0x09,
  0xf6, 0xcc, 0x50, 0x2a, 0xe6, 0xba, 0x5a, 0xa7, 0x0f, 0x4f, 0xcd, 0x82,
  0xc5, 0xa8, 0xb8, 0xa4, 0x4d, 0xed, 0x4a, 0xe7, 0xf6, 0x16, 0x77, 0xa8,
  0x8f, 0xc8, 0x06, 0xed, 0x88, 0xd7, 0xee, 0xe9, 0xe3, 0xb6, 0xc7, 0xfc,
  0xef, 0xb8, 0xe4, 0x84, 0xc2, 0x05, 0xa7, 0xec, 0x0b, 0xfa, 0x6b, 0x1c,
  0x87, 0x1f, 0xed, 0xb9, 0xe0, 0xb6, 0xe0, 0x76, 0xd3, 0xdc, 0xf4, 0x80,
  0x96, 0x6d, 0xeb, 0x0b, 0xa4, 0xad, 0x0d, 0xc1, 0xb9, 0x37, 0xce, 0x9d,
  0x1e, 0xc7, 0xb8, 0xb3, 0x4e, 0x6d, 0x43, 0x9e, 0x2c, 0xac, 0x88, 0x32,
  0x7a, 0xc6, 0xb3, 0x05, 0xba, 0xf4, 0xfb, 0x88, 0x63, 0x53, 0x92, 0x11,
  0x5e, 0xd0, 0x58, 0xc4, 0x12, 0x49, 0x27, 0x31, 0x3b, 0xf5, 0x27, 0x8d,
  0xfa, 0xa0, 0xf3, 0x51, 0x29, 0xc8, 0x6b, 0x78, 0x88, 0x91, 0x64, 0xea,
  0x10, 0x86, 0x83, 0xb3, 0xdb, 0xd5, 0x71, 0xc0, 0x09, 0x1a, 0x14, 0x52,
  0xb3, 0xb0, 0xd2, 0x66, 0x9a, 0xb5, 0x6a, 0xa5, 0x54, 0x04, 0x09, 0x33,
  0xdd, 0x01, 0xcf, 0x46, 0xb0, 0x08, 0xbc, 0xaa, 0x3d, 0x05, 0x04, 0xe7,
  0x95, 0x49, 0x3a, 0x02, 0x26, 0xb4, 0xb5, 0xa0, 0x85, 0x48, 0x7f, 0x02,

  0x6e, 0x06, 0xd1, 0xd7, 0xb0, 0xbd, 0x23, 0xa5, 0xcc, 0x98, 0x34, 0x82,
  0x48, 0x28, 0xc8, 0x24, 0x86, 0x65, 0xe8, 0xec, 0x46, 0xa4, 0xfa, 0xb8,
  0xe1, 0x24, 0xfe, 0xae, 0x88, 0x22, 0x50, 0x71, 0x4d, 0x9d, 0x6f, 0x8d,
  0x20, 0x65, 0xce, 0xe8, 0x44, 0xb7, 0x35, 0x74, 0x2d, 0xc2, 0xf2, 0xc6,
  0xaa, 0x6c, 0x11, 0xc8, 0x1d, 0x0b, 0x7c, 0x6e, 0x81, 0xdb, 0xd8, 0xf5,
  0xa9, 0xf4, 0x21, 0x14, 0x41, 0x1f, 0xdb, 0xe1, 0xd2, 0x4f, 0x65, 0x41,
  0x79, 0xa4, 0xf4, 0x3c, 0x18, 0xac, 0xc8, 0x6e, 0xfc, 0xc1, 0x9c, 0xdd,
  0x61, 0x07, 0xfc, 0x94, 0xde, 0x6e, 0x63, 0x33, 0x51, 0xbd, 0x5a, 0xf2,
  0xe2, 0xbb, 0xa3, 0x77, 0xe3, 0xe3, 0xd3, 0xb7, 0x7f, 0x8a, 0x9a, 0xc3,
  0xf2, 0x4b, 0xdb, 0xea, 0x4d, 0x2b, 0x5d, 0x5d, 0x3b, 0x2e, 0xf2, 0x82,
  0xa9, 0xaf, 0x85, 0xbb, 0x3a, 0xe5, 0x05, 0x3d, 0x12, 0x74, 0xf9, 0x9a,
  0x66, 0xcb, 0x06, 0xfa, 0x92, 0xda, 0xd2, 0xd8, 0x25, 0xc4, 0x2d, 0xd0,
  0x07, 0x06, 0x36, 0x1c, 0x95, 0xba, 0x89, 0x6d, 0x67, 0xff, 0xb6, 0x1f,
  0x81, 0x79, 0xe3, 0xdf, 0x3c, 0x0a, 0x36, 0x28, 0x9e, 0xb0, 0xe3, 0xc5,

  0xcb, 0x57, 0x4b, 0xae, 0x92, 0x24, 0x30, 0x13, 0x06, 0x3e, 0xf2, 0x17,
  0x10, 0xf4, 0x6d, 0x18, 0xed, 0xb6, 0x5f, 0x34, 0x0f, 0x5f, 0xef, 0x79,

  0x15, 0x2c, 0xf6, 0xb9, 0xbd, 0xd8, 0x73, 0x7b, 0xe1, 0x73, 0xfb, 0xb1,
  0xe7, 0xf6, 0xc3, 0xe7, 0x1e, 0xc5, 0x9e, 0xf3, 0xd6, 0xeb, 0x99, 0xf1,
  0xb2, 0x73, 0xeb, 0x2c, 0xe3, 0xd6, 0xbf, 0x1e, 0x8d, 0xdc, 0xf1, 0x7f,
  0x66, 0xbd, 0x15, 0xdd, 0x46, 0xb5, 0x9e, 0x61, 0xaf, 0x76, 0x7d, 0xbf,
  0x59, 0xaf, 0x7c, 0x5a, 0x87, 0x33, 0x6a, 0x62, 0xc7, 0xc5, 0x6c, 0xbe,
  0xb7, 0xf7, 0x68, 0x38, 0xcd, 0x97, 0x57, 0x24, 0x75, 0x5e, 0x68, 0x6b,
  0x37, 0xda, 0x7c, 0x5a, 0xac, 0xfc, 0x62, 0x45, 0x26, 0x79, 0xa8, 0x87,
  0x9c, 0x8c, 0xb7, 0x13, 0x0f, 0xaf, 0x48, 0x20, 0x3a, 0xf1, 0x4a, 0xc2,
  0xef, 0x38, 0xb4, 0xa2, 0xd0, 0xc1, 0x1c, 0x94, 0xba, 0x58, 0xf7, 0x8d,
  0x79, 0x4f, 0x26, 0xc0, 0xa4, 0xab, 0xb3, 0xd2, 0x69, 0xca, 0xd8, 0x8c,
  0xaa, 0xab, 0xa1, 0xf7, 0xae, 0x6b, 0x17, 0x3d, 0x2e, 0xf4, 0x15, 0xc5,
  0xb8, 0xa3, 0xde, 0x6c, 0x45, 0x67, 0x75, 0x3c, 0x9c, 0x55, 0xb9, 0xcb,
  0x22, 0x26, 0x2a, 0xdf, 0xbf, 0x3b, 0x09, 0x54, 0xcb, 0x84, 0x5c, 0x33,
  0xf5, 0xc1, 0xce, 0x0e, 0x1a, 0x8c, 0x5f, 0xa5, 0xb7, 0xb7, 0xa3, 0x3a,
  0xdb, 0x31, 0xfc, 0xa4, 0xde, 0x81, 0xbf, 0x57, 0x3e, 0x7d, 0xd5, 0x2c,
  0xe6, 0xeb, 0x1c, 0xb5, 0x79, 0xad, 0x98, 0xb2, 0x8c, 0xc5, 0x38, 0x63,
  0xd4, 0x05, 0x57, 0xa4, 0x8d, 0x0b, 0xc9, 0x07, 0xac, 0x49, 0x77, 0xdd,
  0x86, 0x1f, 0xdc, 0x49, 0x15, 0x7d, 0x9c, 0xf7, 0x48, 0xf6, 0x41, 0x60,
  0x5a, 0x88, 0x56, 0x36, 0x21, 0x39, 0xf3, 0xc1, 0x61, 0xe7, 0xd0, 0x0b,
  0x54, 0x4f, 0x9b, 0x05, 0xe1, 0x0c, 0x0b, 0x92, 0x53, 0x01, 0x14, 0x1f,

  0xbe, 0x82, 0xd8, 0x9e, 0xd5, 0x7e, 0xe0, 0x83, 0xdc, 0x03, 0xb2, 0xe4,
  0xa8, 0x9a, 0xf1, 0x89, 0x99, 0x26, 0xa5, 0xe4, 0x91, 0x32, 0x6f, 0x54,
  0x0e, 0xf3, 0xdf, 0x3f, 0x85, 0x45, 0xe7, 0x09, 0x96, 0x10, 0xa4, 0xee,
  0x91, 0xfe, 0x4f, 0x65, 0x5f, 0xbc, 0xff, 0xfc, 0x3d, 0xbf, 0x3d, 0x06,





  0xcc, 0x8b, 0x68, 0xf8, 0x08, 0xc7, 0xb2, 0x31, 0x7e, 0x77, 0xb6, 0x31,
  0x90, 0x68, 0xbd, 0xf9, 0xc0, 0xd0, 0xfc, 0x3b, 0x81, 0x95, 0x49, 0xed,
  0x75, 0x9e, 0x3c, 0x96, 0xc4, 0x3a, 0x9e, 0x23, 0x37, 0x99, 0x0b, 0xc3,
  0x47, 0xf8, 0xa5, 0x4d, 0x2e, 0xe4, 0x2e, 0xb4, 0xae, 0x1a, 0xd5, 0x18,
  0x80, 0xed, 0x15, 0x72, 0xca, 0xcf, 0xc0, 0x01, 0xaf, 0xc7, 0xd5, 0x3a,
  0x0b, 0xfb, 0x68, 0x68, 0x06, 0xd3, 0x1c, 0x75, 0x02, 0x04, 0x65, 0xf5,
  0x51, 0x5a, 0x81, 0x48, 0x98, 0x83, 0x99, 0x4b, 0xd0, 0x7d, 0xb9, 0xe3,
  0x45, 0xf4, 0xa8, 0x91, 0x5d, 0xac, 0xba, 0x6c, 0xd9, 0x31, 0x85, 0xc1,
  0xeb, 0x69, 0x31, 0xac, 0xb4, 0x6a, 0x36, 0xec, 0xeb, 0x62, 0x45, 0x67,
  0x82, 0x51, 0x3a, 0x83, 0xdc, 0x83, 0x55, 0xf3, 0xb8, 0x73, 0xfa, 0xba,
  0x79, 0x91, 0x63, 0xb7, 0xfb, 0x4a, 0x47, 0x04, 0x8b, 0x46, 0x2b, 0xb4,
  0xe9, 0xdb, 0x1d, 0x72, 0x70, 0xc8, 0x80, 0x7d, 0xd5, 0x64, 0x8a, 0x2d,
  0xe3, 0x1d, 0xc8, 0x48, 0x83, 0x6f, 0xc2, 0xa6, 0xdd, 0x59, 0x7b, 0xfd,
  0x30, 0xe2, 0xa6, 0x81, 0xea, 0x85, 0x2e, 0x7b, 0x45, 0x19, 0xdf, 0xbd,
  0xeb, 0xf7, 0x97, 0x8f, 0x8f, 0x45, 0xf3, 0xb3, 0x41, 0xf8, 0x9a, 0xc0,
  0x9a, 0x3c, 0x68, 0x0f, 0x64, 0x0b, 0x7e, 0xe1, 0x0e, 0x88, 0x47, 0xba,
  0x4b, 0xd2, 0xb4, 0x11, 0xa1, 0xab, 0xec, 0x53, 0xec, 0x4b, 0x6b, 0x63,
  0x48, 0x00, 0xc7, 0xc5, 0x56, 0x24, 0xa0, 0xe0, 0x69, 0x1c, 0xd0, 0x30,
  0x94, 0x8f, 0xde, 0x5b, 0xb3, 0x81, 0x00, 0xa2, 0x04, 0x16, 0x68, 0x10,
  0xed, 0x92, 0x12, 0x62, 0x26, 0x91, 0x3b, 0x56, 0x3e, 0x01, 0xdb, 0x81,
  0x3f, 0xdf, 0x32, 0x12, 0x01, 0x3a, 0xa5, 0x4a, 0x29, 0xfb, 0x68, 0x12,
  0xce, 0x85, 0xef, 0x0c, 0xf7, 0x81, 0xae, 0xee, 0x07, 0x61, 0x6b, 0x50,
  0xd1, 0x88, 0x55, 0x00, 0x96, 0x33, 0xa7, 0xe6, 0x0e, 0x29, 0x80, 0x56,
  0x29, 0x12, 0x51, 0xa3, 0x2d, 0x4d, 0xb7, 0x43, 0x52, 0x77, 0xdf, 0xcd,
  0x30, 0xe6, 0x8e, 0x53, 0x3b, 0x6d, 0xf5, 0xf6, 0xaa, 0x2e, 0xda, 0x81,
  0x6c, 0x43, 0x53, 0x12, 0xab, 0x72, 0xca, 0xae, 0x05, 0x96, 0xc5, 0x7d,
  0xb5, 0xd6, 0xa1, 0x22, 0x42, 0xfa, 0xd1, 0x2f, 0x3c, 0xac, 0xbd, 0xff,
  0xc3, 0x0e, 0x6b, 0xef, 0xff, 0x86, 0xc3, 0xda, 0xff, 0x85, 0x87, 0xb5,


  0xff, 0x7f, 0xd8, 0x61, 0xed, 0xff, 0xdf, 0x70, 0x58, 0x8f, 0x7e, 0xe1,
  0x61, 0x3d, 0xfa, 0xd5, 0x0f, 0xeb, 0x2d, 0xfd, 0x1e, 0x52, 0x42, 0x75,
  0xca, 0xbc, 0xee, 0xaa, 0x5c, 0x93, 0x3b, 0xb4, 0xb6, 0x9f, 0xd0, 0x86,
  0x88, 0x39, 0x22, 0xaa, 0x6a, 0xdd, 0xb5, 0xc9, 0x0e, 0x1b, 0x8b, 0x5a,
  0x65, 0xfb, 0xaf, 0x48, 0x80, 0x4b, 0xb0, 0xf0, 0x49, 0x9f, 0xfa, 0xaa,
  0x24, 0xff, 0x8c, 0xd1, 0x3b, 0x06, 0xc9, 0xdb, 0xf1, 0x98, 0x93, 0x9a,
  0xc6, 0x08, 0xcc, 0x76, 0x0f, 0x8b, 0x5c, 0x9d, 0xb0, 0xa0, 0xb6, 0x48,
  0x29, 0x3d, 0x35, 0x33, 0x74, 0xcc, 0x85, 0xdf, 0x5b, 0xa4, 0x53, 0xfa,
  0xf1, 0xee, 0x68, 0xcf, 0x6d, 0xce, 0xf6, 0xcf, 0x80, 0x99, 0x73, 0x51,
  0xd3, 0xa8, 0x6d, 0x1f, 0x01, 0x84, 0xa7, 0x3c, 0x10, 0xd2, 0x81, 0xdb,

  0x47, 0x73, 0x2b, 0x90, 0x72, 0x6a, 0x36, 0xf5, 0x43, 0x8f, 0xa3, 0xbf,
  0x9c, 0x04, 0xbe, 0x41, 0xd4, 0xea, 0x9e, 0x45, 0x86, 0x07, 0xa3, 0x24,
  0x85, 0xd2, 0xaf, 0x1b, 0x1a, 0xcc, 0x2f, 0x09, 0x69, 0xef, 0xe7, 0xc6,

  0xad, 0xbd, 0x18, 0xf1, 0xff, 0xb2, 0xb8, 0xf5, 0x83, 0xac, 0x6f, 0xff,
  0xca, 0x54, 0x43, 0x6d, 0xdc, 0x16, 0x47, 0x87, 0x77, 0x6e, 0x4b, 0xaa,
  0x33, 0x02, 0x70, 0xe4, 0x8c, 0x49, 0x87, 0xf2, 0x78, 0x8e, 0xe4, 0x5d,
  0x17, 0x3d, 0x64, 0x23, 0x29, 0x44, 0x77, 0x2a, 0x35, 0xa7, 0xdf, 0xe2,

  0x19, 0x29, 0x70, 0x06, 0xaf, 0xb2, 0x66, 0x8a, 0x5b, 0x15, 0xfa, 0x19,
  0x87, 0x40, 0x01, 0x64, 0xb5, 0x20, 0xb9, 0x61, 0x9a, 0x31, 0xee, 0x56,
  0x7e, 0x9f, 0x06, 0xfd, 0xb4, 0xbd, 0xde, 0x74, 0x9a, 0x0d, 0xd3, 0x7a,
  0x9a, 0xe7, 0xf1, 0xc6, 0xb1, 0x1a, 0x65, 0xa6, 0xb4, 0x1e, 0xc4, 0x07,
  0xcc, 0xf3, 0x09, 0x45, 0xf4, 0xb4, 0x0f, 0x3c, 0xf1, 0x43, 0x20, 0x51,
  0xd1, 0x74, 0xcb, 0x55, 0x73, 0x59, 0x6a, 0xa8, 0x60, 0x10, 0x71, 0x3b,

  0x52, 0xcc, 0x0f, 0x47, 0x6c, 0x4e, 0x67, 0x5a, 0xe5, 0x4b, 0xa0, 0xdc,
  0xfa, 0x4d, 0xe7, 0x06, 0xb6, 0x27, 0x3b, 0x5c, 0x79, 0x12, 0x9b, 0xe5,
  0x16, 0xe5, 0xef, 0x03, 0xf3, 0x77, 0x63, 0xb8, 0x41, 0x4e, 0x53, 0xdb,
  0xab, 0xcb, 0xbc, 0x4b, 0xd8, 0xe4, 0x5e, 0x54, 0x34, 0x51, 0x48, 0xa5,
  0x9e, 0x20, 0xbf, 0x06, 0x49, 0x0c, 0x09, 0xdd, 0x29, 0xfe, 0x35, 0xda,
  0x91, 0x68, 0xf0, 0x93, 0x04, 0x80, 0xb9, 0x83, 0xe4, 0xbc, 0x2f, 0x05,
  0x07, 0xe4, 0x2a, 0xbb, 0xe5, 0x2a, 0xd5, 0xd0, 0xa0, 0x63, 0xd8, 0x44,
  0x8a, 0xd6, 0x4a, 0x60, 0xfe, 0x70, 0xfc, 0xf2, 0xf8, 0xb8, 0x55, 0xd3,
  0x4a, 0x9b, 0xc7, 0xe0, 0xb9, 0x00, 0x1e, 0xa9, 0x09, 0x44, 0x98, 0x42,
  0xc2, 0xb1, 0x18, 0x3f, 0x77, 0xa2, 0x34, 0xd7, 0x0f, 0x71, 0x1d, 0xc3,
  0x09, 0x72, 0xed, 0x13, 0x9a, 0x8a, 0x59, 0x53, 0x98, 0x69, 0xe6, 0x04,
  0xed, 0x76, 0xb5, 0x5a, 0xa4, 0xc5, 0xa7, 0xc7, 0xa5, 0x8b, 0x97, 0x8a,
  0xc8, 0x6e, 0xf1, 0xbd, 0xf2, 0xe3, 0xc8, 0x21, 0xad, 0x45, 0xda, 0x7e,
  0x9c, 0x55, 0xd2, 0x14, 0x92, 0x71, 0xda, 0xa4, 0x6f, 0x87, 0x59, 0x26,
  0x50, 0x34, 0x79, 0x64, 0xb3, 0x56, 0x0d, 0x4d, 0x33, 0x24, 0xbe, 0x30,
  0x12, 0xba, 0x33, 0x5d, 0x97, 0x23, 0x07, 0xe9, 0xd6, 0xd6, 0xe2, 0xed,
  0x75, 0x45, 0x25, 0x3e, 0xf2, 0x5b, 0xde, 0x00, 0xff, 0x02, 0xdc, 0x4b,
  0xff, 0x72, 0x01, 0x7a, 0x6e, 0x00, 0xea, 0x70, 0x5c, 0x8b, 0xbb, 0xfb,



  0x2f, 0x01, 0x74, 0x91, 0x8d, 0xdf, 0x6f, 0xc4, 0x1b, 0xc3, 0x3c, 0xe0,
  0x26, 0xb5, 0xe0, 0x5d, 0x7e, 0x5b, 0x4a, 0x8b, 0xe0, 0xcd, 0x78, 0x4c,
  0xcc, 0x3f, 0xd3, 0x55, 0x91, 0xdf, 0xa2, 0x5c, 0xc4, 0xa8, 0x12, 0x2f,
  0xa8, 0x29, 0x4a, 0x4f, 0xc3, 0x8f, 0x97, 0xac, 0xd8, 0x24, 0x5a, 0xfd,
  0x82, 0x55, 0xbc, 0x37, 0x2f, 0x1b, 0x95, 0x71, 0x41, 0xd9, 0x43, 0x3c,
  0xc6, 0xc0, 0x47, 0x5e, 0x07, 0x5b, 0x8f, 0x64, 0x1f, 0x15, 0x59, 0x43,
  0x96, 0xeb, 0xda, 0xb8, 0x59, 0x3b, 0x16, 0x79, 0x0e, 0xbc, 0xb1, 0x25,
  0x95, 0x24, 0xac, 0xe9, 0xdf, 0xcd, 0xe1, 0x44, 0xaf, 0x00, 0xc0, 0x07,
  0xec, 0xa6, 0x38, 0x99, 0x6b, 0xf3, 0x25, 0xf4, 0x23, 0x52, 0x1f, 0x4d,
  0x5f, 0x62, 0x89, 0x52, 0xb6, 0x3b, 0x91, 0xeb, 0xed, 0x95, 0x77, 0xe3,


  0x1e, 0xe8, 0x1e, 0xe5, 0x82, 0xc3, 0xd2, 0x77, 0x33, 0x94, 0xdd, 0x9d,

  0x26, 0x63, 0x23, 0xaf, 0xdf, 0x71, 0xab, 0x07, 0x1a, 0x50, 0x10, 0xf3,
  0x39, 0x91, 0xff, 0x8e, 0xe6, 0x4e, 0xcc, 0xc3, 0xcc, 0x7e, 0xd7, 0x58,
  0x8b, 0x59, 0x1d, 0x95, 0x91, 0x21, 0x7e, 0x4a, 0xff, 0x7e, 0xc9, 0xea,
  0x3d, 0x3b, 0xc5, 0xdb, 0x8b, 0x90, 0x66, 0x79, 0x5d, 0xf5, 0xc5, 0x8b,
  0x6e, 0x5f, 0x51, 0xaf, 0x75, 0x9d, 0x57, 0xc5, 0x84, 0xe8, 0xbe, 0xa6,
  0x59, 0x63, 0x9d, 0x6e, 0x41, 0x41, 0xd6, 0xb4, 0x6d, 0xcc, 0x25, 0x6a,
  0x14, 0xe3, 0xda, 0x52, 0x29, 0x1f, 0xb5, 0x27, 0xa1, 0x2c, 0x40, 0xdb,
  0xda, 0x99, 0x0f, 0x96, 0x9b, 0xc2, 0x4b, 0xc5, 0x70, 0x80, 0xdb, 0x9b,
  0xcf, 0x5b, 0x55, 0x19, 0xe2, 0x08, 0xd6, 0x42, 0xb0, 0x2d, 0xa3, 0xac,
  0xb3, 0xd2, 0xc6, 0x97, 0x87, 0x5a, 0x8b, 0x28, 0xf0, 0x7b, 0x3f, 0x28,

  0x78, 0x14, 0x3c, 0xaa, 0x9d, 0x1e, 0x47, 0x9c, 0x63, 0x2b, 0x55, 0xec,
  0x54, 0x8a, 0xc4, 0x6d, 0xab, 0xda, 0x69, 0x6e, 0x78, 0x5e, 0xf8, 0xe4,
  0x1e, 0xc4, 0xce, 0xa4, 0xbd, 0x98, 0xb0, 0xa5, 0xe4, 0x50, 0x30, 0xeb,
  0x33, 0x72, 0xa4, 0x76, 0xbf, 0x33, 0xf2, 0xbf, 0xc3, 0xa5, 0x38, 0xdb,
  0x01, 0x3c, 0xdc, 0x5d, 0xb7, 0xf7, 0xb9, 0xfd, 0x36, 0xcd, 0x53, 0x2b,
  0xce, 0x65, 0x66, 0x48, 0x5d, 0xa6, 0xbc, 0x6d, 0xa4, 0x35, 0x84, 0x37,
  0x11, 0x10, 0x08, 0xce, 0xc8, 0x03, 0x7c, 0xad, 0x74, 0x29, 0xe2, 0x7c,
  0x6e, 0xe1, 0x68, 0x8c, 0x51, 0x2b, 0xab, 0xa5, 0x50, 0x31, 0x03, 0x97,
  0x06, 0x7e, 0x50, 0x74, 0x4f, 0x8c, 0xb6, 0xca, 0xf2, 0x0b, 0x12, 0x89,
  0xa3, 0x85, 0xd7, 0xd9, 0x36, 0x22, 0xa4, 0xce, 0x46, 0xa5, 0x76, 0x60,
  0xe9, 0xeb, 0xf6, 0x22, 0x58, 0xfe, 0xc9, 0x11, 0xbd, 0x11, 0x0e, 0xf6,
  0x07, 0xe9, 0x8f, 0x94, 0xfb, 0xbd, 0x46, 0x6f, 0x70, 0x19, 0xba, 0x74,
  0x25, 0x94, 0x27, 0x8d, 0x23, 0x80, 0x1e, 0x30, 0x92, 0x36, 0x5a, 0xa4,

  0xb4, 0xab, 0x9a, 0x99, 0x6c, 0x5c, 0xce, 0xcb, 0xc9, 0xc4, 0x2c, 0x7c,
  0xc3, 0x53, 0x4a, 0xcd, 0x97, 0x03, 0x4f, 0xb5, 0x3f, 0x0f, 0x63, 0x59,
  0x5d, 0xc2, 0x98, 0x1e, 0x70, 0xd6, 0x9b, 0xb4, 0x5e, 0x20, 0x81, 0xac,
  0x21, 0x04, 0xf9, 0xbe, 0x22, 0xad, 0x47, 0xe4, 0x8c, 0xe4, 0xdf, 0x0b,
  0x61, 0xd0, 0xc2, 0x5a, 0x41, 0x05, 0x14, 0x4b, 0xd2, 0x4f, 0x75, 0x82,
  0x9c, 0xc9, 0x98, 0xf4, 0x25, 0xe3, 0xb6, 0x1a, 0x5d, 0x0d, 0xb4, 0xcf,
  0x61, 0x5e, 0x87, 0xd1, 0x1b, 0xec, 0x42, 0x7b, 0x41, 0x1b, 0xff, 0xa0,
  0x3f, 0xf6, 0x06, 0xf4, 0xdf, 0xfd, 0x7f, 0x6e, 0x20, 0xc0, 0x73, 0xb0,
  0xb3, 0x73, 0x73, 0x73, 0x33, 0x52, 0xb8, 0x42, 0x73, 0x64, 0x9f, 0x85,
  0x75, 0x85, 0x84, 0xf2, 0xd6, 0xf3, 0x81, 0xf3, 0x64, 0x23, 0x5f, 0x5c,
  0xfe, 0x65, 0x6f, 0xb8, 0xb7, 0xbb, 0xbb, 0xfb, 0xd3, 0x68, 0x49, 0x5b,
  0x7c, 0x81, 0x61, 0xcd, 0x7f, 0xfd, 0x61, 0x77, 0x78, 0x26, 0x3b, 0x51,
  0x40, 0x59, 0xd9, 0x48, 0x8b, 0x10, 0x53, 0x70, 0x53, 0x10, 0x26, 0xe4,
  0x03, 0x8f, 0xc9, 0x70, 0x9c, 0x3a, 0xed, 0xaf, 0xd2, 0xe7, 0xfe, 0x7c,
  0x14, 0xa0, 0x78, 0xf2, 0x68, 0x7f, 0x3f, 0x61, 0x95, 0x83, 0x8b, 0xdf,
  0x38, 0x55, 0x82, 0x70, 0x0f, 0xa4, 0x81, 0x39, 0xcb, 0x32, 0x02, 0x77,
  0x4c, 0x39, 0x14, 0x64, 0x68, 0xa3, 0x27, 0x61, 0x94, 0x33, 0x13, 0x08,
  0xe0, 0xd1, 0x70, 0x9f, 0x72, 0x76, 0xe7, 0x06, 0x36, 0x54, 0x5e, 0x11,

  0x6f, 0xe5, 0x5e, 0xa3, 0x16, 0x45, 0x32, 0xad, 0x63, 0x5a, 0x9b, 0x2d,
  0x64, 0x83, 0x90, 0x03, 0x08, 0x6f, 0x51, 0x4a, 0x1b, 0x6d, 0xe4, 0x05,
  0x5c, 0xac, 0x2a, 0xe9, 0xa1, 0x84, 0x34, 0x8a, 0x9b, 0xf4, 0xae, 0x25,
  0xec, 0xcd, 0x8e, 0xbf, 0x30, 0xff, 0x09, 0xdc, 0xe0, 0xb6, 0x3c, 0x57,
  0x7a, 0x40, 0x5f, 0x64, 0xcd, 0xf4, 0x2a, 0xc0, 0x94, 0x07, 0xfb, 0x26,
  0xd5, 0xfd, 0xca, 0xac, 0xc6, 0x42, 0xb6, 0xf7, 0xf5, 0x97, 0x74, 0x55,
  0xbf, 0x66, 0x50, 0xea, 0x26, 0x82, 0xba, 0x07, 0x6e, 0x37, 0xcf, 0x3c,
  0xb1, 0x0f, 0x3b, 0xd4, 0xf6, 0x38, 0x45, 0x46, 0x6a, 0x5e, 0x6b, 0x55,
  0xf2, 0xf4, 0x2a, 0x5b, 0x08, 0xbf, 0xdc, 0xd2, 0x84, 0xcc, 0x0d, 0x21,
  0xc2, 0x8d, 0x50, 0xa4, 0x6d, 0x5c, 0xc8, 0x6f, 0xcc, 0x62, 0xb6, 0xa5,
  0xaa, 0xd7, 0x4a, 0x39, 0x69, 0xb5, 0x74, 0xb9, 0x22, 0xab, 0x71, 0x92,
  0x8a, 0x38, 0xd1, 0x72, 0xf3, 0xbe, 0xbc, 0x69, 0xe2, 0x89, 0x59, 0x05,

  0x29, 0x46, 0xfe, 0x97, 0xa1, 0xe8, 0x3e, 0x22, 0x54, 0x91, 0xbe, 0x62,
  0x6e, 0xec, 0xab, 0xe3, 0x97, 0xe7, 0x28, 0xb1, 0x1d, 0xa0, 0x18, 0x67,
  0x80, 0xba, 0xda, 0xb0, 0x0d, 0xd6, 0x19, 0xfc, 0x23, 0x20, 0x54, 0x89,
  0x55, 0xa5, 0x2e, 0x81, 0xcf, 0x61, 0x9c, 0x6b, 0x95, 0x9c, 0xd7, 0xc0,
  0x2c, 0x92, 0x99, 0xdc, 0xd2, 0x12, 0x6d, 0xda, 0xe3, 0xe3, 0x27, 0xa3,
  0x5d, 0x5e, 0xa3, 0xeb, 0xb0, 0xad, 0x75, 0x60, 0x70, 0x23, 0x69, 0xfc,
  0x32, 0x8d, 0x67, 0x24, 0xd8, 0xe9, 0x0c, 0x12, 0xc6, 0x56, 0x67, 0xa0,
  0x06, 0xfd, 0xad, 0x97, 0x8b, 0xb9, 0x56, 0x33, 0xf5, 0xa1, 0x55, 0x89,
  0x2c, 0x3b, 0xa0, 0xd8, 0x14, 0x79, 0x2b, 0x6d, 0x0d, 0xa7, 0xa0, 0xb8,
  0xc4, 0x8a, 0xf1, 0x40, 0x13, 0x89, 0x78, 0xb0, 0x9a, 0xac, 0x18, 0xb8,
  0xce, 0x56, 0x25, 0x49, 0x01, 0x91, 0x58, 0x52, 0xdd, 0xd4, 0x6a, 0x04,





  0x1b, 0xd3, 0x4f, 0x82, 0x86, 0x61, 0xc3, 0xaf, 0x04, 0xd7, 0x96, 0xf5,
  0xe4, 0x58, 0x61, 0x19, 0x1d, 0xe5, 0xb6, 0xe6, 0xd0, 0xb2, 0xdd, 0xaa,
  0x0a, 0xe7, 0x88, 0xdc, 0x85, 0x7c, 0xec, 0x4d, 0xb7, 0xe5, 0xbb, 0xb9,
  0xa2, 0xc3, 0x10, 0x0b, 0x73, 0x8a, 0x64, 0xab, 0x3b, 0xdb, 0x99, 0x30,
  0x95, 0x15, 0x82, 0x12, 0x60, 0xec, 0xc1, 0x3f, 0xb5, 0xf1, 0x47, 0x8a,
  0x22, 0x7d, 0x71, 0xb8, 0xd1, 0xba, 0x91, 0xb1, 0xde, 0x58, 0x35, 0x73,
  0xb7, 0xb6, 0x25, 0x23, 0x3c, 0x8d, 0xf8, 0x7e, 0x76, 0xdb, 0xb0, 0xdc,
  0xbf, 0x40, 0x7f, 0xeb, 0xe2, 0xd1, 0x7e, 0x52, 0xdf, 0x19, 0x25, 0x62,
  0xe1, 0x6f, 0x42, 0xb7, 0x9d, 0x79, 0x34, 0x72, 0xd6, 0xea, 0x03, 0xc8,
  0x7c, 0xeb, 0x3d, 0xbd, 0x72, 0x88, 0x57, 0xa4, 0x73, 0x98, 0x66, 0x03,
  0xfa, 0x35, 0xf2, 0xea, 0xf6, 0xec, 0x50, 0x0b, 0x65, 0x63, 0x33, 0x17,
  0x9b, 0xcc, 0xd3, 0xe2, 0xa3, 0x4d, 0xdb, 0xe6, 0x91, 0x06, 0xd4, 0x7c,
  0x96, 0xeb, 0x54, 0xdd, 0x0f, 0x25, 0x3d, 0x10, 0x92, 0x31, 0xe8, 0xd1,
  0x46, 0x7a, 0xe9, 0x22, 0xad, 0xa8, 0x80, 0x11, 0x7b, 0x26, 0xa9, 0xd5,
  0xfe, 0x99, 0xd8, 0x96, 0x66, 0x2c, 0xcd, 0xbf, 0x41, 0xbe, 0x3c, 0x3f,
  0x17, 0x8a, 0x30, 0x8e, 0xe0, 0x33, 0xaa, 0x90, 0xe6, 0xa7, 0xf7, 0xf4,
  0x9b, 0xfb, 0xf5, 0x22, 0xf7, 0x16, 0x66, 0xd9, 0x70, 0x6d, 0xf3, 0xdf,
  0x03, 0x8d, 0x18, 0xf6, 0xf1, 0x6f, 0x2b, 0x3d, 0x6c, 0x4b, 0x75, 0x1b,
  0x63, 0xf4, 0x9b, 0xe4, 0xb2, 0x7a, 0xe7, 0xe2, 0x9a, 0xb1, 0xf8, 0xfd,


  0x28, 0x39, 0x75, 0xe6, 0x64, 0x31, 0x00, 0xe0, 0x6e, 0x53, 0x4d, 0xc5,
  0x98, 0xc4, 0xdf, 0x25, 0x31, 0x34, 0x9d, 0xc7, 0x76, 0x00, 0x3d, 0xe3,





  0x72, 0x60, 0x7e, 0xd7, 0xb1, 0xd9, 0x29, 0x38, 0xb8, 0xf0, 0x39, 0xb3,
  0xb1, 0xd4, 0xb4, 0x94, 0x13, 0x05, 0xd2, 0x20, 0xef, 0x9b, 0x17, 0x11,
  0xef, 0x56, 0xc7, 0x69, 0x03, 0xb6, 0x4d, 0xad, 0x7b, 0xbc, 0x96, 0x54,
  0x81, 0xb9, 0x91, 0x8b, 0x9c, 0xd9, 0xe2, 0xba, 0x4d, 0x18, 0x96, 0x56,
  0x16, 0x83, 0x00, 0x3d, 0x8a, 0x02, 0xf3, 0xec, 0x71, 0xa2, 0x8c, 0xc3,
  0x85, 0x74, 0x07, 0xb7, 0x2d, 0x86, 0x53, 0x7e, 0x4f, 0x69, 0xd3, 0xff,
  0xf2, 0x3d, 0x8d, 0x8c, 0xb9, 0xd3, 0x90, 0x1e, 0x86, 0xa1, 0xc2, 0x01,
  0x17, 0x0a, 0x06, 0x4b, 0x3a, 0x2d, 0xf4, 0x46, 0x0a, 0x98, 0x55, 0xce,
  0x61, 0xde, 0xda, 0xb7, 0x31, 0xaf, 0xa8, 0x25, 0x94, 0xe7, 0xff, 0x10,
  0x44, 0x30, 0xa3, 0x6e, 0x06, 0xfa, 0x32, 0xdd, 0x46, 0x24, 0x39, 0x9a,

  0x1d, 0x06, 0x0c, 0x35, 0x65, 0x0b, 0x51, 0x2e, 0xa6, 0x4b, 0x7d, 0x26,
  0x7d, 0x22, 0x2b, 0xd8, 0xaa, 0x2f, 0x2d, 0xb2, 0x9b, 0x39, 0x9f, 0x10,
  0x99, 0x71, 0xc6, 0xc0, 0xbd, 0xb5, 0xb6, 0x54, 0xb6, 0xed, 0xd3, 0x2f,
  0x45, 0x8e, 0xd4, 0x94, 0x48, 0x6a, 0x38, 0x9a, 0x03, 0xcd, 0xae, 0x75,

  0xe3, 0x23, 0x2d, 0xab, 0x78, 0xa5, 0xd2, 0xa1, 0xe3, 0xce, 0x07, 0x14,
  0x36, 0x77, 0xe1, 0x3a, 0xe7, 0xbd, 0x67, 0xa8, 0xb4, 0x49, 0x95, 0x67,
  0x17, 0xa4, 0x81, 0x60, 0x45, 0x92, 0xa1, 0x1a, 0x78, 0x8d, 0x32, 0x42,
  0xd5, 0xa6, 0xdc, 0x77, 0x73, 0x8e, 0x54, 0x9e, 0x9c, 0xc3, 0x73, 0xc4,
  0x3c, 0xd1, 0x76, 0xfa, 0x62, 0x08, 0x7b, 0xaa, 0xc4, 0xc4, 0x22, 0x52,
  0xad, 0x98, 0x8a, 0x66, 0x7f, 0xa2, 0xcb, 0xbb, 0x78, 0x3c, 0x89, 0xba,
  0x0a, 0xba, 0xc5, 0xb6, 0x53, 0x24, 0xbe, 0xc8, 0x6c, 0x55, 0xb4, 0x1b,
  0xaf, 0xd9, 0x58, 0x1c, 0x17, 0x9a, 0x76, 0xe9, 0xdb, 0xac, 0x32, 0xf2,
  0xaf, 0xac, 0x93, 0xef, 0x9e, 0x68, 0x92, 0xa7, 0xf4, 0xbb, 0x17, 0x55,
  0xc4, 0x96, 0xd4, 0xa2, 0x18, 0x81, 0xa7, 0x1e, 0x84, 0x2f, 0xb8, 0x34,
  0x84, 0xb9, 0x97, 0xbe, 0x2e, 0x0a, 0x09, 0x1b, 0xe9, 0x45, 0xf7, 0xca,
  0x99, 0x9f, 0x18, 0xf2, 0x33, 0xff, 0x8c, 0xf7, 0x36, 0x73, 0x2d, 0xaa,




  0x8d, 0x76, 0x45, 0xc4, 0x42, 0xbe, 0x3c, 0x73, 0x96, 0x93, 0x06, 0x4a,
  0x8e, 0x91, 0x4e, 0x76, 0xe2, 0xc9, 0x79, 0x4e, 0xee, 0x1e, 0x49, 0xdf,
  0x09, 0x55, 0x40, 0x2e, 0x84, 0x10, 0xb5, 0xc6, 0xa1, 0x8f, 0x77, 0x72,
  0x29, 0x48, 0x8f, 0xac, 0xaf, 0x48, 0x13, 0x23, 0x0d, 0x01, 0x46, 0x7e,
  0x8f, 0x7a, 0xcf, 0xf2, 0xf1, 0xed, 0xf9, 0xc9, 0x1b, 0x31, 0x9d, 0x1d,
  0x9b, 0x13, 0xad, 0xc6, 0x99, 0xc5, 0xc2, 0x76, 0x98, 0xaa, 0x42, 0xc4,
  0x01, 0xdd, 0x0c, 0x2d, 0x5e, 0x64, 0xbc, 0x0b, 0xda, 0xb6, 0x81, 0x64,
  0xfa, 0x54, 0x52, 0x16, 0x27, 0x46, 0x97, 0x6e, 0x6a, 0xc4, 0x93, 0x4d,
  0x44, 0x58, 0xe3, 0xec, 0xe1, 0x2a, 0x31, 0x12, 0xc5, 0x30, 0x9a, 0x75,
  0xf0, 0xed, 0x24, 0xe7, 0x94, 0x1f, 0x7a, 0x5f, 0xe6, 0x95, 0x10, 0x8b,
  0xe1, 0x6e, 0x1c, 0xc9, 0xab, 0xf2, 0xa6, 0x18, 0x9e, 0x50, 0x75, 0x73,
  0x72, 0x52, 0x5e, 0x9a, 0xad, 0x7a, 0x0b, 0x85, 0xa5, 0x7b, 0x6a, 0xef,
  0xcf, 0xde, 0x26, 0x5b, 0x24, 0x77, 0x93, 0x33, 0x8b, 0x68, 0x47, 0x4f,
  0x6e, 0x8b, 0x7d, 0x51, 0xb3, 0x4e, 0x22, 0xb3, 0x19, 0x24, 0x47, 0x3f,
  0x1c, 0xbe, 0x39, 0x3b, 0x39, 0xfa, 0x91, 0x4d, 0x8c, 0x60, 0x39, 0xf4,
  0xe3, 0x2f, 0x3d, 0x9b, 0x0b, 0x11, 0x1a, 0xca, 0x48, 0x34, 0xf3, 0x88,
  0xc2, 0xd9, 0x30, 0x7d, 0x32, 0x6b, 0x54, 0x12, 0x1c, 0x8f, 0xcf, 0x8e,
  0x87, 0x0a, 0x47, 0xc7, 0xbd, 0x50, 0xf3, 0x82, 0x0c, 0x24, 0xc8, 0x23,
  0x69, 0xa3, 0xf2, 0x6d, 0x18, 0x8c, 0xd2, 0x1b, 0x31, 0x48, 0xde, 0x6a,
  0xa2, 0xe3, 0x00, 0x27, 0x4e, 0x57, 0xf0, 0x55, 0x7e, 0x89, 0x80, 0x52,
  0x27, 0x3d, 0x8d, 0x88, 0x03, 0x53, 0x98, 0x06, 0xc5, 0x42, 0x68, 0x61,
  0xe7, 0xb0, 0xf8, 0xea, 0x6c, 0xce, 0xee, 0xcb, 0x5e, 0x09, 0x09, 0x66,


  0x80, 0x63, 0xa4, 0x2a, 0x94, 0x20, 0x54, 0x26, 0x55, 0x29, 0x93, 0x3b,
  0xbf, 0x77, 0x9e, 0xa5, 0x11, 0x96, 0x0b, 0xa2, 0x4d, 0x58, 0xb6, 0x7f,
  0x90, 0x6c, 0x0c, 0x57, 0xc9, 0xc1, 0xc6, 0x27, 0x54, 0x11, 0x7c, 0x4f,

  0x6f, 0xa4, 0x15, 0x97, 0xc4, 0xcb, 0xd4, 0x15, 0x2c, 0x0d, 0x24, 0xe0,
  0xaf, 0x56, 0x6f, 0x1b, 0x7b, 0xcc, 0xcd, 0x55, 0x17, 0xe9, 0x8b, 0xc2,
  0xb7, 0xcb, 0x08, 0x58, 0x4c, 0x01, 0xbe, 0x94, 0x71, 0xdc, 0xd4, 0x68,




  0xa8, 0x9b, 0x86, 0x0d, 0xb0, 0x1b, 0x9f, 0x58, 0xfc, 0x06, 0x62, 0x93,
  0x62, 0x41, 0x95, 0x33, 0xa3, 0xab, 0x1e, 0x72, 0x0c, 0xa2, 0xa6, 0xfc,

  0xf6, 0x70, 0x38, 0xec, 0xd5, 0xe6, 0x9f, 0x36, 0x25, 0xbe, 0xba, 0x21,
  0x4a, 0x15, 0xf1, 0xea, 0x0d, 0x56, 0x60, 0x49, 0x31, 0xa6, 0xd9, 0x9b,
  0x1b, 0xbf, 0xf9, 0x62, 0x53, 0xdb, 0xd5, 0xe8, 0x93, 0x5d, 0x86, 0x83,
  0xf7, 0x24, 0xc4, 0xa7, 0x6a, 0xb5, 0x9c, 0xbe, 0x64, 0xae, 0x1b, 0xa9,


  0x39, 0xcb, 0x20, 0xbc, 0xb9, 0x2b, 0x25, 0x23, 0x48, 0x72, 0x08, 0xb1,

  0xab, 0x72, 0xb4, 0x66, 0x2e, 0x73, 0xfd, 0x77, 0x9d, 0xab, 0xd7, 0xb9,


  0x99, 0x82, 0x12, 0xae, 0x83, 0xe0, 0x84, 0x9b, 0xff, 0xf6, 0xe9, 0x43,
  0x9c, 0xb8, 0x4a, 0xc6, 0x31, 0x34, 0xe1, 0x68, 0x81, 0xe2, 0xa0, 0x53,
  0xf9, 0x87, 0xb8, 0x56, 0xe8, 0xbe, 0x6c, 0x2c, 0x5e, 0x2a, 0x8d, 0xbc,
  0x59, 0x51, 0x73, 0xa8, 0xf2, 0x23, 0x3a, 0xc6, 0x96, 0x55, 0xef, 0x4d,
  0x55, 0xd7, 0xae, 0xa3, 0x3c, 0x96, 0xb6, 0x9a, 0x4f, 0x46, 0xea, 0x04,
  0x1e, 0x14, 0x75, 0x40, 0x6c, 0xbb, 0x41, 0x88, 0x95, 0xc3, 0x8d, 0xeb,
  0xb4, 0x65, 0x8d, 0x8d, 0x3e, 0xb5, 0x63, 0xa5, 0x5a, 0x84, 0x1c, 0xc5,
  0xe8, 0xf7, 0x8a, 0x79, 0xdb, 0xbd, 0x11, 0xc5, 0x97, 0x8d, 0xe6, 0x05,
  0xfd, 0x55, 0x93, 0xd8, 0x26, 0xb7, 0x4f, 0x41, 0xdd, 0xa9, 0x0b, 0x86,
  0xd8, 0xf9, 0xc5, 0x53, 0x4b, 0xa3, 0x61, 0x91, 0xef, 0xe4, 0x56, 0xd5,
  0xa1, 0x9d, 0xf5, 0x4a, 0x02, 0x67, 0x7e, 0x3c, 0x4a, 0x0a, 0x11, 0xd9,
  0x71, 0x28, 0x36, 0x8a, 0x86, 0xe7, 0x35, 0x69, 0x20, 0x87, 0x77, 0xbf,
  0x1e, 0xc5, 0x54, 0x58, 0x69, 0x72, 0xc4, 0x21, 0x3b, 0x59, 0x11, 0x7b,
  0xd8, 0x11, 0x4d, 0xd3, 0x21, 0x24, 0x6f, 0x67, 0x60, 0xc7, 0x8e, 0x84,
  0x56, 0x21, 0x3d, 0x1e, 0x55, 0x33, 0x04, 0x2b, 0xee, 0x24, 0xb1, 0x86,
  0x9b, 0x82, 0x17, 0x1f, 0x35, 0x3b, 0x91, 0x46, 0xce, 0x6e, 0xb3, 0xe9,
  0xaa, 0x69, 0x17, 0xd8, 0x79, 0x73, 0x12, 0xd8, 0x28, 0x4c, 0x69, 0x0b,
  0x17, 0x41, 0x8d, 0xd1, 0x33, 0xc5, 0xfc, 0x39, 0xd8, 0xd8, 0xd6, 0x20,
  0x6e, 0x2a, 0x3a, 0x3c, 0xff, 0x22, 0x16, 0x9f, 0xd5, 0x29, 0x57, 0x19,
  0x7b, 0x54, 0x5d, 0xaa, 0x42, 0xf4, 0xf3, 0x86, 0x46, 0xab, 0xe8, 0xd7,
  0x5f, 0xb3, 0xef, 0xcd, 0xfb, 0xb8, 0xed, 0x05, 0x2a, 0x6e, 0xb9, 0x3a,
  0xb8, 0xca, 0xc1, 0x97, 0xd1, 0x14, 0xdd, 0x30, 0xa8, 0x6b, 0x43, 0xdd,
  0x30, 0xe4, 0xf5, 0x55, 0xdd, 0xfc, 0xc0, 0x1d, 0x7a, 0x7c, 0x76, 0xfd,

  0xd4, 0xf3, 0x66, 0x93, 0xc4, 0xc3, 0x8f, 0x2c, 0xc7, 0x0f, 0x56, 0xf1,
  0xb1, 0x9a, 0x3c, 0x36, 0x7f, 0x7c, 0x4b, 0x7f, 0x5c, 0xb0, 0x5f, 0x40,
  0x20, 0xfb, 0xd8, 0x0f, 0x1b, 0x92, 0x36, 0x41, 0x2e, 0x24, 0x3e, 0x6e,



  0x03, 0x32, 0xb5, 0xa8, 0x0c, 0x92, 0xf0, 0xfd, 0x1c, 0xd4, 0x12, 0xac,



  0x1a, 0x1d, 0x66, 0xc0, 0xa5, 0xc9, 0x61, 0x90, 0x52, 0xfe, 0x07, 0x3c,



  0x3a, 0xc6, 0x7b, 0x1b, 0xc0, 0xe7, 0x34, 0xe6, 0x86, 0xad, 0x65, 0xac,
  0x3a, 0xd5, 0x6c, 0xd5, 0xdf, 0x29, 0x50, 0x61, 0xeb, 0xe4, 0x0d, 0x07,
  0xd0, 0xd4, 0x0a, 0x25, 0x40, 0x97, 0xd0, 0xc1, 0xee, 0x69, 0xba, 0x68,
  0xcc, 0xcf, 0xf2, 0x9e, 0x29, 0xf4, 0x2f, 0x19, 0xd2, 0x5d, 0xfe, 0x08,
  0x21, 0x6d, 0xfb, 0xdf, 0x7b, 0x85, 0xda, 0x6c, 0xbe, 0xf1, 0xda, 0x25,
  0x91, 0x14, 0x36, 0x3d, 0x6a, 0x87, 0x4e, 0xc1, 0x8f, 0x5a, 0xee, 0xc0,
  0x6a, 0x49, 0xcf, 0x3c, 0x17, 0xdc, 0x94, 0x92, 0x7a, 0x7a, 0x80, 0x2d,
  0x7c, 0x64, 0x9f, 0x0c, 0xa5, 0x34, 0x65, 0x0b, 0x0a, 0x7d, 0x59, 0xc9,
  0xc8, 0x20, 0x61, 0xa4, 0x59, 0xd1, 0xe7, 0x86, 0xf1, 0xe1, 0x66, 0xa4,
  0xbd, 0x91, 0x94, 0xe5, 0xf4, 0xad, 0x7f, 0x0b, 0xa2, 0x9d, 0xf5, 0x5d,


  0x31, 0xbd, 0x7a, 0xf5, 0x76, 0x1c, 0x7f, 0xbd, 0xbb, 0x38, 0x3c, 0x6d,
  0xb4, 0x10, 0xa2, 0x05, 0x36, 0x39, 0x05, 0x23, 0x93, 0xdc, 0x67, 0x87,
  0xde, 0x6f, 0xe3, 0xc3, 0xb5, 0x5f, 0xb1, 0xae, 0x40, 0xd2, 0x2c, 0x98,
  0x8b, 0x8b, 0xe2, 0x89, 0x3a, 0x94, 0x61, 0x4a, 0x77, 0x81, 0xbd, 0x1e,
  0xf1, 0xe1, 0x9a, 0x2b, 0x8a, 0x16, 0x19, 0x22, 0x90, 0x11, 0x2b, 0x2f,
  0x01, 0xad, 0x4b, 0xd7, 0x68, 0xe7, 0xa3, 0x7f, 0xfc, 0x9c, 0x63, 0x3e,

  0x31, 0x16, 0x6d, 0x16, 0x09, 0x2e, 0x06, 0x3b, 0x64, 0xe3, 0x34, 0x2e,
  0xf6, 0x6b, 0x48, 0x75, 0x4e, 0xaf, 0x33, 0x95, 0x0e, 0x84, 0x58, 0xf1,
  0xa3, 0xaa, 0x6f, 0x49, 0x66, 0x4f, 0xf6, 0xbf, 0xfe, 0x2a, 0x94, 0x9e,
  0xaf, 0xde, 0xf6, 0x7c, 0x8e, 0x7e, 0x33, 0xd4, 0x5a, 0x45, 0xd1, 0x08,
  0x3c, 0x85, 0x3e, 0xdc, 0x0b, 0x01, 0x5a, 0x8e, 0x4f, 0x40, 0x51, 0x98,
  0xef, 0xe1, 0x12, 0x04, 0x3f, 0xcf, 0x7f, 0xac, 0x7d, 0x50, 0x2a, 0x06,
  0xe2, 0x9f, 0xe2, 0x32, 0x0c, 0xce, 0xf0, 0x4b, 0xde, 0x71, 0x14, 0xf7,
  0x4c, 0x14, 0xe1, 0xed, 0x75, 0x67, 0x14, 0x1f, 0x8e, 0xf8, 0x5b, 0x0c,
  0xf0, 0x8a, 0xd8, 0xc2, 0x3e, 0xff, 0xb1, 0xb3, 0x6f, 0x53, 0xd3, 0x6c,
  0xc1, 0x29, 0xae, 0xa9, 0x91, 0xe0, 0xa1, 0x82, 0x50, 0xe4, 0xb7, 0x63,
  0xe4, 0x13, 0xf4, 0x50, 0x33, 0x12, 0x0f, 0x38, 0xe3, 0xc0, 0x4e, 0x8e,
  0xe6, 0xa9, 0x9a, 0x58, 0x74, 0x26, 0x63, 0x76, 0xdf, 0xdd, 0x47, 0x4c,
  0x79, 0x24, 0x9b, 0x6e, 0x1d, 0xaa, 0xe7, 0x1b, 0xa3, 0x24, 0x91, 0x70,
  0x7d, 0x30, 0x91, 0xea, 0x0b, 0xc9, 0xd6, 0xc4, 0x88, 0x6b, 0x0f, 0xa4,
  0x87, 0x55, 0xec, 0xc7, 0x5c, 0x20, 0x13, 0x1f, 0xee, 0xc9, 0xe7, 0x4f,
  0x1e, 0x6f, 0x6f, 0x0f, 0xd4, 0x57, 0x25, 0x09, 0x32, 0x13, 0x94, 0x7b,

  0xe5, 0xc4, 0xb9, 0xb8, 0x19, 0xbb, 0xd9, 0xe2, 0x2b, 0x30, 0x06, 0xeb,
  0x33, 0x8a, 0x0f, 0x47, 0x72, 0x4c, 0xdf, 0xa3, 0x43, 0x24, 0x13, 0x1c,
  0x0c, 0xdd, 0x1a, 0xc2, 0x24, 0x6c, 0x32, 0x7e, 0xc0, 0xc6, 0x5c, 0x7a,





  0xb9, 0x02, 0x1c, 0x29, 0xce, 0xc3, 0x48, 0x8e, 0x25, 0x0e, 0x17, 0xa7,
  0x2a, 0x69, 0xc3, 0x44, 0xd0, 0x33, 0x16, 0x7b, 0xf8, 0x03, 0xa5, 0x95,
  0x57, 0xda, 0x20, 0xfa, 0x6c, 0x35, 0x99, 0x1b, 0x19, 0x34, 0x5e, 0x5d,
  0x5c, 0x98, 0xd3, 0x3e, 0xc9, 0xa5, 0xd3, 0x37, 0xeb, 0xe0, 0x92, 0xdc,
  0xd0, 0x27, 0x73, 0xb0, 0xee, 0x36, 0xa1, 0x49, 0xae, 0xa7, 0x2b, 0x0f,
  0x17, 0xad, 0x2d, 0xd9, 0x58, 0xf2, 0x87, 0xcc, 0x09, 0x5d, 0x0c, 0xfb,
  0x16, 0x76, 0x9b, 0xd5, 0xa1, 0x19, 0xf7, 0x86, 0xe2, 0xb6, 0x46, 0x60,
  0x3f, 0xf8, 0xe8, 0x6d, 0x4b, 0xed, 0x76, 0xca, 0xae, 0xd5, 0x3b, 0x6f,
  0x48, 0xef, 0x04, 0xc4, 0x0f, 0xc5, 0x32, 0x92, 0x17, 0xac, 0x61, 0xf6,
  0xf7, 0x58, 0x56, 0xa8, 0x05, 0x5f, 0x17, 0x85, 0x56, 0x0f, 0xbf, 0x7f,
  0x4a, 0xdd, 0x15, 0x25, 0x09, 0x73, 0x9e, 0x51, 0xac, 0x11, 0xfc, 0x31,


  0xc4, 0x3c, 0xa9, 0xd8, 0x3f, 0xc9, 0x63, 0x88, 0xef, 0x43, 0x3c, 0xf8,
  0xc8, 0xad, 0x4b, 0x81, 0xd9, 0xc4, 0x5e, 0x20, 0xc6, 0x0a, 0x62, 0x9f,
  0x97, 0xa1, 0x9d, 0xdb, 0x80, 0x27, 0x48, 0x4a, 0x6d, 0x71, 0x97, 0x78,

  0x71, 0x1e, 0x05, 0x73, 0xa8, 0x5b, 0x5f, 0x0a, 0x5c, 0x37, 0x54, 0xdb,
  0x1d, 0xe8, 0x24, 0x0d, 0x6c, 0xe2, 0x0d, 0x9e, 0xd1, 0x06, 0x8a, 0xd7,
  0x35, 0x7e, 0x8e, 0xec, 0x2b, 0xb5, 0x1a, 0x58, 0xef, 0xd6, 0xb1, 0xc5,
  0x43, 0x99, 0x46, 0x62, 0xea, 0x3a, 0xc7, 0x8d, 0x2f, 0x35, 0x93, 0x6b,
  0x43, 0x53, 0x00, 0x3a, 0x8d, 0xef, 0x65, 0x4c, 0x19, 0x32, 0x82, 0xe7,
  0xc0, 0x69, 0x11, 0x48, 0x52, 0xa7, 0x53, 0x33, 0x43, 0x0e, 0x37, 0xa2,
  0x0a, 0xad, 0xdd, 0x00, 0xdb, 0xc1, 0xb2, 0x65, 0xf6, 0xe9, 0x27, 0x5c,
  0xd4, 0x8f, 0xd2, 0xbb, 0x9b, 0xbc, 0x59, 0x85, 0x4c, 0x77, 0xa2, 0xe8,
  0xa3, 0xc0, 0xbf, 0x80, 0x98, 0xa6, 0xc3, 0x70, 0x20, 0x15, 0x30, 0xf3,
  0x28, 0xe1, 0x93, 0x5a, 0xb9, 0xd6, 0x96, 0x47, 0x90, 0xf3, 0x73, 0x5e,
  0xde, 0x04, 0x19, 0xe2, 0x64, 0x61, 0xd8, 0xd9, 0xb5, 0xab, 0xeb, 0xcc,
  0xdb, 0xbf, 0xff, 0x87, 0xfe, 0xf2, 0x03, 0xed, 0xd4, 0x3f, 0x75, 0xa7,

  0x34, 0xe9, 0x2e, 0x0d, 0x40, 0x18, 0x60, 0x5b, 0x27, 0xbf, 0xc7, 0xae,
  0xfc, 0x95, 0xb2, 0x9a, 0x78, 0x6b, 0x08, 0xff, 0x08, 0x03, 0xfe, 0x7e,

  0x64, 0xf5, 0x68, 0x19, 0x24, 0xa5, 0xaa, 0x72, 0x28, 0xfb, 0x93, 0xbb,
  0xc0, 0x25, 0x45, 0x64, 0xf8, 0x63, 0x31, 0x00, 0x90, 0xb3, 0x31, 0xe9,
  0x08, 0x03, 0x86, 0x5b, 0xf5, 0xf2, 0x29, 0xfe, 0x58, 0x09, 0x9a, 0x91,



  0xb1, 0x65, 0xcc, 0xcc, 0xc9, 0xd0, 0xe3, 0x9f, 0xc7, 0x0d, 0x0b, 0x4d,
  0x6a, 0x11, 0x6f, 0x4a, 0x0b, 0xe0, 0xca, 0x8c, 0x43, 0x0d, 0xe8, 0xd5,
  0x10, 0x9f, 0x28, 0xb6, 0x0c, 0xa6, 0x6a, 0x9e, 0xee, 0x9e, 0x3d, 0x10,
  0x60, 0x04, 0x7a, 0x48, 0x5f, 0xe6, 0x96, 0x70, 0x36, 0x47, 0xe3, 0xf7,
  0xff, 0xe0, 0x44, 0xc0, 0x7f, 0x86, 0xba, 0xef, 0xe9, 0xf9, 0xd1, 0x01,
  0xa6, 0xf4, 0xfb, 0x61, 0x7d, 0xb7, 0x98, 0x94, 0x73, 0xb9, 0x78, 0xb4,
  0xf9, 0x66, 0x03, 0xf5, 0x67, 0x4c, 0x25, 0x88, 0xd5, 0x0d, 0x3d, 0x78,
  0x94, 0x41, 0xb4, 0xf3, 0x05, 0xd9, 0x61, 0xe5, 0x94, 0xeb, 0x65, 0xa9,
  0x70, 0xc1, 0xdc, 0xbc, 0xdf, 0x27, 0x8a, 0x78, 0xc2, 0x5d, 0x6f, 0xa5,
  0xbf, 0xb1, 0x78, 0x54, 0xb5, 0x04, 0x24, 0x1a, 0x02, 0x5a, 0x4f, 0xc7,
  0x96, 0xa7, 0x47, 0x81, 0x65, 0x88, 0x5f, 0x98, 0x69, 0x7e, 0x40, 0x49,
  0xa6, 0x98, 0xb9, 0x2f, 0xf9, 0x67, 0xc3, 0x73, 0xfc, 0x4c, 0xf3, 0x68,
  0x04, 0xca, 0x80, 0x32, 0x33, 0xa4, 0xf8, 0x64, 0x10, 0x96, 0x3f, 0x27,
  0xb1, 0xd4, 0x3c, 0x4a, 0x7c, 0x37, 0x7c, 0x26, 0x98, 0xa7, 0xde, 0xea,
  0x0f, 0x19, 0xe0, 0x7e, 0xf3, 0xeb, 0x6c, 0xfd, 0x68, 0xe8, 0x1f, 0x64,
  0x18, 0xf3, 0x22, 0x95, 0x64, 0x36, 0xce, 0x5e, 0xb3, 0xf7, 0x49, 0x41,
  0xd7, 0x90, 0xdb, 0x6c, 0x4e, 0x7b, 0x74, 0xdf, 0x70, 0xb4, 0xa7, 0x5a,
  0xb5, 0x21, 0x99, 0x3f, 0xe4, 0x5f, 0xcb, 0x2f, 0xac, 0x86, 0xd1, 0x50,
  0x41, 0x0e, 0xa5, 0x1c, 0xd1, 0xc8, 0xf7, 0xac, 0xb5, 0xd4, 0x10, 0x85,
  0xb0, 0x2d, 0x0e, 0x57, 0x9e, 0x0e, 0x12, 0x17, 0xdd, 0xd6, 0xa4, 0xbe,
  0x84, 0x02, 0xe1, 0xeb, 0x87, 0xb3, 0x51, 0x72, 0x1b, 0x9a, 0x3a, 0x46,
  0x33, 0xf0, 0x92, 0xd3, 0x0f, 0x31, 0x4f, 0xaa, 0x63, 0x59, 0x90, 0xd7,
  0x36, 0x12, 0x67, 0x4e, 0x22, 0xdc, 0x1e, 0xc1, 0xd1, 0xff, 0xf4, 0xa2,
  0xed, 0xec, 0xda, 0x1a, 0x7a, 0x51, 0x76, 0xa3, 0x8b, 0x30, 0xa4, 0xe6,
  0xfa, 0xe1, 0x38, 0xff, 0xfe, 0xe9, 0x68, 0x77, 0x3b, 0x38, 0xd4, 0x66,
  0xf9, 0xc1, 0xd0, 0x46, 0x75, 0xf7, 0x81, 0xb2, 0x54, 0x71, 0x66, 0x1a,
  0x55, 0xc0, 0x0f, 0xb0, 0xb3, 0x8c, 0x8d, 0xb0, 0x5a, 0xd2, 0x38, 0x20,

  0xf3, 0x79, 0xc9, 0x06, 0xdb, 0x7d, 0xcb, 0x68, 0xe7, 0x83, 0xfa, 0x10,
  0x3d, 0x5b, 0xed, 0x0e, 0x73, 0x8f, 0x83, 0x89, 0x51, 0x02, 0xca, 0x07,
  0x44, 0xae, 0x2d, 0x31, 0x19, 0xb9, 0x97, 0x55, 0xf9, 0xd4, 0x6f, 0xb7,
  0x8a, 0x07, 0x40, 0x52, 0x8c, 0x3c, 0x4a, 0xa1, 0xec, 0x28, 0xc4, 0x72,



  0xe7, 0x7f, 0xf0, 0xff, 0x7a, 0x21, 0x2b, 0x9b, 0xee, 0x88, 0xd3, 0x36,



  0x13, 0xa5, 0xcc, 0x1a, 0x97, 0x81, 0x70, 0x7c, 0xcf, 0x3a, 0x81, 0xe1,
  0xbe, 0xcf, 0x68, 0x78, 0xf3, 0x3c, 0xad, 0xed, 0x04, 0x79, 0x05, 0xb8,
  0x51, 0x58, 0x2f, 0x90, 0xeb, 0xae, 0x82, 0xda, 0xaf, 0x24, 0x12, 0x35,
  0xe2, 0x58, 0xd3, 0x45, 0x39, 0xea, 0xd9, 0x19, 0x4e, 0x1c, 0xee, 0xee,
  0x4c, 0xff, 0x86, 0xf0, 0x9a, 0xc3, 0xe0, 0x63, 0xd7, 0xad, 0xc0, 0x1b,
  0xbb, 0x25, 0x41, 0x3c, 0x28, 0xe7, 0xdb, 0x7c, 0x5b, 0x40, 0x0b, 0x1e,
  0x48, 0x1d, 0x18, 0xcc, 0x3d, 0xb7, 0x76, 0xab, 0xdd, 0xbd, 0xb9, 0xe7,
  0x9c, 0x2d, 0x0a, 0x08, 0x73, 0x34, 0xfa, 0x59, 0xe2, 0xa0, 0x41, 0x38,
  0xb9, 0x0f, 0x85, 0x74, 0x96, 0xf5, 0xcc, 0xef, 0x92, 0x28, 0x7a, 0xff,

  0x9a, 0xcf, 0x3f, 0xd9, 0x8d, 0xd0, 0x3f, 0xd2, 0x87, 0x3f, 0xe4, 0x4b,

  0x8f, 0x67, 0x1d, 0x9f, 0xd1, 0x61, 0xa1, 0xee, 0x45, 0xca, 0x26, 0x38,
  0xc7, 0x98, 0x52, 0x2e, 0xb4, 0x07, 0x16, 0xe7, 0x2a, 0xdd, 0xbb, 0x99,

  0x53, 0xc6, 0x57, 0x60, 0x87, 0x80, 0x0f, 0x44, 0x61, 0xec, 0x5b, 0xd1,
  0xd2, 0xc4, 0x41, 0x70, 0x7c, 0x76, 0xfd, 0x38, 0x0c, 0x44, 0x25, 0x11,
  0x77, 0x99, 0xbf, 0xa4, 0xfd, 0xe7, 0xbd, 0x4b, 0xe2, 0x7e, 0x1d, 0xb2,



  0x24, 0x5e, 0x80, 0xdf, 0x64, 0x47, 0x16, 0xa2, 0xeb, 0xf0, 0x27, 0x7a,
  0xcf, 0x92, 0xdc, 0x22, 0xee, 0x9d, 0x89, 0xf9, 0xd6, 0x07, 0x8b, 0x00,
  0x6f, 0x64, 0x33, 0x7f, 0x9a, 0xbe, 0x6d, 0x14, 0x13, 0x87, 0x0d, 0x4f,



  0xe8, 0x88, 0x4a, 0xa4, 0x3c, 0x95, 0xb8, 0x46, 0x9d, 0x44, 0x14, 0xec,
  0x0e, 0x7d, 0x3d, 0x8a, 0xce, 0x41, 0xfb, 0xdc, 0xd6, 0x76, 0x0e, 0x66,
  0x0a, 0xee, 0x87, 0x7c, 0x5d, 0x48, 0xf4, 0x5d, 0x94, 0xd2, 0x93, 0xdd,
  0xce, 0xe6, 0x9e, 0x39, 0xf0, 0x15, 0xb8, 0x7f, 0x16, 0xb8, 0x46, 0x1f,
  0xea, 0x7a, 0x4e, 0xa4, 0x9e, 0x5f, 0xdc, 0x99, 0x29, 0xd5, 0xbd, 0xd0,
  0x34, 0xbe, 0x00, 0xe5, 0xe7, 0xf4, 0xb8, 0x3c, 0x83, 0x79, 0xb3, 0x86,

  0x4f, 0x73, 0x99, 0x51, 0xfa, 0x0d, 0x43, 0x8f, 0xdf, 0x47, 0x8c, 0x24,
  0x87, 0xf1, 0x79, 0x17, 0xe8, 0x13, 0x3e, 0x61, 0x95, 0x85, 0x51, 0xb2,
  0x6b, 0x2d, 0xc1, 0x7b, 0x08, 0xa1, 0x35, 0x12, 0x0d, 0xe2, 0xa2, 0xdb,
  0xed, 0x0d, 0xa1, 0x42, 0xc4, 0x60, 0x43, 0x74, 0xf7, 0x3f, 0x40, 0x13,
  0xe0, 0x78, 0xb4, 0x64, 0x9d, 0x5b, 0x14, 0x26, 0x1a, 0x14, 0xb4, 0xa1,
  0x31, 0xe5, 0xe1, 0x09, 0x09, 0xc3, 0x79, 0x04, 0x5a, 0x3d, 0x89, 0x40,
  0x65, 0xa0, 0x95, 0x16, 0x72, 0xb0, 0xdd, 0x51, 0x6f, 0x95, 0x52, 0x51,
  0x3a, 0xa4, 0x4a, 0xd8, 0x21, 0x7e, 0x91, 0xf4, 0xba, 0x58, 0x5d, 0xba,
  0x47, 0xb3, 0x3d, 0x50, 0xad, 0x4e, 0x55, 0x35, 0xc9, 0xb1, 0x01, 0x3a,
  0x26, 0x18, 0xff, 0x94, 0xba, 0xce, 0x20, 0xd3, 0x2c, 0x5d, 0x3f, 0x9c,
  0x4e, 0x47, 0xba, 0xb1, 0xc1, 0xda, 0xba, 0x04, 0x70, 0x58, 0xd9, 0x21,
  0x25, 0x23, 0x54, 0x22, 0x3b, 0x47, 0xc2, 0xd4, 0xb2, 0xac, 0x73, 0x27,
  0x5f, 0x43, 0xc6, 0xf5, 0x2f, 0x5d, 0xef, 0x1e, 0x16, 0xd5, 0xe1, 0x42,
  0xf7, 0x09, 0xc6, 0x28, 0x63, 0x90, 0x35, 0x28, 0x8f, 0xf2, 0xd6, 0xd0,
  0xc7, 0xa3, 0x3e, 0x15, 0x8b, 0x92, 0xec, 0xd7, 0x56, 0xdc, 0x08, 0xc9,
  0x82, 0xf2, 0x8b, 0xad, 0xda, 0x81, 0x34, 0x53, 0xb1, 0xdc, 0xcc, 0x46,
  0x0c, 0xb6, 0x63, 0x38, 0x6e, 0x5d, 0x35, 0xce, 0x50, 0xb0, 0x2f, 0xb2,
  0x10, 0x8e, 0xbe, 0xf7, 0x6e, 0x10, 0x10, 0xde, 0x07, 0xdb, 0x2b, 0x84,
  0x03, 0x37, 0x65, 0x43, 0x79, 0x1e, 0x0b, 0x23, 0xcf, 0xc1, 0x0c, 0x18,
  0xd2, 0xd0, 0x31, 0x2e, 0x7d, 0x3a, 0xe2, 0xa3, 0xc3, 0x68, 0x12, 0x06,
  0x4e, 0xd6, 0x8d, 0xa6, 0x35, 0x82, 0x76, 0x28, 0x84, 0x52, 0xef, 0xb9,
  0x69, 0x84, 0x35, 0x14, 0xfd, 0xa2, 0x5e, 0x62, 0xd9, 0x53, 0xfe, 0xe4,

  0x9a, 0x15, 0x78, 0xc6, 0xfb, 0xfa, 0x2f, 0xfa, 0x2c, 0x22, 0xfe, 0x69,
  0x49, 0xff, 0x4f, 0x1e, 0xb6, 0x75, 0x9a, 0xc1, 0x1e, 0x8e, 0x45, 0x6d,
  0x52, 0xdc, 0x39, 0xd0, 0x58, 0x29, 0x25, 0x12, 0x5c, 0x7a, 0x8d, 0x5c,
  0xb8, 0xb9, 0x8e, 0xb3, 0x69, 0x0c, 0xef, 0xac, 0x57, 0x84, 0xc0, 0x7d,
  0x71, 0x9f, 0x2c, 0x67, 0x64, 0x2a, 0xf6, 0x20, 0xd9, 0xf1, 0x08, 0xba,
  0xb2, 0xdd, 0x61, 0xa6, 0x67, 0x56, 0x76, 0x89, 0xd8, 0x5c, 0x9d, 0x96,
  0x16, 0x3e, 0xfc, 0x4a, 0xb3, 0xe2, 0xd1, 0x1e, 0x32, 0xa7, 0x7f, 0x55,
  0xae, 0x75, 0x25, 0x19, 0x44, 0x95, 0x95, 0x30, 0x0f, 0x62, 0xf6, 0xeb,
  0x45, 0x59, 0x4b, 0x5a, 0xdd, 0x7f, 0x67, 0xfb, 0x44, 0xd9, 0x5e, 0x94,
  0x85, 0x30, 0x62, 0xb8, 0xfe, 0xef, 0x35, 0x29, 0xce, 0x10, 0x15, 0xcb,
  0x32, 0x27, 0x92, 0x2b, 0x06, 0x62, 0x5b, 0xde, 0xc0, 0xb6, 0x74, 0x7e,
  0xc8, 0x78, 0xdd, 0x6d, 0x12, 0xc9, 0x40, 0x87, 0xeb, 0x4a, 0x9d, 0x2a,
  0x6c, 0x44, 0xa8, 0x67, 0x84, 0x5d, 0x23, 0xa3, 0x87, 0x33, 0xe4, 0xa7,
  0x8f, 0xe2, 0x6b, 0xc0, 0x8c, 0x3e, 0xf1, 0x1a, 0xfa, 0xfd, 0x42, 0xa3,
  0xc4, 0xc7, 0x8c, 0x5d, 0x3f, 0x9c, 0xe4, 0xc9, 0xb3, 0x2b, 0xc9, 0x6f,
  0x89, 0xd6, 0x02, 0x06, 0x27, 0x3f, 0x70, 0xc2, 0xce, 0xda, 0x7b, 0x2c,
  0x1e, 0xbc, 0xa0, 0x89, 0xd5, 0x5c, 0x60, 0xda, 0xb6, 0x1c, 0xa2, 0x5b,




  0x46, 0x42, 0xe1, 0x43, 0xba, 0x5c, 0x8a, 0xb4, 0xb9, 0x9f, 0xe4, 0x13,
  0x86, 0x85, 0xe4, 0x26, 0xc0, 0xd4, 0x86, 0x0a, 0x00, 0x9c, 0x4d, 0x59,
  0x7e, 0x64, 0xa7, 0x2a, 0xa7, 0x60, 0x53, 0x31, 0x64, 0x88, 0x43, 0x1d,
  0x90, 0xfc, 0x5c, 0xef, 0xcd, 0xce, 0x78, 0xfc, 0xcd, 0x4e, 0xd6, 0x4c,

  0x55, 0xea, 0xed, 0xb8, 0xec, 0x3f, 0xb1, 0xbe, 0xef, 0xd7, 0x62, 0x21,
  0x79, 0xd1, 0x0f, 0x90, 0x88, 0xdf, 0xfa, 0xb5, 0x1f, 0x40, 0xfb, 0xd8,
  0x84, 0xb6, 0x2d, 0xfa, 0x09, 0x96, 0x49, 0x68, 0xda, 0xfa, 0x91, 0xb6,
  0x4b, 0x01, 0x93, 0xde, 0x62, 0x44, 0x5a, 0x63, 0xa7, 0xde, 0x7f, 0xb3,
  0xdd, 0xe2, 0xa2, 0x4b, 0x21, 0xd7, 0x0a, 0xa5, 0xfc, 0xac, 0x96, 0xff,
  0x4b, 0xce, 0x13, 0x9e, 0x1d, 0x8e, 0xfd, 0x22, 0x41, 0xea, 0xfe, 0x09,
  0x2f, 0xc9, 0x87, 0xc1, 0x6e, 0x8a, 0xfb, 0x67, 0xfc, 0xe0, 0x09, 0x3f,
  0x6c, 0xc6, 0x12, 0x18, 0x80, 0x0f, 0x4d, 0x27, 0x81, 0x39, 0xc3, 0x3d,
  0x2d, 0x28, 0xe2, 0x54, 0x13, 0x70, 0x99, 0x17, 0x0f, 0x71, 0xee, 0xd9,
  0x14, 0x1d, 0xf2, 0xb7, 0x52, 0x03, 0x7b, 0x3b, 0xa8, 0x24, 0x00, 0xd7,
  0x92, 0x2b, 0x7c, 0x59, 0xde, 0x3b, 0xbb, 0x54, 0x60, 0xbc, 0x49, 0x2c,
  0x78, 0xce, 0xf7, 0xa9, 0xd2, 0x0f, 0xe5, 0xf1, 0xe4, 0xd3, 0x15, 0xe5,
  0x1f, 0x47, 0xfa, 0x59, 0x07, 0x6e, 0x2c, 0xa3, 0xef, 0x71, 0xad, 0xd5,
  0x35, 0x85, 0xe5, 0x7b, 0xce, 0xc2, 0xea, 0xf5, 0xf7, 0x6d, 0x36, 0xa5,
  0x5e, 0xcf, 0xe7, 0xd6, 0x0e, 0xb8, 0x57, 0x24, 0x19, 0x71, 0xb6, 0xd4,
  0xed, 0x21, 0xba, 0x00, 0x99, 0x30, 0x99, 0x0e, 0xf4, 0x62, 0x0c, 0x92,
  0x07, 0x93, 0x02, 0x42, 0x0d, 0xba, 0xb5, 0x0e, 0x94, 0x18, 0x67, 0x49,
  0xb1, 0x76, 0xfe, 0x65, 0x3a, 0xb5, 0x00, 0x46, 0xf7, 0xcd, 0x2e, 0xe5,
  0x3e, 0x76, 0x9d, 0x5d, 0xe0, 0x3c, 0xa2, 0x96, 0x46, 0x81, 0xec, 0xa8,
  0x07, 0x89, 0xf3, 0x5c, 0xba, 0x79, 0xdb, 0xd0, 0x9e, 0xbf, 0x5b, 0xb5,
  0xe3, 0xcf, 0x0f, 0x10, 0x78, 0x51, 0x83, 0x1c, 0x53, 0xc5, 0xcc, 0x1f,


  0x7e, 0x7d, 0x3e, 0xc1, 0x85, 0xe7, 0x14, 0x35, 0x52, 0x49, 0xbb, 0x17,
  0x47, 0x5b, 0x39, 0x3c, 0xd4, 0x15, 0x82, 0x0c, 0x7d, 0x75, 0x92, 0xdb,
  0x5c, 0xb7, 0x0e, 0x8b, 0xe0, 0x98, 0xce, 0xbc, 0x2e, 0xef, 0xd7, 0x02,
  0x71, 0x02, 0x5e, 0xfa, 0x3a, 0x41, 0xf7, 0xb3, 0x03, 0xd3, 0xd8, 0x41,
  0x74, 0x71, 0x1a, 0x25, 0x9a, 0xfb, 0x5d, 0x8a, 0xe6, 0x0c, 0xe3, 0x37,
  0x46, 0xac, 0x82, 0xb6, 0x91, 0x10, 0xee, 0xb2, 0xc5, 0xa1, 0x45, 0xde,
  0x1e, 0x52, 0x6c, 0x1f, 0x42, 0x44, 0xe4, 0xf0, 0x8c, 0xdc, 0x55, 0x34,
  0x45, 0x50, 0xa3, 0x8c, 0xbf, 0x8c, 0xfa, 0x4c, 0xeb, 0x34, 0xcd, 0x38,
  0xfe, 0x44, 0xaf, 0xbb, 0x72, 0x0e, 0x58, 0xa1, 0xa4, 0x4f, 0x0e, 0xef,

  0x73, 0xb5, 0x23, 0x28, 0x41, 0x51, 0x09, 0xe4, 0x90, 0xa2, 0x09, 0x36,
  0x85, 0x25, 0x34, 0xfc, 0x29, 0x3e, 0x09, 0x85, 0xf1, 0x3f, 0x58, 0x3f,
  0x9c, 0x36, 0x00, 0xf9, 0x84, 0x38, 0xa6, 0xb7, 0xa9, 0xb9, 0x03, 0xb1,
  0xfa, 0x80, 0x3a, 0x85, 0x14, 0x72, 0x4d, 0x57, 0x38, 0x60, 0xd2, 0xee,
  0x97, 0xdb, 0x74, 0xbb, 0xb3, 0xd7, 0x4d, 0xa4, 0x84, 0xc4, 0xa8, 0xf5,
  0x88, 0x6f, 0xb3, 0xb0, 0x30, 0x16, 0x75, 0x8a, 0xea, 0x11, 0x3a, 0xe5,
  0xec, 0xb6, 0xe1, 0xf8, 0x02, 0x7e, 0x47, 0x73, 0xc9, 0x8d, 0x5e, 0x47,
  0x21, 0x6d, 0x07, 0x90, 0x1a, 0xa9, 0xaa, 0x90, 0x3a, 0x56, 0x7c, 0xcd,
  0xfa, 0xeb, 0x6e, 0x67, 0x97, 0xa3, 0xb2, 0xca, 0x49, 0xde, 0x20, 0x91,
  0x53, 0x07, 0x23, 0xba, 0x1f, 0x80, 0x9f, 0x90, 0xf5, 0x18, 0x1b, 0x4e,
  0x23, 0x6b, 0x49, 0xc2, 0xa1, 0xb5, 0x60, 0xe8, 0x05, 0xe8, 0x95, 0x7e,
  0x67, 0x47, 0x15, 0xe8, 0x84, 0x58, 0x7d, 0xb9, 0xd6, 0xe0, 0xd8, 0x4e,
  0xb1, 0x9a, 0xf2, 0x62, 0x57, 0xeb, 0x16, 0x4a, 0x31, 0x58, 0x43, 0x78,
  0x15, 0x57, 0xb2, 0x07, 0xbe, 0xa8, 0xbc, 0xae, 0x57, 0x38, 0xb0, 0xd7,
  0xc7, 0x27, 0x47, 0x36, 0xab, 0xed, 0x7f, 0xee, 0x8c, 0x68, 0xcb, 0xab,
  0x69, 0x90, 0xc3, 0xc7, 0x35, 0xa4, 0x5e, 0x41, 0xb0, 0x14, 0x99, 0x7e,

  0x3b, 0xe0, 0xbe, 0x9a, 0xf8, 0x71, 0xab, 0xc2, 0xf4, 0xe8, 0xed, 0x77,
  0xc7, 0xef, 0x4e, 0xdf, 0xbe, 0x39, 0x7a, 0x7b, 0xfe, 0x99, 0xc7, 0xee,
  0x62, 0x5d, 0x23, 0xea, 0x30, 0xb9, 0x20, 0xa7, 0x70, 0xd0, 0x0d, 0x8a,
  0x00, 0xb9, 0x77, 0x8b, 0x59, 0xa9, 0xfc, 0x6b, 0xe4, 0x0f, 0xe7, 0x3d,
  0xa4, 0x9e, 0x7d, 0xca, 0x24, 0x59, 0x92, 0x67, 0x67, 0x46, 0x71, 0xd5,
  0x11, 0xc7, 0x02, 0x6c, 0x5f, 0x62, 0x6a, 0x5c, 0x71, 0x4b, 0x40, 0xe1,
  0x48, 0x05, 0xa6, 0xda, 0xb1, 0xcf, 0xec, 0x96, 0x70, 0x10, 0xd0, 0xc5,
  0x4a, 0x5b, 0x93, 0x70, 0xc4, 0xfd, 0x5e, 0x0a, 0x40, 0x8b, 0x24, 0xba,
  0x1a, 0x45, 0xbf, 0x83, 0x42, 0x80, 0xcf, 0x5e, 0x71, 0x1e, 0x0e, 0x47,
  0x5f, 0x98, 0x49, 0x78, 0x39, 0xa0, 0x1e, 0xea, 0xb0, 0xd7, 0x42, 0xb9,
  0x8b, 0x34, 0xec, 0xad, 0xe2, 0x2f, 0xea, 0x2c, 0x3a, 0xd8, 0xd9, 0xf9,
  0x09, 0xdd, 0xbb, 0xff, 0x24, 0xed, 0xbb, 0x43, 0xc4, 0xd4, 0xda, 0x9b,
  0x86, 0x2b, 0x19, 0xd2, 0xea, 0x42, 0xa2, 0x5b, 0xbb, 0x9d, 0x70, 0x03,
  0x7f, 0x38, 0x7b, 0x77, 0xfa, 0xc3, 0x9f, 0x7f, 0xe5, 0x4f, 0x78, 0xc9,
  0x66, 0x7f, 0xa1, 0x1c, 0x4c, 0x1d, 0xfc, 0xa7, 0x5f, 0xfd, 0x6b, 0xed,
  0xe1, 0x07, 0x12, 0x69, 0xe7, 0x56, 0xe3, 0xa1, 0x42, 0xc6, 0xc5, 0xdb,
  0x0c, 0xa5, 0xef, 0x52, 0xa2, 0x13, 0xcf, 0xc7, 0x61, 0x93, 0x81, 0x20,
  0xe2, 0xea, 0x36, 0x81, 0xa6, 0x21, 0xb0, 0xf6, 0x88, 0x4b, 0x8a, 0x5d,
  0x06, 0xaf, 0x56, 0x95, 0x53, 0xe5, 0x38, 0xd7, 0x96, 0x23, 0x1f, 0xd5,

  0xee, 0xc7, 0xe1, 0xc9, 0xc9, 0xaf, 0xba, 0x09, 0xe8, 0x80, 0xec, 0xd6,
  0x32, 0xb4, 0x1a, 0xaa, 0x3c, 0x7d, 0x0f, 0x70, 0xed, 0xdb, 0x53, 0x99,
  0xcd, 0x0b, 0x28, 0xc7, 0xc3, 0x3a, 0x33, 0x2a, 0x6d, 0x4a, 0xf1, 0x7e,
  0x05, 0x2e, 0xa7, 0x89, 0xd5, 0x3b, 0x9c, 0x38, 0x19, 0xe0, 0xa8, 0xe3,

  0x21, 0x24, 0x0b, 0xc0, 0x84, 0x42, 0x5e, 0x25, 0xef, 0x26, 0x97, 0xc5,
  0xa1, 0x6e, 0xa1, 0xb4, 0xb8, 0x44, 0xdc, 0x8f, 0x9d, 0xfb, 0x81, 0x5f,

  0x44, 0xda, 0x3d, 0x33, 0x3a, 0x04, 0xc9, 0xdb, 0x2a, 0xaf, 0x3f, 0xa2,
  0xa8, 0x83, 0x6e, 0x28, 0x14, 0x24, 0xad, 0xdf, 0x27, 0x95, 0x17, 0x73,
  0x1a, 0x31, 0xc4, 0x88, 0xab, 0xa6, 0xcb, 0xeb, 0xd8, 0xec, 0xd0, 0x37,
  0x8b, 0x45, 0x31, 0xb9, 0x51, 0xd9, 0x09, 0x9d, 0xb6, 0x4a, 0xbb, 0x04,
  0xfc, 0x9d, 0x93, 0xa8, 0x6a, 0x8b, 0x33, 0x10, 0x2b, 0x4b, 0x1f, 0x68,
  0xb9, 0x31, 0x3d, 0xc0, 0x9f, 0x6e, 0xea, 0x6c, 0x7e, 0x11, 0xaf, 0xb0,
  0x8f, 0x72, 0x0b, 0xa9, 0xf0, 0xb7, 0x0d, 0xe9, 0x95, 0x58, 0xe9, 0xb0,

  0x32, 0x60, 0xd2, 0x50, 0x68, 0x21, 0xf4, 0xd7, 0x09, 0x1d, 0xb6, 0xf2,
  0x0c, 0x6e, 0x5d, 0x1b, 0xb1, 0xc4, 0xab, 0x66, 0xe5, 0x3c, 0x31, 0x3d,
  0xdb, 0x2f, 0x66, 0x61, 0xc1, 0x94, 0xe1, 0x48, 0x3e, 0x7e, 0x87, 0x4a,
  0xde, 0xe1, 0x6d, 0xa2, 0xc0, 0x21, 0x7c, 0x4e, 0xad, 0x67, 0xe4, 0x37,
  0x0f, 0x19, 0x0e, 0xcd, 0x19, 0x6a, 0xca, 0x8d, 0x96, 0xa9, 0x26, 0x0d,
  0x65, 0xf7, 0x36, 0x89, 0xf8, 0xc5, 0x59, 0x09, 0x07, 0xd6, 0x4e, 0x58,
  0x27, 0xe1, 0x4d, 0x7c, 0xdd, 0x44, 0x7b, 0x67, 0x1a, 0x89, 0x0d, 0x9b,
  0xc7, 0xc8, 0x05, 0xcf, 0x20, 0x32, 0xfe, 0x78, 0x76, 0x9e, 0xd0, 0x56,
  0x79, 0x8e, 0xac, 0xc7, 0x29, 0x94, 0x56, 0x16, 0x0b, 0xc2, 0x45, 0xd3,
  0x6f, 0xfc, 0x2b, 0x23, 0x77, 0xc1, 0x96, 0xb4, 0x43, 0x09, 0xb7, 0x65,
  0xa1, 0x2e, 0xd2, 0x4e, 0xe1, 0x96, 0x24, 0xf4, 0x8f, 0x23, 0xfe, 0x42,
  0x42, 0x1d, 0x8c, 0x08, 0xb1, 0x12, 0x5b, 0x77, 0x20, 0xc5, 0xb2, 0xa8,

  0xaf, 0x9b, 0x68, 0x99, 0xb1, 0x06, 0xb7, 0x8c, 0x08, 0x9c, 0x97, 0x75,
  0x0c, 0x4e, 0x73, 0x42, 0x59, 0xf3, 0x19, 0x1a, 0xfd, 0xf0, 0x95, 0x37,
  0xff, 0x3d, 0x3f, 0x7d, 0x79, 0x7a, 0x62, 0xfe, 0x72, 0xf4, 0xfa, 0xf8,
  0x07, 0xa7, 0x15, 0x30, 0x40, 0x45, 0xab, 0x40, 0x06, 0xb8, 0x8b, 0xcf,
  0x06, 0x3e, 0x1b, 0xe2, 0x1c, 0x44, 0x4a, 0x3f, 0xe4, 0x94, 0xb8, 0x2e,
  0x85, 0x5a, 0x6e, 0xe9, 0xf1, 0x39, 0x92, 0xd3, 0x94, 0x2f, 0xea, 0xe1,
  0x8f, 0xa4, 0x02, 0xbc, 0x44, 0x5a, 0x34, 0x8f, 0x6c, 0x8b, 0x29, 0xdc,
  0x26, 0x53, 0x8d, 0x94, 0xcf, 0xe6, 0x24, 0x1b, 0xd5, 0x7d, 0x32, 0x57,
  0x58, 0xa2, 0xd6, 0xe4, 0xca, 0xca, 0x76, 0xc1, 0x6d, 0xfc, 0x0e, 0xeb,
  0x9d, 0x96, 0x36, 0x3e, 0x5e, 0x7e, 0x91, 0xf9, 0x8b, 0xb4, 0x6d, 0xd1,
  0x9b, 0x2a, 0x03, 0x57, 0x04, 0x50, 0x1d, 0x29, 0x02, 0x3e, 0xca, 0x47,
  0x87, 0x22, 0x50, 0xa1, 0x63, 0x47, 0x6c, 0xaf, 0x49, 0x36, 0x40, 0x72,
  0xf9, 0x90, 0x5b, 0x41, 0x7a, 0xbc, 0x07, 0xf1, 0x23, 0xd4, 0x1a, 0x2d,
  0x17, 0x94, 0x3a, 0x25, 0xfa, 0x03, 0xd9, 0x55, 0x1c, 0xc5, 0x10, 0x8e,
  0x7a, 0xee, 0xb5, 0x76, 0x67, 0xa9, 0x20, 0xc1, 0xa7, 0x65, 0x68, 0x5a,
  0xd1, 0x19, 0x88, 0xb2, 0xdf, 0xd6, 0x38, 0xea, 0xbe, 0x4f, 0x93, 0x89,
  0x2a, 0x7b, 0xe0, 0x3e, 0x1d, 0x64, 0x5d, 0x53, 0xd6, 0x77, 0xfd, 0x78,
  0xdd, 0x18, 0xa4, 0x11, 0xfe, 0x6d, 0x95, 0x5f, 0xa7, 0xa8, 0x2d, 0x33,
  0x97, 0x65, 0x38, 0xe4, 0x97, 0x3a, 0x63, 0xa4, 0xbf, 0x68, 0x90, 0xb4,
  0x3d, 0xca, 0x93, 0x5f, 0x32, 0xc8, 0x93, 0xce, 0x18, 0x57, 0xbf, 0x68,
  0x90, 0xa1, 0x0a, 0x08, 0xa3, 0x18, 0xff, 0x70, 0x7c, 0x9e, 0xbc, 0x3c,
  0x7d, 0xe5, 0x2e, 0xd8, 0xb9, 0xcd, 0xde, 0x4e, 0x93, 0xc9, 0xaa, 0x30,
  0x34, 0x48, 0xbd, 0x98, 0x6c, 0x77, 0x0b, 0x4e, 0x53, 0xa4, 0x1c, 0x9c,
  0x5a, 0x2b, 0xd6, 0xf2, 0x8a, 0xa1, 0x88, 0x28, 0xaf, 0x86, 0x91, 0x94,
  0xbc, 0x1a, 0x5d, 0x7a, 0x7a, 0x41, 0x40, 0x47, 0x97, 0x2a, 0x7d, 0xe9,
  0x56, 0x12, 0xd6, 0x5d, 0x5a, 0x69, 0x55, 0xe9, 0x24, 0x25, 0x30, 0xa3,

  0x82, 0x6b, 0x23, 0x8d, 0xec, 0x8c, 0x40, 0x0f, 0xeb, 0x70, 0x3e, 0x02,


  0xb1, 0xd1, 0x9d, 0xf3, 0x46, 0xa7, 0xe2, 0x67, 0x12, 0xee, 0x69, 0xae,

  0x7f, 0x8b, 0xd2, 0xa5, 0xbd, 0x1d, 0x84, 0x1f, 0xe5, 0x75, 0xcf, 0x2c,
  0x9c, 0x35, 0xa9, 0xc4, 0x85, 0xcb, 0xd9, 0xe7, 0x26, 0xd7, 0x81, 0xc4,

  0xb6, 0x43, 0xd8, 0xef, 0xec, 0x4b, 0x28, 0xc1, 0xa8, 0xe8, 0xec, 0x37,
  0x90, 0xbc, 0xb2, 0xfc, 0xef, 0x9e, 0x82, 0xfe, 0xc8, 0xea, 0x63, 0x66,
  0xe5, 0x73, 0x74, 0x8e, 0x9e, 0xf1, 0x85, 0xa8, 0xef, 0x8c, 0x50, 0xbf,
  0x85, 0x41, 0x4e, 0xf6, 0x93, 0xc0, 0x39, 0xb9, 0x37, 0x1f, 0x8b, 0x56,
  0x96, 0x58, 0xdc, 0x28, 0xb4, 0xdf, 0x5a, 0xb6, 0xa3, 0x41, 0xce, 0x6b,
  0xa1, 0x25, 0xd2, 0x08, 0x71, 0x66, 0x35, 0x75, 0xb2, 0x8e, 0x78, 0x2e,
  0x5c, 0xe2, 0x01, 0xc3, 0x37, 0x70, 0xb9, 0xb5, 0xc0, 0x6f, 0x7b, 0x6d,
  0x0a, 0x2d, 0xd8, 0x0f, 0x65, 0x26, 0x61, 0xbf, 0x86, 0xdc, 0xa3, 0x29,
  0xa8, 0x4b, 0x77, 0x15, 0x98, 0x6a, 0x71, 0xcc, 0x4a, 0x6c, 0xe0, 0x00,
  0x99, 0xbc, 0x66, 0xdf, 0x26, 0x29, 0x41, 0x3d, 0xa0, 0x35, 0x62, 0x5a,
  0x70, 0xa5, 0xa1, 0x9e, 0x40, 0xbc, 0xe6, 0xce, 0xd5, 0x3c, 0x3d, 0xe1,
  0x3f, 0x5e, 0xaa, 0xc6, 0x26, 0x65, 0x43, 0x3e, 0x63, 0x61, 0x21, 0x23,
  0xd6, 0x4d, 0x09, 0x8c, 0x0e, 0x92, 0x41, 0x58, 0x1f, 0x18, 0x64, 0xb8,
  0x09, 0x75, 0xc7, 0xc7, 0xf9, 0xb4, 0xe7, 0x2b, 0x0c, 0xe9, 0xe4, 0x3e,

  0xe2, 0xfb, 0xe4, 0x75, 0x0b, 0xe5, 0x59, 0x6f, 0xb4, 0x67, 0x5d, 0xba,
  0xf0, 0x3c, 0xfb, 0x18, 0xd1, 0x3e, 0xf9, 0xb9, 0xf8, 0x22, 0x32, 0x2a,
  0x5a, 0x14, 0xe5, 0xb9, 0xca, 0x96, 0x73, 0x59, 0x99, 0xfc, 0x04, 0x81,
  0x63, 0x78, 0x13, 0xb0, 0xcb, 0x53, 0x9d, 0xa5, 0x51, 0x87, 0x7d, 0x53,
  0xf0, 0xb9, 0x7c, 0x96, 0x9a, 0xc0, 0xb1, 0xea, 0x00, 0xdc, 0x8d, 0xdc,
  0xd2, 0x9b, 0x34, 0x9d, 0xc7, 0x8f, 0x28, 0xc1, 0x11, 0xa8, 0x0e, 0xfa,
  0x6f, 0x79, 0x23, 0x40, 0xba, 0xeb, 0xb8, 0x92, 0x69, 0xb5, 0xab, 0x8a,
  0x8b, 0x76, 0x1d, 0xb6, 0xa3, 0x82, 0xad, 0x4b, 0xfe, 0x5f, 0x45, 0x90,
  0x7c, 0x23, 0xc3, 0x8b, 0xca, 0x00, 0x7d, 0xb2, 0xbc, 0x68, 0x04, 0xfb,
  0x8b, 0xfb, 0xad, 0xf1, 0xfe, 0x5c, 0xa5, 0xc5, 0x65, 0xc6, 0xfe, 0x17,
  0x0f, 0x9e, 0x92, 0x7b, 0xf5, 0xb1, 0x38, 0x34, 0x77, 0x1d, 0x4e, 0x9e,
  0x5e, 0xf4, 0x09, 0xb7, 0x0f, 0x7b, 0xbb, 0x76, 0x1f, 0xb8, 0x0d, 0x17,

  0xaa, 0x53, 0x68, 0x17, 0xbe, 0x07, 0x22, 0xe1, 0x4d, 0xca, 0x6d, 0x7a,
  0xb5, 0x99, 0xbd, 0x33, 0x5a, 0x6c, 0x98, 0x87, 0x22, 0x6b, 0x61, 0x9e,
  0x34, 0x90, 0x1c, 0x28, 0x0b, 0x86, 0xf4, 0x01, 0x4e, 0xf5, 0xe4, 0xf2,
  0x46, 0x11, 0x57, 0x03, 0x18, 0xf4, 0x96, 0x41, 0x72, 0x9c, 0x15, 0xbc,
  0xf7, 0x3a, 0x8b, 0xc1, 0x66, 0x28, 0x6e, 0x95, 0x97, 0xcd, 0xe1, 0x40,
  0x43, 0xbc, 0xf5, 0xec, 0xd9, 0xf5, 0xdc, 0x80, 0x50, 0xce, 0x0e, 0xc7,
  0x63, 0x25, 0x93, 0x97, 0x21, 0x45, 0x48, 0xf4, 0x08, 0x08, 0x3a, 0x52,
  0x24, 0x1d, 0x51, 0x15, 0x65, 0x90, 0x4e, 0x92, 0xc1, 0x1e, 0xf3, 0xb4,
  0x57, 0xcc, 0x98, 0xa1, 0x4d, 0xc8, 0x7a, 0x99, 0xae, 0x74, 0xc5, 0x37,
  0xeb, 0x77, 0xf2, 0xb3, 0x68, 0xba, 0x0a, 0x07, 0x2c, 0x69, 0x9f, 0x51,
  0x8c, 0xac, 0x3c, 0x1e, 0xaa, 0xe1, 0xed, 0x32, 0x6f, 0x75, 0x44, 0xdc,
  0x7b, 0x14, 0x2e, 0xfa, 0x3b, 0x5e, 0xd5, 0xe0, 0x5f, 0x5a, 0xf4, 0x77,
  0x91, 0x45, 0x3f, 0x76, 0x17, 0x87, 0x3f, 0x96, 0xec, 0xef, 0x3f, 0xd3,
  0x82, 0x10, 0x43, 0xc7, 0xf8, 0x9e, 0xfb, 0xa0, 0xf7, 0x45, 0xf3, 0xdc,
  0x10, 0xf5, 0x07, 0xe1, 0xb7, 0xbc, 0xcb, 0xeb, 0x7d, 0xea, 0x89, 0xfd,
  0x94, 0x51, 0xbf, 0xc9, 0x02, 0x35, 0x3a, 0x3d, 0x73, 0x99, 0x80, 0xf9,
  0xa8, 0x29, 0x47, 0x6a, 0xf8, 0x0d, 0xe5, 0x4f, 0x35, 0x56, 0x97, 0xec,
  0x7c, 0x4a, 0x67, 0xe1, 0x7d, 0xe7, 0xa9, 0x75, 0xa3, 0xec, 0xec, 0x6b,
  0x00, 0xfd, 0x10, 0xbc, 0x78, 0x9e, 0x2d, 0x40, 0x99, 0xb3, 0x8c, 0xd0,
  0x7a, 0x9c, 0xfb, 0x8f, 0x6b, 0xee, 0x2e, 0xaa, 0x14, 0x68, 0xcb, 0xf3,
  0xf4, 0x2e, 0x02, 0xb6, 0x25, 0x9e, 0x62, 0x36, 0x57, 0x52, 0x9a, 0x7d,
  0x41, 0xb6, 0x02, 0x34, 0x01, 0x71, 0x9b, 0x91, 0x1f, 0x96, 0x4e, 0xb4,
  0xbc, 0xb0, 0xae, 0x5a, 0xf9, 0x6a, 0x00, 0x07, 0x50, 0x4b, 0x7b, 0x44,
  0xbe, 0x32, 0xa2, 0x25, 0xc4, 0xb1, 0xe1, 0xf6, 0x9e, 0xb9, 0x23, 0xb2,
  0xe7, 0x40, 0x8e, 0x2d, 0x86, 0x08, 0xf1, 0x76, 0x4f, 0x79, 0x89, 0xc6,
  0x03, 0xa4, 0xed, 0x0e, 0x45, 0xe9, 0xf2, 0xd0, 0x6a, 0xae, 0x3c, 0x05,
  0x71, 0x8f, 0xb9, 0xf1, 0x19, 0x31, 0x3b, 0x01, 0xdc, 0x1d, 0x25, 0xa7,
  0xf0, 0xc2, 0xb5, 0x20, 0xc6, 0x2f, 0x98, 0xf4, 0x5d, 0xd1, 0x68, 0x9b,
  0x70, 0x9f, 0xbb, 0x13, 0xd6, 0x39, 0x69, 0xf2, 0xcb, 0x8e, 0x32, 0x59,
  0x2b, 0x50, 0xd4, 0xdb, 0x9c, 0x25, 0xef, 0x8e, 0xce, 0xdf, 0x21, 0xce,
  0x0b, 0x06, 0x10, 0x80, 0xa4, 0xa6, 0xd5, 0xb6, 0x05, 0x09, 0x12, 0x76,
  0xe6, 0xf4, 0x10, 0xc7, 0x20, 0x18, 0xbf, 0xcc, 0x9e, 0x37, 0xff, 0x53,
  0xdf, 0xe3, 0xea, 0x97, 0x4c, 0x6b, 0x4d, 0x5c, 0x44, 0xa7, 0x8d, 0xac,
  0xb6, 0xbf, 0xef, 0xb2, 0x90, 0xb8, 0x75, 0x32, 0x8b, 0x39, 0xc9, 0x24,
  0x1f, 0x49, 0x76, 0x8b, 0x16, 0x5f, 0x68, 0xab, 0x3c, 0x7a, 0x88, 0xb3,
  0xb1, 0xcb, 0x2a, 0x22, 0x72, 0xe5, 0xd3, 0x2a, 0xff, 0x79, 0x0a, 0x0e,
  0x45, 0x8d, 0xbf, 0xc6, 0x3f, 0x65, 0xee, 0x29, 0x15, 0x80, 0xc9, 0xe3,
  0xdd, 0xdd, 0x08, 0xec, 0x70, 0x3a, 0x31, 0x4c, 0x55, 0xb4, 0x39, 0xa9,
  0xea, 0xc1, 0x5b, 0xec, 0x35, 0x85, 0x7a, 0x59, 0x93, 0xa9, 0x31, 0xbc,
  0x20, 0x37, 0x26, 0xed, 0x58, 0x68, 0x54, 0xec, 0x33, 0x8f, 0xf9, 0x1e,



  0x55, 0x46, 0xba, 0x69, 0x1d, 0xe6, 0xc2, 0x25, 0x48, 0xda, 0x9b, 0x37,
  0xf5, 0xc0, 0x98, 0xc5, 0xff, 0x1d, 0xcc, 0x2c, 0xe0, 0xdf, 0xfb, 0x4f,
  0x42, 0x8a, 0x18, 0x9f, 0x9f, 0xbe, 0x13, 0x0a, 0x0b, 0x45, 0x33, 0xef,
  0x08, 0x1e, 0x71, 0x68, 0x2b, 0x83, 0x10, 0x72, 0x67, 0x66, 0xf1, 0x01,
  0x2c, 0x8a, 0xa9, 0xf7, 0x55, 0xe6, 0x00, 0x68, 0xcf, 0x27, 0x4b, 0xfb,
  0x4e, 0x10, 0x01, 0x14, 0xaf, 0x57, 0xef, 0xa5, 0xf7, 0x12, 0x5f, 0xb3,
  0x53, 0xbe, 0xbf, 0x5c, 0xbd, 0x4e, 0x74, 0x24, 0x75, 0xec, 0x84, 0xf7,
  0x2b, 0xe9, 0xb0, 0xb6, 0x8f, 0x68, 0x97, 0x16, 0xf9, 0x12, 0x9d, 0x3a,
  0x48, 0x66, 0xe6, 0xf0, 0xb2, 0x4e, 0x6b, 0x15, 0xa3, 0x97, 0x2d, 0xf1,
  0x09, 0x86, 0x2c, 0x96, 0xc4, 0xa6, 0x94, 0x7d, 0x61, 0xd3, 0x00, 0xd6,
  0xbd, 0xac, 0x66, 0x92, 0xbe, 0x22, 0x82, 0x53, 0x8d, 0x05, 0xa7, 0x67,
  0x3b, 0xa9, 0x7f, 0x76, 0xfa, 0xee, 0xdc, 0xca, 0x7c, 0xfa, 0x2c, 0x7e,
  0xd0, 0xb9, 0x3d, 0xd4, 0x2f, 0x45, 0xf0, 0x27, 0x44, 0xb2, 0xa1, 0x43,



  0xf0, 0x67, 0x51, 0x08, 0x02, 0x39, 0x12, 0x8c, 0xa3, 0x03, 0x0d, 0xd0,
  0xc7, 0x6f, 0x56, 0x32, 0x9c, 0x8f, 0xe5, 0x37, 0xec, 0x41, 0x87, 0xa0,
  0xe9, 0x41, 0x06, 0x73, 0xca, 0xed, 0xa3, 0xbd, 0x90, 0x32, 0xc8, 0x86,
  0x7e, 0x77, 0x34, 0x3e, 0xe7, 0x99, 0xd3, 0xdf, 0x82, 0x99, 0x73, 0x7d,
  0xa8, 0xfc, 0x30, 0x74, 0xa2, 0x5a, 0xca, 0xa0, 0x0c, 0x34, 0x63, 0x6d,
  0x60, 0x7c, 0x5b, 0xe0, 0xee, 0xed, 0xd8, 0x23, 0x2f, 0xdb, 0x10, 0x4c,
  0x53, 0xe8, 0x04, 0xf7, 0x1b, 0x3f, 0xd8, 0x90, 0xaf, 0x6c, 0x18, 0xb5,
  0x6c, 0xa6, 0x8d, 0xc3, 0xbc, 0x11, 0x1e, 0xbb, 0x11, 0x96, 0x24, 0xa9,
  0x64, 0x80, 0x63, 0x6d, 0xc2, 0x4b, 0x3f, 0x1c, 0x2a, 0xa9, 0x40, 0x58,
  0x30, 0x51, 0xf0, 0x73, 0x6e, 0x9c, 0x27, 0x52, 0xa2, 0x7e, 0x62, 0x55,
  0x05, 0x6f, 0x2a, 0xf4, 0x63, 0x4d, 0xf9, 0x81, 0xb6, 0xd1, 0x21, 0xb9,
  0x47, 0x4c, 0xe9, 0x5f, 0x51, 0xb6, 0xa0, 0x4d, 0x5b, 0xe4, 0xb5, 0xfb,

  0x72, 0xc1, 0x28, 0x5b, 0x79, 0xb1, 0xca, 0xa0, 0xa3, 0xa5, 0xd5, 0x9c,
  0x7a, 0x3d, 0x18, 0x26, 0x52, 0x71, 0xfd, 0xd8, 0x4d, 0x11, 0x83, 0xa5,


  0xf6, 0xbe, 0x21, 0xf2, 0xe7, 0xf8, 0xe4, 0xc8, 0x1d, 0x15, 0xf7, 0x89,
  0xc0, 0x25, 0x76, 0xba, 0xbe, 0xb9, 0xb0, 0x85, 0x15, 0x13, 0xa3, 0xe4,
  0x8c, 0x3a, 0xa2, 0x43, 0x67, 0xaa, 0xff, 0xc3, 0x8d, 0xc6, 0x97, 0x04,
  0x1e, 0x78, 0x23, 0x36, 0x51, 0xee, 0x9c, 0x17, 0xe6, 0x64, 0xf1, 0x13,
  0xfa, 0xab, 0x87, 0x69, 0x1e, 0x2c, 0xf7, 0xb9, 0x7b, 0xb9, 0x36, 0x2b,
  0x31, 0x16, 0x7a, 0xf7, 0x91, 0xc7, 0x42, 0x57, 0xc6, 0x7c, 0xc7, 0x10,
  0x96, 0x35, 0xd3, 0x5d, 0x96, 0x66, 0x31, 0x33, 0x1e, 0xe1, 0x42, 0x9f,
  0x69, 0xb1, 0x70, 0x6f, 0x28, 0x16, 0x06, 0x87, 0x13, 0xdb, 0x40, 0x88,
  0x92, 0x84, 0x49, 0x91, 0x33, 0x63, 0x15, 0xc4, 0x69, 0xe7, 0x36, 0xd7,
  0xde, 0x8f, 0x01, 0x63, 0x6b, 0x2d, 0x5e, 0x54, 0x77, 0x73, 0x3b, 0xed,
  0xdd, 0x1f, 0x33, 0x25, 0x5a, 0xb2, 0xb1, 0xf2, 0xab, 0x35, 0x3b, 0xc9,
  0x4e, 0x16, 0xdc, 0x3b, 0x72, 0x1a, 0x50, 0x3c, 0xc0, 0xc8, 0x77, 0x5f,
  0xf9, 0x7f, 0xfc, 0xc4, 0x0d, 0x75, 0x01, 0xf0, 0x1e, 0xe5, 0xeb, 0x87,
  0x2d, 0xa7, 0x9c, 0xed, 0x24, 0x91, 0xdb, 0x27, 0xd9, 0x6c, 0xe4, 0xda,
  0xf3, 0xc8, 0x95, 0xf2, 0xbe, 0xf1, 0x4c, 0x4c, 0x5f, 0xb2, 0x7d, 0x8b,
  0x3b, 0x97, 0x7c, 0x3f, 0xe2, 0xa8, 0x32, 0xfb, 0xcd, 0xb8, 0x51, 0x8d,
  0xfc, 0x46, 0x40, 0x18, 0xaf, 0xc4, 0x2f, 0x43, 0xad, 0xa8, 0x02, 0xc4,
  0xc5, 0xd5, 0x42, 0x72, 0x78, 0xbd, 0x2f, 0x7d, 0x2e, 0x9e, 0x0c, 0x2a,
  0x3e, 0x2f, 0x1c, 0x48, 0x91, 0xb7, 0x10, 0x52, 0x74, 0xc5, 0x6a, 0xd6,
  0x50, 0xbe, 0x61, 0x8e, 0xd3, 0xd4, 0xa6, 0x00, 0x87, 0x18, 0x7b, 0x84,
  0x5c, 0x46, 0x6c, 0x56, 0x94, 0x5d, 0xf5, 0x28, 0x94, 0x5a, 0x04, 0x2c,
  0x9e, 0x05, 0x79, 0x8c, 0x7f, 0x65, 0x9b, 0x06, 0x85, 0x2e, 0xf1, 0x2a,

  0xfb, 0x2b, 0x14, 0xc9, 0x91, 0xed, 0x05, 0xab, 0x01, 0xe5, 0xb4, 0x58,
  0xa5, 0x9e, 0x2d, 0xff, 0xf8, 0xb9, 0x78, 0xa8, 0xc4, 0x0d, 0x42, 0x91,
  0xf5, 0x82, 0xc0, 0xaf, 0x3b, 0xe1, 0xc5, 0x27, 0x7b, 0xd6, 0x57, 0x49,



  0x29, 0xb3, 0x52, 0x07, 0xe2, 0x27, 0xce, 0x12, 0xfc, 0xf1, 0xf8, 0x9b,
  0xe4, 0xcd, 0xab, 0x27, 0x94, 0xd0, 0x73, 0x99, 0x55, 0xcb, 0x8a, 0x92,
  0x38, 0x95, 0x86, 0x4f, 0xbf, 0xf5, 0x06, 0xdb, 0x77, 0xd9, 0x17, 0x0a,
  0x8e, 0x28, 0xcc, 0x4c, 0xec, 0x05, 0x73, 0x84, 0x54, 0xf8, 0x7c, 0xa9,
  0x0d, 0x36, 0x15, 0xc7, 0x4f, 0xd1, 0xaa, 0xa0, 0xb5, 0x7c, 0xd6, 0x4d,
  0x0a, 0x6f, 0x31, 0xb0, 0x27, 0x8f, 0x1c, 0x03, 0xab, 0xee, 0x96, 0xd4,
  0x5c, 0xa5, 0xb8, 0x24, 0xb3, 0x20, 0x72, 0xa3, 0x9e, 0x30, 0xd3, 0x7c,
  0xc9, 0xf7, 0x9e, 0x74, 0xd8, 0xf0, 0x35, 0xa8, 0xe7, 0x70, 0x97, 0x7a,
  0xef, 0x3d, 0xf1, 0xbd, 0x0a, 0xb5, 0x74, 0x46, 0x93, 0x96, 0x18, 0xd0,
  0x50, 0xbc, 0x67, 0x9f, 0xda, 0x67, 0xc9, 0x6f, 0x94, 0x17, 0x5e, 0x0b,

  0xa3, 0x9e, 0x37, 0x44, 0xf9, 0x55, 0x03, 0x41, 0x15, 0x33, 0xd6, 0x77,


  0xbc, 0xbd, 0xf7, 0x5e, 0x79, 0xde, 0x76, 0x9a, 0xa0, 0xb7, 0x81, 0x25,
  0x4c, 0x2c, 0x0a, 0x7d, 0x6b, 0x3d, 0x37, 0x0b, 0xcb, 0xe8, 0xb3, 0x6e,
  0x1e, 0xb4, 0xf2, 0xc0, 0xcc, 0x47, 0x10, 0xd1, 0xab, 0xce, 0xa4, 0xff,
  0xf2, 0x30, 0xe9, 0x2b, 0x02, 0x02, 0xad, 0x7b, 0x1f, 0xd9, 0x93, 0x3b,
  0x43, 0x5d, 0xaf, 0x2f, 0x8b, 0xfc, 0xef, 0x99, 0x97, 0x0b, 0xa6, 0xed,
  0xa7, 0xbc, 0xc7, 0xf7, 0x85, 0x61, 0x70, 0x67, 0x63, 0x30, 0x45, 0x0a,
  0x9e, 0xba, 0x07, 0x1e, 0x09, 0xd5, 0x72, 0xf7, 0x38, 0xce, 0x7d, 0x30,
  0xa3, 0x22, 0x74, 0x9f, 0xb5, 0xd2, 0xea, 0x9f, 0x3e, 0x16, 0x9d, 0x4b,
  0x75, 0x63, 0x92, 0xbc, 0xb4, 0x11, 0x73, 0x00, 0x32, 0x76, 0xd9, 0xf4,
  0x53, 0x11, 0x7b, 0x72, 0x94, 0xb6, 0x05, 0x95, 0x6d, 0xe7, 0x45, 0x7f,
  0xbd, 0xc9, 0x0b, 0x49, 0x74, 0x0f, 0x5e, 0x7f, 0xda, 0xe3, 0x7e, 0xac,
  0x59, 0x66, 0x1e, 0x81, 0x96, 0xbc, 0xe7, 0x9f, 0xb9, 0x9b, 0xe0, 0x10,
  0x68, 0x07, 0x0e, 0xf7, 0x76, 0xe0, 0x63, 0x96, 0xea, 0x5d, 0x62, 0x17,
  0x4a, 0xc6, 0xbd, 0x0e, 0x22, 0xc8, 0xf2, 0x17, 0xf6, 0xf3, 0xf3, 0x92,
  0xb8, 0xa9, 0xf7, 0x3d, 0x26, 0xa9, 0xd7, 0xe8, 0x55, 0xe1, 0x8c, 0x83,
  0x22, 0x39, 0xf7, 0xca, 0x64, 0xdd, 0xd3, 0xcf, 0x85, 0x36, 0x54, 0x5e,
  0x5a, 0x63, 0xb5, 0xef, 0x8d, 0x67, 0xbb, 0xbe, 0xb2, 0x3a, 0xa3, 0xa8,
  0x2c, 0x97, 0xf1, 0xf7, 0xbe, 0xc0, 0x94, 0x71, 0x6c, 0xc4, 0xc8, 0xa5,
  0x21, 0x6a, 0x3c, 0xe3, 0xd0, 0x0c, 0xdd, 0x63, 0xfb, 0x2d, 0xa6, 0x7b,
  0xee, 0xab, 0x4f, 0xc9, 0xf1, 0x2b, 0xef, 0xc1, 0x47, 0x6e, 0x81, 0xe9,
  0x9c, 0xb4, 0x81, 0x3b, 0xf6, 0x53, 0xd5, 0xc9, 0x16, 0xbd, 0xe5, 0x61,
  0x96, 0x3c, 0x63, 0xca, 0x78, 0x5b, 0x32, 0xea, 0x16, 0xb6, 0x3f, 0x78,
  0x86, 0xc9, 0xe1, 0xe5, 0x95, 0x91, 0x6a, 0xd3, 0x06, 0x39, 0xa1, 0x85,
  0xc6, 0xb8, 0xba, 0x67, 0xff, 0xec, 0xe9, 0x9a, 0x67, 0x45, 0x68, 0xd6,
  0x56, 0xd4, 0x7b, 0xef, 0x3d, 0x0b, 0xaf, 0xb9, 0x9a, 0x03, 0x5a, 0xa6,
  0x60, 0xae, 0x1a, 0xdd, 0xb4, 0x64, 0x8b, 0xca, 0xa3, 0xff, 0x43, 0x1d,
  0x83, 0x15, 0xe1, 0x09, 0xd6, 0xff, 0xe1, 0xcf, 0xf7, 0x73, 0xbf, 0xd6,
  0x81, 0xbd, 0x82, 0x55, 0x86, 0x38, 0xc1, 0xb4, 0xd5, 0x2e, 0xc2, 0xe5,
  0x08, 0x61, 0x77, 0xbc, 0x11, 0xf8, 0xcc, 0x8d, 0x1e, 0xb1, 0x2a, 0x1c,
  0xe7, 0x60, 0x23, 0x50, 0xd0, 0x08, 0x66, 0x3e, 0xf4, 0x24, 0xf1, 0x7c,
  0xf1, 0x40, 0x79, 0x3e, 0xd4, 0xdd, 0xce, 0x35, 0xa8, 0xaf, 0x56, 0x6c,
  0x72, 0xdb, 0x15, 0x39, 0x07, 0x9b, 0xf7, 0xda, 0xbe, 0xe3, 0x5e, 0x98,
  0x1b, 0xd4, 0xc6, 0x97, 0x66, 0xb6, 0x6c, 0x93, 0xdb, 0xfe, 0x01, 0xa8,
  0x97, 0xbe, 0xa9, 0x4a, 0xfa, 0xab, 0x42, 0x84, 0x6c, 0xa5, 0x3d, 0xa9,
  0x99, 0x92, 0x44, 0xee, 0x7d, 0x46, 0x54, 0x1b, 0x4a, 0x71, 0x32, 0xa7,
  0x74, 0x95, 0x4d, 0x3f, 0xea, 0x95, 0x91, 0x41, 0x5c, 0xea, 0xb9, 0xf7,
  0xd6, 0x63, 0xbb, 0xb5, 0x30, 0x68, 0xde, 0x1d, 0x75, 0xad, 0x00, 0xf7,
  0x28, 0x53, 0xcd, 0xbb, 0xf3, 0xf1, 0xd9, 0x01, 0xcd, 0x99, 0xe3, 0x86,
  0xe6, 0x42, 0xbc, 0x1c, 0x67, 0x7f, 0x93, 0x3a, 0xb3, 0xda, 0x3d, 0xfd,
  0xb4, 0xe7, 0xe9, 0xb1, 0x38, 0xf6, 0x8e, 0x81, 0xd4, 0x6c, 0xce, 0xc1,
  0x7f, 0x89, 0x89, 0x66, 0x55, 0xa8, 0x7f, 0x9f, 0xfd, 0x5f, 0x34, 0x33,
  0x70, 0x43, 0x8a, 0x2d, 0xbb, 0x87, 0x3f, 0x77, 0x36, 0xcd, 0xd5, 0xaa,
  0xf8, 0x68, 0xf5, 0x45, 0xc1, 0xd1, 0xd3, 0x03, 0x76, 0x2f, 0x3c, 0xd7,
  0xab, 0xe1, 0xf9, 0x41, 0x6d, 0xde, 0xd3, 0x40, 0x3c, 0x14, 0xe2, 0x76,
  0x94, 0x98, 0xa7, 0xe1, 0xaf, 0x2b, 0x6f, 0x0f, 0x9e, 0xef, 0x5a, 0xf1,
  0x2b, 0x90, 0x3c, 0x1f, 0xb3, 0x3b, 0x47, 0x75, 0x9a, 0x63, 0xb1, 0xcc,
  0x0b, 0x72, 0x41, 0xb8, 0x47, 0xdc, 0x00, 0x7b, 0x2d, 0x21, 0xd0, 0x55,
  0x37, 0xea, 0x26, 0x6d, 0x56, 0x9e, 0x88, 0x79, 0xce, 0xb4, 0x33, 0xa6,
  0xa8, 0xe3, 0x42, 0xe8, 0x35, 0x2f, 0xd4, 0xdb, 0xd6, 0x71, 0xa1, 0xe9,
  0x4b, 0x3f, 0xfc, 0xc0, 0x72, 0xa4, 0x54, 0x60, 0x24, 0x09, 0x5d, 0xd9,

  0xe6, 0x4f, 0x86, 0xe9, 0xb2, 0xea, 0x41, 0x57, 0x18, 0xf1, 0x9e, 0x2a,
  0xa3, 0xfe, 0x94, 0x8a, 0x7d, 0x83, 0xcb, 0x13, 0x8b, 0x9e, 0x97, 0x85,
  0xc4, 0x6c, 0x29, 0x79, 0x13, 0xae, 0x4f, 0x06, 0x9b, 0x66, 0x57, 0x98,
  0x99, 0xc1, 0xe1, 0xfb, 0xf3, 0x6f, 0x4e, 0xdf, 0x8d, 0x93, 0x1d, 0xaa,
  0x6d, 0x3f, 0x7f, 0x77, 0xfc, 0xd5, 0xfb, 0x73, 0xf3, 0x4f, 0x1d, 0xe9,
  0x55, 0x5a, 0xe4, 0x46, 0x3a, 0x8d, 0x9b, 0xac, 0x30, 0xb4, 0x72, 0xa9,
  0x3d, 0x9a, 0x90, 0x83, 0x42, 0xf2, 0xb8, 0xac, 0x14, 0xd2, 0x84, 0xd2,
  0x51, 0xca, 0xb9, 0x4b, 0x26, 0x60, 0x0f, 0x36, 0xe5, 0xf8, 0x95, 0xce,
  0x72, 0xce, 0x3b, 0x45, 0xf9, 0x9a, 0xb6, 0x93, 0x9c, 0x7f, 0x73, 0xf8,
  0xf6, 0xdb, 0xb1, 0x76, 0xf0, 0xf8, 0xfe, 0xfb, 0xef, 0xbb, 0xc1, 0x5d,
  0xe8, 0xb0, 0x57, 0xe9, 0xed, 0xed, 0xa8, 0xce, 0x3e, 0xfb, 0x6c, 0x7c,
  0x74, 0x94, 0x1c, 0x9e, 0x8c, 0x4f, 0x3f, 0x73, 0x38, 0x0e, 0x5b, 0x7b,
  0xdb, 0x46, 0x49, 0xbb, 0xcc, 0x1a, 0xf3, 0x97, 0xcf, 0x3e, 0xfb, 0xff,

  0x00, 0x57, 0x6e, 0x39, 0x73, 0x0a, 0xa4, 0x02, 0x00,
};
#define BUF_SIZE 0x10000
static voidpf zalloc_func(voidpf opaque, unsigned int items, unsigned int size)
{
  (void) opaque;
  /* not a typo, keep it calloc() */
  return (voidpf) calloc(items, size);
Changes to jni/curl/src/tool_main.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
** curl tool main function.
*/
int main(int argc, char *argv[])
{
  CURLcode result = CURLE_OK;
  struct GlobalConfig global;
  memset(&global, 0, sizeof(global));



















  /* Perform any platform-specific terminal configuration */
  configure_terminal();

  main_checkfds();

#if defined(HAVE_SIGNAL) && defined(SIGPIPE)
  (void)signal(SIGPIPE, SIG_IGN);
#endif

  /* Initialize memory tracking */
  memory_tracking_init();

  /* Initialize the curl library - do not call any libcurl functions before
     this point */
  result = main_init(&global);

#ifdef WIN32
  /* Undocumented diagnostic option to list the full paths of all loaded
     modules, regardless of whether or not initialization succeeded. */
  if(argc == 2 && !strcmp(argv[1], "--dump-module-paths")) {
    struct curl_slist *item, *head = GetLoadedModulePaths();
    for(item = head; item; item = item->next) {
      printf("%s\n", item->data);
    }
    curl_slist_free_all(head);
    if(!result)
      main_free(&global);
  }
  else
#endif /* WIN32 */
  if(!result) {
    /* Start our curl operation */
    result = operate(&global, argc, argv);

#ifdef __SYMBIAN32__
    if(global.showerror)
      tool_pressanykey();







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
















<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







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
** curl tool main function.
*/
int main(int argc, char *argv[])
{
  CURLcode result = CURLE_OK;
  struct GlobalConfig global;
  memset(&global, 0, sizeof(global));

#ifdef WIN32
  /* Undocumented diagnostic option to list the full paths of all loaded
     modules. This is purposely pre-init. */
  if(argc == 2 && !strcmp(argv[1], "--dump-module-paths")) {
    struct curl_slist *item, *head = GetLoadedModulePaths();
    for(item = head; item; item = item->next)
      printf("%s\n", item->data);
    curl_slist_free_all(head);
    return head ? 0 : 1;
  }
  /* win32_init must be called before other init routines. */
  result = win32_init();
  if(result) {
    fprintf(stderr, "curl: (%d) Windows-specific init failed.\n", result);
    return result;
  }
#endif

  /* Perform any platform-specific terminal configuration */
  configure_terminal();

  main_checkfds();

#if defined(HAVE_SIGNAL) && defined(SIGPIPE)
  (void)signal(SIGPIPE, SIG_IGN);
#endif

  /* Initialize memory tracking */
  memory_tracking_init();

  /* Initialize the curl library - do not call any libcurl functions before
     this point */
  result = main_init(&global);















  if(!result) {
    /* Start our curl operation */
    result = operate(&global, argc, argv);

#ifdef __SYMBIAN32__
    if(global.showerror)
      tool_pressanykey();
Changes to jni/curl/src/tool_metalink.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
#  include <nss.h>
#  include <pk11pub.h>
#  define MD5_CTX    void *
#  define SHA_CTX    void *
#  define SHA256_CTX void *
#  define HAVE_NSS_CONTEXT
   static NSSInitContext *nss_context;
#elif defined(USE_POLARSSL)
#  include <polarssl/md5.h>
#  include <polarssl/sha1.h>
#  include <polarssl/sha256.h>
#  define MD5_CTX    md5_context
#  define SHA_CTX    sha1_context
#  define SHA256_CTX sha256_context
#elif (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && \
              (__MAC_OS_X_VERSION_MAX_ALLOWED >= 1040)) || \
      (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && \
              (__IPHONE_OS_VERSION_MAX_ALLOWED >= 20000))
/* For Apple operating systems: CommonCrypto has the functions we need.
   The library's headers are even backward-compatible with OpenSSL's
   headers as long as we define COMMON_DIGEST_FOR_OPENSSL first.

   These functions are available on Tiger and later, as well as iOS 2.0
   and later. If you're building for an older cat, well, sorry. */
#  define COMMON_DIGEST_FOR_OPENSSL
#  include <CommonCrypto/CommonDigest.h>
#elif defined(WIN32)
/* For Windows: If no other crypto library is provided, we fallback
   to the hash functions provided within the Microsoft Windows CryptoAPI */
#  include <wincrypt.h>
/* Custom structure in order to store the required provider and hash handle */
struct win32_crypto_hash {
  HCRYPTPROV hCryptProv;
  HCRYPTHASH hHash;







<
<
<
<
<
<
<












|







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
#  include <nss.h>
#  include <pk11pub.h>
#  define MD5_CTX    void *
#  define SHA_CTX    void *
#  define SHA256_CTX void *
#  define HAVE_NSS_CONTEXT
   static NSSInitContext *nss_context;







#elif (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && \
              (__MAC_OS_X_VERSION_MAX_ALLOWED >= 1040)) || \
      (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && \
              (__IPHONE_OS_VERSION_MAX_ALLOWED >= 20000))
/* For Apple operating systems: CommonCrypto has the functions we need.
   The library's headers are even backward-compatible with OpenSSL's
   headers as long as we define COMMON_DIGEST_FOR_OPENSSL first.

   These functions are available on Tiger and later, as well as iOS 2.0
   and later. If you're building for an older cat, well, sorry. */
#  define COMMON_DIGEST_FOR_OPENSSL
#  include <CommonCrypto/CommonDigest.h>
#elif defined(USE_WIN32_CRYPTO)
/* For Windows: If no other crypto library is provided, we fallback
   to the hash functions provided within the Microsoft Windows CryptoAPI */
#  include <wincrypt.h>
/* Custom structure in order to store the required provider and hash handle */
struct win32_crypto_hash {
  HCRYPTPROV hCryptProv;
  HCRYPTHASH hHash;
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
}

static void SHA256_Final(unsigned char digest[32], SHA256_CTX *pctx)
{
  nss_hash_final(pctx, digest, 32);
}

#elif defined(USE_POLARSSL)

static int MD5_Init(MD5_CTX *ctx)
{
  md5_starts(ctx);
  return 1;
}

static void MD5_Update(MD5_CTX *ctx,
                       const unsigned char *input,
                       unsigned int inputLen)
{
  md5_update(ctx, input, inputLen);
}

static void MD5_Final(unsigned char digest[16], MD5_CTX *ctx)
{
  md5_finish(ctx, digest);
}

static int SHA1_Init(SHA_CTX *ctx)
{
  sha1_starts(ctx);
  return 1;
}

static void SHA1_Update(SHA_CTX *ctx,
                        const unsigned char *input,
                        unsigned int inputLen)
{
  sha1_update(ctx, input, inputLen);
}

static void SHA1_Final(unsigned char digest[20], SHA_CTX *ctx)
{
  sha1_finish(ctx, digest);
}

static int SHA256_Init(SHA256_CTX *ctx)
{
  sha256_starts(ctx, 0); /* 0 = sha256 */
  return 1;
}

static void SHA256_Update(SHA256_CTX *ctx,
                          const unsigned char *input,
                          unsigned int inputLen)
{
  sha256_update(ctx, input, inputLen);
}

static void SHA256_Final(unsigned char digest[32], SHA256_CTX *ctx)
{
  sha256_finish(ctx, digest);
}

#elif defined(WIN32)

static void win32_crypto_final(struct win32_crypto_hash *ctx,
                               unsigned char *digest,
                               unsigned int digestLen)
{
  unsigned long length;
  CryptGetHashParam(ctx->hHash, HP_HASHVAL, NULL, &length, 0);







|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







314
315
316
317
318
319
320
321
























































322
323
324
325
326
327
328
}

static void SHA256_Final(unsigned char digest[32], SHA256_CTX *pctx)
{
  nss_hash_final(pctx, digest, 32);
}

#elif defined(USE_WIN32_CRYPTO)

























































static void win32_crypto_final(struct win32_crypto_hash *ctx,
                               unsigned char *digest,
                               unsigned int digestLen)
{
  unsigned long length;
  CryptGetHashParam(ctx->hHash, HP_HASHVAL, NULL, &length, 0);
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
}

size_t metalink_write_cb(void *buffer, size_t sz, size_t nmemb,
                         void *userdata)
{
  struct per_transfer *per = userdata;
  struct OutStruct *outs = &per->outs;
  struct OperationConfig *config = outs->config;
  int rv;

  /*
   * Once that libcurl has called back tool_write_cb() the returned value
   * is checked against the amount that was intended to be written, if
   * it does not match then it fails with CURLE_WRITE_ERROR. So at this
   * point returning a value different from sz*nmemb indicates failure.







|







828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
}

size_t metalink_write_cb(void *buffer, size_t sz, size_t nmemb,
                         void *userdata)
{
  struct per_transfer *per = userdata;
  struct OutStruct *outs = &per->outs;
  struct OperationConfig *config = per->config;
  int rv;

  /*
   * Once that libcurl has called back tool_write_cb() the returned value
   * is checked against the amount that was intended to be written, if
   * it does not match then it fails with CURLE_WRITE_ERROR. So at this
   * point returning a value different from sz*nmemb indicates failure.
Changes to jni/curl/src/tool_operate.c.
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
    /* we have received no data despite the transfer was successful
       ==> force cration of an empty output file (if an output file
       was specified) */
    long cond_unmet = 0L;
    /* do not create (or even overwrite) the file in case we get no
       data because of unmet condition */
    curl_easy_getinfo(curl, CURLINFO_CONDITION_UNMET, &cond_unmet);
    if(!cond_unmet && !tool_create_output_file(outs))
      result = CURLE_WRITE_ERROR;
  }

  if(!outs->s_isreg && outs->stream) {
    /* Dump standard stream buffered data */
    int rc = fflush(outs->stream);
    if(!result && rc) {







|







376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
    /* we have received no data despite the transfer was successful
       ==> force cration of an empty output file (if an output file
       was specified) */
    long cond_unmet = 0L;
    /* do not create (or even overwrite) the file in case we get no
       data because of unmet condition */
    curl_easy_getinfo(curl, CURLINFO_CONDITION_UNMET, &cond_unmet);
    if(!cond_unmet && !tool_create_output_file(outs, config))
      result = CURLE_WRITE_ERROR;
  }

  if(!outs->s_isreg && outs->stream) {
    /* Dump standard stream buffered data */
    int rc = fflush(outs->stream);
    if(!result && rc) {
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
        *added = TRUE;
        per->config = config;
        per->curl = curl;

        /* default headers output stream is stdout */
        heads = &per->heads;
        heads->stream = stdout;
        heads->config = config;

        /* Single header file for all URLs */
        if(config->headerfile) {
          /* open file for output: */
          if(strcmp(config->headerfile, "-")) {

            FILE *newfile = fopen(config->headerfile, "wb");
            if(!newfile) {
              warnf(config->global, "Failed to open %s\n", config->headerfile);
              result = CURLE_WRITE_ERROR;
              break;
            }
            else {
              heads->filename = config->headerfile;
              heads->s_isreg = TRUE;
              heads->fopened = TRUE;
              heads->stream = newfile;
            }
          }
          else {
            /* always use binary mode for protocol header output */
            set_binmode(heads->stream);
          }
        }













        /* --etag-save */
        etag_save = &per->etag_save;
        etag_save->stream = stdout;
        etag_save->config = config;
        if(config->etag_save_file) {
          /* open file for output: */
          if(strcmp(config->etag_save_file, "-")) {
            FILE *newfile = fopen(config->etag_save_file, "wb");
            if(!newfile) {
              warnf(
                config->global,







<





>
|


















>
>
>
>
>
>
>
>
>
>
>
>



|







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
        *added = TRUE;
        per->config = config;
        per->curl = curl;

        /* default headers output stream is stdout */
        heads = &per->heads;
        heads->stream = stdout;


        /* Single header file for all URLs */
        if(config->headerfile) {
          /* open file for output: */
          if(strcmp(config->headerfile, "-")) {
            FILE *newfile;
            newfile = fopen(config->headerfile, per->prev == NULL?"wb":"ab");
            if(!newfile) {
              warnf(config->global, "Failed to open %s\n", config->headerfile);
              result = CURLE_WRITE_ERROR;
              break;
            }
            else {
              heads->filename = config->headerfile;
              heads->s_isreg = TRUE;
              heads->fopened = TRUE;
              heads->stream = newfile;
            }
          }
          else {
            /* always use binary mode for protocol header output */
            set_binmode(heads->stream);
          }
        }

        hdrcbdata = &per->hdrcbdata;

        outs = &per->outs;
        input = &per->input;

        per->outfile = NULL;
        per->infdopen = FALSE;
        per->infd = STDIN_FILENO;

        /* default output stream is stdout */
        outs->stream = stdout;

        /* --etag-save */
        etag_save = &per->etag_save;
        etag_save->stream = stdout;

        if(config->etag_save_file) {
          /* open file for output: */
          if(strcmp(config->etag_save_file, "-")) {
            FILE *newfile = fopen(config->etag_save_file, "wb");
            if(!newfile) {
              warnf(
                config->global,
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
          Curl_safefree(header);

          if(file) {
            fclose(file);
          }
        }

        hdrcbdata = &per->hdrcbdata;

        outs = &per->outs;
        input = &per->input;

        per->outfile = NULL;
        per->infdopen = FALSE;
        per->infd = STDIN_FILENO;

        /* default output stream is stdout */
        outs->stream = stdout;
        outs->config = config;

        if(metalink) {
          /* For Metalink download, use name in Metalink file as
             filename. */
          per->outfile = strdup(mlfile->filename);
          if(!per->outfile) {
            result = CURLE_OUT_OF_MEMORY;
            break;







<
<
<
<
<
<
<
<
<
<
<
<
<







969
970
971
972
973
974
975













976
977
978
979
980
981
982
          Curl_safefree(header);

          if(file) {
            fclose(file);
          }
        }














        if(metalink) {
          /* For Metalink download, use name in Metalink file as
             filename. */
          per->outfile = strdup(mlfile->filename);
          if(!per->outfile) {
            result = CURLE_OUT_OF_MEMORY;
            break;
1832
1833
1834
1835
1836
1837
1838




1839
1840
1841
1842
1843
1844
1845

        if(config->mail_from)
          my_setopt_str(curl, CURLOPT_MAIL_FROM, config->mail_from);

        if(config->mail_rcpt)
          my_setopt_slist(curl, CURLOPT_MAIL_RCPT, config->mail_rcpt);





        /* curl 7.20.x */
        if(config->ftp_pret)
          my_setopt(curl, CURLOPT_FTP_USE_PRET, 1L);

        if(config->proto_present)
          my_setopt_flags(curl, CURLOPT_PROTOCOLS, config->proto);
        if(config->proto_redir_present)







>
>
>
>







1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848

        if(config->mail_from)
          my_setopt_str(curl, CURLOPT_MAIL_FROM, config->mail_from);

        if(config->mail_rcpt)
          my_setopt_slist(curl, CURLOPT_MAIL_RCPT, config->mail_rcpt);

        /* curl 7.69.x */
        my_setopt(curl, CURLOPT_MAIL_RCPT_ALLLOWFAILS,
          config->mail_rcpt_allowfails ? 1L : 0L);

        /* curl 7.20.x */
        if(config->ftp_pret)
          my_setopt(curl, CURLOPT_FTP_USE_PRET, 1L);

        if(config->proto_present)
          my_setopt_flags(curl, CURLOPT_PROTOCOLS, config->proto);
        if(config->proto_redir_present)
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
        /* new in 7.60.0 */
        if(config->haproxy_protocol)
          my_setopt(curl, CURLOPT_HAPROXYPROTOCOL, 1L);

        if(config->disallow_username_in_url)
          my_setopt(curl, CURLOPT_DISALLOW_USERNAME_IN_URL, 1L);

#ifdef USE_ALTSVC
        /* only if explicitly enabled in configure */
        if(config->altsvc)
          my_setopt_str(curl, CURLOPT_ALTSVC, config->altsvc);
#endif

#ifdef USE_METALINK
        if(!metalink && config->use_metalink) {
          outs->metalink_parser = metalink_parser_context_new();
          if(outs->metalink_parser == NULL) {
            result = CURLE_OUT_OF_MEMORY;
            break;







<
<


<







1962
1963
1964
1965
1966
1967
1968


1969
1970

1971
1972
1973
1974
1975
1976
1977
        /* new in 7.60.0 */
        if(config->haproxy_protocol)
          my_setopt(curl, CURLOPT_HAPROXYPROTOCOL, 1L);

        if(config->disallow_username_in_url)
          my_setopt(curl, CURLOPT_DISALLOW_USERNAME_IN_URL, 1L);



        if(config->altsvc)
          my_setopt_str(curl, CURLOPT_ALTSVC, config->altsvc);


#ifdef USE_METALINK
        if(!metalink && config->use_metalink) {
          outs->metalink_parser = metalink_parser_context_new();
          if(outs->metalink_parser == NULL) {
            result = CURLE_OUT_OF_MEMORY;
            break;
Changes to jni/curl/src/tool_operhlp.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
  if(!curl)
    return NULL; /* error! */
  if(ptr)
    ptr += 3;
  else
    ptr = url;
  ptr = strrchr(ptr, '/');
  if(!ptr || !strlen(++ptr)) {
    /* The URL has no file name part, add the local file name. In order
       to be able to do so, we have to create a new URL in another
       buffer.*/

    /* We only want the part of the local path that is on the right
       side of the rightmost slash and backslash. */
    const char *filep = strrchr(filename, '/');







|







81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
  if(!curl)
    return NULL; /* error! */
  if(ptr)
    ptr += 3;
  else
    ptr = url;
  ptr = strrchr(ptr, '/');
  if(!ptr || !*++ptr) {
    /* The URL has no file name part, add the local file name. In order
       to be able to do so, we have to create a new URL in another
       buffer.*/

    /* We only want the part of the local path that is on the right
       side of the rightmost slash and backslash. */
    const char *filep = strrchr(filename, '/');
Changes to jni/curl/src/tool_progress.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
int xferinfo_cb(void *clientp,
                curl_off_t dltotal,
                curl_off_t dlnow,
                curl_off_t ultotal,
                curl_off_t ulnow)
{
  struct per_transfer *per = clientp;
  struct OutStruct *outs = &per->outs;
  struct OperationConfig *config = outs->config;
  per->dltotal = dltotal;
  per->dlnow = dlnow;
  per->ultotal = ultotal;
  per->ulnow = ulnow;

  if(config->readbusy) {
    config->readbusy = FALSE;







<
|







91
92
93
94
95
96
97

98
99
100
101
102
103
104
105
int xferinfo_cb(void *clientp,
                curl_off_t dltotal,
                curl_off_t dlnow,
                curl_off_t ultotal,
                curl_off_t ulnow)
{
  struct per_transfer *per = clientp;

  struct OperationConfig *config = per->config;
  per->dltotal = dltotal;
  per->dlnow = dlnow;
  per->ultotal = ultotal;
  per->ulnow = ulnow;

  if(config->readbusy) {
    config->readbusy = FALSE;
Changes to jni/curl/src/tool_sdecls.h.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_TOOL_SDECLS_H
#define HEADER_CURL_TOOL_SDECLS_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef HEADER_CURL_TOOL_SDECLS_H
#define HEADER_CURL_TOOL_SDECLS_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
struct OutStruct {
  char *filename;
  bool alloc_filename;
  bool is_cd_filename;
  bool s_isreg;
  bool fopened;
  FILE *stream;
  struct OperationConfig *config;
  curl_off_t bytes;
  curl_off_t init;
#ifdef USE_METALINK
  metalink_parser_context_t *metalink_parser;
#endif /* USE_METALINK */
};








<







65
66
67
68
69
70
71

72
73
74
75
76
77
78
struct OutStruct {
  char *filename;
  bool alloc_filename;
  bool is_cd_filename;
  bool s_isreg;
  bool fopened;
  FILE *stream;

  curl_off_t bytes;
  curl_off_t init;
#ifdef USE_METALINK
  metalink_parser_context_t *metalink_parser;
#endif /* USE_METALINK */
};

Changes to jni/curl/src/tool_urlglob.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637

  while(*filename) {
    if(*filename == '#' && ISDIGIT(filename[1])) {
      char *ptr = filename;
      unsigned long num = strtoul(&filename[1], &filename, 10);
      URLPattern *pat = NULL;

      if(num < glob->size) {
        unsigned long i;
        num--; /* make it zero based */
        /* find the correct glob entry */
        for(i = 0; i<glob->size; i++) {
          if(glob->pattern[i].globindex == (int)num) {
            pat = &glob->pattern[i];
            break;







|







623
624
625
626
627
628
629
630
631
632
633
634
635
636
637

  while(*filename) {
    if(*filename == '#' && ISDIGIT(filename[1])) {
      char *ptr = filename;
      unsigned long num = strtoul(&filename[1], &filename, 10);
      URLPattern *pat = NULL;

      if(num && (num < glob->size)) {
        unsigned long i;
        num--; /* make it zero based */
        /* find the correct glob entry */
        for(i = 0; i<glob->size; i++) {
          if(glob->pattern[i].globindex == (int)num) {
            pat = &glob->pattern[i];
            break;
Changes to jni/curl/src/tool_version.h.
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 * KIND, either express or implied.
 *
 ***************************************************************************/
#include <curl/curlver.h>

#define CURL_NAME "curl"
#define CURL_COPYRIGHT LIBCURL_COPYRIGHT
#define CURL_VERSION "7.68.0"
#define CURL_VERSION_MAJOR LIBCURL_VERSION_MAJOR
#define CURL_VERSION_MINOR LIBCURL_VERSION_MINOR
#define CURL_VERSION_PATCH LIBCURL_VERSION_PATCH
#define CURL_ID CURL_NAME " " CURL_VERSION " (" OS ") "

#endif /* HEADER_CURL_TOOL_VERSION_H */







|






21
22
23
24
25
26
27
28
29
30
31
32
33
34
 * KIND, either express or implied.
 *
 ***************************************************************************/
#include <curl/curlver.h>

#define CURL_NAME "curl"
#define CURL_COPYRIGHT LIBCURL_COPYRIGHT
#define CURL_VERSION "7.69.0"
#define CURL_VERSION_MAJOR LIBCURL_VERSION_MAJOR
#define CURL_VERSION_MINOR LIBCURL_VERSION_MINOR
#define CURL_VERSION_PATCH LIBCURL_VERSION_PATCH
#define CURL_ID CURL_NAME " " CURL_VERSION " (" OS ") "

#endif /* HEADER_CURL_TOOL_VERSION_H */
Changes to jni/curl/tests/FILEFORMAT.
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

For HTTP/HTTPS:
auth_required   if this is set and a POST/PUT is made without auth, the
                server will NOT wait for the full request body to get sent
idle            do nothing after receiving the request, just "sit idle"
stream          continuously send data to the client, never-ending
writedelay: [secs] delay this amount between reply packets
skip: [num]     instructs the server to ignore reading this many bytes from a PUT
                or POST request

rtp: part [num] channel [num] size [num]
               stream a fake RTP packet for the given part on a chosen channel
               with the given payload size

connection-monitor When used, this will log [DISCONNECT] to the server.input
               log when the connection is disconnected.
upgrade        when an HTTP upgrade header is found, the server will upgrade
               to http2
swsclose       instruct server to close connection after response


For TFTP:
writedelay: [secs] delay this amount between reply packets (each packet being
                   512 bytes payload)
</servercmd>
</reply>








|
|
<



<





>







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

For HTTP/HTTPS:
auth_required   if this is set and a POST/PUT is made without auth, the
                server will NOT wait for the full request body to get sent
idle            do nothing after receiving the request, just "sit idle"
stream          continuously send data to the client, never-ending
writedelay: [secs] delay this amount between reply packets
skip: [num]     instructs the server to ignore reading this many bytes from a
                PUT or POST request

rtp: part [num] channel [num] size [num]
               stream a fake RTP packet for the given part on a chosen channel
               with the given payload size

connection-monitor When used, this will log [DISCONNECT] to the server.input
               log when the connection is disconnected.
upgrade        when an HTTP upgrade header is found, the server will upgrade
               to http2
swsclose       instruct server to close connection after response
no-expect      don't read the request body if Expect: is present

For TFTP:
writedelay: [secs] delay this amount between reply packets (each packet being
                   512 bytes payload)
</servercmd>
</reply>

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

Alternatively a feature can be prefixed with an exclamation mark to indicate a
feature is NOT required. If the feature is present then the test will be
SKIPPED.

Features testable here are:


crypto
debug
getrlimit
GnuTLS
GSS-API
http/2
idn
ipv6
Kerberos
large_file

libz
manual
Metalink
NSS
NTLM
OpenSSL
PSL
socks
SPNEGO
SSL
SSLpinning
SSPI

TLS-SRP
TrackMemory
threaded-resolver
unittest
unix-sockets

WinSSL
ld_preload
alt-svc

as well as each protocol that curl supports.  A protocol only needs to be
specified if it is different from the server (useful when the server
is 'none').
</features>

<killserver>







>










>












>


<


>

<
<







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

Alternatively a feature can be prefixed with an exclamation mark to indicate a
feature is NOT required. If the feature is present then the test will be
SKIPPED.

Features testable here are:

alt-svc
crypto
debug
getrlimit
GnuTLS
GSS-API
http/2
idn
ipv6
Kerberos
large_file
ld_preload
libz
manual
Metalink
NSS
NTLM
OpenSSL
PSL
socks
SPNEGO
SSL
SSLpinning
SSPI
threaded-resolver
TLS-SRP
TrackMemory

unittest
unix-sockets
win32
WinSSL



as well as each protocol that curl supports.  A protocol only needs to be
specified if it is different from the server (useful when the server
is 'none').
</features>

<killserver>
Changes to jni/curl/tests/Makefile.am.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
34
35
36
37
38
39
40
41

42
43
44
45
46
47
48
EXTRA_DIST = ftpserver.pl httpserver.pl secureserver.pl runtests.pl           \
 getpart.pm FILEFORMAT README stunnel.pem memanalyze.pl testcurl.pl           \
 valgrind.pm ftp.pm sshserver.pl sshhelp.pm pathhelp.pm testcurl.1 runtests.1 \
 serverhelp.pm tftpserver.pl rtspserver.pl directories.pm symbol-scan.pl      \
 CMakeLists.txt mem-include-scan.pl valgrind.supp extern-scan.pl              \
 manpage-scan.pl nroff-scan.pl http2-server.pl dictserver.py                  \
 negtelnetserver.py $(SMBDEPS) objnames-test08.sh objnames-test10.sh          \
 objnames.inc disable-scan.pl manpage-syntax.pl error-codes.pl


DISTCLEANFILES = configurehelp.pm

# we have two variables here to make sure DIST_SUBDIRS won't get 'unit'
# added twice as then targets such as 'distclean' misbehave and try to
# do things twice in that subdir at times (and thus fails).
if BUILD_UNITTESTS







|
>







34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
EXTRA_DIST = ftpserver.pl httpserver.pl secureserver.pl runtests.pl           \
 getpart.pm FILEFORMAT README stunnel.pem memanalyze.pl testcurl.pl           \
 valgrind.pm ftp.pm sshserver.pl sshhelp.pm pathhelp.pm testcurl.1 runtests.1 \
 serverhelp.pm tftpserver.pl rtspserver.pl directories.pm symbol-scan.pl      \
 CMakeLists.txt mem-include-scan.pl valgrind.supp extern-scan.pl              \
 manpage-scan.pl nroff-scan.pl http2-server.pl dictserver.py                  \
 negtelnetserver.py $(SMBDEPS) objnames-test08.sh objnames-test10.sh          \
 objnames.inc disable-scan.pl manpage-syntax.pl error-codes.pl badsymbols.pl  \
 azure.pm appveyor.pm

DISTCLEANFILES = configurehelp.pm

# we have two variables here to make sure DIST_SUBDIRS won't get 'unit'
# added twice as then targets such as 'distclean' misbehave and try to
# do things twice in that subdir at times (and thus fails).
if BUILD_UNITTESTS
Changes to jni/curl/tests/Makefile.in.
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is







|







17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
357
358
359
360
361
362
363

364
365
366
367
368
369
370
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@

USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@







>







357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
USE_WOLFSSH = @USE_WOLFSSH@
USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
435
436
437
438
439
440
441
442

443
444
445
446
447
448
449
EXTRA_DIST = ftpserver.pl httpserver.pl secureserver.pl runtests.pl           \
 getpart.pm FILEFORMAT README stunnel.pem memanalyze.pl testcurl.pl           \
 valgrind.pm ftp.pm sshserver.pl sshhelp.pm pathhelp.pm testcurl.1 runtests.1 \
 serverhelp.pm tftpserver.pl rtspserver.pl directories.pm symbol-scan.pl      \
 CMakeLists.txt mem-include-scan.pl valgrind.supp extern-scan.pl              \
 manpage-scan.pl nroff-scan.pl http2-server.pl dictserver.py                  \
 negtelnetserver.py $(SMBDEPS) objnames-test08.sh objnames-test10.sh          \
 objnames.inc disable-scan.pl manpage-syntax.pl error-codes.pl


DISTCLEANFILES = configurehelp.pm
@BUILD_UNITTESTS_FALSE@BUILD_UNIT = 

# we have two variables here to make sure DIST_SUBDIRS won't get 'unit'
# added twice as then targets such as 'distclean' misbehave and try to
# do things twice in that subdir at times (and thus fails).







|
>







436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
EXTRA_DIST = ftpserver.pl httpserver.pl secureserver.pl runtests.pl           \
 getpart.pm FILEFORMAT README stunnel.pem memanalyze.pl testcurl.pl           \
 valgrind.pm ftp.pm sshserver.pl sshhelp.pm pathhelp.pm testcurl.1 runtests.1 \
 serverhelp.pm tftpserver.pl rtspserver.pl directories.pm symbol-scan.pl      \
 CMakeLists.txt mem-include-scan.pl valgrind.supp extern-scan.pl              \
 manpage-scan.pl nroff-scan.pl http2-server.pl dictserver.py                  \
 negtelnetserver.py $(SMBDEPS) objnames-test08.sh objnames-test10.sh          \
 objnames.inc disable-scan.pl manpage-syntax.pl error-codes.pl badsymbols.pl  \
 azure.pm appveyor.pm

DISTCLEANFILES = configurehelp.pm
@BUILD_UNITTESTS_FALSE@BUILD_UNIT = 

# we have two variables here to make sure DIST_SUBDIRS won't get 'unit'
# added twice as then targets such as 'distclean' misbehave and try to
# do things twice in that subdir at times (and thus fails).
Added jni/curl/tests/appveyor.pm.




































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
# Copyright (C) 2020, Marc Hoersken, <info@marc-hoersken.de>
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
# furnished to do so, under the terms of the COPYING file.
#
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
# KIND, either express or implied.
#
###########################################################################

use strict;
use warnings;

my %APPVEYOR_TEST_NAMES;

sub appveyor_check_environment {
    if(defined $ENV{'APPVEYOR_API_URL'} && $ENV{'APPVEYOR_API_URL'}) {
        return 1;
    }
    return 0;
}

sub appveyor_create_test_result {
    my ($testnum, $testname)=@_;
    $testname =~ s/\\/\\\\/g;
    $testname =~ s/\'/\\\'/g;
    $testname =~ s/\"/\\\"/g;
    my $appveyor_baseurl="$ENV{'APPVEYOR_API_URL'}";
    my $appveyor_result=`curl --silent --noproxy "*" \\
    --header "Content-Type: application/json" \\
    --data "
        {
            'testName': '$testname',
            'testFramework': 'runtests.pl',
            'fileName': 'tests/data/test$testnum',
            'outcome': 'Running'
        }
    " \\
    "$appveyor_baseurl/api/tests"`;
    print $appveyor_result;
    $APPVEYOR_TEST_NAMES{$testnum}=$testname;
}

sub appveyor_update_test_result {
    my ($testnum, $error, $start, $stop)=@_;
    my $testname=$APPVEYOR_TEST_NAMES{$testnum};
    if(!defined $testname) {
        return;
    }
    if(!defined $stop) {
        $stop = $start;
    }
    my $appveyor_duration = sprintf("%.0f", ($stop-$start)*1000);
    my $appveyor_outcome;
    my $appveyor_category;
    if($error == 2) {
        $appveyor_outcome = 'Ignored';
        $appveyor_category = 'Warning';
    }
    elsif($error < 0) {
        $appveyor_outcome = 'NotRunnable';
        $appveyor_category = 'Warning';
    }
    elsif(!$error) {
        $appveyor_outcome = 'Passed';
        $appveyor_category = 'Information';
    }
    else {
        $appveyor_outcome = 'Failed';
        $appveyor_category = 'Error';
    }
    my $appveyor_baseurl="$ENV{'APPVEYOR_API_URL'}";
    my $appveyor_result=`curl --silent --noproxy "*" --request PUT \\
    --header "Content-Type: application/json" \\
    --data "
        {
            'testName': '$testname',
            'testFramework': 'runtests.pl',
            'fileName': 'tests/data/test$testnum',
            'outcome': '$appveyor_outcome',
            'durationMilliseconds': $appveyor_duration
        }
    " \\
    "$appveyor_baseurl/api/tests"`;
    print $appveyor_result;
    if($appveyor_category eq 'Error') {
        $appveyor_result=`curl --silent --noproxy "*" \\
        --header "Content-Type: application/json" \\
        --data "
            {
                'message': '$testname $appveyor_outcome',
                'category': '$appveyor_category',
                'details': 'Test $testnum $appveyor_outcome'
            }
        " \\
        "$appveyor_baseurl/api/build/messages"`;
        print $appveyor_result;
    }
}

1;
Added jni/curl/tests/azure.pm.




































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
# Copyright (C) 2020, Marc Hoersken, <info@marc-hoersken.de>
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
# furnished to do so, under the terms of the COPYING file.
#
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
# KIND, either express or implied.
#
###########################################################################

use strict;
use warnings;

use POSIX qw(strftime);

sub azure_check_environment {
    if(defined $ENV{'AZURE_ACCESS_TOKEN'} && $ENV{'AZURE_ACCESS_TOKEN'} &&
       defined $ENV{'AGENT_JOBNAME'} && $ENV{'BUILD_BUILDID'} &&
       defined $ENV{'SYSTEM_TEAMFOUNDATIONCOLLECTIONURI'} &&
       defined $ENV{'SYSTEM_TEAMPROJECTID'}) {
        return 1;
    }
    return 0;
}

sub azure_create_test_run {
    my $azure_baseurl="$ENV{'SYSTEM_TEAMFOUNDATIONCOLLECTIONURI'}$ENV{'SYSTEM_TEAMPROJECTID'}";
    my $azure_run=`curl --silent --noproxy "*" \\
    --header "Authorization: Bearer $ENV{'AZURE_ACCESS_TOKEN'}" \\
    --header "Content-Type: application/json" \\
    --data "
        {
            'name': '$ENV{'AGENT_JOBNAME'}',
            'automated': true,
            'build': {'id': '$ENV{'BUILD_BUILDID'}'}
        }
    " \\
    "$azure_baseurl/_apis/test/runs?api-version=5.0"`;
    if($azure_run =~ /"id":(\d+)/) {
        return $1;
    }
    return "";
}

sub azure_create_test_result {
    my ($azure_run_id, $testnum, $testname)=@_;
    $testname =~ s/\\/\\\\/g;
    $testname =~ s/\'/\\\'/g;
    $testname =~ s/\"/\\\"/g;
    my $azure_baseurl="$ENV{'SYSTEM_TEAMFOUNDATIONCOLLECTIONURI'}$ENV{'SYSTEM_TEAMPROJECTID'}";
    my $azure_result=`curl --silent --noproxy "*" \\
    --header "Authorization: Bearer $ENV{'AZURE_ACCESS_TOKEN'}" \\
    --header "Content-Type: application/json" \\
    --data "
        [
            {
                'build': {'id': '$ENV{'BUILD_BUILDID'}'},
                'testCase': {'id': $testnum},
                'testCaseTitle': '$testname',
                'automatedTestName': 'curl.tests.$testnum',
                'outcome': 'InProgress'
            }
        ]
    " \\
    "$azure_baseurl/_apis/test/runs/$azure_run_id/results?api-version=5.0"`;
    if($azure_result =~ /\[\{"id":(\d+)/) {
        return $1;
    }
    return "";
}

sub azure_update_test_result {
    my ($azure_run_id, $azure_result_id, $testnum, $error, $start, $stop)=@_;
    if(!defined $stop) {
        $stop = $start;
    }
    my $azure_start = strftime "%Y-%m-%dT%H:%M:%SZ", gmtime $start;
    my $azure_complete = strftime "%Y-%m-%dT%H:%M:%SZ", gmtime $stop;
    my $azure_duration = sprintf("%.0f", ($stop-$start)*1000);
    my $azure_outcome;
    if($error == 2) {
        $azure_outcome = 'Not applicable';
    }
    elsif($error < 0) {
        $azure_outcome = 'Not executed';
    }
    elsif(!$error) {
        $azure_outcome = 'Passed';
    }
    else {
        $azure_outcome = 'Failed';
    }
    my $azure_baseurl="$ENV{'SYSTEM_TEAMFOUNDATIONCOLLECTIONURI'}$ENV{'SYSTEM_TEAMPROJECTID'}";
    my $azure_result=`curl --silent --noproxy "*" --request PATCH \\
    --header "Authorization: Bearer $ENV{'AZURE_ACCESS_TOKEN'}" \\
    --header "Content-Type: application/json" \\
    --data "
        [
            {
                'id': $azure_result_id,
                'outcome': '$azure_outcome',
                'startedDate': '$azure_start',
                'completedDate': '$azure_complete',
                'durationInMs': $azure_duration
            }
        ]
    " \\
    "$azure_baseurl/_apis/test/runs/$azure_run_id/results?api-version=5.0"`;
    if($azure_result =~ /\[\{"id":(\d+)/) {
        return $1;
    }
    return "";
}

sub azure_update_test_run {
    my ($azure_run_id)=@_;
    my $azure_baseurl="$ENV{'SYSTEM_TEAMFOUNDATIONCOLLECTIONURI'}$ENV{'SYSTEM_TEAMPROJECTID'}";
    my $azure_run=`curl --silent --noproxy "*" --request PATCH \\
    --header "Authorization: Bearer $ENV{'AZURE_ACCESS_TOKEN'}" \\
    --header "Content-Type: application/json" \\
    --data "
        {
            'state': 'Completed'
        }
    " \\
    "$azure_baseurl/_apis/test/runs/$azure_run_id?api-version=5.0"`;
    if($azure_run =~ /"id":(\d+)/) {
        return $1;
    }
    return "";
}

1;
Added jni/curl/tests/badsymbols.pl.








































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
#!/usr/bin/env perl
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 2010-2020, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
# furnished to do so, under the terms of the COPYING file.
#
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
# KIND, either express or implied.
#
###########################################################################
#
# This script grew out of help from Przemyslaw Iskra and Balint Szilakszi
# a late evening in the #curl IRC channel on freenode.
#

use strict;
use warnings;
use vars qw($Cpreprocessor);

#
# configurehelp perl module is generated by configure script
#
my $rc = eval {
    require configurehelp;
    configurehelp->import(qw(
        $Cpreprocessor
    ));
    1;
};
# Set default values if configure has not generated a configurehelp.pm file.
# This is the case with cmake.
if (!$rc) {
    $Cpreprocessor = 'cpp';
}

# we may get the dir root pointed out
my $root=$ARGV[0] || ".";

# need an include directory when building out-of-tree
my $i = ($ARGV[1]) ? "-I$ARGV[1] " : '';

my $incdir = "$root/include/curl";

my $verbose=0;
my $summary=0;
my $misses=0;

my @syms;
my %doc;
my %rem;

sub scanenums {
    my ($file)=@_;
    my $skipit = 0;

    open H_IN, "-|", "$Cpreprocessor $i$file" || die "Cannot preprocess $file";
    while ( <H_IN> ) {
        if( /^#(line|) (\d+) \"(.*)\"/) {
            # if the included file isn't in our incdir, then we skip this section
            # until next #line
            #
            if($3 !~ /^$incdir/) {
                $skipit = 1;
                next;
            }
            # parse this!
            $skipit = 0,
        }
        if($skipit) {
            next;
        }
        if ( /enum\s+(\S+\s+)?{/ .. /}/ ) {
            s/^\s+//;
            chomp;
            s/[,\s].*//;
            if(($_ !~ /\}(;|)/) &&
               ($_ ne "typedef") &&
               ($_ ne "enum") &&
               ($_ !~ /^[ \t]*$/) &&
               ($_ ne "#")) {
                push @syms, $_;
            }
        }
    }
    close H_IN || die "Error preprocessing $file";
}

sub scanheader {
    my ($f)=@_;
    scanenums($f);
    open H, "<$f";
    while(<H>) {
        if (/^#define +([^ \n]*)/) {
            push @syms, $1;
        }
    }
    close H;
}


opendir(my $dh, $incdir) || die "Can't opendir: $!";
my @hfiles = grep { /\.h$/ } readdir($dh);
closedir $dh;

for(@hfiles) {
    scanheader("$incdir/$_");
}

my $errors = 0;
for my $s (@syms) {
    if($s !~ /^(lib|)curl/i) {
        print "Bad symbols in public header files:\n" if(!$errors);
        $errors++;
        print "  $s\n";
    }
}
if($errors) {
    exit 1;
}
printf "%d fine symbols found\n", scalar(@syms);
Changes to jni/curl/tests/certs/Makefile.in.
336
337
338
339
340
341
342

343
344
345
346
347
348
349
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@

USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@







>







336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
USE_WOLFSSH = @USE_WOLFSSH@
USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
Changes to jni/curl/tests/certs/scripts/Makefile.in.
276
277
278
279
280
281
282

283
284
285
286
287
288
289
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@

USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@







>







276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
USE_WOLFSSH = @USE_WOLFSSH@
USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
Changes to jni/curl/tests/data/Makefile.in.
298
299
300
301
302
303
304

305
306
307
308
309
310
311
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@

USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@







>







298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
USE_WOLFSSH = @USE_WOLFSSH@
USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
test289 test290 test291 test292 test293 test294 test295 test296 test297 \
test298 test299 test300 test301 test302 test303 test304 test305 test306 \
test307 test308 test309 test310 test311 test312 test313 test314 test315 \
test316 test317 test318 test319 test320 test321 test322 test323 test324 \
test325 test326 test327 test328 test329 test330 test331 test332 test333 \
test334 test335 test336 test337 test338 test339 test340 test341 test342 \
test343 \
test350 test351 test352 test353 test354 test355 test356 \
test393 test394 test395 \
\
test400 test401 test402 test403 test404 test405 test406 test407 test408 \
test409 \
\
test490 test491 test492 \
\







|







399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
test289 test290 test291 test292 test293 test294 test295 test296 test297 \
test298 test299 test300 test301 test302 test303 test304 test305 test306 \
test307 test308 test309 test310 test311 test312 test313 test314 test315 \
test316 test317 test318 test319 test320 test321 test322 test323 test324 \
test325 test326 test327 test328 test329 test330 test331 test332 test333 \
test334 test335 test336 test337 test338 test339 test340 test341 test342 \
test343 \
test350 test351 test352 test353 test354 test355 test356 test357 \
test393 test394 test395 \
\
test400 test401 test402 test403 test404 test405 test406 test407 test408 \
test409 \
\
test490 test491 test492 \
\
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
\
test800 test801 test802 test803 test804 test805 test806 test807 test808 \
test809 test810 test811 test812 test813 test814 test815 test816 test817 \
test818 test819 test820 test821 test822 test823 test824 test825 test826 \
test827 test828 test829 test830 test831 test832 test833 test834 test835 \
test836 test837 test838 test839 test840 test841 test842 test843 test844 \
test845 test846 test847 test848 test849 \
\
test850 test851 test852 test853 test854 test855 test856 test857 test858 \
test859 test860 test861 test862 test863 test864 test865 test866 test867 \
test868 test869 test870 test871 test872 test873 test874 test875 test876 \
test877 test878 test879 test880 test881 test882 test883 test884 test885 \
test886 test887 test888 test889 test890 test891 test892 test893 \
\
test900 test901 test902 test903 test904 test905 test906 test907 test908 \
test909 test910 test911 test912 test913 test914 test915 test916 test917 \
test918 test919 test920 test921 test922 test923 test924 test925 test926 \
test927 test928 test929 test930 test931 test932 test933 test934 test935 \
test936 test937 test938 test939 test940 test941 test942 test943 test944 \
test945 test946 test947 test948 test949 test950 test951 test952 test953 \
test954 \

\
test1000 test1001 test1002 test1003 test1004 test1005 test1006 test1007 \
test1008 test1009 test1010 test1011 test1012 test1013 test1014 test1015 \
test1016 test1017 test1018 test1019 test1020 test1021 test1022 test1023 \
test1024 test1025 test1026 test1027 test1028 test1029 test1030 test1031 \
test1032 test1033 test1034 test1035 test1036 test1037 test1038 test1039 \
test1040 test1041 test1042 test1043 test1044 test1045 test1046 test1047 \







<




|







|
>







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
\
test800 test801 test802 test803 test804 test805 test806 test807 test808 \
test809 test810 test811 test812 test813 test814 test815 test816 test817 \
test818 test819 test820 test821 test822 test823 test824 test825 test826 \
test827 test828 test829 test830 test831 test832 test833 test834 test835 \
test836 test837 test838 test839 test840 test841 test842 test843 test844 \
test845 test846 test847 test848 test849 \

test850 test851 test852 test853 test854 test855 test856 test857 test858 \
test859 test860 test861 test862 test863 test864 test865 test866 test867 \
test868 test869 test870 test871 test872 test873 test874 test875 test876 \
test877 test878 test879 test880 test881 test882 test883 test884 test885 \
test886 test887 test888 test889 test890 test891 test892 test893 test894 \
\
test900 test901 test902 test903 test904 test905 test906 test907 test908 \
test909 test910 test911 test912 test913 test914 test915 test916 test917 \
test918 test919 test920 test921 test922 test923 test924 test925 test926 \
test927 test928 test929 test930 test931 test932 test933 test934 test935 \
test936 test937 test938 test939 test940 test941 test942 test943 test944 \
test945 test946 test947 test948 test949 test950 test951 test952 test953 \
test954 test955 test956 test957 test958 test959 test960 test961 test962 \
test963 test964 test965 test966 test967 test968 test969 \
\
test1000 test1001 test1002 test1003 test1004 test1005 test1006 test1007 \
test1008 test1009 test1010 test1011 test1012 test1013 test1014 test1015 \
test1016 test1017 test1018 test1019 test1020 test1021 test1022 test1023 \
test1024 test1025 test1026 test1027 test1028 test1029 test1030 test1031 \
test1032 test1033 test1034 test1035 test1036 test1037 test1038 test1039 \
test1040 test1041 test1042 test1043 test1044 test1045 test1046 test1047 \
470
471
472
473
474
475
476
477

478
479
480
481
482
483
484
485
test1104 test1105 test1106 test1107 test1108 test1109 test1110 test1111 \
test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 \
test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 \
test1128 test1129 test1130 test1131 test1132 test1133 test1134 test1135 \
test1136 test1137 test1138 test1139 test1140 test1141 test1142 test1143 \
test1144 test1145 test1146 test1147 test1148 test1149 test1150 test1151 \
test1152 test1153 test1154 test1155 test1156 test1157 test1158 test1159 \
test1160 test1161 test1162 test1163 test1164 test1165 test1166 \

test1170 test1171 test1172 test1173 test1174 test1175 \
\
test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 \
test1208 test1209 test1210 test1211 test1212 test1213 test1214 test1215 \
test1216 test1217 test1218 test1219 \
test1220 test1221 test1222 test1223 test1224 test1225 test1226 test1227 \
test1228 test1229 test1230 test1231 test1232 test1233 test1234 test1235 \
test1236 test1237 test1238 test1239 test1240 test1241 test1242 test1243 \







|
>
|







471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
test1104 test1105 test1106 test1107 test1108 test1109 test1110 test1111 \
test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 \
test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 \
test1128 test1129 test1130 test1131 test1132 test1133 test1134 test1135 \
test1136 test1137 test1138 test1139 test1140 test1141 test1142 test1143 \
test1144 test1145 test1146 test1147 test1148 test1149 test1150 test1151 \
test1152 test1153 test1154 test1155 test1156 test1157 test1158 test1159 \
test1160 test1161 test1162 test1163 test1164 test1165 test1166 test1167 \
\
test1170 test1171 test1172 test1173 test1174 test1175 test1176 \
\
test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 \
test1208 test1209 test1210 test1211 test1212 test1213 test1214 test1215 \
test1216 test1217 test1218 test1219 \
test1220 test1221 test1222 test1223 test1224 test1225 test1226 test1227 \
test1228 test1229 test1230 test1231 test1232 test1233 test1234 test1235 \
test1236 test1237 test1238 test1239 test1240 test1241 test1242 test1243 \
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
test1540 test1541 \
test1550 test1551 test1552 test1553 test1554 test1555 test1556 test1557 \
test1558 test1559 test1560 test1561 test1562 test1563 test1564 test1565 \
\
test1590 test1591 test1592 test1593 test1594 test1595 test1596 \
\
test1600 test1601 test1602 test1603 test1604 test1605 test1606 test1607 \
test1608 test1609 test1620 test1621 \


\
test1650 test1651 test1652 test1653 test1654 test1655 \
\
test1700 test1701 test1702 \
\
test1800 test1801 \
\
test1900 test1901 test1902 test1903 test1904 test1905 test1906 test1907 \

\
test2000 test2001 test2002 test2003 test2004 test2005 test2006 test2007 \
test2008 test2009 test2010 test2011 test2012 test2013 test2014 test2015 \
test2016 test2017 test2018 test2019 test2020 test2021 test2022 test2023 \
test2024 test2025 test2026 test2027 test2028 test2029 test2030 test2031 \
test2032 test2033 test2034 test2035 test2036 test2037 test2038 test2039 \
test2040 test2041 test2042 test2043 test2044 test2045 test2046 test2047 \
test2048 test2049 test2050 test2051 test2052 test2053 test2054 test2055 \
test2056 test2057 test2058 test2059 test2060 test2061 test2062 test2063 \
test2064 test2065 test2066 test2067 test2068 test2069 \
         test2071 test2072 test2073 test2074 test2075 test2076 test2077 \
test2078 \
test2080 \
test2100 \
\
test3000 test3001



# TESTCASES are taken from Makefile.inc
EXTRA_DIST = $(TESTCASES) DISABLED CMakeLists.txt
all: all-am

.SUFFIXES:







|
>
>








>















|
>







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
test1540 test1541 \
test1550 test1551 test1552 test1553 test1554 test1555 test1556 test1557 \
test1558 test1559 test1560 test1561 test1562 test1563 test1564 test1565 \
\
test1590 test1591 test1592 test1593 test1594 test1595 test1596 \
\
test1600 test1601 test1602 test1603 test1604 test1605 test1606 test1607 \
test1608 test1609 test1610 test1611 test1612 \
\
test1620 test1621 \
\
test1650 test1651 test1652 test1653 test1654 test1655 \
\
test1700 test1701 test1702 \
\
test1800 test1801 \
\
test1900 test1901 test1902 test1903 test1904 test1905 test1906 test1907 \
test1908 \
\
test2000 test2001 test2002 test2003 test2004 test2005 test2006 test2007 \
test2008 test2009 test2010 test2011 test2012 test2013 test2014 test2015 \
test2016 test2017 test2018 test2019 test2020 test2021 test2022 test2023 \
test2024 test2025 test2026 test2027 test2028 test2029 test2030 test2031 \
test2032 test2033 test2034 test2035 test2036 test2037 test2038 test2039 \
test2040 test2041 test2042 test2043 test2044 test2045 test2046 test2047 \
test2048 test2049 test2050 test2051 test2052 test2053 test2054 test2055 \
test2056 test2057 test2058 test2059 test2060 test2061 test2062 test2063 \
test2064 test2065 test2066 test2067 test2068 test2069 \
         test2071 test2072 test2073 test2074 test2075 test2076 test2077 \
test2078 \
test2080 \
test2100 \
\
test3000 test3001 \
test3002 test3003 test3004 test3005 test3006 test3007


# TESTCASES are taken from Makefile.inc
EXTRA_DIST = $(TESTCASES) DISABLED CMakeLists.txt
all: all-am

.SUFFIXES:
Changes to jni/curl/tests/data/Makefile.inc.
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
test289 test290 test291 test292 test293 test294 test295 test296 test297 \
test298 test299 test300 test301 test302 test303 test304 test305 test306 \
test307 test308 test309 test310 test311 test312 test313 test314 test315 \
test316 test317 test318 test319 test320 test321 test322 test323 test324 \
test325 test326 test327 test328 test329 test330 test331 test332 test333 \
test334 test335 test336 test337 test338 test339 test340 test341 test342 \
test343 \
test350 test351 test352 test353 test354 test355 test356 \
test393 test394 test395 \
\
test400 test401 test402 test403 test404 test405 test406 test407 test408 \
test409 \
\
test490 test491 test492 \
\







|







55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
test289 test290 test291 test292 test293 test294 test295 test296 test297 \
test298 test299 test300 test301 test302 test303 test304 test305 test306 \
test307 test308 test309 test310 test311 test312 test313 test314 test315 \
test316 test317 test318 test319 test320 test321 test322 test323 test324 \
test325 test326 test327 test328 test329 test330 test331 test332 test333 \
test334 test335 test336 test337 test338 test339 test340 test341 test342 \
test343 \
test350 test351 test352 test353 test354 test355 test356 test357 \
test393 test394 test395 \
\
test400 test401 test402 test403 test404 test405 test406 test407 test408 \
test409 \
\
test490 test491 test492 \
\
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
\
test800 test801 test802 test803 test804 test805 test806 test807 test808 \
test809 test810 test811 test812 test813 test814 test815 test816 test817 \
test818 test819 test820 test821 test822 test823 test824 test825 test826 \
test827 test828 test829 test830 test831 test832 test833 test834 test835 \
test836 test837 test838 test839 test840 test841 test842 test843 test844 \
test845 test846 test847 test848 test849 \
\
test850 test851 test852 test853 test854 test855 test856 test857 test858 \
test859 test860 test861 test862 test863 test864 test865 test866 test867 \
test868 test869 test870 test871 test872 test873 test874 test875 test876 \
test877 test878 test879 test880 test881 test882 test883 test884 test885 \
test886 test887 test888 test889 test890 test891 test892 test893 \
\
test900 test901 test902 test903 test904 test905 test906 test907 test908 \
test909 test910 test911 test912 test913 test914 test915 test916 test917 \
test918 test919 test920 test921 test922 test923 test924 test925 test926 \
test927 test928 test929 test930 test931 test932 test933 test934 test935 \
test936 test937 test938 test939 test940 test941 test942 test943 test944 \
test945 test946 test947 test948 test949 test950 test951 test952 test953 \
test954 \

\
test1000 test1001 test1002 test1003 test1004 test1005 test1006 test1007 \
test1008 test1009 test1010 test1011 test1012 test1013 test1014 test1015 \
test1016 test1017 test1018 test1019 test1020 test1021 test1022 test1023 \
test1024 test1025 test1026 test1027 test1028 test1029 test1030 test1031 \
test1032 test1033 test1034 test1035 test1036 test1037 test1038 test1039 \
test1040 test1041 test1042 test1043 test1044 test1045 test1046 test1047 \







<




|







|
>







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
\
test800 test801 test802 test803 test804 test805 test806 test807 test808 \
test809 test810 test811 test812 test813 test814 test815 test816 test817 \
test818 test819 test820 test821 test822 test823 test824 test825 test826 \
test827 test828 test829 test830 test831 test832 test833 test834 test835 \
test836 test837 test838 test839 test840 test841 test842 test843 test844 \
test845 test846 test847 test848 test849 \

test850 test851 test852 test853 test854 test855 test856 test857 test858 \
test859 test860 test861 test862 test863 test864 test865 test866 test867 \
test868 test869 test870 test871 test872 test873 test874 test875 test876 \
test877 test878 test879 test880 test881 test882 test883 test884 test885 \
test886 test887 test888 test889 test890 test891 test892 test893 test894 \
\
test900 test901 test902 test903 test904 test905 test906 test907 test908 \
test909 test910 test911 test912 test913 test914 test915 test916 test917 \
test918 test919 test920 test921 test922 test923 test924 test925 test926 \
test927 test928 test929 test930 test931 test932 test933 test934 test935 \
test936 test937 test938 test939 test940 test941 test942 test943 test944 \
test945 test946 test947 test948 test949 test950 test951 test952 test953 \
test954 test955 test956 test957 test958 test959 test960 test961 test962 \
test963 test964 test965 test966 test967 test968 test969 \
\
test1000 test1001 test1002 test1003 test1004 test1005 test1006 test1007 \
test1008 test1009 test1010 test1011 test1012 test1013 test1014 test1015 \
test1016 test1017 test1018 test1019 test1020 test1021 test1022 test1023 \
test1024 test1025 test1026 test1027 test1028 test1029 test1030 test1031 \
test1032 test1033 test1034 test1035 test1036 test1037 test1038 test1039 \
test1040 test1041 test1042 test1043 test1044 test1045 test1046 test1047 \
127
128
129
130
131
132
133
134

135
136
137
138
139
140
141
142
test1104 test1105 test1106 test1107 test1108 test1109 test1110 test1111 \
test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 \
test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 \
test1128 test1129 test1130 test1131 test1132 test1133 test1134 test1135 \
test1136 test1137 test1138 test1139 test1140 test1141 test1142 test1143 \
test1144 test1145 test1146 test1147 test1148 test1149 test1150 test1151 \
test1152 test1153 test1154 test1155 test1156 test1157 test1158 test1159 \
test1160 test1161 test1162 test1163 test1164 test1165 test1166 \

test1170 test1171 test1172 test1173 test1174 test1175 \
\
test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 \
test1208 test1209 test1210 test1211 test1212 test1213 test1214 test1215 \
test1216 test1217 test1218 test1219 \
test1220 test1221 test1222 test1223 test1224 test1225 test1226 test1227 \
test1228 test1229 test1230 test1231 test1232 test1233 test1234 test1235 \
test1236 test1237 test1238 test1239 test1240 test1241 test1242 test1243 \







|
>
|







127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
test1104 test1105 test1106 test1107 test1108 test1109 test1110 test1111 \
test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 \
test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 \
test1128 test1129 test1130 test1131 test1132 test1133 test1134 test1135 \
test1136 test1137 test1138 test1139 test1140 test1141 test1142 test1143 \
test1144 test1145 test1146 test1147 test1148 test1149 test1150 test1151 \
test1152 test1153 test1154 test1155 test1156 test1157 test1158 test1159 \
test1160 test1161 test1162 test1163 test1164 test1165 test1166 test1167 \
\
test1170 test1171 test1172 test1173 test1174 test1175 test1176 \
\
test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 \
test1208 test1209 test1210 test1211 test1212 test1213 test1214 test1215 \
test1216 test1217 test1218 test1219 \
test1220 test1221 test1222 test1223 test1224 test1225 test1226 test1227 \
test1228 test1229 test1230 test1231 test1232 test1233 test1234 test1235 \
test1236 test1237 test1238 test1239 test1240 test1241 test1242 test1243 \
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

test1540 test1541 \
test1550 test1551 test1552 test1553 test1554 test1555 test1556 test1557 \
test1558 test1559 test1560 test1561 test1562 test1563 test1564 test1565 \
\
test1590 test1591 test1592 test1593 test1594 test1595 test1596 \
\
test1600 test1601 test1602 test1603 test1604 test1605 test1606 test1607 \
test1608 test1609 test1620 test1621 \


\
test1650 test1651 test1652 test1653 test1654 test1655 \
\
test1700 test1701 test1702 \
\
test1800 test1801 \
\
test1900 test1901 test1902 test1903 test1904 test1905 test1906 test1907 \

\
test2000 test2001 test2002 test2003 test2004 test2005 test2006 test2007 \
test2008 test2009 test2010 test2011 test2012 test2013 test2014 test2015 \
test2016 test2017 test2018 test2019 test2020 test2021 test2022 test2023 \
test2024 test2025 test2026 test2027 test2028 test2029 test2030 test2031 \
test2032 test2033 test2034 test2035 test2036 test2037 test2038 test2039 \
test2040 test2041 test2042 test2043 test2044 test2045 test2046 test2047 \
test2048 test2049 test2050 test2051 test2052 test2053 test2054 test2055 \
test2056 test2057 test2058 test2059 test2060 test2061 test2062 test2063 \
test2064 test2065 test2066 test2067 test2068 test2069 \
         test2071 test2072 test2073 test2074 test2075 test2076 test2077 \
test2078 \
test2080 \
test2100 \
\
test3000 test3001








|
>
>








>















|
>
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
test1540 test1541 \
test1550 test1551 test1552 test1553 test1554 test1555 test1556 test1557 \
test1558 test1559 test1560 test1561 test1562 test1563 test1564 test1565 \
\
test1590 test1591 test1592 test1593 test1594 test1595 test1596 \
\
test1600 test1601 test1602 test1603 test1604 test1605 test1606 test1607 \
test1608 test1609 test1610 test1611 test1612 \
\
test1620 test1621 \
\
test1650 test1651 test1652 test1653 test1654 test1655 \
\
test1700 test1701 test1702 \
\
test1800 test1801 \
\
test1900 test1901 test1902 test1903 test1904 test1905 test1906 test1907 \
test1908 \
\
test2000 test2001 test2002 test2003 test2004 test2005 test2006 test2007 \
test2008 test2009 test2010 test2011 test2012 test2013 test2014 test2015 \
test2016 test2017 test2018 test2019 test2020 test2021 test2022 test2023 \
test2024 test2025 test2026 test2027 test2028 test2029 test2030 test2031 \
test2032 test2033 test2034 test2035 test2036 test2037 test2038 test2039 \
test2040 test2041 test2042 test2043 test2044 test2045 test2046 test2047 \
test2048 test2049 test2050 test2051 test2052 test2053 test2054 test2055 \
test2056 test2057 test2058 test2059 test2060 test2061 test2062 test2063 \
test2064 test2065 test2066 test2067 test2068 test2069 \
         test2071 test2072 test2073 test2074 test2075 test2076 test2077 \
test2078 \
test2080 \
test2100 \
\
test3000 test3001 \
test3002 test3003 test3004 test3005 test3006 test3007
Changes to jni/curl/tests/data/test1070.
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<server>
http
</server>
 <name>
HTTP POST with server closing connection before (all) data is received
 </name>
 <command>
 -d @log/input1070 http://%HOSTIP:%HTTPPORT/1070
</command>
<file name="log/input1070">
This creates the named file with this content before the test case is run,
which is useful if the test case needs a file to act on. We create this file
rather large (larger than your typical TCP packet) so that not all of it can nor
will be sent in one go as that is kind of the point of this test!








|







28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<server>
http
</server>
 <name>
HTTP POST with server closing connection before (all) data is received
 </name>
 <command>
 -d @log/input1070 http://%HOSTIP:%HTTPPORT/1070 -H "Expect: 100-continue"
</command>
<file name="log/input1070">
This creates the named file with this content before the test case is run,
which is useful if the test case needs a file to act on. We create this file
rather large (larger than your typical TCP packet) so that not all of it can nor
will be sent in one go as that is kind of the point of this test!

51
52
53
54
55
56
57

58
59
60
61
62
63
64
65
<strip>
^User-Agent:.*
</strip>
<protocol nonewline="yes">
POST /1070 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*

Content-Length: 2313
Content-Type: application/x-www-form-urlencoded
Expect: 100-continue

This creates 
</protocol>
</verify>
</testcase>







>


<





51
52
53
54
55
56
57
58
59
60

61
62
63
64
65
<strip>
^User-Agent:.*
</strip>
<protocol nonewline="yes">
POST /1070 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
Expect: 100-continue
Content-Length: 2313
Content-Type: application/x-www-form-urlencoded


This creates 
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test1129.

cannot compute difference between binary files

Changes to jni/curl/tests/data/test1133.
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
</strip>
<protocol>
POST /we/want/1133 HTTP/1.1
User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
Host: %HOSTIP:%HTTPPORT
Accept: */*
Content-Length: 1264
Expect: 100-continue
Content-Type: multipart/form-data; boundary=----------------------------24e78000bd32

------------------------------24e78000bd32
Content-Disposition: form-data; name="file"; filename="faker,and;.txt"
Content-Type: mo/foo

foo bar







<







44
45
46
47
48
49
50

51
52
53
54
55
56
57
</strip>
<protocol>
POST /we/want/1133 HTTP/1.1
User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
Host: %HOSTIP:%HTTPPORT
Accept: */*
Content-Length: 1264

Content-Type: multipart/form-data; boundary=----------------------------24e78000bd32

------------------------------24e78000bd32
Content-Disposition: form-data; name="file"; filename="faker,and;.txt"
Content-Type: mo/foo

foo bar
Added jni/curl/tests/data/test1167.
















































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<testcase>
<info>
<keywords>
source analysis
</keywords>
</info>

#
# Client-side
<client>
<server>
none
</server>

 <name>
Verify curl prefix of public symbols in header files
 </name>

<command type="perl">
%SRCDIR/badsymbols.pl %SRCDIR/..
</command>
</client>

</testcase>
Added jni/curl/tests/data/test1176.








































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
globbing
</keywords>
</info>

#
# Server-side
<reply>
<data nocheck="yes">
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
ETag: "21025-dc7-39462498"
Accept-Ranges: bytes
Content-Length: 6
Connection: close
Content-Type: text/html
Funny-head: yesyes

-foo-
</data>
</reply>

#
# Client-side
<client>
<server>
http
</server>
 <name>
HTTP GET
 </name>
 <command option="no-output">
http://%HOSTIP:%HTTPPORT/1176 -o 'log/base-#0'
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<strip>
^User-Agent:.*
</strip>
<protocol>
GET /1176 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*

</protocol>
<file name="log/base-#0">
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
ETag: "21025-dc7-39462498"
Accept-Ranges: bytes
Content-Length: 6
Connection: close
Content-Type: text/html
Funny-head: yesyes

-foo-
</file>
</verify>
</testcase>
Changes to jni/curl/tests/data/test1300.
14
15
16
17
18
19
20
21
22
23
24
25
26
</server>
<features>
unittest
</features>
 <name>
llist unit tests
 </name>
<tool>
unit1300
</tool>
</client>

</testcase>







<
<
<

<

14
15
16
17
18
19
20



21

22
</server>
<features>
unittest
</features>
 <name>
llist unit tests
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1301.
14
15
16
17
18
19
20
21
22
23
24
25
26
</server>
<features>
unittest
</features>
 <name>
curl_strcasecompare unit tests
 </name>
<tool>
unit1301
</tool>
</client>

</testcase>







<
<
<

<

14
15
16
17
18
19
20



21

22
</server>
<features>
unittest
</features>
 <name>
curl_strcasecompare unit tests
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1302.
14
15
16
17
18
19
20
21
22
23
24
25
26
</server>
<features>
unittest
</features>
 <name>
base64 encode/decode unit tests
 </name>
<tool>
unit1302
</tool>
</client>

</testcase>







<
<
<

<

14
15
16
17
18
19
20



21

22
</server>
<features>
unittest
</features>
 <name>
base64 encode/decode unit tests
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1303.
14
15
16
17
18
19
20
21
22
23
24
25
26
</server>
<features>
unittest
</features>
 <name>
Curl_timeleft unit tests
 </name>
<tool>
unit1303
</tool>
</client>

</testcase>







<
<
<

<

14
15
16
17
18
19
20



21

22
</server>
<features>
unittest
</features>
 <name>
Curl_timeleft unit tests
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1304.
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
</server>
<features>
unittest
</features>
 <name>
netrc parsing unit tests
 </name>
<tool>
unit1304
</tool>
<file name="log/netrc1304">
machine example.com login admin password passwd
machine curl.example.com login none password none
</file>
</client>

</testcase>







<
<
<





<

14
15
16
17
18
19
20



21
22
23
24
25

26
</server>
<features>
unittest
</features>
 <name>
netrc parsing unit tests
 </name>



<file name="log/netrc1304">
machine example.com login admin password passwd
machine curl.example.com login none password none
</file>
</client>

</testcase>
Changes to jni/curl/tests/data/test1305.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
</server>
<features>
unittest
</features>
 <name>
internal hash create/destroy testing
 </name>
<tool>
unit1305
</tool>
<command>
1305
</command>
</client>

</testcase>







<
<
<




<

15
16
17
18
19
20
21



22
23
24
25

26
</server>
<features>
unittest
</features>
 <name>
internal hash create/destroy testing
 </name>



<command>
1305
</command>
</client>

</testcase>
Changes to jni/curl/tests/data/test1307.
16
17
18
19
20
21
22
23
24
25
26
27
28
<features>
unittest
ftp
</features>
 <name>
internal Curl_fnmatch() testing
 </name>
<tool>
unit1307
</tool>
</client>

</testcase>







<
<
<

<

16
17
18
19
20
21
22



23

24
<features>
unittest
ftp
</features>
 <name>
internal Curl_fnmatch() testing
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1308.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<features>
unittest
http
</features>
 <name>
formpost unit tests
 </name>
<tool>
unit1308
</tool>
<file name="log/test-1308">
Piece of the file that is to uploaded as a formpost
</file>
</client>

</testcase>







<
<
<




<

16
17
18
19
20
21
22



23
24
25
26

27
<features>
unittest
http
</features>
 <name>
formpost unit tests
 </name>



<file name="log/test-1308">
Piece of the file that is to uploaded as a formpost
</file>
</client>

</testcase>
Changes to jni/curl/tests/data/test1309.
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
</server>
<features>
unittest
</features>
 <name>
splay unit tests
 </name>
<tool>
unit1309
</tool>
</client>

<verify>
<stdout>
Result:
      0.1013[3]
    0.1003[2]







<
<
<







14
15
16
17
18
19
20



21
22
23
24
25
26
27
</server>
<features>
unittest
</features>
 <name>
splay unit tests
 </name>



</client>

<verify>
<stdout>
Result:
      0.1013[3]
    0.1003[2]
1560
1561
1562
1563
1564
1565
1566
1567
1568
removed payload 1003[0]
removed payload 1003[1]
removed payload 1013[0]
removed payload 1013[1]
removed payload 1013[2]
</stdout>
</verify>

</testcase>







<

1557
1558
1559
1560
1561
1562
1563

1564
removed payload 1003[0]
removed payload 1003[1]
removed payload 1013[0]
removed payload 1013[1]
removed payload 1013[2]
</stdout>
</verify>

</testcase>
Changes to jni/curl/tests/data/test1323.
13
14
15
16
17
18
19



20
21
22
23
24
25
26
27
28
29
30
31
32

#
# Client-side
<client>
<server>
none
</server>



<name>
curlx_tvdiff
</name>
<tool>
unit1323
</tool>
</client>

#
# Verify data after the test has been "shot"
<verify>
</verify>
</testcase>







>
>
>



<
<
<







13
14
15
16
17
18
19
20
21
22
23
24
25



26
27
28
29
30
31
32

#
# Client-side
<client>
<server>
none
</server>
<features>
unittest
</features>
<name>
curlx_tvdiff
</name>



</client>

#
# Verify data after the test has been "shot"
<verify>
</verify>
</testcase>
Changes to jni/curl/tests/data/test1330.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<server>
none
</server>
<features>
unittest
TrackMemory
</features>
# tool is what to use instead of 'curl'
<tool>
unit1330
</tool>

<name>
unit tests memory tracking operational
</name>
<command>
nothing
</command>
</client>







<
<
<
<
<







16
17
18
19
20
21
22





23
24
25
26
27
28
29
<server>
none
</server>
<features>
unittest
TrackMemory
</features>





<name>
unit tests memory tracking operational
</name>
<command>
nothing
</command>
</client>
44
45
46
47
48
49
50
51
52
s/ =.*//
s/\(.*\)/()/
s/:\d+/:/
s:^(MEM )(.*/)(.*):$1$3:
s/\r\n/\n/
</stripfile>
</verify>

</testcase>







<

39
40
41
42
43
44
45

46
s/ =.*//
s/\(.*\)/()/
s/:\d+/:/
s:^(MEM )(.*/)(.*):$1$3:
s/\r\n/\n/
</stripfile>
</verify>

</testcase>
Changes to jni/curl/tests/data/test1394.
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
</server>
<features>
unittest
</features>
 <name>
unit test for parse_cert_parameter()
 </name>
<tool>
unit1394
</tool>
</client>

<verify>
<stdout mode="text">
</stdout>
</verify>

</testcase>







<
<
<






<

13
14
15
16
17
18
19



20
21
22
23
24
25

26
</server>
<features>
unittest
</features>
 <name>
unit test for parse_cert_parameter()
 </name>



</client>

<verify>
<stdout mode="text">
</stdout>
</verify>

</testcase>
Changes to jni/curl/tests/data/test1395.
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</server>
<features>
unittest
</features>
 <name>
Curl_dedotdotify
 </name>
<tool>
unit1395
</tool>

</client>

</testcase>







<
<
<
<

<

13
14
15
16
17
18
19




20

21
</server>
<features>
unittest
</features>
 <name>
Curl_dedotdotify
 </name>




</client>

</testcase>
Changes to jni/curl/tests/data/test1396.
15
16
17
18
19
20
21
22
23
24
25
26
27
</server>
<features>
unittest
</features>
 <name>
curl_easy_escape and curl_easy_unescape
 </name>
<tool>
unit1396
</tool>
</client>

</testcase>







<
<
<



15
16
17
18
19
20
21



22
23
24
</server>
<features>
unittest
</features>
 <name>
curl_easy_escape and curl_easy_unescape
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1397.
15
16
17
18
19
20
21
22
23
24
25
26
27
</server>
<features>
unittest
</features>
 <name>
Check wildcard certificate matching function Curl_cert_hostcheck
 </name>
<tool>
unit1397
</tool>
</client>

</testcase>







<
<
<



15
16
17
18
19
20
21



22
23
24
</server>
<features>
unittest
</features>
 <name>
Check wildcard certificate matching function Curl_cert_hostcheck
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1398.
14
15
16
17
18
19
20
21
22
23
24
25
26
</server>
<features>
unittest
</features>
 <name>
curl_msnprintf unit tests
 </name>
<tool>
unit1398
</tool>
</client>

</testcase>







<
<
<



14
15
16
17
18
19
20



21
22
23
</server>
<features>
unittest
</features>
 <name>
curl_msnprintf unit tests
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1399.
14
15
16
17
18
19
20
21
22
23
24
25
26
</server>
<features>
unittest
</features>
 <name>
Curl_pgrsTime unit tests
 </name>
<tool>
unit1399
</tool>
</client>

</testcase>







<
<
<

<

14
15
16
17
18
19
20



21

22
</server>
<features>
unittest
</features>
 <name>
Curl_pgrsTime unit tests
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1437.
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<protocol>
GET /1437 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*

GET /1437 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="testuser", realm="testrealm", nonce="2", uri="/1437", response="4376eb639bf8e7343a6e7b56e1b89c4f", algorithm="MD5"
User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
Accept: */*

</protocol>
</verify>
</testcase>







|






71
72
73
74
75
76
77
78
79
80
81
82
83
84
<protocol>
GET /1437 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*

GET /1437 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="testuser", realm="testrealm", nonce="2", uri="/1437", response="4376eb639bf8e7343a6e7b56e1b89c4f", algorithm=MD5
User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
Accept: */*

</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test153.
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/1530002", response="f84511b014fdd0ba6494f42871079c32"
User-Agent: curl/7.11.0-CVS (i686-pc-linux-gnu) libcurl/7.11.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS
Accept: */*

GET /1530002 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="testuser", realm="testrealm", nonce="999999", uri="/1530002", cnonce="MTA4MzIy", nc="00000001", qop="auth", response="25291c357671604a16c0242f56721c07", algorithm="MD5"
User-Agent: curl/7.11.0-CVS (i686-pc-linux-gnu) libcurl/7.11.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS
Accept: */*

</protocol>
<stdout>
HTTP/1.1 401 Authorization Required swsclose
Server: Apache/1.3.27 (Darwin) PHP/4.1.2







|







111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/1530002", response="f84511b014fdd0ba6494f42871079c32"
User-Agent: curl/7.11.0-CVS (i686-pc-linux-gnu) libcurl/7.11.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS
Accept: */*

GET /1530002 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="testuser", realm="testrealm", nonce="999999", uri="/1530002", cnonce="MTA4MzIy", nc="00000001", qop="auth", response="25291c357671604a16c0242f56721c07", algorithm=MD5
User-Agent: curl/7.11.0-CVS (i686-pc-linux-gnu) libcurl/7.11.0-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS
Accept: */*

</protocol>
<stdout>
HTTP/1.1 401 Authorization Required swsclose
Server: Apache/1.3.27 (Darwin) PHP/4.1.2
Changes to jni/curl/tests/data/test1538.
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
e89: The max connection limit is reached
e90: SSL public key does not match pinned public key
e91: SSL server certificate status verification FAILED
e92: Stream error in the HTTP/2 framing layer
e93: API function called from within callback
e94: An authentication function returned an error
e95: HTTP/3 error

e96: Unknown error
m-1: Please call curl_multi_perform() soon
m0: No error
m1: Invalid multi handle
m2: Invalid easy handle
m3: Out of memory
m4: Internal error
m5: Invalid socket argument
m6: Unknown option
m7: The easy handle is already added to a multi handle
m8: API function called from within callback
m9: Wakeup is unavailable or failed

m10: Unknown error
s0: No error
s1: Unknown share option
s2: Share currently in use
s3: Invalid share handle
s4: Out of memory
s5: Feature not enabled in this library
s6: CURLSHcode unknown







>
|











>
|







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
e89: The max connection limit is reached
e90: SSL public key does not match pinned public key
e91: SSL server certificate status verification FAILED
e92: Stream error in the HTTP/2 framing layer
e93: API function called from within callback
e94: An authentication function returned an error
e95: HTTP/3 error
e96: QUIC connection error
e97: Unknown error
m-1: Please call curl_multi_perform() soon
m0: No error
m1: Invalid multi handle
m2: Invalid easy handle
m3: Out of memory
m4: Internal error
m5: Invalid socket argument
m6: Unknown option
m7: The easy handle is already added to a multi handle
m8: API function called from within callback
m9: Wakeup is unavailable or failed
m10: A libcurl function was given a bad argument
m11: Unknown error
s0: No error
s1: Unknown share option
s2: Share currently in use
s3: Invalid share handle
s4: Out of memory
s5: Feature not enabled in this library
s6: CURLSHcode unknown
Changes to jni/curl/tests/data/test1600.
15
16
17
18
19
20
21
22
23
24
25
26
27
<features>
unittest
NTLM
</features>
 <name>
NTLM unit tests
 </name>
<tool>
unit1600
</tool>
</client>

</testcase>







<
<
<

<

15
16
17
18
19
20
21



22

23
<features>
unittest
NTLM
</features>
 <name>
NTLM unit tests
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1601.
14
15
16
17
18
19
20
21
22
23
24
25
26
</server>
<features>
unittest
</features>
 <name>
MD5 unit tests
 </name>
<tool>
unit1601
</tool>
</client>

</testcase>







<
<
<

<

14
15
16
17
18
19
20



21

22
</server>
<features>
unittest
</features>
 <name>
MD5 unit tests
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1602.
14
15
16
17
18
19
20
21
22
23
24
25
26
</server>
<features>
unittest
</features>
 <name>
Internal hash create/add/destroy testing, exercising clean functions
 </name>
<tool>
unit1602
</tool>
</client>

</testcase>







<
<
<

<

14
15
16
17
18
19
20



21

22
</server>
<features>
unittest
</features>
 <name>
Internal hash create/add/destroy testing, exercising clean functions
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1603.
14
15
16
17
18
19
20
21
22
23
24
25
26
</server>
<features>
unittest
</features>
 <name>
Internal hash add, retrieval, deletion testing
 </name>
<tool>
unit1603
</tool>
</client>

</testcase>







<
<
<

<

14
15
16
17
18
19
20



21

22
</server>
<features>
unittest
</features>
 <name>
Internal hash add, retrieval, deletion testing
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1604.
13
14
15
16
17
18
19
20
21
22
23
24
25
</server>
<features>
unittest
</features>
 <name>
Test WIN32/MSDOS filename sanitization
 </name>
<tool>
unit1604
</tool>
</client>

</testcase>







<
<
<

<

13
14
15
16
17
18
19



20

21
</server>
<features>
unittest
</features>
 <name>
Test WIN32/MSDOS filename sanitization
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1605.
13
14
15
16
17
18
19
20
21
22
23
24
25
</server>
<features>
unittest
</features>
 <name>
Test negative data lengths as input to libcurl functions
 </name>
<tool>
unit1605
</tool>
</client>

</testcase>







<
<
<

<

13
14
15
16
17
18
19



20

21
</server>
<features>
unittest
</features>
 <name>
Test negative data lengths as input to libcurl functions
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1606.
14
15
16
17
18
19
20
21
22
23
24
25
26
</server>
<features>
unittest
</features>
 <name>
verify speedcheck
 </name>
<tool>
unit1606
</tool>
</client>

</testcase>







<
<
<

<

14
15
16
17
18
19
20



21

22
</server>
<features>
unittest
</features>
 <name>
verify speedcheck
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1607.
14
15
16
17
18
19
20
21
22
23
24
25
26
</server>
<features>
unittest
</features>
 <name>
CURLOPT_RESOLVE parsing
 </name>
<tool>
unit1607
</tool>
</client>

</testcase>







<
<
<

<

14
15
16
17
18
19
20



21

22
</server>
<features>
unittest
</features>
 <name>
CURLOPT_RESOLVE parsing
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1608.
14
15
16
17
18
19
20
21
22
23
24
25
26
</server>
<features>
unittest
</features>
 <name>
verify DNS shuffling
 </name>
<tool>
unit1608
</tool>
</client>

</testcase>







<
<
<

<

14
15
16
17
18
19
20



21

22
</server>
<features>
unittest
</features>
 <name>
verify DNS shuffling
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1609.
14
15
16
17
18
19
20
21
22
23
24
25
26
</server>
<features>
unittest
</features>
 <name>
CURLOPT_RESOLVE parsing
 </name>
<tool>
unit1609
</tool>
</client>

</testcase>







<
<
<

<

14
15
16
17
18
19
20



21

22
</server>
<features>
unittest
</features>
 <name>
CURLOPT_RESOLVE parsing
 </name>



</client>

</testcase>
Added jni/curl/tests/data/test1610.












































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<testcase>
<info>
<keywords>
unittest
SHA256
</keywords>
</info>

#
# Client-side
<client>
<server>
none
</server>
<features>
unittest
</features>
 <name>
SHA256 unit tests
 </name>
</client>
</testcase>
Added jni/curl/tests/data/test1611.












































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<testcase>
<info>
<keywords>
unittest
MD4
</keywords>
</info>

#
# Client-side
<client>
<server>
none
</server>
<features>
unittest
</features>
 <name>
MD4 unit tests
 </name>
</client>
</testcase>
Added jni/curl/tests/data/test1612.












































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<testcase>
<info>
<keywords>
unittest
HMAC
</keywords>
</info>

#
# Client-side
<client>
<server>
none
</server>
<features>
unittest
</features>
 <name>
HMAC unit tests
 </name>
</client>
</testcase>
Changes to jni/curl/tests/data/test1620.
14
15
16
17
18
19
20
21
22
23
24
25
26
</server>
<features>
unittest
</features>
 <name>
unit tests for url.c
 </name>
<tool>
unit1620
</tool>
</client>

</testcase>







<
<
<

<

14
15
16
17
18
19
20



21

22
</server>
<features>
unittest
</features>
 <name>
unit tests for url.c
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1621.
15
16
17
18
19
20
21
22
23
24
25
26
27
<features>
unittest
https
</features>
 <name>
unit tests for stripcredentials from URL
 </name>
<tool>
unit1621
</tool>
</client>

</testcase>







<
<
<

<

15
16
17
18
19
20
21



22

23
<features>
unittest
https
</features>
 <name>
unit tests for stripcredentials from URL
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1650.
15
16
17
18
19
20
21
22
23
24
25
26
27
<features>
unittest
DoH
</features>
 <name>
DOH
 </name>
<tool>
unit1650
</tool>
</client>

</testcase>







<
<
<

<

15
16
17
18
19
20
21



22

23
<features>
unittest
DoH
</features>
 <name>
DOH
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1651.
14
15
16
17
18
19
20
21
22
23
24
25
26
</server>
<features>
unittest
</features>
 <name>
x509 parsing
 </name>
<tool>
unit1651
</tool>
</client>

</testcase>







<
<
<

<

14
15
16
17
18
19
20



21

22
</server>
<features>
unittest
</features>
 <name>
x509 parsing
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1652.
12
13
14
15
16
17
18
19
20
21
22
23
</server>
<features>
unittest
</features>
<name>
infof
</name>
<tool>
unit1652
</tool>
</client>
</testcase>







<
<
<


12
13
14
15
16
17
18



19
20
</server>
<features>
unittest
</features>
<name>
infof
</name>



</client>
</testcase>
Changes to jni/curl/tests/data/test1653.
12
13
14
15
16
17
18
19
20
21
22
23
</server>
<features>
unittest
</features>
<name>
urlapi
</name>
<tool>
unit1653
</tool>
</client>
</testcase>







<
<
<


12
13
14
15
16
17
18



19
20
</server>
<features>
unittest
</features>
<name>
urlapi
</name>



</client>
</testcase>
Changes to jni/curl/tests/data/test1654.
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
</setenv>
<name>
alt-svc
</name>
<command>
log/1654
</command>
<tool>
unit1654
</tool>
<file name="log/1654" mode="text">
h2 example.com 443 h3 shiny.example.com 8443 "20191231 00:00:00" 0 1
# a comment
h2 foo.example.com 443 h3 shiny.example.com 8443 "20291231 23:30:00" 0 1
  h1 example.com 443 h3 shiny.example.com 8443 "20121231 00:00:01" 0 1
	h3 example.com 443 h3 shiny.example.com 8443 "20131231 00:00:00" 0 1
    # also a comment







<
<
<







22
23
24
25
26
27
28



29
30
31
32
33
34
35
</setenv>
<name>
alt-svc
</name>
<command>
log/1654
</command>



<file name="log/1654" mode="text">
h2 example.com 443 h3 shiny.example.com 8443 "20191231 00:00:00" 0 1
# a comment
h2 foo.example.com 443 h3 shiny.example.com 8443 "20291231 23:30:00" 0 1
  h1 example.com 443 h3 shiny.example.com 8443 "20121231 00:00:01" 0 1
	h3 example.com 443 h3 shiny.example.com 8443 "20131231 00:00:00" 0 1
    # also a comment
Changes to jni/curl/tests/data/test1655.
15
16
17
18
19
20
21
22
23
24
25
26
27
<features>
unittest
DoH
</features>
 <name>
unit test for doh_encode
 </name>
<tool>
unit1655
</tool>
</client>

</testcase>







<
<
<

<

15
16
17
18
19
20
21



22

23
<features>
unittest
DoH
</features>
 <name>
unit test for doh_encode
 </name>



</client>

</testcase>
Changes to jni/curl/tests/data/test1800.
44
45
46
47
48
49
50
51
52
53
54
55
</strip>
<protocol>
GET /1800 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
Connection: Upgrade, HTTP2-Settings
Upgrade: %H2CVER
HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA

</protocol>
</verify>
</testcase>







|




44
45
46
47
48
49
50
51
52
53
54
55
</strip>
<protocol>
GET /1800 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
Connection: Upgrade, HTTP2-Settings
Upgrade: %H2CVER
HTTP2-Settings: AAMAAABkAAQCAAAAAAIAAAAA

</protocol>
</verify>
</testcase>
Added jni/curl/tests/data/test1908.














































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
CURLINFO_EFFECTIVE_URL
</keywords>
</info>

# Server-side
<reply>
<data nocheck="yes">
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Content-Type: text/html
Funny-head: yesyes swsclose
Content-Length: 0
alt-svc: h2="3dbbdetxoyw4nsp6c3cc456oj2ays6s43ezxzsfxxri3h5xqd.example:443"; ma=315360000; persist=1

</data>
</reply>

# Client-side
<client>
<server>
http
</server>

# require debug so that alt-svc can work over plain old HTTP
<features>
alt-svc
debug
</features>
<name>
alt-svc cache save after resetting the handle
</name>
<setenv>
# make debug-curl accept Alt-Svc over plain HTTP
CURL_ALTSVC_HTTP="yeah"
</setenv>
<tool>
lib1908
</tool>

<command>
%HOSTIP:%HTTPPORT/1908
</command>
</client>

# Verify data after the test has been "shot"
<verify>
<strip>
^User-Agent:.*
</strip>
<protocol>
GET /1908 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*

</protocol>
<stripfile>
# strip out the (dynamic) expire date from the file so that the rest
# matches
s/\"([^\"]*)\"/TIMESTAMP/
</stripfile>
<file name="log/altsvc-1908">
# Your alt-svc cache. https://curl.haxx.se/docs/alt-svc.html
# This file was generated by libcurl! Edit at your own risk.
h1 127.0.0.1 8990 h2 3dbbdetxoyw4nsp6c3cc456oj2ays6s43ezxzsfxxri3h5xqd.example 443 TIMESTAMP 1 0
</file>
</verify>
</testcase>
Changes to jni/curl/tests/data/test2006.
82
83
84
85
86
87
88




89
90
91
92
93
94
95
Accept: */*

</protocol>
<file1 name="log/download2006">
Some data delivered from an HTTP resource
</file1>
<file2 name="log/heads2006">




HTTP/1.1 200 OK
Date: Thu, 21 Jun 2012 14:49:01 GMT
Server: test-server/fake
Content-Length: 42
Connection: close
Content-Type: text/html
Content-Disposition: filename=name2006; charset=funny; option=strange







>
>
>
>







82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
Accept: */*

</protocol>
<file1 name="log/download2006">
Some data delivered from an HTTP resource
</file1>
<file2 name="log/heads2006">
Content-Length: 496
Accept-ranges: bytes


HTTP/1.1 200 OK
Date: Thu, 21 Jun 2012 14:49:01 GMT
Server: test-server/fake
Content-Length: 42
Connection: close
Content-Type: text/html
Content-Disposition: filename=name2006; charset=funny; option=strange
Changes to jni/curl/tests/data/test2007.
86
87
88
89
90
91
92




93
94
95
96
97
98
99
<file1 name="log/download2007">
Something delivered from an HTTP resource
</file1>
<stripfile2>
s/Last-Modified:.*//
</stripfile2>
<file2 name="log/heads2007">




HTTP/1.1 200 OK
Date: Thu, 21 Jun 2012 14:50:02 GMT
Server: test-server/fake
Content-Length: 42
Connection: close
Content-Type: text/html
Content-Disposition: filename=name2007; charset=funny; option=strange







>
>
>
>







86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<file1 name="log/download2007">
Something delivered from an HTTP resource
</file1>
<stripfile2>
s/Last-Modified:.*//
</stripfile2>
<file2 name="log/heads2007">
Content-Length: 496
Accept-ranges: bytes


HTTP/1.1 200 OK
Date: Thu, 21 Jun 2012 14:50:02 GMT
Server: test-server/fake
Content-Length: 42
Connection: close
Content-Type: text/html
Content-Disposition: filename=name2007; charset=funny; option=strange
Changes to jni/curl/tests/data/test2008.
78
79
80
81
82
83
84




85
86
87
88
89
90
91
<file1 name="log/download2008">
Some stuff delivered from an HTTP resource
</file1>
<stripfile2>
s/Last-Modified:.*//
</stripfile2>
<file2 name="log/heads2008">




HTTP/1.1 200 OK
Date: Thu, 21 Jun 2012 15:23:48 GMT
Server: test-server/fake
Content-Length: 43
Connection: close
Content-Type: text/html
Content-Disposition: filename=name2008; charset=funny; option=strange







>
>
>
>







78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<file1 name="log/download2008">
Some stuff delivered from an HTTP resource
</file1>
<stripfile2>
s/Last-Modified:.*//
</stripfile2>
<file2 name="log/heads2008">
Content-Length: 496
Accept-ranges: bytes


HTTP/1.1 200 OK
Date: Thu, 21 Jun 2012 15:23:48 GMT
Server: test-server/fake
Content-Length: 43
Connection: close
Content-Type: text/html
Content-Disposition: filename=name2008; charset=funny; option=strange
Changes to jni/curl/tests/data/test2009.
79
80
81
82
83
84
85




86
87
88
89
90
91
92
<file1 name="log/download2009">
Some contents delivered from an HTTP resource
</file1>
<stripfile2>
s/Last-Modified:.*//
</stripfile2>
<file2 name="log/heads2009">




HTTP/1.1 200 OK
Date: Thu, 21 Jun 2012 16:27:17 GMT
Server: test-server/fake
Content-Length: 46
Connection: close
Content-Type: text/html
Content-Disposition: filename=name2009; charset=funny; option=strange







>
>
>
>







79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<file1 name="log/download2009">
Some contents delivered from an HTTP resource
</file1>
<stripfile2>
s/Last-Modified:.*//
</stripfile2>
<file2 name="log/heads2009">
Content-Length: 496
Accept-ranges: bytes


HTTP/1.1 200 OK
Date: Thu, 21 Jun 2012 16:27:17 GMT
Server: test-server/fake
Content-Length: 46
Connection: close
Content-Type: text/html
Content-Disposition: filename=name2009; charset=funny; option=strange
Changes to jni/curl/tests/data/test2010.
78
79
80
81
82
83
84




85
86
87
88
89
90
91
<file1 name="log/download2010">
Contents delivered from an HTTP resource
</file1>
<stripfile2>
s/Last-Modified:.*//
</stripfile2>
<file2 name="log/heads2010">




HTTP/1.1 200 OK
Date: Thu, 21 Jun 2012 17:37:27 GMT
Server: test-server/fake
Content-Length: 41
Connection: close
Content-Type: text/html
Content-Disposition: filename=name2010; charset=funny; option=strange







>
>
>
>







78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<file1 name="log/download2010">
Contents delivered from an HTTP resource
</file1>
<stripfile2>
s/Last-Modified:.*//
</stripfile2>
<file2 name="log/heads2010">
Content-Length: 496
Accept-ranges: bytes


HTTP/1.1 200 OK
Date: Thu, 21 Jun 2012 17:37:27 GMT
Server: test-server/fake
Content-Length: 41
Connection: close
Content-Type: text/html
Content-Disposition: filename=name2010; charset=funny; option=strange
jni/curl/tests/data/test2055 became a regular file.
Changes to jni/curl/tests/data/test2058.
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 0

GET http://%HOSTIP:%HTTPPORT/2058 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/2058", response="fbed69f9f3fd304c8f1acb1a43eb32688b933c0e28055c16b926cbcec070aeed", algorithm="SHA-256"
Content-Range: bytes 2-4/5
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 3
Expect: 100-continue

st







|







91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 0

GET http://%HOSTIP:%HTTPPORT/2058 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/2058", response="fbed69f9f3fd304c8f1acb1a43eb32688b933c0e28055c16b926cbcec070aeed", algorithm=SHA-256
Content-Range: bytes 2-4/5
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 3
Expect: 100-continue

st
Changes to jni/curl/tests/data/test2059.
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 0

GET http://%HOSTIP:%HTTPPORT/2059 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="fddc3bc7b753b73ab0848fd83cb20cbbca971258eb8d20c941dd5e0b010d66be", realm="testrealm", nonce="1053604144", uri="/2059", response="fc09be8192851e284e73e8b719b32a2f6f91cca0594e68713da8c49dc2c1656e", algorithm="SHA-512-256", userhash=true
Content-Range: bytes 2-4/5
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 3
Expect: 100-continue

st







|







91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 0

GET http://%HOSTIP:%HTTPPORT/2059 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="fddc3bc7b753b73ab0848fd83cb20cbbca971258eb8d20c941dd5e0b010d66be", realm="testrealm", nonce="1053604144", uri="/2059", response="fc09be8192851e284e73e8b719b32a2f6f91cca0594e68713da8c49dc2c1656e", algorithm=SHA-512-256, userhash=true
Content-Range: bytes 2-4/5
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 3
Expect: 100-continue

st
Changes to jni/curl/tests/data/test2060.
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 0

GET http://%HOSTIP:%HTTPPORT/2060 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/2060", response="3ce1e25ffa611bdbe90e2ab367b9602fa223db9f6de76ac667f0d6157e2178a6", algorithm="SHA-512-256"
Content-Range: bytes 2-4/5
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 3
Expect: 100-continue

st







|







91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
User-Agent: curl/7.12.1-CVS (i686-pc-linux-gnu) libcurl/7.12.1-CVS OpenSSL/0.9.6b ipv6 zlib/1.1.4 GSS libidn/0.4.6
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 0

GET http://%HOSTIP:%HTTPPORT/2060 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/2060", response="3ce1e25ffa611bdbe90e2ab367b9602fa223db9f6de76ac667f0d6157e2178a6", algorithm=SHA-512-256
Content-Range: bytes 2-4/5
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 3
Expect: 100-continue

st
Changes to jni/curl/tests/data/test2061.
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<protocol>
GET /2061 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*

GET /2061 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/2061", response="9dc55255f1a2537b838311674b621d45346b862a81631bb20e4ce356ef25062d", algorithm="SHA-256"
User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
Accept: */*

</protocol>
</verify>
</testcase>







|






71
72
73
74
75
76
77
78
79
80
81
82
83
84
<protocol>
GET /2061 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*

GET /2061 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/2061", response="9dc55255f1a2537b838311674b621d45346b862a81631bb20e4ce356ef25062d", algorithm=SHA-256
User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
Accept: */*

</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test2062.
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<protocol>
GET /2062 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*

GET /2062 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/2062", response="2af735ec3508f4dff99248ffbbe9de9002bfd7cc770cfa2b026cb334042a54e3", algorithm="SHA-512-256"
User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
Accept: */*

</protocol>
</verify>
</testcase>







|






71
72
73
74
75
76
77
78
79
80
81
82
83
84
<protocol>
GET /2062 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*

GET /2062 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/2062", response="2af735ec3508f4dff99248ffbbe9de9002bfd7cc770cfa2b026cb334042a54e3", algorithm=SHA-512-256
User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
Accept: */*

</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test2063.
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<protocol>
GET /2063 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*

GET /2063 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="75af8a3500f771e58a52093a25e7905d6e428a511285c12ea1420c73078dfd61", realm="testrealm", nonce="1053604145", uri="/2063", response="43f7ab531dff687b5dc75617daa59d1fd67d648341d6d2655ca65ef5064cfb51", algorithm="SHA-512-256", userhash=true
User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
Accept: */*

</protocol>
</verify>
</testcase>







|






71
72
73
74
75
76
77
78
79
80
81
82
83
84
<protocol>
GET /2063 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*

GET /2063 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="75af8a3500f771e58a52093a25e7905d6e428a511285c12ea1420c73078dfd61", realm="testrealm", nonce="1053604145", uri="/2063", response="43f7ab531dff687b5dc75617daa59d1fd67d648341d6d2655ca65ef5064cfb51", algorithm=SHA-512-256, userhash=true
User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
Accept: */*

</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test2064.
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<protocol>
GET /2064 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*

GET /2064 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="testuser", realm="testrealm", nonce="2053604145", uri="/2064", response="a9c3ec1036068b336cbabefe9dfcad52ee8b89bc7c91ddbb5bb415c6acdf38a5", algorithm="SHA-256"
User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
Accept: */*

</protocol>
</verify>
</testcase>







|






71
72
73
74
75
76
77
78
79
80
81
82
83
84
<protocol>
GET /2064 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*

GET /2064 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="testuser", realm="testrealm", nonce="2053604145", uri="/2064", response="a9c3ec1036068b336cbabefe9dfcad52ee8b89bc7c91ddbb5bb415c6acdf38a5", algorithm=SHA-256
User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
Accept: */*

</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test2065.
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<protocol>
GET /2065 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*

GET /2065 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="testuser", realm="testrealm", nonce="2053604145", uri="/2065", response="5a5f20b0e601aeddc6f96422c2332d49ff431c49ab143b5f836ef76e9ac78f5e", algorithm="SHA-512-256"
User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
Accept: */*

</protocol>
</verify>
</testcase>







|






71
72
73
74
75
76
77
78
79
80
81
82
83
84
<protocol>
GET /2065 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*

GET /2065 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="testuser", realm="testrealm", nonce="2053604145", uri="/2065", response="5a5f20b0e601aeddc6f96422c2332d49ff431c49ab143b5f836ef76e9ac78f5e", algorithm=SHA-512-256
User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
Accept: */*

</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test2066.
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<protocol>
GET /2066 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*

GET /2066 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="75af8a3500f771e58a52093a25e7905d6e428a511285c12ea1420c73078dfd61", realm="testrealm", nonce="2053604145", uri="/2066", response="a2e2ae589f575fb132991d6f550ef14bf7ef697d2fef1242d2498f07eafc77dc", algorithm="SHA-512-256", userhash=true
User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
Accept: */*

</protocol>
</verify>
</testcase>







|






71
72
73
74
75
76
77
78
79
80
81
82
83
84
<protocol>
GET /2066 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*

GET /2066 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="75af8a3500f771e58a52093a25e7905d6e428a511285c12ea1420c73078dfd61", realm="testrealm", nonce="2053604145", uri="/2066", response="a2e2ae589f575fb132991d6f550ef14bf7ef697d2fef1242d2498f07eafc77dc", algorithm=SHA-512-256, userhash=true
User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
Accept: */*

</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test2067.
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Host: %HOSTIP:%HTTPPORT
Accept: */*
Content-Length: 0
Content-Type: application/x-www-form-urlencoded

POST /2067 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/2067", response="67b97af219c92fa7e8685e5bebb8e74892f6c6792e911c52bd2dfbf0b49272eb", algorithm="SHA-256"
Accept: */*
Content-Length: 11
Content-Type: application/x-www-form-urlencoded

junkelijunk
</protocol>
</verify>







|







74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Host: %HOSTIP:%HTTPPORT
Accept: */*
Content-Length: 0
Content-Type: application/x-www-form-urlencoded

POST /2067 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/2067", response="67b97af219c92fa7e8685e5bebb8e74892f6c6792e911c52bd2dfbf0b49272eb", algorithm=SHA-256
Accept: */*
Content-Length: 11
Content-Type: application/x-www-form-urlencoded

junkelijunk
</protocol>
</verify>
Changes to jni/curl/tests/data/test2068.
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Host: %HOSTIP:%HTTPPORT
Accept: */*
Content-Length: 0
Content-Type: application/x-www-form-urlencoded

POST /2068 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/2068", response="4bc9c97a72f1856bcec9b0e1518c6b7ee28773f91357d56840bdc30bd89ca68f", algorithm="SHA-512-256"
Accept: */*
Content-Length: 11
Content-Type: application/x-www-form-urlencoded

junkelijunk
</protocol>
</verify>







|







74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Host: %HOSTIP:%HTTPPORT
Accept: */*
Content-Length: 0
Content-Type: application/x-www-form-urlencoded

POST /2068 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/2068", response="4bc9c97a72f1856bcec9b0e1518c6b7ee28773f91357d56840bdc30bd89ca68f", algorithm=SHA-512-256
Accept: */*
Content-Length: 11
Content-Type: application/x-www-form-urlencoded

junkelijunk
</protocol>
</verify>
Changes to jni/curl/tests/data/test2069.
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Host: %HOSTIP:%HTTPPORT
Accept: */*
Content-Length: 0
Content-Type: application/x-www-form-urlencoded

POST /2069 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="fddc3bc7b753b73ab0848fd83cb20cbbca971258eb8d20c941dd5e0b010d66be", realm="testrealm", nonce="1053604144", uri="/2069", response="ff13d977110a471f30de75e747976e4de78d7a3d2425cd23ff46e67f4bc9ead7", algorithm="SHA-512-256", userhash=true
Accept: */*
Content-Length: 11
Content-Type: application/x-www-form-urlencoded

junkelijunk
</protocol>
</verify>







|







74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Host: %HOSTIP:%HTTPPORT
Accept: */*
Content-Length: 0
Content-Type: application/x-www-form-urlencoded

POST /2069 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="fddc3bc7b753b73ab0848fd83cb20cbbca971258eb8d20c941dd5e0b010d66be", realm="testrealm", nonce="1053604144", uri="/2069", response="ff13d977110a471f30de75e747976e4de78d7a3d2425cd23ff46e67f4bc9ead7", algorithm=SHA-512-256, userhash=true
Accept: */*
Content-Length: 11
Content-Type: application/x-www-form-urlencoded

junkelijunk
</protocol>
</verify>
Added jni/curl/tests/data/test3002.














































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
SMTP
</keywords>
</info>

#
# Server-side
<reply>
</reply>

#
# Client-side
<client>
<server>
smtp
</server>
 <name>
SMTP with multiple and invalid (first) --mail-rcpt and --mail-rcpt-allowfails
 </name>
<stdin>
From: different
To: another

body
</stdin>
 <command>
smtp://%HOSTIP:%SMTPPORT/3002 --mail-rcpt-allowfails --mail-rcpt invalid.one --mail-rcpt recipient.two@example.com --mail-rcpt recipient.three@example.com --mail-rcpt recipient.four@example.com --mail-rcpt recipient.five@example.com --mail-from sender@example.com -T -
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 3002
MAIL FROM:<sender@example.com>
RCPT TO:<invalid.one>
RCPT TO:<recipient.two@example.com>
RCPT TO:<recipient.three@example.com>
RCPT TO:<recipient.four@example.com>
RCPT TO:<recipient.five@example.com>
DATA
QUIT
</protocol>
<upload>
From: different
To: another

body
.
</upload>
</verify>
</testcase>
Added jni/curl/tests/data/test3003.














































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
SMTP
</keywords>
</info>

#
# Server-side
<reply>
</reply>

#
# Client-side
<client>
<server>
smtp
</server>
 <name>
SMTP with multiple and invalid (last) --mail-rcpt and --mail-rcpt-allowfails
 </name>
<stdin>
From: different
To: another

body
</stdin>
 <command>
smtp://%HOSTIP:%SMTPPORT/3003 --mail-rcpt-allowfails --mail-rcpt recipient.one@example.com --mail-rcpt recipient.two@example.com --mail-rcpt recipient.three@example.com --mail-rcpt recipient.four@example.com --mail-rcpt invalid.five --mail-from sender@example.com -T -
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 3003
MAIL FROM:<sender@example.com>
RCPT TO:<recipient.one@example.com>
RCPT TO:<recipient.two@example.com>
RCPT TO:<recipient.three@example.com>
RCPT TO:<recipient.four@example.com>
RCPT TO:<invalid.five>
DATA
QUIT
</protocol>
<upload>
From: different
To: another

body
.
</upload>
</verify>
</testcase>
Added jni/curl/tests/data/test3004.














































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
SMTP
</keywords>
</info>

#
# Server-side
<reply>
</reply>

#
# Client-side
<client>
<server>
smtp
</server>
 <name>
SMTP with multiple and invalid (middle) --mail-rcpt and --mail-rcpt-allowfails
 </name>
<stdin>
From: different
To: another

body
</stdin>
 <command>
smtp://%HOSTIP:%SMTPPORT/3004 --mail-rcpt-allowfails --mail-rcpt recipient.one@example.com --mail-rcpt recipient.two@example.com --mail-rcpt invalid.three --mail-rcpt recipient.four@example.com --mail-rcpt recipient.five@example.com --mail-from sender@example.com -T -
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 3004
MAIL FROM:<sender@example.com>
RCPT TO:<recipient.one@example.com>
RCPT TO:<recipient.two@example.com>
RCPT TO:<invalid.three>
RCPT TO:<recipient.four@example.com>
RCPT TO:<recipient.five@example.com>
DATA
QUIT
</protocol>
<upload>
From: different
To: another

body
.
</upload>
</verify>
</testcase>
Added jni/curl/tests/data/test3005.














































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
SMTP
</keywords>
</info>

#
# Server-side
<reply>
</reply>

#
# Client-side
<client>
<server>
smtp
</server>
 <name>
SMTP with multiple and invalid (all but one) --mail-rcpt and --mail-rcpt-allowfails
 </name>
<stdin>
From: different
To: another

body
</stdin>
 <command>
smtp://%HOSTIP:%SMTPPORT/3005 --mail-rcpt-allowfails --mail-rcpt invalid.one --mail-rcpt recipient.two@example.com --mail-rcpt invalid.three --mail-rcpt invalid.four --mail-rcpt invalid.five --mail-from sender@example.com -T -
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 3005
MAIL FROM:<sender@example.com>
RCPT TO:<invalid.one>
RCPT TO:<recipient.two@example.com>
RCPT TO:<invalid.three>
RCPT TO:<invalid.four>
RCPT TO:<invalid.five>
DATA
QUIT
</protocol>
<upload>
From: different
To: another

body
.
</upload>
</verify>
</testcase>
Added jni/curl/tests/data/test3006.






































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
SMTP
</keywords>
</info>

#
# Server-side
<reply>
</reply>

#
# Client-side
<client>
<server>
smtp
</server>
 <name>
SMTP with multiple invalid (all) --mail-rcpt and --mail-rcpt-allowfails
 </name>
<stdin>
From: different
To: another

body
</stdin>
 <command>
smtp://%HOSTIP:%SMTPPORT/3006 --mail-rcpt-allowfails --mail-rcpt invalid.one --mail-rcpt invalid.two --mail-rcpt invalid.three --mail-rcpt invalid.four --mail-rcpt invalid.five --mail-from sender@example.com -T -
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
# 55 - CURLE_SEND_ERROR
<errorcode>
55
</errorcode>
<protocol>
EHLO 3006
MAIL FROM:<sender@example.com>
RCPT TO:<invalid.one>
RCPT TO:<invalid.two>
RCPT TO:<invalid.three>
RCPT TO:<invalid.four>
RCPT TO:<invalid.five>
QUIT
</protocol>
</verify>
</testcase>
Added jni/curl/tests/data/test3007.






























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
SMTP
</keywords>
</info>

#
# Server-side
<reply>
</reply>

#
# Client-side
<client>
<server>
smtp
</server>
 <name>
SMTP with invalid --mail-rcpt and --mail-rcpt-allowfails
 </name>
<stdin>
From: different
To: another

body
</stdin>
 <command>
smtp://%HOSTIP:%SMTPPORT/3007 --mail-rcpt-allowfails --mail-rcpt invalid.one --mail-from sender@example.com -T -
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
# 55 - CURLE_SEND_ERROR
<errorcode>
55
</errorcode>
<protocol>
EHLO 3007
MAIL FROM:<sender@example.com>
RCPT TO:<invalid.one>
QUIT
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test304.
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
</strip>
<protocol>
POST /we/want/304 HTTP/1.1
User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
Host: %HOSTIP:%HTTPSPORT
Accept: */*
Content-Length: 1386
Expect: 100-continue
Content-Type: multipart/form-data; boundary=----------------------------c3b2ef7f0bb8

------------------------------c3b2ef7f0bb8
Content-Disposition: form-data; name="name"

daniel
------------------------------c3b2ef7f0bb8







<







45
46
47
48
49
50
51

52
53
54
55
56
57
58
</strip>
<protocol>
POST /we/want/304 HTTP/1.1
User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
Host: %HOSTIP:%HTTPSPORT
Accept: */*
Content-Length: 1386

Content-Type: multipart/form-data; boundary=----------------------------c3b2ef7f0bb8

------------------------------c3b2ef7f0bb8
Content-Disposition: form-data; name="name"

daniel
------------------------------c3b2ef7f0bb8
Added jni/curl/tests/data/test357.


































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
HTTP
HTTP PUT
Expect
</keywords>
</info>
# Server-side
<reply>
# 417 means the server didn't like the Expect header
<data>
HTTP/1.1 417 OK swsbounce
Date: Thu, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Content-Length: 0

</data>
<data1>
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Content-Length: 10

blablabla
</data1>
<datacheck>
HTTP/1.1 417 OK swsbounce
Date: Thu, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Content-Length: 0

HTTP/1.1 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Content-Length: 10

blablabla
</datacheck>
<servercmd>
no-expect
</servercmd>
</reply>

# Client-side
<client>
<server>
http
</server>
 <name>
HTTP PUT with Expect: 100-continue and 417 response
 </name>
 <command>
http://%HOSTIP:%HTTPPORT/we/want/357 -T log/test357.txt
</command>
<file name="log/test357.txt">
Weird
     file
         to
   upload
for
   testing
the
   PUT
      feature
</file>
</client>

# Verify data after the test has been "shot"
<verify>
<strip>
^User-Agent:.*
</strip>
<protocol>
PUT /we/want/357 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
Content-Length: 78
Expect: 100-continue

PUT /we/want/357 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
Content-Length: 78

Weird
     file
         to
   upload
for
   testing
the
   PUT
      feature
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test39.
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
</strip>
<protocol>
POST /we/want/39 HTTP/1.1
User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
Host: %HOSTIP:%HTTPPORT
Accept: */*
Content-Length: 1184
Expect: 100-continue
Content-Type: multipart/form-data; boundary=----------------------------24e78000bd32

------------------------------24e78000bd32
Content-Disposition: form-data; name="name"

daniel
------------------------------24e78000bd32







<







44
45
46
47
48
49
50

51
52
53
54
55
56
57
</strip>
<protocol>
POST /we/want/39 HTTP/1.1
User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3
Host: %HOSTIP:%HTTPPORT
Accept: */*
Content-Length: 1184

Content-Type: multipart/form-data; boundary=----------------------------24e78000bd32

------------------------------24e78000bd32
Content-Disposition: form-data; name="name"

daniel
------------------------------24e78000bd32
Changes to jni/curl/tests/data/test552.

cannot compute difference between binary files

Changes to jni/curl/tests/data/test558.
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<file name="log/memdump">
FD hostip6.c: socket()
FD connect.c: sclose()
MEM lib558.c: malloc()
MEM lib558.c: free()
MEM escape.c: malloc()
MEM strdup.c: realloc()
MEM strdup.c: realloc()
MEM escape.c: free()
</file>







<
<







32
33
34
35
36
37
38


39
40
41
42
43
44
45
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<file name="log/memdump">


MEM lib558.c: malloc()
MEM lib558.c: free()
MEM escape.c: malloc()
MEM strdup.c: realloc()
MEM strdup.c: realloc()
MEM escape.c: free()
</file>
Changes to jni/curl/tests/data/test651.
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# (5*12) == 60 bytes less
<protocol>
POST /651 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
Content-Length: 17139
Content-Type: multipart/form-data; boundary=----------------------------
Expect: 100-continue

------------------------------
Content-Disposition: form-data; name="hello"

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
--------------------------------
</protocol>







<







57
58
59
60
61
62
63

64
65
66
67
68
69
70
# (5*12) == 60 bytes less
<protocol>
POST /651 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
Content-Length: 17139
Content-Type: multipart/form-data; boundary=----------------------------


------------------------------
Content-Disposition: form-data; name="hello"

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
--------------------------------
</protocol>
jni/curl/tests/data/test714 became a regular file.
jni/curl/tests/data/test715 became a regular file.
Added jni/curl/tests/data/test894.










































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
POP3
Clear Text
RETR
</keywords>
</info>

#
# Server-side
<reply>
</reply>

#
# Client-side
<client>
<server>
pop3
</server>
 <name>
POP3 with CR in username
 </name>
 <command>
pop3://user%0dFRIGGING_cmd:secret@%HOSTIP:%POP3PORT/894
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
# malformed URL
<errorcode>
3
</errorcode>
</verify>
</testcase>
Changes to jni/curl/tests/data/test923.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<testcase>
<info>
<keywords>
SMTP
VRFY
</keywords>
</info>

#
# Server-side
<reply>
<data>
250 <recipient@example.com>
</data>
</reply>

#
# Client-side
<client>
<server>
smtp











<
<
<







1
2
3
4
5
6
7
8
9
10
11



12
13
14
15
16
17
18
<testcase>
<info>
<keywords>
SMTP
VRFY
</keywords>
</info>

#
# Server-side
<reply>



</reply>

#
# Client-side
<client>
<server>
smtp
Added jni/curl/tests/data/test955.
















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
SMTP
</keywords>
</info>

#
# Server-side
<reply>
</reply>

#
# Client-side
<client>
<server>
smtp
</server>
<features>
!win32
</features>
<setenv>
LC_ALL=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
</setenv>
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
 <name>
SMTP without SMTPUTF8 support - UTF-8 based sender (local part only)
 </name>
<stdin>
From: different
To: another

body
</stdin>
<command>
smtp://%HOSTIP:%SMTPPORT/955 --mail-rcpt recipient@example.com --mail-from Avsändaren@example.com -T -
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
# 55 - CURLE_SEND_ERROR
<errorcode>
55
</errorcode>
<protocol>
EHLO 955
MAIL FROM:<Avsändaren@example.com>
QUIT
</protocol>
</verify>
</testcase>
Added jni/curl/tests/data/test956.


















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
SMTP
</keywords>
</info>

#
# Server-side
<reply>
</reply>

#
# Client-side
<client>
<server>
smtp
</server>
<features>
!win32
</features>
<setenv>
LC_ALL=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
</setenv>
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
 <name>
SMTP without SMTPUTF8 support - UTF-8 based recipient (local part only)
 </name>
<stdin>
From: different
To: another

body
</stdin>
<command>
smtp://%HOSTIP:%SMTPPORT/956 --mail-rcpt Stödmottagaren@example.com --mail-from sender@example.com -T -
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
# 55 - CURLE_SEND_ERROR
<errorcode>
55
</errorcode>
<protocol>
EHLO 956
MAIL FROM:<sender@example.com>
RCPT TO:<Stödmottagaren@example.com>
QUIT
</protocol>
</verify>
</testcase>
Added jni/curl/tests/data/test957.






































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
SMTP
VRFY
</keywords>
</info>

#
# Server-side
<reply>
</reply>

#
# Client-side
<client>
<server>
smtp
</server>
<features>
!win32
</features>
<setenv>
LC_ALL=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
</setenv>
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
 <name>
SMTP VRFY without SMTPUTF8 support - UTF-8 based recipient (local part only)
 </name>
<command>
smtp://%HOSTIP:%SMTPPORT/957 --mail-rcpt Användaren
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
# 56 - CURLE_RECV_ERROR
<errorcode>
56
</errorcode>
<protocol>
EHLO 957
VRFY Användaren
QUIT
</protocol>
</verify>
</testcase>
Added jni/curl/tests/data/test958.






































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
SMTP
VRFY
</keywords>
</info>

#
# Server-side
<reply>
</reply>

#
# Client-side
<client>
<server>
smtp
</server>
<features>
!win32
</features>
<setenv>
LC_ALL=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
</setenv>
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
 <name>
SMTP external VRFY without SMTPUTF8 support - UTF-8 based recipient (local part only)
 </name>
<command>
smtp://%HOSTIP:%SMTPPORT/958 --mail-rcpt Användaren@example.com
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
# 56 - CURLE_RECV_ERROR
<errorcode>
56
</errorcode>
<protocol>
EHLO 958
VRFY Användaren@example.com
QUIT
</protocol>
</verify>
</testcase>
Added jni/curl/tests/data/test959.


















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
SMTP
</keywords>
</info>

#
# Server-side
<reply>
</reply>

#
# Client-side
<client>
<server>
smtp
</server>
<features>
!idn
!win32
</features>
<setenv>
LC_ALL=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
</setenv>
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
 <name>
SMTP without SMTPUTF8 support - UTF-8 based sender (host part only)
 </name>
<stdin>
From: different
To: another

body
</stdin>
<command>
smtp://%HOSTIP:%SMTPPORT/959 --mail-rcpt recipient@example.com --mail-from sender@åäö.se -T -
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
# 55 - CURLE_SEND_ERROR
<errorcode>
55
</errorcode>
<protocol>
EHLO 959
MAIL FROM:<sender@åäö.se>
QUIT
</protocol>
</verify>
</testcase>
Added jni/curl/tests/data/test960.




















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
SMTP
</keywords>
</info>

#
# Server-side
<reply>
</reply>

#
# Client-side
<client>
<server>
smtp
</server>
<features>
!idn
!win32
</features>
<setenv>
LC_ALL=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
</setenv>
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
 <name>
SMTP without SMTPUTF8 support - UTF-8 based recipient (host part only)
 </name>
<stdin>
From: different
To: another

body
</stdin>
<command>
smtp://%HOSTIP:%SMTPPORT/960 --mail-rcpt recipient@åäö.se --mail-from sender@example.com -T -
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
# 55 - CURLE_SEND_ERROR
<errorcode>
55
</errorcode>
<protocol>
EHLO 960
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@åäö.se>
QUIT
</protocol>
</verify>
</testcase>
Added jni/curl/tests/data/test961.








































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
SMTP
VRFY
</keywords>
</info>

#
# Server-side
<reply>
</reply>

#
# Client-side
<client>
<server>
smtp
</server>
<features>
!idn
!win32
</features>
<setenv>
LC_ALL=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
</setenv>
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
 <name>
SMTP external VRFY without SMTPUTF8 support - UTF-8 based recipient (host part only)
 </name>
<command>
smtp://%HOSTIP:%SMTPPORT/961 --mail-rcpt user@åäö.se
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
# 56 - CURLE_RECV_ERROR
<errorcode>
56
</errorcode>
<protocol>
EHLO 961
VRFY user@åäö.se
QUIT
</protocol>
</verify>
</testcase>
Added jni/curl/tests/data/test962.






























































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
SMTP
IDN
</keywords>
</info>

#
# Server-side
<reply>
</reply>

#
# Client-side
<client>
<server>
smtp
</server>
<features>
idn
!win32
</features>
<setenv>
LC_ALL=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
</setenv>
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
 <name>
SMTP without SMTPUTF8 support - UTF-8 based sender (host part only)
 </name>
<stdin>
From: different
To: another

body
</stdin>
<command>
smtp://%HOSTIP:%SMTPPORT/962 --mail-rcpt recipient@example.com --mail-from sender@åäö.se -T -
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 962
MAIL FROM:<sender@xn--4cab6c.se>
RCPT TO:<recipient@example.com>
DATA
QUIT
</protocol>
<upload>
From: different
To: another

body
.
</upload>
</verify>
</testcase>
Added jni/curl/tests/data/test963.






























































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
SMTP
IDN
</keywords>
</info>

#
# Server-side
<reply>
</reply>

#
# Client-side
<client>
<server>
smtp
</server>
<features>
idn
!win32
</features>
<setenv>
LC_ALL=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
</setenv>
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
 <name>
SMTP without SMTPUTF8 support (IDN Enabked) - UTF-8 based recipient (host part only)
 </name>
<stdin>
From: different
To: another

body
</stdin>
<command>
smtp://%HOSTIP:%SMTPPORT/963 --mail-rcpt recipient@åäö.se --mail-from sender@example.com -T -
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 963
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@xn--4cab6c.se>
DATA
QUIT
</protocol>
<upload>
From: different
To: another

body
.
</upload>
</verify>
</testcase>
Added jni/curl/tests/data/test964.


































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
SMTP
VRFY
IDN
</keywords>
</info>

#
# Server-side
<reply>
</reply>

#
# Client-side
<client>
<server>
smtp
</server>
<features>
idn
!win32
</features>
<setenv>
LC_ALL=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
</setenv>
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
 <name>
SMTP external VRFY without SMTPUTF8 support (IDN Enabled) - UTF-8 based recipient (host part only)
 </name>
<command>
smtp://%HOSTIP:%SMTPPORT/964 --mail-rcpt user@åäö.se
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 964
VRFY user@xn--4cab6c.se
QUIT
</protocol>
</verify>
</testcase>
Added jni/curl/tests/data/test965.




































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
SMTP
IDN
</keywords>
</info>

#
# Server-side
<reply>
<servercmd>
CAPA SMTPUTF8
</servercmd>
</reply>

#
# Client-side
<client>
<server>
smtp
</server>
<features>
idn
!win32
</features>
<setenv>
LC_ALL=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
</setenv>
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
 <name>
SMTP with SMTPUTF8 support - UTF-8 based sender
 </name>
<stdin>
From: different
To: another

body
</stdin>
<command>
smtp://%HOSTIP:%SMTPPORT/965 --mail-rcpt recipient@example.com --mail-from Avsändaren@åäö.se -T -
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 965
MAIL FROM:<Avsändaren@xn--4cab6c.se> SMTPUTF8
RCPT TO:<recipient@example.com>
DATA
QUIT
</protocol>
<upload>
From: different
To: another

body
.
</upload>
</verify>
</testcase>
Added jni/curl/tests/data/test966.




































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
SMTP
IDN
</keywords>
</info>

#
# Server-side
<reply>
<servercmd>
CAPA SMTPUTF8
</servercmd>
</reply>

#
# Client-side
<client>
<server>
smtp
</server>
<features>
idn
!win32
</features>
<setenv>
LC_ALL=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
</setenv>
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
 <name>
SMTP with SMTPUTF8 support - UTF-8 based recipient
 </name>
<stdin>
From: different
To: another

body
</stdin>
<command>
smtp://%HOSTIP:%SMTPPORT/966 --mail-rcpt Stödmottagaren@åäö.se --mail-from sender@example.com -T -
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 966
MAIL FROM:<sender@example.com> SMTPUTF8
RCPT TO:<Stödmottagaren@xn--4cab6c.se>
DATA
QUIT
</protocol>
<upload>
From: different
To: another

body
.
</upload>
</verify>
</testcase>
Added jni/curl/tests/data/test967.














































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
SMTP
VRFY
IDN
</keywords>
</info>

#
# Server-side
<reply>
<servercmd>
CAPA SMTPUTF8
</servercmd>
<data>
252 Send some mail and I'll try my best
</data>
</reply>

#
# Client-side
<client>
<server>
smtp
</server>
<features>
idn
!win32
</features>
<setenv>
LC_ALL=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
</setenv>
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
 <name>
SMTP external VRFY with SMTPUTF8 support
 </name>
<command>
smtp://%HOSTIP:%SMTPPORT/967 --mail-rcpt Användaren@åäö.se
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 967
VRFY Användaren@xn--4cab6c.se SMTPUTF8
QUIT
</protocol>
</verify>
</testcase>
Added jni/curl/tests/data/test968.








































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
SMTP
VRFY
IDN
</keywords>
</info>

#
# Server-side
<reply>
<servercmd>
CAPA SMTPUTF8
</servercmd>
</reply>

#
# Client-side
<client>
<server>
smtp
</server>
<features>
idn
!win32
</features>
<setenv>
LC_ALL=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
</setenv>
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
 <name>
SMTP VRFY with SMTPUTF8 support
 </name>
<command>
smtp://%HOSTIP:%SMTPPORT/968 --mail-rcpt Användaren
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 968
VRFY Användaren SMTPUTF8
QUIT
</protocol>
</verify>
</testcase>
Added jni/curl/tests/data/test969.






































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
<testcase>
<info>
<keywords>
SMTP
EXPN
CUSTOMREQUEST
IDN
</keywords>
</info>

#
# Server-side
<reply>
<servercmd>
CAPA SMTPUTF8
</servercmd>
<data>
250-Joe Smith <joe.smith@example.com>
250-Harry Smith <harry.smith@example.com>
250 Melvin Smith <melvin.smith@example.com>
</data>
</reply>

#
# Client-side
<client>
<server>
smtp
</server>
<features>
idn
!win32
</features>
 <name>
SMTP mailing list EXPN (CUSTOMREQUEST) with SMTPUTF8 support
 </name>
 <command>
smtp://%HOSTIP:%SMTPPORT/969 --mail-rcpt Friends -X EXPN
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 969
EXPN Friends SMTPUTF8
QUIT
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/ftpserver.pl.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env perl
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is








|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env perl
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
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

    if (!$args) {
        sendcontrol "501 Unrecognized parameter\r\n";
    }
    else {
        my $from;
        my $size;

        my @elements = split(/ /, $args);

        # Get the FROM and SIZE parameters
        for my $e (@elements) {
            if($e =~ /^FROM:(.*)$/) {
                $from = $1;
            }
            elsif($e =~ /^SIZE=(\d+)$/) {
                $size = $1;
            }
        }

        # Validate the from address (only <> and a valid email address inside
        # <> are allowed, such as <user@example.com>)
        if ((!$from) || (($from ne "<>") && ($from !~

            /^<([a-zA-Z0-9._%+-]+)\@([a-zA-Z0-9.-]+).([a-zA-Z]{2,4})>$/))) {
            sendcontrol "501 Invalid address\r\n";
        }

        else {
            my @found;
            my $valid = 1;

            # Check the capabilities for SIZE and if the specified size is
            # greater than the message size then reject it
            if (@found = grep /^SIZE (\d+)$/, @capabilities) {
                if ($found[0] =~ /^SIZE (\d+)$/) {
                    if ($size > $1) {
                        $valid = 0;
                    }
                }
            }

            if(!$valid) {
                sendcontrol "552 Message size too large\r\n";
            }
            else {
                sendcontrol "250 Sender OK\r\n";
            }
        }



    }

    return 0;
}

sub RCPT_smtp {
    my ($args) = @_;

    logmsg "RCPT_smtp got $args\n";

    # Get the TO parameter
    if($args !~ /^TO:(.*)/) {
        sendcontrol "501 Unrecognized parameter\r\n";
    }
    else {

        my $to = $1;

        # Validate the to address (only a valid email address inside <> is
        # allowed, such as <user@example.com>)
        if ($to !~
            /^<([a-zA-Z0-9._%+-]+)\@([a-zA-Z0-9.-]+).([a-zA-Z]{2,4})>$/) {


            sendcontrol "501 Invalid address\r\n";
        }
        else {
            sendcontrol "250 Recipient OK\r\n";
        }
    }

    return 0;
}

sub DATA_smtp {







>














|
>
|
<
<
>
|




















>
>
>















>




|
|
>
>
|


|







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

    if (!$args) {
        sendcontrol "501 Unrecognized parameter\r\n";
    }
    else {
        my $from;
        my $size;
        my $smtputf8 = grep /^SMTPUTF8$/, @capabilities;
        my @elements = split(/ /, $args);

        # Get the FROM and SIZE parameters
        for my $e (@elements) {
            if($e =~ /^FROM:(.*)$/) {
                $from = $1;
            }
            elsif($e =~ /^SIZE=(\d+)$/) {
                $size = $1;
            }
        }

        # Validate the from address (only <> and a valid email address inside
        # <> are allowed, such as <user@example.com>)
        if (($from eq "<>") ||
            (!$smtputf8 && $from =~
              /^<([a-zA-Z0-9._%+-]+)\@(([a-zA-Z0-9-]+)\.)+([a-zA-Z]{2,4})>$/) ||


            ($smtputf8 && $from =~
              /^<([a-zA-Z0-9\x{80}-\x{ff}._%+-]+)\@(([a-zA-Z0-9\x{80}-\x{ff}-]+)\.)+([a-zA-Z]{2,4})>$/)) {
            my @found;
            my $valid = 1;

            # Check the capabilities for SIZE and if the specified size is
            # greater than the message size then reject it
            if (@found = grep /^SIZE (\d+)$/, @capabilities) {
                if ($found[0] =~ /^SIZE (\d+)$/) {
                    if ($size > $1) {
                        $valid = 0;
                    }
                }
            }

            if(!$valid) {
                sendcontrol "552 Message size too large\r\n";
            }
            else {
                sendcontrol "250 Sender OK\r\n";
            }
        }
        else {
            sendcontrol "501 Invalid address\r\n";
        }
    }

    return 0;
}

sub RCPT_smtp {
    my ($args) = @_;

    logmsg "RCPT_smtp got $args\n";

    # Get the TO parameter
    if($args !~ /^TO:(.*)/) {
        sendcontrol "501 Unrecognized parameter\r\n";
    }
    else {
        my $smtputf8 = grep /^SMTPUTF8$/, @capabilities;
        my $to = $1;

        # Validate the to address (only a valid email address inside <> is
        # allowed, such as <user@example.com>)
        if ((!$smtputf8 && $to =~
              /^<([a-zA-Z0-9._%+-]+)\@(([a-zA-Z0-9-]+)\.)+([a-zA-Z]{2,4})>$/) ||
            ($smtputf8 && $to =~
              /^<([a-zA-Z0-9\x{80}-\x{ff}._%+-]+)\@(([a-zA-Z0-9\x{80}-\x{ff}-]+)\.)+([a-zA-Z]{2,4})>$/)) {
            sendcontrol "250 Recipient OK\r\n";      
        }
        else {
            sendcontrol "501 Invalid address\r\n";
        }
    }

    return 0;
}

sub DATA_smtp {
1026
1027
1028
1029
1030
1031
1032









1033
1034










1035
1036




1037
1038
1039
1040
1041
1042
1043

    logmsg "VRFY_smtp got $args\n";

    if($username eq "") {
        sendcontrol "501 Unrecognized parameter\r\n";
    }
    else {









        my @data = getreplydata($smtp_client);











        for my $d (@data) {
            sendcontrol $d;




        }
    }

    return 0;
}

sub EXPN_smtp {







>
>
>
>
>
>
>
>
>
|

>
>
>
>
>
>
>
>
>
>
|
|
>
>
>
>







1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073

    logmsg "VRFY_smtp got $args\n";

    if($username eq "") {
        sendcontrol "501 Unrecognized parameter\r\n";
    }
    else {
        my $smtputf8 = grep /^SMTPUTF8$/, @capabilities;

        # Validate the username (only a valid local or external username is
        # allowed, such as user or user@example.com)
        if ((!$smtputf8 && $username =~
            /^([a-zA-Z0-9._%+-]+)(\@(([a-zA-Z0-9-]+)\.)+([a-zA-Z]{2,4}))?$/) ||
            ($smtputf8 && $username =~
            /^([a-zA-Z0-9\x{80}-\x{ff}._%+-]+)(\@(([a-zA-Z0-9\x{80}-\x{ff}-]+)\.)+([a-zA-Z]{2,4}))?$/)) {

            my @data = getreplydata($smtp_client);

            if(!@data) {
                if ($username !~
                    /^([a-zA-Z0-9._%+-]+)\@(([a-zA-Z0-9-]+)\.)+([a-zA-Z]{2,4})$/) {
                  push @data, "250 <$username\@example.com>\r\n"
                }
                else {
                  push @data, "250 <$username>\r\n"
                }
            }

            for my $d (@data) {
                sendcontrol $d;
            }
        }
        else {
            sendcontrol "501 Invalid address\r\n";
        }
    }

    return 0;
}

sub EXPN_smtp {
Changes to jni/curl/tests/libtest/Makefile.in.
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
	lib1550$(EXEEXT) lib1551$(EXEEXT) lib1552$(EXEEXT) \
	lib1553$(EXEEXT) lib1554$(EXEEXT) lib1555$(EXEEXT) \
	lib1556$(EXEEXT) lib1557$(EXEEXT) lib1558$(EXEEXT) \
	lib1559$(EXEEXT) lib1560$(EXEEXT) lib1564$(EXEEXT) \
	lib1565$(EXEEXT) lib1591$(EXEEXT) lib1592$(EXEEXT) \
	lib1593$(EXEEXT) lib1594$(EXEEXT) lib1596$(EXEEXT) \
	lib1900$(EXEEXT) lib1905$(EXEEXT) lib1906$(EXEEXT) \
	lib1907$(EXEEXT) lib2033$(EXEEXT)
@USE_CPPFLAG_CURL_STATICLIB_TRUE@am__append_1 = -DCURL_STATICLIB
@CURL_LT_SHLIB_USE_NO_UNDEFINED_TRUE@am__append_2 = -no-undefined
@CURL_LT_SHLIB_USE_MIMPURE_TEXT_TRUE@am__append_3 = -mimpure-text
@DOING_CURL_SYMBOL_HIDING_TRUE@am__append_4 = -DCURL_HIDDEN_SYMBOLS
@DOING_CURL_SYMBOL_HIDING_TRUE@am__append_5 = $(CFLAG_CURL_SYMBOL_HIDING)

# Build a stub gssapi implementation for testing







|







137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
	lib1550$(EXEEXT) lib1551$(EXEEXT) lib1552$(EXEEXT) \
	lib1553$(EXEEXT) lib1554$(EXEEXT) lib1555$(EXEEXT) \
	lib1556$(EXEEXT) lib1557$(EXEEXT) lib1558$(EXEEXT) \
	lib1559$(EXEEXT) lib1560$(EXEEXT) lib1564$(EXEEXT) \
	lib1565$(EXEEXT) lib1591$(EXEEXT) lib1592$(EXEEXT) \
	lib1593$(EXEEXT) lib1594$(EXEEXT) lib1596$(EXEEXT) \
	lib1900$(EXEEXT) lib1905$(EXEEXT) lib1906$(EXEEXT) \
	lib1907$(EXEEXT) lib1908$(EXEEXT) lib2033$(EXEEXT)
@USE_CPPFLAG_CURL_STATICLIB_TRUE@am__append_1 = -DCURL_STATICLIB
@CURL_LT_SHLIB_USE_NO_UNDEFINED_TRUE@am__append_2 = -no-undefined
@CURL_LT_SHLIB_USE_MIMPURE_TEXT_TRUE@am__append_3 = -mimpure-text
@DOING_CURL_SYMBOL_HIDING_TRUE@am__append_4 = -DCURL_HIDDEN_SYMBOLS
@DOING_CURL_SYMBOL_HIDING_TRUE@am__append_5 = $(CFLAG_CURL_SYMBOL_HIDING)

# Build a stub gssapi implementation for testing
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
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
am__objects_148 = lib1907-first.$(OBJEXT)
am__objects_149 = lib1907-testutil.$(OBJEXT)
am__objects_150 = ../../lib/lib1907-warnless.$(OBJEXT)
am_lib1907_OBJECTS = lib1907-lib1907.$(OBJEXT) $(am__objects_148) \
	$(am__objects_149) $(am__objects_150)
lib1907_OBJECTS = $(am_lib1907_OBJECTS)
lib1907_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_151 = lib2033-first.$(OBJEXT)







am__objects_152 = lib2033-testutil.$(OBJEXT)
am__objects_153 = ../../lib/lib2033-warnless.$(OBJEXT)
am_lib2033_OBJECTS = lib2033-libntlmconnect.$(OBJEXT) \
	$(am__objects_151) $(am__objects_152) $(am__objects_153)
lib2033_OBJECTS = $(am_lib2033_OBJECTS)
lib2033_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_154 = lib500-first.$(OBJEXT)
am__objects_155 = lib500-testutil.$(OBJEXT)
am__objects_156 = lib500-testtrace.$(OBJEXT)
am_lib500_OBJECTS = lib500-lib500.$(OBJEXT) $(am__objects_154) \
	$(am__objects_155) $(am__objects_156)
lib500_OBJECTS = $(am_lib500_OBJECTS)
lib500_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_157 = lib501-first.$(OBJEXT)
am_lib501_OBJECTS = lib501-lib501.$(OBJEXT) $(am__objects_157)
lib501_OBJECTS = $(am_lib501_OBJECTS)
lib501_LDADD = $(LDADD)
lib501_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_158 = lib502-first.$(OBJEXT)
am__objects_159 = lib502-testutil.$(OBJEXT)
am__objects_160 = ../../lib/lib502-warnless.$(OBJEXT)
am_lib502_OBJECTS = lib502-lib502.$(OBJEXT) $(am__objects_158) \
	$(am__objects_159) $(am__objects_160)
lib502_OBJECTS = $(am_lib502_OBJECTS)
lib502_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_161 = lib503-first.$(OBJEXT)
am__objects_162 = lib503-testutil.$(OBJEXT)
am__objects_163 = ../../lib/lib503-warnless.$(OBJEXT)
am_lib503_OBJECTS = lib503-lib503.$(OBJEXT) $(am__objects_161) \
	$(am__objects_162) $(am__objects_163)
lib503_OBJECTS = $(am_lib503_OBJECTS)
lib503_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_164 = lib504-first.$(OBJEXT)
am__objects_165 = lib504-testutil.$(OBJEXT)
am__objects_166 = ../../lib/lib504-warnless.$(OBJEXT)
am_lib504_OBJECTS = lib504-lib504.$(OBJEXT) $(am__objects_164) \
	$(am__objects_165) $(am__objects_166)
lib504_OBJECTS = $(am_lib504_OBJECTS)
lib504_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_167 = lib505-first.$(OBJEXT)
am_lib505_OBJECTS = lib505-lib505.$(OBJEXT) $(am__objects_167)
lib505_OBJECTS = $(am_lib505_OBJECTS)
lib505_LDADD = $(LDADD)
lib505_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_168 = lib506-first.$(OBJEXT)
am_lib506_OBJECTS = lib506-lib506.$(OBJEXT) $(am__objects_168)
lib506_OBJECTS = $(am_lib506_OBJECTS)
lib506_LDADD = $(LDADD)
lib506_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_169 = lib507-first.$(OBJEXT)
am__objects_170 = lib507-testutil.$(OBJEXT)
am__objects_171 = ../../lib/lib507-warnless.$(OBJEXT)
am_lib507_OBJECTS = lib507-lib507.$(OBJEXT) $(am__objects_169) \
	$(am__objects_170) $(am__objects_171)
lib507_OBJECTS = $(am_lib507_OBJECTS)
lib507_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_172 = lib508-first.$(OBJEXT)
am_lib508_OBJECTS = lib508-lib508.$(OBJEXT) $(am__objects_172)
lib508_OBJECTS = $(am_lib508_OBJECTS)
lib508_LDADD = $(LDADD)
lib508_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_173 = lib509-first.$(OBJEXT)
am_lib509_OBJECTS = lib509-lib509.$(OBJEXT) $(am__objects_173)
lib509_OBJECTS = $(am_lib509_OBJECTS)
lib509_LDADD = $(LDADD)
lib509_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_174 = lib510-first.$(OBJEXT)
am_lib510_OBJECTS = lib510-lib510.$(OBJEXT) $(am__objects_174)
lib510_OBJECTS = $(am_lib510_OBJECTS)
lib510_LDADD = $(LDADD)
lib510_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_175 = lib511-first.$(OBJEXT)
am_lib511_OBJECTS = lib511-lib511.$(OBJEXT) $(am__objects_175)
lib511_OBJECTS = $(am_lib511_OBJECTS)
lib511_LDADD = $(LDADD)
lib511_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_176 = lib512-first.$(OBJEXT)
am_lib512_OBJECTS = lib512-lib512.$(OBJEXT) $(am__objects_176)
lib512_OBJECTS = $(am_lib512_OBJECTS)
lib512_LDADD = $(LDADD)
lib512_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_177 = lib513-first.$(OBJEXT)
am_lib513_OBJECTS = lib513-lib513.$(OBJEXT) $(am__objects_177)
lib513_OBJECTS = $(am_lib513_OBJECTS)
lib513_LDADD = $(LDADD)
lib513_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_178 = lib514-first.$(OBJEXT)
am_lib514_OBJECTS = lib514-lib514.$(OBJEXT) $(am__objects_178)
lib514_OBJECTS = $(am_lib514_OBJECTS)
lib514_LDADD = $(LDADD)
lib514_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_179 = lib515-first.$(OBJEXT)
am_lib515_OBJECTS = lib515-lib515.$(OBJEXT) $(am__objects_179)
lib515_OBJECTS = $(am_lib515_OBJECTS)
lib515_LDADD = $(LDADD)
lib515_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_180 = lib516-first.$(OBJEXT)
am_lib516_OBJECTS = lib516-lib516.$(OBJEXT) $(am__objects_180)
lib516_OBJECTS = $(am_lib516_OBJECTS)
lib516_LDADD = $(LDADD)
lib516_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_181 = lib517-first.$(OBJEXT)
am_lib517_OBJECTS = lib517-lib517.$(OBJEXT) $(am__objects_181)
lib517_OBJECTS = $(am_lib517_OBJECTS)
lib517_LDADD = $(LDADD)
lib517_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_182 = lib518-first.$(OBJEXT)
am__objects_183 = ../../lib/lib518-warnless.$(OBJEXT)
am_lib518_OBJECTS = lib518-lib518.$(OBJEXT) $(am__objects_182) \
	$(am__objects_183)
lib518_OBJECTS = $(am_lib518_OBJECTS)
lib518_LDADD = $(LDADD)
lib518_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_184 = lib519-first.$(OBJEXT)
am_lib519_OBJECTS = lib519-lib519.$(OBJEXT) $(am__objects_184)
lib519_OBJECTS = $(am_lib519_OBJECTS)
lib519_LDADD = $(LDADD)
lib519_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_185 = lib520-first.$(OBJEXT)
am_lib520_OBJECTS = lib520-lib520.$(OBJEXT) $(am__objects_185)
lib520_OBJECTS = $(am_lib520_OBJECTS)
lib520_LDADD = $(LDADD)
lib520_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_186 = lib521-first.$(OBJEXT)
am_lib521_OBJECTS = lib521-lib521.$(OBJEXT) $(am__objects_186)
lib521_OBJECTS = $(am_lib521_OBJECTS)
lib521_LDADD = $(LDADD)
lib521_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_187 = lib523-first.$(OBJEXT)
am_lib523_OBJECTS = lib523-lib523.$(OBJEXT) $(am__objects_187)
lib523_OBJECTS = $(am_lib523_OBJECTS)
lib523_LDADD = $(LDADD)
lib523_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_188 = lib524-first.$(OBJEXT)
am_lib524_OBJECTS = lib524-lib524.$(OBJEXT) $(am__objects_188)
lib524_OBJECTS = $(am_lib524_OBJECTS)
lib524_LDADD = $(LDADD)
lib524_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_189 = lib525-first.$(OBJEXT)
am__objects_190 = lib525-testutil.$(OBJEXT)
am__objects_191 = ../../lib/lib525-warnless.$(OBJEXT)
am_lib525_OBJECTS = lib525-lib525.$(OBJEXT) $(am__objects_189) \
	$(am__objects_190) $(am__objects_191)
lib525_OBJECTS = $(am_lib525_OBJECTS)
lib525_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_192 = lib526-first.$(OBJEXT)
am__objects_193 = lib526-testutil.$(OBJEXT)
am__objects_194 = ../../lib/lib526-warnless.$(OBJEXT)
am_lib526_OBJECTS = lib526-lib526.$(OBJEXT) $(am__objects_192) \
	$(am__objects_193) $(am__objects_194)
lib526_OBJECTS = $(am_lib526_OBJECTS)
lib526_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_195 = lib527-first.$(OBJEXT)
am__objects_196 = lib527-testutil.$(OBJEXT)
am__objects_197 = ../../lib/lib527-warnless.$(OBJEXT)
am_lib527_OBJECTS = lib527-lib526.$(OBJEXT) $(am__objects_195) \
	$(am__objects_196) $(am__objects_197)
lib527_OBJECTS = $(am_lib527_OBJECTS)
lib527_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_198 = lib529-first.$(OBJEXT)
am__objects_199 = lib529-testutil.$(OBJEXT)
am__objects_200 = ../../lib/lib529-warnless.$(OBJEXT)
am_lib529_OBJECTS = lib529-lib525.$(OBJEXT) $(am__objects_198) \
	$(am__objects_199) $(am__objects_200)
lib529_OBJECTS = $(am_lib529_OBJECTS)
lib529_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_201 = lib530-first.$(OBJEXT)
am__objects_202 = lib530-testutil.$(OBJEXT)
am__objects_203 = ../../lib/lib530-warnless.$(OBJEXT)
am_lib530_OBJECTS = lib530-lib530.$(OBJEXT) $(am__objects_201) \
	$(am__objects_202) $(am__objects_203)
lib530_OBJECTS = $(am_lib530_OBJECTS)
lib530_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_204 = lib532-first.$(OBJEXT)
am__objects_205 = lib532-testutil.$(OBJEXT)
am__objects_206 = ../../lib/lib532-warnless.$(OBJEXT)
am_lib532_OBJECTS = lib532-lib526.$(OBJEXT) $(am__objects_204) \
	$(am__objects_205) $(am__objects_206)
lib532_OBJECTS = $(am_lib532_OBJECTS)
lib532_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_207 = lib533-first.$(OBJEXT)
am__objects_208 = lib533-testutil.$(OBJEXT)
am__objects_209 = ../../lib/lib533-warnless.$(OBJEXT)
am_lib533_OBJECTS = lib533-lib533.$(OBJEXT) $(am__objects_207) \
	$(am__objects_208) $(am__objects_209)
lib533_OBJECTS = $(am_lib533_OBJECTS)
lib533_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_210 = lib537-first.$(OBJEXT)
am__objects_211 = ../../lib/lib537-warnless.$(OBJEXT)
am_lib537_OBJECTS = lib537-lib537.$(OBJEXT) $(am__objects_210) \
	$(am__objects_211)
lib537_OBJECTS = $(am_lib537_OBJECTS)
lib537_LDADD = $(LDADD)
lib537_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_212 = lib539-first.$(OBJEXT)
am_lib539_OBJECTS = lib539-lib539.$(OBJEXT) $(am__objects_212)
lib539_OBJECTS = $(am_lib539_OBJECTS)
lib539_LDADD = $(LDADD)
lib539_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_213 = lib540-first.$(OBJEXT)
am__objects_214 = lib540-testutil.$(OBJEXT)
am__objects_215 = ../../lib/lib540-warnless.$(OBJEXT)
am_lib540_OBJECTS = lib540-lib540.$(OBJEXT) $(am__objects_213) \
	$(am__objects_214) $(am__objects_215)
lib540_OBJECTS = $(am_lib540_OBJECTS)
lib540_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_216 = lib541-first.$(OBJEXT)
am_lib541_OBJECTS = lib541-lib541.$(OBJEXT) $(am__objects_216)
lib541_OBJECTS = $(am_lib541_OBJECTS)
lib541_LDADD = $(LDADD)
lib541_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_217 = lib542-first.$(OBJEXT)
am_lib542_OBJECTS = lib542-lib542.$(OBJEXT) $(am__objects_217)
lib542_OBJECTS = $(am_lib542_OBJECTS)
lib542_LDADD = $(LDADD)
lib542_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_218 = lib543-first.$(OBJEXT)
am_lib543_OBJECTS = lib543-lib543.$(OBJEXT) $(am__objects_218)
lib543_OBJECTS = $(am_lib543_OBJECTS)
lib543_LDADD = $(LDADD)
lib543_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_219 = lib544-first.$(OBJEXT)
am_lib544_OBJECTS = lib544-lib544.$(OBJEXT) $(am__objects_219)
lib544_OBJECTS = $(am_lib544_OBJECTS)
lib544_LDADD = $(LDADD)
lib544_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_220 = lib545-first.$(OBJEXT)
am_lib545_OBJECTS = lib545-lib544.$(OBJEXT) $(am__objects_220)
lib545_OBJECTS = $(am_lib545_OBJECTS)
lib545_LDADD = $(LDADD)
lib545_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_221 = lib547-first.$(OBJEXT)
am_lib547_OBJECTS = lib547-lib547.$(OBJEXT) $(am__objects_221)
lib547_OBJECTS = $(am_lib547_OBJECTS)
lib547_LDADD = $(LDADD)
lib547_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_222 = lib548-first.$(OBJEXT)
am_lib548_OBJECTS = lib548-lib547.$(OBJEXT) $(am__objects_222)
lib548_OBJECTS = $(am_lib548_OBJECTS)
lib548_LDADD = $(LDADD)
lib548_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_223 = lib549-first.$(OBJEXT)
am_lib549_OBJECTS = lib549-lib549.$(OBJEXT) $(am__objects_223)
lib549_OBJECTS = $(am_lib549_OBJECTS)
lib549_LDADD = $(LDADD)
lib549_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_224 = lib552-first.$(OBJEXT)
am__objects_225 = ../../lib/lib552-warnless.$(OBJEXT)
am_lib552_OBJECTS = lib552-lib552.$(OBJEXT) $(am__objects_224) \
	$(am__objects_225)
lib552_OBJECTS = $(am_lib552_OBJECTS)
lib552_LDADD = $(LDADD)
lib552_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_226 = lib553-first.$(OBJEXT)
am_lib553_OBJECTS = lib553-lib553.$(OBJEXT) $(am__objects_226)
lib553_OBJECTS = $(am_lib553_OBJECTS)
lib553_LDADD = $(LDADD)
lib553_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_227 = lib554-first.$(OBJEXT)
am_lib554_OBJECTS = lib554-lib554.$(OBJEXT) $(am__objects_227)
lib554_OBJECTS = $(am_lib554_OBJECTS)
lib554_LDADD = $(LDADD)
lib554_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_228 = lib555-first.$(OBJEXT)
am__objects_229 = lib555-testutil.$(OBJEXT)
am__objects_230 = ../../lib/lib555-warnless.$(OBJEXT)
am_lib555_OBJECTS = lib555-lib555.$(OBJEXT) $(am__objects_228) \
	$(am__objects_229) $(am__objects_230)
lib555_OBJECTS = $(am_lib555_OBJECTS)
lib555_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_231 = lib556-first.$(OBJEXT)
am__objects_232 = ../../lib/lib556-warnless.$(OBJEXT)
am_lib556_OBJECTS = lib556-lib556.$(OBJEXT) $(am__objects_231) \
	$(am__objects_232)
lib556_OBJECTS = $(am_lib556_OBJECTS)
lib556_LDADD = $(LDADD)
lib556_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_233 = lib557-first.$(OBJEXT)
am_lib557_OBJECTS = lib557-lib557.$(OBJEXT) $(am__objects_233)
lib557_OBJECTS = $(am_lib557_OBJECTS)
lib557_LDADD = $(LDADD)
lib557_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_234 = lib558-first.$(OBJEXT)
am_lib558_OBJECTS = lib558-lib558.$(OBJEXT) $(am__objects_234)
lib558_OBJECTS = $(am_lib558_OBJECTS)
lib558_LDADD = $(LDADD)
lib558_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_235 = lib559-first.$(OBJEXT)
am_lib559_OBJECTS = lib559-lib559.$(OBJEXT) $(am__objects_235)
lib559_OBJECTS = $(am_lib559_OBJECTS)
lib559_LDADD = $(LDADD)
lib559_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_236 = lib560-first.$(OBJEXT)
am__objects_237 = lib560-testutil.$(OBJEXT)
am__objects_238 = ../../lib/lib560-warnless.$(OBJEXT)
am_lib560_OBJECTS = lib560-lib560.$(OBJEXT) $(am__objects_236) \
	$(am__objects_237) $(am__objects_238)
lib560_OBJECTS = $(am_lib560_OBJECTS)
lib560_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_239 = lib562-first.$(OBJEXT)
am_lib562_OBJECTS = lib562-lib562.$(OBJEXT) $(am__objects_239)
lib562_OBJECTS = $(am_lib562_OBJECTS)
lib562_LDADD = $(LDADD)
lib562_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_240 = lib564-first.$(OBJEXT)
am__objects_241 = lib564-testutil.$(OBJEXT)
am__objects_242 = ../../lib/lib564-warnless.$(OBJEXT)
am_lib564_OBJECTS = lib564-lib564.$(OBJEXT) $(am__objects_240) \
	$(am__objects_241) $(am__objects_242)
lib564_OBJECTS = $(am_lib564_OBJECTS)
lib564_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_243 = lib565-first.$(OBJEXT)
am_lib565_OBJECTS = lib565-lib510.$(OBJEXT) $(am__objects_243)
lib565_OBJECTS = $(am_lib565_OBJECTS)
lib565_LDADD = $(LDADD)
lib565_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_244 = lib566-first.$(OBJEXT)
am_lib566_OBJECTS = lib566-lib566.$(OBJEXT) $(am__objects_244)
lib566_OBJECTS = $(am_lib566_OBJECTS)
lib566_LDADD = $(LDADD)
lib566_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_245 = lib567-first.$(OBJEXT)
am_lib567_OBJECTS = lib567-lib567.$(OBJEXT) $(am__objects_245)
lib567_OBJECTS = $(am_lib567_OBJECTS)
lib567_LDADD = $(LDADD)
lib567_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_246 = lib568-first.$(OBJEXT)
am_lib568_OBJECTS = lib568-lib568.$(OBJEXT) $(am__objects_246)
lib568_OBJECTS = $(am_lib568_OBJECTS)
lib568_LDADD = $(LDADD)
lib568_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_247 = lib569-first.$(OBJEXT)
am_lib569_OBJECTS = lib569-lib569.$(OBJEXT) $(am__objects_247)
lib569_OBJECTS = $(am_lib569_OBJECTS)
lib569_LDADD = $(LDADD)
lib569_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_248 = lib570-first.$(OBJEXT)
am_lib570_OBJECTS = lib570-lib570.$(OBJEXT) $(am__objects_248)
lib570_OBJECTS = $(am_lib570_OBJECTS)
lib570_LDADD = $(LDADD)
lib570_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_249 = lib571-first.$(OBJEXT)
am__objects_250 = ../../lib/lib571-warnless.$(OBJEXT)
am_lib571_OBJECTS = lib571-lib571.$(OBJEXT) $(am__objects_249) \
	$(am__objects_250)
lib571_OBJECTS = $(am_lib571_OBJECTS)
lib571_LDADD = $(LDADD)
lib571_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_251 = lib572-first.$(OBJEXT)
am_lib572_OBJECTS = lib572-lib572.$(OBJEXT) $(am__objects_251)
lib572_OBJECTS = $(am_lib572_OBJECTS)
lib572_LDADD = $(LDADD)
lib572_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_252 = lib573-first.$(OBJEXT)
am__objects_253 = lib573-testutil.$(OBJEXT)
am__objects_254 = ../../lib/lib573-warnless.$(OBJEXT)
am__objects_255 = lib573-testtrace.$(OBJEXT)
am_lib573_OBJECTS = lib573-lib573.$(OBJEXT) $(am__objects_252) \
	$(am__objects_253) $(am__objects_254) $(am__objects_255)
lib573_OBJECTS = $(am_lib573_OBJECTS)
lib573_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_256 = lib574-first.$(OBJEXT)
am_lib574_OBJECTS = lib574-lib574.$(OBJEXT) $(am__objects_256)
lib574_OBJECTS = $(am_lib574_OBJECTS)
lib574_LDADD = $(LDADD)
lib574_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_257 = lib575-first.$(OBJEXT)
am__objects_258 = lib575-testutil.$(OBJEXT)
am__objects_259 = ../../lib/lib575-warnless.$(OBJEXT)
am_lib575_OBJECTS = lib575-lib575.$(OBJEXT) $(am__objects_257) \
	$(am__objects_258) $(am__objects_259)
lib575_OBJECTS = $(am_lib575_OBJECTS)
lib575_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_260 = lib576-first.$(OBJEXT)
am_lib576_OBJECTS = lib576-lib576.$(OBJEXT) $(am__objects_260)
lib576_OBJECTS = $(am_lib576_OBJECTS)
lib576_LDADD = $(LDADD)
lib576_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_261 = lib578-first.$(OBJEXT)
am_lib578_OBJECTS = lib578-lib578.$(OBJEXT) $(am__objects_261)
lib578_OBJECTS = $(am_lib578_OBJECTS)
lib578_LDADD = $(LDADD)
lib578_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_262 = lib579-first.$(OBJEXT)
am_lib579_OBJECTS = lib579-lib579.$(OBJEXT) $(am__objects_262)
lib579_OBJECTS = $(am_lib579_OBJECTS)
lib579_LDADD = $(LDADD)
lib579_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_263 = lib582-first.$(OBJEXT)
am__objects_264 = lib582-testutil.$(OBJEXT)
am__objects_265 = ../../lib/lib582-warnless.$(OBJEXT)
am_lib582_OBJECTS = lib582-lib582.$(OBJEXT) $(am__objects_263) \
	$(am__objects_264) $(am__objects_265)
lib582_OBJECTS = $(am_lib582_OBJECTS)
lib582_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_266 = lib583-first.$(OBJEXT)
am_lib583_OBJECTS = lib583-lib583.$(OBJEXT) $(am__objects_266)
lib583_OBJECTS = $(am_lib583_OBJECTS)
lib583_LDADD = $(LDADD)
lib583_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_267 = lib585-first.$(OBJEXT)
am__objects_268 = lib585-testutil.$(OBJEXT)
am__objects_269 = lib585-testtrace.$(OBJEXT)
am_lib585_OBJECTS = lib585-lib500.$(OBJEXT) $(am__objects_267) \
	$(am__objects_268) $(am__objects_269)
lib585_OBJECTS = $(am_lib585_OBJECTS)
lib585_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_270 = lib586-first.$(OBJEXT)
am_lib586_OBJECTS = lib586-lib586.$(OBJEXT) $(am__objects_270)
lib586_OBJECTS = $(am_lib586_OBJECTS)
lib586_LDADD = $(LDADD)
lib586_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_271 = lib587-first.$(OBJEXT)
am_lib587_OBJECTS = lib587-lib554.$(OBJEXT) $(am__objects_271)
lib587_OBJECTS = $(am_lib587_OBJECTS)
lib587_LDADD = $(LDADD)
lib587_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_272 = lib589-first.$(OBJEXT)
am_lib589_OBJECTS = lib589-lib589.$(OBJEXT) $(am__objects_272)
lib589_OBJECTS = $(am_lib589_OBJECTS)
lib589_LDADD = $(LDADD)
lib589_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_273 = lib590-first.$(OBJEXT)
am_lib590_OBJECTS = lib590-lib590.$(OBJEXT) $(am__objects_273)
lib590_OBJECTS = $(am_lib590_OBJECTS)
lib590_LDADD = $(LDADD)
lib590_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_274 = lib591-first.$(OBJEXT)
am__objects_275 = lib591-testutil.$(OBJEXT)
am__objects_276 = ../../lib/lib591-warnless.$(OBJEXT)
am_lib591_OBJECTS = lib591-lib591.$(OBJEXT) $(am__objects_274) \
	$(am__objects_275) $(am__objects_276)
lib591_OBJECTS = $(am_lib591_OBJECTS)
lib591_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_277 = lib597-first.$(OBJEXT)
am__objects_278 = lib597-testutil.$(OBJEXT)
am__objects_279 = ../../lib/lib597-warnless.$(OBJEXT)
am_lib597_OBJECTS = lib597-lib597.$(OBJEXT) $(am__objects_277) \
	$(am__objects_278) $(am__objects_279)
lib597_OBJECTS = $(am_lib597_OBJECTS)
lib597_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_280 = lib598-first.$(OBJEXT)
am_lib598_OBJECTS = lib598-lib598.$(OBJEXT) $(am__objects_280)
lib598_OBJECTS = $(am_lib598_OBJECTS)
lib598_LDADD = $(LDADD)
lib598_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_281 = lib599-first.$(OBJEXT)
am_lib599_OBJECTS = lib599-lib599.$(OBJEXT) $(am__objects_281)
lib599_OBJECTS = $(am_lib599_OBJECTS)
lib599_LDADD = $(LDADD)
lib599_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_282 = lib643-first.$(OBJEXT)
am_lib643_OBJECTS = lib643-lib643.$(OBJEXT) $(am__objects_282)
lib643_OBJECTS = $(am_lib643_OBJECTS)
lib643_LDADD = $(LDADD)
lib643_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_283 = lib644-first.$(OBJEXT)
am_lib644_OBJECTS = lib644-lib643.$(OBJEXT) $(am__objects_283)
lib644_OBJECTS = $(am_lib644_OBJECTS)
lib644_LDADD = $(LDADD)
lib644_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_284 = lib645-first.$(OBJEXT)
am_lib645_OBJECTS = lib645-lib643.$(OBJEXT) $(am__objects_284)
lib645_OBJECTS = $(am_lib645_OBJECTS)
lib645_LDADD = $(LDADD)
lib645_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_285 = lib650-first.$(OBJEXT)
am_lib650_OBJECTS = lib650-lib650.$(OBJEXT) $(am__objects_285)
lib650_OBJECTS = $(am_lib650_OBJECTS)
lib650_LDADD = $(LDADD)
lib650_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_286 = lib651-first.$(OBJEXT)
am_lib651_OBJECTS = lib651-lib651.$(OBJEXT) $(am__objects_286)
lib651_OBJECTS = $(am_lib651_OBJECTS)
lib651_LDADD = $(LDADD)
lib651_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_287 = lib652-first.$(OBJEXT)
am_lib652_OBJECTS = lib652-lib652.$(OBJEXT) $(am__objects_287)
lib652_OBJECTS = $(am_lib652_OBJECTS)
lib652_LDADD = $(LDADD)
lib652_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_288 = lib653-first.$(OBJEXT)
am_lib653_OBJECTS = lib653-lib653.$(OBJEXT) $(am__objects_288)
lib653_OBJECTS = $(am_lib653_OBJECTS)
lib653_LDADD = $(LDADD)
lib653_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_289 = lib654-first.$(OBJEXT)
am_lib654_OBJECTS = lib654-lib654.$(OBJEXT) $(am__objects_289)
lib654_OBJECTS = $(am_lib654_OBJECTS)
lib654_LDADD = $(LDADD)
lib654_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_290 = lib655-first.$(OBJEXT)
am_lib655_OBJECTS = lib655-lib655.$(OBJEXT) $(am__objects_290)
lib655_OBJECTS = $(am_lib655_OBJECTS)
lib655_LDADD = $(LDADD)
lib655_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_291 = lib658-first.$(OBJEXT)
am__objects_292 = lib658-testutil.$(OBJEXT)
am__objects_293 = ../../lib/lib658-warnless.$(OBJEXT)
am_lib658_OBJECTS = lib658-lib658.$(OBJEXT) $(am__objects_291) \
	$(am__objects_292) $(am__objects_293)
lib658_OBJECTS = $(am_lib658_OBJECTS)
lib658_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_294 = lib659-first.$(OBJEXT)
am__objects_295 = lib659-testutil.$(OBJEXT)
am__objects_296 = ../../lib/lib659-warnless.$(OBJEXT)
am_lib659_OBJECTS = lib659-lib659.$(OBJEXT) $(am__objects_294) \
	$(am__objects_295) $(am__objects_296)
lib659_OBJECTS = $(am_lib659_OBJECTS)
lib659_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_297 = lib661-first.$(OBJEXT)
am_lib661_OBJECTS = lib661-lib661.$(OBJEXT) $(am__objects_297)
lib661_OBJECTS = $(am_lib661_OBJECTS)
lib661_LDADD = $(LDADD)
lib661_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_298 = libauthretry-first.$(OBJEXT)
am_libauthretry_OBJECTS = libauthretry-libauthretry.$(OBJEXT) \
	$(am__objects_298)
libauthretry_OBJECTS = $(am_libauthretry_OBJECTS)
libauthretry_LDADD = $(LDADD)
libauthretry_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_299 = libntlmconnect-first.$(OBJEXT)
am__objects_300 = libntlmconnect-testutil.$(OBJEXT)
am__objects_301 = ../../lib/libntlmconnect-warnless.$(OBJEXT)
am_libntlmconnect_OBJECTS = libntlmconnect-libntlmconnect.$(OBJEXT) \
	$(am__objects_299) $(am__objects_300) $(am__objects_301)
libntlmconnect_OBJECTS = $(am_libntlmconnect_OBJECTS)
libntlmconnect_DEPENDENCIES = $(am__DEPENDENCIES_1)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)







|
>
>
>
>
>
>
>
|
|

|


|
|
|
|
|


|
|



|
|
|
|
|


|
|
|
|
|


|
|
|
|
|


|
|



|
|



|
|
|
|
|


|
|



|
|



|
|



|
|



|
|



|
|



|
|



|
|



|
|



|
|



|
|
|
|



|
|



|
|



|
|



|
|



|
|



|
|
|
|
|


|
|
|
|
|


|
|
|
|
|


|
|
|
|
|


|
|
|
|
|


|
|
|
|
|


|
|
|
|
|


|
|
|
|



|
|



|
|
|
|
|


|
|



|
|



|
|



|
|



|
|



|
|



|
|



|
|



|
|
|
|



|
|



|
|



|
|
|
|
|


|
|
|
|



|
|



|
|



|
|



|
|
|
|
|


|
|



|
|
|
|
|


|
|



|
|



|
|



|
|



|
|



|
|



|
|
|
|



|
|



|
|
|
|
|
|


|
|



|
|
|
|
|


|
|



|
|



|
|



|
|
|
|
|


|
|



|
|
|
|
|


|
|



|
|



|
|



|
|



|
|
|
|
|


|
|
|
|
|


|
|



|
|



|
|



|
|



|
|



|
|



|
|



|
|



|
|



|
|



|
|



|
|
|
|
|


|
|
|
|
|


|
|



|

|



|
|
|

|







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
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
am__objects_148 = lib1907-first.$(OBJEXT)
am__objects_149 = lib1907-testutil.$(OBJEXT)
am__objects_150 = ../../lib/lib1907-warnless.$(OBJEXT)
am_lib1907_OBJECTS = lib1907-lib1907.$(OBJEXT) $(am__objects_148) \
	$(am__objects_149) $(am__objects_150)
lib1907_OBJECTS = $(am_lib1907_OBJECTS)
lib1907_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_151 = lib1908-first.$(OBJEXT)
am__objects_152 = lib1908-testutil.$(OBJEXT)
am__objects_153 = ../../lib/lib1908-warnless.$(OBJEXT)
am_lib1908_OBJECTS = lib1908-lib1908.$(OBJEXT) $(am__objects_151) \
	$(am__objects_152) $(am__objects_153)
lib1908_OBJECTS = $(am_lib1908_OBJECTS)
lib1908_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_154 = lib2033-first.$(OBJEXT)
am__objects_155 = lib2033-testutil.$(OBJEXT)
am__objects_156 = ../../lib/lib2033-warnless.$(OBJEXT)
am_lib2033_OBJECTS = lib2033-libntlmconnect.$(OBJEXT) \
	$(am__objects_154) $(am__objects_155) $(am__objects_156)
lib2033_OBJECTS = $(am_lib2033_OBJECTS)
lib2033_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_157 = lib500-first.$(OBJEXT)
am__objects_158 = lib500-testutil.$(OBJEXT)
am__objects_159 = lib500-testtrace.$(OBJEXT)
am_lib500_OBJECTS = lib500-lib500.$(OBJEXT) $(am__objects_157) \
	$(am__objects_158) $(am__objects_159)
lib500_OBJECTS = $(am_lib500_OBJECTS)
lib500_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_160 = lib501-first.$(OBJEXT)
am_lib501_OBJECTS = lib501-lib501.$(OBJEXT) $(am__objects_160)
lib501_OBJECTS = $(am_lib501_OBJECTS)
lib501_LDADD = $(LDADD)
lib501_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_161 = lib502-first.$(OBJEXT)
am__objects_162 = lib502-testutil.$(OBJEXT)
am__objects_163 = ../../lib/lib502-warnless.$(OBJEXT)
am_lib502_OBJECTS = lib502-lib502.$(OBJEXT) $(am__objects_161) \
	$(am__objects_162) $(am__objects_163)
lib502_OBJECTS = $(am_lib502_OBJECTS)
lib502_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_164 = lib503-first.$(OBJEXT)
am__objects_165 = lib503-testutil.$(OBJEXT)
am__objects_166 = ../../lib/lib503-warnless.$(OBJEXT)
am_lib503_OBJECTS = lib503-lib503.$(OBJEXT) $(am__objects_164) \
	$(am__objects_165) $(am__objects_166)
lib503_OBJECTS = $(am_lib503_OBJECTS)
lib503_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_167 = lib504-first.$(OBJEXT)
am__objects_168 = lib504-testutil.$(OBJEXT)
am__objects_169 = ../../lib/lib504-warnless.$(OBJEXT)
am_lib504_OBJECTS = lib504-lib504.$(OBJEXT) $(am__objects_167) \
	$(am__objects_168) $(am__objects_169)
lib504_OBJECTS = $(am_lib504_OBJECTS)
lib504_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_170 = lib505-first.$(OBJEXT)
am_lib505_OBJECTS = lib505-lib505.$(OBJEXT) $(am__objects_170)
lib505_OBJECTS = $(am_lib505_OBJECTS)
lib505_LDADD = $(LDADD)
lib505_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_171 = lib506-first.$(OBJEXT)
am_lib506_OBJECTS = lib506-lib506.$(OBJEXT) $(am__objects_171)
lib506_OBJECTS = $(am_lib506_OBJECTS)
lib506_LDADD = $(LDADD)
lib506_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_172 = lib507-first.$(OBJEXT)
am__objects_173 = lib507-testutil.$(OBJEXT)
am__objects_174 = ../../lib/lib507-warnless.$(OBJEXT)
am_lib507_OBJECTS = lib507-lib507.$(OBJEXT) $(am__objects_172) \
	$(am__objects_173) $(am__objects_174)
lib507_OBJECTS = $(am_lib507_OBJECTS)
lib507_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_175 = lib508-first.$(OBJEXT)
am_lib508_OBJECTS = lib508-lib508.$(OBJEXT) $(am__objects_175)
lib508_OBJECTS = $(am_lib508_OBJECTS)
lib508_LDADD = $(LDADD)
lib508_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_176 = lib509-first.$(OBJEXT)
am_lib509_OBJECTS = lib509-lib509.$(OBJEXT) $(am__objects_176)
lib509_OBJECTS = $(am_lib509_OBJECTS)
lib509_LDADD = $(LDADD)
lib509_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_177 = lib510-first.$(OBJEXT)
am_lib510_OBJECTS = lib510-lib510.$(OBJEXT) $(am__objects_177)
lib510_OBJECTS = $(am_lib510_OBJECTS)
lib510_LDADD = $(LDADD)
lib510_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_178 = lib511-first.$(OBJEXT)
am_lib511_OBJECTS = lib511-lib511.$(OBJEXT) $(am__objects_178)
lib511_OBJECTS = $(am_lib511_OBJECTS)
lib511_LDADD = $(LDADD)
lib511_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_179 = lib512-first.$(OBJEXT)
am_lib512_OBJECTS = lib512-lib512.$(OBJEXT) $(am__objects_179)
lib512_OBJECTS = $(am_lib512_OBJECTS)
lib512_LDADD = $(LDADD)
lib512_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_180 = lib513-first.$(OBJEXT)
am_lib513_OBJECTS = lib513-lib513.$(OBJEXT) $(am__objects_180)
lib513_OBJECTS = $(am_lib513_OBJECTS)
lib513_LDADD = $(LDADD)
lib513_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_181 = lib514-first.$(OBJEXT)
am_lib514_OBJECTS = lib514-lib514.$(OBJEXT) $(am__objects_181)
lib514_OBJECTS = $(am_lib514_OBJECTS)
lib514_LDADD = $(LDADD)
lib514_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_182 = lib515-first.$(OBJEXT)
am_lib515_OBJECTS = lib515-lib515.$(OBJEXT) $(am__objects_182)
lib515_OBJECTS = $(am_lib515_OBJECTS)
lib515_LDADD = $(LDADD)
lib515_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_183 = lib516-first.$(OBJEXT)
am_lib516_OBJECTS = lib516-lib516.$(OBJEXT) $(am__objects_183)
lib516_OBJECTS = $(am_lib516_OBJECTS)
lib516_LDADD = $(LDADD)
lib516_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_184 = lib517-first.$(OBJEXT)
am_lib517_OBJECTS = lib517-lib517.$(OBJEXT) $(am__objects_184)
lib517_OBJECTS = $(am_lib517_OBJECTS)
lib517_LDADD = $(LDADD)
lib517_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_185 = lib518-first.$(OBJEXT)
am__objects_186 = ../../lib/lib518-warnless.$(OBJEXT)
am_lib518_OBJECTS = lib518-lib518.$(OBJEXT) $(am__objects_185) \
	$(am__objects_186)
lib518_OBJECTS = $(am_lib518_OBJECTS)
lib518_LDADD = $(LDADD)
lib518_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_187 = lib519-first.$(OBJEXT)
am_lib519_OBJECTS = lib519-lib519.$(OBJEXT) $(am__objects_187)
lib519_OBJECTS = $(am_lib519_OBJECTS)
lib519_LDADD = $(LDADD)
lib519_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_188 = lib520-first.$(OBJEXT)
am_lib520_OBJECTS = lib520-lib520.$(OBJEXT) $(am__objects_188)
lib520_OBJECTS = $(am_lib520_OBJECTS)
lib520_LDADD = $(LDADD)
lib520_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_189 = lib521-first.$(OBJEXT)
am_lib521_OBJECTS = lib521-lib521.$(OBJEXT) $(am__objects_189)
lib521_OBJECTS = $(am_lib521_OBJECTS)
lib521_LDADD = $(LDADD)
lib521_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_190 = lib523-first.$(OBJEXT)
am_lib523_OBJECTS = lib523-lib523.$(OBJEXT) $(am__objects_190)
lib523_OBJECTS = $(am_lib523_OBJECTS)
lib523_LDADD = $(LDADD)
lib523_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_191 = lib524-first.$(OBJEXT)
am_lib524_OBJECTS = lib524-lib524.$(OBJEXT) $(am__objects_191)
lib524_OBJECTS = $(am_lib524_OBJECTS)
lib524_LDADD = $(LDADD)
lib524_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_192 = lib525-first.$(OBJEXT)
am__objects_193 = lib525-testutil.$(OBJEXT)
am__objects_194 = ../../lib/lib525-warnless.$(OBJEXT)
am_lib525_OBJECTS = lib525-lib525.$(OBJEXT) $(am__objects_192) \
	$(am__objects_193) $(am__objects_194)
lib525_OBJECTS = $(am_lib525_OBJECTS)
lib525_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_195 = lib526-first.$(OBJEXT)
am__objects_196 = lib526-testutil.$(OBJEXT)
am__objects_197 = ../../lib/lib526-warnless.$(OBJEXT)
am_lib526_OBJECTS = lib526-lib526.$(OBJEXT) $(am__objects_195) \
	$(am__objects_196) $(am__objects_197)
lib526_OBJECTS = $(am_lib526_OBJECTS)
lib526_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_198 = lib527-first.$(OBJEXT)
am__objects_199 = lib527-testutil.$(OBJEXT)
am__objects_200 = ../../lib/lib527-warnless.$(OBJEXT)
am_lib527_OBJECTS = lib527-lib526.$(OBJEXT) $(am__objects_198) \
	$(am__objects_199) $(am__objects_200)
lib527_OBJECTS = $(am_lib527_OBJECTS)
lib527_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_201 = lib529-first.$(OBJEXT)
am__objects_202 = lib529-testutil.$(OBJEXT)
am__objects_203 = ../../lib/lib529-warnless.$(OBJEXT)
am_lib529_OBJECTS = lib529-lib525.$(OBJEXT) $(am__objects_201) \
	$(am__objects_202) $(am__objects_203)
lib529_OBJECTS = $(am_lib529_OBJECTS)
lib529_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_204 = lib530-first.$(OBJEXT)
am__objects_205 = lib530-testutil.$(OBJEXT)
am__objects_206 = ../../lib/lib530-warnless.$(OBJEXT)
am_lib530_OBJECTS = lib530-lib530.$(OBJEXT) $(am__objects_204) \
	$(am__objects_205) $(am__objects_206)
lib530_OBJECTS = $(am_lib530_OBJECTS)
lib530_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_207 = lib532-first.$(OBJEXT)
am__objects_208 = lib532-testutil.$(OBJEXT)
am__objects_209 = ../../lib/lib532-warnless.$(OBJEXT)
am_lib532_OBJECTS = lib532-lib526.$(OBJEXT) $(am__objects_207) \
	$(am__objects_208) $(am__objects_209)
lib532_OBJECTS = $(am_lib532_OBJECTS)
lib532_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_210 = lib533-first.$(OBJEXT)
am__objects_211 = lib533-testutil.$(OBJEXT)
am__objects_212 = ../../lib/lib533-warnless.$(OBJEXT)
am_lib533_OBJECTS = lib533-lib533.$(OBJEXT) $(am__objects_210) \
	$(am__objects_211) $(am__objects_212)
lib533_OBJECTS = $(am_lib533_OBJECTS)
lib533_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_213 = lib537-first.$(OBJEXT)
am__objects_214 = ../../lib/lib537-warnless.$(OBJEXT)
am_lib537_OBJECTS = lib537-lib537.$(OBJEXT) $(am__objects_213) \
	$(am__objects_214)
lib537_OBJECTS = $(am_lib537_OBJECTS)
lib537_LDADD = $(LDADD)
lib537_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_215 = lib539-first.$(OBJEXT)
am_lib539_OBJECTS = lib539-lib539.$(OBJEXT) $(am__objects_215)
lib539_OBJECTS = $(am_lib539_OBJECTS)
lib539_LDADD = $(LDADD)
lib539_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_216 = lib540-first.$(OBJEXT)
am__objects_217 = lib540-testutil.$(OBJEXT)
am__objects_218 = ../../lib/lib540-warnless.$(OBJEXT)
am_lib540_OBJECTS = lib540-lib540.$(OBJEXT) $(am__objects_216) \
	$(am__objects_217) $(am__objects_218)
lib540_OBJECTS = $(am_lib540_OBJECTS)
lib540_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_219 = lib541-first.$(OBJEXT)
am_lib541_OBJECTS = lib541-lib541.$(OBJEXT) $(am__objects_219)
lib541_OBJECTS = $(am_lib541_OBJECTS)
lib541_LDADD = $(LDADD)
lib541_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_220 = lib542-first.$(OBJEXT)
am_lib542_OBJECTS = lib542-lib542.$(OBJEXT) $(am__objects_220)
lib542_OBJECTS = $(am_lib542_OBJECTS)
lib542_LDADD = $(LDADD)
lib542_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_221 = lib543-first.$(OBJEXT)
am_lib543_OBJECTS = lib543-lib543.$(OBJEXT) $(am__objects_221)
lib543_OBJECTS = $(am_lib543_OBJECTS)
lib543_LDADD = $(LDADD)
lib543_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_222 = lib544-first.$(OBJEXT)
am_lib544_OBJECTS = lib544-lib544.$(OBJEXT) $(am__objects_222)
lib544_OBJECTS = $(am_lib544_OBJECTS)
lib544_LDADD = $(LDADD)
lib544_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_223 = lib545-first.$(OBJEXT)
am_lib545_OBJECTS = lib545-lib544.$(OBJEXT) $(am__objects_223)
lib545_OBJECTS = $(am_lib545_OBJECTS)
lib545_LDADD = $(LDADD)
lib545_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_224 = lib547-first.$(OBJEXT)
am_lib547_OBJECTS = lib547-lib547.$(OBJEXT) $(am__objects_224)
lib547_OBJECTS = $(am_lib547_OBJECTS)
lib547_LDADD = $(LDADD)
lib547_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_225 = lib548-first.$(OBJEXT)
am_lib548_OBJECTS = lib548-lib547.$(OBJEXT) $(am__objects_225)
lib548_OBJECTS = $(am_lib548_OBJECTS)
lib548_LDADD = $(LDADD)
lib548_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_226 = lib549-first.$(OBJEXT)
am_lib549_OBJECTS = lib549-lib549.$(OBJEXT) $(am__objects_226)
lib549_OBJECTS = $(am_lib549_OBJECTS)
lib549_LDADD = $(LDADD)
lib549_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_227 = lib552-first.$(OBJEXT)
am__objects_228 = ../../lib/lib552-warnless.$(OBJEXT)
am_lib552_OBJECTS = lib552-lib552.$(OBJEXT) $(am__objects_227) \
	$(am__objects_228)
lib552_OBJECTS = $(am_lib552_OBJECTS)
lib552_LDADD = $(LDADD)
lib552_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_229 = lib553-first.$(OBJEXT)
am_lib553_OBJECTS = lib553-lib553.$(OBJEXT) $(am__objects_229)
lib553_OBJECTS = $(am_lib553_OBJECTS)
lib553_LDADD = $(LDADD)
lib553_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_230 = lib554-first.$(OBJEXT)
am_lib554_OBJECTS = lib554-lib554.$(OBJEXT) $(am__objects_230)
lib554_OBJECTS = $(am_lib554_OBJECTS)
lib554_LDADD = $(LDADD)
lib554_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_231 = lib555-first.$(OBJEXT)
am__objects_232 = lib555-testutil.$(OBJEXT)
am__objects_233 = ../../lib/lib555-warnless.$(OBJEXT)
am_lib555_OBJECTS = lib555-lib555.$(OBJEXT) $(am__objects_231) \
	$(am__objects_232) $(am__objects_233)
lib555_OBJECTS = $(am_lib555_OBJECTS)
lib555_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_234 = lib556-first.$(OBJEXT)
am__objects_235 = ../../lib/lib556-warnless.$(OBJEXT)
am_lib556_OBJECTS = lib556-lib556.$(OBJEXT) $(am__objects_234) \
	$(am__objects_235)
lib556_OBJECTS = $(am_lib556_OBJECTS)
lib556_LDADD = $(LDADD)
lib556_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_236 = lib557-first.$(OBJEXT)
am_lib557_OBJECTS = lib557-lib557.$(OBJEXT) $(am__objects_236)
lib557_OBJECTS = $(am_lib557_OBJECTS)
lib557_LDADD = $(LDADD)
lib557_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_237 = lib558-first.$(OBJEXT)
am_lib558_OBJECTS = lib558-lib558.$(OBJEXT) $(am__objects_237)
lib558_OBJECTS = $(am_lib558_OBJECTS)
lib558_LDADD = $(LDADD)
lib558_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_238 = lib559-first.$(OBJEXT)
am_lib559_OBJECTS = lib559-lib559.$(OBJEXT) $(am__objects_238)
lib559_OBJECTS = $(am_lib559_OBJECTS)
lib559_LDADD = $(LDADD)
lib559_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_239 = lib560-first.$(OBJEXT)
am__objects_240 = lib560-testutil.$(OBJEXT)
am__objects_241 = ../../lib/lib560-warnless.$(OBJEXT)
am_lib560_OBJECTS = lib560-lib560.$(OBJEXT) $(am__objects_239) \
	$(am__objects_240) $(am__objects_241)
lib560_OBJECTS = $(am_lib560_OBJECTS)
lib560_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_242 = lib562-first.$(OBJEXT)
am_lib562_OBJECTS = lib562-lib562.$(OBJEXT) $(am__objects_242)
lib562_OBJECTS = $(am_lib562_OBJECTS)
lib562_LDADD = $(LDADD)
lib562_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_243 = lib564-first.$(OBJEXT)
am__objects_244 = lib564-testutil.$(OBJEXT)
am__objects_245 = ../../lib/lib564-warnless.$(OBJEXT)
am_lib564_OBJECTS = lib564-lib564.$(OBJEXT) $(am__objects_243) \
	$(am__objects_244) $(am__objects_245)
lib564_OBJECTS = $(am_lib564_OBJECTS)
lib564_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_246 = lib565-first.$(OBJEXT)
am_lib565_OBJECTS = lib565-lib510.$(OBJEXT) $(am__objects_246)
lib565_OBJECTS = $(am_lib565_OBJECTS)
lib565_LDADD = $(LDADD)
lib565_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_247 = lib566-first.$(OBJEXT)
am_lib566_OBJECTS = lib566-lib566.$(OBJEXT) $(am__objects_247)
lib566_OBJECTS = $(am_lib566_OBJECTS)
lib566_LDADD = $(LDADD)
lib566_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_248 = lib567-first.$(OBJEXT)
am_lib567_OBJECTS = lib567-lib567.$(OBJEXT) $(am__objects_248)
lib567_OBJECTS = $(am_lib567_OBJECTS)
lib567_LDADD = $(LDADD)
lib567_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_249 = lib568-first.$(OBJEXT)
am_lib568_OBJECTS = lib568-lib568.$(OBJEXT) $(am__objects_249)
lib568_OBJECTS = $(am_lib568_OBJECTS)
lib568_LDADD = $(LDADD)
lib568_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_250 = lib569-first.$(OBJEXT)
am_lib569_OBJECTS = lib569-lib569.$(OBJEXT) $(am__objects_250)
lib569_OBJECTS = $(am_lib569_OBJECTS)
lib569_LDADD = $(LDADD)
lib569_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_251 = lib570-first.$(OBJEXT)
am_lib570_OBJECTS = lib570-lib570.$(OBJEXT) $(am__objects_251)
lib570_OBJECTS = $(am_lib570_OBJECTS)
lib570_LDADD = $(LDADD)
lib570_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_252 = lib571-first.$(OBJEXT)
am__objects_253 = ../../lib/lib571-warnless.$(OBJEXT)
am_lib571_OBJECTS = lib571-lib571.$(OBJEXT) $(am__objects_252) \
	$(am__objects_253)
lib571_OBJECTS = $(am_lib571_OBJECTS)
lib571_LDADD = $(LDADD)
lib571_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_254 = lib572-first.$(OBJEXT)
am_lib572_OBJECTS = lib572-lib572.$(OBJEXT) $(am__objects_254)
lib572_OBJECTS = $(am_lib572_OBJECTS)
lib572_LDADD = $(LDADD)
lib572_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_255 = lib573-first.$(OBJEXT)
am__objects_256 = lib573-testutil.$(OBJEXT)
am__objects_257 = ../../lib/lib573-warnless.$(OBJEXT)
am__objects_258 = lib573-testtrace.$(OBJEXT)
am_lib573_OBJECTS = lib573-lib573.$(OBJEXT) $(am__objects_255) \
	$(am__objects_256) $(am__objects_257) $(am__objects_258)
lib573_OBJECTS = $(am_lib573_OBJECTS)
lib573_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_259 = lib574-first.$(OBJEXT)
am_lib574_OBJECTS = lib574-lib574.$(OBJEXT) $(am__objects_259)
lib574_OBJECTS = $(am_lib574_OBJECTS)
lib574_LDADD = $(LDADD)
lib574_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_260 = lib575-first.$(OBJEXT)
am__objects_261 = lib575-testutil.$(OBJEXT)
am__objects_262 = ../../lib/lib575-warnless.$(OBJEXT)
am_lib575_OBJECTS = lib575-lib575.$(OBJEXT) $(am__objects_260) \
	$(am__objects_261) $(am__objects_262)
lib575_OBJECTS = $(am_lib575_OBJECTS)
lib575_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_263 = lib576-first.$(OBJEXT)
am_lib576_OBJECTS = lib576-lib576.$(OBJEXT) $(am__objects_263)
lib576_OBJECTS = $(am_lib576_OBJECTS)
lib576_LDADD = $(LDADD)
lib576_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_264 = lib578-first.$(OBJEXT)
am_lib578_OBJECTS = lib578-lib578.$(OBJEXT) $(am__objects_264)
lib578_OBJECTS = $(am_lib578_OBJECTS)
lib578_LDADD = $(LDADD)
lib578_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_265 = lib579-first.$(OBJEXT)
am_lib579_OBJECTS = lib579-lib579.$(OBJEXT) $(am__objects_265)
lib579_OBJECTS = $(am_lib579_OBJECTS)
lib579_LDADD = $(LDADD)
lib579_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_266 = lib582-first.$(OBJEXT)
am__objects_267 = lib582-testutil.$(OBJEXT)
am__objects_268 = ../../lib/lib582-warnless.$(OBJEXT)
am_lib582_OBJECTS = lib582-lib582.$(OBJEXT) $(am__objects_266) \
	$(am__objects_267) $(am__objects_268)
lib582_OBJECTS = $(am_lib582_OBJECTS)
lib582_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_269 = lib583-first.$(OBJEXT)
am_lib583_OBJECTS = lib583-lib583.$(OBJEXT) $(am__objects_269)
lib583_OBJECTS = $(am_lib583_OBJECTS)
lib583_LDADD = $(LDADD)
lib583_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_270 = lib585-first.$(OBJEXT)
am__objects_271 = lib585-testutil.$(OBJEXT)
am__objects_272 = lib585-testtrace.$(OBJEXT)
am_lib585_OBJECTS = lib585-lib500.$(OBJEXT) $(am__objects_270) \
	$(am__objects_271) $(am__objects_272)
lib585_OBJECTS = $(am_lib585_OBJECTS)
lib585_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_273 = lib586-first.$(OBJEXT)
am_lib586_OBJECTS = lib586-lib586.$(OBJEXT) $(am__objects_273)
lib586_OBJECTS = $(am_lib586_OBJECTS)
lib586_LDADD = $(LDADD)
lib586_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_274 = lib587-first.$(OBJEXT)
am_lib587_OBJECTS = lib587-lib554.$(OBJEXT) $(am__objects_274)
lib587_OBJECTS = $(am_lib587_OBJECTS)
lib587_LDADD = $(LDADD)
lib587_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_275 = lib589-first.$(OBJEXT)
am_lib589_OBJECTS = lib589-lib589.$(OBJEXT) $(am__objects_275)
lib589_OBJECTS = $(am_lib589_OBJECTS)
lib589_LDADD = $(LDADD)
lib589_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_276 = lib590-first.$(OBJEXT)
am_lib590_OBJECTS = lib590-lib590.$(OBJEXT) $(am__objects_276)
lib590_OBJECTS = $(am_lib590_OBJECTS)
lib590_LDADD = $(LDADD)
lib590_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_277 = lib591-first.$(OBJEXT)
am__objects_278 = lib591-testutil.$(OBJEXT)
am__objects_279 = ../../lib/lib591-warnless.$(OBJEXT)
am_lib591_OBJECTS = lib591-lib591.$(OBJEXT) $(am__objects_277) \
	$(am__objects_278) $(am__objects_279)
lib591_OBJECTS = $(am_lib591_OBJECTS)
lib591_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_280 = lib597-first.$(OBJEXT)
am__objects_281 = lib597-testutil.$(OBJEXT)
am__objects_282 = ../../lib/lib597-warnless.$(OBJEXT)
am_lib597_OBJECTS = lib597-lib597.$(OBJEXT) $(am__objects_280) \
	$(am__objects_281) $(am__objects_282)
lib597_OBJECTS = $(am_lib597_OBJECTS)
lib597_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_283 = lib598-first.$(OBJEXT)
am_lib598_OBJECTS = lib598-lib598.$(OBJEXT) $(am__objects_283)
lib598_OBJECTS = $(am_lib598_OBJECTS)
lib598_LDADD = $(LDADD)
lib598_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_284 = lib599-first.$(OBJEXT)
am_lib599_OBJECTS = lib599-lib599.$(OBJEXT) $(am__objects_284)
lib599_OBJECTS = $(am_lib599_OBJECTS)
lib599_LDADD = $(LDADD)
lib599_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_285 = lib643-first.$(OBJEXT)
am_lib643_OBJECTS = lib643-lib643.$(OBJEXT) $(am__objects_285)
lib643_OBJECTS = $(am_lib643_OBJECTS)
lib643_LDADD = $(LDADD)
lib643_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_286 = lib644-first.$(OBJEXT)
am_lib644_OBJECTS = lib644-lib643.$(OBJEXT) $(am__objects_286)
lib644_OBJECTS = $(am_lib644_OBJECTS)
lib644_LDADD = $(LDADD)
lib644_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_287 = lib645-first.$(OBJEXT)
am_lib645_OBJECTS = lib645-lib643.$(OBJEXT) $(am__objects_287)
lib645_OBJECTS = $(am_lib645_OBJECTS)
lib645_LDADD = $(LDADD)
lib645_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_288 = lib650-first.$(OBJEXT)
am_lib650_OBJECTS = lib650-lib650.$(OBJEXT) $(am__objects_288)
lib650_OBJECTS = $(am_lib650_OBJECTS)
lib650_LDADD = $(LDADD)
lib650_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_289 = lib651-first.$(OBJEXT)
am_lib651_OBJECTS = lib651-lib651.$(OBJEXT) $(am__objects_289)
lib651_OBJECTS = $(am_lib651_OBJECTS)
lib651_LDADD = $(LDADD)
lib651_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_290 = lib652-first.$(OBJEXT)
am_lib652_OBJECTS = lib652-lib652.$(OBJEXT) $(am__objects_290)
lib652_OBJECTS = $(am_lib652_OBJECTS)
lib652_LDADD = $(LDADD)
lib652_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_291 = lib653-first.$(OBJEXT)
am_lib653_OBJECTS = lib653-lib653.$(OBJEXT) $(am__objects_291)
lib653_OBJECTS = $(am_lib653_OBJECTS)
lib653_LDADD = $(LDADD)
lib653_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_292 = lib654-first.$(OBJEXT)
am_lib654_OBJECTS = lib654-lib654.$(OBJEXT) $(am__objects_292)
lib654_OBJECTS = $(am_lib654_OBJECTS)
lib654_LDADD = $(LDADD)
lib654_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_293 = lib655-first.$(OBJEXT)
am_lib655_OBJECTS = lib655-lib655.$(OBJEXT) $(am__objects_293)
lib655_OBJECTS = $(am_lib655_OBJECTS)
lib655_LDADD = $(LDADD)
lib655_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_294 = lib658-first.$(OBJEXT)
am__objects_295 = lib658-testutil.$(OBJEXT)
am__objects_296 = ../../lib/lib658-warnless.$(OBJEXT)
am_lib658_OBJECTS = lib658-lib658.$(OBJEXT) $(am__objects_294) \
	$(am__objects_295) $(am__objects_296)
lib658_OBJECTS = $(am_lib658_OBJECTS)
lib658_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_297 = lib659-first.$(OBJEXT)
am__objects_298 = lib659-testutil.$(OBJEXT)
am__objects_299 = ../../lib/lib659-warnless.$(OBJEXT)
am_lib659_OBJECTS = lib659-lib659.$(OBJEXT) $(am__objects_297) \
	$(am__objects_298) $(am__objects_299)
lib659_OBJECTS = $(am_lib659_OBJECTS)
lib659_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_300 = lib661-first.$(OBJEXT)
am_lib661_OBJECTS = lib661-lib661.$(OBJEXT) $(am__objects_300)
lib661_OBJECTS = $(am_lib661_OBJECTS)
lib661_LDADD = $(LDADD)
lib661_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_301 = libauthretry-first.$(OBJEXT)
am_libauthretry_OBJECTS = libauthretry-libauthretry.$(OBJEXT) \
	$(am__objects_301)
libauthretry_OBJECTS = $(am_libauthretry_OBJECTS)
libauthretry_LDADD = $(LDADD)
libauthretry_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_302 = libntlmconnect-first.$(OBJEXT)
am__objects_303 = libntlmconnect-testutil.$(OBJEXT)
am__objects_304 = ../../lib/libntlmconnect-warnless.$(OBJEXT)
am_libntlmconnect_OBJECTS = libntlmconnect-libntlmconnect.$(OBJEXT) \
	$(am__objects_302) $(am__objects_303) $(am__objects_304)
libntlmconnect_OBJECTS = $(am_libntlmconnect_OBJECTS)
libntlmconnect_DEPENDENCIES = $(am__DEPENDENCIES_1)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
1196
1197
1198
1199
1200
1201
1202

1203
1204
1205
1206
1207
1208
1209
	../../lib/$(DEPDIR)/lib1591-warnless.Po \
	../../lib/$(DEPDIR)/lib1592-warnless.Po \
	../../lib/$(DEPDIR)/lib1596-warnless.Po \
	../../lib/$(DEPDIR)/lib1900-warnless.Po \
	../../lib/$(DEPDIR)/lib1905-warnless.Po \
	../../lib/$(DEPDIR)/lib1906-warnless.Po \
	../../lib/$(DEPDIR)/lib1907-warnless.Po \

	../../lib/$(DEPDIR)/lib2033-warnless.Po \
	../../lib/$(DEPDIR)/lib502-warnless.Po \
	../../lib/$(DEPDIR)/lib503-warnless.Po \
	../../lib/$(DEPDIR)/lib504-warnless.Po \
	../../lib/$(DEPDIR)/lib507-warnless.Po \
	../../lib/$(DEPDIR)/lib518-warnless.Po \
	../../lib/$(DEPDIR)/lib525-warnless.Po \







>







1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
	../../lib/$(DEPDIR)/lib1591-warnless.Po \
	../../lib/$(DEPDIR)/lib1592-warnless.Po \
	../../lib/$(DEPDIR)/lib1596-warnless.Po \
	../../lib/$(DEPDIR)/lib1900-warnless.Po \
	../../lib/$(DEPDIR)/lib1905-warnless.Po \
	../../lib/$(DEPDIR)/lib1906-warnless.Po \
	../../lib/$(DEPDIR)/lib1907-warnless.Po \
	../../lib/$(DEPDIR)/lib1908-warnless.Po \
	../../lib/$(DEPDIR)/lib2033-warnless.Po \
	../../lib/$(DEPDIR)/lib502-warnless.Po \
	../../lib/$(DEPDIR)/lib503-warnless.Po \
	../../lib/$(DEPDIR)/lib504-warnless.Po \
	../../lib/$(DEPDIR)/lib507-warnless.Po \
	../../lib/$(DEPDIR)/lib518-warnless.Po \
	../../lib/$(DEPDIR)/lib525-warnless.Po \
1310
1311
1312
1313
1314
1315
1316
1317

1318
1319
1320
1321
1322
1323
1324
	./$(DEPDIR)/lib1596-lib1594.Po ./$(DEPDIR)/lib1596-testutil.Po \
	./$(DEPDIR)/lib1900-first.Po ./$(DEPDIR)/lib1900-lib1900.Po \
	./$(DEPDIR)/lib1900-testutil.Po ./$(DEPDIR)/lib1905-first.Po \
	./$(DEPDIR)/lib1905-lib1905.Po ./$(DEPDIR)/lib1905-testutil.Po \
	./$(DEPDIR)/lib1906-first.Po ./$(DEPDIR)/lib1906-lib1906.Po \
	./$(DEPDIR)/lib1906-testutil.Po ./$(DEPDIR)/lib1907-first.Po \
	./$(DEPDIR)/lib1907-lib1907.Po ./$(DEPDIR)/lib1907-testutil.Po \
	./$(DEPDIR)/lib2033-first.Po \

	./$(DEPDIR)/lib2033-libntlmconnect.Po \
	./$(DEPDIR)/lib2033-testutil.Po ./$(DEPDIR)/lib500-first.Po \
	./$(DEPDIR)/lib500-lib500.Po ./$(DEPDIR)/lib500-testtrace.Po \
	./$(DEPDIR)/lib500-testutil.Po ./$(DEPDIR)/lib501-first.Po \
	./$(DEPDIR)/lib501-lib501.Po ./$(DEPDIR)/lib502-first.Po \
	./$(DEPDIR)/lib502-lib502.Po ./$(DEPDIR)/lib502-testutil.Po \
	./$(DEPDIR)/lib503-first.Po ./$(DEPDIR)/lib503-lib503.Po \







|
>







1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
	./$(DEPDIR)/lib1596-lib1594.Po ./$(DEPDIR)/lib1596-testutil.Po \
	./$(DEPDIR)/lib1900-first.Po ./$(DEPDIR)/lib1900-lib1900.Po \
	./$(DEPDIR)/lib1900-testutil.Po ./$(DEPDIR)/lib1905-first.Po \
	./$(DEPDIR)/lib1905-lib1905.Po ./$(DEPDIR)/lib1905-testutil.Po \
	./$(DEPDIR)/lib1906-first.Po ./$(DEPDIR)/lib1906-lib1906.Po \
	./$(DEPDIR)/lib1906-testutil.Po ./$(DEPDIR)/lib1907-first.Po \
	./$(DEPDIR)/lib1907-lib1907.Po ./$(DEPDIR)/lib1907-testutil.Po \
	./$(DEPDIR)/lib1908-first.Po ./$(DEPDIR)/lib1908-lib1908.Po \
	./$(DEPDIR)/lib1908-testutil.Po ./$(DEPDIR)/lib2033-first.Po \
	./$(DEPDIR)/lib2033-libntlmconnect.Po \
	./$(DEPDIR)/lib2033-testutil.Po ./$(DEPDIR)/lib500-first.Po \
	./$(DEPDIR)/lib500-lib500.Po ./$(DEPDIR)/lib500-testtrace.Po \
	./$(DEPDIR)/lib500-testutil.Po ./$(DEPDIR)/lib501-first.Po \
	./$(DEPDIR)/lib501-lib501.Po ./$(DEPDIR)/lib502-first.Po \
	./$(DEPDIR)/lib502-lib502.Po ./$(DEPDIR)/lib502-testutil.Po \
	./$(DEPDIR)/lib503-first.Po ./$(DEPDIR)/lib503-lib503.Po \
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
	$(lib1551_SOURCES) $(lib1552_SOURCES) $(lib1553_SOURCES) \
	$(lib1554_SOURCES) $(lib1555_SOURCES) $(lib1556_SOURCES) \
	$(lib1557_SOURCES) $(lib1558_SOURCES) $(lib1559_SOURCES) \
	$(lib1560_SOURCES) $(lib1564_SOURCES) $(lib1565_SOURCES) \
	$(lib1591_SOURCES) $(lib1592_SOURCES) $(lib1593_SOURCES) \
	$(lib1594_SOURCES) $(lib1596_SOURCES) $(lib1900_SOURCES) \
	$(lib1905_SOURCES) $(lib1906_SOURCES) $(lib1907_SOURCES) \
	$(lib2033_SOURCES) $(lib500_SOURCES) $(lib501_SOURCES) \
	$(lib502_SOURCES) $(lib503_SOURCES) $(lib504_SOURCES) \
	$(lib505_SOURCES) $(lib506_SOURCES) $(lib507_SOURCES) \
	$(lib508_SOURCES) $(lib509_SOURCES) $(lib510_SOURCES) \
	$(lib511_SOURCES) $(lib512_SOURCES) $(lib513_SOURCES) \
	$(lib514_SOURCES) $(lib515_SOURCES) $(lib516_SOURCES) \
	$(lib517_SOURCES) $(lib518_SOURCES) $(lib519_SOURCES) \
	$(lib520_SOURCES) $(lib521_SOURCES) $(lib523_SOURCES) \
	$(lib524_SOURCES) $(lib525_SOURCES) $(lib526_SOURCES) \
	$(lib527_SOURCES) $(lib529_SOURCES) $(lib530_SOURCES) \
	$(lib532_SOURCES) $(lib533_SOURCES) $(lib537_SOURCES) \
	$(lib539_SOURCES) $(lib540_SOURCES) $(lib541_SOURCES) \
	$(lib542_SOURCES) $(lib543_SOURCES) $(lib544_SOURCES) \
	$(lib545_SOURCES) $(lib547_SOURCES) $(lib548_SOURCES) \
	$(lib549_SOURCES) $(lib552_SOURCES) $(lib553_SOURCES) \
	$(lib554_SOURCES) $(lib555_SOURCES) $(lib556_SOURCES) \
	$(lib557_SOURCES) $(lib558_SOURCES) $(lib559_SOURCES) \
	$(lib560_SOURCES) $(lib562_SOURCES) $(lib564_SOURCES) \
	$(lib565_SOURCES) $(lib566_SOURCES) $(lib567_SOURCES) \
	$(lib568_SOURCES) $(lib569_SOURCES) $(lib570_SOURCES) \
	$(lib571_SOURCES) $(lib572_SOURCES) $(lib573_SOURCES) \
	$(lib574_SOURCES) $(lib575_SOURCES) $(lib576_SOURCES) \
	$(lib578_SOURCES) $(lib579_SOURCES) $(lib582_SOURCES) \
	$(lib583_SOURCES) $(lib585_SOURCES) $(lib586_SOURCES) \
	$(lib587_SOURCES) $(lib589_SOURCES) $(lib590_SOURCES) \
	$(lib591_SOURCES) $(lib597_SOURCES) $(lib598_SOURCES) \
	$(lib599_SOURCES) $(lib643_SOURCES) $(lib644_SOURCES) \
	$(lib645_SOURCES) $(lib650_SOURCES) $(lib651_SOURCES) \
	$(lib652_SOURCES) $(lib653_SOURCES) $(lib654_SOURCES) \
	$(lib655_SOURCES) $(lib658_SOURCES) $(lib659_SOURCES) \
	$(lib661_SOURCES) $(libauthretry_SOURCES) \
	$(libntlmconnect_SOURCES)
DIST_SOURCES = $(libhostname_la_SOURCES) \
	$(am__libstubgss_la_SOURCES_DIST) $(chkdecimalpoint_SOURCES) \
	$(chkhostname_SOURCES) $(lib1156_SOURCES) $(lib1500_SOURCES) \
	$(lib1501_SOURCES) $(lib1502_SOURCES) $(lib1503_SOURCES) \
	$(lib1504_SOURCES) $(lib1505_SOURCES) $(lib1506_SOURCES) \
	$(lib1507_SOURCES) $(lib1508_SOURCES) $(lib1509_SOURCES) \
	$(lib1510_SOURCES) $(lib1511_SOURCES) $(lib1512_SOURCES) \
	$(lib1513_SOURCES) $(lib1514_SOURCES) $(lib1515_SOURCES) \
	$(lib1517_SOURCES) $(lib1518_SOURCES) $(lib1520_SOURCES) \
	$(lib1522_SOURCES) $(lib1523_SOURCES) $(lib1525_SOURCES) \
	$(lib1526_SOURCES) $(lib1527_SOURCES) $(lib1528_SOURCES) \
	$(lib1529_SOURCES) $(lib1530_SOURCES) $(lib1531_SOURCES) \
	$(lib1532_SOURCES) $(lib1533_SOURCES) $(lib1534_SOURCES) \
	$(lib1535_SOURCES) $(lib1536_SOURCES) $(lib1537_SOURCES) \
	$(lib1538_SOURCES) $(lib1540_SOURCES) $(lib1541_SOURCES) \
	$(lib1550_SOURCES) $(lib1551_SOURCES) $(lib1552_SOURCES) \
	$(lib1553_SOURCES) $(lib1554_SOURCES) $(lib1555_SOURCES) \
	$(lib1556_SOURCES) $(lib1557_SOURCES) $(lib1558_SOURCES) \
	$(lib1559_SOURCES) $(lib1560_SOURCES) $(lib1564_SOURCES) \
	$(lib1565_SOURCES) $(lib1591_SOURCES) $(lib1592_SOURCES) \
	$(lib1593_SOURCES) $(lib1594_SOURCES) $(lib1596_SOURCES) \
	$(lib1900_SOURCES) $(lib1905_SOURCES) $(lib1906_SOURCES) \
	$(lib1907_SOURCES) $(lib2033_SOURCES) $(lib500_SOURCES) \
	$(lib501_SOURCES) $(lib502_SOURCES) $(lib503_SOURCES) \
	$(lib504_SOURCES) $(lib505_SOURCES) $(lib506_SOURCES) \
	$(lib507_SOURCES) $(lib508_SOURCES) $(lib509_SOURCES) \
	$(lib510_SOURCES) $(lib511_SOURCES) $(lib512_SOURCES) \
	$(lib513_SOURCES) $(lib514_SOURCES) $(lib515_SOURCES) \
	$(lib516_SOURCES) $(lib517_SOURCES) $(lib518_SOURCES) \
	$(lib519_SOURCES) $(lib520_SOURCES) $(lib521_SOURCES) \







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|







1475
1476
1477
1478
1479
1480
1481






















































1482
1483
1484
1485
1486
1487
1488
1489
	$(lib1551_SOURCES) $(lib1552_SOURCES) $(lib1553_SOURCES) \
	$(lib1554_SOURCES) $(lib1555_SOURCES) $(lib1556_SOURCES) \
	$(lib1557_SOURCES) $(lib1558_SOURCES) $(lib1559_SOURCES) \
	$(lib1560_SOURCES) $(lib1564_SOURCES) $(lib1565_SOURCES) \
	$(lib1591_SOURCES) $(lib1592_SOURCES) $(lib1593_SOURCES) \
	$(lib1594_SOURCES) $(lib1596_SOURCES) $(lib1900_SOURCES) \
	$(lib1905_SOURCES) $(lib1906_SOURCES) $(lib1907_SOURCES) \






















































	$(lib1908_SOURCES) $(lib2033_SOURCES) $(lib500_SOURCES) \
	$(lib501_SOURCES) $(lib502_SOURCES) $(lib503_SOURCES) \
	$(lib504_SOURCES) $(lib505_SOURCES) $(lib506_SOURCES) \
	$(lib507_SOURCES) $(lib508_SOURCES) $(lib509_SOURCES) \
	$(lib510_SOURCES) $(lib511_SOURCES) $(lib512_SOURCES) \
	$(lib513_SOURCES) $(lib514_SOURCES) $(lib515_SOURCES) \
	$(lib516_SOURCES) $(lib517_SOURCES) $(lib518_SOURCES) \
	$(lib519_SOURCES) $(lib520_SOURCES) $(lib521_SOURCES) \
1552
1553
1554
1555
1556
1557
1558






















































1559
1560
1561
1562
1563
1564
1565
	$(lib590_SOURCES) $(lib591_SOURCES) $(lib597_SOURCES) \
	$(lib598_SOURCES) $(lib599_SOURCES) $(lib643_SOURCES) \
	$(lib644_SOURCES) $(lib645_SOURCES) $(lib650_SOURCES) \
	$(lib651_SOURCES) $(lib652_SOURCES) $(lib653_SOURCES) \
	$(lib654_SOURCES) $(lib655_SOURCES) $(lib658_SOURCES) \
	$(lib659_SOURCES) $(lib661_SOURCES) $(libauthretry_SOURCES) \
	$(libntlmconnect_SOURCES)






















































am__can_run_installinfo = \
  case $$AM_UPDATE_INFO_DIR in \
    n|no|NO) false;; \
    *) (install-info --version) >/dev/null 2>&1;; \
  esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
	$(lib590_SOURCES) $(lib591_SOURCES) $(lib597_SOURCES) \
	$(lib598_SOURCES) $(lib599_SOURCES) $(lib643_SOURCES) \
	$(lib644_SOURCES) $(lib645_SOURCES) $(lib650_SOURCES) \
	$(lib651_SOURCES) $(lib652_SOURCES) $(lib653_SOURCES) \
	$(lib654_SOURCES) $(lib655_SOURCES) $(lib658_SOURCES) \
	$(lib659_SOURCES) $(lib661_SOURCES) $(libauthretry_SOURCES) \
	$(libntlmconnect_SOURCES)
DIST_SOURCES = $(libhostname_la_SOURCES) \
	$(am__libstubgss_la_SOURCES_DIST) $(chkdecimalpoint_SOURCES) \
	$(chkhostname_SOURCES) $(lib1156_SOURCES) $(lib1500_SOURCES) \
	$(lib1501_SOURCES) $(lib1502_SOURCES) $(lib1503_SOURCES) \
	$(lib1504_SOURCES) $(lib1505_SOURCES) $(lib1506_SOURCES) \
	$(lib1507_SOURCES) $(lib1508_SOURCES) $(lib1509_SOURCES) \
	$(lib1510_SOURCES) $(lib1511_SOURCES) $(lib1512_SOURCES) \
	$(lib1513_SOURCES) $(lib1514_SOURCES) $(lib1515_SOURCES) \
	$(lib1517_SOURCES) $(lib1518_SOURCES) $(lib1520_SOURCES) \
	$(lib1522_SOURCES) $(lib1523_SOURCES) $(lib1525_SOURCES) \
	$(lib1526_SOURCES) $(lib1527_SOURCES) $(lib1528_SOURCES) \
	$(lib1529_SOURCES) $(lib1530_SOURCES) $(lib1531_SOURCES) \
	$(lib1532_SOURCES) $(lib1533_SOURCES) $(lib1534_SOURCES) \
	$(lib1535_SOURCES) $(lib1536_SOURCES) $(lib1537_SOURCES) \
	$(lib1538_SOURCES) $(lib1540_SOURCES) $(lib1541_SOURCES) \
	$(lib1550_SOURCES) $(lib1551_SOURCES) $(lib1552_SOURCES) \
	$(lib1553_SOURCES) $(lib1554_SOURCES) $(lib1555_SOURCES) \
	$(lib1556_SOURCES) $(lib1557_SOURCES) $(lib1558_SOURCES) \
	$(lib1559_SOURCES) $(lib1560_SOURCES) $(lib1564_SOURCES) \
	$(lib1565_SOURCES) $(lib1591_SOURCES) $(lib1592_SOURCES) \
	$(lib1593_SOURCES) $(lib1594_SOURCES) $(lib1596_SOURCES) \
	$(lib1900_SOURCES) $(lib1905_SOURCES) $(lib1906_SOURCES) \
	$(lib1907_SOURCES) $(lib1908_SOURCES) $(lib2033_SOURCES) \
	$(lib500_SOURCES) $(lib501_SOURCES) $(lib502_SOURCES) \
	$(lib503_SOURCES) $(lib504_SOURCES) $(lib505_SOURCES) \
	$(lib506_SOURCES) $(lib507_SOURCES) $(lib508_SOURCES) \
	$(lib509_SOURCES) $(lib510_SOURCES) $(lib511_SOURCES) \
	$(lib512_SOURCES) $(lib513_SOURCES) $(lib514_SOURCES) \
	$(lib515_SOURCES) $(lib516_SOURCES) $(lib517_SOURCES) \
	$(lib518_SOURCES) $(lib519_SOURCES) $(lib520_SOURCES) \
	$(lib521_SOURCES) $(lib523_SOURCES) $(lib524_SOURCES) \
	$(lib525_SOURCES) $(lib526_SOURCES) $(lib527_SOURCES) \
	$(lib529_SOURCES) $(lib530_SOURCES) $(lib532_SOURCES) \
	$(lib533_SOURCES) $(lib537_SOURCES) $(lib539_SOURCES) \
	$(lib540_SOURCES) $(lib541_SOURCES) $(lib542_SOURCES) \
	$(lib543_SOURCES) $(lib544_SOURCES) $(lib545_SOURCES) \
	$(lib547_SOURCES) $(lib548_SOURCES) $(lib549_SOURCES) \
	$(lib552_SOURCES) $(lib553_SOURCES) $(lib554_SOURCES) \
	$(lib555_SOURCES) $(lib556_SOURCES) $(lib557_SOURCES) \
	$(lib558_SOURCES) $(lib559_SOURCES) $(lib560_SOURCES) \
	$(lib562_SOURCES) $(lib564_SOURCES) $(lib565_SOURCES) \
	$(lib566_SOURCES) $(lib567_SOURCES) $(lib568_SOURCES) \
	$(lib569_SOURCES) $(lib570_SOURCES) $(lib571_SOURCES) \
	$(lib572_SOURCES) $(lib573_SOURCES) $(lib574_SOURCES) \
	$(lib575_SOURCES) $(lib576_SOURCES) $(lib578_SOURCES) \
	$(lib579_SOURCES) $(lib582_SOURCES) $(lib583_SOURCES) \
	$(lib585_SOURCES) $(lib586_SOURCES) $(lib587_SOURCES) \
	$(lib589_SOURCES) $(lib590_SOURCES) $(lib591_SOURCES) \
	$(lib597_SOURCES) $(lib598_SOURCES) $(lib599_SOURCES) \
	$(lib643_SOURCES) $(lib644_SOURCES) $(lib645_SOURCES) \
	$(lib650_SOURCES) $(lib651_SOURCES) $(lib652_SOURCES) \
	$(lib653_SOURCES) $(lib654_SOURCES) $(lib655_SOURCES) \
	$(lib658_SOURCES) $(lib659_SOURCES) $(lib661_SOURCES) \
	$(libauthretry_SOURCES) $(libntlmconnect_SOURCES)
am__can_run_installinfo = \
  case $$AM_UPDATE_INFO_DIR in \
    n|no|NO) false;; \
    *) (install-info --version) >/dev/null 2>&1;; \
  esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
1725
1726
1727
1728
1729
1730
1731

1732
1733
1734
1735
1736
1737
1738
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@

USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@







>







1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
USE_WOLFSSH = @USE_WOLFSSH@
USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
2239
2240
2241
2242
2243
2244
2245



2246
2247
2248
2249
2250
2251
2252
lib1905_CPPFLAGS = $(AM_CPPFLAGS)
lib1906_SOURCES = lib1906.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1906_LDADD = $(TESTUTIL_LIBS)
lib1906_CPPFLAGS = $(AM_CPPFLAGS)
lib1907_SOURCES = lib1907.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1907_LDADD = $(TESTUTIL_LIBS)
lib1907_CPPFLAGS = $(AM_CPPFLAGS)



lib2033_SOURCES = libntlmconnect.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib2033_LDADD = $(TESTUTIL_LIBS)
lib2033_CPPFLAGS = $(AM_CPPFLAGS) -DUSE_PIPELINING
@BUILD_LIBHOSTNAME_FALSE@noinst_LTLIBRARIES = $(am__append_6)

# Makefile.inc provides the source defines (TESTUTIL, SUPPORTFILES,
# noinst_PROGRAMS, lib*_SOURCES, and lib*_CFLAGS)







>
>
>







2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
lib1905_CPPFLAGS = $(AM_CPPFLAGS)
lib1906_SOURCES = lib1906.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1906_LDADD = $(TESTUTIL_LIBS)
lib1906_CPPFLAGS = $(AM_CPPFLAGS)
lib1907_SOURCES = lib1907.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1907_LDADD = $(TESTUTIL_LIBS)
lib1907_CPPFLAGS = $(AM_CPPFLAGS)
lib1908_SOURCES = lib1908.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1908_LDADD = $(TESTUTIL_LIBS)
lib1908_CPPFLAGS = $(AM_CPPFLAGS)
lib2033_SOURCES = libntlmconnect.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib2033_LDADD = $(TESTUTIL_LIBS)
lib2033_CPPFLAGS = $(AM_CPPFLAGS) -DUSE_PIPELINING
@BUILD_LIBHOSTNAME_FALSE@noinst_LTLIBRARIES = $(am__append_6)

# Makefile.inc provides the source defines (TESTUTIL, SUPPORTFILES,
# noinst_PROGRAMS, lib*_SOURCES, and lib*_CFLAGS)
2687
2688
2689
2690
2691
2692
2693






2694
2695
2696
2697
2698
2699
2700
	$(AM_V_CCLD)$(LINK) $(lib1906_OBJECTS) $(lib1906_LDADD) $(LIBS)
../../lib/lib1907-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)

lib1907$(EXEEXT): $(lib1907_OBJECTS) $(lib1907_DEPENDENCIES) $(EXTRA_lib1907_DEPENDENCIES) 
	@rm -f lib1907$(EXEEXT)
	$(AM_V_CCLD)$(LINK) $(lib1907_OBJECTS) $(lib1907_LDADD) $(LIBS)






../../lib/lib2033-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)

lib2033$(EXEEXT): $(lib2033_OBJECTS) $(lib2033_DEPENDENCIES) $(EXTRA_lib2033_DEPENDENCIES) 
	@rm -f lib2033$(EXEEXT)
	$(AM_V_CCLD)$(LINK) $(lib2033_OBJECTS) $(lib2033_LDADD) $(LIBS)








>
>
>
>
>
>







2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
	$(AM_V_CCLD)$(LINK) $(lib1906_OBJECTS) $(lib1906_LDADD) $(LIBS)
../../lib/lib1907-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)

lib1907$(EXEEXT): $(lib1907_OBJECTS) $(lib1907_DEPENDENCIES) $(EXTRA_lib1907_DEPENDENCIES) 
	@rm -f lib1907$(EXEEXT)
	$(AM_V_CCLD)$(LINK) $(lib1907_OBJECTS) $(lib1907_LDADD) $(LIBS)
../../lib/lib1908-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)

lib1908$(EXEEXT): $(lib1908_OBJECTS) $(lib1908_DEPENDENCIES) $(EXTRA_lib1908_DEPENDENCIES) 
	@rm -f lib1908$(EXEEXT)
	$(AM_V_CCLD)$(LINK) $(lib1908_OBJECTS) $(lib1908_LDADD) $(LIBS)
../../lib/lib2033-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)

lib2033$(EXEEXT): $(lib2033_OBJECTS) $(lib2033_DEPENDENCIES) $(EXTRA_lib2033_DEPENDENCIES) 
	@rm -f lib2033$(EXEEXT)
	$(AM_V_CCLD)$(LINK) $(lib2033_OBJECTS) $(lib2033_LDADD) $(LIBS)

3172
3173
3174
3175
3176
3177
3178

3179
3180
3181
3182
3183
3184
3185
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1591-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1592-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1596-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1900-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1905-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1906-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1907-warnless.Po@am__quote@ # am--include-marker

@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib2033-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib502-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib503-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib504-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib507-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib518-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib525-warnless.Po@am__quote@ # am--include-marker







>







3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1591-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1592-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1596-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1900-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1905-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1906-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1907-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1908-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib2033-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib502-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib503-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib504-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib507-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib518-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib525-warnless.Po@am__quote@ # am--include-marker
3369
3370
3371
3372
3373
3374
3375



3376
3377
3378
3379
3380
3381
3382
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1905-testutil.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1906-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1906-lib1906.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1906-testutil.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1907-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1907-lib1907.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1907-testutil.Po@am__quote@ # am--include-marker



@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib2033-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib2033-libntlmconnect.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib2033-testutil.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib500-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib500-lib500.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib500-testtrace.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib500-testutil.Po@am__quote@ # am--include-marker







>
>
>







3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1905-testutil.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1906-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1906-lib1906.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1906-testutil.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1907-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1907-lib1907.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1907-testutil.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1908-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1908-lib1908.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1908-testutil.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib2033-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib2033-libntlmconnect.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib2033-testutil.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib500-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib500-lib500.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib500-testtrace.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib500-testutil.Po@am__quote@ # am--include-marker
6544
6545
6546
6547
6548
6549
6550
























































6551
6552
6553
6554
6555
6556
6557
../../lib/lib1907-warnless.obj: ../../lib/warnless.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1907-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1907-warnless.Tpo -c -o ../../lib/lib1907-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1907-warnless.Tpo ../../lib/$(DEPDIR)/lib1907-warnless.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1907-warnless.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1907-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`

























































lib2033-libntlmconnect.o: libntlmconnect.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib2033_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib2033-libntlmconnect.o -MD -MP -MF $(DEPDIR)/lib2033-libntlmconnect.Tpo -c -o lib2033-libntlmconnect.o `test -f 'libntlmconnect.c' || echo '$(srcdir)/'`libntlmconnect.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib2033-libntlmconnect.Tpo $(DEPDIR)/lib2033-libntlmconnect.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='libntlmconnect.c' object='lib2033-libntlmconnect.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib2033_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib2033-libntlmconnect.o `test -f 'libntlmconnect.c' || echo '$(srcdir)/'`libntlmconnect.c








>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
../../lib/lib1907-warnless.obj: ../../lib/warnless.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1907-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1907-warnless.Tpo -c -o ../../lib/lib1907-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1907-warnless.Tpo ../../lib/$(DEPDIR)/lib1907-warnless.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1907-warnless.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1907-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`

lib1908-lib1908.o: lib1908.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1908-lib1908.o -MD -MP -MF $(DEPDIR)/lib1908-lib1908.Tpo -c -o lib1908-lib1908.o `test -f 'lib1908.c' || echo '$(srcdir)/'`lib1908.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib1908-lib1908.Tpo $(DEPDIR)/lib1908-lib1908.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib1908.c' object='lib1908-lib1908.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1908-lib1908.o `test -f 'lib1908.c' || echo '$(srcdir)/'`lib1908.c

lib1908-lib1908.obj: lib1908.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1908-lib1908.obj -MD -MP -MF $(DEPDIR)/lib1908-lib1908.Tpo -c -o lib1908-lib1908.obj `if test -f 'lib1908.c'; then $(CYGPATH_W) 'lib1908.c'; else $(CYGPATH_W) '$(srcdir)/lib1908.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib1908-lib1908.Tpo $(DEPDIR)/lib1908-lib1908.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib1908.c' object='lib1908-lib1908.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1908-lib1908.obj `if test -f 'lib1908.c'; then $(CYGPATH_W) 'lib1908.c'; else $(CYGPATH_W) '$(srcdir)/lib1908.c'; fi`

lib1908-first.o: first.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1908-first.o -MD -MP -MF $(DEPDIR)/lib1908-first.Tpo -c -o lib1908-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib1908-first.Tpo $(DEPDIR)/lib1908-first.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='first.c' object='lib1908-first.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1908-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c

lib1908-first.obj: first.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1908-first.obj -MD -MP -MF $(DEPDIR)/lib1908-first.Tpo -c -o lib1908-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib1908-first.Tpo $(DEPDIR)/lib1908-first.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='first.c' object='lib1908-first.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1908-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`

lib1908-testutil.o: testutil.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1908-testutil.o -MD -MP -MF $(DEPDIR)/lib1908-testutil.Tpo -c -o lib1908-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib1908-testutil.Tpo $(DEPDIR)/lib1908-testutil.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testutil.c' object='lib1908-testutil.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1908-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c

lib1908-testutil.obj: testutil.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1908-testutil.obj -MD -MP -MF $(DEPDIR)/lib1908-testutil.Tpo -c -o lib1908-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib1908-testutil.Tpo $(DEPDIR)/lib1908-testutil.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testutil.c' object='lib1908-testutil.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1908-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`

../../lib/lib1908-warnless.o: ../../lib/warnless.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1908-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1908-warnless.Tpo -c -o ../../lib/lib1908-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1908-warnless.Tpo ../../lib/$(DEPDIR)/lib1908-warnless.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1908-warnless.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1908-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c

../../lib/lib1908-warnless.obj: ../../lib/warnless.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1908-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1908-warnless.Tpo -c -o ../../lib/lib1908-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1908-warnless.Tpo ../../lib/$(DEPDIR)/lib1908-warnless.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1908-warnless.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1908-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`

lib2033-libntlmconnect.o: libntlmconnect.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib2033_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib2033-libntlmconnect.o -MD -MP -MF $(DEPDIR)/lib2033-libntlmconnect.Tpo -c -o lib2033-libntlmconnect.o `test -f 'libntlmconnect.c' || echo '$(srcdir)/'`libntlmconnect.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib2033-libntlmconnect.Tpo $(DEPDIR)/lib2033-libntlmconnect.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='libntlmconnect.c' object='lib2033-libntlmconnect.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib2033_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib2033-libntlmconnect.o `test -f 'libntlmconnect.c' || echo '$(srcdir)/'`libntlmconnect.c

10142
10143
10144
10145
10146
10147
10148

10149
10150
10151
10152
10153
10154
10155
	-rm -f ../../lib/$(DEPDIR)/lib1591-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1592-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1596-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1900-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1905-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1906-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1907-warnless.Po

	-rm -f ../../lib/$(DEPDIR)/lib2033-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib502-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib503-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib504-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib507-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib518-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib525-warnless.Po







>







10221
10222
10223
10224
10225
10226
10227
10228
10229
10230
10231
10232
10233
10234
10235
	-rm -f ../../lib/$(DEPDIR)/lib1591-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1592-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1596-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1900-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1905-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1906-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1907-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1908-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib2033-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib502-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib503-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib504-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib507-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib518-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib525-warnless.Po
10339
10340
10341
10342
10343
10344
10345



10346
10347
10348
10349
10350
10351
10352
	-rm -f ./$(DEPDIR)/lib1905-testutil.Po
	-rm -f ./$(DEPDIR)/lib1906-first.Po
	-rm -f ./$(DEPDIR)/lib1906-lib1906.Po
	-rm -f ./$(DEPDIR)/lib1906-testutil.Po
	-rm -f ./$(DEPDIR)/lib1907-first.Po
	-rm -f ./$(DEPDIR)/lib1907-lib1907.Po
	-rm -f ./$(DEPDIR)/lib1907-testutil.Po



	-rm -f ./$(DEPDIR)/lib2033-first.Po
	-rm -f ./$(DEPDIR)/lib2033-libntlmconnect.Po
	-rm -f ./$(DEPDIR)/lib2033-testutil.Po
	-rm -f ./$(DEPDIR)/lib500-first.Po
	-rm -f ./$(DEPDIR)/lib500-lib500.Po
	-rm -f ./$(DEPDIR)/lib500-testtrace.Po
	-rm -f ./$(DEPDIR)/lib500-testutil.Po







>
>
>







10419
10420
10421
10422
10423
10424
10425
10426
10427
10428
10429
10430
10431
10432
10433
10434
10435
	-rm -f ./$(DEPDIR)/lib1905-testutil.Po
	-rm -f ./$(DEPDIR)/lib1906-first.Po
	-rm -f ./$(DEPDIR)/lib1906-lib1906.Po
	-rm -f ./$(DEPDIR)/lib1906-testutil.Po
	-rm -f ./$(DEPDIR)/lib1907-first.Po
	-rm -f ./$(DEPDIR)/lib1907-lib1907.Po
	-rm -f ./$(DEPDIR)/lib1907-testutil.Po
	-rm -f ./$(DEPDIR)/lib1908-first.Po
	-rm -f ./$(DEPDIR)/lib1908-lib1908.Po
	-rm -f ./$(DEPDIR)/lib1908-testutil.Po
	-rm -f ./$(DEPDIR)/lib2033-first.Po
	-rm -f ./$(DEPDIR)/lib2033-libntlmconnect.Po
	-rm -f ./$(DEPDIR)/lib2033-testutil.Po
	-rm -f ./$(DEPDIR)/lib500-first.Po
	-rm -f ./$(DEPDIR)/lib500-lib500.Po
	-rm -f ./$(DEPDIR)/lib500-testtrace.Po
	-rm -f ./$(DEPDIR)/lib500-testutil.Po
10649
10650
10651
10652
10653
10654
10655

10656
10657
10658
10659
10660
10661
10662
	-rm -f ../../lib/$(DEPDIR)/lib1591-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1592-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1596-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1900-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1905-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1906-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1907-warnless.Po

	-rm -f ../../lib/$(DEPDIR)/lib2033-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib502-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib503-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib504-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib507-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib518-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib525-warnless.Po







>







10732
10733
10734
10735
10736
10737
10738
10739
10740
10741
10742
10743
10744
10745
10746
	-rm -f ../../lib/$(DEPDIR)/lib1591-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1592-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1596-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1900-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1905-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1906-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1907-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1908-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib2033-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib502-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib503-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib504-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib507-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib518-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib525-warnless.Po
10846
10847
10848
10849
10850
10851
10852



10853
10854
10855
10856
10857
10858
10859
	-rm -f ./$(DEPDIR)/lib1905-testutil.Po
	-rm -f ./$(DEPDIR)/lib1906-first.Po
	-rm -f ./$(DEPDIR)/lib1906-lib1906.Po
	-rm -f ./$(DEPDIR)/lib1906-testutil.Po
	-rm -f ./$(DEPDIR)/lib1907-first.Po
	-rm -f ./$(DEPDIR)/lib1907-lib1907.Po
	-rm -f ./$(DEPDIR)/lib1907-testutil.Po



	-rm -f ./$(DEPDIR)/lib2033-first.Po
	-rm -f ./$(DEPDIR)/lib2033-libntlmconnect.Po
	-rm -f ./$(DEPDIR)/lib2033-testutil.Po
	-rm -f ./$(DEPDIR)/lib500-first.Po
	-rm -f ./$(DEPDIR)/lib500-lib500.Po
	-rm -f ./$(DEPDIR)/lib500-testtrace.Po
	-rm -f ./$(DEPDIR)/lib500-testutil.Po







>
>
>







10930
10931
10932
10933
10934
10935
10936
10937
10938
10939
10940
10941
10942
10943
10944
10945
10946
	-rm -f ./$(DEPDIR)/lib1905-testutil.Po
	-rm -f ./$(DEPDIR)/lib1906-first.Po
	-rm -f ./$(DEPDIR)/lib1906-lib1906.Po
	-rm -f ./$(DEPDIR)/lib1906-testutil.Po
	-rm -f ./$(DEPDIR)/lib1907-first.Po
	-rm -f ./$(DEPDIR)/lib1907-lib1907.Po
	-rm -f ./$(DEPDIR)/lib1907-testutil.Po
	-rm -f ./$(DEPDIR)/lib1908-first.Po
	-rm -f ./$(DEPDIR)/lib1908-lib1908.Po
	-rm -f ./$(DEPDIR)/lib1908-testutil.Po
	-rm -f ./$(DEPDIR)/lib2033-first.Po
	-rm -f ./$(DEPDIR)/lib2033-libntlmconnect.Po
	-rm -f ./$(DEPDIR)/lib2033-testutil.Po
	-rm -f ./$(DEPDIR)/lib500-first.Po
	-rm -f ./$(DEPDIR)/lib500-lib500.Po
	-rm -f ./$(DEPDIR)/lib500-testtrace.Po
	-rm -f ./$(DEPDIR)/lib500-testutil.Po
Changes to jni/curl/tests/libtest/Makefile.inc.
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 lib1518         lib1520 lib1521 lib1522 lib1523 \
 lib1525 lib1526 lib1527 lib1528 lib1529 lib1530 lib1531 lib1532 lib1533 \
 lib1534 lib1535 lib1536 lib1537 lib1538 \
 lib1540 lib1541 \
 lib1550 lib1551 lib1552 lib1553 lib1554 lib1555 lib1556 lib1557 \
 lib1558 lib1559 lib1560 lib1564 lib1565 \
 lib1591 lib1592 lib1593 lib1594 lib1596 \
 lib1900 lib1905 lib1906 lib1907 \
 lib2033

chkdecimalpoint_SOURCES = chkdecimalpoint.c ../../lib/mprintf.c \
 ../../lib/curl_ctype.c
chkdecimalpoint_LDADD =
chkdecimalpoint_CPPFLAGS = $(AM_CPPFLAGS) -DCURL_STATICLIB \
 -DCURLX_NO_MEMORY_CALLBACKS







|







29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 lib1518         lib1520 lib1521 lib1522 lib1523 \
 lib1525 lib1526 lib1527 lib1528 lib1529 lib1530 lib1531 lib1532 lib1533 \
 lib1534 lib1535 lib1536 lib1537 lib1538 \
 lib1540 lib1541 \
 lib1550 lib1551 lib1552 lib1553 lib1554 lib1555 lib1556 lib1557 \
 lib1558 lib1559 lib1560 lib1564 lib1565 \
 lib1591 lib1592 lib1593 lib1594 lib1596 \
 lib1900 lib1905 lib1906 lib1907 lib1908 \
 lib2033

chkdecimalpoint_SOURCES = chkdecimalpoint.c ../../lib/mprintf.c \
 ../../lib/curl_ctype.c
chkdecimalpoint_LDADD =
chkdecimalpoint_CPPFLAGS = $(AM_CPPFLAGS) -DCURL_STATICLIB \
 -DCURLX_NO_MEMORY_CALLBACKS
573
574
575
576
577
578
579




580
581
582
583
lib1906_SOURCES = lib1906.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1906_LDADD = $(TESTUTIL_LIBS)
lib1906_CPPFLAGS = $(AM_CPPFLAGS)

lib1907_SOURCES = lib1907.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1907_LDADD = $(TESTUTIL_LIBS)
lib1907_CPPFLAGS = $(AM_CPPFLAGS)





lib2033_SOURCES = libntlmconnect.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib2033_LDADD = $(TESTUTIL_LIBS)
lib2033_CPPFLAGS = $(AM_CPPFLAGS) -DUSE_PIPELINING







>
>
>
>




573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
lib1906_SOURCES = lib1906.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1906_LDADD = $(TESTUTIL_LIBS)
lib1906_CPPFLAGS = $(AM_CPPFLAGS)

lib1907_SOURCES = lib1907.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1907_LDADD = $(TESTUTIL_LIBS)
lib1907_CPPFLAGS = $(AM_CPPFLAGS)

lib1908_SOURCES = lib1908.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1908_LDADD = $(TESTUTIL_LIBS)
lib1908_CPPFLAGS = $(AM_CPPFLAGS)

lib2033_SOURCES = libntlmconnect.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib2033_LDADD = $(TESTUTIL_LIBS)
lib2033_CPPFLAGS = $(AM_CPPFLAGS) -DUSE_PIPELINING
Changes to jni/curl/tests/libtest/lib1560.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
125
126
127
128
129
130
131








132
133
134
135
136
137
138
  const char *out;
  unsigned int urlflags; /* pass to curl_url() */
  unsigned int qflags; /* pass to curl_url_get() */
  CURLUcode ucode;
};

static struct testcase get_parts_list[] ={








#ifdef WIN32
  {"file:/C:\\programs\\foo",
   "file | [11] | [12] | [13] | [14] | [15] | C:\\programs\\foo | [16] | [17]",
   CURLU_DEFAULT_SCHEME, 0, CURLUE_OK},
  {"file://C:\\programs\\foo",
   "file | [11] | [12] | [13] | [14] | [15] | C:\\programs\\foo | [16] | [17]",
   CURLU_DEFAULT_SCHEME, 0, CURLUE_OK},







>
>
>
>
>
>
>
>







125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
  const char *out;
  unsigned int urlflags; /* pass to curl_url() */
  unsigned int qflags; /* pass to curl_url_get() */
  CURLUcode ucode;
};

static struct testcase get_parts_list[] ={
  {"user:moo@ftp.example.com/color/#green?no-black",
   "ftp | user | moo | [13] | ftp.example.com | [15] | /color/ | [16] | "
   "green?no-black",
   CURLU_GUESS_SCHEME, 0, CURLUE_OK },
  {"ftp.user:moo@example.com/color/#green?no-black",
   "http | ftp.user | moo | [13] | example.com | [15] | /color/ | [16] | "
   "green?no-black",
   CURLU_GUESS_SCHEME, 0, CURLUE_OK },
#ifdef WIN32
  {"file:/C:\\programs\\foo",
   "file | [11] | [12] | [13] | [14] | [15] | C:\\programs\\foo | [16] | [17]",
   CURLU_DEFAULT_SCHEME, 0, CURLUE_OK},
  {"file://C:\\programs\\foo",
   "file | [11] | [12] | [13] | [14] | [15] | C:\\programs\\foo | [16] | [17]",
   CURLU_DEFAULT_SCHEME, 0, CURLUE_OK},
Added jni/curl/tests/libtest/lib1908.c.






























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2013 - 2020, Linus Nielsen Feltzing, <linus@haxx.se>
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/
#include "test.h"

#include "testutil.h"
#include "warnless.h"
#include "memdebug.h"

int test(char *URL)
{
  CURLcode ret = CURLE_OK;
  CURL *hnd;
  start_test_timing();

  curl_global_init(CURL_GLOBAL_ALL);

  hnd = curl_easy_init();
  if(hnd) {
    curl_easy_setopt(hnd, CURLOPT_URL, URL);
    curl_easy_setopt(hnd, CURLOPT_NOPROGRESS, 1L);
    curl_easy_setopt(hnd, CURLOPT_ALTSVC, "log/altsvc-1908");
    ret = curl_easy_perform(hnd);
    curl_easy_reset(hnd);
    curl_easy_cleanup(hnd);
  }
  curl_global_cleanup();
  return (int)ret;
}
Changes to jni/curl/tests/libtest/mk-lib1521.pl.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env perl
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 2017 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is








|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env perl
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 2017 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
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
    goto test_cleanup;
  }

HEADER
    ;

while(<STDIN>) {
    if($_ =~ /^  CINIT\(([^ ]*), ([^ ]*), (\d*)\)/) {
        my ($name, $type, $val)=($1, $2, $3);
        my $w="  ";
        my $pref = "${w}res = curl_easy_setopt(curl, CURLOPT_$name,";
        my $i = ' ' x (length($w) + 23);
        my $check = "  if(UNEX(res)) {\n    err(\"$name\", res, __LINE__); goto test_cleanup; }\n";
        if($type eq "STRINGPOINT") {
            print "${pref} \"string\");\n$check";
            print "${pref} NULL);\n$check";
        }
        elsif($type eq "LONG") {
            print "${pref} 0L);\n$check";
            print "${pref} 22L);\n$check";
            print "${pref} LO);\n$check";
            print "${pref} HI);\n$check";
        }
        elsif($type eq "OBJECTPOINT") {
            if($name =~ /DEPENDS/) {
              print "${pref} dep);\n$check";
            }
            elsif($name =~ "SHARE") {
              print "${pref} share);\n$check";
            }
            elsif($name eq "ERRORBUFFER") {
              print "${pref} errorbuffer);\n$check";
            }
            elsif(($name eq "POSTFIELDS") ||
                  ($name eq "COPYPOSTFIELDS")) {
              # set size to zero to avoid it being "illegal"
              print "  (void)curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 0);\n";
              print "${pref} stringpointerextra);\n$check";
            }
            elsif($name eq "HTTPPOST") {
              print "${pref} httppost);\n$check";
            }
            elsif($name eq "MIMEPOST") {
              print "${pref} mimepost);\n$check";
            }
            elsif($name eq "STDERR") {
              print "${pref} stream);\n$check";
            }
            else {
              print "${pref} &object);\n$check";
            }
            print "${pref} NULL);\n$check";
        }
        elsif($type eq "SLISTPOINT") {
            print "${pref} slist);\n$check";
        }
        elsif($type eq "FUNCTIONPOINT") {
            if($name =~ /([^ ]*)FUNCTION/) {
              my $l=lc($1);

              print "${pref}\n$i${l}cb);\n$check";
            }
            else {
              print "${pref} &func);\n$check";
            }
            print "${pref} NULL);\n$check";
        }
        elsif($type eq "OFF_T") {
            # play conservative to work with 32bit curl_off_t
            print "${pref} OFF_NO);\n$check";
            print "${pref} OFF_HI);\n$check";
            print "${pref} OFF_LO);\n$check";
        }
        else {
            print STDERR "\n---- $type\n";
        }
    }
    elsif($_ =~ /^  CURLINFO_NONE/) {
       $infomode = 1;
    }
    elsif($infomode &&
          ($_ =~ /^  CURLINFO_([^ ]*) *= *CURLINFO_([^ ]*)/)) {
       my ($info, $type)=($1, $2);
       my $c = "  res = curl_easy_getinfo(curl, CURLINFO_$info,";
       my $check = "  if(UNEX(res)) {\n    geterr(\"$info\", res, __LINE__); goto test_cleanup; }\n";
       if($type eq "STRING") {
         print "$c &charp);\n$check";
       }
       elsif($type eq "LONG") {
         print "$c &val);\n$check";
       }
       elsif($type eq "OFF_T") {







|


|

|
|



|





|






|


|
|
|
|
|

|


|


|







|


|

|
>
|


|



|
















|







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
    goto test_cleanup;
  }

HEADER
    ;

while(<STDIN>) {
    if($_ =~ /^  CURLOPT\(([^ ]*), ([^ ]*), (\d*)\)/) {
        my ($name, $type, $val)=($1, $2, $3);
        my $w="  ";
        my $pref = "${w}res = curl_easy_setopt(curl, $name,";
        my $i = ' ' x (length($w) + 23);
        my $check = "  if(UNEX(res)) {\n    err(\"$name\", res, __LINE__);\n    goto test_cleanup;\n  }\n";
        if($type eq "CURLOPTTYPE_STRINGPOINT") {
            print "${pref} \"string\");\n$check";
            print "${pref} NULL);\n$check";
        }
        elsif($type eq "CURLOPTTYPE_LONG") {
            print "${pref} 0L);\n$check";
            print "${pref} 22L);\n$check";
            print "${pref} LO);\n$check";
            print "${pref} HI);\n$check";
        }
        elsif($type eq "CURLOPTTYPE_OBJECTPOINT") {
            if($name =~ /DEPENDS/) {
              print "${pref} dep);\n$check";
            }
            elsif($name =~ "SHARE") {
              print "${pref} share);\n$check";
            }
            elsif($name eq "CURLOPT_ERRORBUFFER") {
              print "${pref} errorbuffer);\n$check";
            }
            elsif(($name eq "CURLOPT_POSTFIELDS") ||
                  ($name eq "CURLOPT_COPYPOSTFIELDS")) {
                # set size to zero to avoid it being "illegal"
                print "  (void)curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 0);\n";
                print "${pref} stringpointerextra);\n$check";
            }
            elsif($name eq "CURLOPT_HTTPPOST") {
              print "${pref} httppost);\n$check";
            }
            elsif($name eq "CURLOPT_MIMEPOST") {
              print "${pref} mimepost);\n$check";
            }
            elsif($name eq "CURLOPT_STDERR") {
              print "${pref} stream);\n$check";
            }
            else {
              print "${pref} &object);\n$check";
            }
            print "${pref} NULL);\n$check";
        }
        elsif($type eq "CURLOPTTYPE_SLISTPOINT") {
            print "${pref} slist);\n$check";
        }
        elsif($type eq "CURLOPTTYPE_FUNCTIONPOINT") {
            if($name =~ /([^ ]*)FUNCTION/) {
                my $l=lc($1);
                $l =~ s/^curlopt_//;
                print "${pref}\n$i${l}cb);\n$check";
            }
            else {
                print "${pref} &func);\n$check";
            }
            print "${pref} NULL);\n$check";
        }
        elsif($type eq "CURLOPTTYPE_OFF_T") {
            # play conservative to work with 32bit curl_off_t
            print "${pref} OFF_NO);\n$check";
            print "${pref} OFF_HI);\n$check";
            print "${pref} OFF_LO);\n$check";
        }
        else {
            print STDERR "\n---- $type\n";
        }
    }
    elsif($_ =~ /^  CURLINFO_NONE/) {
       $infomode = 1;
    }
    elsif($infomode &&
          ($_ =~ /^  CURLINFO_([^ ]*) *= *CURLINFO_([^ ]*)/)) {
       my ($info, $type)=($1, $2);
       my $c = "  res = curl_easy_getinfo(curl, CURLINFO_$info,";
       my $check = "  if(UNEX(res)) {\n    geterr(\"$info\", res, __LINE__);\n    goto test_cleanup;\n  }\n";
       if($type eq "STRING") {
         print "$c &charp);\n$check";
       }
       elsif($type eq "LONG") {
         print "$c &val);\n$check";
       }
       elsif($type eq "OFF_T") {
jni/curl/tests/manpage-scan.pl became executable.
Changes to jni/curl/tests/python_dependencies/impacket/smbserver.py.
22
23
24
25
26
27
28



29
30
31
32
33
34
35
36

from __future__ import with_statement
import calendar
import socket
import time
import datetime
import struct



import ConfigParser
import SocketServer
import threading
import logging
import logging.config
import ntpath
import os
import fnmatch







>
>
>
|







22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

from __future__ import with_statement
import calendar
import socket
import time
import datetime
import struct
try: # Python 3
    import configparser
except ImportError: # Python 2
    import ConfigParser as configparser
import SocketServer
import threading
import logging
import logging.config
import ntpath
import os
import fnmatch
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
        return packetsToSend

    def processConfigFile(self, configFile = None):
        # TODO: Do a real config parser
        if self.__serverConfig is None:
            if configFile is None:
                configFile = 'smb.conf'
            self.__serverConfig = ConfigParser.ConfigParser()
            self.__serverConfig.read(configFile)

        self.__serverName   = self.__serverConfig.get('global','server_name')
        self.__serverOS     = self.__serverConfig.get('global','server_os')
        self.__serverDomain = self.__serverConfig.get('global','server_domain')
        self.__logFile      = self.__serverConfig.get('global','log_file')
        if self.__serverConfig.has_option('global', 'challenge'):







|







4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
        return packetsToSend

    def processConfigFile(self, configFile = None):
        # TODO: Do a real config parser
        if self.__serverConfig is None:
            if configFile is None:
                configFile = 'smb.conf'
            self.__serverConfig = configparser.ConfigParser()
            self.__serverConfig.read(configFile)

        self.__serverName   = self.__serverConfig.get('global','server_name')
        self.__serverOS     = self.__serverConfig.get('global','server_os')
        self.__serverDomain = self.__serverConfig.get('global','server_domain')
        self.__logFile      = self.__serverConfig.get('global','log_file')
        if self.__serverConfig.has_option('global', 'challenge'):
Changes to jni/curl/tests/runtests.1.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH runtests.pl 1 "December 13, 2019" "Curl 7.68.0" "runtests"

.SH NAME
runtests.pl \- run one or more test cases
.SH SYNOPSIS
.B runtests.pl [options] [test number] [!test number] [key word] [!key word]
.SH DESCRIPTION
\fIruntests.pl\fP runs one, several or all the existing test cases in curl's







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH runtests.pl 1 "December 18, 2019" "Curl 7.69.0" "runtests"

.SH NAME
runtests.pl \- run one or more test cases
.SH SYNOPSIS
.B runtests.pl [options] [test number] [!test number] [key word] [!key word]
.SH DESCRIPTION
\fIruntests.pl\fP runs one, several or all the existing test cases in curl's
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
.IP "-p"
Prints out all files in "log/" to stdout when a test case fails. Very
practical when used in the automated and distributed tests since then the
people checking the failures and the reasons for them might not have physical
access to the machine and logs.
.IP "-R"
Run the tests in a scrambled, or randomized, order instead of sequentially.



.IP "-r"
Display run time statistics. (Requires Perl Time::HiRes module)
.IP "-rf"
Display full run time statistics. (Requires Perl Time::HiRes module)
.IP "--repeat=[num]"
This will repeat the given set of test numbers this many times. If no test
numbers are given, it will repeat ALL tests this many times. It iteratively
adds the new sequence at the end of the initially given one.

If \fB-R\fP is also used, the scrambling is done after the repeats have
extended the test sequence.
.IP "-s"
Shorter output. Speaks less than default.





.IP "--shallow=[num](,seed)"
Used together with \fB-t\fP. This limits the number of tests to fail in
torture mode to no more than 'num' per test case. If this reduces the amount,
the given 'seed' will be used to randomly discard entries to fail until the
amount is 'num'.


.IP "-t[num]"
Selects a \fBtorture\fP test for the given tests. This makes runtests.pl first
run the tests once and count the number of memory allocations made. It then
reruns the test that number of times, each time forcing one of the allocations
to fail until all allocs have been tested. By setting \fInum\fP you can force
the allocation with that number to be set to fail at once instead of looping
through everyone, which is very handy when debugging and then often in







>
>
>













>
>
>
>
>
|


|
|
>
>







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
.IP "-p"
Prints out all files in "log/" to stdout when a test case fails. Very
practical when used in the automated and distributed tests since then the
people checking the failures and the reasons for them might not have physical
access to the machine and logs.
.IP "-R"
Run the tests in a scrambled, or randomized, order instead of sequentially.

The random seed initially set for this is fixed per month and can be set with
\fI--seed\fP.
.IP "-r"
Display run time statistics. (Requires Perl Time::HiRes module)
.IP "-rf"
Display full run time statistics. (Requires Perl Time::HiRes module)
.IP "--repeat=[num]"
This will repeat the given set of test numbers this many times. If no test
numbers are given, it will repeat ALL tests this many times. It iteratively
adds the new sequence at the end of the initially given one.

If \fB-R\fP is also used, the scrambling is done after the repeats have
extended the test sequence.
.IP "-s"
Shorter output. Speaks less than default.
.IP "--seed=[num]"
When using \fI--shallow\fP or \fI-R\rP that random certain aspects of the
behavior, this option can set the initial seed. If not set, the random seed
will be set based on the currently set local year and month and the first line
of the "curl -V" output.
.IP "--shallow=[num]"
Used together with \fB-t\fP. This limits the number of tests to fail in
torture mode to no more than 'num' per test case. If this reduces the amount,
the script will randomly discard entries to fail until the amount is 'num'.

The random seed initially set for this is fixed per month and can be set with
\fI--seed\fP.
.IP "-t[num]"
Selects a \fBtorture\fP test for the given tests. This makes runtests.pl first
run the tests once and count the number of memory allocations made. It then
reruns the test that number of times, each time forcing one of the allocations
to fail until all allocs have been tested. By setting \fInum\fP you can force
the allocation with that number to be set to fail at once instead of looping
through everyone, which is very handy when debugging and then often in
Changes to jni/curl/tests/runtests.pl.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env perl
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is








|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env perl
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
65
66
67
68
69
70
71

72
73
74
75
76
77
78
        import  Time::HiRes qw( time );
    }
}

use strict;
use warnings;
use Cwd;


# Subs imported from serverhelp module
use serverhelp qw(
    serverfactors
    servername_id
    servername_str
    servername_canon







>







65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
        import  Time::HiRes qw( time );
    }
}

use strict;
use warnings;
use Cwd;
use Digest::MD5 qw(md5);

# Subs imported from serverhelp module
use serverhelp qw(
    serverfactors
    servername_id
    servername_str
    servername_canon
106
107
108
109
110
111
112


113
114
115
116
117
118
119
    );

use pathhelp;

require "getpart.pm"; # array functions
require "valgrind.pm"; # valgrind report parser
require "ftp.pm";



my $HOSTIP="127.0.0.1";   # address on which the test server listens
my $HOST6IP="[::1]";      # address on which the test server listens
my $CLIENTIP="127.0.0.1"; # address which curl uses for incoming connections
my $CLIENT6IP="[::1]";    # address which curl uses for incoming connections

my $base = 8990; # base port number







>
>







107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
    );

use pathhelp;

require "getpart.pm"; # array functions
require "valgrind.pm"; # valgrind report parser
require "ftp.pm";
require "azure.pm";
require "appveyor.pm";

my $HOSTIP="127.0.0.1";   # address on which the test server listens
my $HOST6IP="[::1]";      # address on which the test server listens
my $CLIENTIP="127.0.0.1"; # address which curl uses for incoming connections
my $CLIENT6IP="[::1]";    # address which curl uses for incoming connections

my $base = 8990; # base port number
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
my $TESTDIR="$srcdir/data";
my $LIBDIR="./libtest";
my $UNITDIR="./unit";
# TODO: change this to use server_inputfilename()
my $SERVERIN="$LOGDIR/server.input"; # what curl sent the server
my $SERVER2IN="$LOGDIR/server2.input"; # what curl sent the second server
my $PROXYIN="$LOGDIR/proxy.input"; # what curl sent the proxy
my $CURLLOG="$LOGDIR/curl.log"; # all command lines run
my $FTPDCMD="$LOGDIR/ftpserver.cmd"; # copy ftp server instructions here
my $SERVERLOGS_LOCK="$LOGDIR/serverlogs.lock"; # server logs advisor read lock
my $CURLCONFIG="../curl-config"; # curl-config from current build

# Normally, all test cases should be run, but at times it is handy to
# simply run a particular one:
my $TESTCASES="all";







|







162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
my $TESTDIR="$srcdir/data";
my $LIBDIR="./libtest";
my $UNITDIR="./unit";
# TODO: change this to use server_inputfilename()
my $SERVERIN="$LOGDIR/server.input"; # what curl sent the server
my $SERVER2IN="$LOGDIR/server2.input"; # what curl sent the second server
my $PROXYIN="$LOGDIR/proxy.input"; # what curl sent the proxy
my $CURLLOG="commands.log"; # all command lines run
my $FTPDCMD="$LOGDIR/ftpserver.cmd"; # copy ftp server instructions here
my $SERVERLOGS_LOCK="$LOGDIR/serverlogs.lock"; # server logs advisor read lock
my $CURLCONFIG="../curl-config"; # curl-config from current build

# Normally, all test cases should be run, but at times it is handy to
# simply run a particular one:
my $TESTCASES="all";
237
238
239
240
241
242
243

244
245
246
247
248
249
250
my $has_cares;      # set if built with c-ares
my $has_threadedres;# set if built with threaded resolver
my $has_psl;        # set if libcurl is built with PSL support
my $has_altsvc;     # set if libcurl is built with alt-svc support
my $has_ldpreload;  # set if curl is built for systems supporting LD_PRELOAD
my $has_multissl;   # set if curl is build with MultiSSL support
my $has_manual;     # set if curl is built with built-in manual


# this version is decided by the particular nghttp2 library that is being used
my $h2cver = "h2c";

my $has_openssl;    # built with a lib using an OpenSSL-like API
my $has_gnutls;     # built with GnuTLS
my $has_nss;        # built with NSS







>







240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
my $has_cares;      # set if built with c-ares
my $has_threadedres;# set if built with threaded resolver
my $has_psl;        # set if libcurl is built with PSL support
my $has_altsvc;     # set if libcurl is built with alt-svc support
my $has_ldpreload;  # set if curl is built for systems supporting LD_PRELOAD
my $has_multissl;   # set if curl is build with MultiSSL support
my $has_manual;     # set if curl is built with built-in manual
my $has_win32;      # set if curl is built for Windows

# this version is decided by the particular nghttp2 library that is being used
my $h2cver = "h2c";

my $has_openssl;    # built with a lib using an OpenSSL-like API
my $has_gnutls;     # built with GnuTLS
my $has_nss;        # built with NSS
268
269
270
271
272
273
274

275
276

277
278
279
280
281
282
283

my @protocols;   # array of lowercase supported protocol servers

my $skipped=0;  # number of tests skipped; reported in main loop
my %skipped;    # skipped{reason}=counter, reasons for skip
my @teststat;   # teststat[testnum]=reason, reasons for skip
my %disabled_keywords;  # key words of tests to skip

my %enabled_keywords;   # key words of tests to run
my %disabled;           # disabled test cases


my $sshdid;      # for socks server, ssh daemon version id
my $sshdvernum;  # for socks server, ssh daemon version number
my $sshdverstr;  # for socks server, ssh daemon version string
my $sshderror;   # for socks server, ssh daemon version error

my $defserverlogslocktimeout = 2; # timeout to await server logs lock removal







>


>







272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289

my @protocols;   # array of lowercase supported protocol servers

my $skipped=0;  # number of tests skipped; reported in main loop
my %skipped;    # skipped{reason}=counter, reasons for skip
my @teststat;   # teststat[testnum]=reason, reasons for skip
my %disabled_keywords;  # key words of tests to skip
my %ignored_keywords;   # key words of tests to ignore results
my %enabled_keywords;   # key words of tests to run
my %disabled;           # disabled test cases
my %ignored;            # ignored results of test cases

my $sshdid;      # for socks server, ssh daemon version id
my $sshdvernum;  # for socks server, ssh daemon version number
my $sshdverstr;  # for socks server, ssh daemon version string
my $sshderror;   # for socks server, ssh daemon version error

my $defserverlogslocktimeout = 2; # timeout to await server logs lock removal
291
292
293
294
295
296
297
298

299
300
301
302
303
304
305
my %timetoolini; # timestamp for each test command run starting
my %timetoolend; # timestamp for each test command run stopping
my %timesrvrlog; # timestamp for each test server logs lock removal
my %timevrfyend; # timestamp for each test result verification end

my $testnumcheck; # test number, set in singletest sub.
my %oldenv;
my %feature; # array of enabled features


#######################################################################
# variables that command line options may set
#

my $short;
my $automakestyle;







|
>







297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
my %timetoolini; # timestamp for each test command run starting
my %timetoolend; # timestamp for each test command run stopping
my %timesrvrlog; # timestamp for each test server logs lock removal
my %timevrfyend; # timestamp for each test result verification end

my $testnumcheck; # test number, set in singletest sub.
my %oldenv;
my %feature;      # array of enabled features
my %keywords;     # array of keywords from the test spec

#######################################################################
# variables that command line options may set
#

my $short;
my $automakestyle;
319
320
321
322
323
324
325

326



327
328
329
330
331
332
333
my %runcert;      # cert file currently in use by an ssl running server

# torture test variables
my $torture;
my $tortnum;
my $tortalloc;
my $shallow;

my $shallowseed;




#######################################################################
# logmsg is our general message logging subroutine.
#
sub logmsg {
    for(@_) {
        my $line = $_;







>
|
>
>
>







326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
my %runcert;      # cert file currently in use by an ssl running server

# torture test variables
my $torture;
my $tortnum;
my $tortalloc;
my $shallow;
my $randseed = 0;

# Azure Pipelines specific variables
my $AZURE_RUN_ID = 0;
my $AZURE_RESULT_ID = 0;

#######################################################################
# logmsg is our general message logging subroutine.
#
sub logmsg {
    for(@_) {
        my $line = $_;
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
    my $count;
    my $file;

    # Get all files
    opendir(DIR, $dir) ||
        return 0; # can't open dir
    while($file = readdir(DIR)) {
        if($file !~ /^\./) {
            unlink("$dir/$file");
            $count++;
        }
    }
    closedir DIR;
    return $count;
}







|







2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
    my $count;
    my $file;

    # Get all files
    opendir(DIR, $dir) ||
        return 0; # can't open dir
    while($file = readdir(DIR)) {
        if(($file !~ /^\./)) {
            unlink("$dir/$file");
            $count++;
        }
    }
    closedir DIR;
    return $count;
}
2628
2629
2630
2631
2632
2633
2634

2635
2636
2637
2638
2639
2640
2641
    $feature{"Metalink"} = $has_metalink;
    $feature{"http/2"} = $has_http2;
    $feature{"threaded-resolver"} = $has_threadedres;
    $feature{"PSL"} = $has_psl;
    $feature{"alt-svc"} = $has_altsvc;
    $feature{"manual"} = $has_manual;
    $feature{"unix-sockets"} = $has_unix;


    # make each protocol an enabled "feature"
    for my $p (@protocols) {
        $feature{$p} = 1;
    }
    # 'socks' was once here but is now removed








>







2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
    $feature{"Metalink"} = $has_metalink;
    $feature{"http/2"} = $has_http2;
    $feature{"threaded-resolver"} = $has_threadedres;
    $feature{"PSL"} = $has_psl;
    $feature{"alt-svc"} = $has_altsvc;
    $feature{"manual"} = $has_manual;
    $feature{"unix-sockets"} = $has_unix;
    $feature{"win32"} = $has_win32;

    # make each protocol an enabled "feature"
    for my $p (@protocols) {
        $feature{$p} = 1;
    }
    # 'socks' was once here but is now removed

2707
2708
2709
2710
2711
2712
2713

2714
2715
2716
2717
2718
2719
2720
                $has_ldpreload = 1;
            }
            if($curl =~ /win32|Windows|mingw(32|64)/) {
                # This is a Windows MinGW build or native build, we need to use
                # Win32-style path.
                $pwd = pathhelp::sys_native_current_path();
                $has_textaware = 1;

            }
           if ($libcurl =~ /(winssl|schannel)/i) {
               $has_winssl=1;
               $has_sslpinning=1;
           }
           elsif ($libcurl =~ /openssl/i) {
               $has_openssl=1;







>







2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
                $has_ldpreload = 1;
            }
            if($curl =~ /win32|Windows|mingw(32|64)/) {
                # This is a Windows MinGW build or native build, we need to use
                # Win32-style path.
                $pwd = pathhelp::sys_native_current_path();
                $has_textaware = 1;
                $has_win32 = 1;
            }
           if ($libcurl =~ /(winssl|schannel)/i) {
               $has_winssl=1;
               $has_sslpinning=1;
           }
           elsif ($libcurl =~ /openssl/i) {
               $has_openssl=1;
3004
3005
3006
3007
3008
3009
3010

3011
3012
3013
3014
3015
3016
3017
    logmsg sprintf("%s", $http_ipv6?"HTTP-IPv6 ":"");
    logmsg sprintf("%s", $http_unix?"HTTP-unix ":"");
    logmsg sprintf("%s\n", $ftp_ipv6?"FTP-IPv6 ":"");

    logmsg sprintf("* Env: %s%s", $valgrind?"Valgrind ":"",
                   $run_event_based?"event-based ":"");
    logmsg sprintf("%s\n", $libtool?"Libtool ":"");


    if($verbose) {
        logmsg "* Ports:\n";

        logmsg sprintf("*   HTTP/%d ", $HTTPPORT);
        logmsg sprintf("FTP/%d ", $FTPPORT);
        logmsg sprintf("FTP2/%d ", $FTP2PORT);







>







3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
    logmsg sprintf("%s", $http_ipv6?"HTTP-IPv6 ":"");
    logmsg sprintf("%s", $http_unix?"HTTP-unix ":"");
    logmsg sprintf("%s\n", $ftp_ipv6?"FTP-IPv6 ":"");

    logmsg sprintf("* Env: %s%s", $valgrind?"Valgrind ":"",
                   $run_event_based?"event-based ":"");
    logmsg sprintf("%s\n", $libtool?"Libtool ":"");
    logmsg ("* Seed: $randseed\n");

    if($verbose) {
        logmsg "* Ports:\n";

        logmsg sprintf("*   HTTP/%d ", $HTTPPORT);
        logmsg sprintf("FTP/%d ", $FTPPORT);
        logmsg sprintf("FTP2/%d ", $FTP2PORT);
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
  }

  $$thing =~ s/%FILE_PWD/$file_pwd/g;
  $$thing =~ s/%SRCDIR/$srcdir/g;
  $$thing =~ s/%USER/$USER/g;

  # The purpose of FTPTIME2 and FTPTIME3 is to provide times that can be
  # used for time-out tests and that whould work on most hosts as these
  # adjust for the startup/check time for this particular host. We needed
  # to do this to make the test suite run better on very slow hosts.

  my $ftp2 = $ftpchecktime * 2;
  my $ftp3 = $ftpchecktime * 3;

  $$thing =~ s/%FTPTIME2/$ftp2/g;







|







3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
  }

  $$thing =~ s/%FILE_PWD/$file_pwd/g;
  $$thing =~ s/%SRCDIR/$srcdir/g;
  $$thing =~ s/%USER/$USER/g;

  # The purpose of FTPTIME2 and FTPTIME3 is to provide times that can be
  # used for time-out tests and that would work on most hosts as these
  # adjust for the startup/check time for this particular host. We needed
  # to do this to make the test suite run better on very slow hosts.

  my $ftp2 = $ftpchecktime * 2;
  my $ftp3 = $ftpchecktime * 3;

  $$thing =~ s/%FTPTIME2/$ftp2/g;
3234
3235
3236
3237
3238
3239
3240

3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257




3258
3259
3260
3261
3262
3263
3264
        $count,
        $total)=@_;

    my @what;
    my $why;
    my $cmd;
    my $disablevalgrind;


    # fist, remove all lingering log files
    cleardir($LOGDIR);

    # copy test number to a global scope var, this allows
    # testnum checking when starting test harness servers.
    $testnumcheck = $testnum;

    # timestamp test preparation start
    $timeprepini{$testnum} = Time::HiRes::time();

    if($disttests !~ /test$testnum\W/ ) {
        logmsg "Warning: test$testnum not present in tests/data/Makefile.inc\n";
    }
    if($disabled{$testnum}) {
        logmsg "Warning: test$testnum is explicitly disabled\n";
    }





    # load the test case file definition
    if(loadtest("${TESTDIR}/test${testnum}")) {
        if($verbose) {
            # this is not a test
            logmsg "RUN: $testnum doesn't look like a test case\n";
        }







>

















>
>
>
>







3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
        $count,
        $total)=@_;

    my @what;
    my $why;
    my $cmd;
    my $disablevalgrind;
    my $errorreturncode = 1; # 1 means normal error, 2 means ignored error

    # fist, remove all lingering log files
    cleardir($LOGDIR);

    # copy test number to a global scope var, this allows
    # testnum checking when starting test harness servers.
    $testnumcheck = $testnum;

    # timestamp test preparation start
    $timeprepini{$testnum} = Time::HiRes::time();

    if($disttests !~ /test$testnum\W/ ) {
        logmsg "Warning: test$testnum not present in tests/data/Makefile.inc\n";
    }
    if($disabled{$testnum}) {
        logmsg "Warning: test$testnum is explicitly disabled\n";
    }
    if($ignored{$testnum}) {
        logmsg "Warning: test$testnum result is ignored\n";
        $errorreturncode = 2;
    }

    # load the test case file definition
    if(loadtest("${TESTDIR}/test${testnum}")) {
        if($verbose) {
            # this is not a test
            logmsg "RUN: $testnum doesn't look like a test case\n";
        }
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310



3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321






3322
3323
3324
3325
3326
3327
3328

            $why = "curl has $1 support";
            last;
        }
    }

    if(!$why) {
        my @keywords = getpart("info", "keywords");
        my $match;
        my $k;




        if(!$keywords[0]) {
            $why = "missing the <keywords> section!";
        }

        for $k (@keywords) {
            chomp $k;
            if ($disabled_keywords{lc($k)}) {
                $why = "disabled by keyword";
            } elsif ($enabled_keywords{lc($k)}) {
                $match = 1;
            }






        }

        if(!$why && !$match && %enabled_keywords) {
            $why = "disabled by missing keyword";
        }
    }








|



>
>
>
|



|






>
>
>
>
>
>







3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356

            $why = "curl has $1 support";
            last;
        }
    }

    if(!$why) {
        my @info_keywords = getpart("info", "keywords");
        my $match;
        my $k;

        # Clear the list of keywords from the last test
        %keywords = ();

        if(!$info_keywords[0]) {
            $why = "missing the <keywords> section!";
        }

        for $k (@info_keywords) {
            chomp $k;
            if ($disabled_keywords{lc($k)}) {
                $why = "disabled by keyword";
            } elsif ($enabled_keywords{lc($k)}) {
                $match = 1;
            }
            if ($ignored_keywords{lc($k)}) {
                logmsg "Warning: test$testnum result is ignored due to $k\n";
                $errorreturncode = 2;
            }

            $keywords{$k} = 1;
        }

        if(!$why && !$match && %enabled_keywords) {
            $why = "disabled by missing keyword";
        }
    }

3336
3337
3338
3339
3340
3341
3342













3343
3344
3345
3346
3347
3348
3349
            delete $ENV{$var} if($ENV{$var});
        }
        else {
            $ENV{$var} = $oldenv{$var};
        }
        delete $oldenv{$var};
    }














    # remove test server commands file before servers are started/verified
    unlink($FTPDCMD) if(-f $FTPDCMD);

    # timestamp required servers verification start
    $timesrvrini{$testnum} = Time::HiRes::time();








>
>
>
>
>
>
>
>
>
>
>
>
>







3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
            delete $ENV{$var} if($ENV{$var});
        }
        else {
            $ENV{$var} = $oldenv{$var};
        }
        delete $oldenv{$var};
    }

    # get the name of the test early
    my @testname= getpart("client", "name");
    my $testname = $testname[0];
    $testname =~ s/\n//g;

    # create test result in CI services
    if(azure_check_environment() && $AZURE_RUN_ID) {
        $AZURE_RESULT_ID = azure_create_test_result($AZURE_RUN_ID, $testnum, $testname);
    }
    elsif(appveyor_check_environment()) {
        appveyor_create_test_result($testnum, $testname);
    }

    # remove test server commands file before servers are started/verified
    unlink($FTPDCMD) if(-f $FTPDCMD);

    # timestamp required servers verification start
    $timesrvrini{$testnum} = Time::HiRes::time();

3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512

    # if this section exists, it might be FTP server instructions:
    my @ftpservercmd = fixarray ( getpart("reply", "servercmd") );

    my $CURLOUT="$LOGDIR/curl$testnum.out"; # curl output if not stdout

    # name of the test
    my @testname= getpart("client", "name");
    my $testname = $testname[0];
    $testname =~ s/\n//g;
    logmsg "[$testname]\n" if(!$short);

    if($listonly) {
        timestampskippedevents($testnum);
        return 0; # look successful
    }








<
<
<







3537
3538
3539
3540
3541
3542
3543



3544
3545
3546
3547
3548
3549
3550

    # if this section exists, it might be FTP server instructions:
    my @ftpservercmd = fixarray ( getpart("reply", "servercmd") );

    my $CURLOUT="$LOGDIR/curl$testnum.out"; # curl output if not stdout

    # name of the test



    logmsg "[$testname]\n" if(!$short);

    if($listonly) {
        timestampskippedevents($testnum);
        return 0; # look successful
    }

3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635





3636
3637
3638
3639
3640
3641
3642
    elsif($cmdtype eq "shell") {
        # run the command line prepended with "/bin/sh"
        $cmdargs ="$cmd";
        $CMDLINE = "/bin/sh ";
        $tool=$CMDLINE;
        $disablevalgrind=1;
    }
    elsif(!$tool) {
        # run curl, add suitable command line options
        my $inc="";
        if((!$cmdhash{'option'}) || ($cmdhash{'option'} !~ /no-include/)) {
            $inc = " --include";
        }

        $cmdargs = "$out$inc ";
        $cmdargs .= "--trace-ascii log/trace$testnum ";
        $cmdargs .= "--trace-time ";
        if($evbased) {
            $cmdargs .= "--test-event ";
            $fail_due_event_based--;
        }
        $cmdargs .= $cmd;
    }
    else {
        $cmdargs = " $cmd"; # $cmd is the command line for the test file
        $CURLOUT = $STDOUT; # sends received data to stdout






        if($tool =~ /^lib/) {
            $CMDLINE="$LIBDIR/$tool";
        }
        elsif($tool =~ /^unit/) {
            $CMDLINE="$UNITDIR/$tool";
        }







|


















>
>
>
>
>







3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
    elsif($cmdtype eq "shell") {
        # run the command line prepended with "/bin/sh"
        $cmdargs ="$cmd";
        $CMDLINE = "/bin/sh ";
        $tool=$CMDLINE;
        $disablevalgrind=1;
    }
    elsif(!$tool && !$keywords{"unittest"}) {
        # run curl, add suitable command line options
        my $inc="";
        if((!$cmdhash{'option'}) || ($cmdhash{'option'} !~ /no-include/)) {
            $inc = " --include";
        }

        $cmdargs = "$out$inc ";
        $cmdargs .= "--trace-ascii log/trace$testnum ";
        $cmdargs .= "--trace-time ";
        if($evbased) {
            $cmdargs .= "--test-event ";
            $fail_due_event_based--;
        }
        $cmdargs .= $cmd;
    }
    else {
        $cmdargs = " $cmd"; # $cmd is the command line for the test file
        $CURLOUT = $STDOUT; # sends received data to stdout

        # Default the tool to a unit test with the same name as the test spec
        if($keywords{"unittest"} && !$tool) {
            $tool="unit$testnum";
        }

        if($tool =~ /^lib/) {
            $CMDLINE="$LIBDIR/$tool";
        }
        elsif($tool =~ /^unit/) {
            $CMDLINE="$UNITDIR/$tool";
        }
3699
3700
3701
3702
3703
3704
3705

3706

3707
3708
3709
3710
3711
3712
3713

    $CMDLINE .= "$cmdargs >$STDOUT 2>$STDERR";

    if($verbose) {
        logmsg "$CMDLINE\n";
    }


    print CMDLOG "$CMDLINE\n";


    unlink("core");

    my $dumped_core;
    my $cmdres;

    if($gdbthis) {







>

>







3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758

    $CMDLINE .= "$cmdargs >$STDOUT 2>$STDERR";

    if($verbose) {
        logmsg "$CMDLINE\n";
    }

    open(CMDLOG, ">", "$LOGDIR/$CURLLOG");
    print CMDLOG "$CMDLINE\n";
    close(CMDLOG);

    unlink("core");

    my $dumped_core;
    my $cmdres;

    if($gdbthis) {
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
            my $rc = runclient("$cmd");
            # Must run the postcheck command in torture mode in order
            # to clean up, but the result can't be relied upon.
            if($rc != 0 && !$torture) {
                logmsg " postcheck FAILED\n";
                # timestamp test result verification end
                $timevrfyend{$testnum} = Time::HiRes::time();
                return 1;
            }
        }
    }

    # restore environment variables that were modified
    if(%oldenv) {
        foreach my $var (keys %oldenv) {







|







3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
            my $rc = runclient("$cmd");
            # Must run the postcheck command in torture mode in order
            # to clean up, but the result can't be relied upon.
            if($rc != 0 && !$torture) {
                logmsg " postcheck FAILED\n";
                # timestamp test result verification end
                $timevrfyend{$testnum} = Time::HiRes::time();
                return $errorreturncode;
            }
        }
    }

    # restore environment variables that were modified
    if(%oldenv) {
        foreach my $var (keys %oldenv) {
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
            # Yes, we must cut off the final newline from the final line
            # of the protocol data
            chomp($validstdout[$#validstdout]);
        }

        $res = compare($testnum, $testname, "stdout", \@actual, \@validstdout);
        if($res) {
            return 1;
        }
        $ok .= "s";
    }
    else {
        $ok .= "-"; # stdout not checked
    }








|







3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
            # Yes, we must cut off the final newline from the final line
            # of the protocol data
            chomp($validstdout[$#validstdout]);
        }

        $res = compare($testnum, $testname, "stdout", \@actual, \@validstdout);
        if($res) {
            return $errorreturncode;
        }
        $ok .= "s";
    }
    else {
        $ok .= "-"; # stdout not checked
    }

4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
            # Yes, we must cut off the final newline from the final line
            # of the protocol data
            chomp($validstderr[$#validstderr]);
        }

        $res = compare($testnum, $testname, "stderr", \@actual, \@validstderr);
        if($res) {
            return 1;
        }
        $ok .= "r";
    }
    else {
        $ok .= "-"; # stderr not checked
    }








|







4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
            # Yes, we must cut off the final newline from the final line
            # of the protocol data
            chomp($validstderr[$#validstderr]);
        }

        $res = compare($testnum, $testname, "stderr", \@actual, \@validstderr);
        if($res) {
            return $errorreturncode;
        }
        $ok .= "r";
    }
    else {
        $ok .= "-"; # stderr not checked
    }

4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
            for(@out) {
                eval $strip;
            }
        }

        $res = compare($testnum, $testname, "protocol", \@out, \@protstrip);
        if($res) {
            return 1;
        }

        $ok .= "p";

    }
    else {
        $ok .= "-"; # protocol not checked
    }

    if(!$replyattr{'nocheck'} && (@reply || $replyattr{'sendzero'})) {
        # verify the received data
        my @out = loadarray($CURLOUT);
        $res = compare($testnum, $testname, "data", \@out, \@reply);
        if ($res) {
            return 1;
        }
        $ok .= "d";
    }
    else {
        $ok .= "-"; # data not checked
    }








|














|







4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
            for(@out) {
                eval $strip;
            }
        }

        $res = compare($testnum, $testname, "protocol", \@out, \@protstrip);
        if($res) {
            return $errorreturncode;
        }

        $ok .= "p";

    }
    else {
        $ok .= "-"; # protocol not checked
    }

    if(!$replyattr{'nocheck'} && (@reply || $replyattr{'sendzero'})) {
        # verify the received data
        my @out = loadarray($CURLOUT);
        $res = compare($testnum, $testname, "data", \@out, \@reply);
        if ($res) {
            return $errorreturncode;
        }
        $ok .= "d";
    }
    else {
        $ok .= "-"; # data not checked
    }

4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
            for(@out) {
                eval $strip;
            }
        }

        $res = compare($testnum, $testname, "upload", \@out, \@upload);
        if ($res) {
            return 1;
        }
        $ok .= "u";
    }
    else {
        $ok .= "-"; # upload not checked
    }








|







4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
            for(@out) {
                eval $strip;
            }
        }

        $res = compare($testnum, $testname, "upload", \@out, \@upload);
        if ($res) {
            return $errorreturncode;
        }
        $ok .= "u";
    }
    else {
        $ok .= "-"; # upload not checked
    }

4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
            for(@out) {
                eval $strip;
            }
        }

        $res = compare($testnum, $testname, "proxy", \@out, \@protstrip);
        if($res) {
            return 1;
        }

        $ok .= "P";

    }
    else {
        $ok .= "-"; # protocol not checked







|







4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
            for(@out) {
                eval $strip;
            }
        }

        $res = compare($testnum, $testname, "proxy", \@out, \@protstrip);
        if($res) {
            return $errorreturncode;
        }

        $ok .= "P";

    }
    else {
        $ok .= "-"; # protocol not checked
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
            }

            @outfile = fixarray(@outfile);

            $res = compare($testnum, $testname, "output ($filename)",
                           \@generated, \@outfile);
            if($res) {
                return 1;
            }

            $outputok = 1; # output checked
        }
    }
    $ok .= ($outputok) ? "o" : "-"; # output checked or not








|







4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
            }

            @outfile = fixarray(@outfile);

            $res = compare($testnum, $testname, "output ($filename)",
                           \@generated, \@outfile);
            if($res) {
                return $errorreturncode;
            }

            $outputok = 1; # output checked
        }
    }
    $ok .= ($outputok) ? "o" : "-"; # output checked or not

4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
        if(!$short) {
            logmsg sprintf("\n%s returned $cmdres, when expecting %s\n",
                           (!$tool)?"curl":$tool, $errorcode);
        }
        logmsg " exit FAILED\n";
        # timestamp test result verification end
        $timevrfyend{$testnum} = Time::HiRes::time();
        return 1;
    }

    if($has_memory_tracking) {
        if(! -f $memdump) {
            logmsg "\n** ALERT! memory tracking with no output file?\n"
                if(!$cmdtype eq "perl");
        }







|







4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
        if(!$short) {
            logmsg sprintf("\n%s returned $cmdres, when expecting %s\n",
                           (!$tool)?"curl":$tool, $errorcode);
        }
        logmsg " exit FAILED\n";
        # timestamp test result verification end
        $timevrfyend{$testnum} = Time::HiRes::time();
        return $errorreturncode;
    }

    if($has_memory_tracking) {
        if(! -f $memdump) {
            logmsg "\n** ALERT! memory tracking with no output file?\n"
                if(!$cmdtype eq "perl");
        }
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
                }
            }
            if($leak) {
                logmsg "\n** MEMORY FAILURE\n";
                logmsg @memdata;
                # timestamp test result verification end
                $timevrfyend{$testnum} = Time::HiRes::time();
                return 1;
            }
            else {
                $ok .= "m";
            }
        }
    }
    else {
        $ok .= "-"; # memory not checked
    }

    if($valgrind) {
        if($usevalgrind) {
            unless(opendir(DIR, "$LOGDIR")) {
                logmsg "ERROR: unable to read $LOGDIR\n";
                # timestamp test result verification end
                $timevrfyend{$testnum} = Time::HiRes::time();
                return 1;
            }
            my @files = readdir(DIR);
            closedir(DIR);
            my $vgfile;
            foreach my $file (@files) {
                if($file =~ /^valgrind$testnum(\..*|)$/) {
                    $vgfile = $file;
                    last;
                }
            }
            if(!$vgfile) {
                logmsg "ERROR: valgrind log file missing for test $testnum\n";
                # timestamp test result verification end
                $timevrfyend{$testnum} = Time::HiRes::time();
                return 1;
            }
            my @e = valgrindparse("$LOGDIR/$vgfile");
            if(@e && $e[0]) {
                if($automakestyle) {
                    logmsg "FAIL: $testnum - $testname - valgrind\n";
                }
                else {
                    logmsg " valgrind ERROR ";
                    logmsg @e;
                }
                # timestamp test result verification end
                $timevrfyend{$testnum} = Time::HiRes::time();
                return 1;
            }
            $ok .= "v";
        }
        else {
            if(!$short && !$disablevalgrind) {
                logmsg " valgrind SKIPPED\n";
            }







|
















|














|












|







4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
                }
            }
            if($leak) {
                logmsg "\n** MEMORY FAILURE\n";
                logmsg @memdata;
                # timestamp test result verification end
                $timevrfyend{$testnum} = Time::HiRes::time();
                return $errorreturncode;
            }
            else {
                $ok .= "m";
            }
        }
    }
    else {
        $ok .= "-"; # memory not checked
    }

    if($valgrind) {
        if($usevalgrind) {
            unless(opendir(DIR, "$LOGDIR")) {
                logmsg "ERROR: unable to read $LOGDIR\n";
                # timestamp test result verification end
                $timevrfyend{$testnum} = Time::HiRes::time();
                return $errorreturncode;
            }
            my @files = readdir(DIR);
            closedir(DIR);
            my $vgfile;
            foreach my $file (@files) {
                if($file =~ /^valgrind$testnum(\..*|)$/) {
                    $vgfile = $file;
                    last;
                }
            }
            if(!$vgfile) {
                logmsg "ERROR: valgrind log file missing for test $testnum\n";
                # timestamp test result verification end
                $timevrfyend{$testnum} = Time::HiRes::time();
                return $errorreturncode;
            }
            my @e = valgrindparse("$LOGDIR/$vgfile");
            if(@e && $e[0]) {
                if($automakestyle) {
                    logmsg "FAIL: $testnum - $testname - valgrind\n";
                }
                else {
                    logmsg " valgrind ERROR ";
                    logmsg @e;
                }
                # timestamp test result verification end
                $timevrfyend{$testnum} = Time::HiRes::time();
                return $errorreturncode;
            }
            $ok .= "v";
        }
        else {
            if(!$short && !$disablevalgrind) {
                logmsg " valgrind SKIPPED\n";
            }
4329
4330
4331
4332
4333
4334
4335



4336
4337
4338
4339
4340
4341
4342
        logmsg sprintf("OK (%-3d out of %-3d, %s, took %.1fs, %s)\n",
                       $count, $total, $left, $took, $duration);
    }
    else {
        logmsg "PASS: $testnum - $testname\n";
    }





    return 0;
}

#######################################################################
# Stop all running test servers
#







>
>
>







4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
        logmsg sprintf("OK (%-3d out of %-3d, %s, took %.1fs, %s)\n",
                       $count, $total, $left, $took, $duration);
    }
    else {
        logmsg "PASS: $testnum - $testname\n";
    }

    if($errorreturncode==2) {
        logmsg "Warning: test$testnum result is ignored, but passed!\n";
    }

    return 0;
}

#######################################################################
# Stop all running test servers
#
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059




5060
5061
5062
5063
5064
5065
5066
        $torture=1;
        my $xtra = $1;

        if($xtra =~ s/(\d+)$//) {
            $tortalloc = $1;
        }
    }
    elsif($ARGV[0] =~ /--shallow=(\d+)(,|)(\d*)/) {
        # Fail no more than this amount per tests when running
        # torture.
        my ($num, $seed)=($1,$3);
        $shallow=$num;
        $shallowseed=$seed?$seed:1234; # get a real seed later
        srand($shallowseed); # make it predictable
    }
    elsif($ARGV[0] =~ /--repeat=(\d+)/) {
        # Repeat-run the given tests this many times
        $repeat = $1;




    }
    elsif($ARGV[0] eq "-a") {
        # continue anyway, even if a test fail
        $anyway=1;
    }
    elsif($ARGV[0] eq "-p") {
        $postmortem=1;







|


|

<
<




>
>
>
>







5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101


5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
        $torture=1;
        my $xtra = $1;

        if($xtra =~ s/(\d+)$//) {
            $tortalloc = $1;
        }
    }
    elsif($ARGV[0] =~ /--shallow=(\d+)/) {
        # Fail no more than this amount per tests when running
        # torture.
        my ($num)=($1);
        $shallow=$num;


    }
    elsif($ARGV[0] =~ /--repeat=(\d+)/) {
        # Repeat-run the given tests this many times
        $repeat = $1;
    }
    elsif($ARGV[0] =~ /--seed=(\d+)/) {
        # Set a fixed random seed (used for -R and --shallow)
        $randseed = $1;
    }
    elsif($ARGV[0] eq "-a") {
        # continue anyway, even if a test fail
        $anyway=1;
    }
    elsif($ARGV[0] eq "-p") {
        $postmortem=1;
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124

5125
5126
5127
5128
5129
5130

5131
5132

5133
5134
5135
5136
5137
5138
5139
  -g       run the test case with gdb
  -gw      run the test case with gdb as a windowed application
  -h       this help text
  -k       keep stdout and stderr files present after tests
  -l       list all test case names/descriptions
  -n       no valgrind
  -p       print log file contents when a test fails
  -R       scrambled order
  -r       run time statistics
  -rf      full run time statistics
  -s       short output

  --shallow=[num](,seed) make the torture tests thinner
  -t[N]    torture (simulate function failures); N means fail Nth function
  -v       verbose output
  -vc path use this curl only to verify the existing servers
  [num]    like "5 6 9" or " 5 to 22 " to run those tests only
  [!num]   like "!5 !6 !9" to disable those tests

  [keyword] like "IPv6" to select only tests containing the key word
  [!keyword] like "!cookies" to disable any tests containing the key word

EOHELP
    ;
        exit;
    }
    elsif($ARGV[0] =~ /^(\d+)/) {
        $number = $1;
        if($fromnum >= 0) {







|



>
|





>


>







5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
  -g       run the test case with gdb
  -gw      run the test case with gdb as a windowed application
  -h       this help text
  -k       keep stdout and stderr files present after tests
  -l       list all test case names/descriptions
  -n       no valgrind
  -p       print log file contents when a test fails
  -R       scrambled order (uses the random seed, see --seed)
  -r       run time statistics
  -rf      full run time statistics
  -s       short output
  --seed=[num] set the random seed to a fixed number
  --shallow=[num] randomly makes the torture tests "thinner"
  -t[N]    torture (simulate function failures); N means fail Nth function
  -v       verbose output
  -vc path use this curl only to verify the existing servers
  [num]    like "5 6 9" or " 5 to 22 " to run those tests only
  [!num]   like "!5 !6 !9" to disable those tests
  [~num]   like "~5 ~6 ~9" to ignore the result of those tests
  [keyword] like "IPv6" to select only tests containing the key word
  [!keyword] like "!cookies" to disable any tests containing the key word
  [~keyword] like "~cookies" to ignore results of tests containing key word
EOHELP
    ;
        exit;
    }
    elsif($ARGV[0] =~ /^(\d+)/) {
        $number = $1;
        if($fromnum >= 0) {
5157
5158
5159
5160
5161
5162
5163




5164
5165
5166
5167



5168
5169
5170
5171
5172
5173
5174
5175
5176














5177
5178
5179
5180
5181
5182
5183
    }
    elsif($ARGV[0] =~ /^to$/i) {
        $fromnum = $number+1;
    }
    elsif($ARGV[0] =~ /^!(\d+)/) {
        $fromnum = -1;
        $disabled{$1}=$1;




    }
    elsif($ARGV[0] =~ /^!(.+)/) {
        $disabled_keywords{lc($1)}=$1;
    }



    elsif($ARGV[0] =~ /^([-[{a-zA-Z].*)/) {
        $enabled_keywords{lc($1)}=$1;
    }
    else {
        print "Unknown option: $ARGV[0]\n";
        exit;
    }
    shift @ARGV;
}















if(@testthis && ($testthis[0] ne "")) {
    $TESTCASES=join(" ", @testthis);
}

if($valgrind) {
    # we have found valgrind on the host, use it







>
>
>
>




>
>
>









>
>
>
>
>
>
>
>
>
>
>
>
>
>







5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
    }
    elsif($ARGV[0] =~ /^to$/i) {
        $fromnum = $number+1;
    }
    elsif($ARGV[0] =~ /^!(\d+)/) {
        $fromnum = -1;
        $disabled{$1}=$1;
    }
    elsif($ARGV[0] =~ /^~(\d+)/) {
        $fromnum = -1;
        $ignored{$1}=$1;
    }
    elsif($ARGV[0] =~ /^!(.+)/) {
        $disabled_keywords{lc($1)}=$1;
    }
    elsif($ARGV[0] =~ /^~(.+)/) {
        $ignored_keywords{lc($1)}=$1;
    }
    elsif($ARGV[0] =~ /^([-[{a-zA-Z].*)/) {
        $enabled_keywords{lc($1)}=$1;
    }
    else {
        print "Unknown option: $ARGV[0]\n";
        exit;
    }
    shift @ARGV;
}

if(!$randseed) {
    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
        localtime(time);
    # seed of the month. December 2019 becomes 201912
    $randseed = ($year+1900)*100 + $mon+1;
    open(C, "$CURL --version 2>/dev/null|");
    my @c = <C>;
    close(C);
    # use the first line of output and get the md5 out of it
    my $str = md5($c[0]);
    $randseed += unpack('S', $str);  # unsigned 16 bit value
}
srand $randseed;

if(@testthis && ($testthis[0] ne "")) {
    $TESTCASES=join(" ", @testthis);
}

if($valgrind) {
    # we have found valgrind on the host, use it
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
        push @rand, $all[$r];
        $all[$r]="";
        $TESTCASES = join(" ", @all);
    }
    $TESTCASES = join(" ", @rand);
}

#######################################################################
# Start the command line log
#
open(CMDLOG, ">$CURLLOG") ||
    logmsg "can't log command lines to $CURLLOG\n";

#######################################################################

# Display the contents of the given file.  Line endings are canonicalized
# and excessively long files are elided
sub displaylogcontent {
    my ($file)=@_;
    if(open(SINGLE, "<$file")) {
        my $linecount = 0;
        my $truncate;







<
<
<
<
<
<
<
<







5442
5443
5444
5445
5446
5447
5448








5449
5450
5451
5452
5453
5454
5455
        push @rand, $all[$r];
        $all[$r]="";
        $TESTCASES = join(" ", @all);
    }
    $TESTCASES = join(" ", @rand);
}









# Display the contents of the given file.  Line endings are canonicalized
# and excessively long files are elided
sub displaylogcontent {
    my ($file)=@_;
    if(open(SINGLE, "<$file")) {
        my $linecount = 0;
        my $truncate;
5469
5470
5471
5472
5473
5474
5475









5476
5477
5478
5479
5480
5481
5482
5483

5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496










5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509



5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528



5529
5530
5531
5532
5533
5534
5535
            next; # skip valgrindNnn of other tests
        }
        logmsg "=== Start of file $log\n";
        displaylogcontent("$LOGDIR/$log");
        logmsg "=== End of file $log\n";
    }
}










#######################################################################
# The main test-loop
#

my $failed;
my $testnum;
my $ok=0;

my $total=0;
my $lasttest=0;
my @at = split(" ", $TESTCASES);
my $count=0;

$start = time();

foreach $testnum (@at) {

    $lasttest = $testnum if($testnum > $lasttest);
    $count++;

    my $error = singletest($run_event_based, $testnum, $count, scalar(@at));










    if($error < 0) {
        # not a test we can run
        next;
    }

    $total++; # number of tests we've run

    if($error>0) {
        $failed.= "$testnum ";
        if($postmortem) {
            # display all files in log/ in a nice way
            displaylogs($testnum);
        }



        if(!$anyway) {
            # a test failed, abort
            logmsg "\n - abort tests\n";
            last;
        }
    }
    elsif(!$error) {
        $ok++; # successful test counter
    }

    # loop for next test
}

my $sofar = time() - $start;

#######################################################################
# Close command log
#
close(CMDLOG);




# Tests done, stop the servers
stopservers($verbose);

my $all = $total + $skipped;

runtimestats($lasttest);







>
>
>
>
>
>
>
>
>








>













>
>
>
>
>
>
>
>
>
>













>
>
>
|















|

|
>
>
>







5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
            next; # skip valgrindNnn of other tests
        }
        logmsg "=== Start of file $log\n";
        displaylogcontent("$LOGDIR/$log");
        logmsg "=== End of file $log\n";
    }
}

#######################################################################
# Setup Azure Pipelines Test Run (if running in Azure DevOps)
#

if(azure_check_environment()) {
    $AZURE_RUN_ID = azure_create_test_run();
    logmsg "Azure Run ID: $AZURE_RUN_ID\n" if ($verbose);
}

#######################################################################
# The main test-loop
#

my $failed;
my $testnum;
my $ok=0;
my $ign=0;
my $total=0;
my $lasttest=0;
my @at = split(" ", $TESTCASES);
my $count=0;

$start = time();

foreach $testnum (@at) {

    $lasttest = $testnum if($testnum > $lasttest);
    $count++;

    my $error = singletest($run_event_based, $testnum, $count, scalar(@at));

    # update test result in CI services
    if(azure_check_environment() && $AZURE_RUN_ID && $AZURE_RESULT_ID) {
        $AZURE_RESULT_ID = azure_update_test_result($AZURE_RUN_ID, $AZURE_RESULT_ID, $testnum, $error,
                                                    $timeprepini{$testnum}, $timevrfyend{$testnum});
    }
    elsif(appveyor_check_environment()) {
        appveyor_update_test_result($testnum, $error, $timeprepini{$testnum}, $timevrfyend{$testnum});
    }

    if($error < 0) {
        # not a test we can run
        next;
    }

    $total++; # number of tests we've run

    if($error>0) {
        $failed.= "$testnum ";
        if($postmortem) {
            # display all files in log/ in a nice way
            displaylogs($testnum);
        }
        if($error==2) {
            $ign++; # ignored test result counter
        }
        elsif(!$anyway) {
            # a test failed, abort
            logmsg "\n - abort tests\n";
            last;
        }
    }
    elsif(!$error) {
        $ok++; # successful test counter
    }

    # loop for next test
}

my $sofar = time() - $start;

#######################################################################
# Finish Azure Pipelines Test Run (if running in Azure DevOps)
#

if(azure_check_environment() && $AZURE_RUN_ID) {
    $AZURE_RUN_ID = azure_update_test_run($AZURE_RUN_ID);
}

# Tests done, stop the servers
stopservers($verbose);

my $all = $total + $skipped;

runtimestats($lasttest);
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
        if($c > $max) {
            logmsg " and ".($c-$max)." more";
        }
        logmsg ")\n";
    }
}

if($total && ($ok != $total)) {
    exit 1;
}







|


5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
        if($c > $max) {
            logmsg " and ".($c-$max)." more";
        }
        logmsg ")\n";
    }
}

if($total && (($ok+$ign) != $total)) {
    exit 1;
}
Changes to jni/curl/tests/server/Makefile.in.
542
543
544
545
546
547
548

549
550
551
552
553
554
555
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@

USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@







>







542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
USE_WOLFSSH = @USE_WOLFSSH@
USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
Changes to jni/curl/tests/server/sws.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
114
115
116
117
118
119
120


121
122
123
124
125
126
127
  int skip;       /* if non-zero, the server is instructed to not read this
                     many bytes from a PUT/POST request. Ie the client sends N
                     bytes said in Content-Length, but the server only reads N
                     - skip bytes. */
  int rcmd;       /* doing a special command, see defines above */
  int prot_version;  /* HTTP version * 10 */
  int callcount;  /* times ProcessRequest() gets called */


  bool connmon;   /* monitor the state of the connection, log disconnects */
  bool upgrade;   /* test case allows upgrade to http2 */
  bool upgrade_request; /* upgrade request found and allowed */
  bool close;     /* similar to swsclose in response: close connection after
                     response is sent */
  int done_processing;
};







>
>







114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
  int skip;       /* if non-zero, the server is instructed to not read this
                     many bytes from a PUT/POST request. Ie the client sends N
                     bytes said in Content-Length, but the server only reads N
                     - skip bytes. */
  int rcmd;       /* doing a special command, see defines above */
  int prot_version;  /* HTTP version * 10 */
  int callcount;  /* times ProcessRequest() gets called */
  bool skipall;   /* skip all incoming data */
  bool noexpect;  /* refuse Expect: (don't read the body) */
  bool connmon;   /* monitor the state of the connection, log disconnects */
  bool upgrade;   /* test case allows upgrade to http2 */
  bool upgrade_request; /* upgrade request found and allowed */
  bool close;     /* similar to swsclose in response: close connection after
                     response is sent */
  int done_processing;
};
175
176
177
178
179
180
181



182
183
184
185
186
187
188

/* upgrade to http2 */
#define CMD_UPGRADE "upgrade"

/* close connection */
#define CMD_SWSCLOSE "swsclose"




#define END_OF_HEADERS "\r\n\r\n"

enum {
  DOCNUMBER_NOTHING = -4,
  DOCNUMBER_QUIT    = -3,
  DOCNUMBER_WERULEZ = -2,
  DOCNUMBER_404     = -1







>
>
>







177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193

/* upgrade to http2 */
#define CMD_UPGRADE "upgrade"

/* close connection */
#define CMD_SWSCLOSE "swsclose"

/* deny Expect: requests */
#define CMD_NOEXPECT "no-expect"

#define END_OF_HEADERS "\r\n\r\n"

enum {
  DOCNUMBER_NOTHING = -4,
  DOCNUMBER_QUIT    = -3,
  DOCNUMBER_WERULEZ = -2,
  DOCNUMBER_404     = -1
422
423
424
425
426
427
428




429
430
431
432
433
434
435
      else if(!strncmp(CMD_SWSCLOSE, cmd, strlen(CMD_SWSCLOSE))) {
        logmsg("swsclose: close this connection after response");
        req->close = TRUE;
      }
      else if(1 == sscanf(cmd, "skip: %d", &num)) {
        logmsg("instructed to skip this number of bytes %d", num);
        req->skip = num;




      }
      else if(1 == sscanf(cmd, "writedelay: %d", &num)) {
        logmsg("instructed to delay %d secs between packets", num);
        req->writedelay = num;
      }
      else {
        logmsg("Unknown <servercmd> instruction found: %s", cmd);







>
>
>
>







427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
      else if(!strncmp(CMD_SWSCLOSE, cmd, strlen(CMD_SWSCLOSE))) {
        logmsg("swsclose: close this connection after response");
        req->close = TRUE;
      }
      else if(1 == sscanf(cmd, "skip: %d", &num)) {
        logmsg("instructed to skip this number of bytes %d", num);
        req->skip = num;
      }
      else if(!strncmp(CMD_NOEXPECT, cmd, strlen(CMD_NOEXPECT))) {
        logmsg("instructed to reject Expect: 100-continue");
        req->noexpect = TRUE;
      }
      else if(1 == sscanf(cmd, "writedelay: %d", &num)) {
        logmsg("instructed to delay %d secs between packets", num);
        req->writedelay = num;
      }
      else {
        logmsg("Unknown <servercmd> instruction found: %s", cmd);
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
        }
        logmsg("Port number: %d, test case number: %ld",
               req->connect_port, req->testno);
      }
    }

    if(req->testno == DOCNUMBER_NOTHING) {
      /* Still no test case number. Try to get the the number off the last dot
         instead, IE we consider the TLD to be the test number. Test 123 can
         then be written as "example.com.123". */

      /* find the last dot */
      ptr = strrchr(doc, '.');

      /* get the number after it */







|







610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
        }
        logmsg("Port number: %d, test case number: %ld",
               req->connect_port, req->testno);
      }
    }

    if(req->testno == DOCNUMBER_NOTHING) {
      /* Still no test case number. Try to get the number off the last dot
         instead, IE we consider the TLD to be the test number. Test 123 can
         then be written as "example.com.123". */

      /* find the last dot */
      ptr = strrchr(doc, '.');

      /* get the number after it */
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
      clen = strtoul(ptr, &endptr, 10);
      if((ptr == endptr) || !ISSPACE(*endptr) || (ERANGE == errno)) {
        /* this assumes that a zero Content-Length is valid */
        logmsg("Found invalid Content-Length: (%s) in the request", ptr);
        req->open = FALSE; /* closes connection */
        return 1; /* done */
      }



      req->cl = clen - req->skip;

      logmsg("Found Content-Length: %lu in the request", clen);
      if(req->skip)
        logmsg("... but will abort after %zu bytes", req->cl);
      break;
    }
    else if(strncasecompare("Transfer-Encoding: chunked", line,
                            strlen("Transfer-Encoding: chunked"))) {
      /* chunked data coming in */
      chunked = TRUE;
    }









    if(chunked) {
      if(strstr(req->reqbuf, "\r\n0\r\n\r\n")) {
        /* end of chunks reached */
        return 1; /* done */
      }
      else if(strstr(req->reqbuf, "\r\n0\r\n")) {







>
>
>
|




<






>
>
>
>
>
>
>
|







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
      clen = strtoul(ptr, &endptr, 10);
      if((ptr == endptr) || !ISSPACE(*endptr) || (ERANGE == errno)) {
        /* this assumes that a zero Content-Length is valid */
        logmsg("Found invalid Content-Length: (%s) in the request", ptr);
        req->open = FALSE; /* closes connection */
        return 1; /* done */
      }
      if(req->skipall)
        req->cl = 0;
      else
        req->cl = clen - req->skip;

      logmsg("Found Content-Length: %lu in the request", clen);
      if(req->skip)
        logmsg("... but will abort after %zu bytes", req->cl);

    }
    else if(strncasecompare("Transfer-Encoding: chunked", line,
                            strlen("Transfer-Encoding: chunked"))) {
      /* chunked data coming in */
      chunked = TRUE;
    }
    else if(req->noexpect &&
            strncasecompare("Expect: 100-continue", line,
                            strlen("Expect: 100-continue"))) {
      if(req->cl)
        req->cl = 0;
      req->skipall = TRUE;
      logmsg("Found Expect: 100-continue, ignore body");
    }

    if(chunked) {
      if(strstr(req->reqbuf, "\r\n0\r\n\r\n")) {
        /* end of chunks reached */
        return 1; /* done */
      }
      else if(strstr(req->reqbuf, "\r\n0\r\n")) {
935
936
937
938
939
940
941


942
943
944
945
946
947
948
  req->open = TRUE;
  req->auth_req = FALSE;
  req->auth = FALSE;
  req->cl = 0;
  req->digest = FALSE;
  req->ntlm = FALSE;
  req->skip = 0;


  req->writedelay = 0;
  req->rcmd = RCMD_NORMALREQ;
  req->prot_version = 0;
  req->callcount = 0;
  req->connect_port = 0;
  req->done_processing = 0;
  req->upgrade = 0;







>
>







953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
  req->open = TRUE;
  req->auth_req = FALSE;
  req->auth = FALSE;
  req->cl = 0;
  req->digest = FALSE;
  req->ntlm = FALSE;
  req->skip = 0;
  req->skipall = FALSE;
  req->noexpect = FALSE;
  req->writedelay = 0;
  req->rcmd = RCMD_NORMALREQ;
  req->prot_version = 0;
  req->callcount = 0;
  req->connect_port = 0;
  req->done_processing = 0;
  req->upgrade = 0;
jni/curl/tests/sshserver.pl became a regular file.
jni/curl/tests/symbol-scan.pl became executable.
Changes to jni/curl/tests/testcurl.1.
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH testcurl.pl 1 "October 22, 2016" "Curl 7.68.0" "testcurl"

.SH NAME
testcurl.pl \- (automatically) test curl
.SH SYNOPSIS
.B testcurl.pl [options] [dir] > output
.SH DESCRIPTION
\fItestcurl.pl\fP is the master script to use for automatic testing of curl







|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH testcurl.pl 1 "October 22, 2016" "Curl 7.69.0" "testcurl"

.SH NAME
testcurl.pl \- (automatically) test curl
.SH SYNOPSIS
.B testcurl.pl [options] [dir] > output
.SH DESCRIPTION
\fItestcurl.pl\fP is the master script to use for automatic testing of curl
Changes to jni/curl/tests/unit/Makefile.in.
10
11
12
13
14
15
16






















17
18
19
20
21
22
23
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

@SET_MAKE@























# these files are used in every single unit test program

VPATH = @srcdir@
am__is_gnu_make = { \
  if test -z '$(MAKELEVEL)'; then \
    false; \
  elif test -n '$(MAKE_HOST)'; then \







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

@SET_MAKE@

#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
# furnished to do so, under the terms of the COPYING file.
#
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
# KIND, either express or implied.
#
###########################################################################

# these files are used in every single unit test program

VPATH = @srcdir@
am__is_gnu_make = { \
  if test -z '$(MAKELEVEL)'; then \
    false; \
  elif test -n '$(MAKE_HOST)'; then \
123
124
125
126
127
128
129

130
131
132
133
134
135
136
	unit1307$(EXEEXT) unit1308$(EXEEXT) unit1309$(EXEEXT) \
	unit1323$(EXEEXT) unit1330$(EXEEXT) unit1394$(EXEEXT) \
	unit1395$(EXEEXT) unit1396$(EXEEXT) unit1397$(EXEEXT) \
	unit1398$(EXEEXT) unit1399$(EXEEXT) unit1600$(EXEEXT) \
	unit1601$(EXEEXT) unit1602$(EXEEXT) unit1603$(EXEEXT) \
	unit1604$(EXEEXT) unit1605$(EXEEXT) unit1606$(EXEEXT) \
	unit1607$(EXEEXT) unit1608$(EXEEXT) unit1609$(EXEEXT) \

	unit1620$(EXEEXT) unit1621$(EXEEXT) unit1650$(EXEEXT) \
	unit1651$(EXEEXT) unit1652$(EXEEXT) unit1653$(EXEEXT) \
	unit1654$(EXEEXT) unit1655$(EXEEXT)
PROGRAMS = $(noinst_PROGRAMS)
am__dirstamp = $(am__leading_dot)dirstamp
am__objects_1 = ../libtest/unit1300-first.$(OBJEXT)
am_unit1300_OBJECTS = unit1300-unit1300.$(OBJEXT) $(am__objects_1)







>







145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
	unit1307$(EXEEXT) unit1308$(EXEEXT) unit1309$(EXEEXT) \
	unit1323$(EXEEXT) unit1330$(EXEEXT) unit1394$(EXEEXT) \
	unit1395$(EXEEXT) unit1396$(EXEEXT) unit1397$(EXEEXT) \
	unit1398$(EXEEXT) unit1399$(EXEEXT) unit1600$(EXEEXT) \
	unit1601$(EXEEXT) unit1602$(EXEEXT) unit1603$(EXEEXT) \
	unit1604$(EXEEXT) unit1605$(EXEEXT) unit1606$(EXEEXT) \
	unit1607$(EXEEXT) unit1608$(EXEEXT) unit1609$(EXEEXT) \
	unit1610$(EXEEXT) unit1611$(EXEEXT) unit1612$(EXEEXT) \
	unit1620$(EXEEXT) unit1621$(EXEEXT) unit1650$(EXEEXT) \
	unit1651$(EXEEXT) unit1652$(EXEEXT) unit1653$(EXEEXT) \
	unit1654$(EXEEXT) unit1655$(EXEEXT)
PROGRAMS = $(noinst_PROGRAMS)
am__dirstamp = $(am__leading_dot)dirstamp
am__objects_1 = ../libtest/unit1300-first.$(OBJEXT)
am_unit1300_OBJECTS = unit1300-unit1300.$(OBJEXT) $(am__objects_1)
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
	$(top_builddir)/lib/libcurlu.la
am__objects_27 = ../libtest/unit1609-first.$(OBJEXT)
am_unit1609_OBJECTS = unit1609-unit1609.$(OBJEXT) $(am__objects_27)
unit1609_OBJECTS = $(am_unit1609_OBJECTS)
unit1609_LDADD = $(LDADD)
unit1609_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
	$(top_builddir)/lib/libcurlu.la
am__objects_28 = ../libtest/unit1620-first.$(OBJEXT)


















am_unit1620_OBJECTS = unit1620-unit1620.$(OBJEXT) $(am__objects_28)
unit1620_OBJECTS = $(am_unit1620_OBJECTS)
unit1620_LDADD = $(LDADD)
unit1620_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
	$(top_builddir)/lib/libcurlu.la
am__objects_29 = ../libtest/unit1621-first.$(OBJEXT)
am_unit1621_OBJECTS = unit1621-unit1621.$(OBJEXT) $(am__objects_29)
unit1621_OBJECTS = $(am_unit1621_OBJECTS)
unit1621_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
	$(top_builddir)/lib/libcurl.la
am__objects_30 = ../libtest/unit1650-first.$(OBJEXT)
am_unit1650_OBJECTS = unit1650-unit1650.$(OBJEXT) $(am__objects_30)
unit1650_OBJECTS = $(am_unit1650_OBJECTS)
unit1650_LDADD = $(LDADD)
unit1650_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
	$(top_builddir)/lib/libcurlu.la
am__objects_31 = ../libtest/unit1651-first.$(OBJEXT)
am_unit1651_OBJECTS = unit1651-unit1651.$(OBJEXT) $(am__objects_31)
unit1651_OBJECTS = $(am_unit1651_OBJECTS)
unit1651_LDADD = $(LDADD)
unit1651_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
	$(top_builddir)/lib/libcurlu.la
am__objects_32 = ../libtest/unit1652-first.$(OBJEXT)
am_unit1652_OBJECTS = unit1652-unit1652.$(OBJEXT) $(am__objects_32)
unit1652_OBJECTS = $(am_unit1652_OBJECTS)
unit1652_LDADD = $(LDADD)
unit1652_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
	$(top_builddir)/lib/libcurlu.la
am__objects_33 = ../libtest/unit1653-first.$(OBJEXT)
am_unit1653_OBJECTS = unit1653-unit1653.$(OBJEXT) $(am__objects_33)
unit1653_OBJECTS = $(am_unit1653_OBJECTS)
unit1653_LDADD = $(LDADD)
unit1653_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
	$(top_builddir)/lib/libcurlu.la
am__objects_34 = ../libtest/unit1654-first.$(OBJEXT)
am_unit1654_OBJECTS = unit1654-unit1654.$(OBJEXT) $(am__objects_34)
unit1654_OBJECTS = $(am_unit1654_OBJECTS)
unit1654_LDADD = $(LDADD)
unit1654_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
	$(top_builddir)/lib/libcurlu.la
am__objects_35 = ../libtest/unit1655-first.$(OBJEXT)
am_unit1655_OBJECTS = unit1655-unit1655.$(OBJEXT) $(am__objects_35)
unit1655_OBJECTS = $(am_unit1655_OBJECTS)
unit1655_LDADD = $(LDADD)
unit1655_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
	$(top_builddir)/lib/libcurlu.la
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false







|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|




|
|



|
|




|
|




|
|




|
|




|
|




|
|







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
	$(top_builddir)/lib/libcurlu.la
am__objects_27 = ../libtest/unit1609-first.$(OBJEXT)
am_unit1609_OBJECTS = unit1609-unit1609.$(OBJEXT) $(am__objects_27)
unit1609_OBJECTS = $(am_unit1609_OBJECTS)
unit1609_LDADD = $(LDADD)
unit1609_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
	$(top_builddir)/lib/libcurlu.la
am__objects_28 = ../libtest/unit1610-first.$(OBJEXT)
am_unit1610_OBJECTS = unit1610-unit1610.$(OBJEXT) $(am__objects_28)
unit1610_OBJECTS = $(am_unit1610_OBJECTS)
unit1610_LDADD = $(LDADD)
unit1610_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
	$(top_builddir)/lib/libcurlu.la
am__objects_29 = ../libtest/unit1611-first.$(OBJEXT)
am_unit1611_OBJECTS = unit1611-unit1611.$(OBJEXT) $(am__objects_29)
unit1611_OBJECTS = $(am_unit1611_OBJECTS)
unit1611_LDADD = $(LDADD)
unit1611_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
	$(top_builddir)/lib/libcurlu.la
am__objects_30 = ../libtest/unit1612-first.$(OBJEXT)
am_unit1612_OBJECTS = unit1612-unit1611.$(OBJEXT) $(am__objects_30)
unit1612_OBJECTS = $(am_unit1612_OBJECTS)
unit1612_LDADD = $(LDADD)
unit1612_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
	$(top_builddir)/lib/libcurlu.la
am__objects_31 = ../libtest/unit1620-first.$(OBJEXT)
am_unit1620_OBJECTS = unit1620-unit1620.$(OBJEXT) $(am__objects_31)
unit1620_OBJECTS = $(am_unit1620_OBJECTS)
unit1620_LDADD = $(LDADD)
unit1620_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
	$(top_builddir)/lib/libcurlu.la
am__objects_32 = ../libtest/unit1621-first.$(OBJEXT)
am_unit1621_OBJECTS = unit1621-unit1621.$(OBJEXT) $(am__objects_32)
unit1621_OBJECTS = $(am_unit1621_OBJECTS)
unit1621_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
	$(top_builddir)/lib/libcurl.la
am__objects_33 = ../libtest/unit1650-first.$(OBJEXT)
am_unit1650_OBJECTS = unit1650-unit1650.$(OBJEXT) $(am__objects_33)
unit1650_OBJECTS = $(am_unit1650_OBJECTS)
unit1650_LDADD = $(LDADD)
unit1650_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
	$(top_builddir)/lib/libcurlu.la
am__objects_34 = ../libtest/unit1651-first.$(OBJEXT)
am_unit1651_OBJECTS = unit1651-unit1651.$(OBJEXT) $(am__objects_34)
unit1651_OBJECTS = $(am_unit1651_OBJECTS)
unit1651_LDADD = $(LDADD)
unit1651_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
	$(top_builddir)/lib/libcurlu.la
am__objects_35 = ../libtest/unit1652-first.$(OBJEXT)
am_unit1652_OBJECTS = unit1652-unit1652.$(OBJEXT) $(am__objects_35)
unit1652_OBJECTS = $(am_unit1652_OBJECTS)
unit1652_LDADD = $(LDADD)
unit1652_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
	$(top_builddir)/lib/libcurlu.la
am__objects_36 = ../libtest/unit1653-first.$(OBJEXT)
am_unit1653_OBJECTS = unit1653-unit1653.$(OBJEXT) $(am__objects_36)
unit1653_OBJECTS = $(am_unit1653_OBJECTS)
unit1653_LDADD = $(LDADD)
unit1653_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
	$(top_builddir)/lib/libcurlu.la
am__objects_37 = ../libtest/unit1654-first.$(OBJEXT)
am_unit1654_OBJECTS = unit1654-unit1654.$(OBJEXT) $(am__objects_37)
unit1654_OBJECTS = $(am_unit1654_OBJECTS)
unit1654_LDADD = $(LDADD)
unit1654_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
	$(top_builddir)/lib/libcurlu.la
am__objects_38 = ../libtest/unit1655-first.$(OBJEXT)
am_unit1655_OBJECTS = unit1655-unit1655.$(OBJEXT) $(am__objects_38)
unit1655_OBJECTS = $(am_unit1655_OBJECTS)
unit1655_LDADD = $(LDADD)
unit1655_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
	$(top_builddir)/lib/libcurlu.la
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
384
385
386
387
388
389
390



391
392
393
394
395
396
397
	../libtest/$(DEPDIR)/unit1603-first.Po \
	../libtest/$(DEPDIR)/unit1604-first.Po \
	../libtest/$(DEPDIR)/unit1605-first.Po \
	../libtest/$(DEPDIR)/unit1606-first.Po \
	../libtest/$(DEPDIR)/unit1607-first.Po \
	../libtest/$(DEPDIR)/unit1608-first.Po \
	../libtest/$(DEPDIR)/unit1609-first.Po \



	../libtest/$(DEPDIR)/unit1620-first.Po \
	../libtest/$(DEPDIR)/unit1621-first.Po \
	../libtest/$(DEPDIR)/unit1650-first.Po \
	../libtest/$(DEPDIR)/unit1651-first.Po \
	../libtest/$(DEPDIR)/unit1652-first.Po \
	../libtest/$(DEPDIR)/unit1653-first.Po \
	../libtest/$(DEPDIR)/unit1654-first.Po \







>
>
>







425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
	../libtest/$(DEPDIR)/unit1603-first.Po \
	../libtest/$(DEPDIR)/unit1604-first.Po \
	../libtest/$(DEPDIR)/unit1605-first.Po \
	../libtest/$(DEPDIR)/unit1606-first.Po \
	../libtest/$(DEPDIR)/unit1607-first.Po \
	../libtest/$(DEPDIR)/unit1608-first.Po \
	../libtest/$(DEPDIR)/unit1609-first.Po \
	../libtest/$(DEPDIR)/unit1610-first.Po \
	../libtest/$(DEPDIR)/unit1611-first.Po \
	../libtest/$(DEPDIR)/unit1612-first.Po \
	../libtest/$(DEPDIR)/unit1620-first.Po \
	../libtest/$(DEPDIR)/unit1621-first.Po \
	../libtest/$(DEPDIR)/unit1650-first.Po \
	../libtest/$(DEPDIR)/unit1651-first.Po \
	../libtest/$(DEPDIR)/unit1652-first.Po \
	../libtest/$(DEPDIR)/unit1653-first.Po \
	../libtest/$(DEPDIR)/unit1654-first.Po \
419
420
421
422
423
424
425



426
427
428
429
430
431
432
	./$(DEPDIR)/unit1603-unit1603.Po \
	./$(DEPDIR)/unit1604-unit1604.Po \
	./$(DEPDIR)/unit1605-unit1605.Po \
	./$(DEPDIR)/unit1606-unit1606.Po \
	./$(DEPDIR)/unit1607-unit1607.Po \
	./$(DEPDIR)/unit1608-unit1608.Po \
	./$(DEPDIR)/unit1609-unit1609.Po \



	./$(DEPDIR)/unit1620-unit1620.Po \
	./$(DEPDIR)/unit1621-unit1621.Po \
	./$(DEPDIR)/unit1650-unit1650.Po \
	./$(DEPDIR)/unit1651-unit1651.Po \
	./$(DEPDIR)/unit1652-unit1652.Po \
	./$(DEPDIR)/unit1653-unit1653.Po \
	./$(DEPDIR)/unit1654-unit1654.Po \







>
>
>







463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
	./$(DEPDIR)/unit1603-unit1603.Po \
	./$(DEPDIR)/unit1604-unit1604.Po \
	./$(DEPDIR)/unit1605-unit1605.Po \
	./$(DEPDIR)/unit1606-unit1606.Po \
	./$(DEPDIR)/unit1607-unit1607.Po \
	./$(DEPDIR)/unit1608-unit1608.Po \
	./$(DEPDIR)/unit1609-unit1609.Po \
	./$(DEPDIR)/unit1610-unit1610.Po \
	./$(DEPDIR)/unit1611-unit1611.Po \
	./$(DEPDIR)/unit1612-unit1611.Po \
	./$(DEPDIR)/unit1620-unit1620.Po \
	./$(DEPDIR)/unit1621-unit1621.Po \
	./$(DEPDIR)/unit1650-unit1650.Po \
	./$(DEPDIR)/unit1651-unit1651.Po \
	./$(DEPDIR)/unit1652-unit1652.Po \
	./$(DEPDIR)/unit1653-unit1653.Po \
	./$(DEPDIR)/unit1654-unit1654.Po \
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
	$(unit1307_SOURCES) $(unit1308_SOURCES) $(unit1309_SOURCES) \
	$(unit1323_SOURCES) $(unit1330_SOURCES) $(unit1394_SOURCES) \
	$(unit1395_SOURCES) $(unit1396_SOURCES) $(unit1397_SOURCES) \
	$(unit1398_SOURCES) $(unit1399_SOURCES) $(unit1600_SOURCES) \
	$(unit1601_SOURCES) $(unit1602_SOURCES) $(unit1603_SOURCES) \
	$(unit1604_SOURCES) $(unit1605_SOURCES) $(unit1606_SOURCES) \
	$(unit1607_SOURCES) $(unit1608_SOURCES) $(unit1609_SOURCES) \

	$(unit1620_SOURCES) $(unit1621_SOURCES) $(unit1650_SOURCES) \
	$(unit1651_SOURCES) $(unit1652_SOURCES) $(unit1653_SOURCES) \
	$(unit1654_SOURCES) $(unit1655_SOURCES)
DIST_SOURCES = $(unit1300_SOURCES) $(unit1301_SOURCES) \
	$(unit1302_SOURCES) $(unit1303_SOURCES) $(unit1304_SOURCES) \
	$(unit1305_SOURCES) $(unit1307_SOURCES) $(unit1308_SOURCES) \
	$(unit1309_SOURCES) $(unit1323_SOURCES) $(unit1330_SOURCES) \
	$(unit1394_SOURCES) $(unit1395_SOURCES) $(unit1396_SOURCES) \
	$(unit1397_SOURCES) $(unit1398_SOURCES) $(unit1399_SOURCES) \
	$(unit1600_SOURCES) $(unit1601_SOURCES) $(unit1602_SOURCES) \
	$(unit1603_SOURCES) $(unit1604_SOURCES) $(unit1605_SOURCES) \
	$(unit1606_SOURCES) $(unit1607_SOURCES) $(unit1608_SOURCES) \

	$(unit1609_SOURCES) $(unit1620_SOURCES) $(unit1621_SOURCES) \
	$(unit1650_SOURCES) $(unit1651_SOURCES) $(unit1652_SOURCES) \
	$(unit1653_SOURCES) $(unit1654_SOURCES) $(unit1655_SOURCES)
am__can_run_installinfo = \
  case $$AM_UPDATE_INFO_DIR in \
    n|no|NO) false;; \
    *) (install-info --version) >/dev/null 2>&1;; \
  esac







>












>
|







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
	$(unit1307_SOURCES) $(unit1308_SOURCES) $(unit1309_SOURCES) \
	$(unit1323_SOURCES) $(unit1330_SOURCES) $(unit1394_SOURCES) \
	$(unit1395_SOURCES) $(unit1396_SOURCES) $(unit1397_SOURCES) \
	$(unit1398_SOURCES) $(unit1399_SOURCES) $(unit1600_SOURCES) \
	$(unit1601_SOURCES) $(unit1602_SOURCES) $(unit1603_SOURCES) \
	$(unit1604_SOURCES) $(unit1605_SOURCES) $(unit1606_SOURCES) \
	$(unit1607_SOURCES) $(unit1608_SOURCES) $(unit1609_SOURCES) \
	$(unit1610_SOURCES) $(unit1611_SOURCES) $(unit1612_SOURCES) \
	$(unit1620_SOURCES) $(unit1621_SOURCES) $(unit1650_SOURCES) \
	$(unit1651_SOURCES) $(unit1652_SOURCES) $(unit1653_SOURCES) \
	$(unit1654_SOURCES) $(unit1655_SOURCES)
DIST_SOURCES = $(unit1300_SOURCES) $(unit1301_SOURCES) \
	$(unit1302_SOURCES) $(unit1303_SOURCES) $(unit1304_SOURCES) \
	$(unit1305_SOURCES) $(unit1307_SOURCES) $(unit1308_SOURCES) \
	$(unit1309_SOURCES) $(unit1323_SOURCES) $(unit1330_SOURCES) \
	$(unit1394_SOURCES) $(unit1395_SOURCES) $(unit1396_SOURCES) \
	$(unit1397_SOURCES) $(unit1398_SOURCES) $(unit1399_SOURCES) \
	$(unit1600_SOURCES) $(unit1601_SOURCES) $(unit1602_SOURCES) \
	$(unit1603_SOURCES) $(unit1604_SOURCES) $(unit1605_SOURCES) \
	$(unit1606_SOURCES) $(unit1607_SOURCES) $(unit1608_SOURCES) \
	$(unit1609_SOURCES) $(unit1610_SOURCES) $(unit1611_SOURCES) \
	$(unit1612_SOURCES) $(unit1620_SOURCES) $(unit1621_SOURCES) \
	$(unit1650_SOURCES) $(unit1651_SOURCES) $(unit1652_SOURCES) \
	$(unit1653_SOURCES) $(unit1654_SOURCES) $(unit1655_SOURCES)
am__can_run_installinfo = \
  case $$AM_UPDATE_INFO_DIR in \
    n|no|NO) false;; \
    *) (install-info --version) >/dev/null 2>&1;; \
  esac
643
644
645
646
647
648
649

650
651
652
653
654
655
656
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@

USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@







>







692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_SCHANNEL = @USE_SCHANNEL@
USE_SECTRANSP = @USE_SECTRANSP@
USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
USE_WOLFSSH = @USE_WOLFSSH@
USE_WOLFSSL = @USE_WOLFSSL@
VERSION = @VERSION@
VERSIONNUM = @VERSIONNUM@
ZLIB_LIBS = @ZLIB_LIBS@
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
767
768
769
770
771
772
773
774

775
776
777
778
779
780
781

# These are all unit test programs
UNITPROGS = unit1300 unit1301 unit1302 unit1303 unit1304 unit1305 unit1307 \
 unit1308 unit1309 unit1323 \
 unit1330 unit1394 unit1395 unit1396 unit1397 unit1398 \
 unit1399 \
 unit1600 unit1601 unit1602 unit1603 unit1604 unit1605 unit1606 unit1607 \
 unit1608 unit1609 unit1620 unit1621 \

 unit1650 unit1651 unit1652 unit1653 unit1654 unit1655

unit1300_SOURCES = unit1300.c $(UNITFILES)
unit1300_CPPFLAGS = $(AM_CPPFLAGS)
unit1301_SOURCES = unit1301.c $(UNITFILES)
unit1301_CPPFLAGS = $(AM_CPPFLAGS)
unit1302_SOURCES = unit1302.c $(UNITFILES)







|
>







817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832

# These are all unit test programs
UNITPROGS = unit1300 unit1301 unit1302 unit1303 unit1304 unit1305 unit1307 \
 unit1308 unit1309 unit1323 \
 unit1330 unit1394 unit1395 unit1396 unit1397 unit1398 \
 unit1399 \
 unit1600 unit1601 unit1602 unit1603 unit1604 unit1605 unit1606 unit1607 \
 unit1608 unit1609 unit1610 unit1611 unit1612 \
 unit1620 unit1621 \
 unit1650 unit1651 unit1652 unit1653 unit1654 unit1655

unit1300_SOURCES = unit1300.c $(UNITFILES)
unit1300_CPPFLAGS = $(AM_CPPFLAGS)
unit1301_SOURCES = unit1301.c $(UNITFILES)
unit1301_CPPFLAGS = $(AM_CPPFLAGS)
unit1302_SOURCES = unit1302.c $(UNITFILES)
827
828
829
830
831
832
833






834
835
836
837
838
839
840
unit1606_CPPFLAGS = $(AM_CPPFLAGS)
unit1607_SOURCES = unit1607.c $(UNITFILES)
unit1607_CPPFLAGS = $(AM_CPPFLAGS)
unit1608_SOURCES = unit1608.c $(UNITFILES)
unit1608_CPPFLAGS = $(AM_CPPFLAGS)
unit1609_SOURCES = unit1609.c $(UNITFILES)
unit1609_CPPFLAGS = $(AM_CPPFLAGS)






unit1620_SOURCES = unit1620.c $(UNITFILES)
unit1620_CPPFLAGS = $(AM_CPPFLAGS)
unit1621_SOURCES = unit1621.c $(UNITFILES)
unit1621_CPPFLAGS = $(AM_CPPFLAGS)
unit1621_LDADD = $(top_builddir)/src/libcurltool.la $(top_builddir)/lib/libcurl.la
unit1650_SOURCES = unit1650.c $(UNITFILES)
unit1650_CPPFLAGS = $(AM_CPPFLAGS)







>
>
>
>
>
>







878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
unit1606_CPPFLAGS = $(AM_CPPFLAGS)
unit1607_SOURCES = unit1607.c $(UNITFILES)
unit1607_CPPFLAGS = $(AM_CPPFLAGS)
unit1608_SOURCES = unit1608.c $(UNITFILES)
unit1608_CPPFLAGS = $(AM_CPPFLAGS)
unit1609_SOURCES = unit1609.c $(UNITFILES)
unit1609_CPPFLAGS = $(AM_CPPFLAGS)
unit1610_SOURCES = unit1610.c $(UNITFILES)
unit1610_CPPFLAGS = $(AM_CPPFLAGS)
unit1611_SOURCES = unit1611.c $(UNITFILES)
unit1611_CPPFLAGS = $(AM_CPPFLAGS)
unit1612_SOURCES = unit1611.c $(UNITFILES)
unit1612_CPPFLAGS = $(AM_CPPFLAGS)
unit1620_SOURCES = unit1620.c $(UNITFILES)
unit1620_CPPFLAGS = $(AM_CPPFLAGS)
unit1621_SOURCES = unit1621.c $(UNITFILES)
unit1621_CPPFLAGS = $(AM_CPPFLAGS)
unit1621_LDADD = $(top_builddir)/src/libcurltool.la $(top_builddir)/lib/libcurl.la
unit1650_SOURCES = unit1650.c $(UNITFILES)
unit1650_CPPFLAGS = $(AM_CPPFLAGS)
1061
1062
1063
1064
1065
1066
1067


















1068
1069
1070
1071
1072
1073
1074
	$(AM_V_CCLD)$(LINK) $(unit1608_OBJECTS) $(unit1608_LDADD) $(LIBS)
../libtest/unit1609-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
	../libtest/$(DEPDIR)/$(am__dirstamp)

unit1609$(EXEEXT): $(unit1609_OBJECTS) $(unit1609_DEPENDENCIES) $(EXTRA_unit1609_DEPENDENCIES) 
	@rm -f unit1609$(EXEEXT)
	$(AM_V_CCLD)$(LINK) $(unit1609_OBJECTS) $(unit1609_LDADD) $(LIBS)


















../libtest/unit1620-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
	../libtest/$(DEPDIR)/$(am__dirstamp)

unit1620$(EXEEXT): $(unit1620_OBJECTS) $(unit1620_DEPENDENCIES) $(EXTRA_unit1620_DEPENDENCIES) 
	@rm -f unit1620$(EXEEXT)
	$(AM_V_CCLD)$(LINK) $(unit1620_OBJECTS) $(unit1620_LDADD) $(LIBS)
../libtest/unit1621-first.$(OBJEXT): ../libtest/$(am__dirstamp) \







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
	$(AM_V_CCLD)$(LINK) $(unit1608_OBJECTS) $(unit1608_LDADD) $(LIBS)
../libtest/unit1609-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
	../libtest/$(DEPDIR)/$(am__dirstamp)

unit1609$(EXEEXT): $(unit1609_OBJECTS) $(unit1609_DEPENDENCIES) $(EXTRA_unit1609_DEPENDENCIES) 
	@rm -f unit1609$(EXEEXT)
	$(AM_V_CCLD)$(LINK) $(unit1609_OBJECTS) $(unit1609_LDADD) $(LIBS)
../libtest/unit1610-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
	../libtest/$(DEPDIR)/$(am__dirstamp)

unit1610$(EXEEXT): $(unit1610_OBJECTS) $(unit1610_DEPENDENCIES) $(EXTRA_unit1610_DEPENDENCIES) 
	@rm -f unit1610$(EXEEXT)
	$(AM_V_CCLD)$(LINK) $(unit1610_OBJECTS) $(unit1610_LDADD) $(LIBS)
../libtest/unit1611-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
	../libtest/$(DEPDIR)/$(am__dirstamp)

unit1611$(EXEEXT): $(unit1611_OBJECTS) $(unit1611_DEPENDENCIES) $(EXTRA_unit1611_DEPENDENCIES) 
	@rm -f unit1611$(EXEEXT)
	$(AM_V_CCLD)$(LINK) $(unit1611_OBJECTS) $(unit1611_LDADD) $(LIBS)
../libtest/unit1612-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
	../libtest/$(DEPDIR)/$(am__dirstamp)

unit1612$(EXEEXT): $(unit1612_OBJECTS) $(unit1612_DEPENDENCIES) $(EXTRA_unit1612_DEPENDENCIES) 
	@rm -f unit1612$(EXEEXT)
	$(AM_V_CCLD)$(LINK) $(unit1612_OBJECTS) $(unit1612_LDADD) $(LIBS)
../libtest/unit1620-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
	../libtest/$(DEPDIR)/$(am__dirstamp)

unit1620$(EXEEXT): $(unit1620_OBJECTS) $(unit1620_DEPENDENCIES) $(EXTRA_unit1620_DEPENDENCIES) 
	@rm -f unit1620$(EXEEXT)
	$(AM_V_CCLD)$(LINK) $(unit1620_OBJECTS) $(unit1620_LDADD) $(LIBS)
../libtest/unit1621-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
1144
1145
1146
1147
1148
1149
1150



1151
1152
1153
1154
1155
1156
1157
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1603-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1604-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1605-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1606-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1607-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1608-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1609-first.Po@am__quote@ # am--include-marker



@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1620-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1621-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1650-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1651-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1652-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1653-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1654-first.Po@am__quote@ # am--include-marker







>
>
>







1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1603-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1604-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1605-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1606-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1607-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1608-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1609-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1610-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1611-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1612-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1620-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1621-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1650-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1651-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1652-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1653-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1654-first.Po@am__quote@ # am--include-marker
1179
1180
1181
1182
1183
1184
1185



1186
1187
1188
1189
1190
1191
1192
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1603-unit1603.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1604-unit1604.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1605-unit1605.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1606-unit1606.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1607-unit1607.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1608-unit1608.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1609-unit1609.Po@am__quote@ # am--include-marker



@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1620-unit1620.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1621-unit1621.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1650-unit1650.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1651-unit1651.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1652-unit1652.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1653-unit1653.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1654-unit1654.Po@am__quote@ # am--include-marker







>
>
>







1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1603-unit1603.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1604-unit1604.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1605-unit1605.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1606-unit1606.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1607-unit1607.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1608-unit1608.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1609-unit1609.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1610-unit1610.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1611-unit1611.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1612-unit1611.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1620-unit1620.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1621-unit1621.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1650-unit1650.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1651-unit1651.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1652-unit1652.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1653-unit1653.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1654-unit1654.Po@am__quote@ # am--include-marker
1974
1975
1976
1977
1978
1979
1980




















































































1981
1982
1983
1984
1985
1986
1987
../libtest/unit1609-first.obj: ../libtest/first.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1609_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1609-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1609-first.Tpo -c -o ../libtest/unit1609-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1609-first.Tpo ../libtest/$(DEPDIR)/unit1609-first.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1609-first.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1609_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1609-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`





















































































unit1620-unit1620.o: unit1620.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1620_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1620-unit1620.o -MD -MP -MF $(DEPDIR)/unit1620-unit1620.Tpo -c -o unit1620-unit1620.o `test -f 'unit1620.c' || echo '$(srcdir)/'`unit1620.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/unit1620-unit1620.Tpo $(DEPDIR)/unit1620-unit1620.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='unit1620.c' object='unit1620-unit1620.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1620_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1620-unit1620.o `test -f 'unit1620.c' || echo '$(srcdir)/'`unit1620.c








>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
../libtest/unit1609-first.obj: ../libtest/first.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1609_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1609-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1609-first.Tpo -c -o ../libtest/unit1609-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1609-first.Tpo ../libtest/$(DEPDIR)/unit1609-first.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1609-first.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1609_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1609-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`

unit1610-unit1610.o: unit1610.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1610_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1610-unit1610.o -MD -MP -MF $(DEPDIR)/unit1610-unit1610.Tpo -c -o unit1610-unit1610.o `test -f 'unit1610.c' || echo '$(srcdir)/'`unit1610.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/unit1610-unit1610.Tpo $(DEPDIR)/unit1610-unit1610.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='unit1610.c' object='unit1610-unit1610.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1610_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1610-unit1610.o `test -f 'unit1610.c' || echo '$(srcdir)/'`unit1610.c

unit1610-unit1610.obj: unit1610.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1610_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1610-unit1610.obj -MD -MP -MF $(DEPDIR)/unit1610-unit1610.Tpo -c -o unit1610-unit1610.obj `if test -f 'unit1610.c'; then $(CYGPATH_W) 'unit1610.c'; else $(CYGPATH_W) '$(srcdir)/unit1610.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/unit1610-unit1610.Tpo $(DEPDIR)/unit1610-unit1610.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='unit1610.c' object='unit1610-unit1610.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1610_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1610-unit1610.obj `if test -f 'unit1610.c'; then $(CYGPATH_W) 'unit1610.c'; else $(CYGPATH_W) '$(srcdir)/unit1610.c'; fi`

../libtest/unit1610-first.o: ../libtest/first.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1610_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1610-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1610-first.Tpo -c -o ../libtest/unit1610-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1610-first.Tpo ../libtest/$(DEPDIR)/unit1610-first.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1610-first.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1610_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1610-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c

../libtest/unit1610-first.obj: ../libtest/first.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1610_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1610-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1610-first.Tpo -c -o ../libtest/unit1610-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1610-first.Tpo ../libtest/$(DEPDIR)/unit1610-first.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1610-first.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1610_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1610-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`

unit1611-unit1611.o: unit1611.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1611_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1611-unit1611.o -MD -MP -MF $(DEPDIR)/unit1611-unit1611.Tpo -c -o unit1611-unit1611.o `test -f 'unit1611.c' || echo '$(srcdir)/'`unit1611.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/unit1611-unit1611.Tpo $(DEPDIR)/unit1611-unit1611.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='unit1611.c' object='unit1611-unit1611.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1611_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1611-unit1611.o `test -f 'unit1611.c' || echo '$(srcdir)/'`unit1611.c

unit1611-unit1611.obj: unit1611.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1611_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1611-unit1611.obj -MD -MP -MF $(DEPDIR)/unit1611-unit1611.Tpo -c -o unit1611-unit1611.obj `if test -f 'unit1611.c'; then $(CYGPATH_W) 'unit1611.c'; else $(CYGPATH_W) '$(srcdir)/unit1611.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/unit1611-unit1611.Tpo $(DEPDIR)/unit1611-unit1611.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='unit1611.c' object='unit1611-unit1611.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1611_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1611-unit1611.obj `if test -f 'unit1611.c'; then $(CYGPATH_W) 'unit1611.c'; else $(CYGPATH_W) '$(srcdir)/unit1611.c'; fi`

../libtest/unit1611-first.o: ../libtest/first.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1611_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1611-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1611-first.Tpo -c -o ../libtest/unit1611-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1611-first.Tpo ../libtest/$(DEPDIR)/unit1611-first.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1611-first.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1611_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1611-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c

../libtest/unit1611-first.obj: ../libtest/first.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1611_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1611-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1611-first.Tpo -c -o ../libtest/unit1611-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1611-first.Tpo ../libtest/$(DEPDIR)/unit1611-first.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1611-first.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1611_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1611-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`

unit1612-unit1611.o: unit1611.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1612_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1612-unit1611.o -MD -MP -MF $(DEPDIR)/unit1612-unit1611.Tpo -c -o unit1612-unit1611.o `test -f 'unit1611.c' || echo '$(srcdir)/'`unit1611.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/unit1612-unit1611.Tpo $(DEPDIR)/unit1612-unit1611.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='unit1611.c' object='unit1612-unit1611.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1612_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1612-unit1611.o `test -f 'unit1611.c' || echo '$(srcdir)/'`unit1611.c

unit1612-unit1611.obj: unit1611.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1612_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1612-unit1611.obj -MD -MP -MF $(DEPDIR)/unit1612-unit1611.Tpo -c -o unit1612-unit1611.obj `if test -f 'unit1611.c'; then $(CYGPATH_W) 'unit1611.c'; else $(CYGPATH_W) '$(srcdir)/unit1611.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/unit1612-unit1611.Tpo $(DEPDIR)/unit1612-unit1611.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='unit1611.c' object='unit1612-unit1611.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1612_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1612-unit1611.obj `if test -f 'unit1611.c'; then $(CYGPATH_W) 'unit1611.c'; else $(CYGPATH_W) '$(srcdir)/unit1611.c'; fi`

../libtest/unit1612-first.o: ../libtest/first.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1612_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1612-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1612-first.Tpo -c -o ../libtest/unit1612-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1612-first.Tpo ../libtest/$(DEPDIR)/unit1612-first.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1612-first.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1612_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1612-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c

../libtest/unit1612-first.obj: ../libtest/first.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1612_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1612-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1612-first.Tpo -c -o ../libtest/unit1612-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1612-first.Tpo ../libtest/$(DEPDIR)/unit1612-first.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1612-first.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1612_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1612-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`

unit1620-unit1620.o: unit1620.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1620_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1620-unit1620.o -MD -MP -MF $(DEPDIR)/unit1620-unit1620.Tpo -c -o unit1620-unit1620.o `test -f 'unit1620.c' || echo '$(srcdir)/'`unit1620.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/unit1620-unit1620.Tpo $(DEPDIR)/unit1620-unit1620.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='unit1620.c' object='unit1620-unit1620.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1620_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1620-unit1620.o `test -f 'unit1620.c' || echo '$(srcdir)/'`unit1620.c

2358
2359
2360
2361
2362
2363
2364



2365
2366
2367
2368
2369
2370
2371
	-rm -f ../libtest/$(DEPDIR)/unit1603-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1604-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1605-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1606-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1607-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1608-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1609-first.Po



	-rm -f ../libtest/$(DEPDIR)/unit1620-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1621-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1650-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1651-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1652-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1653-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1654-first.Po







>
>
>







2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
	-rm -f ../libtest/$(DEPDIR)/unit1603-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1604-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1605-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1606-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1607-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1608-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1609-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1610-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1611-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1612-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1620-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1621-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1650-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1651-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1652-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1653-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1654-first.Po
2393
2394
2395
2396
2397
2398
2399



2400
2401
2402
2403
2404
2405
2406
	-rm -f ./$(DEPDIR)/unit1603-unit1603.Po
	-rm -f ./$(DEPDIR)/unit1604-unit1604.Po
	-rm -f ./$(DEPDIR)/unit1605-unit1605.Po
	-rm -f ./$(DEPDIR)/unit1606-unit1606.Po
	-rm -f ./$(DEPDIR)/unit1607-unit1607.Po
	-rm -f ./$(DEPDIR)/unit1608-unit1608.Po
	-rm -f ./$(DEPDIR)/unit1609-unit1609.Po



	-rm -f ./$(DEPDIR)/unit1620-unit1620.Po
	-rm -f ./$(DEPDIR)/unit1621-unit1621.Po
	-rm -f ./$(DEPDIR)/unit1650-unit1650.Po
	-rm -f ./$(DEPDIR)/unit1651-unit1651.Po
	-rm -f ./$(DEPDIR)/unit1652-unit1652.Po
	-rm -f ./$(DEPDIR)/unit1653-unit1653.Po
	-rm -f ./$(DEPDIR)/unit1654-unit1654.Po







>
>
>







2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
	-rm -f ./$(DEPDIR)/unit1603-unit1603.Po
	-rm -f ./$(DEPDIR)/unit1604-unit1604.Po
	-rm -f ./$(DEPDIR)/unit1605-unit1605.Po
	-rm -f ./$(DEPDIR)/unit1606-unit1606.Po
	-rm -f ./$(DEPDIR)/unit1607-unit1607.Po
	-rm -f ./$(DEPDIR)/unit1608-unit1608.Po
	-rm -f ./$(DEPDIR)/unit1609-unit1609.Po
	-rm -f ./$(DEPDIR)/unit1610-unit1610.Po
	-rm -f ./$(DEPDIR)/unit1611-unit1611.Po
	-rm -f ./$(DEPDIR)/unit1612-unit1611.Po
	-rm -f ./$(DEPDIR)/unit1620-unit1620.Po
	-rm -f ./$(DEPDIR)/unit1621-unit1621.Po
	-rm -f ./$(DEPDIR)/unit1650-unit1650.Po
	-rm -f ./$(DEPDIR)/unit1651-unit1651.Po
	-rm -f ./$(DEPDIR)/unit1652-unit1652.Po
	-rm -f ./$(DEPDIR)/unit1653-unit1653.Po
	-rm -f ./$(DEPDIR)/unit1654-unit1654.Po
2473
2474
2475
2476
2477
2478
2479



2480
2481
2482
2483
2484
2485
2486
	-rm -f ../libtest/$(DEPDIR)/unit1603-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1604-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1605-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1606-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1607-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1608-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1609-first.Po



	-rm -f ../libtest/$(DEPDIR)/unit1620-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1621-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1650-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1651-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1652-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1653-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1654-first.Po







>
>
>







2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
	-rm -f ../libtest/$(DEPDIR)/unit1603-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1604-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1605-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1606-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1607-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1608-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1609-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1610-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1611-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1612-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1620-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1621-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1650-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1651-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1652-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1653-first.Po
	-rm -f ../libtest/$(DEPDIR)/unit1654-first.Po
2508
2509
2510
2511
2512
2513
2514



2515
2516
2517
2518
2519
2520
2521
	-rm -f ./$(DEPDIR)/unit1603-unit1603.Po
	-rm -f ./$(DEPDIR)/unit1604-unit1604.Po
	-rm -f ./$(DEPDIR)/unit1605-unit1605.Po
	-rm -f ./$(DEPDIR)/unit1606-unit1606.Po
	-rm -f ./$(DEPDIR)/unit1607-unit1607.Po
	-rm -f ./$(DEPDIR)/unit1608-unit1608.Po
	-rm -f ./$(DEPDIR)/unit1609-unit1609.Po



	-rm -f ./$(DEPDIR)/unit1620-unit1620.Po
	-rm -f ./$(DEPDIR)/unit1621-unit1621.Po
	-rm -f ./$(DEPDIR)/unit1650-unit1650.Po
	-rm -f ./$(DEPDIR)/unit1651-unit1651.Po
	-rm -f ./$(DEPDIR)/unit1652-unit1652.Po
	-rm -f ./$(DEPDIR)/unit1653-unit1653.Po
	-rm -f ./$(DEPDIR)/unit1654-unit1654.Po







>
>
>







2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
	-rm -f ./$(DEPDIR)/unit1603-unit1603.Po
	-rm -f ./$(DEPDIR)/unit1604-unit1604.Po
	-rm -f ./$(DEPDIR)/unit1605-unit1605.Po
	-rm -f ./$(DEPDIR)/unit1606-unit1606.Po
	-rm -f ./$(DEPDIR)/unit1607-unit1607.Po
	-rm -f ./$(DEPDIR)/unit1608-unit1608.Po
	-rm -f ./$(DEPDIR)/unit1609-unit1609.Po
	-rm -f ./$(DEPDIR)/unit1610-unit1610.Po
	-rm -f ./$(DEPDIR)/unit1611-unit1611.Po
	-rm -f ./$(DEPDIR)/unit1612-unit1611.Po
	-rm -f ./$(DEPDIR)/unit1620-unit1620.Po
	-rm -f ./$(DEPDIR)/unit1621-unit1621.Po
	-rm -f ./$(DEPDIR)/unit1650-unit1650.Po
	-rm -f ./$(DEPDIR)/unit1651-unit1651.Po
	-rm -f ./$(DEPDIR)/unit1652-unit1652.Po
	-rm -f ./$(DEPDIR)/unit1653-unit1653.Po
	-rm -f ./$(DEPDIR)/unit1654-unit1654.Po
Changes to jni/curl/tests/unit/Makefile.inc.






















1
2
3
4
5
6
7
8
9
10
11
12
13

14
15
16
17
18
19
20






















# these files are used in every single unit test program

UNITFILES = curlcheck.h \
 ../libtest/test.h \
 ../libtest/first.c

# These are all unit test programs
UNITPROGS = unit1300 unit1301 unit1302 unit1303 unit1304 unit1305 unit1307 \
 unit1308 unit1309 unit1323 \
 unit1330 unit1394 unit1395 unit1396 unit1397 unit1398 \
 unit1399 \
 unit1600 unit1601 unit1602 unit1603 unit1604 unit1605 unit1606 unit1607 \
 unit1608 unit1609 unit1620 unit1621 \

 unit1650 unit1651 unit1652 unit1653 unit1654 unit1655

unit1300_SOURCES = unit1300.c $(UNITFILES)
unit1300_CPPFLAGS = $(AM_CPPFLAGS)

unit1301_SOURCES = unit1301.c $(UNITFILES)
unit1301_CPPFLAGS = $(AM_CPPFLAGS)
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>












|
>







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
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
# furnished to do so, under the terms of the COPYING file.
#
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
# KIND, either express or implied.
#
###########################################################################

# these files are used in every single unit test program

UNITFILES = curlcheck.h \
 ../libtest/test.h \
 ../libtest/first.c

# These are all unit test programs
UNITPROGS = unit1300 unit1301 unit1302 unit1303 unit1304 unit1305 unit1307 \
 unit1308 unit1309 unit1323 \
 unit1330 unit1394 unit1395 unit1396 unit1397 unit1398 \
 unit1399 \
 unit1600 unit1601 unit1602 unit1603 unit1604 unit1605 unit1606 unit1607 \
 unit1608 unit1609 unit1610 unit1611 unit1612 \
 unit1620 unit1621 \
 unit1650 unit1651 unit1652 unit1653 unit1654 unit1655

unit1300_SOURCES = unit1300.c $(UNITFILES)
unit1300_CPPFLAGS = $(AM_CPPFLAGS)

unit1301_SOURCES = unit1301.c $(UNITFILES)
unit1301_CPPFLAGS = $(AM_CPPFLAGS)
92
93
94
95
96
97
98









99
100
101
102
103
104
105
unit1607_CPPFLAGS = $(AM_CPPFLAGS)

unit1608_SOURCES = unit1608.c $(UNITFILES)
unit1608_CPPFLAGS = $(AM_CPPFLAGS)

unit1609_SOURCES = unit1609.c $(UNITFILES)
unit1609_CPPFLAGS = $(AM_CPPFLAGS)










unit1620_SOURCES = unit1620.c $(UNITFILES)
unit1620_CPPFLAGS = $(AM_CPPFLAGS)

unit1621_SOURCES = unit1621.c $(UNITFILES)
unit1621_CPPFLAGS = $(AM_CPPFLAGS)
unit1621_LDADD = $(top_builddir)/src/libcurltool.la $(top_builddir)/lib/libcurl.la







>
>
>
>
>
>
>
>
>







115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
unit1607_CPPFLAGS = $(AM_CPPFLAGS)

unit1608_SOURCES = unit1608.c $(UNITFILES)
unit1608_CPPFLAGS = $(AM_CPPFLAGS)

unit1609_SOURCES = unit1609.c $(UNITFILES)
unit1609_CPPFLAGS = $(AM_CPPFLAGS)

unit1610_SOURCES = unit1610.c $(UNITFILES)
unit1610_CPPFLAGS = $(AM_CPPFLAGS)

unit1611_SOURCES = unit1611.c $(UNITFILES)
unit1611_CPPFLAGS = $(AM_CPPFLAGS)

unit1612_SOURCES = unit1611.c $(UNITFILES)
unit1612_CPPFLAGS = $(AM_CPPFLAGS)

unit1620_SOURCES = unit1620.c $(UNITFILES)
unit1620_CPPFLAGS = $(AM_CPPFLAGS)

unit1621_SOURCES = unit1621.c $(UNITFILES)
unit1621_CPPFLAGS = $(AM_CPPFLAGS)
unit1621_LDADD = $(top_builddir)/src/libcurltool.la $(top_builddir)/lib/libcurl.la
Changes to jni/curl/tests/unit/unit1300.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
  int unusedData_case1 = 1;
  int unusedData_case2 = 2;
  int unusedData_case3 = 3;
  struct curl_llist_element case1_list;
  struct curl_llist_element case2_list;
  struct curl_llist_element case3_list;
  struct curl_llist_element case4_list;
  struct curl_llist_element case5_list;
  struct curl_llist_element *head;
  struct curl_llist_element *element_next;
  struct curl_llist_element *element_prev;
  struct curl_llist_element *to_remove;
  size_t llist_size = Curl_llist_count(&llist);

  /**







<







50
51
52
53
54
55
56

57
58
59
60
61
62
63
  int unusedData_case1 = 1;
  int unusedData_case2 = 2;
  int unusedData_case3 = 3;
  struct curl_llist_element case1_list;
  struct curl_llist_element case2_list;
  struct curl_llist_element case3_list;
  struct curl_llist_element case4_list;

  struct curl_llist_element *head;
  struct curl_llist_element *element_next;
  struct curl_llist_element *element_prev;
  struct curl_llist_element *to_remove;
  size_t llist_size = Curl_llist_count(&llist);

  /**
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
  to_remove = llist.head;
  Curl_llist_remove(&llist, to_remove, NULL);
  fail_unless(llist.head == NULL,
              "llist head is not NULL while the llist is empty");
  fail_unless(llist.tail == NULL,
              "llist tail is not NULL while the llist is empty");

  /* @testing Curl_llist_move(struct curl_llist *,
   * struct curl_llist_element *, struct curl_llist *,
   * struct curl_llist_element *);
  */

  /**
   * @case 1:
   * moving head from an llist containing one element to an empty llist
   * @assumptions:
   * 1: llist size will be 0
   * 2: llist_destination size will be 1
   * 3: llist head will be NULL
   * 4: llist_destination head == llist_destination tail != NULL
   */

  /*
  * @setup
  * add one element to the list
  */

  Curl_llist_insert_next(&llist, llist.head, &unusedData_case1,
                         &case5_list);
  /* necessary assertions */

  abort_unless(Curl_llist_count(&llist) == 1,
  "Number of list elements is not as expected, Aborting");
  abort_unless(Curl_llist_count(&llist_destination) == 0,
  "Number of list elements is not as expected, Aborting");

  /*actual testing code*/
  Curl_llist_move(&llist, llist.head, &llist_destination, NULL);
  fail_unless(Curl_llist_count(&llist) == 0,
      "moving element from llist didn't decrement the size");

  fail_unless(Curl_llist_count(&llist_destination) == 1,
        "moving element to llist_destination didn't increment the size");

  fail_unless(llist.head == NULL,
      "llist head not set to null after moving the head");

  fail_unless(llist_destination.head != NULL,
        "llist_destination head set to null after moving an element");

  fail_unless(llist_destination.tail != NULL,
          "llist_destination tail set to null after moving an element");

  fail_unless(llist_destination.tail == llist_destination.head,
            "llist_destination tail doesn't equal llist_destination head");

  Curl_llist_destroy(&llist, NULL);
  Curl_llist_destroy(&llist_destination, NULL);
}
UNITTEST_STOP







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<




211
212
213
214
215
216
217

















































218
219
220
221
  to_remove = llist.head;
  Curl_llist_remove(&llist, to_remove, NULL);
  fail_unless(llist.head == NULL,
              "llist head is not NULL while the llist is empty");
  fail_unless(llist.tail == NULL,
              "llist tail is not NULL while the llist is empty");


















































  Curl_llist_destroy(&llist, NULL);
  Curl_llist_destroy(&llist_destination, NULL);
}
UNITTEST_STOP
Changes to jni/curl/tests/unit/unit1601.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
32
33
34
35
36
37
38


39
40

41
42
43
44
45
46
47
48
49
50
51
52
53
54
{

}

UNITTEST_START

#ifndef CURL_DISABLE_CRYPTO_AUTH


  unsigned char output[16];
  unsigned char *testp = output;

  Curl_md5it(output, (const unsigned char *)"1");

/* !checksrc! disable LONGLINE 2 */
  verify_memory(testp,
                "\xc4\xca\x42\x38\xa0\xb9\x23\x82\x0d\xcc\x50\x9a\x6f\x75\x84\x9b", 16);

  Curl_md5it(output, (const unsigned char *)"hello-you-fool");

  verify_memory(testp,
                "\x88\x67\x0b\x6d\x5d\x74\x2f\xad\xa5\xcd\xf9\xb6\x82\x87\x5f\x22", 16);
#endif


UNITTEST_STOP







>
>
|

>
|

<
|
|

|

|
|




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
{

}

UNITTEST_START

#ifndef CURL_DISABLE_CRYPTO_AUTH
  const char string1[] = "1";
  const char string2[] = "hello-you-fool";
  unsigned char output[MD5_DIGEST_LEN];
  unsigned char *testp = output;

  Curl_md5it(output, (const unsigned char *) string1, strlen(string1));


  verify_memory(testp, "\xc4\xca\x42\x38\xa0\xb9\x23\x82\x0d\xcc\x50\x9a\x6f"
                "\x75\x84\x9b", MD5_DIGEST_LEN);

  Curl_md5it(output, (const unsigned char *) string2, strlen(string2));

  verify_memory(testp, "\x88\x67\x0b\x6d\x5d\x74\x2f\xad\xa5\xcd\xf9\xb6\x82"
                "\x87\x5f\x22", MD5_DIGEST_LEN);
#endif


UNITTEST_STOP
Added jni/curl/tests/unit/unit1610.c.
























































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/
#include "curlcheck.h"

#include "curl_sha256.h"

static CURLcode unit_setup(void)
{
  return CURLE_OK;
}

static void unit_stop(void)
{

}

UNITTEST_START

#ifndef CURL_DISABLE_CRYPTO_AUTH
  const char string1[] = "1";
  const char string2[] = "hello-you-fool";
  unsigned char output[SHA256_DIGEST_LENGTH];
  unsigned char *testp = output;

  Curl_sha256it(output, (const unsigned char *) string1, strlen(string1));

  verify_memory(testp,
                "\x6b\x86\xb2\x73\xff\x34\xfc\xe1\x9d\x6b\x80\x4e\xff\x5a\x3f"
                "\x57\x47\xad\xa4\xea\xa2\x2f\x1d\x49\xc0\x1e\x52\xdd\xb7\x87"
                "\x5b\x4b", SHA256_DIGEST_LENGTH);

  Curl_sha256it(output, (const unsigned char *) string2, strlen(string2));

  verify_memory(testp,
                "\xcb\xb1\x6a\x8a\xb9\xcb\xb9\x35\xa8\xcb\xa0\x2e\x28\xc0\x26"
                "\x30\xd1\x19\x9c\x1f\x02\x17\xf4\x7c\x96\x20\xf3\xef\xe8\x27"
                "\x15\xae", SHA256_DIGEST_LENGTH);
#endif


UNITTEST_STOP
Added jni/curl/tests/unit/unit1611.c.




















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/
#include "curlcheck.h"

#include "curl_md4.h"

static CURLcode unit_setup(void)
{
  return CURLE_OK;
}

static void unit_stop(void)
{

}

UNITTEST_START

#ifndef CURL_DISABLE_CRYPTO_AUTH
  const char string1[] = "1";
  const char string2[] = "hello-you-fool";
  unsigned char output[MD4_DIGEST_LENGTH];
  unsigned char *testp = output;

  Curl_md4it(output, (const unsigned char *) string1, strlen(string1));

  verify_memory(testp,
                "\x8b\xe1\xec\x69\x7b\x14\xad\x3a\x53\xb3\x71\x43\x61\x20\x64"
                "\x1d", MD4_DIGEST_LENGTH);

  Curl_md4it(output, (const unsigned char *) string2, strlen(string2));

  verify_memory(testp,
                "\xa7\x16\x1c\xad\x7e\xbe\xdb\xbc\xf8\xc7\x23\x10\x2d\x2c\xe2"
                "\x0b", MD4_DIGEST_LENGTH);
#endif


UNITTEST_STOP
Changes to jni/curl/tests/unit/unit1651.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2018 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2018 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
  fail_unless(result == CURLE_OK, "Curl_extract_certinfo returned error");

  /* a poor man's fuzzing of some initial data to make sure nothing bad
     happens */
  for(byte = 1 ; byte < 255; byte += 17) {
    for(i = 0; i < 45; i++) {
      char backup = cert[i];
      cert[i] = (unsigned char)byte&0xff;
      (void) Curl_extract_certinfo(&conn, 0, beg, end);
      cert[i] = backup;
    }
  }
  curl_easy_cleanup(data);
}
UNITTEST_STOP







|







364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
  fail_unless(result == CURLE_OK, "Curl_extract_certinfo returned error");

  /* a poor man's fuzzing of some initial data to make sure nothing bad
     happens */
  for(byte = 1 ; byte < 255; byte += 17) {
    for(i = 0; i < 45; i++) {
      char backup = cert[i];
      cert[i] = (unsigned char) (byte & 0xff);
      (void) Curl_extract_certinfo(&conn, 0, beg, end);
      cert[i] = backup;
    }
  }
  curl_easy_cleanup(data);
}
UNITTEST_STOP
Changes to jni/curl/tests/unit/unit1654.c.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2019 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
                             ALPN_h1, "curl.haxx.se", 80);
  if(result) {
    fprintf(stderr, "Curl_altsvc_parse(6) failed!\n");
    unitfail++;
  }
  fail_unless(asi->num == 10, "wrong number of entries");

  Curl_altsvc_save(asi, outname);

  curl_easy_cleanup(curl);
  fail:
  Curl_altsvc_cleanup(asi);
  return unitfail;
}
UNITTEST_STOP
#endif







|








120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
                             ALPN_h1, "curl.haxx.se", 80);
  if(result) {
    fprintf(stderr, "Curl_altsvc_parse(6) failed!\n");
    unitfail++;
  }
  fail_unless(asi->num == 10, "wrong number of entries");

  Curl_altsvc_save(curl, asi, outname);

  curl_easy_cleanup(curl);
  fail:
  Curl_altsvc_cleanup(asi);
  return unitfail;
}
UNITTEST_STOP
#endif