blob: 9167fb4c35ef9b66a61be1d44e75f0239b8d677c [file] [log] [blame]
Yuqian Li3154a532017-09-06 13:33:30 -04001/*
2 * Copyright 2012 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
Mike Kleinc0bd9f92019-04-23 12:05:21 -05007#include "tests/PathOpsDebug.h"
8#include "tests/PathOpsExtendedTest.h"
9#include "tests/PathOpsTestCommon.h"
Yuqian Li3154a532017-09-06 13:33:30 -040010
11class PathTest_Private {
12public:
13 PathTest_Private(SkPath* path)
14 : fPath(path) {}
15
16 void setPt(int index, SkScalar x, SkScalar y) {
17 fPath->setPt(index, x, y);
18 }
19
20 SkPath* fPath;
21};
22
23static void path_edit(const SkPoint& from, const SkPoint& to, SkPath* path) {
24 PathTest_Private testPath(path);
25 for (int index = 0; index < path->countPoints(); ++index) {
26 if (SkDPoint::ApproximatelyEqual(path->getPoint(index), from)) {
27 testPath.setPt(index, to.fX, to.fY);
28 return;
29 }
30 }
31}
32
33static void cubicOp1d(skiatest::Reporter* reporter, const char* filename) {
34 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -050035 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -040036 path.moveTo(0,1);
37 path.cubicTo(0,2, 1,0, 1,0);
38 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -050039 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -040040 pathB.moveTo(0,1);
41 pathB.cubicTo(0,1, 1,0, 2,0);
42 pathB.close();
43 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
44}
45
46static void cubicOp2d(skiatest::Reporter* reporter, const char* filename) {
47 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -050048 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -040049 path.moveTo(0,2);
50 path.cubicTo(0,1, 1,0, 1,0);
51 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -050052 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -040053 pathB.moveTo(0,1);
54 pathB.cubicTo(0,1, 2,0, 1,0);
55 pathB.close();
56 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
57}
58
59static void cubicOp3d(skiatest::Reporter* reporter, const char* filename) {
60 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -050061 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -040062 path.moveTo(0,1);
63 path.cubicTo(2,3, 1,0, 1,0);
64 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -050065 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -040066 pathB.moveTo(0,1);
67 pathB.cubicTo(0,1, 1,0, 3,2);
68 pathB.close();
69 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
70}
71
72static void cubicOp5d(skiatest::Reporter* reporter, const char* filename) {
73 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -050074 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -040075 path.moveTo(0,1);
76 path.cubicTo(0,2, 1,0, 2,0);
77 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -050078 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -040079 pathB.moveTo(0,1);
80 pathB.cubicTo(0,2, 1,0, 2,0);
81 pathB.close();
82 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
83}
84
85static void cubicOp6d(skiatest::Reporter* reporter, const char* filename) {
86 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -050087 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -040088 path.moveTo(0,1);
89 path.cubicTo(0,6, 1,0, 3,0);
90 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -050091 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -040092 pathB.moveTo(0,1);
93 pathB.cubicTo(0,3, 1,0, 6,0);
94 pathB.close();
95 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
96}
97
98static void cubicOp7d(skiatest::Reporter* reporter, const char* filename) {
99 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500100 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400101 path.moveTo(0,1);
102 path.cubicTo(3,4, 1,0, 3,0);
103 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500104 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400105 pathB.moveTo(0,1);
106 pathB.cubicTo(0,3, 1,0, 4,3);
107 pathB.close();
108 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
109}
110
111static void cubicOp8d(skiatest::Reporter* reporter, const char* filename) {
112 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500113 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400114 path.moveTo(0,1);
115 path.cubicTo(0,5, 1,0, 4,0);
116 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500117 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400118 pathB.moveTo(0,1);
119 pathB.cubicTo(0,4, 1,0, 5,0);
120 pathB.close();
121 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
122}
123
124static void cubicOp9d(skiatest::Reporter* reporter, const char* filename) {
125 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500126 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400127 path.moveTo(0,1);
128 path.cubicTo(1,6, 1,0, 2,1);
129 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500130 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400131 pathB.moveTo(0,1);
132 pathB.cubicTo(1,2, 1,0, 6,1);
133 pathB.close();
134 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
135}
136
137static void quadOp9d(skiatest::Reporter* reporter, const char* filename) {
138 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500139 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400140 path.moveTo(0,1);
141 path.quadTo(1,6, 1.5f,1);
142 path.quadTo(1.5f,0.5f, 2,1);
143 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500144 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400145 pathB.moveTo(0,1);
146 pathB.quadTo(1,2, 1.4f,1);
147 pathB.quadTo(3,0.4f, 6,1);
148 pathB.close();
149 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
150}
151
152static void lineOp9d(skiatest::Reporter* reporter, const char* filename) {
153 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500154 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400155 path.moveTo(0,1);
156 path.lineTo(1,6);
157 path.lineTo(1.5f,1);
158 path.lineTo(1.8f,0.8f);
159 path.lineTo(2,1);
160 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500161 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400162 pathB.moveTo(0,1);
163 pathB.lineTo(1,2);
164 pathB.lineTo(1.4f,1);
165 pathB.lineTo(3,0.4f);
166 pathB.lineTo(6,1);
167 pathB.close();
168 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
169}
170
171static void cubicOp1i(skiatest::Reporter* reporter, const char* filename) {
172 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500173 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400174 path.moveTo(0,1);
175 path.cubicTo(1,2, 1,0, 2,1);
176 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500177 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400178 pathB.moveTo(0,1);
179 pathB.cubicTo(1,2, 1,0, 2,1);
180 pathB.close();
181 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
182}
183
184static void cubicOp10d(skiatest::Reporter* reporter, const char* filename) {
185 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500186 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400187 path.moveTo(0,1);
188 path.cubicTo(1,3, 1,0, 4,1);
189 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500190 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400191 pathB.moveTo(0,1);
192 pathB.cubicTo(1,4, 1,0, 3,1);
193 pathB.close();
194 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
195}
196
197static void cubicOp11d(skiatest::Reporter* reporter, const char* filename) {
198 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500199 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400200 path.moveTo(0,1);
201 path.cubicTo(3,4, 1,0, 5,1);
202 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500203 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400204 pathB.moveTo(0,1);
205 pathB.cubicTo(1,5, 1,0, 4,3);
206 pathB.close();
207 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
208}
209
210static void cubicOp12d(skiatest::Reporter* reporter, const char* filename) {
211 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500212 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400213 path.moveTo(0,1);
214 path.cubicTo(1,6, 1,0, 1,0);
215 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500216 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400217 pathB.moveTo(0,1);
218 pathB.cubicTo(0,1, 1,0, 6,1);
219 pathB.close();
220 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
221}
222
223static void cubicOp13d(skiatest::Reporter* reporter, const char* filename) {
224 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500225 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400226 path.moveTo(0,1);
227 path.cubicTo(4,5, 1,0, 5,3);
228 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500229 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400230 pathB.moveTo(0,1);
231 pathB.cubicTo(3,5, 1,0, 5,4);
232 pathB.close();
233 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
234}
235
236static void cubicOp14d(skiatest::Reporter* reporter, const char* filename) {
237 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500238 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400239 path.moveTo(0,1);
240 path.cubicTo(0,2, 2,0, 2,1);
241 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500242 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400243 pathB.moveTo(0,2);
244 pathB.cubicTo(1,2, 1,0, 2,0);
245 pathB.close();
246 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
247}
248
249static void cubicOp15d(skiatest::Reporter* reporter, const char* filename) {
250 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500251 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400252 path.moveTo(0,1);
253 path.cubicTo(3,6, 2,0, 2,1);
254 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500255 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400256 pathB.moveTo(0,2);
257 pathB.cubicTo(1,2, 1,0, 6,3);
258 pathB.close();
259 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
260}
261
262static void cubicOp16d(skiatest::Reporter* reporter, const char* filename) {
263 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500264 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400265 path.moveTo(0,2);
266 path.cubicTo(0,1, 3,0, 1,0);
267 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500268 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400269 pathB.moveTo(0,3);
270 pathB.cubicTo(0,1, 2,0, 1,0);
271 pathB.close();
272 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
273}
274
275static void cubicOp17d(skiatest::Reporter* reporter, const char* filename) {
276 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500277 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400278 path.moveTo(0,2);
279 path.cubicTo(0,2, 4,0, 2,1);
280 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500281 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400282 pathB.moveTo(0,4);
283 pathB.cubicTo(1,2, 2,0, 2,0);
284 pathB.close();
285 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
286}
287
288static void cubicOp18d(skiatest::Reporter* reporter, const char* filename) {
289 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500290 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400291 path.moveTo(0,1);
292 path.cubicTo(3,5, 2,0, 2,1);
293 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500294 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400295 pathB.moveTo(0,2);
296 pathB.cubicTo(1,2, 1,0, 5,3);
297 pathB.close();
298 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
299}
300
301static void cubicOp19i(skiatest::Reporter* reporter, const char* filename) {
302 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500303 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400304 path.moveTo(0,2);
305 path.cubicTo(0,1, 2,1, 6,2);
306 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500307 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400308 pathB.moveTo(1,2);
309 pathB.cubicTo(2,6, 2,0, 1,0);
310 pathB.close();
311 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
312}
313
314static void cubicOp20d(skiatest::Reporter* reporter, const char* filename) {
315 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500316 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400317 path.moveTo(0,1);
318 path.cubicTo(0,1, 6,0, 2,1);
319 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500320 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400321 pathB.moveTo(0,6);
322 pathB.cubicTo(1,2, 1,0, 1,0);
323 pathB.close();
324 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
325}
326
327static void cubicOp21d(skiatest::Reporter* reporter, const char* filename) {
328 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500329 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400330 path.moveTo(0,1);
331 path.cubicTo(0,1, 2,1, 6,5);
332 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500333 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400334 pathB.moveTo(1,2);
335 pathB.cubicTo(5,6, 1,0, 1,0);
336 pathB.close();
337 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
338}
339
340static void cubicOp22d(skiatest::Reporter* reporter, const char* filename) {
341 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500342 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400343 path.moveTo(0,1);
344 path.cubicTo(2,3, 3,0, 2,1);
345 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500346 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400347 pathB.moveTo(0,3);
348 pathB.cubicTo(1,2, 1,0, 3,2);
349 pathB.close();
350 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
351}
352
353static void cubicOp23d(skiatest::Reporter* reporter, const char* filename) {
354 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500355 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400356 path.moveTo(0,1);
357 path.cubicTo(1,2, 4,0, 2,1);
358 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500359 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400360 pathB.moveTo(0,4);
361 pathB.cubicTo(1,2, 1,0, 2,1);
362 pathB.close();
363 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
364}
365
366static void cubicOp24d(skiatest::Reporter* reporter, const char* filename) {
367 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500368 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400369 path.moveTo(0,1);
370 path.cubicTo(1,2, 2,0, 3,2);
371 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500372 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400373 pathB.moveTo(0,2);
374 pathB.cubicTo(2,3, 1,0, 2,1);
375 pathB.close();
376 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
377}
378
379static void testIntersect1(skiatest::Reporter* reporter, const char* filename) {
380 SkPath one, two;
Mike Reed30bc5272019-11-22 18:34:02 +0000381 one.addRect(0, 0, 6, 6, SkPathDirection::kCW);
382 two.addRect(3, 3, 9, 9, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -0400383 testPathOp(reporter, one, two, kIntersect_SkPathOp, filename);
384}
385
386static void testUnion1(skiatest::Reporter* reporter, const char* filename) {
387 SkPath one, two;
Mike Reed30bc5272019-11-22 18:34:02 +0000388 one.addRect(0, 0, 6, 6, SkPathDirection::kCW);
389 two.addRect(3, 3, 9, 9, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -0400390 testPathOp(reporter, one, two, kUnion_SkPathOp, filename);
391}
392
393static void testDiff1(skiatest::Reporter* reporter, const char* filename) {
394 SkPath one, two;
Mike Reed30bc5272019-11-22 18:34:02 +0000395 one.addRect(0, 0, 6, 6, SkPathDirection::kCW);
396 two.addRect(3, 3, 9, 9, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -0400397 testPathOp(reporter, one, two, kDifference_SkPathOp, filename);
398}
399
400static void testXor1(skiatest::Reporter* reporter, const char* filename) {
401 SkPath one, two;
Mike Reed30bc5272019-11-22 18:34:02 +0000402 one.addRect(0, 0, 6, 6, SkPathDirection::kCW);
403 two.addRect(3, 3, 9, 9, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -0400404 testPathOp(reporter, one, two, kXOR_SkPathOp, filename);
405}
406
407static void testIntersect2(skiatest::Reporter* reporter, const char* filename) {
408 SkPath one, two;
Mike Reed30bc5272019-11-22 18:34:02 +0000409 one.addRect(0, 0, 6, 6, SkPathDirection::kCW);
410 two.addRect(0, 3, 9, 9, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -0400411 testPathOp(reporter, one, two, kIntersect_SkPathOp, filename);
412}
413
414static void testUnion2(skiatest::Reporter* reporter, const char* filename) {
415 SkPath one, two;
Mike Reed30bc5272019-11-22 18:34:02 +0000416 one.addRect(0, 0, 6, 6, SkPathDirection::kCW);
417 two.addRect(0, 3, 9, 9, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -0400418 testPathOp(reporter, one, two, kUnion_SkPathOp, filename);
419}
420
421static void testDiff2(skiatest::Reporter* reporter, const char* filename) {
422 SkPath one, two;
Mike Reed30bc5272019-11-22 18:34:02 +0000423 one.addRect(0, 0, 6, 6, SkPathDirection::kCW);
424 two.addRect(0, 3, 9, 9, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -0400425 testPathOp(reporter, one, two, kDifference_SkPathOp, filename);
426}
427
428static void testXor2(skiatest::Reporter* reporter, const char* filename) {
429 SkPath one, two;
Mike Reed30bc5272019-11-22 18:34:02 +0000430 one.addRect(0, 0, 6, 6, SkPathDirection::kCW);
431 two.addRect(0, 3, 9, 9, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -0400432 testPathOp(reporter, one, two, kXOR_SkPathOp, filename);
433}
434
435static void testOp1d(skiatest::Reporter* reporter, const char* filename) {
436 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500437 path.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +0000438 path.addRect(0, 0, 1, 1, SkPathDirection::kCW);
439 path.addRect(0, 0, 2, 2, SkPathDirection::kCW);
Mike Reed7d34dc72019-11-26 12:17:17 -0500440 pathB.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +0000441 pathB.addRect(0, 0, 1, 1, SkPathDirection::kCW);
442 pathB.addRect(0, 0, 1, 1, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -0400443 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
444}
445
446static void testOp2d(skiatest::Reporter* reporter, const char* filename) {
447 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500448 path.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +0000449 path.addRect(0, 0, 1, 1, SkPathDirection::kCW);
450 path.addRect(0, 0, 2, 2, SkPathDirection::kCW);
Mike Reed7d34dc72019-11-26 12:17:17 -0500451 pathB.setFillType(SkPathFillType::kEvenOdd);
Mike Reed30bc5272019-11-22 18:34:02 +0000452 pathB.addRect(0, 0, 1, 1, SkPathDirection::kCW);
453 pathB.addRect(0, 0, 1, 1, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -0400454 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
455}
456
457static void testOp3d(skiatest::Reporter* reporter, const char* filename) {
458 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500459 path.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +0000460 path.addRect(0, 0, 1, 1, SkPathDirection::kCW);
461 path.addRect(1, 1, 2, 2, SkPathDirection::kCW);
Mike Reed7d34dc72019-11-26 12:17:17 -0500462 pathB.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +0000463 pathB.addRect(0, 0, 1, 1, SkPathDirection::kCW);
464 pathB.addRect(0, 0, 1, 1, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -0400465 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
466}
467
468static void testOp1u(skiatest::Reporter* reporter, const char* filename) {
469 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500470 path.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +0000471 path.addRect(0, 0, 1, 1, SkPathDirection::kCW);
472 path.addRect(0, 0, 3, 3, SkPathDirection::kCW);
Mike Reed7d34dc72019-11-26 12:17:17 -0500473 pathB.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +0000474 pathB.addRect(0, 0, 1, 1, SkPathDirection::kCW);
475 pathB.addRect(0, 0, 1, 1, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -0400476 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
477}
478
479static void testOp4d(skiatest::Reporter* reporter, const char* filename) {
480 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500481 path.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +0000482 path.addRect(0, 0, 1, 1, SkPathDirection::kCW);
483 path.addRect(2, 2, 4, 4, SkPathDirection::kCW);
Mike Reed7d34dc72019-11-26 12:17:17 -0500484 pathB.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +0000485 pathB.addRect(0, 0, 1, 1, SkPathDirection::kCW);
486 pathB.addRect(0, 0, 1, 1, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -0400487 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
488}
489
490static void testOp5d(skiatest::Reporter* reporter, const char* filename) {
491 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500492 path.setFillType(SkPathFillType::kEvenOdd);
Mike Reed30bc5272019-11-22 18:34:02 +0000493 path.addRect(0, 0, 2, 2, SkPathDirection::kCW);
494 path.addRect(0, 0, 3, 3, SkPathDirection::kCW);
Mike Reed7d34dc72019-11-26 12:17:17 -0500495 pathB.setFillType(SkPathFillType::kEvenOdd);
Mike Reed30bc5272019-11-22 18:34:02 +0000496 pathB.addRect(0, 0, 1, 1, SkPathDirection::kCW);
497 pathB.addRect(0, 0, 1, 1, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -0400498 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
499}
500
501static void testOp6d(skiatest::Reporter* reporter, const char* filename) {
502 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500503 path.setFillType(SkPathFillType::kEvenOdd);
Mike Reed30bc5272019-11-22 18:34:02 +0000504 path.addRect(0, 0, 1, 1, SkPathDirection::kCW);
505 path.addRect(0, 0, 3, 3, SkPathDirection::kCW);
Mike Reed7d34dc72019-11-26 12:17:17 -0500506 pathB.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +0000507 pathB.addRect(0, 0, 1, 1, SkPathDirection::kCW);
508 pathB.addRect(0, 0, 1, 1, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -0400509 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
510}
511
512static void testOp7d(skiatest::Reporter* reporter, const char* filename) {
513 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500514 path.setFillType(SkPathFillType::kEvenOdd);
Mike Reed30bc5272019-11-22 18:34:02 +0000515 path.addRect(0, 0, 2, 2, SkPathDirection::kCW);
516 path.addRect(0, 0, 1, 1, SkPathDirection::kCW);
Mike Reed7d34dc72019-11-26 12:17:17 -0500517 pathB.setFillType(SkPathFillType::kEvenOdd);
Mike Reed30bc5272019-11-22 18:34:02 +0000518 pathB.addRect(0, 0, 1, 1, SkPathDirection::kCW);
519 pathB.addRect(0, 0, 1, 1, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -0400520 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
521}
522
523static void testOp2u(skiatest::Reporter* reporter, const char* filename) {
524 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500525 path.setFillType(SkPathFillType::kEvenOdd);
Mike Reed30bc5272019-11-22 18:34:02 +0000526 path.addRect(0, 0, 2, 2, SkPathDirection::kCW);
527 path.addRect(0, 0, 2, 2, SkPathDirection::kCW);
Mike Reed7d34dc72019-11-26 12:17:17 -0500528 pathB.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +0000529 pathB.addRect(0, 0, 3, 3, SkPathDirection::kCW);
530 pathB.addRect(1, 1, 2, 2, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -0400531 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
532}
533
534static void testOp8d(skiatest::Reporter* reporter, const char* filename) {
535 SkPath path, pathB;
536 path.addRect(0, 0, 640, 480);
537 pathB.moveTo(577330, 1971.72f);
538 pathB.cubicTo(10.7082f, -116.596f, 262.057f, 45.6468f, 294.694f, 1.96237f);
539 pathB.close();
540 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
541}
542static void cubicOp25i(skiatest::Reporter* reporter, const char* filename) {
543 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500544 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400545 path.moveTo(0,1);
546 path.cubicTo(2,4, 5,0, 3,2);
547 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500548 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400549 pathB.moveTo(0,5);
550 pathB.cubicTo(2,3, 1,0, 4,2);
551 pathB.close();
552 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
553}
554
555static void cubicOp26d(skiatest::Reporter* reporter, const char* filename) {
556 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500557 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400558 path.moveTo(0,1);
559 path.cubicTo(3,4, 4,0, 3,2);
560 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500561 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400562 pathB.moveTo(0,4);
563 pathB.cubicTo(2,3, 1,0, 4,3);
564 pathB.close();
565 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
566}
567
568static void cubicOp27d(skiatest::Reporter* reporter, const char* filename) {
569 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500570 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400571 path.moveTo(0,1);
572 path.cubicTo(3,6, 1,0, 5,2);
573 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500574 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400575 pathB.moveTo(0,1);
576 pathB.cubicTo(2,5, 1,0, 6,3);
577 pathB.close();
578 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
579}
580
581static void cubicOp28u(skiatest::Reporter* reporter, const char* filename) {
582 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500583 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400584 path.moveTo(0,1);
585 path.cubicTo(1,4, 6,0, 3,2);
586 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500587 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400588 pathB.moveTo(0,6);
589 pathB.cubicTo(2,3, 1,0, 4,1);
590 pathB.close();
591 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
592}
593
594static void cubicOp29d(skiatest::Reporter* reporter, const char* filename) {
595 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500596 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400597 path.moveTo(0,1);
598 path.cubicTo(2,5, 6,0, 4,2);
599 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500600 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400601 pathB.moveTo(0,6);
602 pathB.cubicTo(2,4, 1,0, 5,2);
603 pathB.close();
604 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
605}
606
607static void cubicOp30d(skiatest::Reporter* reporter, const char* filename) {
608 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500609 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400610 path.moveTo(0,1);
611 path.cubicTo(2,5, 6,0, 5,3);
612 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500613 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400614 pathB.moveTo(0,6);
615 pathB.cubicTo(3,5, 1,0, 5,2);
616 pathB.close();
617 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
618}
619
620static void cubicOp31d(skiatest::Reporter* reporter, const char* filename) {
621 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500622 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400623 path.moveTo(0,2);
624 path.cubicTo(0,3, 2,1, 4,0);
625 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500626 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400627 pathB.moveTo(1,2);
628 pathB.cubicTo(0,4, 2,0, 3,0);
629 pathB.close();
630 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
631}
632
633static void cubicOp31u(skiatest::Reporter* reporter, const char* filename) {
634 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500635 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400636 path.moveTo(0,2);
637 path.cubicTo(0,3, 2,1, 4,0);
638 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500639 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400640 pathB.moveTo(1,2);
641 pathB.cubicTo(0,4, 2,0, 3,0);
642 pathB.close();
643 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
644}
645
646static void cubicOp31x(skiatest::Reporter* reporter, const char* filename) {
647 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500648 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400649 path.moveTo(0,2);
650 path.cubicTo(0,3, 2,1, 4,0);
651 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500652 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400653 pathB.moveTo(1,2);
654 pathB.cubicTo(0,4, 2,0, 3,0);
655 pathB.close();
656 testPathOp(reporter, path, pathB, kXOR_SkPathOp, filename);
657}
658
659static void cubicOp32d(skiatest::Reporter* reporter, const char* filename) {
660 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500661 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400662 path.moveTo(0,1);
663 path.cubicTo(1,2, 6,0, 3,1);
664 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500665 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400666 pathB.moveTo(0,6);
667 pathB.cubicTo(1,3, 1,0, 2,1);
668 pathB.close();
669 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
670}
671
672static void cubicOp33i(skiatest::Reporter* reporter, const char* filename) {
673 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500674 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400675 path.moveTo(0,1);
676 path.cubicTo(1,2, 6,0, 3,1);
677 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500678 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400679 pathB.moveTo(0,6);
680 pathB.cubicTo(1,3, 1,0, 2,1);
681 pathB.close();
682 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
683}
684
685static void cubicOp34d(skiatest::Reporter* reporter, const char* filename) {
686 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500687 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400688 path.moveTo(0,1);
689 path.cubicTo(3,5, 2,1, 3,1);
690 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500691 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400692 pathB.moveTo(1,2);
693 pathB.cubicTo(1,3, 1,0, 5,3);
694 pathB.close();
695 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
696}
697
698static void cubicOp35d(skiatest::Reporter* reporter, const char* filename) {
699 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500700 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400701 path.moveTo(0,1);
702 path.cubicTo(1,5, 2,1, 4,0);
703 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500704 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400705 pathB.moveTo(1,2);
706 pathB.cubicTo(0,4, 1,0, 5,1);
707 pathB.close();
708 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
709}
710
711static void cubicOp36u(skiatest::Reporter* reporter, const char* filename) {
712 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500713 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400714 path.moveTo(0,1);
715 path.cubicTo(1,6, 2,0, 5,1);
716 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500717 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400718 pathB.moveTo(0,2);
719 pathB.cubicTo(1,5, 1,0, 6,1);
720 pathB.close();
721 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
722}
723
724static void cubicOp37d(skiatest::Reporter* reporter, const char* filename) {
725 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500726 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400727 path.moveTo(0,1);
728 path.cubicTo(2,6, 6,1, 4,3);
729 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500730 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400731 pathB.moveTo(1,6);
732 pathB.cubicTo(3,4, 1,0, 6,2);
733 pathB.close();
734 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
735}
736
737static void cubicOp38d(skiatest::Reporter* reporter, const char* filename) {
738 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500739 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400740 path.moveTo(0,1);
741 path.cubicTo(0,6, 3,2, 4,1);
742 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500743 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400744 pathB.moveTo(2,3);
745 pathB.cubicTo(1,4, 1,0, 6,0);
746 pathB.close();
747 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
748}
749
750static void cubicOp39d(skiatest::Reporter* reporter, const char* filename) {
751 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500752 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400753 path.moveTo(0,1);
754 path.cubicTo(2,3, 5,1, 4,3);
755 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500756 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400757 pathB.moveTo(1,5);
758 pathB.cubicTo(3,4, 1,0, 3,2);
759 pathB.close();
760 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
761}
762
763static void cubicOp40d(skiatest::Reporter* reporter, const char* filename) {
764 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500765 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400766 path.moveTo(0,1);
767 path.cubicTo(1,5, 3,2, 4,2);
768 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500769 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400770 pathB.moveTo(2,3);
771 pathB.cubicTo(2,4, 1,0, 5,1);
772 pathB.close();
773 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
774}
775
776static void cubicOp41i(skiatest::Reporter* reporter, const char* filename) {
777 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500778 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400779 path.moveTo(0,1);
780 path.cubicTo(2,6, 4,3, 6,4);
781 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500782 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400783 pathB.moveTo(3,4);
784 pathB.cubicTo(4,6, 1,0, 6,2);
785 pathB.close();
786 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
787}
788
789static void cubicOp42d(skiatest::Reporter* reporter, const char* filename) {
790 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500791 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400792 path.moveTo(0,1);
793 path.cubicTo(1,2, 6,5, 5,4);
794 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500795 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400796 pathB.moveTo(5,6);
797 pathB.cubicTo(4,5, 1,0, 2,1);
798 pathB.close();
799 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
800}
801
802static void cubicOp43d(skiatest::Reporter* reporter, const char* filename) {
803 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500804 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400805 path.moveTo(0,2);
806 path.cubicTo(1,2, 4,0, 3,1);
807 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500808 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400809 pathB.moveTo(0,4);
810 pathB.cubicTo(1,3, 2,0, 2,1);
811 pathB.close();
812 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
813}
814
815static void cubicOp44d(skiatest::Reporter* reporter, const char* filename) {
816 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500817 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400818 path.moveTo(0,2);
819 path.cubicTo(3,6, 4,0, 3,2);
820 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500821 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400822 pathB.moveTo(0,4);
823 pathB.cubicTo(2,3, 2,0, 6,3);
824 pathB.close();
825 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
826}
827
828static void cubicOp45d(skiatest::Reporter* reporter, const char* filename) {
829 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500830 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400831 path.moveTo(0,2);
832 path.cubicTo(2,4, 4,0, 3,2);
833 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500834 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400835 pathB.moveTo(0,4);
836 pathB.cubicTo(2,3, 2,0, 4,2);
837 pathB.close();
838 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
839}
840
841static void cubicOp46d(skiatest::Reporter* reporter, const char* filename) {
842 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500843 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400844 path.moveTo(0,2);
845 path.cubicTo(3,5, 5,0, 4,2);
846 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500847 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400848 pathB.moveTo(0,5);
849 pathB.cubicTo(2,4, 2,0, 5,3);
850 pathB.close();
851 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
852}
853
854static void cubicOp47d(skiatest::Reporter* reporter, const char* filename) {
855 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500856 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400857 path.moveTo(0,1);
858 path.cubicTo(1,6, 6,2, 5,4);
859 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500860 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400861 pathB.moveTo(2,6);
862 pathB.cubicTo(4,5, 1,0, 6,1);
863 pathB.close();
864 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
865}
866
867static void cubicOp48d(skiatest::Reporter* reporter, const char* filename) {
868 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500869 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400870 path.moveTo(0,2);
871 path.cubicTo(2,3, 5,1, 3,2);
872 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500873 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400874 pathB.moveTo(1,5);
875 pathB.cubicTo(2,3, 2,0, 3,2);
876 pathB.close();
877 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
878}
879
880static void cubicOp49d(skiatest::Reporter* reporter, const char* filename) {
881 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500882 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400883 path.moveTo(0,2);
884 path.cubicTo(1,5, 3,2, 4,1);
885 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500886 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400887 pathB.moveTo(2,3);
888 pathB.cubicTo(1,4, 2,0, 5,1);
889 pathB.close();
890 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
891}
892
893static void cubicOp50d(skiatest::Reporter* reporter, const char* filename) {
894 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500895 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400896 path.moveTo(0,3);
897 path.cubicTo(1,6, 5,0, 5,1);
898 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500899 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400900 pathB.moveTo(0,5);
901 pathB.cubicTo(1,5, 3,0, 6,1);
902 pathB.close();
903 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
904}
905
906static void cubicOp51d(skiatest::Reporter* reporter, const char* filename) {
907 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500908 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400909 path.moveTo(0,3);
910 path.cubicTo(1,2, 4,1, 6,0);
911 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500912 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400913 pathB.moveTo(1,4);
914 pathB.cubicTo(0,6, 3,0, 2,1);
915 pathB.close();
916 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
917}
918
919static void cubicOp52d(skiatest::Reporter* reporter, const char* filename) {
920 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500921 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400922 path.moveTo(0,2);
923 path.cubicTo(1,2, 5,4, 4,3);
924 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500925 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400926 pathB.moveTo(4,5);
927 pathB.cubicTo(3,4, 2,0, 2,1);
928 pathB.close();
929 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
930}
931
932static void cubicOp53d(skiatest::Reporter* reporter, const char* filename) {
933 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500934 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400935 path.moveTo(0,3);
936 path.cubicTo(1,2, 5,3, 2,1);
937 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500938 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400939 pathB.moveTo(3,5);
940 pathB.cubicTo(1,2, 3,0, 2,1);
941 pathB.close();
942 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
943}
944
945static void cubicOp54d(skiatest::Reporter* reporter, const char* filename) {
946 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500947 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400948 path.moveTo(0,4);
949 path.cubicTo(1,3, 5,4, 4,2);
950 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500951 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400952 pathB.moveTo(4,5);
953 pathB.cubicTo(2,4, 4,0, 3,1);
954 pathB.close();
955 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
956}
957
958static void cubicOp55d(skiatest::Reporter* reporter, const char* filename) {
959 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500960 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400961 path.moveTo(0,5);
962 path.cubicTo(1,3, 3,2, 5,0);
963 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500964 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400965 pathB.moveTo(2,3);
966 pathB.cubicTo(0,5, 5,0, 3,1);
967 pathB.close();
968 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
969}
970
971static void cubicOp56d(skiatest::Reporter* reporter, const char* filename) {
972 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500973 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400974 path.moveTo(0,1);
975 path.cubicTo(2,6, 5,0, 2,1);
976 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500977 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400978 pathB.moveTo(0,5);
979 pathB.cubicTo(1,2, 1,0, 6,2);
980 pathB.close();
981 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
982}
983
984static void cubicOp57d(skiatest::Reporter* reporter, const char* filename) {
985 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500986 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400987 path.moveTo(0,5);
988 path.cubicTo(0,5, 5,4, 6,4);
989 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -0500990 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -0400991 pathB.moveTo(4,5);
992 pathB.cubicTo(4,6, 5,0, 5,0);
993 pathB.close();
994 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
995}
996
997static void cubicOp58d(skiatest::Reporter* reporter, const char* filename) {
998 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -0500999 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001000 path.moveTo(0,5);
1001 path.cubicTo(3,4, 6,5, 5,3);
1002 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001003 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001004 pathB.moveTo(5,6);
1005 pathB.cubicTo(3,5, 5,0, 4,3);
1006 pathB.close();
1007 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1008}
1009
1010static void cubicOp59d(skiatest::Reporter* reporter, const char* filename) {
1011 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001012 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001013 path.moveTo(0,1);
1014 path.cubicTo(5,6, 4,0, 4,1);
1015 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001016 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001017 pathB.moveTo(0,4);
1018 pathB.cubicTo(1,4, 1,0, 6,5);
1019 pathB.close();
1020 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1021}
1022
1023static void cubicOp60d(skiatest::Reporter* reporter, const char* filename) {
1024 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001025 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001026 path.moveTo(0,2);
1027 path.cubicTo(4,6, 6,0, 5,2);
1028 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001029 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001030 pathB.moveTo(0,6);
1031 pathB.cubicTo(2,5, 2,0, 6,4);
1032 pathB.close();
1033 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1034}
1035
1036static void cubicOp61d(skiatest::Reporter* reporter, const char* filename) {
1037 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001038 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001039 path.moveTo(1,2);
1040 path.cubicTo(0,5, 3,2, 6,1);
1041 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001042 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001043 pathB.moveTo(2,3);
1044 pathB.cubicTo(1,6, 2,1, 5,0);
1045 pathB.close();
1046 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1047}
1048
1049static void cubicOp62d(skiatest::Reporter* reporter, const char* filename) {
1050 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001051 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001052 path.moveTo(1,3);
1053 path.cubicTo(5,6, 5,3, 5,4);
1054 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001055 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001056 pathB.moveTo(3,5);
1057 pathB.cubicTo(4,5, 3,1, 6,5);
1058 pathB.close();
1059 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1060}
1061
1062static void cubicOp63d(skiatest::Reporter* reporter, const char* filename) {
1063 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001064 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001065 path.moveTo(2,3);
1066 path.cubicTo(0,4, 3,2, 5,3);
1067 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001068 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001069 pathB.moveTo(2,3);
1070 pathB.cubicTo(3,5, 3,2, 4,0);
1071 pathB.close();
1072 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1073}
1074
1075static void cubicOp64d(skiatest::Reporter* reporter, const char* filename) {
1076 SkPath path, pathB;
1077 path.moveTo(0,1);
1078 path.cubicTo(0,1, 1,0, 3,0);
1079 path.lineTo(0,1);
1080 path.close();
1081 pathB.moveTo(0,1);
1082 pathB.cubicTo(0,3, 1,0, 1,0);
1083 pathB.lineTo(0,1);
1084 pathB.close();
1085 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1086}
1087
1088static void cubicOp65d(skiatest::Reporter* reporter, const char* filename) {
1089 SkPath path, pathB;
1090 path.moveTo(0,1);
1091 path.cubicTo(1,5, 1,0, 1,0);
1092 path.lineTo(0,1);
1093 path.close();
1094 pathB.moveTo(0,1);
1095 pathB.cubicTo(0,1, 1,0, 5,1);
1096 pathB.lineTo(0,1);
1097 pathB.close();
1098 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1099}
1100
1101static void rectOp1d(skiatest::Reporter* reporter, const char* filename) {
1102 SkPath path, pathB;
1103 path.moveTo(0,1);
1104 path.cubicTo(0,1, 1,0, 3,0);
1105 path.lineTo(0,1);
1106 path.close();
1107 pathB.moveTo(0,1);
1108 pathB.cubicTo(0,3, 1,0, 1,0);
1109 pathB.lineTo(0,1);
1110 pathB.close();
1111 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1112}
1113
1114static void cubicOp66u(skiatest::Reporter* reporter, const char* filename) {
1115 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001116 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001117 path.moveTo(0,1);
1118 path.cubicTo(2,6, 4,2, 5,3);
1119 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001120 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001121 pathB.moveTo(2,4);
1122 pathB.cubicTo(3,5, 1,0, 6,2);
1123 pathB.close();
1124 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
1125}
1126
1127static void cubicOp67u(skiatest::Reporter* reporter, const char* filename) {
1128 SkPath path, pathB;
1129 path.moveTo(3,5);
1130 path.cubicTo(1,6, 5,0, 3,1);
1131 path.lineTo(3,5);
1132 path.close();
1133 pathB.moveTo(0,5);
1134 pathB.cubicTo(1,3, 5,3, 6,1);
1135 pathB.lineTo(0,5);
1136 pathB.close();
1137 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
1138}
1139
1140static void cubicOp68u(skiatest::Reporter* reporter, const char* filename) {
1141 SkPath path, pathB;
1142 path.moveTo(0,5);
1143 path.cubicTo(4,5, 4,1, 5,0);
1144 path.close();
1145 pathB.moveTo(1,4);
1146 pathB.cubicTo(0,5, 5,0, 5,4);
1147 pathB.close();
1148 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
1149}
1150
1151static void cubicOp69d(skiatest::Reporter* reporter, const char* filename) {
1152 SkPath path, pathB;
1153 path.moveTo(1,3);
1154 path.cubicTo(0,1, 3,1, 2,0);
1155 path.close();
1156 pathB.moveTo(1,3);
1157 pathB.cubicTo(0,2, 3,1, 1,0);
1158 pathB.close();
1159 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1160}
1161
1162SkPathOp ops[] = {
1163 kUnion_SkPathOp,
1164 kXOR_SkPathOp,
1165 kReverseDifference_SkPathOp,
1166 kXOR_SkPathOp,
1167 kReverseDifference_SkPathOp,
1168};
1169
1170static void rRect1(skiatest::Reporter* reporter, const char* filename) {
1171 SkScalar xA = 0.65f;
1172 SkScalar xB = 10.65f;
1173 SkScalar xC = 20.65f;
1174 SkScalar xD = 30.65f;
1175 SkScalar xE = 40.65f;
1176 SkScalar xF = 50.65f;
1177
1178 SkScalar yA = 0.65f;
1179 SkScalar yB = 10.65f;
1180 SkScalar yC = 20.65f;
1181 SkScalar yD = 30.65f;
1182 SkScalar yE = 40.65f;
1183 SkScalar yF = 50.65f;
1184 SkPath paths[5];
1185 SkRect rects[5];
Mike Reed92b33352019-08-24 19:39:13 -04001186 rects[0].setLTRB(xB, yB, xE, yE);
Yuqian Li3154a532017-09-06 13:33:30 -04001187 paths[0].addRoundRect(rects[0], SkIntToScalar(5), SkIntToScalar(5)); // red
Mike Reed92b33352019-08-24 19:39:13 -04001188 rects[1].setLTRB(xA, yA, xD, yD);
Yuqian Li3154a532017-09-06 13:33:30 -04001189 paths[1].addRoundRect(rects[1], SkIntToScalar(5), SkIntToScalar(5)); // green
Mike Reed92b33352019-08-24 19:39:13 -04001190 rects[2].setLTRB(xC, yA, xF, yD);
Yuqian Li3154a532017-09-06 13:33:30 -04001191 paths[2].addRoundRect(rects[2], SkIntToScalar(5), SkIntToScalar(5)); // blue
Mike Reed92b33352019-08-24 19:39:13 -04001192 rects[3].setLTRB(xA, yC, xD, yF);
Yuqian Li3154a532017-09-06 13:33:30 -04001193 paths[3].addRoundRect(rects[3], SkIntToScalar(5), SkIntToScalar(5)); // yellow
Mike Reed92b33352019-08-24 19:39:13 -04001194 rects[4].setLTRB(xC, yC, xF, yF);
Yuqian Li3154a532017-09-06 13:33:30 -04001195 paths[4].addRoundRect(rects[4], SkIntToScalar(5), SkIntToScalar(5)); // cyan
1196 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05001197 path.setFillType(SkPathFillType::kInverseEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04001198 for (int index = 0; index < 5; ++index) {
Cary Clark4533f3d2018-08-08 09:48:09 -04001199 SkString uniqueName;
1200 uniqueName.printf("%s%d", filename, index);
1201 testPathOp(reporter, path, paths[index], ops[index], uniqueName.c_str());
Yuqian Li3154a532017-09-06 13:33:30 -04001202 REPORTER_ASSERT(reporter, Op(path, paths[index], ops[index], &path));
1203 }
1204}
1205
1206static void skp1(skiatest::Reporter* reporter, const char* filename) {
1207 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05001208 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04001209 path.moveTo(189,7);
1210 path.cubicTo(189,5.34314585f, 190.34314f,4, 192,4);
1211 path.lineTo(243,4);
1212 path.cubicTo(244.65686f,4, 246,5.34314585f, 246,7);
1213 path.lineTo(246,21);
1214 path.cubicTo(246,22.6568546f, 244.65686f,24, 243,24);
1215 path.lineTo(192,24);
1216 path.cubicTo(190.34314f,24, 189,22.6568546f, 189,21);
1217 path.lineTo(189,7);
1218 path.close();
1219 path.moveTo(191,8);
1220 path.cubicTo(191,6.89543009f, 191.895432f,6, 193,6);
1221 path.lineTo(242,6);
1222 path.cubicTo(243.104568f,6, 244,6.89543009f, 244,8);
1223 path.lineTo(244,20);
1224 path.cubicTo(244,21.1045704f, 243.104568f,22, 242,22);
1225 path.lineTo(193,22);
1226 path.cubicTo(191.895432f,22, 191,21.1045704f, 191,20);
1227 path.lineTo(191,8);
1228 path.close();
1229 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001230 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001231 pathB.moveTo(189,4);
1232 pathB.lineTo(199,14);
1233 pathB.lineTo(236,14);
1234 pathB.lineTo(246,4);
1235 pathB.lineTo(189,4);
1236 pathB.close();
1237 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1238}
1239
1240static void skp2(skiatest::Reporter* reporter, const char* filename) {
1241 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05001242 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04001243 path.moveTo(253.000000f, 11757.0000f);
1244 path.lineTo(253.000000f, 222.000000f);
1245 path.lineTo(823.000000f, 222.000000f);
1246 path.lineTo(823.000000f, 11757.0000f);
1247 path.lineTo(253.000000f, 11757.0000f);
1248 path.close();
1249 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001250 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001251 pathB.moveTo(258.000000f, 1028.00000f);
1252 pathB.lineTo(258.000000f, 1027.00000f);
1253 pathB.lineTo(823.000000f, 1027.00000f);
1254 pathB.lineTo(823.000000f, 1028.00000f);
1255 pathB.lineTo(258.000000f, 1028.00000f);
1256 pathB.close();
1257 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1258}
1259
1260static void skp3(skiatest::Reporter* reporter, const char* filename) {
1261 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05001262 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04001263 path.moveTo(717.000000f, 507.000000f);
1264 path.lineTo(717.000000f, 425.000000f);
1265 path.lineTo(973.000000f, 425.000000f);
1266 path.lineTo(973.000000f, 507.000000f);
1267 path.quadTo(973.000000f, 508.242645f, 972.121582f, 509.121613f);
1268 path.quadTo(971.242615f, 510.000000f, 970.000000f, 510.000000f);
1269 path.lineTo(720.000000f, 510.000000f);
1270 path.quadTo(718.757385f, 510.000000f, 717.878418f, 509.121613f);
1271 path.quadTo(717.000000f, 508.242645f, 717.000000f, 507.000000f);
1272 path.close();
1273 path.moveTo(719.000000f, 426.000000f);
1274 path.lineTo(971.000000f, 426.000000f);
1275 path.lineTo(971.000000f, 506.000000f);
1276 path.cubicTo(971.000000f, 507.104584f, 970.104553f, 508.000000f, 969.000000f, 508.000000f);
1277 path.lineTo(721.000000f, 508.000000f);
1278 path.cubicTo(719.895447f, 508.000000f, 719.000000f, 507.104584f, 719.000000f, 506.000000f);
1279 path.lineTo(719.000000f, 426.000000f);
1280 path.close();
1281 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001282 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001283 pathB.moveTo(717.000000f, 510.000000f);
1284 pathB.lineTo(760.000000f, 467.000000f);
1285 pathB.lineTo(930.000000f, 467.000000f);
1286 pathB.lineTo(973.000000f, 510.000000f);
1287 pathB.lineTo(717.000000f, 510.000000f);
1288 pathB.close();
1289 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1290}
1291
1292static void skp4(skiatest::Reporter* reporter, const char* filename) {
1293 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05001294 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04001295 path.moveTo(230.756805f, 591.756775f);
1296 path.quadTo(232.514725f, 590.000000f, 235.000000f, 590.000000f);
1297 path.lineTo(300.000000f, 590.000000f);
1298 path.quadTo(302.485291f, 590.000000f, 304.243195f, 591.756775f);
1299 path.quadTo(306.000000f, 593.514709f, 306.000000f, 596.000000f);
1300 path.lineTo(306.000000f, 617.000000f);
1301 path.lineTo(229.000000f, 617.000000f);
1302 path.lineTo(229.000000f, 596.000000f);
1303 path.quadTo(229.000000f, 593.514709f, 230.756805f, 591.756775f);
1304 path.close();
1305 path.moveTo(231.000000f, 597.000000f);
1306 path.cubicTo(231.000000f, 594.238586f, 233.238571f, 592.000000f, 236.000000f, 592.000000f);
1307 path.lineTo(299.000000f, 592.000000f);
1308 path.cubicTo(301.761414f, 592.000000f, 304.000000f, 594.238586f, 304.000000f, 597.000000f);
1309 path.lineTo(304.000000f, 616.000000f);
1310 path.lineTo(231.000000f, 616.000000f);
1311 path.lineTo(231.000000f, 597.000000f);
1312 path.close();
1313 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001314 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001315 pathB.moveTo(306.000000f, 590.000000f);
1316 pathB.lineTo(292.000000f, 604.000000f);
1317 pathB.lineTo(305.000000f, 617.000000f);
1318 pathB.lineTo(306.000000f, 617.000000f);
1319 pathB.lineTo(306.000000f, 590.000000f);
1320 pathB.close();
1321 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1322}
1323
1324static void skp5(skiatest::Reporter* reporter, const char* filename) {
1325 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05001326 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04001327 path.moveTo(18.0000000f, 226.000000f);
1328 path.quadTo(14.6862917f, 226.000000f, 12.3423996f, 228.342407f);
1329 path.quadTo(10.0000000f, 230.686295f, 10.0000000f, 234.000000f);
1330 path.lineTo(10.0000000f, 253.000000f);
1331 path.lineTo(1247.00000f, 253.000000f);
1332 path.lineTo(1247.00000f, 234.000000f);
1333 path.quadTo(1247.00000f, 230.686295f, 1244.65759f, 228.342407f);
1334 path.quadTo(1242.31372f, 226.000000f, 1239.00000f, 226.000000f);
1335 path.lineTo(18.0000000f, 226.000000f);
1336 path.close();
1337 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001338 pathB.setFillType(SkPathFillType::kInverseWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001339 pathB.moveTo(18.0000000f, 226.000000f);
1340 pathB.lineTo(1239.00000f, 226.000000f);
1341 pathB.cubicTo(1243.41833f, 226.000000f, 1247.00000f, 229.581726f, 1247.00000f, 234.000000f);
1342 pathB.lineTo(1247.00000f, 252.000000f);
1343 pathB.lineTo(10.0000000f, 252.000000f);
1344 pathB.lineTo(10.0000000f, 234.000000f);
1345 pathB.cubicTo(10.0000000f, 229.581726f, 13.5817204f, 226.000000f, 18.0000000f, 226.000000f);
1346 pathB.close();
1347 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1348}
1349
1350static void cubicOp70d(skiatest::Reporter* reporter, const char* filename) {
1351 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001352 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001353 path.moveTo(0,1);
1354 path.cubicTo(0,5, 4,0, 5,0);
1355 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001356 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001357 pathB.moveTo(0,4);
1358 pathB.cubicTo(0,5, 1,0, 5,0);
1359 pathB.close();
1360 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1361}
1362
1363static void cubicOp71d(skiatest::Reporter* reporter, const char* filename) {
1364 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001365 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001366 path.moveTo(0,1);
1367 path.cubicTo(0,5, 4,1, 6,4);
1368 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001369 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001370 pathB.moveTo(1,4);
1371 pathB.cubicTo(4,6, 1,0, 5,0);
1372 pathB.close();
1373 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1374}
1375
1376static void cubicOp72i(skiatest::Reporter* reporter, const char* filename) {
1377 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001378 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001379 path.moveTo(0,1);
1380 path.cubicTo(0,5, 5,2, 5,4);
1381 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001382 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001383 pathB.moveTo(2,5);
1384 pathB.cubicTo(4,5, 1,0, 5,0);
1385 pathB.close();
1386 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1387}
1388
1389static void cubicOp73d(skiatest::Reporter* reporter, const char* filename) {
1390 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001391 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001392 path.moveTo(0,1);
1393 path.cubicTo(3,4, 4,0, 6,4);
1394 path.lineTo(0,1);
1395 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001396 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001397 pathB.moveTo(0,4);
1398 pathB.cubicTo(4,6, 1,0, 4,3);
1399 pathB.lineTo(0,4);
1400 pathB.close();
1401 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1402}
1403
1404static void cubicOp74d(skiatest::Reporter* reporter, const char* filename) {
1405 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001406 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001407 path.moveTo(0,1);
1408 path.cubicTo(1,5, 5,1, 5,1);
1409 path.lineTo(0,1);
1410 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001411 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001412 pathB.moveTo(1,5);
1413 pathB.cubicTo(1,5, 1,0, 5,1);
1414 pathB.lineTo(1,5);
1415 pathB.close();
1416 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1417}
1418
1419static void cubicOp75d(skiatest::Reporter* reporter, const char* filename) {
1420 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001421 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001422 path.moveTo(0,1);
1423 path.cubicTo(0,4, 5,1, 6,4);
1424 path.lineTo(0,1);
1425 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001426 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001427 pathB.moveTo(1,5);
1428 pathB.cubicTo(4,6, 1,0, 4,0);
1429 pathB.lineTo(1,5);
1430 pathB.close();
1431 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1432}
1433
1434static void cubicOp76u(skiatest::Reporter* reporter, const char* filename) {
1435 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001436 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001437 path.moveTo(0,1);
1438 path.cubicTo(0,2, 2,0, 5,3);
1439 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001440 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001441 pathB.moveTo(0,2);
1442 pathB.cubicTo(3,5, 1,0, 2,0);
1443 pathB.close();
1444 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
1445}
1446
1447static void cubicOp77i(skiatest::Reporter* reporter, const char* filename) {
1448 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001449 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04001450 path.moveTo(0,1);
1451 path.cubicTo(1,3, 2,0, 3,2);
1452 path.lineTo(0,1);
1453 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001454 pathB.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04001455 pathB.moveTo(0,2);
1456 pathB.cubicTo(2,3, 1,0, 3,1);
1457 pathB.lineTo(0,2);
1458 pathB.close();
1459 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1460}
1461
1462static void cubicOp78u(skiatest::Reporter* reporter, const char* filename) {
1463 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001464 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04001465 path.moveTo(1,6);
1466 path.cubicTo(1,6, 5,0, 6,1);
1467 path.lineTo(1,6);
1468 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001469 pathB.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04001470 pathB.moveTo(0,5);
1471 pathB.cubicTo(1,6, 6,1, 6,1);
1472 pathB.lineTo(0,5);
1473 pathB.close();
1474 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
1475}
1476
1477static void cubicOp79u(skiatest::Reporter* reporter, const char* filename) {
1478 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001479 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001480 path.moveTo(0,1);
1481 path.cubicTo(1,3, 1,0, 6,4);
1482 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001483 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001484 pathB.moveTo(0,1);
1485 pathB.cubicTo(4,6, 1,0, 3,1);
1486 pathB.close();
1487 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1488}
1489
1490static void cubicOp80i(skiatest::Reporter* reporter, const char* filename) {
1491 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001492 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001493 path.moveTo(0,1);
1494 path.cubicTo(2,3, 2,1, 4,3);
1495 path.lineTo(0,1);
1496 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001497 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001498 pathB.moveTo(1,2);
1499 pathB.cubicTo(3,4, 1,0, 3,2);
1500 pathB.lineTo(1,2);
1501 pathB.close();
1502 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1503}
1504
1505static void cubicOp81d(skiatest::Reporter* reporter, const char* filename) {
1506 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001507 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001508 path.moveTo(0,1);
1509 path.cubicTo(4,6, 4,3, 5,4);
1510 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001511 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001512 pathB.moveTo(3,4);
1513 pathB.cubicTo(4,5, 1,0, 6,4);
1514 pathB.close();
1515 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1516}
1517
1518static void cubicOp82i(skiatest::Reporter* reporter, const char* filename) {
1519 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001520 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04001521 path.moveTo(0,1);
1522 path.cubicTo(2,3, 5,2, 3,0);
1523 path.lineTo(0,1);
1524 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001525 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001526 pathB.moveTo(2,5);
1527 pathB.cubicTo(0,3, 1,0, 3,2);
1528 pathB.lineTo(2,5);
1529 pathB.close();
1530 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1531}
1532
1533static void cubicOp83i(skiatest::Reporter* reporter, const char* filename) {
1534 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001535 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001536 path.moveTo(0,1);
1537 path.cubicTo(0,3, 2,1, 4,1);
1538 path.lineTo(0,1);
1539 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001540 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001541 pathB.moveTo(1,2);
1542 pathB.cubicTo(1,4, 1,0, 3,0);
1543 pathB.lineTo(1,2);
1544 pathB.close();
1545 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1546}
1547
1548static void cubicOp84d(skiatest::Reporter* reporter, const char* filename) {
1549 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001550 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001551 path.moveTo(0,4);
1552 path.cubicTo(2,3, 6,3, 3,2);
1553 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001554 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001555 pathB.moveTo(3,6);
1556 pathB.cubicTo(2,3, 4,0, 3,2);
1557 pathB.close();
1558 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1559}
1560
1561static void skpClip1(skiatest::Reporter* reporter, const char* filename) {
1562 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05001563 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04001564 path.moveTo(1126.17114f, 877.171204f);
1565 path.quadTo(1127.34314f, 876.000000f, 1129.00000f, 876.000000f);
1566 path.lineTo(1243.00000f, 876.000000f);
1567 path.quadTo(1244.65686f, 876.000000f, 1245.82886f, 877.171204f);
1568 path.quadTo(1247.00000f, 878.343140f, 1247.00000f, 880.000000f);
1569 path.lineTo(1247.00000f, 907.000000f);
1570 path.lineTo(1246.00000f, 907.000000f);
1571 path.lineTo(1246.00000f, 880.000000f);
1572 path.cubicTo(1246.00000f, 878.343140f, 1244.65686f, 877.000000f, 1243.00000f, 877.000000f);
1573 path.lineTo(1129.00000f, 877.000000f);
1574 path.cubicTo(1127.34314f, 877.000000f, 1126.00000f, 878.343140f, 1126.00000f, 880.000000f);
1575 path.lineTo(1126.00000f, 907.000000f);
1576 path.lineTo(1125.00000f, 907.000000f);
1577 path.lineTo(1125.00000f, 880.000000f);
1578 path.quadTo(1125.00000f, 878.343140f, 1126.17114f, 877.171204f);
1579 path.close();
1580 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001581 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001582 pathB.moveTo(1247.00000f, 876.000000f);
1583 pathB.lineTo(1231.00000f, 892.000000f);
1584 pathB.lineTo(1246.00000f, 907.000000f);
1585 pathB.lineTo(1247.00000f, 907.000000f);
1586 pathB.lineTo(1247.00000f, 876.000000f);
1587 pathB.close();
1588 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1589}
1590
1591static void skpClip2(skiatest::Reporter* reporter, const char* filename) {
1592 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05001593 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04001594 path.moveTo(134.000000f, 11414.0000f);
1595 path.cubicTo(131.990234f, 11414.0000f, 130.326660f, 11415.4824f, 130.042755f, 11417.4131f);
1596 path.cubicTo(130.233124f, 11418.3193f, 131.037079f, 11419.0000f, 132.000000f, 11419.0000f);
1597 path.lineTo(806.000000f, 11419.0000f);
1598 path.cubicTo(806.962891f, 11419.0000f, 807.766907f, 11418.3193f, 807.957275f, 11417.4131f);
1599 path.cubicTo(807.673401f, 11415.4824f, 806.009766f, 11414.0000f, 804.000000f, 11414.0000f);
1600 path.lineTo(134.000000f, 11414.0000f);
1601 path.close();
1602 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001603 pathB.setFillType(SkPathFillType::kInverseWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001604 pathB.moveTo(132.000000f, 11415.0000f);
1605 pathB.lineTo(806.000000f, 11415.0000f);
1606 pathB.cubicTo(807.104553f, 11415.0000f, 808.000000f, 11415.4473f, 808.000000f, 11416.0000f);
1607 pathB.lineTo(808.000000f, 11417.0000f);
1608 pathB.cubicTo(808.000000f, 11418.1045f, 807.104553f, 11419.0000f, 806.000000f, 11419.0000f);
1609 pathB.lineTo(132.000000f, 11419.0000f);
1610 pathB.cubicTo(130.895432f, 11419.0000f, 130.000000f, 11418.1045f, 130.000000f, 11417.0000f);
1611 pathB.lineTo(130.000000f, 11416.0000f);
1612 pathB.cubicTo(130.000000f, 11415.4473f, 130.895432f, 11415.0000f, 132.000000f, 11415.0000f);
1613 pathB.close();
1614 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1615}
1616
1617static void skp96prezzi1(skiatest::Reporter* reporter, const char* filename) {
1618 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05001619 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04001620 path.moveTo(157.464005f, 670.463989f);
1621 path.quadTo(158.928925f, 669.000000f, 161.000000f, 669.000000f);
1622 path.lineTo(248.000000f, 669.000000f);
1623 path.quadTo(250.071075f, 669.000000f, 251.535995f, 670.463989f);
1624 path.quadTo(253.000000f, 671.928955f, 253.000000f, 674.000000f);
1625 path.lineTo(253.000000f, 706.000000f);
1626 path.lineTo(251.000000f, 706.000000f);
1627 path.lineTo(251.000000f, 675.000000f);
1628 path.cubicTo(251.000000f, 672.790833f, 249.209137f, 671.000000f, 247.000000f, 671.000000f);
1629 path.lineTo(162.000000f, 671.000000f);
1630 path.cubicTo(159.790863f, 671.000000f, 158.000000f, 672.790833f, 158.000000f, 675.000000f);
1631 path.lineTo(158.000000f, 706.000000f);
1632 path.lineTo(156.000000f, 706.000000f);
1633 path.lineTo(156.000000f, 674.000000f);
1634 path.quadTo(156.000000f, 671.928955f, 157.464005f, 670.463989f);
1635 path.close();
1636 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001637 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001638 pathB.moveTo(156.000000f, 669.000000f);
1639 pathB.lineTo(178.500000f, 691.500000f);
1640 pathB.lineTo(230.500000f, 691.500000f);
1641 pathB.lineTo(253.000000f, 669.000000f);
1642 pathB.lineTo(156.000000f, 669.000000f);
1643 pathB.close();
1644 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1645}
1646
1647static void skpancestry_com1(skiatest::Reporter* reporter, const char* filename) {
1648 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05001649 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04001650 path.moveTo(161.000000f, 925.000000f);
1651 path.cubicTo(159.874390f, 925.000000f, 158.835663f, 925.371948f, 158.000000f, 925.999634f);
1652 path.lineTo(158.000000f, 926.000000f);
1653 path.lineTo(1108.00000f, 926.000000f);
1654 path.lineTo(1108.00000f, 925.999634f);
1655 path.cubicTo(1107.16443f, 925.371948f, 1106.12561f, 925.000000f, 1105.00000f, 925.000000f);
1656 path.lineTo(161.000000f, 925.000000f);
1657 path.close();
1658 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001659 pathB.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04001660 pathB.moveTo(161.000000f, 926.000000f);
1661 pathB.lineTo(1105.00000f, 926.000000f);
1662 pathB.cubicTo(1107.20911f, 926.000000f, 1109.00000f, 927.790833f, 1109.00000f, 930.000000f);
1663 pathB.lineTo(1109.00000f, 956.000000f);
1664 pathB.cubicTo(1109.00000f, 958.209167f, 1107.20911f, 960.000000f, 1105.00000f, 960.000000f);
1665 pathB.lineTo(161.000000f, 960.000000f);
1666 pathB.cubicTo(158.790863f, 960.000000f, 157.000000f, 958.209167f, 157.000000f, 956.000000f);
1667 pathB.lineTo(157.000000f, 930.000000f);
1668 pathB.cubicTo(157.000000f, 927.790833f, 158.790863f, 926.000000f, 161.000000f, 926.000000f);
1669 pathB.close();
1670 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1671}
1672
1673static void skpeldorado_com_ua1(skiatest::Reporter* reporter, const char* filename) {
1674 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05001675 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04001676 path.moveTo(286.695129f, 291.000000f);
1677 path.lineTo(229.304855f, 561.000000f);
1678 path.lineTo(979.304871f, 561.000000f);
1679 path.lineTo(1036.69507f, 291.000000f);
1680 path.lineTo(286.695129f, 291.000000f);
1681 path.close();
1682 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001683 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001684 pathB.moveTo(1006.69513f, 291.000000f);
1685 pathB.cubicTo(1023.26367f, 291.000000f, 1033.84021f, 304.431458f, 1030.31836f, 321.000000f);
1686 pathB.lineTo(985.681519f, 531.000000f);
1687 pathB.cubicTo(982.159790f, 547.568542f, 965.873413f, 561.000000f, 949.304871f, 561.000000f);
1688 pathB.lineTo(259.304871f, 561.000000f);
1689 pathB.cubicTo(242.736313f, 561.000000f, 232.159805f, 547.568542f, 235.681549f, 531.000000f);
1690 pathB.lineTo(280.318420f, 321.000000f);
1691 pathB.cubicTo(283.840179f, 304.431458f, 300.126587f, 291.000000f, 316.695129f, 291.000000f);
1692 pathB.lineTo(1006.69513f, 291.000000f);
1693 pathB.close();
1694 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1695}
1696
1697static void skpbyte_com1(skiatest::Reporter* reporter, const char* filename) {
1698 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05001699 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04001700 path.moveTo(968.000000f, 14.0000000f);
1701 path.cubicTo(965.238586f, 14.0000000f, 963.000000f, 16.2385769f, 963.000000f, 19.0000000f);
1702 path.lineTo(963.000000f, 32.0000000f);
1703 path.cubicTo(963.000000f, 34.7614250f, 965.238586f, 37.0000000f, 968.000000f, 37.0000000f);
1704 path.lineTo(1034.00000f, 37.0000000f);
1705 path.cubicTo(1036.76147f, 37.0000000f, 1039.00000f, 34.7614250f, 1039.00000f, 32.0000000f);
1706 path.lineTo(1039.00000f, 19.0000000f);
1707 path.cubicTo(1039.00000f, 16.2385769f, 1036.76147f, 14.0000000f, 1034.00000f, 14.0000000f);
1708 path.lineTo(968.000000f, 14.0000000f);
1709 path.close();
1710 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001711 pathB.setFillType(SkPathFillType::kInverseWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001712 pathB.moveTo(968.000000f, 14.0000000f);
1713 pathB.lineTo(1034.00000f, 14.0000000f);
1714 pathB.cubicTo(1036.76147f, 14.0000000f, 1039.00000f, 16.2385750f, 1039.00000f, 19.0000000f);
1715 pathB.lineTo(1039.00000f, 32.0000000f);
1716 pathB.cubicTo(1039.00000f, 34.2091408f, 1036.76147f, 36.0000000f, 1034.00000f, 36.0000000f);
1717 pathB.lineTo(968.000000f, 36.0000000f);
1718 pathB.cubicTo(965.238586f, 36.0000000f, 963.000000f, 34.2091408f, 963.000000f, 32.0000000f);
1719 pathB.lineTo(963.000000f, 19.0000000f);
1720 pathB.cubicTo(963.000000f, 16.2385750f, 965.238586f, 14.0000000f, 968.000000f, 14.0000000f);
1721 pathB.close();
1722 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1723}
1724
1725static void skphealth_com76(skiatest::Reporter* reporter, const char* filename) {
1726 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05001727 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04001728 path.moveTo(708.099182f, 7.09919119f);
1729 path.lineTo(708.099182f, 7.09920025f);
1730 path.quadTo(704.000000f, 11.2010098f, 704.000000f, 17.0000000f);
1731 path.lineTo(704.000000f, 33.0000000f);
1732 path.lineTo(705.000000f, 33.0000000f);
1733 path.lineTo(705.000000f, 17.0000000f);
1734 path.cubicTo(705.000000f, 13.4101496f, 706.455078f, 10.1601505f, 708.807617f, 7.80761385f);
1735 path.lineTo(708.099182f, 7.09919119f);
1736 path.close();
1737 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001738 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001739 pathB.moveTo(704.000000f, 3.00000000f);
1740 pathB.lineTo(704.000000f, 33.0000000f);
1741 pathB.lineTo(705.000000f, 33.0000000f);
1742 pathB.lineTo(719.500000f, 3.00000000f);
1743 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1744}
1745
1746static void skpahrefs_com88(skiatest::Reporter* reporter, const char* filename) {
1747 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05001748 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04001749 path.moveTo(1099.82886f, 7.17117119f);
1750 path.lineTo(1099.12134f, 7.87867832f);
1751 path.cubicTo(1099.66418f, 8.42157173f, 1100.00000f, 9.17157173f, 1100.00000f, 10.0000000f);
1752 path.lineTo(1100.00000f, 28.0000000f);
1753 path.cubicTo(1100.00000f, 29.6568546f, 1098.65686f, 31.0000000f, 1097.00000f, 31.0000000f);
1754 path.lineTo(1088.00000f, 31.0000000f);
1755 path.lineTo(1088.00000f, 32.0000000f);
1756 path.lineTo(1097.00000f, 32.0000000f);
1757 path.quadTo(1098.65686f, 32.0000000f, 1099.82886f, 30.8288002f);
1758 path.quadTo(1101.00000f, 29.6568546f, 1101.00000f, 28.0000000f);
1759 path.lineTo(1101.00000f, 10.0000000f);
1760 path.quadTo(1101.00000f, 8.34314537f, 1099.82886f, 7.17119980f);
1761 path.lineTo(1099.82886f, 7.17117119f);
1762 path.close();
1763 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001764 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001765 pathB.moveTo(1101.00000f, 6.00000000f);
1766 pathB.lineTo(1088.00000f, 6.00000000f);
1767 pathB.lineTo(1088.00000f, 19.0000000f);
1768 pathB.lineTo(1101.00000f, 32.0000000f);
1769 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1770}
1771
1772static void skpahrefs_com29(skiatest::Reporter* reporter, const char* filename) {
1773 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05001774 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04001775 path.moveTo(1037.17114f, 7.17119980f);
1776 path.quadTo(1038.34314f, 6.00000000f, 1040.00000f, 6.00000000f);
1777 path.lineTo(1074.00000f, 6.00000000f);
1778 path.lineTo(1074.00000f, 32.0000000f);
1779 path.lineTo(1040.00000f, 32.0000000f);
1780 path.quadTo(1038.34314f, 32.0000000f, 1037.17114f, 30.8288002f);
1781 path.quadTo(1036.00000f, 29.6568546f, 1036.00000f, 28.0000000f);
1782 path.lineTo(1036.00000f, 10.0000000f);
1783 path.quadTo(1036.00000f, 8.34314537f, 1037.17114f, 7.17119980f);
1784 path.close();
1785 path.moveTo(1037.00000f, 10.0000000f);
1786 path.cubicTo(1037.00000f, 8.34314537f, 1038.34314f, 7.00000000f, 1040.00000f, 7.00000000f);
1787 path.lineTo(1073.00000f, 7.00000000f);
1788 path.lineTo(1073.00000f, 31.0000000f);
1789 path.lineTo(1040.00000f, 31.0000000f);
1790 path.cubicTo(1038.34314f, 31.0000000f, 1037.00000f, 29.6568546f, 1037.00000f, 28.0000000f);
1791 path.lineTo(1037.00000f, 10.0000000f);
1792 path.close();
1793 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001794 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001795 pathB.moveTo(1036.00000f, 32.0000000f);
1796 pathB.lineTo(1049.00000f, 19.0000000f);
1797 pathB.lineTo(1073.00000f, 31.0000000f);
1798 pathB.lineTo(1074.00000f, 32.0000000f);
1799 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1800}
1801
1802static void cubicOp85d(skiatest::Reporter* reporter, const char* filename) {
1803 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05001804 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001805 path.moveTo(0,1);
1806 path.cubicTo(1,6, 1,0, 6,2);
1807 path.close();
1808 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001809 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001810 pathB.moveTo(0,1);
1811 pathB.cubicTo(2,6, 1,0, 6,1);
1812 pathB.close();
1813 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1814}
1815
1816static void skpkkiste_to98(skiatest::Reporter* reporter, const char* filename) {
1817 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05001818 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04001819 path.moveTo(96, 122);
1820 path.cubicTo(94.6192932f, 122, 93.3692932f, 122.559647f, 92.4644699f, 123.46447f);
1821 path.lineTo(94.1715698f, 125.17157f);
1822 path.cubicTo(94.8954315f, 124.447708f, 95.8954315f, 124, 97, 124);
1823 path.lineTo(257, 124);
1824 path.cubicTo(258.104553f, 124, 259.104584f, 124.447708f, 259.82843f, 125.17157f);
1825 path.lineTo(261.535522f, 123.46447f);
1826 path.cubicTo(260.630707f, 122.559647f, 259.380707f, 122, 258, 122);
1827 path.lineTo(96, 122);
1828 path.close();
1829 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001830 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001831 pathB.moveTo(258, 122);
1832 pathB.cubicTo(260.761414f, 122, 263, 124.238579f, 263, 127);
1833 pathB.lineTo(263, 284);
1834 pathB.cubicTo(263, 286.761414f, 260.761414f, 289, 258, 289);
1835 pathB.lineTo(96, 289);
1836 pathB.cubicTo(93.2385788f, 289, 91, 286.761414f, 91, 284);
1837 pathB.lineTo(91, 127);
1838 pathB.cubicTo(91, 124.238579f, 93.2385788f, 122, 96, 122);
1839 pathB.lineTo(258, 122);
1840 pathB.close();
1841 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1842}
1843
1844static void issue1417(skiatest::Reporter* reporter, const char* filename) {
1845 SkPath path1;
1846 path1.moveTo(122.58908843994140625f, 82.2836456298828125f);
1847 path1.quadTo(129.8215789794921875f, 80, 138, 80);
1848 path1.quadTo(147.15692138671875f, 80, 155.1280364990234375f, 82.86279296875f);
1849 path1.lineTo(161.1764678955078125f, 100);
1850 path1.lineTo(161.1764678955078125f, 100);
1851 path1.lineTo(115.29412078857421875f, 100);
1852 path1.lineTo(115.29412078857421875f, 100);
1853 path1.lineTo(122.58908843994140625f, 82.2836456298828125f);
1854 path1.lineTo(122.58908843994140625f, 82.2836456298828125f);
1855 path1.close();
1856 path1.moveTo(98.68194580078125f, 140.343841552734375f);
1857 path1.lineTo(115.29412078857421875f, 100);
1858 path1.lineTo(115.29412078857421875f, 100);
1859 path1.lineTo(97.9337615966796875f, 100);
1860 path1.lineTo(97.9337615966796875f, 100);
1861 path1.quadTo(88, 112.94264984130859375f, 88, 130);
1862 path1.quadTo(88, 131.544830322265625f, 88.08148956298828125f, 133.0560302734375f);
1863 path1.lineTo(98.68194580078125f, 140.343841552734375f);
1864 path1.lineTo(98.68194580078125f, 140.343841552734375f);
1865 path1.close();
1866 path1.moveTo(136.969696044921875f, 166.6666717529296875f);
1867 path1.lineTo(98.68194580078125f, 140.343841552734375f);
1868 path1.lineTo(98.68194580078125f, 140.343841552734375f);
1869 path1.lineTo(93.45894622802734375f, 153.02825927734375f);
1870 path1.lineTo(93.45894622802734375f, 153.02825927734375f);
1871 path1.quadTo(96.94116973876953125f, 159.65185546875f, 102.64466094970703125f, 165.3553466796875f);
1872 path1.quadTo(110.7924652099609375f, 173.503143310546875f, 120.8179779052734375f, 177.1177825927734375f);
1873 path1.lineTo(136.969696044921875f, 166.6666717529296875f);
1874 path1.lineTo(136.969696044921875f, 166.6666717529296875f);
1875 path1.close();
1876 path1.moveTo(175.8309783935546875f, 141.5211334228515625f);
1877 path1.lineTo(136.969696044921875f, 166.6666717529296875f);
1878 path1.lineTo(136.969696044921875f, 166.6666717529296875f);
1879 path1.lineTo(153.15728759765625f, 177.7956390380859375f);
1880 path1.lineTo(153.15728759765625f, 177.7956390380859375f);
1881 path1.quadTo(164.392425537109375f, 174.318267822265625f, 173.3553466796875f, 165.3553466796875f);
1882 path1.quadTo(177.805816650390625f, 160.9048614501953125f, 180.90380859375f, 155.8941650390625f);
1883 path1.lineTo(175.8309783935546875f, 141.5211334228515625f);
1884 path1.lineTo(175.8309783935546875f, 141.5211334228515625f);
1885 path1.close();
1886 path1.moveTo(175.8309783935546875f, 141.5211334228515625f);
1887 path1.lineTo(187.8782806396484375f, 133.7258148193359375f);
1888 path1.lineTo(187.8782806396484375f, 133.7258148193359375f);
1889 path1.quadTo(188, 131.8880615234375f, 188, 130);
1890 path1.quadTo(188, 112.942657470703125f, 178.0662384033203125f, 100);
1891 path1.lineTo(161.1764678955078125f, 100);
1892 path1.lineTo(161.1764678955078125f, 100);
1893 path1.lineTo(175.8309783935546875f, 141.5211334228515625f);
1894 path1.lineTo(175.8309783935546875f, 141.5211334228515625f);
1895 path1.close();
1896
1897 SkPath path2;
1898 path2.moveTo(174.117645263671875f, 100);
1899 path2.lineTo(161.1764678955078125f, 100);
1900 path2.lineTo(161.1764678955078125f, 100);
1901 path2.lineTo(155.1280364990234375f, 82.86279296875f);
1902 path2.lineTo(155.1280364990234375f, 82.86279296875f);
1903 path2.quadTo(153.14971923828125f, 82.15229034423828125f, 151.098419189453125f, 81.618133544921875f);
1904 path2.lineTo(143.5294189453125f, 100);
1905 path2.lineTo(143.5294189453125f, 100);
1906 path2.lineTo(161.1764678955078125f, 100);
1907 path2.lineTo(161.1764678955078125f, 100);
1908 path2.lineTo(168.23529052734375f, 120);
1909 path2.lineTo(168.23529052734375f, 120);
1910 path2.lineTo(181.1764678955078125f, 120);
1911 path2.lineTo(181.1764678955078125f, 120);
1912 path2.lineTo(186.3661956787109375f, 134.7042236328125f);
1913 path2.lineTo(186.3661956787109375f, 134.7042236328125f);
1914 path2.lineTo(187.8782806396484375f, 133.7258148193359375f);
1915 path2.lineTo(187.8782806396484375f, 133.7258148193359375f);
1916 path2.quadTo(188, 131.8880615234375f, 188, 130);
1917 path2.quadTo(188, 124.80947113037109375f, 187.080169677734375f, 120);
1918 path2.lineTo(181.1764678955078125f, 120);
1919 path2.lineTo(181.1764678955078125f, 120);
1920 path2.lineTo(174.117645263671875f, 100);
1921 path2.lineTo(174.117645263671875f, 100);
1922 path2.close();
1923 path2.moveTo(88.91983795166015625f, 120);
1924 path2.lineTo(107.0588226318359375f, 120);
1925 path2.lineTo(107.0588226318359375f, 120);
1926 path2.lineTo(98.68194580078125f, 140.343841552734375f);
1927 path2.lineTo(98.68194580078125f, 140.343841552734375f);
1928 path2.lineTo(88.08148956298828125f, 133.0560302734375f);
1929 path2.lineTo(88.08148956298828125f, 133.0560302734375f);
1930 path2.quadTo(88, 131.544830322265625f, 88, 130);
1931 path2.quadTo(88, 124.80951690673828125f, 88.91983795166015625f, 120);
1932 path2.close();
1933 path2.moveTo(96.67621612548828125f, 145.21490478515625f);
1934 path2.lineTo(98.68194580078125f, 140.343841552734375f);
1935 path2.lineTo(98.68194580078125f, 140.343841552734375f);
1936 path2.lineTo(120.68767547607421875f, 155.4727783203125f);
1937 path2.lineTo(120.68767547607421875f, 155.4727783203125f);
1938 path2.lineTo(118.68194580078125f, 160.343841552734375f);
1939 path2.lineTo(118.68194580078125f, 160.343841552734375f);
1940 path2.lineTo(96.67621612548828125f, 145.21490478515625f);
1941 path2.lineTo(96.67621612548828125f, 145.21490478515625f);
1942 path2.close();
1943 path2.moveTo(113.232177734375f, 173.5789947509765625f);
1944 path2.quadTo(116.8802642822265625f, 175.69805908203125f, 120.8179779052734375f, 177.1177825927734375f);
1945 path2.lineTo(132.2864990234375f, 169.6969757080078125f);
1946 path2.lineTo(132.2864990234375f, 169.6969757080078125f);
1947 path2.lineTo(118.68194580078125f, 160.343841552734375f);
1948 path2.lineTo(118.68194580078125f, 160.343841552734375f);
1949 path2.lineTo(113.232177734375f, 173.5789947509765625f);
1950 path2.lineTo(113.232177734375f, 173.5789947509765625f);
1951 path2.close();
1952 // FIXME : difficult data, circle back later
1953 testPathOp(reporter, path1, path2, kUnion_SkPathOp, filename);
1954}
1955
1956static void issue1418(skiatest::Reporter* reporter, const char* filename) {
1957 SkPath path1;
1958 path1.moveTo(0, 0);
1959 path1.lineTo(1, 0);
1960 path1.lineTo(1, 0);
1961 path1.lineTo(1, 1);
1962 path1.lineTo(1, 1);
1963 path1.lineTo(0, 1);
1964 path1.lineTo(0, 1);
1965 path1.lineTo(0, 0);
1966 path1.lineTo(0, 0);
1967 path1.close();
1968
1969 SkPath path2;
1970 path2.moveTo(0.64644664525985717773f, -0.35355341434478759766f);
1971 path2.quadTo(0.79289329051971435547f, -0.50000005960464477539f, 1.0000001192092895508f, -0.50000005960464477539f);
1972 path2.quadTo(1.2071068286895751953f, -0.50000005960464477539f, 1.3535535335540771484f, -0.35355341434478759766f);
1973 path2.quadTo(1.5000001192092895508f, -0.20710679888725280762f, 1.5000001192092895508f, 0);
1974 path2.quadTo(1.5000001192092895508f, 0.20710679888725280762f, 1.3535535335540771484f, 0.35355341434478759766f);
1975 path2.quadTo(1.2071068286895751953f, 0.50000005960464477539f, 1.0000001192092895508f, 0.50000005960464477539f);
1976 path2.quadTo(0.79289329051971435547f, 0.50000005960464477539f, 0.64644664525985717773f, 0.35355341434478759766f);
1977 path2.quadTo(0.50000005960464477539f, 0.20710679888725280762f, 0.50000005960464477539f, 0);
1978 path2.quadTo(0.50000005960464477539f, -0.20710679888725280762f, 0.64644664525985717773f, -0.35355341434478759766f);
1979 testPathOp(reporter, path1, path2, kIntersect_SkPathOp, filename);
1980}
1981
1982static void cubicOp85i(skiatest::Reporter* reporter, const char* filename) {
1983 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05001984 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001985 path.moveTo(3, 4);
1986 path.cubicTo(1, 5, 4, 3, 6, 4);
1987 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05001988 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04001989 pathB.moveTo(3, 4);
1990 pathB.cubicTo(4, 6, 4, 3, 5, 1);
1991 pathB.close();
1992 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1993}
1994
1995static void issue1418b(skiatest::Reporter* reporter, const char* filename) {
1996 SkPath path1;
1997 path1.moveTo(0, 0);
1998 path1.lineTo(1, 0);
1999 path1.lineTo(1, 1);
2000 path1.lineTo(0, 1);
2001 path1.lineTo(0, 0);
2002 path1.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05002003 path1.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002004 SkPath path2;
2005 path2.moveTo(0.646446645f, -0.353553414f);
2006 path2.quadTo(0.792893291f, -0.50000006f, 1.00000012f, -0.50000006f);
2007 path2.quadTo(1.20710683f, -0.50000006f, 1.35355353f, -0.353553414f);
2008 path2.quadTo(1.50000012f, -0.207106799f, 1.50000012f, 0);
2009 path2.quadTo(1.50000012f, 0.207106799f, 1.35355353f, 0.353553414f);
2010 path2.quadTo(1.20710683f, 0.50000006f, 1.00000012f, 0.50000006f);
2011 path2.quadTo(0.792893291f, 0.50000006f, 0.646446645f, 0.353553414f);
2012 path2.quadTo(0.50000006f, 0.207106799f, 0.50000006f, 0);
2013 path2.quadTo(0.50000006f, -0.207106799f, 0.646446645f, -0.353553414f);
2014 path2.close();
2015 path2.moveTo(1.00000012f, 0.50000006f);
2016 path2.lineTo(1.00000012f, 1.00000012f);
2017 path2.lineTo(0.50000006f, 1.00000012f);
2018 path2.quadTo(0.50000006f, 0.792893291f, 0.646446645f, 0.646446645f);
2019 path2.quadTo(0.792893291f, 0.50000006f, 1.00000012f, 0.50000006f);
2020 path2.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05002021 path2.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002022 testPathOp(reporter, path1, path2, kIntersect_SkPathOp, filename);
2023}
2024
2025static void rectOp1i(skiatest::Reporter* reporter, const char* filename) {
2026 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002027 path.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +00002028 path.addRect(0, 0, 1, 1, SkPathDirection::kCW);
2029 path.addRect(2, 2, 4, 4, SkPathDirection::kCW);
Mike Reed7d34dc72019-11-26 12:17:17 -05002030 pathB.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +00002031 pathB.addRect(0, 0, 1, 1, SkPathDirection::kCW);
2032 pathB.addRect(0, 0, 2, 2, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -04002033 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2034}
2035
2036static void rectOp2i(skiatest::Reporter* reporter, const char* filename) {
2037 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002038 path.setFillType(SkPathFillType::kEvenOdd);
Mike Reed30bc5272019-11-22 18:34:02 +00002039 path.addRect(0, 0, 1, 1, SkPathDirection::kCW);
2040 path.addRect(0, 0, 3, 3, SkPathDirection::kCW);
Mike Reed7d34dc72019-11-26 12:17:17 -05002041 pathB.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +00002042 pathB.addRect(0, 0, 2, 2, SkPathDirection::kCW);
2043 pathB.addRect(0, 0, 2, 2, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -04002044 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2045}
2046
2047static void rectOp3x(skiatest::Reporter* reporter, const char* filename) {
2048 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002049 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002050 path.moveTo(0, 0);
2051 path.lineTo(3, 0);
2052 path.lineTo(3, 3);
2053 path.lineTo(0, 3);
2054 path.close();
2055 path.moveTo(2, 2);
2056 path.lineTo(3, 2);
2057 path.lineTo(3, 3);
2058 path.lineTo(2, 3);
2059 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05002060 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002061 pathB.moveTo(1, 1);
2062 pathB.lineTo(3, 1);
2063 pathB.lineTo(3, 3);
2064 pathB.lineTo(1, 3);
2065 pathB.close();
2066 pathB.moveTo(2, 2);
2067 pathB.lineTo(3, 2);
2068 pathB.lineTo(3, 3);
2069 pathB.lineTo(2, 3);
2070 pathB.close();
2071 testPathOp(reporter, path, pathB, kXOR_SkPathOp, filename);
2072}
2073
2074static void issue1435(skiatest::Reporter* reporter, const char* filename) {
2075 SkPath path1;
2076 path1.moveTo(160, 60);
2077 path1.lineTo(220, 230);
2078 path1.lineTo(60, 120);
2079 path1.lineTo(260, 120);
2080 path1.lineTo(90, 230);
2081 path1.lineTo(160, 60);
2082 path1.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05002083 path1.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002084
2085 SkPath path2;
2086 path2.moveTo(142.589081f, 102.283646f);
2087 path2.quadTo(149.821579f, 100, 158, 100);
2088 path2.quadTo(167.156921f, 100, 175.128036f, 102.862793f);
2089 path2.lineTo(181.176468f, 120);
2090 path2.lineTo(135.294128f, 120);
2091 path2.lineTo(142.589081f, 102.283646f);
2092 path2.close();
2093 path2.moveTo(118.681946f, 160.343842f);
2094 path2.lineTo(135.294128f, 120);
2095 path2.lineTo(117.933762f, 120);
2096 path2.quadTo(108, 132.942657f, 108, 150);
2097 path2.quadTo(108, 151.54483f, 108.08149f, 153.05603f);
2098 path2.lineTo(118.681946f, 160.343842f);
2099 path2.close();
2100 path2.moveTo(156.969696f, 186.666672f);
2101 path2.lineTo(118.681946f, 160.343842f);
2102 path2.lineTo(113.458946f, 173.028259f);
2103 path2.quadTo(116.94117f, 179.651855f, 122.644661f, 185.355347f);
2104 path2.quadTo(130.792465f, 193.503143f, 140.817978f, 197.117783f);
2105 path2.lineTo(156.969696f, 186.666672f);
2106 path2.close();
2107 path2.moveTo(195.830978f, 161.521133f);
2108 path2.lineTo(156.969696f, 186.666672f);
2109 path2.lineTo(173.157288f, 197.795639f);
2110 path2.quadTo(184.392426f, 194.318268f, 193.355347f, 185.355347f);
2111 path2.quadTo(197.805817f, 180.904861f, 200.903809f, 175.894165f);
2112 path2.lineTo(195.830978f, 161.521133f);
2113 path2.close();
2114 path2.moveTo(195.830978f, 161.521133f);
2115 path2.lineTo(207.878281f, 153.725815f);
2116 path2.quadTo(208, 151.888062f, 208, 150);
2117 path2.quadTo(208, 132.942657f, 198.066238f, 120);
2118 path2.lineTo(181.176468f, 120);
2119 path2.lineTo(195.830978f, 161.521133f);
2120 path2.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05002121 path2.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002122 testPathOp(reporter, path1, path2, kIntersect_SkPathOp, filename);
2123}
2124
2125static void skpkkiste_to716(skiatest::Reporter* reporter, const char* filename) {
2126 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002127 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002128 path.moveTo(1173, 284);
2129 path.cubicTo(1173, 285.125824f, 1173.37207f, 286.164734f, 1174, 287.000488f);
2130 path.lineTo(1174, 123.999496f);
2131 path.cubicTo(1173.37207f, 124.835243f, 1173, 125.874168f, 1173, 127);
2132 path.lineTo(1173, 284);
2133 path.close();
2134 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002135 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002136 pathB.moveTo(1340, 122);
2137 pathB.cubicTo(1342.76147f, 122, 1345, 124.238579f, 1345, 127);
2138 pathB.lineTo(1345, 284);
2139 pathB.cubicTo(1345, 286.761414f, 1342.76147f, 289, 1340, 289);
2140 pathB.lineTo(1178, 289);
2141 pathB.cubicTo(1175.23853f, 289, 1173, 286.761414f, 1173, 284);
2142 pathB.lineTo(1173, 127);
2143 pathB.cubicTo(1173, 124.238579f, 1175.23853f, 122, 1178, 122);
2144 pathB.lineTo(1340, 122);
2145 pathB.close();
2146 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2147}
2148
2149static void loopEdge1(skiatest::Reporter* reporter, const char* filename) {
2150 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002151 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002152 path.moveTo(0,0);
2153 path.lineTo(3,0);
2154 path.lineTo(3,2);
2155 path.lineTo(1,2);
2156 path.lineTo(1,1);
2157 path.lineTo(2,1);
2158 path.lineTo(2,3);
2159 path.lineTo(0,3);
2160 path.close();
2161 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002162 pathB.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002163 pathB.moveTo(1,2);
2164 pathB.lineTo(2,2);
2165 pathB.lineTo(2,4);
2166 pathB.lineTo(1,4);
2167 pathB.close();
2168 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2169}
2170
2171static void loopEdge2(skiatest::Reporter* reporter, const char* filename) {
2172 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002173 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002174 path.moveTo(0,0);
2175 path.lineTo(3,0);
2176 path.lineTo(3,2);
2177 path.lineTo(1,2);
2178 path.lineTo(1,1);
2179 path.lineTo(2,1);
2180 path.lineTo(2,3);
2181 path.lineTo(0,3);
2182 path.close();
2183 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002184 pathB.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002185 pathB.moveTo(1 - 1e-6f,2);
2186 pathB.lineTo(2 - 1e-6f,2);
2187 pathB.lineTo(2 - 1e-6f,4);
2188 pathB.lineTo(1 - 1e-6f,4);
2189 pathB.close();
2190 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2191}
2192
2193static void cubicOp86i(skiatest::Reporter* reporter, const char* filename) {
2194 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002195 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002196 path.moveTo(0, 4);
2197 path.cubicTo(3, 4, 6, 2, 5, 2);
2198 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05002199 pathB.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002200 pathB.moveTo(2, 6);
2201 pathB.cubicTo(2, 5, 4, 0, 4, 3);
2202 pathB.close();
2203 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2204}
2205
2206static void cubicOp87u(skiatest::Reporter* reporter, const char* filename) {
2207 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002208 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002209 path.moveTo(0,1);
2210 path.cubicTo(0,2, 2,0, 6,4);
2211 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05002212 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002213 pathB.moveTo(0,2);
2214 pathB.cubicTo(4,6, 1,0, 2,0);
2215 pathB.close();
Cary Clarkda6289c2018-08-27 16:10:28 -04002216 markTestFlakyForPathKit();
Yuqian Li3154a532017-09-06 13:33:30 -04002217 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
2218}
2219
2220static void cubicOp88u(skiatest::Reporter* reporter, const char* filename) {
2221 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002222 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002223 path.moveTo(0,1);
2224 path.cubicTo(2,5, 5,0, 6,4);
2225 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05002226 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002227 pathB.moveTo(0,5);
2228 pathB.cubicTo(4,6, 1,0, 5,2);
2229 pathB.close();
2230 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
2231}
2232
2233static void cubicOp89u(skiatest::Reporter* reporter, const char* filename) {
2234 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002235 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002236 path.moveTo(0, 3);
2237 path.cubicTo(1, 6, 5, 0, 6, 3);
2238 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05002239 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002240 pathB.moveTo(0, 5);
2241 pathB.cubicTo(3, 6, 3, 0, 6, 1);
2242 pathB.close();
2243 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
2244}
2245
2246static void cubicOp90u(skiatest::Reporter* reporter, const char* filename) {
2247 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002248 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002249 path.moveTo(0, 5);
2250 path.cubicTo(1, 2, 5, 2, 4, 1);
2251 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05002252 pathB.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002253 pathB.moveTo(2, 5);
2254 pathB.cubicTo(1, 4, 5, 0, 2, 1);
2255 pathB.close();
2256 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
2257}
2258
2259static void cubicOp91u(skiatest::Reporter* reporter, const char* filename) {
2260 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002261 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002262 path.moveTo(1, 6);
2263 path.cubicTo(0, 3, 6, 3, 5, 0);
2264 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05002265 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002266 pathB.moveTo(3, 6);
2267 pathB.cubicTo(0, 5, 6, 1, 3, 0);
2268 pathB.close();
2269 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
2270}
2271
2272static void skpaaalgarve_org53(skiatest::Reporter* reporter, const char* filename) {
2273 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002274 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002275 path.moveTo(-1.24344979e-014f, 348);
2276 path.lineTo(258, 348);
2277 path.lineTo(258, 322);
2278 path.quadTo(258, 317.857849f, 255.072006f, 314.928009f);
2279 path.quadTo(252.142136f, 312, 248, 312);
2280 path.lineTo(1.77635684e-015f, 312);
2281 path.lineTo(-1.24344979e-014f, 348);
2282 path.close();
2283 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002284 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002285 pathB.moveTo(0, 312);
2286 pathB.lineTo(258, 312);
2287 pathB.lineTo(258, 348);
2288 pathB.lineTo(0, 348);
2289 pathB.close();
2290 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2291}
2292
2293static void skpabcspark_ca103(skiatest::Reporter* reporter, const char* filename) {
2294 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002295 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002296 path.moveTo(1.99840144e-015f, 494);
2297 path.lineTo(97, 494);
2298 path.quadTo(100.313705f, 494, 102.6576f, 491.657593f);
2299 path.quadTo(105, 489.313721f, 105, 486);
2300 path.lineTo(105, 425);
2301 path.quadTo(105, 421.686279f, 102.6576f, 419.342407f);
2302 path.quadTo(100.313705f, 417, 97, 417);
2303 path.lineTo(2.22044605e-016f, 417);
2304 path.lineTo(1.99840144e-015f, 494);
2305 path.close();
2306 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002307 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002308 pathB.moveTo(0, 417);
2309 pathB.lineTo(105, 417);
2310 pathB.lineTo(105, 494);
2311 pathB.lineTo(0, 494);
2312 pathB.close();
2313 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2314}
2315
2316static void skpacesoftech_com47(skiatest::Reporter* reporter, const char* filename) {
2317 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002318 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002319 path.moveTo(670.537415f, 285);
2320 path.lineTo(670.387451f, 285);
2321 path.lineTo(596.315186f, 314.850708f);
2322 path.lineTo(626.19696f, 389);
2323 path.lineTo(626.346863f, 389);
2324 path.lineTo(700.419189f, 359.149261f);
2325 path.lineTo(670.537415f, 285);
2326 path.close();
2327 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002328 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002329 pathB.moveTo(663.318542f, 374.100616f);
2330 pathB.quadTo(647.950989f, 380.293671f, 632.705322f, 373.806305f);
2331 pathB.quadTo(617.459595f, 367.318909f, 611.266541f, 351.951355f);
2332 pathB.quadTo(605.073486f, 336.58374f, 611.560913f, 321.338074f);
2333 pathB.quadTo(618.048279f, 306.092407f, 633.415833f, 299.899353f);
2334 pathB.quadTo(648.783447f, 293.706299f, 664.029114f, 300.193665f);
2335 pathB.quadTo(679.27478f, 306.68103f, 685.467834f, 322.048645f);
2336 pathB.quadTo(691.660889f, 337.416199f, 685.173523f, 352.661896f);
2337 pathB.quadTo(678.686157f, 367.907562f, 663.318542f, 374.100616f);
2338 pathB.close();
2339 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2340}
2341
2342static void skpact_com43(skiatest::Reporter* reporter, const char* filename) {
2343 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002344 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002345 path.moveTo(1.45716772e-016f, 924.336121f);
2346 path.lineTo(-1.11022302e-016f, 920);
2347 path.lineTo(6, 920);
2348 path.lineTo(6, 926);
2349 path.lineTo(1.66389287f, 926);
2350 path.quadTo(1.18842196f, 925.674561f, 0.756800175f, 925.243225f);
2351 path.quadTo(0.325406998f, 924.811523f, 1.45716772e-016f, 924.336121f);
2352 path.close();
2353 path.moveTo(1, 921);
2354 path.lineTo(5, 921);
2355 path.lineTo(5, 925);
2356 path.cubicTo(2.79086018f, 925, 1, 923.209167f, 1, 921);
2357 path.close();
2358 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002359 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002360 pathB.moveTo(-1, 920);
2361 pathB.lineTo(0, 920);
2362 pathB.lineTo(3, 927);
2363 pathB.lineTo(-1, 927);
2364 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2365}
2366
2367static void skpadbox_lt8(skiatest::Reporter* reporter, const char* filename) {
2368 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002369 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002370 path.moveTo(320.097229f, 628.573669f);
2371 path.lineTo(610.227173f, 85.7786865f);
2372 path.lineTo(946.652588f, 265.601807f);
2373 path.lineTo(656.522644f, 808.39679f);
2374 path.lineTo(320.097229f, 628.573669f);
2375 path.close();
2376 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002377 pathB.setFillType(SkPathFillType::kInverseWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002378 pathB.moveTo(333.866608f, 623.496155f);
2379 pathB.lineTo(613.368042f, 100.585754f);
2380 pathB.cubicTo(613.685303f, 99.9921265f, 614.423767f, 99.7681885f, 615.017395f, 100.085449f);
2381 pathB.lineTo(932.633057f, 269.854553f);
2382 pathB.cubicTo(933.226685f, 270.171875f, 933.450623f, 270.910278f, 933.133301f, 271.503906f);
2383 pathB.lineTo(653.631897f, 794.414307f);
2384 pathB.cubicTo(653.314636f, 795.007935f, 652.576172f, 795.231934f, 651.982544f, 794.914612f);
2385 pathB.lineTo(334.366943f, 625.145508f);
2386 pathB.cubicTo(333.773315f, 624.828247f, 333.549286f, 624.089783f, 333.866608f, 623.496155f);
2387 pathB.close();
2388 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2389}
2390
2391static void skpadindex_de4(skiatest::Reporter* reporter, const char* filename) {
2392 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002393 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002394 path.moveTo(0, 926);
2395 path.lineTo(0, 0);
2396 path.lineTo(1280, 0);
2397 path.lineTo(1280, 926);
2398 path.lineTo(0, 926);
2399 path.close();
2400 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002401 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002402 pathB.moveTo(0, 312);
2403 pathB.lineTo(8.20486257e-015f, 178);
2404 pathB.lineTo(49, 178);
2405 pathB.lineTo(49, 312);
2406 pathB.close();
2407 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2408}
2409
2410static void skpadithya_putr4_blogspot_com551(skiatest::Reporter* reporter, const char* filename) {
2411 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002412 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002413 path.moveTo(205.605804f, 142.334625f);
2414 path.lineTo(254.665359f, 85.6058044f);
2415 path.lineTo(311.394196f, 134.665359f);
2416 path.lineTo(262.334625f, 191.39418f);
2417 path.lineTo(205.605804f, 142.334625f);
2418 path.close();
2419 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002420 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002421 pathB.moveTo(283.407959f, 110.462646f);
2422 pathB.cubicTo(298.864319f, 123.829437f, 300.558258f, 147.195221f, 287.191467f, 162.651581f);
2423 pathB.lineTo(286.537354f, 163.407959f);
2424 pathB.cubicTo(273.170563f, 178.864334f, 249.804779f, 180.558258f, 234.348419f, 167.191467f);
2425 pathB.lineTo(233.592026f, 166.537338f);
2426 pathB.cubicTo(218.135666f, 153.170547f, 216.441727f, 129.804779f, 229.808517f, 114.348412f);
2427 pathB.lineTo(230.462646f, 113.592026f);
2428 pathB.cubicTo(243.829437f, 98.1356659f, 267.195221f, 96.4417267f, 282.651581f, 109.808517f);
2429 pathB.lineTo(283.407959f, 110.462646f);
2430 pathB.close();
2431 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2432}
2433
2434static void skpadspert_de11(skiatest::Reporter* reporter, const char* filename) {
2435 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002436 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002437 path.moveTo(-4.4408921e-016f, 682.5f);
2438 path.lineTo(30.5f, 682.5f);
2439 path.cubicTo(32.709137f, 682.5f, 34.5f, 680.709167f, 34.5f, 678.5f);
2440 path.lineTo(34.5f, 486.5f);
2441 path.cubicTo(34.5f, 484.290863f, 32.709137f, 482.5f, 30.5f, 482.5f);
2442 path.lineTo(0, 482.5f);
2443 path.lineTo(-4.4408921e-016f, 682.5f);
2444 path.close();
2445 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002446 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002447 pathB.moveTo(0, 482);
2448 pathB.lineTo(35, 482);
2449 pathB.lineTo(35, 683);
2450 pathB.lineTo(0, 683);
2451 pathB.close();
2452 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2453}
2454
2455static void skpaiaigames_com870(skiatest::Reporter* reporter, const char* filename) {
2456 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002457 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002458 path.moveTo(324.071075f, 845.071045f);
2459 path.cubicTo(324.405151f, 844.737f, 324.715668f, 844.379395f, 325, 844.000977f);
2460 path.lineTo(325, 842.127197f);
2461 path.cubicTo(324.571411f, 842.956238f, 324.017761f, 843.710144f, 323.363953f, 844.363953f);
2462 path.lineTo(324.071075f, 845.071045f);
2463 path.close();
2464 path.moveTo(323.363953f, 714.636047f);
2465 path.lineTo(324.071075f, 713.928955f);
2466 path.cubicTo(324.405151f, 714.263f, 324.715668f, 714.620605f, 325, 714.999023f);
2467 path.lineTo(325, 716.872803f);
2468 path.cubicTo(324.571411f, 716.043762f, 324.017761f, 715.289856f, 323.363953f, 714.636047f);
2469 path.close();
2470 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002471 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002472 pathB.moveTo(317, 711);
2473 pathB.cubicTo(322.522858f, 711, 327, 715.477173f, 327, 721);
2474 pathB.lineTo(327, 838);
2475 pathB.cubicTo(327, 843.522827f, 322.522858f, 848, 317, 848);
2476 pathB.lineTo(155, 848);
2477 pathB.cubicTo(149.477158f, 848, 145, 843.522827f, 145, 838);
2478 pathB.lineTo(145, 721);
2479 pathB.cubicTo(145, 715.477173f, 149.477158f, 711, 155, 711);
2480 pathB.lineTo(317, 711);
2481 pathB.close();
2482 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2483}
2484
2485static void cubicOp92i(skiatest::Reporter* reporter, const char* filename) {
2486 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002487 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002488 path.moveTo(0, 1);
2489 path.cubicTo(2, 6, 4, 1, 5, 4);
2490 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05002491 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002492 pathB.moveTo(1, 4);
2493 pathB.cubicTo(4, 5, 1, 0, 6, 2);
2494 pathB.close();
2495 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2496}
2497
2498static void cubicOp93d(skiatest::Reporter* reporter, const char* filename) {
2499 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002500 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002501 path.moveTo(0, 1);
2502 path.cubicTo(1, 6, 4, 1, 4, 3);
2503 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05002504 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002505 pathB.moveTo(1, 4);
2506 pathB.cubicTo(3, 4, 1, 0, 6, 1);
2507 pathB.close();
2508 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
2509}
2510
2511static void cubicOp94u(skiatest::Reporter* reporter, const char* filename) {
2512 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002513 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002514 path.moveTo(0, 3);
2515 path.cubicTo(2, 3, 5, 0, 5, 3);
2516 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05002517 pathB.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002518 pathB.moveTo(0, 5);
2519 pathB.cubicTo(3, 5, 3, 0, 3, 2);
2520 pathB.close();
2521 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
2522}
2523
2524static void skpadbox_lt15(skiatest::Reporter* reporter, const char* filename) {
2525 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002526 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002527 path.moveTo(333.292084f, 624.570984f);
2528 path.lineTo(614.229797f, 98.9735107f);
2529 path.lineTo(933.457764f, 269.604431f);
2530 path.lineTo(652.52002f, 795.201904f);
2531 path.lineTo(333.292084f, 624.570984f);
2532 path.close();
2533 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002534 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002535 pathB.moveTo(613.368042f, 100.585754f);
2536 pathB.cubicTo(613.685303f, 99.9921265f, 614.423767f, 99.7681885f, 615.017395f, 100.085449f);
2537 pathB.lineTo(932.633057f, 269.854553f);
2538 pathB.cubicTo(933.226685f, 270.171875f, 933.450623f, 270.910278f, 933.133301f, 271.503906f);
2539 pathB.lineTo(653.631897f, 794.414307f);
2540 pathB.cubicTo(653.314636f, 795.007935f, 652.576172f, 795.231934f, 651.982544f, 794.914612f);
2541 pathB.lineTo(334.366943f, 625.145508f);
2542 pathB.cubicTo(333.773315f, 624.828247f, 333.549286f, 624.089783f, 333.866608f, 623.496155f);
2543 pathB.lineTo(613.368042f, 100.585754f);
2544 pathB.close();
2545 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2546}
2547
2548static void skpadoption_org196(skiatest::Reporter* reporter, const char* filename) {
2549 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002550 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002551 path.moveTo(802, 367);
2552 path.lineTo(802, 324);
2553 path.lineTo(956, 324);
2554 path.lineTo(956, 371);
2555 path.quadTo(956, 373.071075f, 954.536011f, 374.536011f);
2556 path.quadTo(953.071045f, 376, 951, 376);
2557 path.lineTo(811, 376);
2558 path.cubicTo(806.029419f, 376, 802, 371.970551f, 802, 367);
2559 path.close();
2560 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002561 pathB.setFillType(SkPathFillType::kInverseWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002562 pathB.moveTo(803, 326);
2563 pathB.lineTo(955, 326);
2564 pathB.lineTo(955, 370);
2565 pathB.cubicTo(955, 372.761414f, 952.761414f, 375, 950, 375);
2566 pathB.lineTo(808, 375);
2567 pathB.cubicTo(805.238586f, 375, 803, 372.761414f, 803, 370);
2568 pathB.lineTo(803, 326);
2569 pathB.close();
2570 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2571}
2572
2573static void skpadspert_net23(skiatest::Reporter* reporter, const char* filename) {
2574 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002575 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002576 path.moveTo(-2.220446e-018f, 483.5f);
2577 path.lineTo(0, 482.5f);
2578 path.lineTo(30.5f, 482.5f);
2579 path.cubicTo(32.709137f, 482.5f, 34.5f, 484.290863f, 34.5f, 486.5f);
2580 path.lineTo(34.5f, 678.5f);
2581 path.cubicTo(34.5f, 680.709167f, 32.709137f, 682.5f, 30.5f, 682.5f);
2582 path.lineTo(-4.4408921e-016f, 682.5f);
2583 path.lineTo(-4.41868766e-016f, 681.5f);
2584 path.lineTo(30.5f, 681.5f);
2585 path.cubicTo(32.1568565f, 681.5f, 33.5f, 680.15686f, 33.5f, 678.5f);
2586 path.lineTo(33.5f, 486.5f);
2587 path.cubicTo(33.5f, 484.84314f, 32.1568565f, 483.5f, 30.5f, 483.5f);
2588 path.lineTo(-2.220446e-018f, 483.5f);
2589 path.close();
2590 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002591 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002592 pathB.moveTo(0, 482);
2593 pathB.lineTo(35, 482);
2594 pathB.lineTo(35, 683);
2595 pathB.lineTo(0, 683);
2596 pathB.close();
2597 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2598}
2599
2600static void skpadventistmission_org572(skiatest::Reporter* reporter, const char* filename) {
2601 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002602 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002603 path.moveTo(1182.00037f, 926);
2604 path.cubicTo(1181.08813f, 924.785583f, 1179.63586f, 924, 1178, 924);
2605 path.lineTo(938, 924);
2606 path.cubicTo(936.364197f, 924, 934.911865f, 924.785583f, 933.999634f, 926);
2607 path.lineTo(1182.00037f, 926);
2608 path.close();
2609 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002610 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002611 pathB.moveTo(934, 924);
2612 pathB.lineTo(1182, 924);
2613 pathB.lineTo(1182, 926);
2614 pathB.lineTo(934, 926);
2615 pathB.close();
2616 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2617}
2618
2619static void skpagentxsites_com55(skiatest::Reporter* reporter, const char* filename) {
2620 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002621 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002622 path.moveTo(925, 27);
2623 path.cubicTo(924.447693f, 27, 924, 27.4477158f, 924, 28);
2624 path.lineTo(924, 55);
2625 path.cubicTo(924, 55.5522842f, 924.447693f, 56, 925, 56);
2626 path.lineTo(1103, 56);
2627 path.cubicTo(1103.55225f, 56, 1104, 55.5522842f, 1104, 55);
2628 path.lineTo(1104, 28);
2629 path.cubicTo(1104, 27.4477158f, 1103.55225f, 27, 1103, 27);
2630 path.lineTo(925, 27);
2631 path.close();
2632 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002633 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002634 pathB.moveTo(1103, 27);
2635 pathB.cubicTo(1104.10461f, 27, 1105, 27.8954315f, 1105, 29);
2636 pathB.lineTo(1105, 54);
2637 pathB.cubicTo(1105, 55.1045685f, 1104.10461f, 56, 1103, 56);
2638 pathB.lineTo(926, 56);
2639 pathB.cubicTo(924.895447f, 56, 924, 55.1045685f, 924, 54);
2640 pathB.lineTo(924, 29);
2641 pathB.cubicTo(924, 27.8954315f, 924.895447f, 27, 926, 27);
2642 pathB.lineTo(1103, 27);
2643 pathB.close();
2644 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2645}
2646
2647static void skpbakosoft_com10(skiatest::Reporter* reporter, const char* filename) {
2648 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002649 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002650 path.moveTo(190, 170);
2651 path.cubicTo(178.9543f, 170, 170, 178.9543f, 170, 190);
2652 path.cubicTo(170, 201.0457f, 178.9543f, 210, 190, 210);
2653 path.lineTo(370, 210);
2654 path.cubicTo(381.045685f, 210, 390, 201.0457f, 390, 190);
2655 path.cubicTo(390, 178.9543f, 381.045685f, 170, 370, 170);
2656 path.lineTo(190, 170);
2657 path.close();
2658 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002659 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002660 pathB.moveTo(210, 190);
2661 pathB.quadTo(210, 198.284271f, 204.142136f, 204.142136f);
2662 pathB.quadTo(198.284271f, 210, 190, 210);
2663 pathB.quadTo(181.715729f, 210, 175.857864f, 204.142136f);
2664 pathB.quadTo(170, 198.284271f, 170, 190);
2665 pathB.quadTo(170, 181.715729f, 175.857864f, 175.857864f);
2666 pathB.quadTo(181.715729f, 170, 190, 170);
2667 pathB.quadTo(198.284271f, 170, 204.142136f, 175.857864f);
2668 pathB.quadTo(210, 181.715729f, 210, 190);
2669 pathB.close();
2670 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2671}
2672
2673static void skpbambootheme_com12(skiatest::Reporter* reporter, const char* filename) {
2674 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002675 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002676 path.moveTo(47.8780937f, 58);
2677 path.lineTo(0, 58);
2678 path.lineTo(-8.65973959e-015f, 96.9914017f);
2679 path.quadTo(20.0654926f, 96.6451874f, 34.3553391f, 82.3553391f);
2680 path.quadTo(44.9466133f, 71.764061f, 47.8780937f, 58);
2681 path.close();
2682 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002683 pathB.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002684 pathB.moveTo(-1, -3);
2685 pathB.lineTo(-1, -3);
2686 pathB.cubicTo(26.6142502f, -3, 49, 19.3857498f, 49, 47);
2687 pathB.lineTo(49, 47);
2688 pathB.cubicTo(49, 74.6142502f, 26.6142502f, 97, -1, 97);
2689 pathB.lineTo(-1, 97);
2690 pathB.cubicTo(-28.6142502f, 97, -51, 74.6142502f, -51, 47);
2691 pathB.lineTo(-51, 47);
2692 pathB.cubicTo(-51, 19.3857498f, -28.6142502f, -3, -1, -3);
2693 pathB.close();
2694 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2695}
2696
2697static void skpakmmos_ru100(skiatest::Reporter* reporter, const char* filename) {
2698 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002699 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002700 path.moveTo(693.000488f, 926);
2701 path.cubicTo(692.164734f, 925.37207f, 691.125793f, 925, 690, 925);
2702 path.lineTo(578, 925);
2703 path.cubicTo(576.874207f, 925, 575.835266f, 925.37207f, 574.999512f, 926);
2704 path.lineTo(693.000488f, 926);
2705 path.close();
2706 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002707 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002708 pathB.moveTo(575, 925);
2709 pathB.lineTo(693, 925);
2710 pathB.lineTo(693, 926);
2711 pathB.lineTo(575, 926);
2712 pathB.close();
2713 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2714}
2715
2716static void skpcarpetplanet_ru22(skiatest::Reporter* reporter, const char* filename) {
2717 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002718 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002719 path.moveTo(195, 785);
2720 path.cubicTo(124.307556f, 785, 67, 841.859863f, 67, 912);
2721 path.lineTo(67, 913);
2722 path.cubicTo(67, 917.388916f, 67.2243805f, 921.725769f, 67.662384f, 926);
2723 path.lineTo(322, 926);
2724 path.lineTo(322, 896.048035f);
2725 path.cubicTo(314.09201f, 833.437622f, 260.247131f, 785, 195, 785);
2726 path.close();
2727 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002728 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002729 pathB.moveTo(195, 785);
2730 pathB.cubicTo(265.140167f, 785, 322, 842.307556f, 322, 913);
2731 pathB.cubicTo(322, 983.692444f, 265.140167f, 1041, 195, 1041);
2732 pathB.lineTo(194, 1041);
2733 pathB.cubicTo(123.85984f, 1041, 67, 983.692444f, 67, 913);
2734 pathB.cubicTo(67, 842.307556f, 123.85984f, 785, 194, 785);
2735 pathB.lineTo(195, 785);
2736 pathB.close();
2737 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2738}
2739
2740static void skpcarrot_is24(skiatest::Reporter* reporter, const char* filename) {
2741 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002742 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002743 path.moveTo(945, 597);
2744 path.quadTo(913.93396f, 597, 891.96698f, 618.96698f);
2745 path.quadTo(870, 640.93396f, 870, 672);
2746 path.quadTo(870, 703.06604f, 891.96698f, 725.03302f);
2747 path.quadTo(913.93396f, 747, 945, 747);
2748 path.quadTo(976.06604f, 747, 998.03302f, 725.03302f);
2749 path.quadTo(1020, 703.06604f, 1020, 672);
2750 path.quadTo(1020, 640.93396f, 998.03302f, 618.96698f);
2751 path.quadTo(976.06604f, 597, 945, 597);
2752 path.close();
2753 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002754 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002755 pathB.moveTo(945.080994f, 597.161987f);
2756 pathB.cubicTo(903.659973f, 597.161987f, 870.080994f, 630.73999f, 870.080994f, 672.161987f);
2757 pathB.cubicTo(870.080994f, 676.096008f, 870.387024f, 679.957031f, 870.971008f, 683.726013f);
2758 pathB.cubicTo(876.53302f, 719.656006f, 907.593994f, 747.161987f, 945.080994f, 747.161987f);
2759 pathB.cubicTo(982.567993f, 747.161987f, 1013.62903f, 719.656006f, 1019.19104f, 683.726013f);
2760 pathB.cubicTo(1019.77502f, 679.955017f, 1020.08099f, 676.094971f, 1020.08099f, 672.161987f);
2761 pathB.cubicTo(1020.08002f, 630.73999f, 986.502014f, 597.161987f, 945.080994f, 597.161987f);
2762 pathB.close();
2763 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2764}
2765
2766static void skpbangalorenest_com4(skiatest::Reporter* reporter, const char* filename) {
2767 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002768 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002769 path.moveTo(0, 926);
2770 path.lineTo(0, 0);
2771 path.lineTo(1265, 0);
2772 path.lineTo(1265, 926);
2773 path.lineTo(0, 926);
2774 path.close();
2775 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002776 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002777 pathB.moveTo(0, 290);
2778 pathB.lineTo(-2.64514972e-014f, 146);
2779 pathB.lineTo(30, 146);
2780 pathB.lineTo(30, 290);
2781 pathB.close();
2782 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2783}
2784
2785static void skpbenzoteh_ru152(skiatest::Reporter* reporter, const char* filename) {
2786 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002787 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002788 path.moveTo(883, 23);
2789 path.lineTo(883, 0);
2790 path.lineTo(1122.5f, 0);
2791 path.lineTo(1122.5f, 25.2136822f);
2792 path.quadTo(1122.14441f, 25.9271851f, 1121.53601f, 26.5359993f);
2793 path.quadTo(1120.07104f, 28, 1118, 28);
2794 path.lineTo(888, 28);
2795 path.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2796 path.quadTo(883, 25.0710678f, 883, 23);
2797 path.close();
2798 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002799 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002800 pathB.moveTo(883, 0);
2801 pathB.lineTo(1123, 0);
2802 pathB.lineTo(1123, 23);
2803 pathB.quadTo(1123, 25.0710678f, 1121.53601f, 26.5359993f);
2804 pathB.quadTo(1120.07104f, 28, 1118, 28);
2805 pathB.lineTo(888, 28);
2806 pathB.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2807 pathB.quadTo(883, 25.0710678f, 883, 23);
2808 pathB.close();
2809 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2810}
2811
2812static void skpbestred_ru37(skiatest::Reporter* reporter, const char* filename) {
2813 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002814 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002815 path.moveTo(883, 23);
2816 path.lineTo(883, 0);
2817 path.lineTo(1122.5f, 0);
2818 path.lineTo(1122.5f, 25.2136822f);
2819 path.quadTo(1122.14441f, 25.9271851f, 1121.53601f, 26.5359993f);
2820 path.quadTo(1120.07104f, 28, 1118, 28);
2821 path.lineTo(888, 28);
2822 path.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2823 path.quadTo(883, 25.0710678f, 883, 23);
2824 path.close();
2825 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002826 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002827 pathB.moveTo(883, 0);
2828 pathB.lineTo(1123, 0);
2829 pathB.lineTo(1123, 23);
2830 pathB.quadTo(1123, 25.0710678f, 1121.53601f, 26.5359993f);
2831 pathB.quadTo(1120.07104f, 28, 1118, 28);
2832 pathB.lineTo(888, 28);
2833 pathB.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2834 pathB.quadTo(883, 25.0710678f, 883, 23);
2835 pathB.close();
2836 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2837}
2838
2839static void skpbingoentertainment_net189(skiatest::Reporter* reporter, const char* filename) {
2840 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002841 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002842 path.moveTo(896, 745.38678f);
2843 path.lineTo(896, 873.38678f);
2844 path.lineTo(922.567993f, 876.683716f);
2845 path.lineTo(922.567993f, 748.683716f);
2846 path.lineTo(896, 745.38678f);
2847 path.close();
2848 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002849 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002850 pathB.moveTo(899.200928f, 745.783997f);
2851 pathB.cubicTo(897.119385f, 745.525696f, 895.432007f, 752.031982f, 895.432007f, 760.316284f);
2852 pathB.lineTo(895.432007f, 858.316284f);
2853 pathB.cubicTo(895.432007f, 866.600586f, 897.119385f, 873.525696f, 899.200928f, 873.783997f);
2854 pathB.lineTo(918.799133f, 876.216003f);
2855 pathB.cubicTo(920.880615f, 876.474304f, 922.567993f, 869.968018f, 922.567993f, 861.683716f);
2856 pathB.lineTo(922.567993f, 763.683716f);
2857 pathB.cubicTo(922.567993f, 755.399414f, 920.880615f, 748.474304f, 918.799133f, 748.216003f);
2858 pathB.lineTo(899.200928f, 745.783997f);
2859 pathB.close();
2860 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2861}
2862
2863static void skpcarrefour_ro62(skiatest::Reporter* reporter, const char* filename) {
2864 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002865 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002866 path.moveTo(1104, 453);
2867 path.lineTo(399, 453);
2868 path.lineTo(399, 657);
2869 path.cubicTo(399, 661.970581f, 403.029449f, 666, 408, 666);
2870 path.lineTo(1095, 666);
2871 path.cubicTo(1099.97058f, 666, 1104, 661.970581f, 1104, 657);
2872 path.lineTo(1104, 453);
2873 path.close();
2874 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002875 pathB.setFillType(SkPathFillType::kInverseWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002876 pathB.moveTo(400, 453);
2877 pathB.lineTo(1103, 453);
2878 pathB.lineTo(1103, 666);
2879 pathB.lineTo(406, 666);
2880 pathB.cubicTo(402.686279f, 666, 400, 663.313721f, 400, 660);
2881 pathB.lineTo(400, 453);
2882 pathB.close();
2883 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2884}
2885
2886static void skpcaffelavazzait_com_ua21(skiatest::Reporter* reporter, const char* filename) {
2887 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002888 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002889 path.moveTo(883, 23);
2890 path.lineTo(883, 0);
2891 path.lineTo(1122.5f, 0);
2892 path.lineTo(1122.5f, 25.2136822f);
2893 path.quadTo(1122.14441f, 25.9271851f, 1121.53601f, 26.5359993f);
2894 path.quadTo(1120.07104f, 28, 1118, 28);
2895 path.lineTo(888, 28);
2896 path.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2897 path.quadTo(883, 25.0710678f, 883, 23);
2898 path.close();
2899 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002900 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002901 pathB.moveTo(883, 0);
2902 pathB.lineTo(1123, 0);
2903 pathB.lineTo(1123, 23);
2904 pathB.quadTo(1123, 25.0710678f, 1121.53601f, 26.5359993f);
2905 pathB.quadTo(1120.07104f, 28, 1118, 28);
2906 pathB.lineTo(888, 28);
2907 pathB.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2908 pathB.quadTo(883, 25.0710678f, 883, 23);
2909 pathB.close();
2910 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2911}
2912
2913static void skpcamcorder_kz21(skiatest::Reporter* reporter, const char* filename) {
2914 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002915 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002916 path.moveTo(883, 23);
2917 path.lineTo(883, 0);
2918 path.lineTo(1122.5f, 0);
2919 path.lineTo(1122.5f, 25.2136822f);
2920 path.quadTo(1122.14441f, 25.9271851f, 1121.53601f, 26.5359993f);
2921 path.quadTo(1120.07104f, 28, 1118, 28);
2922 path.lineTo(888, 28);
2923 path.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2924 path.quadTo(883, 25.0710678f, 883, 23);
2925 path.close();
2926 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002927 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002928 pathB.moveTo(883, 0);
2929 pathB.lineTo(1123, 0);
2930 pathB.lineTo(1123, 23);
2931 pathB.quadTo(1123, 25.0710678f, 1121.53601f, 26.5359993f);
2932 pathB.quadTo(1120.07104f, 28, 1118, 28);
2933 pathB.lineTo(888, 28);
2934 pathB.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2935 pathB.quadTo(883, 25.0710678f, 883, 23);
2936 pathB.close();
2937 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2938}
2939
2940static void skpcavablar_net563(skiatest::Reporter* reporter, const char* filename) {
2941 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002942 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002943 path.moveTo(160.000488f, 918);
2944 path.cubicTo(159.164749f, 917.37207f, 158.125824f, 917, 157, 917);
2945 path.lineTo(94, 917);
2946 path.cubicTo(92.874176f, 917, 91.8352661f, 917.37207f, 90.9995193f, 918);
2947 path.lineTo(160.000488f, 918);
2948 path.close();
2949 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002950 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002951 pathB.moveTo(91, 917);
2952 pathB.lineTo(160, 917);
2953 pathB.lineTo(160, 918);
2954 pathB.lineTo(91, 918);
2955 pathB.close();
2956 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2957}
2958
2959static void skpinsomnia_gr72(skiatest::Reporter* reporter, const char* filename) {
2960 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05002961 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002962 path.moveTo(1138, 231);
2963 path.lineTo(1137, 243.625748f);
2964 path.lineTo(1137, 926);
2965 path.lineTo(1139, 926);
2966 path.lineTo(1139, 231);
2967 path.lineTo(1138, 231);
2968 path.close();
2969 SkPath pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002970 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04002971 pathB.moveTo(1139, 231);
2972 pathB.lineTo(1138, 231);
2973 pathB.lineTo(633, 6101);
2974 pathB.lineTo(1139, 6607);
2975 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2976}
2977
2978static void cubicOp95u(skiatest::Reporter* reporter, const char* filename) {
2979 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002980 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002981 path.moveTo(0, 2);
2982 path.cubicTo(2, 3, 5, 1, 3, 2);
2983 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05002984 pathB.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002985 pathB.moveTo(1, 5);
2986 pathB.cubicTo(2, 3, 2, 0, 3, 2);
2987 pathB.close();
2988 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
2989}
2990
2991static void cubicOp96d(skiatest::Reporter* reporter, const char* filename) {
2992 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05002993 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002994 path.moveTo(1, 6);
2995 path.cubicTo(0, 3, 6, 3, 5, 0);
2996 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05002997 pathB.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04002998 pathB.moveTo(3, 6);
2999 pathB.cubicTo(0, 5, 6, 1, 3, 0);
3000 pathB.close();
3001 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3002}
3003
3004static void cubicOp97x(skiatest::Reporter* reporter, const char* filename) {
3005 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003006 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04003007 path.moveTo(0, 2);
3008 path.cubicTo(0, 6, 2, 1, 2, 1);
3009 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003010 pathB.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04003011 pathB.moveTo(1, 2);
3012 pathB.cubicTo(1, 2, 2, 0, 6, 0);
3013 pathB.close();
3014 testPathOp(reporter, path, pathB, kXOR_SkPathOp, filename);
3015}
3016
3017static void cubicOp98x(skiatest::Reporter* reporter, const char* filename) {
3018 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003019 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04003020 path.moveTo(0, 3);
3021 path.cubicTo(3, 6, 4, 1, 6, 3);
3022 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003023 pathB.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04003024 pathB.moveTo(1, 4);
3025 pathB.cubicTo(3, 6, 3, 0, 6, 3);
3026 pathB.close();
3027 testPathOp(reporter, path, pathB, kXOR_SkPathOp, filename);
3028}
3029
3030static void cubicOp99(skiatest::Reporter* reporter, const char* filename) {
3031 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003032 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003033 path.moveTo(3,6);
3034 path.cubicTo(0,3, 6,5, 5,4);
3035 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003036 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003037 pathB.moveTo(5,6);
3038 pathB.cubicTo(4,5, 6,3, 3,0);
3039 pathB.close();
3040 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3041}
3042
3043static void cubicOp100(skiatest::Reporter* reporter, const char* filename) {
3044 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003045 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003046 path.moveTo(0,1);
3047 path.cubicTo(0,2, 2,1, 4,2);
3048 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003049 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003050 pathB.moveTo(1,2);
3051 pathB.cubicTo(2,4, 1,0, 2,0);
3052 pathB.close();
3053 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3054}
3055
3056static void cubicOp101(skiatest::Reporter* reporter, const char* filename) {
3057 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003058 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003059 path.moveTo(0, 1);
3060 path.cubicTo(2, 3, 2, 1, 5, 3);
3061 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003062 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003063 pathB.moveTo(1, 2);
3064 pathB.cubicTo(3, 5, 1, 0, 3, 2);
3065 pathB.close();
3066 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3067}
3068
3069static void cubicOp102(skiatest::Reporter* reporter, const char* filename) {
3070 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003071 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003072 path.moveTo(0,1);
3073 path.cubicTo(1,2, 1,0, 3,0);
3074 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003075 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003076 pathB.moveTo(0,1);
3077 pathB.cubicTo(0,3, 1,0, 2,1);
3078 pathB.close();
3079 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3080}
3081
3082static void cubicOp103(skiatest::Reporter* reporter, const char* filename) {
3083 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003084 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003085 path.moveTo(0,1);
3086 path.cubicTo(1,5, 2,0, 2,1);
3087 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003088 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003089 pathB.moveTo(0,2);
3090 pathB.cubicTo(1,2, 1,0, 5,1);
3091 pathB.close();
3092 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3093}
3094
3095static void cubicOp104(skiatest::Reporter* reporter, const char* filename) {
3096 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003097 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003098 path.moveTo(0,1);
3099 path.cubicTo(0,6, 4,0, 6,1);
3100 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003101 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003102 pathB.moveTo(0,4);
3103 pathB.cubicTo(1,6, 1,0, 6,0);
3104 pathB.close();
3105 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3106}
3107
3108static void cubicOp105(skiatest::Reporter* reporter, const char* filename) {
3109 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003110 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003111 path.moveTo(0,1);
3112 path.cubicTo(0,4, 6,5, 2,0);
3113 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003114 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003115 pathB.moveTo(5,6);
3116 pathB.cubicTo(0,2, 1,0, 4,0);
3117 pathB.close();
3118 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3119}
3120
3121static void cubicOp106(skiatest::Reporter* reporter, const char* filename) {
3122 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003123 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003124 path.moveTo(0, 1);
3125 path.cubicTo(4, 6, 2, 1, 2, 0);
3126 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003127 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003128 pathB.moveTo(1, 2);
3129 pathB.cubicTo(0, 2, 1, 0, 6, 4);
3130 pathB.close();
3131 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3132}
3133
3134static void cubicOp107(skiatest::Reporter* reporter, const char* filename) {
3135 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003136 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003137 path.moveTo(0, 1);
3138 path.cubicTo(4, 6, 2, 1, 2, 0);
3139 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003140 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003141 pathB.moveTo(1, 2);
3142 pathB.cubicTo(0, 2, 1, 0, 6, 4);
3143 pathB.close();
3144 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3145}
3146
3147static void cubicOp108(skiatest::Reporter* reporter, const char* filename) {
3148 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003149 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003150 path.moveTo(0, 1);
3151 path.cubicTo(4, 6, 2, 1, 2, 0);
3152 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003153 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003154 pathB.moveTo(1, 2);
3155 pathB.cubicTo(0, 2, 1, 0, 6, 4);
3156 pathB.close();
3157 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
3158}
3159
3160static void cubicOp109(skiatest::Reporter* reporter, const char* filename) {
3161 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003162 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003163 path.moveTo(0,1);
3164 path.cubicTo(4,5, 6,3, 5,4);
3165 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003166 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003167 pathB.moveTo(3,6);
3168 pathB.cubicTo(4,5, 1,0, 5,4);
3169 pathB.close();
3170 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3171}
3172
3173static void cubicOp110(skiatest::Reporter* reporter, const char* filename) {
3174 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003175 path.setFillType(SkPathFillType::kEvenOdd);
Mike Reed30bc5272019-11-22 18:34:02 +00003176 path.addRect(0, 0, 1, 1, SkPathDirection::kCW);
3177 path.addRect(0, 0, 4, 4, SkPathDirection::kCW);
Mike Reed7d34dc72019-11-26 12:17:17 -05003178 pathB.setFillType(SkPathFillType::kEvenOdd);
Mike Reed30bc5272019-11-22 18:34:02 +00003179 pathB.addRect(0, 0, 2, 2, SkPathDirection::kCW);
3180 pathB.addRect(0, 0, 2, 2, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -04003181 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3182}
3183
3184static void cubicOp111(skiatest::Reporter* reporter, const char* filename) {
3185 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003186 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003187 path.moveTo(1,4);
3188 path.cubicTo(0,5, 4,1, 3,1);
3189 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003190 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003191 pathB.moveTo(1,4);
3192 pathB.cubicTo(1,3, 4,1, 5,0);
3193 pathB.close();
3194 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3195}
3196
3197static void xOp1u(skiatest::Reporter* reporter, const char* filename) {
3198 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003199 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04003200 path.moveTo(1, 4);
3201 path.cubicTo(4, 5, 3, 2, 6, 3);
3202 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003203 pathB.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04003204 pathB.moveTo(2, 3);
3205 pathB.cubicTo(3, 6, 4, 1, 5, 4);
3206 pathB.close();
3207 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
3208}
3209
3210static void xOp1i(skiatest::Reporter* reporter, const char* filename) {
3211 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003212 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04003213 path.moveTo(1, 4);
3214 path.cubicTo(1, 5, 6, 0, 5, 1);
3215 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003216 pathB.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04003217 pathB.moveTo(0, 6);
3218 pathB.cubicTo(1, 5, 4, 1, 5, 1);
3219 pathB.close();
3220 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3221}
3222
3223static void xOp2i(skiatest::Reporter* reporter, const char* filename) {
3224 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003225 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04003226 path.moveTo(1, 5);
3227 path.cubicTo(0, 4, 3, 2, 6, 1);
3228 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003229 pathB.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04003230 pathB.moveTo(2, 3);
3231 pathB.cubicTo(1, 6, 5, 1, 4, 0);
3232 pathB.close();
3233 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3234}
3235
3236static void xOp3i(skiatest::Reporter* reporter, const char* filename) {
3237 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003238 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003239 path.moveTo(1,4);
3240 path.cubicTo(0,5, 4,1, 3,1);
3241 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003242 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003243 pathB.moveTo(1,4);
3244 pathB.cubicTo(1,3, 4,1, 5,0);
3245 pathB.close();
3246 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3247}
3248
3249static void findFirst1(skiatest::Reporter* reporter, const char* filename) {
3250 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003251 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003252 path.moveTo(0,1);
3253 path.cubicTo(1,6, 5,0, 2,1);
3254 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003255 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003256 pathB.moveTo(0,5);
3257 pathB.cubicTo(1,2, 1,0, 6,1);
3258 pathB.close();
3259 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3260}
3261
3262static void cubicOp112(skiatest::Reporter* reporter, const char* filename) {
3263 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003264 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003265 path.moveTo(2,4);
3266 path.cubicTo(2,3, 6,4, 1,0);
3267 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003268 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003269 pathB.moveTo(4,6);
3270 pathB.cubicTo(0,1, 4,2, 3,2);
3271 pathB.close();
3272 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3273}
3274
3275static void cubicOp113(skiatest::Reporter* reporter, const char* filename) {
3276 SkPath path, pathB;
3277 path.moveTo(2,4);
3278 path.cubicTo(3,5, 2.33333325f,4.33333349f, 3.83333325f,3.83333349f);
3279 path.close();
3280 pathB.moveTo(3,5);
3281 pathB.cubicTo(2.33333325f,4.33333349f, 3.83333325f,3.83333349f, 2,4);
3282 pathB.close();
3283 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3284}
3285
3286static void cubicOp114(skiatest::Reporter* reporter, const char* filename) {
3287 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003288 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003289 path.moveTo(0, 1);
3290 path.cubicTo(1, 3, -1, 2, 3.5f, 1.33333337f);
3291 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003292 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003293 pathB.moveTo(1, 3);
3294 pathB.cubicTo(-1, 2, 3.5f, 1.33333337f, 0, 1);
3295 pathB.close();
3296 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3297}
3298
3299static void cubicOp114asQuad(skiatest::Reporter* reporter, const char* filename) {
3300 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003301 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003302 path.moveTo(0, 1);
3303 path.cubicTo(1, 3, -1, 2, 3.5f, 1.33333337f);
3304 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003305 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003306 pathB.moveTo(1, 3);
3307 pathB.cubicTo(-1, 2, 3.5f, 1.33333337f, 0, 1);
3308 pathB.close();
3309 SkPath qPath, qPathB;
3310 CubicPathToQuads(path, &qPath);
3311 CubicPathToQuads(pathB, &qPathB);
3312 testPathOp(reporter, qPath, qPathB, kIntersect_SkPathOp, filename);
3313}
3314
3315static void quadOp10i(skiatest::Reporter* reporter, const char* filename) {
3316 SkPath path, pathB;
3317 path.moveTo(0, 0);
3318 path.quadTo(1, 8, 3, 5);
3319 path.lineTo(8, 1);
3320 path.close();
3321 pathB.moveTo(0, 0);
3322 pathB.quadTo(8, 1, 4, 8);
3323 pathB.close();
3324 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3325}
3326
3327static void kari1(skiatest::Reporter* reporter, const char* filename) {
3328 SkPath path1;
3329 path1.moveTo(39.9375, -5.8359375);
3330 path1.lineTo(40.625, -5.7890625);
3331 path1.lineTo(37.7109375, 1.3515625);
3332 path1.lineTo(37.203125, 0.9609375);
3333 path1.close();
3334
3335 SkPath path2;
3336 path2.moveTo(37.52734375f, -1.44140625f);
3337 path2.cubicTo(37.8736991882324f, -1.69921875f, 38.1640625f, -2.140625f, 38.3984375f, -2.765625f);
3338 path2.lineTo(38.640625f, -2.609375f);
3339 path2.cubicTo(38.53125f, -1.89583337306976f, 38.0664443969727f, -0.154893040657043f, 38.0664443969727f, -0.154893040657043f);
3340 path2.cubicTo(38.0664443969727f, -0.154893040657043f, 37.1809883117676f, -1.18359375f, 37.52734375, -1.44140625f);
3341 path2.close();
3342
3343 testPathOp(reporter, path1, path2, kDifference_SkPathOp, filename);
3344}
3345
3346static void issue2504(skiatest::Reporter* reporter, const char* filename) {
3347 SkPath path1;
3348 path1.moveTo(34.2421875, -5.976562976837158203125);
3349 path1.lineTo(35.453121185302734375, 0);
3350 path1.lineTo(31.9375, 0);
3351 path1.close();
3352
3353 SkPath path2;
3354 path2.moveTo(36.71843719482421875, 0.8886508941650390625);
3355 path2.cubicTo(36.71843719482421875, 0.8886508941650390625,
3356 35.123386383056640625, 0.554015457630157470703125,
3357 34.511409759521484375, -0.1152553558349609375);
3358 path2.cubicTo(33.899425506591796875, -0.7845261096954345703125,
3359 34.53484344482421875, -5.6777553558349609375,
3360 34.53484344482421875, -5.6777553558349609375);
3361 path2.close();
3362 testPathOp(reporter, path1, path2, kUnion_SkPathOp, filename);
3363}
3364
3365static void issue2540(skiatest::Reporter* reporter, const char* filename) {
3366 SkPath path1;
3367 path1.moveTo(26.5054988861083984375, 85.73960113525390625);
3368 path1.cubicTo(84.19739532470703125, 17.77140045166015625, 16.93920135498046875, 101.86199951171875, 12.631000518798828125, 105.24700164794921875);
3369 path1.cubicTo(11.0819997787475585937500000, 106.46399688720703125, 11.5260000228881835937500000, 104.464996337890625, 11.5260000228881835937500000, 104.464996337890625);
3370 path1.lineTo(23.1654987335205078125, 89.72879791259765625);
3371 path1.cubicTo(23.1654987335205078125, 89.72879791259765625, -10.1713008880615234375, 119.9160003662109375, -17.1620006561279296875, 120.8249969482421875);
3372 path1.cubicTo(-19.1149997711181640625, 121.07900238037109375, -18.0380001068115234375, 119.79299163818359375, -18.0380001068115234375, 119.79299163818359375);
3373 path1.cubicTo(-18.0380001068115234375, 119.79299163818359375, 14.22100067138671875, 90.60700225830078125, 26.5054988861083984375, 85.73960113525390625);
3374 path1.close();
3375
3376 SkPath path2;
3377 path2.moveTo(-25.077999114990234375, 124.9120025634765625);
3378 path2.cubicTo(-25.077999114990234375, 124.9120025634765625, -25.9509983062744140625, 125.95400238037109375, -24.368999481201171875, 125.7480010986328125);
3379 path2.cubicTo(-16.06999969482421875, 124.66899871826171875, 1.2680000066757202148437500, 91.23999786376953125, 37.264003753662109375, 95.35400390625);
3380 path2.cubicTo(37.264003753662109375, 95.35400390625, 11.3710002899169921875, 83.7339935302734375, -25.077999114990234375, 124.9120025634765625);
3381 path2.close();
3382 testPathOp(reporter, path1, path2, kUnion_SkPathOp, filename);
3383}
3384
3385static void rects1(skiatest::Reporter* reporter, const char* filename) {
3386 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003387 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04003388 path.moveTo(0, 0);
3389 path.lineTo(1, 0);
3390 path.lineTo(1, 1);
3391 path.lineTo(0, 1);
3392 path.close();
3393 path.moveTo(0, 0);
3394 path.lineTo(6, 0);
3395 path.lineTo(6, 6);
3396 path.lineTo(0, 6);
3397 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003398 pathB.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04003399 pathB.moveTo(0, 0);
3400 pathB.lineTo(1, 0);
3401 pathB.lineTo(1, 1);
3402 pathB.lineTo(0, 1);
3403 pathB.close();
3404 pathB.moveTo(0, 0);
3405 pathB.lineTo(2, 0);
3406 pathB.lineTo(2, 2);
3407 pathB.lineTo(0, 2);
3408 pathB.close();
3409 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
3410}
3411
3412static void rects2(skiatest::Reporter* reporter, const char* filename) {
3413 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003414 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04003415 path.moveTo(0, 0);
3416 path.lineTo(4, 0);
3417 path.lineTo(4, 4);
3418 path.lineTo(0, 4);
3419 path.close();
3420 path.moveTo(3, 3);
3421 path.lineTo(4, 3);
3422 path.lineTo(4, 4);
3423 path.lineTo(3, 4);
3424 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003425 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003426 pathB.moveTo(3, 3);
3427 pathB.lineTo(6, 3);
3428 pathB.lineTo(6, 6);
3429 pathB.lineTo(3, 6);
3430 pathB.close();
3431 pathB.moveTo(3, 3);
3432 pathB.lineTo(4, 3);
3433 pathB.lineTo(4, 4);
3434 pathB.lineTo(3, 4);
3435 pathB.close();
3436 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3437}
3438
3439static void rects3(skiatest::Reporter* reporter, const char* filename) {
3440 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003441 path.setFillType(SkPathFillType::kEvenOdd);
Mike Reed30bc5272019-11-22 18:34:02 +00003442 path.addRect(0, 0, 1, 1, SkPathDirection::kCW);
3443 path.addRect(0, 0, 4, 4, SkPathDirection::kCW);
Mike Reed7d34dc72019-11-26 12:17:17 -05003444 pathB.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +00003445 pathB.addRect(0, 0, 2, 2, SkPathDirection::kCW);
3446 pathB.addRect(0, 0, 2, 2, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -04003447 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3448}
3449
3450static void rects4(skiatest::Reporter* reporter, const char* filename) {
3451 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003452 path.setFillType(SkPathFillType::kEvenOdd);
Mike Reed30bc5272019-11-22 18:34:02 +00003453 path.addRect(0, 0, 1, 1, SkPathDirection::kCW);
3454 path.addRect(0, 0, 2, 2, SkPathDirection::kCW);
Mike Reed7d34dc72019-11-26 12:17:17 -05003455 pathB.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +00003456 pathB.addRect(0, 0, 2, 2, SkPathDirection::kCW);
3457 pathB.addRect(0, 0, 3, 3, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -04003458 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3459}
3460
3461static void issue2753(skiatest::Reporter* reporter, const char* filename) {
3462 SkPath path1;
3463 path1.moveTo(142.701f, 110.568f);
3464 path1.lineTo(142.957f, 100);
3465 path1.lineTo(153.835f, 100);
3466 path1.lineTo(154.592f, 108.188f);
3467 path1.cubicTo(154.592f, 108.188f, 153.173f, 108.483f, 152.83f, 109.412f);
3468 path1.cubicTo(152.83f, 109.412f, 142.701f, 110.568f, 142.701f, 110.568f);
3469 path1.close();
3470
3471 SkPath path2;
3472 path2.moveTo(39, 124.001f);
3473 path2.cubicTo(39, 124.001f, 50.6f, 117.001f, 50.6f, 117.001f);
3474 path2.cubicTo(50.6f, 117.001f, 164.601f, 85.2f, 188.201f, 117.601f);
3475 path2.cubicTo(188.201f, 117.601f, 174.801f, 93, 39, 124.001f);
3476 path2.close();
3477
3478 testPathOp(reporter, path1, path2, kUnion_SkPathOp, filename);
3479}
3480
3481static void issue2808(skiatest::Reporter* reporter, const char* filename) {
3482 SkPath path1, path2;
3483
3484 path1.moveTo(509.20300293f, 385.601989746f);
3485 path1.quadTo(509.20300293f, 415.68838501f, 487.928710938f, 436.96270752f);
3486 path1.quadTo(466.654388428f, 458.236999512f, 436.567993164f, 458.236999512f);
3487 path1.quadTo(406.4815979f, 458.236999512f, 385.207275391f, 436.96270752f);
3488 path1.quadTo(363.932983398f, 415.68838501f, 363.932983398f, 385.601989746f);
3489 path1.quadTo(363.932983398f, 355.515594482f, 385.207275391f, 334.241271973f);
3490 path1.quadTo(406.4815979f, 312.96697998f, 436.567993164f, 312.96697998f);
3491 path1.quadTo(466.654388428f, 312.96697998f, 487.928710938f, 334.241271973f);
3492 path1.quadTo(509.20300293f, 355.515594482f, 509.20300293f, 385.601989746f);
3493 path1.close();
3494
3495 path2.moveTo(449.033996582f, 290.87298584f);
3496 path2.quadTo(449.033996582f, 301.028259277f, 441.853149414f, 308.209106445f);
3497 path2.quadTo(434.672271729f, 315.389984131f, 424.516998291f, 315.389984131f);
3498 path2.quadTo(414.361724854f, 315.389984131f, 407.180847168f, 308.209106445f);
3499 path2.quadTo(400, 301.028259277f, 400, 290.87298584f);
3500 path2.quadTo(400, 280.717712402f, 407.180847168f, 273.536865234f);
3501 path2.quadTo(414.361724854f, 266.355987549f, 424.516998291f, 266.355987549f);
3502 path2.quadTo(434.672271729f, 266.355987549f, 441.853149414f, 273.536865234f);
3503 path2.quadTo(449.033996582f, 280.717712402f, 449.033996582f, 290.87298584f);
3504 path2.close();
3505
3506 testPathOp(reporter, path1, path2, kUnion_SkPathOp, filename);
3507}
3508
3509static void cubicOp115(skiatest::Reporter* reporter, const char* filename) {
3510 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003511 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003512 path.moveTo(0,1);
3513 path.cubicTo(3,4, 2,1, 5,3);
3514 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003515 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003516 pathB.moveTo(1,2);
3517 pathB.cubicTo(3,5, 1,0, 4,3);
3518 pathB.close();
3519 SkPath path2(path);
3520 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3521}
3522
3523static void testRect1(skiatest::Reporter* reporter, const char* filename) {
3524 SkPath path, path2;
Mike Reed30bc5272019-11-22 18:34:02 +00003525 path.addRect(0, 0, 60, 60, SkPathDirection::kCCW);
3526 path.addRect(30, 20, 50, 50, SkPathDirection::kCCW);
3527 path.addRect(24, 20, 36, 30, SkPathDirection::kCCW);
3528// path.addRect(32, 24, 36, 41, SkPathDirection::kCCW);
Yuqian Li3154a532017-09-06 13:33:30 -04003529 testPathOp(reporter, path, path2, kUnion_SkPathOp, filename);
3530}
3531
3532static void testRect2(skiatest::Reporter* reporter, const char* filename) {
3533 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003534 path.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +00003535 path.addRect(0, 0, 1, 1, SkPathDirection::kCW);
3536 path.addRect(4, 4, 5, 5, SkPathDirection::kCW);
Mike Reed7d34dc72019-11-26 12:17:17 -05003537 pathB.setFillType(SkPathFillType::kEvenOdd);
Mike Reed30bc5272019-11-22 18:34:02 +00003538 pathB.addRect(0, 0, 2, 2, SkPathDirection::kCW);
3539 pathB.addRect(0, 0, 6, 6, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -04003540 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3541}
3542
3543static void cubicOp116(skiatest::Reporter* reporter, const char* filename) {
3544 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003545 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003546 path.moveTo(0,1);
3547 path.cubicTo(4,6, 2,0, 2,0);
3548 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003549 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003550 pathB.moveTo(0,2);
3551 pathB.cubicTo(0,2, 1,0, 6,4);
3552 pathB.close();
3553 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3554}
3555
3556static void cubicOp117(skiatest::Reporter* reporter, const char* filename) {
3557 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003558 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003559 path.moveTo(0,1);
3560 path.cubicTo(4,5, 6,0, 1,0);
3561 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003562 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003563 pathB.moveTo(0,6);
3564 pathB.cubicTo(0,1, 1,0, 5,4);
3565 pathB.close();
3566 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3567}
3568
3569static void cubicOp118(skiatest::Reporter* reporter, const char* filename) {
3570 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003571 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003572 path.moveTo(0,1);
3573 path.cubicTo(4,6, 5,1, 6,2);
3574 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003575 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003576 pathB.moveTo(1,5);
3577 pathB.cubicTo(2,6, 1,0, 6,4);
3578 pathB.close();
3579 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3580}
3581
3582static void loop1(skiatest::Reporter* reporter, const char* filename) {
3583 SkPath path, pathB;
3584 path.moveTo(0,1);
3585 path.cubicTo(1,5, -5.66666651f,3.33333349f, 8.83333302f,2.33333349f);
3586 path.close();
3587 pathB.moveTo(1,5);
3588 pathB.cubicTo(-5.66666651f,3.33333349f, 8.83333302f,2.33333349f, 0,1);
3589 pathB.close();
3590 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3591}
3592
Mike Kleinc0bd9f92019-04-23 12:05:21 -05003593#include "src/pathops/SkPathOpsCubic.h"
Yuqian Li3154a532017-09-06 13:33:30 -04003594
3595static void loop1asQuad(skiatest::Reporter* reporter, const char* filename) {
3596 CubicPts cubic1 = {{{0,1}, {1,5}, {-5.66666651f,3.33333349f}, {8.83333302f,2.33333349f}}};
3597 CubicPts cubic2 = {{{1,5}, {-5.66666651f,3.33333349f}, {8.83333302f,2.33333349f}, {0,1}}};
3598 SkDCubic c1, c2;
3599 c1.debugSet(cubic1.fPts);
3600 c2.debugSet(cubic2.fPts);
3601 double c1InflectionTs[2], c2InflectionTs[2];
3602 SkDEBUGCODE(int c1InfTCount =) c1.findInflections(c1InflectionTs);
3603 SkASSERT(c1InfTCount == 2);
3604 SkDEBUGCODE(int c2InfTCount =) c2.findInflections(c2InflectionTs);
3605 SkASSERT(c2InfTCount == 1);
3606 SkASSERT(c1InflectionTs[0] > c1InflectionTs[1]);
3607 SkDCubicPair c1pair = c1.chopAt(c1InflectionTs[0]);
3608 SkDCubicPair c1apair = c1pair.first().chopAt(c1InflectionTs[1]);
3609 SkDCubicPair c2pair = c2.chopAt(c2InflectionTs[0]);
3610 SkDQuad q1[2] = { c1pair.first().toQuad(), c1pair.second().toQuad() };
3611 SkDQuad q1a[2] = { c1apair.first().toQuad(), c1apair.second().toQuad() };
3612 SkDQuad q2[2] = { c2pair.first().toQuad(), c2pair.second().toQuad() };
3613 SkPath path, pathB;
3614 path.moveTo(q1a[0].fPts[0].asSkPoint());
3615 path.quadTo(q1a[0].fPts[1].asSkPoint(), q1a[0].fPts[2].asSkPoint());
3616 path.quadTo(q1a[1].fPts[1].asSkPoint(), q1a[1].fPts[2].asSkPoint());
3617 path.quadTo(q1[1].fPts[1].asSkPoint(), q1[1].fPts[2].asSkPoint());
3618 path.close();
3619 pathB.moveTo(q2[0].fPts[0].asSkPoint());
3620 pathB.quadTo(q2[0].fPts[1].asSkPoint(), q2[0].fPts[2].asSkPoint());
3621 pathB.quadTo(q2[1].fPts[1].asSkPoint(), q2[1].fPts[2].asSkPoint());
3622 pathB.close();
3623 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3624}
3625
3626static void loop2(skiatest::Reporter* reporter, const char* filename) {
3627 SkPath path, pathB;
3628 path.moveTo(0,1);
3629 path.cubicTo(3,4, 3.f,4.f, 4.5f,1.5f);
3630 path.close();
3631 pathB.moveTo(3,4);
3632 pathB.cubicTo(3.f,4.f, 4.5f,1.5f, 0,1);
3633 pathB.close();
3634 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3635}
3636
3637static void loop3(skiatest::Reporter* reporter, const char* filename) {
3638 SkPath path, pathB;
3639 path.moveTo(0,1);
3640 path.cubicTo(3,5, -3.66666651f,0, 10.5f,-1.66666651f);
3641 path.close();
3642 pathB.moveTo(3,5);
3643 pathB.cubicTo(-3.66666651f,0, 10.5f,-1.66666651f, 0,1);
3644 pathB.close();
3645 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3646}
3647
3648static void loop4(skiatest::Reporter* reporter, const char* filename) {
3649 SkPath path, pathB;
3650 path.moveTo(0,5);
3651 path.cubicTo(1,5, 1,4, 0.833333313f,3);
3652 path.close();
3653 pathB.moveTo(1,5);
3654 pathB.cubicTo(1,4, 0.833333313f,3, 0,5);
3655 pathB.close();
3656 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3657}
3658
Mike Kleinc0bd9f92019-04-23 12:05:21 -05003659#include "include/utils/SkParsePath.h"
Yuqian Li3154a532017-09-06 13:33:30 -04003660
3661static void issue3517(skiatest::Reporter* reporter, const char* filename) {
3662 SkPath path, pathB;
3663
3664 const char str[] = "M31.35 57.75L31.35 57.75C31.9 57.7486 32.45 57.7948 33 57.7413C33.55 57.6878 34.1 57.5014 34.65 57.4291C35.2 57.3569 35.75 57.3223 36.3 57.3079C36.85 57.2935 37.4 57.3143 37.95 57.3428C38.5 57.3712 39.05 57.4112 39.6 57.4786C40.15 57.546 40.7 57.7029 41.25 57.7472C41.8 57.7916 42.35 57.7962 42.9 57.7445C43.45 57.6928 44 57.5345 44.55 57.4373C45.1 57.34 45.65 57.2115 46.2 57.1611C46.75 57.1107 47.3 57.1371 47.85 57.1349C48.4 57.1327 48.95 57.144 49.5 57.1478C50.05 57.1516 50.6 57.1553 51.15 57.1579C51.7 57.1605 52.25 57.1601 52.8 57.1634C53.35 57.1667 53.9 57.1731 54.45 57.1776C55 57.182 55.55 57.1916 56.1 57.19C56.65 57.1884 57.2 57.178 57.75 57.168C58.3 57.158 58.85 57.1355 59.4 57.1299C59.95 57.1243 60.5 57.1338 61.05 57.1345C61.6 57.1352 62.15 57.124 62.7 57.134C63.25 57.1441 63.8 57.1731 64.35 57.195C64.9 57.2169 65.45 57.2532 66 57.2655C66.55 57.2778 67.1 57.2647 67.65 57.2687C68.2 57.2728 68.75 57.267 69.3 57.2896C69.85 57.3122 70.4 57.371 70.95 57.4044C71.5 57.4377 72.05 57.4668 72.6 57.4896C73.15 57.5123 73.7 57.545 74.25 57.5408C74.8 57.5365 75.35 57.5068 75.9 57.4641C76.45 57.4213 77 57.3244 77.55 57.2842C78.1 57.244 78.65 57.2163 79.2 57.2228C79.75 57.2293 80.3 57.29 80.85 57.3232C81.4 57.3563 81.95 57.396 82.5 57.4219C83.05 57.4478 83.6 57.4637 84.15 57.4787C84.7 57.4937 85.25 57.5011 85.8 57.5121C86.35 57.523 86.9 57.5411 87.45 57.5444C88 57.5477 88.55 57.5663 89.1 57.5318C89.65 57.4972 90.2 57.3126 90.75 57.337C91.3 57.3613 91.85 57.6088 92.4 57.6776C92.95 57.7465 93.5 57.7379 94.05 57.75C94.6 57.7621 95.15 57.75 95.7 57.75L95.7 57.75L31.35 57.75Z";
3665 SkParsePath::FromSVGString(str, &path);
3666
3667 const char strB[] = "M31.35 57.75L31.35 57.75C31.9 57.7514 32.45 57.7052 33 57.7587C33.55 57.8122 34.1 57.9986 34.65 58.0709C35.2 58.1431 35.75 58.1777 36.3 58.1921C36.85 58.2065 37.4 58.1857 37.95 58.1572C38.5 58.1288 39.05 58.0888 39.6 58.0214C40.15 57.954 40.7 57.7971 41.25 57.7528C41.8 57.7084 42.35 57.7038 42.9 57.7555C43.45 57.8072 44 57.9655 44.55 58.0627C45.1 58.16 45.65 58.2885 46.2 58.3389C46.75 58.3893 47.3 58.3629 47.85 58.3651C48.4 58.3673 48.95 58.356 49.5 58.3522C50.05 58.3484 50.6 58.3447 51.15 58.3421C51.7 58.3395 52.25 58.3399 52.8 58.3366C53.35 58.3333 53.9 58.3269 54.45 58.3224C55 58.318 55.55 58.3084 56.1 58.31C56.65 58.3116 57.2 58.322 57.75 58.332C58.3 58.342 58.85 58.3645 59.4 58.3701C59.95 58.3757 60.5 58.3662 61.05 58.3655C61.6 58.3648 62.15 58.376 62.7 58.366C63.25 58.3559 63.8 58.3269 64.35 58.305C64.9 58.2831 65.45 58.2468 66 58.2345C66.55 58.2222 67.1 58.2353 67.65 58.2313C68.2 58.2272 68.75 58.233 69.3 58.2104C69.85 58.1878 70.4 58.129 70.95 58.0956C71.5 58.0623 72.05 58.0332 72.6 58.0104C73.15 57.9877 73.7 57.955 74.25 57.9592C74.8 57.9635 75.35 57.9932 75.9 58.0359C76.45 58.0787 77 58.1756 77.55 58.2158C78.1 58.256 78.65 58.2837 79.2 58.2772C79.75 58.2707 80.3 58.21 80.85 58.1768C81.4 58.1437 81.95 58.104 82.5 58.0781C83.05 58.0522 83.6 58.0363 84.15 58.0213C84.7 58.0063 85.25 57.9989 85.8 57.9879C86.35 57.977 86.9 57.9589 87.45 57.9556C88 57.9523 88.55 57.9337 89.1 57.9682C89.65 58.0028 90.2 58.1874 90.75 58.163C91.3 58.1387 91.85 57.8912 92.4 57.8224C92.95 57.7535 93.5 57.7621 94.05 57.75C94.6 57.7379 95.15 57.75 95.7 57.75L95.7 57.75L31.35 57.75Z";
3668 SkParsePath::FromSVGString(strB, &pathB);
3669 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
3670}
3671
3672static void cubicOp119(skiatest::Reporter* reporter, const char* filename) {
3673 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003674 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003675 path.moveTo(0,1);
3676 path.cubicTo(3,5, 2,1, 3,1);
3677 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003678 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003679 pathB.moveTo(1,2);
3680 pathB.cubicTo(1,3, 1,0, 5,3);
3681 pathB.close();
3682 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3683}
3684
3685static void cubicOp120(skiatest::Reporter* reporter, const char* filename) {
3686 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003687 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003688 path.moveTo(0,1);
3689 path.cubicTo(2,4, 2,1, 4,0);
3690 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003691 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003692 pathB.moveTo(1,2);
3693 pathB.cubicTo(0,4, 1,0, 4,2);
3694 pathB.close();
3695 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3696}
3697
3698static void cubicOp121(skiatest::Reporter* reporter, const char* filename) {
3699 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003700 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003701 path.moveTo(0,1);
3702 path.cubicTo(3,4, 3,2, 4,3);
3703 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003704 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003705 pathB.moveTo(2,3);
3706 pathB.cubicTo(3,4, 1,0, 4,3);
3707 pathB.close();
3708 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3709}
3710
3711// FIXME : haven't debugged this failure yet
3712static void cubicOp122(skiatest::Reporter* reporter, const char* filename) {
3713 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003714 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003715 path.moveTo(0,1);
3716 path.cubicTo(3,5, 4,1, 4,0);
3717 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003718 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003719 pathB.moveTo(1,4);
3720 pathB.cubicTo(0,4, 1,0, 5,3);
3721 pathB.close();
3722 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3723}
3724
3725static void cubicOp123(skiatest::Reporter* reporter, const char* filename) {
3726 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003727 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003728 path.moveTo(0,1);
3729 path.cubicTo(1,5, 2,0, 6,0);
3730 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003731 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003732 pathB.moveTo(0,2);
3733 pathB.cubicTo(0,6, 1,0, 5,1);
3734 pathB.close();
3735 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3736}
3737
3738static void loop5(skiatest::Reporter* reporter, const char* filename) {
3739 SkPath path, pathB;
3740 path.moveTo(0,2);
3741 path.cubicTo(1,2, 1,1.66666663f, 0.833333313f,1.33333325f);
3742 path.close();
3743 pathB.moveTo(1,2);
3744 pathB.cubicTo(1,1.66666663f, 0.833333313f,1.33333325f, 0,2);
3745 pathB.close();
3746 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3747}
3748
3749static void loop6(skiatest::Reporter* reporter, const char* filename) {
3750 SkPath path, pathB;
3751 path.moveTo(0,1);
3752 path.cubicTo(1,3, -1.66666675f,1.66666663f, 4.16666651f,1.00000012f);
3753 path.close();
3754 pathB.moveTo(1,3);
3755 pathB.cubicTo(-1.66666675f,1.66666663f, 4.16666651f,1.00000012f, 0,1);
3756 pathB.close();
3757 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3758}
3759
3760static void cubicOp124(skiatest::Reporter* reporter, const char* filename) {
3761 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003762 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003763 path.moveTo(0,1);
3764 path.cubicTo(1,5, 6,0, 3,0);
3765 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003766 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003767 pathB.moveTo(0,6);
3768 pathB.cubicTo(0,3, 1,0, 5,1);
3769 pathB.close();
3770 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3771}
3772
3773static void cubicOp125(skiatest::Reporter* reporter, const char* filename) {
3774 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003775 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003776 path.moveTo(0,1);
3777 path.cubicTo(3,6, 3,1, 6,2);
3778 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003779 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003780 pathB.moveTo(1,3);
3781 pathB.cubicTo(2,6, 1,0, 6,3);
3782 pathB.close();
3783 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3784}
3785
3786static void cubicOp126(skiatest::Reporter* reporter, const char* filename) {
3787 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003788 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003789 path.moveTo(0,1);
3790 path.cubicTo(0,3, 6,0, 2,1);
3791 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003792 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003793 pathB.moveTo(0,6);
3794 pathB.cubicTo(1,2, 1,0, 3,0);
3795 pathB.close();
3796 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3797}
3798
3799static void cubicOp127(skiatest::Reporter* reporter, const char* filename) {
3800 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003801 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003802 path.moveTo(0,1);
3803 path.cubicTo(1,5, 6,0, 3,0);
3804 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003805 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003806 pathB.moveTo(0,6);
3807 pathB.cubicTo(0,3, 1,0, 5,1);
3808 pathB.close();
3809 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3810}
3811
3812static void cubicOp128(skiatest::Reporter* reporter, const char* filename) {
3813 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003814 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003815 path.moveTo(0,1);
3816 path.cubicTo(0,3, 3,2, 5,2);
3817 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003818 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003819 pathB.moveTo(2,3);
3820 pathB.cubicTo(2,5, 1,0, 3,0);
3821 pathB.close();
3822 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3823}
3824
3825static void cubicOp129(skiatest::Reporter* reporter, const char* filename) {
3826 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003827 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003828 path.moveTo(5,6);
3829 path.cubicTo(3,4, 2,0, 2,1);
3830 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003831 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003832 pathB.moveTo(0,2);
3833 pathB.cubicTo(1,2, 6,5, 4,3);
3834 pathB.close();
3835 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3836}
3837
3838static void cubicOp130(skiatest::Reporter* reporter, const char* filename) {
3839 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003840 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003841 path.moveTo(5,6);
3842 path.cubicTo(4,6, 3,0, 2,1);
3843 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003844 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003845 pathB.moveTo(0,3);
3846 pathB.cubicTo(1,2, 6,5, 6,4);
3847 pathB.close();
3848 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3849}
3850
Mike Kleinc0bd9f92019-04-23 12:05:21 -05003851#include "src/core/SkGeometry.h"
Yuqian Li3154a532017-09-06 13:33:30 -04003852
3853static void complex_to_quads(const SkPoint pts[], SkPath* path) {
3854 SkScalar loopT[3];
3855 if (SkDCubic::ComplexBreak(pts, loopT)) {
3856 SkPoint cubicPair[7];
3857 SkChopCubicAt(pts, cubicPair, loopT[0]);
3858 SkDCubic c1, c2;
3859 c1.set(cubicPair);
3860 c2.set(&cubicPair[3]);
3861 SkDQuad q1 = c1.toQuad();
3862 SkDQuad q2 = c2.toQuad();
3863 path->quadTo(q1[1].asSkPoint(), q1[2].asSkPoint());
3864 path->quadTo(q2[1].asSkPoint(), q2[2].asSkPoint());
3865 } else {
3866 path->cubicTo(pts[1], pts[2], pts[3]);
3867 }
3868}
3869
3870static void cubicOp130a(skiatest::Reporter* reporter, const char* filename) {
3871 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003872 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003873 path.moveTo(5,6);
3874 SkPoint pts[] = { {5,6}, {4,6}, {3,0}, {2,1} };
3875 complex_to_quads(pts, &path);
3876 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003877 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003878 pathB.moveTo(0,3);
3879 SkPoint pts2[] = { {0,3}, {1,2}, {6,5}, {6,4} };
3880 complex_to_quads(pts2, &path);
3881 pathB.close();
3882 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3883}
3884
3885static void cubicOp131(skiatest::Reporter* reporter, const char* filename) {
3886 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003887 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003888 path.moveTo(0,1);
3889 path.cubicTo(3,4, 3,0, 6,2);
3890 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05003891 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003892 pathB.moveTo(0,3);
3893 pathB.cubicTo(2,6, 1,0, 4,3);
3894 pathB.close();
3895 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3896}
3897
3898static void circlesOp1(skiatest::Reporter* reporter, const char* filename) {
3899 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003900 path.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +00003901 path.addCircle(0, 1, 2, SkPathDirection::kCCW);
Mike Reed7d34dc72019-11-26 12:17:17 -05003902 pathB.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +00003903 pathB.addCircle(0, 1, 1, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -04003904 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3905}
3906
3907static void circlesOp2(skiatest::Reporter* reporter, const char* filename) {
3908 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003909 path.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +00003910 path.addCircle(0, 1, 4, SkPathDirection::kCCW);
Mike Reed7d34dc72019-11-26 12:17:17 -05003911 pathB.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +00003912 pathB.addCircle(0, 4, 3, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -04003913 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3914}
3915
3916static void rRect1x(skiatest::Reporter* reporter, const char* filename) {
3917 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003918 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04003919 path.moveTo(20.65f, 5.65f);
3920 path.conicTo(20.65f, 1.13612f, 25.1404f, 0.65f, 0.888488f);
3921 path.lineTo(25.65f, 0.65f);
3922 path.lineTo(26.1596f, 0.67604f);
3923 path.conicTo(30.65f, 1.13612f, 30.65f, 5.65f, 0.888488f);
3924 path.lineTo(30.65f, 25.65f);
3925 path.conicTo(30.65f, 20.65f, 25.65f, 20.65f, 0.707107f);
3926 path.lineTo(20.65f, 20.65f);
3927 path.lineTo(20.65f, 5.65f);
3928 path.close();
3929 path.moveTo(20.65f, 20.65f);
3930 path.lineTo(5.65f, 20.65f);
3931 path.conicTo(0.65f, 20.65f, 0.65f, 25.65f, 0.707107f);
3932 path.lineTo(0.65f, 45.65f);
3933 path.conicTo(0.65f, 50.65f, 5.65f, 50.65f, 0.707107f);
3934 path.lineTo(25.65f, 50.65f);
3935 path.conicTo(30.65f, 50.65f, 30.65f, 45.65f, 0.707107f);
3936 path.lineTo(30.65f, 25.65f);
3937 path.conicTo(30.65f, 30.65f, 25.65f, 30.65f, 0.707107f);
3938 path.conicTo(20.65f, 30.65f, 20.65f, 25.65f, 0.707107f);
3939 path.lineTo(20.65f, 20.65f);
3940 path.close();
3941 SkPath path1(path);
3942
3943 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -05003944 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04003945 path.moveTo(20.65f, 45.65f);
3946 path.lineTo(20.65f, 25.65f);
3947 path.conicTo(20.65f, 20.65f, 25.65f, 20.65f, 0.707107f);
3948 path.lineTo(45.65f, 20.65f);
3949 path.conicTo(50.65f, 20.65f, 50.65f, 25.65f, 0.707107f);
3950 path.lineTo(50.65f, 45.65f);
3951 path.conicTo(50.65f, 50.65f, 45.65f, 50.65f, 0.707107f);
3952 path.lineTo(25.65f, 50.65f);
3953 path.conicTo(20.65f, 50.65f, 20.65f, 45.65f, 0.707107f);
3954 path.close();
3955 SkPath path2(path);
3956
3957 testPathOp(reporter, path1, path2, kDifference_SkPathOp, filename);
3958}
3959
3960static void loop7(skiatest::Reporter* reporter, const char* filename) {
3961 SkPath path, pathB;
3962 path.moveTo(0,1);
3963 path.cubicTo(3,4, -1,0, 8.5f,-2.5f);
3964 path.close();
3965 pathB.moveTo(3,4);
3966 pathB.cubicTo(-1,0, 8.5f,-2.5f, 0,1);
3967 pathB.close();
3968 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3969}
3970
3971static void rects5(skiatest::Reporter* reporter, const char* filename) {
3972 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05003973 path.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +00003974 path.addRect(5, 5, 6, 6, SkPathDirection::kCW);
3975 path.addRect(5, 5, 6, 6, SkPathDirection::kCW);
Mike Reed7d34dc72019-11-26 12:17:17 -05003976 pathB.setFillType(SkPathFillType::kEvenOdd);
Mike Reed30bc5272019-11-22 18:34:02 +00003977 pathB.addRect(0, 0, 6, 6, SkPathDirection::kCW);
3978 pathB.addRect(5, 5, 6, 6, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -04003979 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3980}
3981
3982static void loop8(skiatest::Reporter* reporter, const char* filename) {
3983 SkPath path, pathB;
3984 path.moveTo(0,1);
3985 path.cubicTo(1,4, -3.83333325f,0.166666627f, 6,-1);
3986 path.close();
3987 pathB.moveTo(1,4);
3988 pathB.cubicTo(-3.83333325f,0.166666627f, 6,-1, 0,1);
3989 pathB.close();
3990 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3991}
3992
3993static void loop9(skiatest::Reporter* reporter, const char* filename) {
3994 SkPath path, pathB;
3995 path.moveTo(0,1);
3996 path.cubicTo(1,3, -2.5f,0, 3.33333325f,-0.666666627f);
3997 path.close();
3998 pathB.moveTo(1,3);
3999 pathB.cubicTo(-2.5f,0, 3.33333325f,-0.666666627f, 0,1);
4000 pathB.close();
4001 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4002}
4003
4004static void circlesOp3(skiatest::Reporter* reporter, const char* filename) {
4005 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004006 path.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +00004007 path.addCircle(0, 1, 2, SkPathDirection::kCCW);
Mike Reed7d34dc72019-11-26 12:17:17 -05004008 pathB.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +00004009 pathB.addCircle(3, 5, 3, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -04004010 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4011}
4012
4013static void loop10(skiatest::Reporter* reporter, const char* filename) {
4014 SkPath path, pathB;
4015 path.moveTo(5,6);
4016 path.cubicTo(1,2, 1,2, -3.66666651f,13.333334f);
4017 path.close();
4018 pathB.moveTo(1,2);
4019 pathB.cubicTo(1,2, -3.66666651f,13.333334f, 5,6);
4020 pathB.close();
4021 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4022}
4023
4024static void loop11(skiatest::Reporter* reporter, const char* filename) {
4025 SkPath path, pathB;
4026 path.moveTo(0,1);
4027 path.cubicTo(1,3, -1.83333349f,1.33333337f, 4,-1);
4028 path.close();
4029 pathB.moveTo(1,3);
4030 pathB.cubicTo(-1.83333349f,1.33333337f, 4,-1, 0,1);
4031 pathB.close();
4032 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4033}
4034
4035static void cubicOp132(skiatest::Reporter* reporter, const char* filename) {
4036 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004037 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004038 path.moveTo(5,6);
4039 path.cubicTo(3,4, 3,0, 3,2);
4040 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004041 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004042 pathB.moveTo(0,3);
4043 pathB.cubicTo(2,3, 6,5, 4,3);
4044 pathB.close();
4045 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4046}
4047
4048static void loop12(skiatest::Reporter* reporter, const char* filename) {
4049 SkPath path, pathB;
4050 path.moveTo(1,2);
4051 path.cubicTo(0,6, -3.16666675f,3.66666675f, 6.33333349f,3.33333349f);
4052 path.close();
4053 pathB.moveTo(0,6);
4054 pathB.cubicTo(-3.16666675f,3.66666675f, 6.33333349f,3.33333349f, 1,2);
4055 pathB.close();
4056 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4057}
4058
4059static void cubicOp133(skiatest::Reporter* reporter, const char* filename) {
4060 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004061 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004062 path.moveTo(5,6);
4063 path.cubicTo(5,6, 5,0, 4,1);
4064 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004065 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004066 pathB.moveTo(0,5);
4067 pathB.cubicTo(1,4, 6,5, 6,5);
4068 pathB.close();
4069 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4070}
4071
4072static void cubicOp134(skiatest::Reporter* reporter, const char* filename) {
4073 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004074 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004075 path.moveTo(5,6);
4076 path.cubicTo(5,6, 6,0, 3,1);
4077 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004078 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004079 pathB.moveTo(0,6);
4080 pathB.cubicTo(1,3, 6,5, 6,5);
4081 pathB.close();
4082 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4083}
4084
4085static void cubicOp135(skiatest::Reporter* reporter, const char* filename) {
4086 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004087 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004088 path.moveTo(5,6);
4089 path.cubicTo(5,6, 6,0, 4,1);
4090 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004091 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004092 pathB.moveTo(0,6);
4093 pathB.cubicTo(1,4, 6,5, 6,5);
4094 pathB.close();
4095 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4096}
4097
4098static void cubicOp136(skiatest::Reporter* reporter, const char* filename) {
4099 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004100 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004101 path.moveTo(5,6);
4102 path.cubicTo(5,6, 5,0, 3,1);
4103 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004104 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004105 pathB.moveTo(0,5);
4106 pathB.cubicTo(1,3, 6,5, 6,5);
4107 pathB.close();
4108 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4109}
4110
4111static void cubicOp136a(skiatest::Reporter* reporter, const char* filename) {
4112 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004113 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004114 path.moveTo(5,6);
4115 path.quadTo(5,0, 3,1);
4116 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004117 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004118 pathB.moveTo(0,5);
4119 pathB.cubicTo(1,3, 6,5, 6,5);
4120 pathB.close();
4121 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4122}
4123
4124static void cubics137(skiatest::Reporter* reporter, const char* filename) {
4125 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004126 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004127 path.moveTo(0, 5);
4128 path.cubicTo(3, 6, 1, 0, 3, 2);
4129 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004130 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004131 pathB.moveTo(0, 1);
4132 pathB.cubicTo(2, 3, 5, 0, 6, 3);
4133 pathB.close();
4134 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4135}
4136
4137static void cubics138(skiatest::Reporter* reporter, const char* filename) {
4138 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004139 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004140 path.moveTo(0, 5);
4141 path.cubicTo(3, 6, 1, 0, 4, 2);
4142 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004143 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004144 pathB.moveTo(0, 1);
4145 pathB.cubicTo(2, 4, 5, 0, 6, 3);
4146 pathB.close();
4147 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4148}
4149
4150// three curves intersect successfully nearby -- the angle only gets 2 of the 3 pts
4151static void cubicOp139(skiatest::Reporter* reporter, const char* filename) {
4152 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004153 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004154 path.moveTo(0,2);
4155 path.cubicTo(0,4, 3,1, 5,1);
4156 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004157 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004158 pathB.moveTo(1,3);
4159 pathB.cubicTo(1,5, 2,0, 4,0);
4160 pathB.close();
4161 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4162}
4163
4164static void cubicOp140(skiatest::Reporter* reporter, const char* filename) {
4165 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004166 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004167 path.moveTo(0,2);
4168 path.cubicTo(1,2, 5,4, 3,2);
4169 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004170 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004171 pathB.moveTo(4,5);
4172 pathB.cubicTo(2,3, 2,0, 2,1);
4173 pathB.close();
4174 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4175}
4176
4177static void cubicOp141(skiatest::Reporter* reporter, const char* filename) {
4178 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004179 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004180 path.moveTo(0,2);
4181 path.cubicTo(1,2, 6,4, 3,2);
4182 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004183 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004184 pathB.moveTo(4,6);
4185 pathB.cubicTo(2,3, 2,0, 2,1);
4186 pathB.close();
4187 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4188}
4189
4190static void quadRect1(skiatest::Reporter* reporter, const char* filename) {
4191 SkPath path, pathB;
4192 path.moveTo(6,15);
4193 path.quadTo(16,0, 8,4);
4194 path.quadTo(2,7, 12,12);
4195 path.close();
4196 pathB.addRect(4,11, 13,16);
4197 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4198}
4199
4200static void quadRect2(skiatest::Reporter* reporter, const char* filename) {
4201 SkPath path, pathB;
4202 path.moveTo(5,12);
4203 path.quadTo(15,7, 9,4);
4204 path.quadTo(1,0, 11,15);
4205 path.close();
4206 pathB.addRect(4,11, 13,16);
4207 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4208}
4209
4210static void quadRect3(skiatest::Reporter* reporter, const char* filename) {
4211 SkPath path, pathB;
4212 path.moveTo(12,12);
4213 path.quadTo(2,7, 8,4);
4214 path.quadTo(16,0, 6,15);
4215 path.close();
4216 pathB.addRect(4,11, 13,16);
4217 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4218}
4219
4220static void quadRect4(skiatest::Reporter* reporter, const char* filename) {
4221 SkPath path, pathB;
4222 path.moveTo(11,15);
4223 path.quadTo(1,0, 9,4);
4224 path.quadTo(15,7, 5,12);
4225 path.close();
4226 pathB.addRect(4,11, 13,16);
4227 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4228}
4229
4230static void quadRect5(skiatest::Reporter* reporter, const char* filename) {
4231 SkPath path, pathB;
4232 path.moveTo(11,13);
4233 path.quadTo(4,4, 8,4);
4234 path.quadTo(12,4, 5,13);
4235 path.close();
4236 pathB.addRect(4,11, 13,16);
4237 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4238}
4239
4240static void quadRect6(skiatest::Reporter* reporter, const char* filename) {
4241 SkPath path, pathB;
4242 path.moveTo(5,13);
4243 path.quadTo(12,4, 8,4);
4244 path.quadTo(4,4, 11,13);
4245 path.close();
4246 pathB.addRect(4,11, 13,16);
4247 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4248}
4249
4250static void loops4i(skiatest::Reporter* reporter, const char* filename) {
4251 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004252 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004253 path.moveTo(0, 3);
4254 path.cubicTo(0, 2, 0, 2, -1.66666663f, 2.16666675f);
4255 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004256 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004257 pathB.moveTo(0, 2);
4258 pathB.cubicTo(0, 2, -1.66666663f, 2.16666675f, 0, 3);
4259 pathB.close();
4260 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4261}
4262
4263static void loops5i(skiatest::Reporter* reporter, const char* filename) {
4264 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004265 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004266 path.moveTo(1, 2);
4267 path.cubicTo(0, 2, 0, 2, 0.166666672f, 2.66666675f);
4268 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004269 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004270 pathB.moveTo(0, 2);
4271 pathB.cubicTo(0, 2, 0.166666672f, 2.66666675f, 1, 2);
4272 pathB.close();
4273 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4274}
4275
4276static void cubicOp142(skiatest::Reporter* reporter, const char* filename) {
4277 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004278 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004279 path.moveTo(5,6);
4280 path.cubicTo(2,5, 2,1, 1,0);
4281 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004282 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004283 pathB.moveTo(1,2);
4284 pathB.cubicTo(0,1, 6,5, 5,2);
4285 pathB.close();
4286 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4287}
4288
4289static void cubics6d(skiatest::Reporter* reporter, const char* filename) {
4290 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004291 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004292 path.moveTo(3, 5);
4293 path.cubicTo(1, 5, 4, 2, 4, 0);
4294 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004295 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004296 pathB.moveTo(2, 4);
4297 pathB.cubicTo(0, 4, 5, 3, 5, 1);
4298 pathB.close();
4299 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4300}
4301
4302static void cubics7d(skiatest::Reporter* reporter, const char* filename) {
4303 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004304 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004305 path.moveTo(2, 6);
4306 path.cubicTo(2, 4, 5, 1, 3, 1);
4307 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004308 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004309 pathB.moveTo(1, 5);
4310 pathB.cubicTo(1, 3, 6, 2, 4, 2);
4311 pathB.close();
4312 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4313}
4314
4315static void cubics8d(skiatest::Reporter* reporter, const char* filename) {
4316 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004317 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004318 path.moveTo(2, 5);
4319 path.cubicTo(2, 4, 5, 1, 3, 2);
4320 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004321 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004322 pathB.moveTo(1, 5);
4323 pathB.cubicTo(2, 3, 5, 2, 4, 2);
4324 pathB.close();
4325 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4326}
4327
4328static void cubics9d(skiatest::Reporter* reporter, const char* filename) {
4329 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004330 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004331 path.moveTo(2, 4);
4332 path.cubicTo(2, 6, 3, 1, 5, 1);
4333 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004334 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004335 pathB.moveTo(1, 3);
4336 pathB.cubicTo(1, 5, 4, 2, 6, 2);
4337 pathB.close();
4338 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4339}
4340
4341static void cubics10u(skiatest::Reporter* reporter, const char* filename) {
4342 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004343 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004344 path.moveTo(2, 4);
4345 path.cubicTo(1, 6, 4, 1, 5, 1);
4346 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004347 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004348 pathB.moveTo(1, 4);
4349 pathB.cubicTo(1, 5, 4, 2, 6, 1);
4350 pathB.close();
4351 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
4352}
4353
4354static void cubics11i(skiatest::Reporter* reporter, const char* filename) {
4355 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004356 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004357 path.moveTo(2, 4);
4358 path.cubicTo(2, 5, 3, 2, 5, 1);
4359 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004360 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004361 pathB.moveTo(2, 3);
4362 pathB.cubicTo(1, 5, 4, 2, 5, 2);
4363 pathB.close();
4364 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4365}
4366
4367static void cubics12d(skiatest::Reporter* reporter, const char* filename) {
4368 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004369 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004370 path.moveTo(2, 4);
4371 path.cubicTo(0, 4, 5, 3, 5, 1);
4372 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004373 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004374 pathB.moveTo(3, 5);
4375 pathB.cubicTo(1, 5, 4, 2, 4, 0);
4376 pathB.close();
4377 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4378}
4379
4380static void cubics13d(skiatest::Reporter* reporter, const char* filename) {
4381 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004382 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004383 path.moveTo(2, 3);
4384 path.cubicTo(1, 5, 4, 2, 5, 2);
4385 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004386 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004387 pathB.moveTo(2, 4);
4388 pathB.cubicTo(2, 5, 3, 2, 5, 1);
4389 pathB.close();
4390 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4391}
4392
4393static void cubics14d(skiatest::Reporter* reporter, const char* filename) {
4394 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004395 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004396 path.moveTo(2, 3);
4397 path.cubicTo(0, 4, 3, 1, 3, 0);
4398 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004399 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004400 pathB.moveTo(1, 3);
4401 pathB.cubicTo(0, 3, 3, 2, 4, 0);
4402 pathB.close();
4403 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4404}
4405
4406static void cubics15d(skiatest::Reporter* reporter, const char* filename) {
4407 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004408 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004409 path.moveTo(1, 5);
4410 path.cubicTo(3, 5, 4, 0, 4, 2);
4411 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004412 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004413 pathB.moveTo(0, 4);
4414 pathB.cubicTo(2, 4, 5, 1, 5, 3);
4415 pathB.close();
4416 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4417}
4418
4419static void cubics16i(skiatest::Reporter* reporter, const char* filename) {
4420 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004421 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004422 path.moveTo(1, 5);
4423 path.cubicTo(2, 5, 5, 0, 4, 2);
4424 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004425 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004426 pathB.moveTo(0, 5);
4427 pathB.cubicTo(2, 4, 5, 1, 5, 2);
4428 pathB.close();
4429 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4430}
4431
4432static void cubics17d(skiatest::Reporter* reporter, const char* filename) {
4433 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004434 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004435 path.moveTo(1, 5);
4436 path.cubicTo(3, 4, 4, 1, 4, 2);
4437 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004438 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004439 pathB.moveTo(1, 4);
4440 pathB.cubicTo(2, 4, 5, 1, 4, 3);
4441 pathB.close();
4442 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4443}
4444
4445static void cubics18d(skiatest::Reporter* reporter, const char* filename) {
4446 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004447 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004448 path.moveTo(1, 5);
4449 path.cubicTo(1, 3, 4, 0, 2, 0);
4450 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004451 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004452 pathB.moveTo(0, 4);
4453 pathB.cubicTo(0, 2, 5, 1, 3, 1);
4454 pathB.close();
4455 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4456}
4457
4458static void cubics19d(skiatest::Reporter* reporter, const char* filename) {
4459 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004460 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004461 path.moveTo(1, 5);
4462 path.cubicTo(2, 3, 5, 2, 4, 2);
4463 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004464 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004465 pathB.moveTo(2, 5);
4466 pathB.cubicTo(2, 4, 5, 1, 3, 2);
4467 pathB.close();
4468 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4469}
4470
4471static void cubicOp157(skiatest::Reporter* reporter, const char* filename) {
4472 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004473 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004474 path.moveTo(1,5);
4475 path.cubicTo(1,3, 6,2, 4,2);
4476 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004477 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004478 pathB.moveTo(2,6);
4479 pathB.cubicTo(2,4, 5,1, 3,1);
4480 pathB.close();
4481 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4482}
4483
4484static void cubics20d(skiatest::Reporter* reporter, const char* filename) {
4485 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004486 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004487 path.moveTo(1, 2);
4488 path.cubicTo(0, 3, 6, 0, 3, 2);
4489 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004490 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004491 pathB.moveTo(0, 6);
4492 pathB.cubicTo(2, 3, 2, 1, 3, 0);
4493 pathB.close();
4494 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4495}
4496
4497static void loops20i(skiatest::Reporter* reporter, const char* filename) {
4498 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004499 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004500 path.moveTo(1, 2);
4501 path.cubicTo(0, 2, 0.833333313f, 2, 1, 3.66666651f);
4502 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004503 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004504 pathB.moveTo(0, 2);
4505 pathB.cubicTo(0.833333313f, 2, 1, 3.66666651f, 1, 2);
4506 pathB.close();
4507 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4508}
4509
4510static void loops21i(skiatest::Reporter* reporter, const char* filename) {
4511 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004512 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004513 path.moveTo(1, 2);
4514 path.cubicTo(0, 2, 0.833333313f, 2, 1, 4);
4515 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004516 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004517 pathB.moveTo(0, 2);
4518 pathB.cubicTo(0.833333313f, 2, 1, 4, 1, 2);
4519 pathB.close();
4520 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4521}
4522
4523static void loops22i(skiatest::Reporter* reporter, const char* filename) {
4524 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004525 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004526 path.moveTo(1, 3);
4527 path.cubicTo(0, 3, 0.833333313f, 3, 1, 4.66666651f);
4528 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004529 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004530 pathB.moveTo(0, 3);
4531 pathB.cubicTo(0.833333313f, 3, 1, 4.66666651f, 1, 3);
4532 pathB.close();
4533 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4534}
4535
4536static void loops23i(skiatest::Reporter* reporter, const char* filename) {
4537 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004538 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004539 path.moveTo(1, 5);
4540 path.cubicTo(0, 1, 6.16666698f, 5.66666698f, -5.66666651f, 6.66666651f);
4541 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004542 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004543 pathB.moveTo(0, 1);
4544 pathB.cubicTo(6.16666698f, 5.66666698f, -5.66666651f, 6.66666651f, 1, 5);
4545 pathB.close();
4546 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4547}
4548
4549static void loops24i(skiatest::Reporter* reporter, const char* filename) {
4550 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004551 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004552 path.moveTo(1, 2);
4553 path.cubicTo(0, 2, 0.833333313f, 2, 1, 3);
4554 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004555 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004556 pathB.moveTo(0, 2);
4557 pathB.cubicTo(0.833333313f, 2, 1, 3, 1, 2);
4558 pathB.close();
4559 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4560}
4561
4562static void loops25i(skiatest::Reporter* reporter, const char* filename) {
4563 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004564 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004565 path.moveTo(1, 5);
4566 path.cubicTo(0, 5, 0.833333313f, 5, 1, 7);
4567 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004568 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004569 pathB.moveTo(0, 5);
4570 pathB.cubicTo(0.833333313f, 5, 1, 7, 1, 5);
4571 pathB.close();
4572 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4573}
4574
4575static void loops26i(skiatest::Reporter* reporter, const char* filename) {
4576 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004577 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004578 path.moveTo(1, 6);
4579 path.cubicTo(0, 2, 6.16666698f, 6.66666698f, -5.66666651f, 7.66666651f);
4580 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004581 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004582 pathB.moveTo(0, 2);
4583 pathB.cubicTo(6.16666698f, 6.66666698f, -5.66666651f, 7.66666651f, 1, 6);
4584 pathB.close();
4585 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4586}
4587
4588static void loops27i(skiatest::Reporter* reporter, const char* filename) {
4589 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004590 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004591 path.moveTo(1, 3);
4592 path.cubicTo(0, 3, 0.833333313f, 3, 1, 4.33333349f);
4593 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004594 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004595 pathB.moveTo(0, 3);
4596 pathB.cubicTo(0.833333313f, 3, 1, 4.33333349f, 1, 3);
4597 pathB.close();
4598 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4599}
4600
4601static void loops28i(skiatest::Reporter* reporter, const char* filename) {
4602 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004603 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004604 path.moveTo(2, 3);
4605 path.cubicTo(1, 3, 1.83333337f, 3, 2, 4.66666651f);
4606 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004607 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004608 pathB.moveTo(1, 3);
4609 pathB.cubicTo(1.83333337f, 3, 2, 4.66666651f, 2, 3);
4610 pathB.close();
4611 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4612}
4613
4614static void loops29i(skiatest::Reporter* reporter, const char* filename) {
4615 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004616 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004617 path.moveTo(2, 4);
4618 path.cubicTo(0, 4, 1.66666663f, 4, 2, 7.33333302f);
4619 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004620 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004621 pathB.moveTo(0, 4);
4622 pathB.cubicTo(1.66666663f, 4, 2, 7.33333302f, 2, 4);
4623 pathB.close();
4624 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4625}
4626
4627static void loops30i(skiatest::Reporter* reporter, const char* filename) {
4628 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004629 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004630 path.moveTo(2, 4);
4631 path.cubicTo(0, 4, 1.66666663f, 4, 2, 8);
4632 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004633 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004634 pathB.moveTo(0, 4);
4635 pathB.cubicTo(1.66666663f, 4, 2, 8, 2, 4);
4636 pathB.close();
4637 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4638}
4639
4640static void loops31i(skiatest::Reporter* reporter, const char* filename) {
4641 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004642 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004643 path.moveTo(2, 5);
4644 path.cubicTo(1, 5, 1.83333337f, 5, 2, 6.66666651f);
4645 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004646 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004647 pathB.moveTo(1, 5);
4648 pathB.cubicTo(1.83333337f, 5, 2, 6.66666651f, 2, 5);
4649 pathB.close();
4650 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4651}
4652
4653static void loops32i(skiatest::Reporter* reporter, const char* filename) {
4654 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004655 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004656 path.moveTo(2, 6);
4657 path.cubicTo(1, 6, 1.83333337f, 6, 2, 8);
4658 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004659 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004660 pathB.moveTo(1, 6);
4661 pathB.cubicTo(1.83333337f, 6, 2, 8, 2, 6);
4662 pathB.close();
4663 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4664}
4665
4666static void loops33i(skiatest::Reporter* reporter, const char* filename) {
4667 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004668 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004669 path.moveTo(2, 6);
4670 path.cubicTo(1, 2, 7.16666698f, 6.66666698f, -4.66666651f, 7.66666651f);
4671 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004672 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004673 pathB.moveTo(1, 2);
4674 pathB.cubicTo(7.16666698f, 6.66666698f, -4.66666651f, 7.66666651f, 2, 6);
4675 pathB.close();
4676 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4677}
4678
4679static void loops33iMod(skiatest::Reporter* reporter, const char* filename) {
4680 SkPoint pts[] = {{2, 6}, {1, 2}, {7.16666698f, 6.66666698f}, {-4.66666651f, 7.66666651f},
4681 {1, 2}, {7.16666698f, 6.66666698f}, {-4.66666651f, 7.66666651f}, {2, 6}};
4682 bool up = false;
4683 float offset = 0.0380172729f;
4684 float step = 7.62939453e-006f;
4685 bool lastResult = true;
4686 // for (int i = 0; i < 30; ++i) {
4687 SkString name(filename);
4688 // name.appendS32(i);
4689 // if (i > 0) {
4690 // SkDebugf("\n\n<div id=\"%s\">\n", name.c_str());
4691 // }
4692 pts[5].fY = 6.66666698f + offset;
4693 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004694 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004695 path.moveTo(pts[0]);
4696 path.cubicTo(pts[1], pts[2], pts[3]);
4697 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004698 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004699 pathB.moveTo(pts[4]);
4700 pathB.cubicTo(pts[5], pts[6], pts[7]);
4701 pathB.close();
4702 bool result = testPathOp(reporter, path, pathB, kIntersect_SkPathOp, name.c_str());
4703 if (lastResult != result) {
4704 up = !up;
4705 }
4706 step /= 2;
4707 offset += up ? step : -step;
4708 lastResult = result;
4709 // }
4710}
4711
4712
4713static void loops33iAsQuads(skiatest::Reporter* reporter, const char* filename) {
4714 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004715 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004716 path.moveTo(2, 6);
4717 path.cubicTo(1, 2, 7.16666698f, 6.66666698f, -4.66666651f, 7.66666651f);
4718 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004719 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004720 pathB.moveTo(1, 2);
4721 pathB.cubicTo(7.16666698f, 6.66666698f, -4.66666651f, 7.66666651f, 2, 6);
4722 pathB.close();
4723 SkPath qPath, qPathB;
4724 CubicPathToQuads(path, &qPath);
4725 CubicPathToQuads(pathB, &qPathB);
4726 testPathOp(reporter, qPath, qPathB, kIntersect_SkPathOp, filename);
4727}
4728
4729static void loops34i(skiatest::Reporter* reporter, const char* filename) {
4730 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004731 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004732 path.moveTo(3, 4);
4733 path.cubicTo(0, 4, 2.5f, 4, 3, 9);
4734 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004735 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004736 pathB.moveTo(0, 4);
4737 pathB.cubicTo(2.5f, 4, 3, 9, 3, 4);
4738 pathB.close();
4739 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4740}
4741
4742static void loops35i(skiatest::Reporter* reporter, const char* filename) {
4743 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004744 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004745 path.moveTo(3, 4);
4746 path.cubicTo(0, 4, 2.5f, 4, 3, 10);
4747 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004748 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004749 pathB.moveTo(0, 4);
4750 pathB.cubicTo(2.5f, 4, 3, 10, 3, 4);
4751 pathB.close();
4752 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4753}
4754
4755static void loops36i(skiatest::Reporter* reporter, const char* filename) {
4756 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004757 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004758 path.moveTo(3, 4);
4759 path.cubicTo(1, 4, 2.66666675f, 4, 3, 8);
4760 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004761 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004762 pathB.moveTo(1, 4);
4763 pathB.cubicTo(2.66666675f, 4, 3, 8, 3, 4);
4764 pathB.close();
4765 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4766}
4767
4768static void loops37i(skiatest::Reporter* reporter, const char* filename) {
4769 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004770 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004771 path.moveTo(2, 4);
4772 path.cubicTo(1, 4, 1.83333337f, 4, 2, 5.33333349f);
4773 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004774 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004775 pathB.moveTo(1, 4);
4776 pathB.cubicTo(1.83333337f, 4, 2, 5.33333349f, 2, 4);
4777 pathB.close();
4778 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4779}
4780
4781static void loops38i(skiatest::Reporter* reporter, const char* filename) {
4782 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004783 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004784 path.moveTo(3, 4);
4785 path.cubicTo(2, 4, 2.83333325f, 4, 3, 6);
4786 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004787 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004788 pathB.moveTo(2, 4);
4789 pathB.cubicTo(2.83333325f, 4, 3, 6, 3, 4);
4790 pathB.close();
4791 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4792}
4793
4794static void loops39i(skiatest::Reporter* reporter, const char* filename) {
4795 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004796 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004797 path.moveTo(3, 5);
4798 path.cubicTo(0, 5, 2.5f, 5, 3, 10);
4799 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004800 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004801 pathB.moveTo(0, 5);
4802 pathB.cubicTo(2.5f, 5, 3, 10, 3, 5);
4803 pathB.close();
4804 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4805}
4806
4807static void loops40i(skiatest::Reporter* reporter, const char* filename) {
4808 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004809 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004810 path.moveTo(3, 5);
4811 path.cubicTo(0, 5, 2.5f, 5, 3, 11);
4812 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004813 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004814 pathB.moveTo(0, 5);
4815 pathB.cubicTo(2.5f, 5, 3, 11, 3, 5);
4816 pathB.close();
4817 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4818}
4819
4820static void loops40iAsQuads(skiatest::Reporter* reporter, const char* filename) {
4821 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004822 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004823 path.moveTo(3, 5);
4824 path.cubicTo(0, 5, 2.5f, 5, 3, 11);
4825 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004826 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004827 pathB.moveTo(0, 5);
4828 pathB.cubicTo(2.5f, 5, 3, 11, 3, 5);
4829 pathB.close();
4830 SkPath qPath, qPathB;
4831 CubicPathToQuads(path, &qPath);
4832 CubicPathToQuads(pathB, &qPathB);
4833 testPathOp(reporter, qPath, qPathB, kIntersect_SkPathOp, filename);
4834}
4835
4836static void loops44i(skiatest::Reporter* reporter, const char* filename) {
4837 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004838 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004839 path.moveTo(1, 5);
4840 path.cubicTo(0, 1, 7.33333302f, 5.33333349f, -7, 7);
4841 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004842 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004843 pathB.moveTo(0, 1);
4844 pathB.cubicTo(7.33333302f, 5.33333349f, -7, 7, 1, 5);
4845 pathB.close();
4846 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4847}
4848
4849static void loops45i(skiatest::Reporter* reporter, const char* filename) {
4850 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004851 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004852 path.moveTo(1, 6);
4853 path.cubicTo(0, 2, 7.33333302f, 6.33333302f, -7, 8);
4854 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004855 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004856 pathB.moveTo(0, 2);
4857 pathB.cubicTo(7.33333302f, 6.33333302f, -7, 8, 1, 6);
4858 pathB.close();
4859 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4860}
4861
4862static void loops46i(skiatest::Reporter* reporter, const char* filename) {
4863 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004864 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004865 path.moveTo(2, 6);
4866 path.cubicTo(1, 2, 8.33333302f, 6.33333302f, -6, 8);
4867 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004868 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004869 pathB.moveTo(1, 2);
4870 pathB.cubicTo(8.33333302f, 6.33333302f, -6, 8, 2, 6);
4871 pathB.close();
4872 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4873}
4874
4875/*
4876FAILED: d:\cygwin\puregit\tests\pathopsextendedtest.cpp:346 0 */
4877static void loops47i(skiatest::Reporter* reporter, const char* filename) {
4878 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004879 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004880 path.moveTo(2, 4);
4881 path.cubicTo(0, 1, 6, 5.83333302f, -4, 8);
4882 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004883 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004884 pathB.moveTo(0, 1);
4885 pathB.cubicTo(6, 5.83333302f, -4, 8, 2, 4);
4886 pathB.close();
4887 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4888}
4889
4890static void loops48i(skiatest::Reporter* reporter, const char* filename) {
4891 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004892 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004893 path.moveTo(2, 6);
4894 path.cubicTo(0, 1, 9.33333302f, 6.83333302f, -8.33333302f, 9.16666603f);
4895 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004896 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004897 pathB.moveTo(0, 1);
4898 pathB.cubicTo(9.33333302f, 6.83333302f, -8.33333302f, 9.16666603f, 2, 6);
4899 pathB.close();
4900 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4901}
4902
4903static void loops49i(skiatest::Reporter* reporter, const char* filename) {
4904 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004905 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004906 path.moveTo(0, 2);
4907 path.cubicTo(1, 4, -0.166666687f, 2.66666675f, 1.66666675f, 2);
4908 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004909 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004910 pathB.moveTo(1, 4);
4911 pathB.cubicTo(-0.166666687f, 2.66666675f, 1.66666675f, 2, 0, 2);
4912 pathB.close();
4913 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4914}
4915
4916static void loops50i(skiatest::Reporter* reporter, const char* filename) {
4917 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004918 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004919 path.moveTo(0, 3);
4920 path.cubicTo(1, 5, -0.166666687f, 3.66666675f, 1.66666675f, 3);
4921 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004922 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004923 pathB.moveTo(1, 5);
4924 pathB.cubicTo(-0.166666687f, 3.66666675f, 1.66666675f, 3, 0, 3);
4925 pathB.close();
4926 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4927}
4928
4929static void loops51i(skiatest::Reporter* reporter, const char* filename) {
4930 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004931 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004932 path.moveTo(1, 2);
4933 path.cubicTo(2, 4, 0.833333313f, 2.66666675f, 2.66666675f, 2);
4934 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004935 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004936 pathB.moveTo(2, 4);
4937 pathB.cubicTo(0.833333313f, 2.66666675f, 2.66666675f, 2, 1, 2);
4938 pathB.close();
4939 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4940}
4941
4942static void loops52i(skiatest::Reporter* reporter, const char* filename) {
4943 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004944 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004945 path.moveTo(1, 3);
4946 path.cubicTo(2, 5, 0.833333313f, 3.66666675f, 2.66666675f, 3);
4947 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004948 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004949 pathB.moveTo(2, 5);
4950 pathB.cubicTo(0.833333313f, 3.66666675f, 2.66666675f, 3, 1, 3);
4951 pathB.close();
4952 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4953}
4954
4955static void loops53i(skiatest::Reporter* reporter, const char* filename) {
4956 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004957 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004958 path.moveTo(2, 3);
4959 path.cubicTo(3, 5, 1.83333325f, 3.66666675f, 3.66666651f, 3);
4960 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004961 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004962 pathB.moveTo(3, 5);
4963 pathB.cubicTo(1.83333325f, 3.66666675f, 3.66666651f, 3, 2, 3);
4964 pathB.close();
4965 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4966}
4967
4968static void loops54i(skiatest::Reporter* reporter, const char* filename) {
4969 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004970 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004971 path.moveTo(0, 2);
4972 path.cubicTo(1, 4, 0, 3, 1.66666675f, 2);
4973 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004974 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004975 pathB.moveTo(1, 4);
4976 pathB.cubicTo(0, 3, 1.66666675f, 2, 0, 2);
4977 pathB.close();
4978 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4979}
4980
4981static void loops55i(skiatest::Reporter* reporter, const char* filename) {
4982 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004983 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004984 path.moveTo(0, 3);
4985 path.cubicTo(1, 5, 0, 4, 1.66666675f, 3);
4986 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05004987 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004988 pathB.moveTo(1, 5);
4989 pathB.cubicTo(0, 4, 1.66666675f, 3, 0, 3);
4990 pathB.close();
4991 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4992}
4993
4994static void loops56i(skiatest::Reporter* reporter, const char* filename) {
4995 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05004996 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04004997 path.moveTo(1, 2);
4998 path.cubicTo(2, 4, 0.99999994f, 3, 2.66666675f, 2);
4999 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005000 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005001 pathB.moveTo(2, 4);
5002 pathB.cubicTo(0.99999994f, 3, 2.66666675f, 2, 1, 2);
5003 pathB.close();
5004 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5005}
5006
5007static void loops57i(skiatest::Reporter* reporter, const char* filename) {
5008 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005009 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005010 path.moveTo(1, 3);
5011 path.cubicTo(2, 5, 0.99999994f, 4, 2.66666675f, 3);
5012 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005013 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005014 pathB.moveTo(2, 5);
5015 pathB.cubicTo(0.99999994f, 4, 2.66666675f, 3, 1, 3);
5016 pathB.close();
5017 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5018}
5019
5020static void loops58i(skiatest::Reporter* reporter, const char* filename) {
5021 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005022 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005023 path.moveTo(2, 3);
5024 path.cubicTo(3, 5, 2, 4, 3.66666651f, 3);
5025 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005026 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005027 pathB.moveTo(3, 5);
5028 pathB.cubicTo(2, 4, 3.66666651f, 3, 2, 3);
5029 pathB.close();
5030 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5031}
5032
5033static void loops58iAsQuads(skiatest::Reporter* reporter, const char* filename) {
5034 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005035 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005036 path.moveTo(2, 3);
5037 path.cubicTo(3, 5, 2, 4, 3.66666651f, 3);
5038 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005039 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005040 pathB.moveTo(3, 5);
5041 pathB.cubicTo(2, 4, 3.66666651f, 3, 2, 3);
5042 pathB.close();
5043 SkPath qPath, qPathB;
5044 CubicPathToQuads(path, &qPath);
5045 CubicPathToQuads(pathB, &qPathB);
5046// SkPoint from = {2.61714339f,1.90228665f};
5047// SkPoint to = {2.617045833359139f,1.9013528935803314f};
5048// path_edit(from, to, &qPathB);
5049 testPathOp(reporter, qPath, qPathB, kIntersect_SkPathOp, filename);
5050}
5051
5052static void loops59i(skiatest::Reporter* reporter, const char* filename) {
5053 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005054 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005055 path.moveTo(0, 6);
5056 path.cubicTo(1, 2, 7.33333302f, 1.66666663f, -7.5f, 2);
5057 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005058 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005059 pathB.moveTo(1, 2);
5060 pathB.cubicTo(7.33333302f, 1.66666663f, -7.5f, 2, 0, 6);
5061 pathB.close();
5062 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5063}
5064
5065static void loops59iasQuads(skiatest::Reporter* reporter, const char* filename) {
5066 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005067 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005068 path.moveTo(0, 6);
5069 path.cubicTo(1, 2, 7.33333302f, 1.66666663f, -7.5f, 2);
5070 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005071 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005072 pathB.moveTo(1, 2);
5073 pathB.cubicTo(7.33333302f, 1.66666663f, -7.5f, 2, 0, 6);
5074 pathB.close();
5075 SkPath qPath, qPathB;
5076 CubicPathToQuads(path, &qPath);
5077 CubicPathToQuads(pathB, &qPathB);
5078 SkPoint from = {2.61714339f,1.90228665f};
5079 SkPoint to = {2.617045833359139f,1.9013528935803314f};
5080 path_edit(from, to, &qPathB);
5081 testPathOp(reporter, qPath, qPathB, kIntersect_SkPathOp, filename);
5082}
5083
5084static void cubics41d(skiatest::Reporter* reporter, const char* filename) {
5085 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005086 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005087 path.moveTo(0, 1);
5088 path.cubicTo(1, 4, 3, 0, 3, 1);
5089 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005090 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005091 pathB.moveTo(0, 3);
5092 pathB.cubicTo(1, 3, 1, 0, 4, 1);
5093 pathB.close();
5094 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
5095}
5096
5097void loops61i(skiatest::Reporter* reporter, const char* filename) {
5098 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005099 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005100 path.moveTo(0, 1);
5101 path.cubicTo(1, 5, -6.33333302f, 0.666666627f, 8, -1);
5102 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005103 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005104 pathB.moveTo(1, 5);
5105 pathB.cubicTo(-6.33333302f, 0.666666627f, 8, -1, 0, 1);
5106 pathB.close();
5107 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5108}
5109
5110static void loops62i(skiatest::Reporter* reporter, const char* filename) {
5111 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005112 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005113 path.moveTo(0, 2);
5114 path.cubicTo(1, 6, -6.33333302f, 1.66666663f, 8, 0);
5115 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005116 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005117 pathB.moveTo(1, 6);
5118 pathB.cubicTo(-6.33333302f, 1.66666663f, 8, 0, 0, 2);
5119 pathB.close();
5120 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5121}
5122
5123static void loops63i(skiatest::Reporter* reporter, const char* filename) {
5124 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005125 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005126 path.moveTo(0, 1);
5127 path.cubicTo(2, 4, -4, -0.833333254f, 6, -3);
5128 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005129 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005130 pathB.moveTo(2, 4);
5131 pathB.cubicTo(-4, -0.833333254f, 6, -3, 0, 1);
5132 pathB.close();
5133 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5134}
5135
5136static void cubics44d(skiatest::Reporter* reporter, const char* filename) {
5137 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005138 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005139 path.moveTo(3, 4);
5140 path.cubicTo(2, 5, 3, 1, 6, 2);
5141 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005142 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005143 pathB.moveTo(1, 3);
5144 pathB.cubicTo(2, 6, 4, 3, 5, 2);
5145 pathB.close();
5146 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
5147}
5148
5149static void cubics45u(skiatest::Reporter* reporter, const char* filename) {
5150 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005151 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005152 path.moveTo(1, 3);
5153 path.cubicTo(2, 6, 4, 3, 5, 2);
5154 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005155 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005156 pathB.moveTo(3, 4);
5157 pathB.cubicTo(2, 5, 3, 1, 6, 2);
5158 pathB.close();
5159 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
5160}
5161
5162static void fuzz38(skiatest::Reporter* reporter, const char* filename) {
5163 SkPath path, pathB;
5164 path.moveTo(100.34f, 303.312f);
5165 path.lineTo(-1e+08, 303.312f);
5166 path.lineTo(102, 310.156f);
5167 path.lineTo(100.34f, 310.156f);
5168 path.lineTo(100.34f, 303.312f);
5169 path.close();
5170 testPathOpCheck(reporter, path, pathB, kUnion_SkPathOp, filename, true);
5171}
5172
Cary Clark5de52332018-08-30 12:58:23 -04005173// we currently don't produce meaningful intersections when a path has extremely large segments
5174// intersecting relatively small ones. This bug was reported as a fuzzer bug and wasn't expected
5175// to produce meaningful results
Yuqian Li3154a532017-09-06 13:33:30 -04005176static void crbug_526025(skiatest::Reporter* reporter, const char* filename) {
5177 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05005178 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -04005179path.moveTo(SkBits2Float(0x43b40000), SkBits2Float(0xcf000000)); // 360, -2.14748e+09f
5180path.cubicTo(SkBits2Float(0x4e0d628f), SkBits2Float(0xceffffff), SkBits2Float(0x4e800003), SkBits2Float(0xcec6b143), SkBits2Float(0x4e800002), SkBits2Float(0xce7ffffc)); // 5.93012e+08f, -2.14748e+09f, 1.07374e+09f, -1.66675e+09f, 1.07374e+09f, -1.07374e+09f
5181path.cubicTo(SkBits2Float(0x4e800002), SkBits2Float(0xcde53aee), SkBits2Float(0x4e0d6292), SkBits2Float(0xc307820e), SkBits2Float(0x44627d00), SkBits2Float(0x437ffff2)); // 1.07374e+09f, -4.80731e+08f, 5.93012e+08f, -135.508f, 905.953f, 256
5182path.lineTo(SkBits2Float(0x444bf3bc), SkBits2Float(0x4460537e)); // 815.808f, 897.305f
5183path.lineTo(SkBits2Float(0x43553abd), SkBits2Float(0x440f3cbd)); // 213.229f, 572.949f
5184path.lineTo(SkBits2Float(0x42000000), SkBits2Float(0x41800000)); // 32, 16
5185path.lineTo(SkBits2Float(0x42c80000), SkBits2Float(0x44000000)); // 100, 512
5186path.lineTo(SkBits2Float(0x43553abd), SkBits2Float(0x440f3cbd)); // 213.229f, 572.949f
5187path.lineTo(SkBits2Float(0x43b40000), SkBits2Float(0x44800000)); // 360, 1024
5188path.lineTo(SkBits2Float(0x43b40000), SkBits2Float(0x45816000)); // 360, 4140
5189
5190 SkPath path1(path);
5191 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -05005192 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -04005193path.moveTo(SkBits2Float(0x42fe0000), SkBits2Float(0x43a08000)); // 127, 321
5194path.lineTo(SkBits2Float(0x45d5c000), SkBits2Float(0x43870000)); // 6840, 270
5195path.lineTo(SkBits2Float(0xd0a00000), SkBits2Float(0x4cbebc20)); // -2.14748e+10f, 1e+08
5196path.lineTo(SkBits2Float(0x451f7000), SkBits2Float(0x42800000)); // 2551, 64
5197path.lineTo(SkBits2Float(0x42fe0000), SkBits2Float(0x43a08000)); // 127, 321
5198path.close();
5199
5200 SkPath path2(path);
Cary Clark5de52332018-08-30 12:58:23 -04005201 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
Yuqian Li3154a532017-09-06 13:33:30 -04005202}
5203
5204static void fuzzX_392(skiatest::Reporter* reporter, const char* filename) {
5205 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05005206 path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04005207path.moveTo(SkBits2Float(0x41e80000), SkBits2Float(0x43bde212)); // 29, 379.766f
5208path.lineTo(SkBits2Float(0x41e80000), SkBits2Float(0x43bdc7ef)); // 29, 379.562f
5209path.conicTo(SkBits2Float(0x42a5861e), SkBits2Float(0x43c61f86), SkBits2Float(0x430b0610), SkBits2Float(0x43c61f86), SkBits2Float(0x3f7d23f3)); // 82.7619f, 396.246f, 139.024f, 396.246f, 0.98883f
5210path.conicTo(SkBits2Float(0x42a58e20), SkBits2Float(0x43c61f86), SkBits2Float(0x41e80000), SkBits2Float(0x43bde212), SkBits2Float(0x3f7d2cf5)); // 82.7776f, 396.246f, 29, 379.766f, 0.988967f
5211path.close();
5212
5213 SkPath path1(path);
Mike Reed7d34dc72019-11-26 12:17:17 -05005214 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005215path.moveTo(SkBits2Float(0xc36c7bd8), SkBits2Float(0xc3a31d72)); // -236.484f, -326.23f
5216path.lineTo(SkBits2Float(0xc367a4ae), SkBits2Float(0xc3a31d72)); // -231.643f, -326.23f
5217path.lineTo(SkBits2Float(0x430b0610), SkBits2Float(0x43c61f86)); // 139.024f, 396.246f
5218path.lineTo(SkBits2Float(0xc36c7bd8), SkBits2Float(0x43c61f86)); // -236.484f, 396.246f
5219
5220 SkPath path2(path);
5221 testPathOp(reporter, path1, path2, kIntersect_SkPathOp, filename);
5222}
5223
5224static void dean2(skiatest::Reporter* reporter, const char* filename) {
5225 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05005226 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -04005227path.moveTo(SkBits2Float(0x3f2b74b3), SkBits2Float(0x4154a02b)); // 0.669749f, 13.2891f
5228path.cubicTo(SkBits2Float(0x3f2b74b3), SkBits2Float(0x4154a02b), SkBits2Float(0x41531912), SkBits2Float(0x3f130322), SkBits2Float(0x4154a02b), SkBits2Float(0x3f2b74b3)); // 0.669749f, 13.2891f, 13.1936f, 0.574267f, 13.2891f, 0.669749f
5229path.cubicTo(SkBits2Float(0x414a835a), SkBits2Float(0x3ec07ba6), SkBits2Float(0x413fcc0d), SkBits2Float(0x3e193319), SkBits2Float(0x4134a02b), SkBits2Float(0x00000000)); // 12.6571f, 0.375943f, 11.9873f, 0.149609f, 11.2891f, 0
5230path.lineTo(SkBits2Float(0x3f2b74b3), SkBits2Float(0x4154a02b)); // 0.669749f, 13.2891f
5231path.close();
5232 SkPath path1(path);
5233
5234 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -05005235 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -04005236path.moveTo(SkBits2Float(0x3f2b74b3), SkBits2Float(0x4154a02b)); // 0.669749f, 13.2891f
5237path.cubicTo(SkBits2Float(0x3f2b74b3), SkBits2Float(0x4154a02b), SkBits2Float(0x41531912), SkBits2Float(0x3f130322), SkBits2Float(0x4154a02b), SkBits2Float(0x3f2b74b3)); // 0.669749f, 13.2891f, 13.1936f, 0.574267f, 13.2891f, 0.669749f
5238path.lineTo(SkBits2Float(0x417ab74b), SkBits2Float(0x4154a02b)); // 15.6697f, 13.2891f
5239path.lineTo(SkBits2Float(0x3f2b74b3), SkBits2Float(0x4154a02b)); // 0.669749f, 13.2891f
5240path.close();
5241 SkPath path2(path);
5242 testPathOp(reporter, path1, path2, kIntersect_SkPathOp, filename);
5243}
5244
5245static void cubics_d(skiatest::Reporter* reporter, const char* filename) {
5246 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005247 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005248 path.moveTo(0, 1);
5249 path.cubicTo(3, 5, 1, 0, 3, 0);
5250 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005251 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005252 pathB.moveTo(0, 1);
5253 pathB.cubicTo(0, 3, 1, 0, 5, 3);
5254 pathB.close();
5255 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
5256}
5257
5258static void cubics_d2(skiatest::Reporter* reporter, const char* filename) {
5259 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005260 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005261 path.moveTo(0, 1);
5262 path.cubicTo(2, 5, 2, 0, 2, 1);
5263 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005264 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005265 pathB.moveTo(0, 2);
5266 pathB.cubicTo(1, 2, 1, 0, 5, 2);
5267 pathB.close();
5268 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
5269}
5270
5271static void loops_i1(skiatest::Reporter* reporter, const char* filename) {
5272 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005273 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005274 path.moveTo(2, 3);
5275 path.cubicTo(0, 4, -0.333333343f, 4.66666651f, 3, 5.83333349f);
5276 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005277 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005278 pathB.moveTo(0, 4);
5279 pathB.cubicTo(-0.333333343f, 4.66666651f, 3, 5.83333349f, 2, 3);
5280 pathB.close();
5281 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5282}
5283
5284static void loops_i2(skiatest::Reporter* reporter, const char* filename) {
5285 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005286 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005287 path.moveTo(2, 4);
5288 path.cubicTo(0, 5, -0.333333343f, 5.66666651f, 3, 6.83333302f);
5289 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005290 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005291 pathB.moveTo(0, 5);
5292 pathB.cubicTo(-0.333333343f, 5.66666651f, 3, 6.83333302f, 2, 4);
5293 pathB.close();
5294 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5295}
5296
5297static void loops_i3(skiatest::Reporter* reporter, const char* filename) {
5298 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005299 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005300 path.moveTo(2, 5);
5301 path.cubicTo(0, 6, -0.333333343f, 6.66666651f, 3, 7.83333302f);
5302 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005303 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005304 pathB.moveTo(0, 6);
5305 pathB.cubicTo(-0.333333343f, 6.66666651f, 3, 7.83333302f, 2, 5);
5306 pathB.close();
5307 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5308}
5309
5310static void loops_i4(skiatest::Reporter* reporter, const char* filename) {
5311 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005312 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005313 path.moveTo(3, 4);
5314 path.cubicTo(1, 5, 0.666666627f, 5.66666651f, 4, 6.83333302f);
5315 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005316 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005317 pathB.moveTo(1, 5);
5318 pathB.cubicTo(0.666666627f, 5.66666651f, 4, 6.83333302f, 3, 4);
5319 pathB.close();
5320 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5321}
5322
5323static void loops_i5(skiatest::Reporter* reporter, const char* filename) {
5324 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005325 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005326 path.moveTo(3, 5);
5327 path.cubicTo(1, 6, 0.666666627f, 6.66666651f, 4, 7.83333302f);
5328 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005329 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005330 pathB.moveTo(1, 6);
5331 pathB.cubicTo(0.666666627f, 6.66666651f, 4, 7.83333302f, 3, 5);
5332 pathB.close();
5333 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5334}
5335
5336static void loops_i6(skiatest::Reporter* reporter, const char* filename) {
5337 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005338 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005339 path.moveTo(4, 5);
5340 path.cubicTo(2, 6, 1.66666663f, 6.66666651f, 5, 7.83333302f);
5341 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005342 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005343 pathB.moveTo(2, 6);
5344 pathB.cubicTo(1.66666663f, 6.66666651f, 5, 7.83333302f, 4, 5);
5345 pathB.close();
5346 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5347}
5348
5349static void cubics_d3(skiatest::Reporter* reporter, const char* filename) {
5350 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005351 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005352 path.moveTo(3, 4);
5353 path.cubicTo(0, 6, 6, 1, 4, 2);
5354 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005355 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005356 pathB.moveTo(1, 6);
5357 pathB.cubicTo(2, 4, 4, 3, 6, 0);
5358 pathB.close();
5359 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
5360}
5361
5362static void cubics_o(skiatest::Reporter* reporter, const char* filename) {
5363 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005364 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005365 path.moveTo(1, 4);
5366 path.cubicTo(2, 6, 5, 0, 5, 3);
5367 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005368 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005369 pathB.moveTo(0, 5);
5370 pathB.cubicTo(3, 5, 4, 1, 6, 2);
5371 pathB.close();
5372 testPathOp(reporter, path, pathB, kXOR_SkPathOp, filename);
5373}
5374
5375static void cubicOp158(skiatest::Reporter* reporter, const char* filename) {
5376 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005377 path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005378 path.moveTo(0,1);
5379 path.cubicTo(2,4, 2,0, 2,0);
5380 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005381 pathB.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04005382 pathB.moveTo(0,2);
5383 pathB.cubicTo(0,2, 1,0, 4,2);
5384 pathB.close();
5385 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
5386}
5387
5388static void loop17(skiatest::Reporter* reporter, const char* filename) {
5389 SkPath path, pathB;
5390 path.moveTo(1, 2);
5391 path.cubicTo(0, 3, -0.333333343f, 3.33333325f, 0.833333373f, 3.5f);
5392 path.close();
5393 pathB.moveTo(0, 3);
5394 pathB.cubicTo(-0.333333343f, 3.33333325f, 0.833333373f, 3.5f, 1, 2);
5395 pathB.close();
5396 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5397}
5398
5399static void circlesOp4(skiatest::Reporter* reporter, const char* filename) {
5400 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005401 path.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +00005402 path.addCircle(0, 1, 5, SkPathDirection::kCW);
Mike Reed7d34dc72019-11-26 12:17:17 -05005403 pathB.setFillType(SkPathFillType::kWinding);
Mike Reed30bc5272019-11-22 18:34:02 +00005404 pathB.addCircle(0, 1, 0, SkPathDirection::kCW);
Yuqian Li3154a532017-09-06 13:33:30 -04005405 testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
5406}
5407
5408static void bug5240(skiatest::Reporter* reporter, const char* filename) {
5409 SkPath path;
5410path.moveTo(815, 82);
5411path.cubicTo(814.4794311523438f, 82.7868881225586f, 814.5330810546875f,
541282.6266555786133f, 814.5291137695312f, 82.6252212524414f);
5413path.cubicTo(814.5229492187500f, 82.6230010986328f, 814.3790283203125f,
541483.0008087158203f, 813.8533935546875f, 82.7072601318359f);
5415path.close();
5416 testPathOp(reporter, path, path, kUnion_SkPathOp, filename);
5417}
5418
5419static void android1(skiatest::Reporter* reporter, const char* filename) {
5420 SkPath path, pathB;
5421path.moveTo(SkBits2Float(0xc0a00000), SkBits2Float(0x00000000)); // -5, 0
5422path.lineTo(SkBits2Float(0x44866000), SkBits2Float(0x00000000)); // 1075, 0
5423path.lineTo(SkBits2Float(0x44866000), SkBits2Float(0x43720000)); // 1075, 242
5424path.lineTo(SkBits2Float(0xc0a00000), SkBits2Float(0x43720000)); // -5, 242
5425path.lineTo(SkBits2Float(0xc0a00000), SkBits2Float(0x00000000)); // -5, 0
5426path.close();
5427pathB.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
5428pathB.lineTo(SkBits2Float(0x44870000), SkBits2Float(0x00000000)); // 1080, 0
5429pathB.lineTo(SkBits2Float(0x44870000), SkBits2Float(0x43720000)); // 1080, 242
5430pathB.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x43720000)); // 0, 242
5431pathB.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
5432pathB.close();
5433 testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5434}
5435
Cary Clark22582502017-12-13 14:56:53 -05005436static void seanbug(skiatest::Reporter* reporter, const char* filename) {
5437 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05005438 path.setFillType(SkPathFillType::kEvenOdd);
Cary Clark22582502017-12-13 14:56:53 -05005439 path.moveTo(SkBits2Float(0x45b56000), SkBits2Float(0x45bca000)); // 5804, 6036
5440 path.lineTo(SkBits2Float(0x45b55f0a), SkBits2Float(0x45bc9fc0)); // 5803.88f, 6035.97f
5441 path.lineTo(SkBits2Float(0x45b55e15), SkBits2Float(0x45bc9f7b)); // 5803.76f, 6035.94f
5442 path.lineTo(SkBits2Float(0x45b55d1f), SkBits2Float(0x45bc9f32)); // 5803.64f, 6035.9f
5443 path.lineTo(SkBits2Float(0x45b55c29), SkBits2Float(0x45bc9ee3)); // 5803.52f, 6035.86f
5444 path.lineTo(SkBits2Float(0x45b55b34), SkBits2Float(0x45bc9e90)); // 5803.4f, 6035.82f
5445 path.lineTo(SkBits2Float(0x45b55a3f), SkBits2Float(0x45bc9e38)); // 5803.28f, 6035.78f
5446 path.lineTo(SkBits2Float(0x45b5594a), SkBits2Float(0x45bc9ddc)); // 5803.16f, 6035.73f
5447 path.lineTo(SkBits2Float(0x45b55856), SkBits2Float(0x45bc9d7a)); // 5803.04f, 6035.68f
5448 path.lineTo(SkBits2Float(0x45b55762), SkBits2Float(0x45bc9d14)); // 5802.92f, 6035.63f
5449 path.lineTo(SkBits2Float(0x45b5566f), SkBits2Float(0x45bc9caa)); // 5802.8f, 6035.58f
5450 path.lineTo(SkBits2Float(0x45b5557c), SkBits2Float(0x45bc9c3b)); // 5802.69f, 6035.53f
5451 path.lineTo(SkBits2Float(0x45b55489), SkBits2Float(0x45bc9bc7)); // 5802.57f, 6035.47f
5452 path.lineTo(SkBits2Float(0x45b55397), SkBits2Float(0x45bc9b4f)); // 5802.45f, 6035.41f
5453 path.lineTo(SkBits2Float(0x45b552a6), SkBits2Float(0x45bc9ad3)); // 5802.33f, 6035.35f
5454 path.lineTo(SkBits2Float(0x45b551b5), SkBits2Float(0x45bc9a52)); // 5802.21f, 6035.29f
5455 path.lineTo(SkBits2Float(0x45b550c5), SkBits2Float(0x45bc99cd)); // 5802.1f, 6035.23f
5456 path.lineTo(SkBits2Float(0x45b54fd6), SkBits2Float(0x45bc9943)); // 5801.98f, 6035.16f
5457 path.lineTo(SkBits2Float(0x45b54ee8), SkBits2Float(0x45bc98b6)); // 5801.86f, 6035.09f
5458 path.lineTo(SkBits2Float(0x45b54dfb), SkBits2Float(0x45bc9824)); // 5801.75f, 6035.02f
5459 path.lineTo(SkBits2Float(0x45b54d0e), SkBits2Float(0x45bc978d)); // 5801.63f, 6034.94f
5460 path.lineTo(SkBits2Float(0x45b54c23), SkBits2Float(0x45bc96f3)); // 5801.52f, 6034.87f
5461 path.lineTo(SkBits2Float(0x45b54b39), SkBits2Float(0x45bc9654)); // 5801.4f, 6034.79f
5462 path.lineTo(SkBits2Float(0x45b54a4f), SkBits2Float(0x45bc95b2)); // 5801.29f, 6034.71f
5463 path.lineTo(SkBits2Float(0x45b54967), SkBits2Float(0x45bc950b)); // 5801.18f, 6034.63f
5464 path.lineTo(SkBits2Float(0x45b54880), SkBits2Float(0x45bc9460)); // 5801.06f, 6034.55f
5465 path.lineTo(SkBits2Float(0x45b5479a), SkBits2Float(0x45bc93b1)); // 5800.95f, 6034.46f
5466 path.lineTo(SkBits2Float(0x45b546b6), SkBits2Float(0x45bc92fe)); // 5800.84f, 6034.37f
5467 path.lineTo(SkBits2Float(0x45b545d3), SkBits2Float(0x45bc9248)); // 5800.73f, 6034.29f
5468 path.lineTo(SkBits2Float(0x45b544f1), SkBits2Float(0x45bc918d)); // 5800.62f, 6034.19f
5469 path.lineTo(SkBits2Float(0x45b54410), SkBits2Float(0x45bc90cf)); // 5800.51f, 6034.1f
5470 path.lineTo(SkBits2Float(0x45b54331), SkBits2Float(0x45bc900d)); // 5800.4f, 6034.01f
5471 path.lineTo(SkBits2Float(0x45b54254), SkBits2Float(0x45bc8f47)); // 5800.29f, 6033.91f
5472 path.lineTo(SkBits2Float(0x45b54178), SkBits2Float(0x45bc8e7d)); // 5800.18f, 6033.81f
5473 path.lineTo(SkBits2Float(0x45b5409e), SkBits2Float(0x45bc8db0)); // 5800.08f, 6033.71f
5474 path.lineTo(SkBits2Float(0x45b53fc6), SkBits2Float(0x45bc8cde)); // 5799.97f, 6033.61f
5475 path.lineTo(SkBits2Float(0x45b53eef), SkBits2Float(0x45bc8c0a)); // 5799.87f, 6033.5f
5476 path.lineTo(SkBits2Float(0x45b53e1a), SkBits2Float(0x45bc8b31)); // 5799.76f, 6033.4f
5477 path.lineTo(SkBits2Float(0x45b53d47), SkBits2Float(0x45bc8a56)); // 5799.66f, 6033.29f
5478 path.lineTo(SkBits2Float(0x45b53c75), SkBits2Float(0x45bc8976)); // 5799.56f, 6033.18f
5479 path.lineTo(SkBits2Float(0x45b53ba6), SkBits2Float(0x45bc8893)); // 5799.46f, 6033.07f
5480 path.lineTo(SkBits2Float(0x45b53ad8), SkBits2Float(0x45bc87ad)); // 5799.36f, 6032.96f
5481 path.lineTo(SkBits2Float(0x45b53a0d), SkBits2Float(0x45bc86c4)); // 5799.26f, 6032.85f
5482 path.lineTo(SkBits2Float(0x45b53944), SkBits2Float(0x45bc85d6)); // 5799.16f, 6032.73f
5483 path.lineTo(SkBits2Float(0x45b5387c), SkBits2Float(0x45bc84e6)); // 5799.06f, 6032.61f
5484 path.lineTo(SkBits2Float(0x45b537b7), SkBits2Float(0x45bc83f2)); // 5798.96f, 6032.49f
5485 path.lineTo(SkBits2Float(0x45b536f4), SkBits2Float(0x45bc82fc)); // 5798.87f, 6032.37f
5486 path.lineTo(SkBits2Float(0x45b53634), SkBits2Float(0x45bc8201)); // 5798.78f, 6032.25f
5487 path.lineTo(SkBits2Float(0x45b53575), SkBits2Float(0x45bc8104)); // 5798.68f, 6032.13f
5488 path.lineTo(SkBits2Float(0x45b534ba), SkBits2Float(0x45bc8004)); // 5798.59f, 6032
5489 path.lineTo(SkBits2Float(0x45b53400), SkBits2Float(0x45bc7f00)); // 5798.5f, 6031.88f
5490 path.lineTo(SkBits2Float(0x45b53349), SkBits2Float(0x45bc7df9)); // 5798.41f, 6031.75f
5491 path.lineTo(SkBits2Float(0x45b53294), SkBits2Float(0x45bc7cf0)); // 5798.32f, 6031.62f
5492 path.lineTo(SkBits2Float(0x45b531e2), SkBits2Float(0x45bc7be3)); // 5798.24f, 6031.49f
5493 path.lineTo(SkBits2Float(0x45b53133), SkBits2Float(0x45bc7ad3)); // 5798.15f, 6031.35f
5494 path.lineTo(SkBits2Float(0x45b53086), SkBits2Float(0x45bc79c1)); // 5798.07f, 6031.22f
5495 path.lineTo(SkBits2Float(0x45b52fdc), SkBits2Float(0x45bc78ab)); // 5797.98f, 6031.08f
5496 path.lineTo(SkBits2Float(0x45b52f35), SkBits2Float(0x45bc7793)); // 5797.9f, 6030.95f
5497 path.lineTo(SkBits2Float(0x45b52e90), SkBits2Float(0x45bc7678)); // 5797.82f, 6030.81f
5498 path.lineTo(SkBits2Float(0x45b52def), SkBits2Float(0x45bc755a)); // 5797.74f, 6030.67f
5499 path.lineTo(SkBits2Float(0x45b52d50), SkBits2Float(0x45bc7439)); // 5797.66f, 6030.53f
5500 path.lineTo(SkBits2Float(0x45b52cb4), SkBits2Float(0x45bc7316)); // 5797.59f, 6030.39f
5501 path.lineTo(SkBits2Float(0x45b52c1b), SkBits2Float(0x45bc71f0)); // 5797.51f, 6030.24f
5502 path.lineTo(SkBits2Float(0x45b52b86), SkBits2Float(0x45bc70c7)); // 5797.44f, 6030.1f
5503 path.lineTo(SkBits2Float(0x45b52af3), SkBits2Float(0x45bc6f9c)); // 5797.37f, 6029.95f
5504 path.lineTo(SkBits2Float(0x45b52a63), SkBits2Float(0x45bc6e6e)); // 5797.3f, 6029.8f
5505 path.lineTo(SkBits2Float(0x45b529d7), SkBits2Float(0x45bc6d3e)); // 5797.23f, 6029.66f
5506 path.lineTo(SkBits2Float(0x45b5294e), SkBits2Float(0x45bc6c0b)); // 5797.16f, 6029.51f
5507 path.lineTo(SkBits2Float(0x45b528c8), SkBits2Float(0x45bc6ad6)); // 5797.1f, 6029.35f
5508 path.lineTo(SkBits2Float(0x45b52846), SkBits2Float(0x45bc699e)); // 5797.03f, 6029.2f
5509 path.lineTo(SkBits2Float(0x45b527c7), SkBits2Float(0x45bc6864)); // 5796.97f, 6029.05f
5510 path.lineTo(SkBits2Float(0x45b5274b), SkBits2Float(0x45bc6728)); // 5796.91f, 6028.89f
5511 path.lineTo(SkBits2Float(0x45b526d3), SkBits2Float(0x45bc65e9)); // 5796.85f, 6028.74f
5512 path.lineTo(SkBits2Float(0x45b5265e), SkBits2Float(0x45bc64a8)); // 5796.8f, 6028.58f
5513 path.lineTo(SkBits2Float(0x45b52600), SkBits2Float(0x45bc639b)); // 5796.75f, 6028.45f
5514 path.lineTo(SkBits2Float(0x45b52600), SkBits2Float(0x45bab032)); // 5796.75f, 5974.02f
5515 path.lineTo(SkBits2Float(0x45b52611), SkBits2Float(0x45baaffd)); // 5796.76f, 5974
5516 path.lineTo(SkBits2Float(0x45b52687), SkBits2Float(0x45baae9d)); // 5796.82f, 5973.83f
5517 path.lineTo(SkBits2Float(0x45b52700), SkBits2Float(0x45baad40)); // 5796.88f, 5973.66f
5518 path.lineTo(SkBits2Float(0x45b5277d), SkBits2Float(0x45baabe7)); // 5796.94f, 5973.49f
5519 path.lineTo(SkBits2Float(0x45b527fe), SkBits2Float(0x45baaa91)); // 5797, 5973.32f
5520 path.lineTo(SkBits2Float(0x45b52883), SkBits2Float(0x45baa93f)); // 5797.06f, 5973.16f
5521 path.lineTo(SkBits2Float(0x45b5290b), SkBits2Float(0x45baa7f1)); // 5797.13f, 5972.99f
5522 path.lineTo(SkBits2Float(0x45b52998), SkBits2Float(0x45baa6a6)); // 5797.2f, 5972.83f
5523 path.lineTo(SkBits2Float(0x45b52a28), SkBits2Float(0x45baa55f)); // 5797.27f, 5972.67f
5524 path.lineTo(SkBits2Float(0x45b52abb), SkBits2Float(0x45baa41c)); // 5797.34f, 5972.51f
5525 path.lineTo(SkBits2Float(0x45b52b52), SkBits2Float(0x45baa2dc)); // 5797.42f, 5972.36f
5526 path.lineTo(SkBits2Float(0x45b52bed), SkBits2Float(0x45baa1a0)); // 5797.49f, 5972.2f
5527 path.lineTo(SkBits2Float(0x45b52c8c), SkBits2Float(0x45baa068)); // 5797.57f, 5972.05f
5528 path.lineTo(SkBits2Float(0x45b52d2e), SkBits2Float(0x45ba9f34)); // 5797.65f, 5971.9f
5529 path.lineTo(SkBits2Float(0x45b52dd3), SkBits2Float(0x45ba9e04)); // 5797.73f, 5971.75f
5530 path.lineTo(SkBits2Float(0x45b52e7c), SkBits2Float(0x45ba9cd8)); // 5797.81f, 5971.61f
5531 path.lineTo(SkBits2Float(0x45b52f28), SkBits2Float(0x45ba9baf)); // 5797.89f, 5971.46f
5532 path.lineTo(SkBits2Float(0x45b52fd8), SkBits2Float(0x45ba9a8b)); // 5797.98f, 5971.32f
5533 path.lineTo(SkBits2Float(0x45b5308b), SkBits2Float(0x45ba996b)); // 5798.07f, 5971.18f
5534 path.lineTo(SkBits2Float(0x45b53141), SkBits2Float(0x45ba984f)); // 5798.16f, 5971.04f
5535 path.lineTo(SkBits2Float(0x45b531fa), SkBits2Float(0x45ba9736)); // 5798.25f, 5970.9f
5536 path.lineTo(SkBits2Float(0x45b532b7), SkBits2Float(0x45ba9623)); // 5798.34f, 5970.77f
5537 path.lineTo(SkBits2Float(0x45b53377), SkBits2Float(0x45ba9513)); // 5798.43f, 5970.63f
5538 path.lineTo(SkBits2Float(0x45b5343a), SkBits2Float(0x45ba9407)); // 5798.53f, 5970.5f
5539 path.lineTo(SkBits2Float(0x45b53500), SkBits2Float(0x45ba9300)); // 5798.63f, 5970.38f
5540 path.lineTo(SkBits2Float(0x45b535c9), SkBits2Float(0x45ba91fd)); // 5798.72f, 5970.25f
5541 path.lineTo(SkBits2Float(0x45b53695), SkBits2Float(0x45ba90fe)); // 5798.82f, 5970.12f
5542 path.lineTo(SkBits2Float(0x45b53765), SkBits2Float(0x45ba9004)); // 5798.92f, 5970
5543 path.lineTo(SkBits2Float(0x45b53837), SkBits2Float(0x45ba8f0e)); // 5799.03f, 5969.88f
5544 path.lineTo(SkBits2Float(0x45b5390c), SkBits2Float(0x45ba8e1d)); // 5799.13f, 5969.76f
5545 path.lineTo(SkBits2Float(0x45b539e4), SkBits2Float(0x45ba8d30)); // 5799.24f, 5969.65f
5546 path.lineTo(SkBits2Float(0x45b53abf), SkBits2Float(0x45ba8c48)); // 5799.34f, 5969.54f
5547 path.lineTo(SkBits2Float(0x45b53b9d), SkBits2Float(0x45ba8b64)); // 5799.45f, 5969.42f
5548 path.lineTo(SkBits2Float(0x45b53c7d), SkBits2Float(0x45ba8a85)); // 5799.56f, 5969.31f
5549 path.lineTo(SkBits2Float(0x45b53d60), SkBits2Float(0x45ba89aa)); // 5799.67f, 5969.21f
5550 path.lineTo(SkBits2Float(0x45b53e46), SkBits2Float(0x45ba88d4)); // 5799.78f, 5969.1f
5551 path.lineTo(SkBits2Float(0x45b53f2f), SkBits2Float(0x45ba8803)); // 5799.9f, 5969
5552 path.lineTo(SkBits2Float(0x45b5401a), SkBits2Float(0x45ba8736)); // 5800.01f, 5968.9f
5553 path.lineTo(SkBits2Float(0x45b54108), SkBits2Float(0x45ba866f)); // 5800.13f, 5968.8f
5554 path.lineTo(SkBits2Float(0x45b541f8), SkBits2Float(0x45ba85ac)); // 5800.25f, 5968.71f
5555 path.lineTo(SkBits2Float(0x45b542eb), SkBits2Float(0x45ba84ee)); // 5800.36f, 5968.62f
5556 path.lineTo(SkBits2Float(0x45b543e0), SkBits2Float(0x45ba8435)); // 5800.48f, 5968.53f
5557 path.lineTo(SkBits2Float(0x45b544d8), SkBits2Float(0x45ba8380)); // 5800.61f, 5968.44f
5558 path.lineTo(SkBits2Float(0x45b545d2), SkBits2Float(0x45ba82d1)); // 5800.73f, 5968.35f
5559 path.lineTo(SkBits2Float(0x45b546cf), SkBits2Float(0x45ba8227)); // 5800.85f, 5968.27f
5560 path.lineTo(SkBits2Float(0x45b547ce), SkBits2Float(0x45ba8182)); // 5800.98f, 5968.19f
5561 path.lineTo(SkBits2Float(0x45b548cf), SkBits2Float(0x45ba80e2)); // 5801.1f, 5968.11f
5562 path.lineTo(SkBits2Float(0x45b549d2), SkBits2Float(0x45ba8047)); // 5801.23f, 5968.03f
5563 path.lineTo(SkBits2Float(0x45b54ad8), SkBits2Float(0x45ba7fb1)); // 5801.36f, 5967.96f
5564 path.lineTo(SkBits2Float(0x45b54be0), SkBits2Float(0x45ba7f20)); // 5801.48f, 5967.89f
5565 path.lineTo(SkBits2Float(0x45b54cea), SkBits2Float(0x45ba7e95)); // 5801.61f, 5967.82f
5566 path.lineTo(SkBits2Float(0x45b54df6), SkBits2Float(0x45ba7e0e)); // 5801.75f, 5967.76f
5567 path.lineTo(SkBits2Float(0x45b54f04), SkBits2Float(0x45ba7d8d)); // 5801.88f, 5967.69f
5568 path.lineTo(SkBits2Float(0x45b55015), SkBits2Float(0x45ba7d12)); // 5802.01f, 5967.63f
5569 path.lineTo(SkBits2Float(0x45b55127), SkBits2Float(0x45ba7c9c)); // 5802.14f, 5967.58f
5570 path.lineTo(SkBits2Float(0x45b551b5), SkBits2Float(0x45ba7c62)); // 5802.21f, 5967.55f
5571 path.lineTo(SkBits2Float(0x45c7b29a), SkBits2Float(0x45ba7c62)); // 6390.33f, 5967.55f
5572 path.lineTo(SkBits2Float(0x45c7b2f2), SkBits2Float(0x45ba7c8b)); // 6390.37f, 5967.57f
5573 path.lineTo(SkBits2Float(0x45c7b3dd), SkBits2Float(0x45ba7cff)); // 6390.48f, 5967.62f
5574 path.lineTo(SkBits2Float(0x45c7b4c7), SkBits2Float(0x45ba7d78)); // 6390.6f, 5967.68f
5575 path.lineTo(SkBits2Float(0x45c7b5b1), SkBits2Float(0x45ba7df5)); // 6390.71f, 5967.74f
5576 path.lineTo(SkBits2Float(0x45c7b699), SkBits2Float(0x45ba7e78)); // 6390.82f, 5967.81f
5577 path.lineTo(SkBits2Float(0x45c7b780), SkBits2Float(0x45ba7f00)); // 6390.94f, 5967.88f
5578 path.lineTo(SkBits2Float(0x45c7b866), SkBits2Float(0x45ba7f8d)); // 6391.05f, 5967.94f
5579 path.lineTo(SkBits2Float(0x45c7b94a), SkBits2Float(0x45ba801e)); // 6391.16f, 5968.01f
5580 path.lineTo(SkBits2Float(0x45c7ba2d), SkBits2Float(0x45ba80b5)); // 6391.27f, 5968.09f
5581 path.lineTo(SkBits2Float(0x45c7bb0f), SkBits2Float(0x45ba8150)); // 6391.38f, 5968.16f
5582 path.lineTo(SkBits2Float(0x45c7bbf0), SkBits2Float(0x45ba81f0)); // 6391.49f, 5968.24f
5583 path.lineTo(SkBits2Float(0x45c7bccf), SkBits2Float(0x45ba8294)); // 6391.6f, 5968.32f
5584 path.lineTo(SkBits2Float(0x45c7bdac), SkBits2Float(0x45ba833d)); // 6391.71f, 5968.4f
5585 path.lineTo(SkBits2Float(0x45c7be88), SkBits2Float(0x45ba83eb)); // 6391.82f, 5968.49f
5586 path.lineTo(SkBits2Float(0x45c7bf62), SkBits2Float(0x45ba849d)); // 6391.92f, 5968.58f
5587 path.lineTo(SkBits2Float(0x45c7c03a), SkBits2Float(0x45ba8554)); // 6392.03f, 5968.67f
5588 path.lineTo(SkBits2Float(0x45c7c111), SkBits2Float(0x45ba860f)); // 6392.13f, 5968.76f
5589 path.lineTo(SkBits2Float(0x45c7c1e6), SkBits2Float(0x45ba86cf)); // 6392.24f, 5968.85f
5590 path.lineTo(SkBits2Float(0x45c7c2b9), SkBits2Float(0x45ba8792)); // 6392.34f, 5968.95f
5591 path.lineTo(SkBits2Float(0x45c7c38b), SkBits2Float(0x45ba885b)); // 6392.44f, 5969.04f
5592 path.lineTo(SkBits2Float(0x45c7c45a), SkBits2Float(0x45ba8927)); // 6392.54f, 5969.14f
5593 path.lineTo(SkBits2Float(0x45c7c528), SkBits2Float(0x45ba89f7)); // 6392.64f, 5969.25f
5594 path.lineTo(SkBits2Float(0x45c7c5f3), SkBits2Float(0x45ba8acc)); // 6392.74f, 5969.35f
5595 path.lineTo(SkBits2Float(0x45c7c6bc), SkBits2Float(0x45ba8ba5)); // 6392.84f, 5969.46f
5596 path.lineTo(SkBits2Float(0x45c7c784), SkBits2Float(0x45ba8c82)); // 6392.94f, 5969.56f
5597 path.lineTo(SkBits2Float(0x45c7c849), SkBits2Float(0x45ba8d62)); // 6393.04f, 5969.67f
5598 path.lineTo(SkBits2Float(0x45c7c90c), SkBits2Float(0x45ba8e47)); // 6393.13f, 5969.78f
5599 path.lineTo(SkBits2Float(0x45c7c9cc), SkBits2Float(0x45ba8f30)); // 6393.22f, 5969.9f
5600 path.lineTo(SkBits2Float(0x45c7ca8b), SkBits2Float(0x45ba901c)); // 6393.32f, 5970.01f
5601 path.lineTo(SkBits2Float(0x45c7cb46), SkBits2Float(0x45ba910c)); // 6393.41f, 5970.13f
5602 path.lineTo(SkBits2Float(0x45c7cc00), SkBits2Float(0x45ba9200)); // 6393.5f, 5970.25f
5603 path.lineTo(SkBits2Float(0x45c7ccb7), SkBits2Float(0x45ba92f8)); // 6393.59f, 5970.37f
5604 path.lineTo(SkBits2Float(0x45c7cd6c), SkBits2Float(0x45ba93f3)); // 6393.68f, 5970.49f
5605 path.lineTo(SkBits2Float(0x45c7ce1e), SkBits2Float(0x45ba94f2)); // 6393.76f, 5970.62f
5606 path.lineTo(SkBits2Float(0x45c7cecd), SkBits2Float(0x45ba95f4)); // 6393.85f, 5970.74f
5607 path.lineTo(SkBits2Float(0x45c7cf7a), SkBits2Float(0x45ba96fa)); // 6393.93f, 5970.87f
5608 path.lineTo(SkBits2Float(0x45c7d024), SkBits2Float(0x45ba9803)); // 6394.02f, 5971
5609 path.lineTo(SkBits2Float(0x45c7d0cb), SkBits2Float(0x45ba9910)); // 6394.1f, 5971.13f
5610 path.lineTo(SkBits2Float(0x45c7d170), SkBits2Float(0x45ba9a20)); // 6394.18f, 5971.27f
5611 path.lineTo(SkBits2Float(0x45c7d211), SkBits2Float(0x45ba9b33)); // 6394.26f, 5971.4f
5612 path.lineTo(SkBits2Float(0x45c7d2b0), SkBits2Float(0x45ba9c4a)); // 6394.34f, 5971.54f
5613 path.lineTo(SkBits2Float(0x45c7d34c), SkBits2Float(0x45ba9d63)); // 6394.41f, 5971.67f
5614 path.lineTo(SkBits2Float(0x45c7d3e5), SkBits2Float(0x45ba9e80)); // 6394.49f, 5971.81f
5615 path.lineTo(SkBits2Float(0x45c7d47a), SkBits2Float(0x45ba9fa0)); // 6394.56f, 5971.95f
5616 path.lineTo(SkBits2Float(0x45c7d50d), SkBits2Float(0x45baa0c3)); // 6394.63f, 5972.1f
5617 path.lineTo(SkBits2Float(0x45c7d59d), SkBits2Float(0x45baa1e9)); // 6394.7f, 5972.24f
5618 path.lineTo(SkBits2Float(0x45c7d629), SkBits2Float(0x45baa312)); // 6394.77f, 5972.38f
5619 path.lineTo(SkBits2Float(0x45c7d6b2), SkBits2Float(0x45baa43e)); // 6394.84f, 5972.53f
5620 path.lineTo(SkBits2Float(0x45c7d738), SkBits2Float(0x45baa56d)); // 6394.9f, 5972.68f
5621 path.lineTo(SkBits2Float(0x45c7d7ba), SkBits2Float(0x45baa69f)); // 6394.97f, 5972.83f
5622 path.lineTo(SkBits2Float(0x45c7d839), SkBits2Float(0x45baa7d3)); // 6395.03f, 5972.98f
5623 path.lineTo(SkBits2Float(0x45c7d8b5), SkBits2Float(0x45baa90a)); // 6395.09f, 5973.13f
5624 path.lineTo(SkBits2Float(0x45c7d92d), SkBits2Float(0x45baaa44)); // 6395.15f, 5973.28f
5625 path.lineTo(SkBits2Float(0x45c7d9a2), SkBits2Float(0x45baab80)); // 6395.2f, 5973.44f
5626 path.lineTo(SkBits2Float(0x45c7da13), SkBits2Float(0x45baacbf)); // 6395.26f, 5973.59f
5627 path.lineTo(SkBits2Float(0x45c7da80), SkBits2Float(0x45baae00)); // 6395.31f, 5973.75f
5628 path.lineTo(SkBits2Float(0x45c7daea), SkBits2Float(0x45baaf44)); // 6395.36f, 5973.91f
5629 path.lineTo(SkBits2Float(0x45c7db50), SkBits2Float(0x45bab08a)); // 6395.41f, 5974.07f
5630 path.lineTo(SkBits2Float(0x45c7dbb2), SkBits2Float(0x45bab1d3)); // 6395.46f, 5974.23f
5631 path.lineTo(SkBits2Float(0x45c7dc10), SkBits2Float(0x45bab31d)); // 6395.51f, 5974.39f
5632 path.lineTo(SkBits2Float(0x45c7dc6a), SkBits2Float(0x45bab46a)); // 6395.55f, 5974.55f
5633 path.lineTo(SkBits2Float(0x45c7dc6b), SkBits2Float(0x45bc5fbe)); // 6395.55f, 6027.97f
5634 path.lineTo(SkBits2Float(0x45c7dc10), SkBits2Float(0x45bc60e7)); // 6395.51f, 6028.11f
5635 path.lineTo(SkBits2Float(0x45c7dbb2), SkBits2Float(0x45bc620f)); // 6395.46f, 6028.26f
5636 path.lineTo(SkBits2Float(0x45c7db50), SkBits2Float(0x45bc6336)); // 6395.41f, 6028.4f
5637 path.lineTo(SkBits2Float(0x45c7daea), SkBits2Float(0x45bc645c)); // 6395.36f, 6028.54f
5638 path.lineTo(SkBits2Float(0x45c7da80), SkBits2Float(0x45bc6580)); // 6395.31f, 6028.69f
5639 path.lineTo(SkBits2Float(0x45c7da13), SkBits2Float(0x45bc66a3)); // 6395.26f, 6028.83f
5640 path.lineTo(SkBits2Float(0x45c7d9a2), SkBits2Float(0x45bc67c5)); // 6395.2f, 6028.97f
5641 path.lineTo(SkBits2Float(0x45c7d92d), SkBits2Float(0x45bc68e6)); // 6395.15f, 6029.11f
5642 path.lineTo(SkBits2Float(0x45c7d8b5), SkBits2Float(0x45bc6a05)); // 6395.09f, 6029.25f
5643 path.lineTo(SkBits2Float(0x45c7d839), SkBits2Float(0x45bc6b23)); // 6395.03f, 6029.39f
5644 path.lineTo(SkBits2Float(0x45c7d7ba), SkBits2Float(0x45bc6c3f)); // 6394.97f, 6029.53f
5645 path.lineTo(SkBits2Float(0x45c7d738), SkBits2Float(0x45bc6d5a)); // 6394.9f, 6029.67f
5646 path.lineTo(SkBits2Float(0x45c7d6b2), SkBits2Float(0x45bc6e73)); // 6394.84f, 6029.81f
5647 path.lineTo(SkBits2Float(0x45c7d629), SkBits2Float(0x45bc6f8b)); // 6394.77f, 6029.94f
5648 path.lineTo(SkBits2Float(0x45c7d59d), SkBits2Float(0x45bc70a1)); // 6394.7f, 6030.08f
5649 path.lineTo(SkBits2Float(0x45c7d50d), SkBits2Float(0x45bc71b5)); // 6394.63f, 6030.21f
5650 path.lineTo(SkBits2Float(0x45c7d47a), SkBits2Float(0x45bc72c7)); // 6394.56f, 6030.35f
5651 path.lineTo(SkBits2Float(0x45c7d3e5), SkBits2Float(0x45bc73d8)); // 6394.49f, 6030.48f
5652 path.lineTo(SkBits2Float(0x45c7d34c), SkBits2Float(0x45bc74e7)); // 6394.41f, 6030.61f
5653 path.lineTo(SkBits2Float(0x45c7d2b0), SkBits2Float(0x45bc75f4)); // 6394.34f, 6030.74f
5654 path.lineTo(SkBits2Float(0x45c7d211), SkBits2Float(0x45bc76ff)); // 6394.26f, 6030.87f
5655 path.lineTo(SkBits2Float(0x45c7d170), SkBits2Float(0x45bc7807)); // 6394.18f, 6031
5656 path.lineTo(SkBits2Float(0x45c7d0cb), SkBits2Float(0x45bc790e)); // 6394.1f, 6031.13f
5657 path.lineTo(SkBits2Float(0x45c7d024), SkBits2Float(0x45bc7a13)); // 6394.02f, 6031.26f
5658 path.lineTo(SkBits2Float(0x45c7cf7a), SkBits2Float(0x45bc7b16)); // 6393.93f, 6031.39f
5659 path.lineTo(SkBits2Float(0x45c7cecd), SkBits2Float(0x45bc7c16)); // 6393.85f, 6031.51f
5660 path.lineTo(SkBits2Float(0x45c7ce1e), SkBits2Float(0x45bc7d14)); // 6393.76f, 6031.63f
5661 path.lineTo(SkBits2Float(0x45c7cd6c), SkBits2Float(0x45bc7e10)); // 6393.68f, 6031.76f
5662 path.lineTo(SkBits2Float(0x45c7ccb7), SkBits2Float(0x45bc7f09)); // 6393.59f, 6031.88f
5663 path.lineTo(SkBits2Float(0x45c7cc00), SkBits2Float(0x45bc8000)); // 6393.5f, 6032
5664 path.lineTo(SkBits2Float(0x45c7cb46), SkBits2Float(0x45bc80f5)); // 6393.41f, 6032.12f
5665 path.lineTo(SkBits2Float(0x45c7ca8b), SkBits2Float(0x45bc81e7)); // 6393.32f, 6032.24f
5666 path.lineTo(SkBits2Float(0x45c7c9cc), SkBits2Float(0x45bc82d6)); // 6393.22f, 6032.35f
5667 path.lineTo(SkBits2Float(0x45c7c90c), SkBits2Float(0x45bc83c3)); // 6393.13f, 6032.47f
5668 path.lineTo(SkBits2Float(0x45c7c849), SkBits2Float(0x45bc84ad)); // 6393.04f, 6032.58f
5669 path.lineTo(SkBits2Float(0x45c7c784), SkBits2Float(0x45bc8595)); // 6392.94f, 6032.7f
5670 path.lineTo(SkBits2Float(0x45c7c6bc), SkBits2Float(0x45bc8679)); // 6392.84f, 6032.81f
5671 path.lineTo(SkBits2Float(0x45c7c5f3), SkBits2Float(0x45bc875b)); // 6392.74f, 6032.92f
5672 path.lineTo(SkBits2Float(0x45c7c528), SkBits2Float(0x45bc883a)); // 6392.64f, 6033.03f
5673 path.lineTo(SkBits2Float(0x45c7c45a), SkBits2Float(0x45bc8917)); // 6392.54f, 6033.14f
5674 path.lineTo(SkBits2Float(0x45c7c38b), SkBits2Float(0x45bc89f0)); // 6392.44f, 6033.24f
5675 path.lineTo(SkBits2Float(0x45c7c2b9), SkBits2Float(0x45bc8ac6)); // 6392.34f, 6033.35f
5676 path.lineTo(SkBits2Float(0x45c7c1e6), SkBits2Float(0x45bc8b99)); // 6392.24f, 6033.45f
5677 path.lineTo(SkBits2Float(0x45c7c111), SkBits2Float(0x45bc8c69)); // 6392.13f, 6033.55f
5678 path.lineTo(SkBits2Float(0x45c7c03a), SkBits2Float(0x45bc8d36)); // 6392.03f, 6033.65f
5679 path.lineTo(SkBits2Float(0x45c7bf62), SkBits2Float(0x45bc8e00)); // 6391.92f, 6033.75f
5680 path.lineTo(SkBits2Float(0x45c7be88), SkBits2Float(0x45bc8ec7)); // 6391.82f, 6033.85f
5681 path.lineTo(SkBits2Float(0x45c7bdac), SkBits2Float(0x45bc8f8a)); // 6391.71f, 6033.94f
5682 path.lineTo(SkBits2Float(0x45c7bccf), SkBits2Float(0x45bc904a)); // 6391.6f, 6034.04f
5683 path.lineTo(SkBits2Float(0x45c7bbf0), SkBits2Float(0x45bc9106)); // 6391.49f, 6034.13f
5684 path.lineTo(SkBits2Float(0x45c7bb0f), SkBits2Float(0x45bc91bf)); // 6391.38f, 6034.22f
5685 path.lineTo(SkBits2Float(0x45c7ba2d), SkBits2Float(0x45bc9275)); // 6391.27f, 6034.31f
5686 path.lineTo(SkBits2Float(0x45c7b94a), SkBits2Float(0x45bc9327)); // 6391.16f, 6034.39f
5687 path.lineTo(SkBits2Float(0x45c7b866), SkBits2Float(0x45bc93d5)); // 6391.05f, 6034.48f
5688 path.lineTo(SkBits2Float(0x45c7b780), SkBits2Float(0x45bc9480)); // 6390.94f, 6034.56f
5689 path.lineTo(SkBits2Float(0x45c7b699), SkBits2Float(0x45bc9527)); // 6390.82f, 6034.64f
5690 path.lineTo(SkBits2Float(0x45c7b5b1), SkBits2Float(0x45bc95ca)); // 6390.71f, 6034.72f
5691 path.lineTo(SkBits2Float(0x45c7b4c8), SkBits2Float(0x45bc966a)); // 6390.6f, 6034.8f
5692 path.lineTo(SkBits2Float(0x45c7b3dd), SkBits2Float(0x45bc9706)); // 6390.48f, 6034.88f
5693 path.lineTo(SkBits2Float(0x45c7b2f2), SkBits2Float(0x45bc979e)); // 6390.37f, 6034.95f
5694 path.lineTo(SkBits2Float(0x45c7b205), SkBits2Float(0x45bc9832)); // 6390.25f, 6035.02f
5695 path.lineTo(SkBits2Float(0x45c7b118), SkBits2Float(0x45bc98c2)); // 6390.14f, 6035.09f
5696 path.lineTo(SkBits2Float(0x45c7b02a), SkBits2Float(0x45bc994e)); // 6390.02f, 6035.16f
5697 path.lineTo(SkBits2Float(0x45c7af3b), SkBits2Float(0x45bc99d5)); // 6389.9f, 6035.23f
5698 path.lineTo(SkBits2Float(0x45c7ae4b), SkBits2Float(0x45bc9a59)); // 6389.79f, 6035.29f
5699 path.lineTo(SkBits2Float(0x45c7ad5a), SkBits2Float(0x45bc9ad9)); // 6389.67f, 6035.36f
5700 path.lineTo(SkBits2Float(0x45c7ac69), SkBits2Float(0x45bc9b54)); // 6389.55f, 6035.42f
5701 path.lineTo(SkBits2Float(0x45c7ab77), SkBits2Float(0x45bc9bcb)); // 6389.43f, 6035.47f
5702 path.lineTo(SkBits2Float(0x45c7aa84), SkBits2Float(0x45bc9c3e)); // 6389.31f, 6035.53f
5703 path.lineTo(SkBits2Float(0x45c7a991), SkBits2Float(0x45bc9cac)); // 6389.2f, 6035.58f
5704 path.lineTo(SkBits2Float(0x45c7a89e), SkBits2Float(0x45bc9d16)); // 6389.08f, 6035.64f
5705 path.lineTo(SkBits2Float(0x45c7a7aa), SkBits2Float(0x45bc9d7b)); // 6388.96f, 6035.69f
5706 path.lineTo(SkBits2Float(0x45c7a6b6), SkBits2Float(0x45bc9ddc)); // 6388.84f, 6035.73f
5707 path.lineTo(SkBits2Float(0x45c7a5c1), SkBits2Float(0x45bc9e39)); // 6388.72f, 6035.78f
5708 path.lineTo(SkBits2Float(0x45c7a4cc), SkBits2Float(0x45bc9e90)); // 6388.6f, 6035.82f
5709 path.lineTo(SkBits2Float(0x45c7a3d7), SkBits2Float(0x45bc9ee3)); // 6388.48f, 6035.86f
5710 path.lineTo(SkBits2Float(0x45c7a2e1), SkBits2Float(0x45bc9f32)); // 6388.36f, 6035.9f
5711 path.lineTo(SkBits2Float(0x45c7a1eb), SkBits2Float(0x45bc9f7b)); // 6388.24f, 6035.94f
5712 path.lineTo(SkBits2Float(0x45c7a0f6), SkBits2Float(0x45bc9fc0)); // 6388.12f, 6035.97f
5713 path.lineTo(SkBits2Float(0x45c7a000), SkBits2Float(0x45bca000)); // 6388, 6036
5714 path.lineTo(SkBits2Float(0x45b56000), SkBits2Float(0x45bca000)); // 5804, 6036
5715 path.close();
5716
5717 SkPath path2;
Mike Reed7d34dc72019-11-26 12:17:17 -05005718 path2.setFillType(SkPathFillType::kWinding);
Cary Clark22582502017-12-13 14:56:53 -05005719 path2.moveTo(SkBits2Float(0x45b52600), SkBits2Float(0x45ba7c62)); // 5796.75f, 5967.55f
5720 path2.lineTo(SkBits2Float(0x45c7dc6b), SkBits2Float(0x45ba7c62)); // 6395.55f, 5967.55f
5721 path2.lineTo(SkBits2Float(0x45c7dc6b), SkBits2Float(0x45bca239)); // 6395.55f, 6036.28f
5722 path2.lineTo(SkBits2Float(0x45b52600), SkBits2Float(0x45bca239)); // 5796.75f, 6036.28f
5723 path2.lineTo(SkBits2Float(0x45b52600), SkBits2Float(0x45ba7c62)); // 5796.75f, 5967.55f
5724 path2.close();
5725
5726 SkPath result_path;
5727 testPathOp(reporter, path, path2, kIntersect_SkPathOp, filename);
5728}
Yuqian Li3154a532017-09-06 13:33:30 -04005729
Cary Clark3a4a3212018-06-06 15:22:08 -04005730static void halbug(skiatest::Reporter* reporter, const char* filename) {
5731 SkPath path, path2;
Mike Reed7d34dc72019-11-26 12:17:17 -05005732 path.setFillType(SkPathFillType::kEvenOdd);
Cary Clark3a4a3212018-06-06 15:22:08 -04005733 path.addRect(SkRect{278.653992f, 155.747406f, 580.15918f, 593.602051f});
Mike Reed7d34dc72019-11-26 12:17:17 -05005734 path2.setFillType(SkPathFillType::kWinding);
Cary Clark3a4a3212018-06-06 15:22:08 -04005735 path2.addRect(SkRect{278.657715f, 155.747314f, 580.238281f, 594.114014f});
5736 testPathOp(reporter, path, path2, kIntersect_SkPathOp, filename);
5737}
5738
Cary Clark1bb47df2018-06-18 08:53:00 -04005739static void testRect1_u(skiatest::Reporter* reporter, const char* filename) {
5740 SkPath path, pathB;
Mike Reed7d34dc72019-11-26 12:17:17 -05005741 path.setFillType(SkPathFillType::kWinding);
Cary Clark1bb47df2018-06-18 08:53:00 -04005742 path.moveTo(0, 0);
5743 path.lineTo(0, 60);
5744 path.lineTo(60, 60);
5745 path.lineTo(60, 0);
5746 path.close();
5747 path.moveTo(30, 20);
5748 path.lineTo(30, 50);
5749 path.lineTo(50, 50);
5750 path.lineTo(50, 20);
5751 path.close();
5752 path.moveTo(24, 20);
5753 path.lineTo(24, 30);
5754 path.lineTo(36, 30);
5755 path.lineTo(36, 20);
5756 path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05005757 pathB.setFillType(SkPathFillType::kWinding);
Cary Clark1bb47df2018-06-18 08:53:00 -04005758 testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
5759}
5760
Cary Clark1d314432018-07-10 10:57:54 -04005761static void filinmangust14(skiatest::Reporter* reporter, const char* filename) {
Cary Clark1d314432018-07-10 10:57:54 -04005762SkPath path, path1;
Mike Reed7d34dc72019-11-26 12:17:17 -05005763path.setFillType(SkPathFillType::kWinding);
Cary Clark1d314432018-07-10 10:57:54 -04005764 path.moveTo(SkBits2Float(0x440bc02c), SkBits2Float(0x4409c000)); // 559.003f, 551
5765 path.lineTo(SkBits2Float(0x440bc02c), SkBits2Float(0x440e8000)); // 559.003f, 570
5766 path.lineTo(SkBits2Float(0x440bbfda), SkBits2Float(0x440e8000)); // 558.998f, 570
5767 path.lineTo(SkBits2Float(0x440bbfda), SkBits2Float(0x4409c000)); // 558.998f, 551
5768 path.lineTo(SkBits2Float(0x440bc02c), SkBits2Float(0x4409c000)); // 559.003f, 551
5769 path.close();
5770path1 = path;
5771path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -05005772 path.setFillType(SkPathFillType::kWinding);
Cary Clark1d314432018-07-10 10:57:54 -04005773 path.moveTo(SkBits2Float(0x45582000), SkBits2Float(0x45be9805)); // 3458, 6099
5774 path.lineTo(SkBits2Float(0x4554b667), SkBits2Float(0x45be9805)); // 3403.4f, 6099
5775 path.lineTo(SkBits2Float(0x4554b667), SkBits2Float(0x45be97fb)); // 3403.4f, 6099
5776 path.lineTo(SkBits2Float(0x45582000), SkBits2Float(0x45be97fb)); // 3458, 6099
5777 path.lineTo(SkBits2Float(0x45582000), SkBits2Float(0x45be9805)); // 3458, 6099
5778 path.close();
5779 path.moveTo(SkBits2Float(0x43b60000), SkBits2Float(0x443dffd7)); // 364, 759.997f
5780 path.lineTo(SkBits2Float(0x4554b667), SkBits2Float(0x443dffd7)); // 3403.4f, 759.997f
5781 path.lineTo(SkBits2Float(0x4554b667), SkBits2Float(0x443e0029)); // 3403.4f, 760.003f
5782 path.lineTo(SkBits2Float(0x43b60000), SkBits2Float(0x443e0029)); // 364, 760.003f
5783 path.lineTo(SkBits2Float(0x43b60000), SkBits2Float(0x443dffd7)); // 364, 759.997f
5784 path.close();
5785 path.moveTo(SkBits2Float(0x4554b65d), SkBits2Float(0x45be9800)); // 3403.4f, 6099
5786 path.lineTo(SkBits2Float(0x4554b65d), SkBits2Float(0x443e0000)); // 3403.4f, 760
5787 path.lineTo(SkBits2Float(0x4554b671), SkBits2Float(0x443e0000)); // 3403.4f, 760
5788 path.lineTo(SkBits2Float(0x4554b671), SkBits2Float(0x45be9800)); // 3403.4f, 6099
5789 path.lineTo(SkBits2Float(0x4554b65d), SkBits2Float(0x45be9800)); // 3403.4f, 6099
5790 path.close();
5791 path.moveTo(SkBits2Float(0x449f4000), SkBits2Float(0x43bdffae)); // 1274, 379.997f
5792 path.lineTo(SkBits2Float(0x4554b667), SkBits2Float(0x43bdffae)); // 3403.4f, 379.997f
5793 path.lineTo(SkBits2Float(0x4554b667), SkBits2Float(0x43be0052)); // 3403.4f, 380.003f
5794 path.lineTo(SkBits2Float(0x449f4000), SkBits2Float(0x43be0052)); // 1274, 380.003f
5795 path.lineTo(SkBits2Float(0x449f4000), SkBits2Float(0x43bdffae)); // 1274, 379.997f
5796 path.close();
5797 path.moveTo(SkBits2Float(0x4554b65d), SkBits2Float(0x443e0000)); // 3403.4f, 760
5798 path.lineTo(SkBits2Float(0x4554b65d), SkBits2Float(0x43be0000)); // 3403.4f, 380
5799 path.lineTo(SkBits2Float(0x4554b671), SkBits2Float(0x43be0000)); // 3403.4f, 380
5800 path.lineTo(SkBits2Float(0x4554b671), SkBits2Float(0x443e0000)); // 3403.4f, 760
5801 path.lineTo(SkBits2Float(0x4554b65d), SkBits2Float(0x443e0000)); // 3403.4f, 760
5802 path.close();
5803 testPathOp(reporter, path1, path, kUnion_SkPathOp, filename);
5804}
5805
Cary Clark2587f412018-07-24 12:40:10 -04005806static void grshapearcs1(skiatest::Reporter* reporter, const char* filename) {
5807SkPath path, path1;
Mike Reed7d34dc72019-11-26 12:17:17 -05005808path.setFillType(SkPathFillType::kWinding);
Cary Clark2587f412018-07-24 12:40:10 -04005809path.moveTo(25.0098f, 23.1973f);
5810path.lineTo(25.5689f, 22.3682f);
5811path.conicTo(26.1281f, 21.5392f, 26.9572f, 22.0984f, 0.707107f);
5812path.conicTo(27.7862f, 22.6576f, 27.227f, 23.4866f, 0.707107f);
5813path.lineTo(26.6678f, 24.3156f);
5814path.conicTo(26.1086f, 25.1447f, 25.2796f, 24.5855f, 0.707107f);
5815path.conicTo(24.4506f, 24.0263f, 25.0098f, 23.1973f, 0.707107f);
5816path.close();
5817path.moveTo(26.6873f, 20.7101f);
5818path.lineTo(27.2465f, 19.8811f);
5819path.conicTo(27.8057f, 19.0521f, 28.6348f, 19.6113f, 0.707107f);
5820path.conicTo(29.4638f, 20.1704f, 28.9046f, 20.9995f, 0.707107f);
5821path.lineTo(28.3454f, 21.8285f);
5822path.conicTo(27.7862f, 22.6576f, 26.9572f, 22.0984f, 0.707107f);
5823path.conicTo(26.1281f, 21.5392f, 26.6873f, 20.7101f, 0.707107f);
5824path.close();
5825path.moveTo(28.3649f, 18.223f);
5826path.lineTo(28.9241f, 17.394f);
5827path.conicTo(29.4833f, 16.565f, 30.3123f, 17.1241f, 0.707107f);
5828path.conicTo(31.1414f, 17.6833f, 30.5822f, 18.5124f, 0.707107f);
5829path.lineTo(30.023f, 19.3414f);
5830path.conicTo(29.4638f, 20.1704f, 28.6348f, 19.6113f, 0.707107f);
5831path.conicTo(27.8057f, 19.0521f, 28.3649f, 18.223f, 0.707107f);
5832path.close();
5833path.moveTo(30.0425f, 15.7359f);
5834path.lineTo(30.6017f, 14.9069f);
5835path.conicTo(31.1609f, 14.0778f, 31.9899f, 14.637f, 0.707107f);
5836path.conicTo(32.8189f, 15.1962f, 32.2598f, 16.0253f, 0.707107f);
5837path.lineTo(31.7006f, 16.8543f);
5838path.conicTo(31.1414f, 17.6833f, 30.3123f, 17.1241f, 0.707107f);
5839path.conicTo(29.4833f, 16.565f, 30.0425f, 15.7359f, 0.707107f);
5840path.close();
5841path.moveTo(31.7201f, 13.2488f);
5842path.lineTo(32.2793f, 12.4198f);
5843path.conicTo(32.8385f, 11.5907f, 33.6675f, 12.1499f, 0.707107f);
5844path.conicTo(34.4965f, 12.7091f, 33.9373f, 13.5381f, 0.707107f);
5845path.lineTo(33.3781f, 14.3672f);
5846path.conicTo(32.8189f, 15.1962f, 31.9899f, 14.637f, 0.707107f);
5847path.conicTo(31.1609f, 14.0778f, 31.7201f, 13.2488f, 0.707107f);
5848path.close();
5849path.moveTo(33.3976f, 10.7617f);
5850path.lineTo(33.9568f, 9.93265f);
5851path.conicTo(34.516f, 9.10361f, 35.3451f, 9.6628f, 0.707107f);
5852path.conicTo(36.1741f, 10.222f, 35.6149f, 11.051f, 0.707107f);
5853path.lineTo(35.0557f, 11.8801f);
5854path.conicTo(34.4965f, 12.7091f, 33.6675f, 12.1499f, 0.707107f);
5855path.conicTo(32.8385f, 11.5907f, 33.3976f, 10.7617f, 0.707107f);
5856path.close();
5857path.moveTo(35.0752f, 8.27457f);
5858path.lineTo(35.6344f, 7.44554f);
5859path.conicTo(36.1936f, 6.6165f, 37.0226f, 7.17569f, 0.707107f);
5860path.conicTo(37.8517f, 7.73488f, 37.2925f, 8.56392f, 0.707107f);
5861path.lineTo(36.7333f, 9.39296f);
5862path.conicTo(36.1741f, 10.222f, 35.3451f, 9.6628f, 0.707107f);
5863path.conicTo(34.516f, 9.10361f, 35.0752f, 8.27457f, 0.707107f);
5864path.close();
5865path.moveTo(36.7528f, 5.78746f);
5866path.lineTo(37.312f, 4.95842f);
5867path.conicTo(37.8712f, 4.12939f, 38.7002f, 4.68858f, 0.707107f);
5868path.conicTo(39.5293f, 5.24777f, 38.9701f, 6.07681f, 0.707107f);
5869path.lineTo(38.4109f, 6.90585f);
5870path.conicTo(37.8517f, 7.73488f, 37.0226f, 7.17569f, 0.707107f);
5871path.conicTo(36.1936f, 6.6165f, 36.7528f, 5.78746f, 0.707107f);
5872path.close();
5873path.moveTo(39.9447f, 3.72429f);
5874path.quadTo(40.3524f, 4.01069f, 40.7489f, 4.31248f);
5875path.conicTo(41.5445f, 4.9182f, 40.9388f, 5.71387f, 0.707107f);
5876path.conicTo(40.3331f, 6.50955f, 39.5374f, 5.90383f, 0.707107f);
5877path.quadTo(39.1714f, 5.62521f, 38.7951f, 5.36088f);
5878path.conicTo(37.9768f, 4.78608f, 38.5516f, 3.96779f, 0.707107f);
5879path.conicTo(39.1264f, 3.14949f, 39.9447f, 3.72429f, 0.707107f);
5880path.close();
5881path.moveTo(42.3194f, 5.60826f);
5882path.quadTo(42.707f, 5.95446f, 43.0804f, 6.31583f);
5883path.conicTo(43.7991f, 7.01122f, 43.1037f, 7.72985f, 0.707107f);
5884path.conicTo(42.4083f, 8.44848f, 41.6896f, 7.75308f, 0.707107f);
5885path.quadTo(41.3448f, 7.41944f, 40.9871f, 7.09992f);
5886path.conicTo(40.2413f, 6.43379f, 40.9074f, 5.68796f, 0.707107f);
5887path.conicTo(41.5735f, 4.94212f, 42.3194f, 5.60826f, 0.707107f);
5888path.close();
5889path.moveTo(44.5406f, 7.84871f);
5890path.quadTo(44.8959f, 8.25352f, 45.2341f, 8.67266f);
5891path.conicTo(45.862f, 9.4509f, 45.0838f, 10.0789f, 0.707107f);
5892path.conicTo(44.3056f, 10.7068f, 43.6776f, 9.9286f, 0.707107f);
5893path.quadTo(43.3654f, 9.54174f, 43.0374f, 9.16805f);
5894path.conicTo(42.3778f, 8.41649f, 43.1293f, 7.75682f, 0.707107f);
5895path.conicTo(43.8809f, 7.09715f, 44.5406f, 7.84871f, 0.707107f);
5896path.close();
5897path.moveTo(46.528f, 10.4211f);
5898path.quadTo(46.815f, 10.8449f, 47.0851f, 11.2796f);
5899path.conicTo(47.6128f, 12.129f, 46.7633f, 12.6567f, 0.707107f);
5900path.conicTo(45.9139f, 13.1844f, 45.3862f, 12.335f, 0.707107f);
5901path.quadTo(45.1369f, 11.9337f, 44.872f, 11.5426f);
5902path.conicTo(44.3113f, 10.7146f, 45.1393f, 10.1538f, 0.707107f);
5903path.conicTo(45.9673f, 9.5931f, 46.528f, 10.4211f, 0.707107f);
5904path.close();
5905path.moveTo(48.1056f, 13.0782f);
5906path.quadTo(48.3449f, 13.542f, 48.5654f, 14.015f);
5907path.conicTo(48.9879f, 14.9213f, 48.0816f, 15.3438f, 0.707107f);
5908path.conicTo(47.1752f, 15.7663f, 46.7527f, 14.86f, 0.707107f);
5909path.quadTo(46.5492f, 14.4234f, 46.3283f, 13.9953f);
5910path.conicTo(45.8698f, 13.1066f, 46.7584f, 12.6481f, 0.707107f);
5911path.conicTo(47.6471f, 12.1895f, 48.1056f, 13.0782f, 0.707107f);
5912path.close();
5913path.moveTo(49.3755f, 15.9538f);
5914path.quadTo(49.5594f, 16.4493f, 49.7229f, 16.9516f);
5915path.conicTo(50.0325f, 17.9025f, 49.0816f, 18.2121f, 0.707107f);
5916path.conicTo(48.1307f, 18.5216f, 47.8212f, 17.5707f, 0.707107f);
5917path.quadTo(47.6702f, 17.1069f, 47.5005f, 16.6497f);
5918path.conicTo(47.1526f, 15.7122f, 48.0901f, 15.3642f, 0.707107f);
5919path.conicTo(49.0276f, 15.0163f, 49.3755f, 15.9538f, 0.707107f);
5920path.close();
5921path.moveTo(50.2964f, 18.9923f);
5922path.quadTo(50.4191f, 19.5089f, 50.5206f, 20.0302f);
5923path.conicTo(50.7117f, 21.0117f, 49.7302f, 21.2029f, 0.707107f);
5924path.conicTo(48.7486f, 21.394f, 48.5575f, 20.4125f, 0.707107f);
5925path.quadTo(48.4638f, 19.9313f, 48.3505f, 19.4544f);
5926path.conicTo(48.1194f, 18.4815f, 49.0924f, 18.2504f, 0.707107f);
5927path.conicTo(50.0653f, 18.0193f, 50.2964f, 18.9923f, 0.707107f);
5928path.close();
5929path.moveTo(50.8373f, 22.0956f);
5930path.quadTo(50.8955f, 22.6138f, 50.933f, 23.1341f);
5931path.conicTo(51.0047f, 24.1315f, 50.0073f, 24.2033f, 0.707107f);
5932path.conicTo(49.0099f, 24.275f, 48.9381f, 23.2776f, 0.707107f);
5933path.quadTo(48.9036f, 22.7975f, 48.8498f, 22.3191f);
5934path.conicTo(48.7381f, 21.3253f, 49.7318f, 21.2136f, 0.707107f);
5935path.conicTo(50.7255f, 21.1019f, 50.8373f, 22.0956f, 0.707107f);
5936path.close();
5937path.moveTo(50.9992f, 25.2099f);
5938path.quadTo(50.9949f, 25.7358f, 50.9694f, 26.2608f);
5939path.conicTo(50.9209f, 27.2596f, 49.9221f, 27.2111f, 0.707107f);
5940path.conicTo(48.9233f, 27.1626f, 48.9718f, 26.1638f, 0.707107f);
5941path.quadTo(48.9953f, 25.679f, 48.9992f, 25.1938f);
5942path.conicTo(49.0073f, 24.1938f, 50.0073f, 24.2019f, 0.707107f);
5943path.conicTo(51.0072f, 24.21f, 50.9992f, 25.2099f, 0.707107f);
5944path.close();
5945path.moveTo(50.7839f, 28.3454f);
5946path.quadTo(50.7172f, 28.8596f, 50.63f, 29.3708f);
5947path.conicTo(50.4619f, 30.3565f, 49.4761f, 30.1884f, 0.707107f);
5948path.conicTo(48.4903f, 30.0203f, 48.6584f, 29.0346f, 0.707107f);
5949path.quadTo(48.7389f, 28.5627f, 48.8005f, 28.088f);
5950path.conicTo(48.9292f, 27.0963f, 49.9209f, 27.225f, 0.707107f);
5951path.conicTo(50.9126f, 27.3537f, 50.7839f, 28.3454f, 0.707107f);
5952path.close();
5953path.moveTo(50.1906f, 31.437f);
5954path.quadTo(50.0558f, 31.9646f, 49.899f, 32.4861f);
5955path.conicTo(49.611f, 33.4438f, 48.6534f, 33.1558f, 0.707107f);
5956path.conicTo(47.6957f, 32.8679f, 47.9837f, 31.9103f, 0.707107f);
5957path.quadTo(48.1284f, 31.4289f, 48.2528f, 30.9418f);
5958path.conicTo(48.5004f, 29.9729f, 49.4693f, 30.2205f, 0.707107f);
5959path.conicTo(50.4382f, 30.4681f, 50.1906f, 31.437f, 0.707107f);
5960path.close();
5961path.moveTo(49.1978f, 34.5114f);
5962path.quadTo(49.0051f, 35.0016f, 48.7927f, 35.4837f);
5963path.conicTo(48.3895f, 36.3988f, 47.4744f, 35.9956f, 0.707107f);
5964path.conicTo(46.5593f, 35.5923f, 46.9625f, 34.6772f, 0.707107f);
5965path.quadTo(47.1586f, 34.2323f, 47.3364f, 33.7797f);
5966path.conicTo(47.7023f, 32.849f, 48.6329f, 33.2149f, 0.707107f);
5967path.conicTo(49.5636f, 33.5807f, 49.1978f, 34.5114f, 0.707107f);
5968path.close();
5969path.moveTo(47.8852f, 37.3397f);
5970path.quadTo(47.6449f, 37.7853f, 47.3876f, 38.2211f);
5971path.conicTo(46.879f, 39.0821f, 46.018f, 38.5736f, 0.707107f);
5972path.conicTo(45.1569f, 38.0651f, 45.6655f, 37.204f, 0.707107f);
5973path.quadTo(45.903f, 36.8018f, 46.1248f, 36.3906f);
5974path.conicTo(46.5993f, 35.5103f, 47.4796f, 35.9849f, 0.707107f);
5975path.conicTo(48.3598f, 36.4595f, 47.8852f, 37.3397f, 0.707107f);
5976path.close();
5977path.moveTo(46.3154f, 39.8881f);
5978path.quadTo(46.0303f, 40.2962f, 45.7299f, 40.693f);
5979path.conicTo(45.1264f, 41.4903f, 44.3291f, 40.8867f, 0.707107f);
5980path.conicTo(43.5318f, 40.2831f, 44.1353f, 39.4858f, 0.707107f);
5981path.quadTo(44.4126f, 39.1195f, 44.6757f, 38.7428f);
5982path.conicTo(45.2483f, 37.923f, 46.0682f, 38.4956f, 0.707107f);
5983path.conicTo(46.888f, 39.0682f, 46.3154f, 39.8881f, 0.707107f);
5984path.close();
5985path.moveTo(44.4398f, 42.2654f);
5986path.quadTo(44.095f, 42.6536f, 43.7349f, 43.0278f);
5987path.conicTo(43.0415f, 43.7484f, 42.321f, 43.055f, 0.707107f);
5988path.conicTo(41.6004f, 42.3616f, 42.2938f, 41.641f, 0.707107f);
5989path.quadTo(42.6261f, 41.2957f, 42.9444f, 40.9374f);
5990path.conicTo(43.6084f, 40.1897f, 44.3561f, 40.8537f, 0.707107f);
5991path.conicTo(45.1038f, 41.5177f, 44.4398f, 42.2654f, 0.707107f);
5992path.close();
5993path.moveTo(42.2075f, 44.4911f);
5994path.quadTo(41.804f, 44.8473f, 41.3862f, 45.1865f);
5995path.conicTo(40.6098f, 45.8167f, 39.9795f, 45.0403f, 0.707107f);
5996path.conicTo(39.3493f, 44.2639f, 40.1257f, 43.6336f, 0.707107f);
5997path.quadTo(40.5114f, 43.3205f, 40.8838f, 42.9918f);
5998path.conicTo(41.6335f, 42.3299f, 42.2953f, 43.0796f, 0.707107f);
5999path.conicTo(42.9572f, 43.8292f, 42.2075f, 44.4911f, 0.707107f);
6000path.close();
6001path.moveTo(39.6379f, 46.488f);
6002path.quadTo(39.2151f, 46.776f, 38.7814f, 47.0471f);
6003path.conicTo(37.9334f, 47.5771f, 37.4034f, 46.7292f, 0.707107f);
6004path.conicTo(36.8733f, 45.8812f, 37.7213f, 45.3511f, 0.707107f);
6005path.quadTo(38.1217f, 45.1009f, 38.5119f, 44.835f);
6006path.conicTo(39.3383f, 44.2721f, 39.9013f, 45.0985f, 0.707107f);
6007path.conicTo(40.4643f, 45.925f, 39.6379f, 46.488f, 0.707107f);
6008path.close();
6009path.moveTo(36.9864f, 48.0722f);
6010path.quadTo(36.5234f, 48.3127f, 36.0513f, 48.5344f);
6011path.conicTo(35.1461f, 48.9595f, 34.7211f, 48.0543f, 0.707107f);
6012path.conicTo(34.296f, 47.1491f, 35.2012f, 46.7241f, 0.707107f);
6013path.quadTo(35.6371f, 46.5194f, 36.0644f, 46.2974f);
6014path.conicTo(36.9518f, 45.8364f, 37.4128f, 46.7238f, 0.707107f);
6015path.conicTo(37.8738f, 47.6112f, 36.9864f, 48.0722f, 0.707107f);
6016path.close();
6017path.moveTo(34.1153f, 49.3498f);
6018path.quadTo(33.6206f, 49.535f, 33.1187f, 49.6999f);
6019path.conicTo(32.1687f, 50.0122f, 31.8565f, 49.0622f, 0.707107f);
6020path.conicTo(31.5442f, 48.1122f, 32.4942f, 47.7999f, 0.707107f);
6021path.quadTo(32.9575f, 47.6477f, 33.4141f, 47.4767f);
6022path.conicTo(34.3507f, 47.1261f, 34.7012f, 48.0627f, 0.707107f);
6023path.conicTo(35.0518f, 48.9992f, 34.1153f, 49.3498f, 0.707107f);
6024path.close();
6025path.moveTo(31.08f, 50.2791f);
6026path.quadTo(30.5637f, 50.4033f, 30.0427f, 50.5063f);
6027path.conicTo(29.0617f, 50.7002f, 28.8678f, 49.7192f, 0.707107f);
6028path.conicTo(28.6738f, 48.7382f, 29.6548f, 48.5443f, 0.707107f);
6029path.quadTo(30.1357f, 48.4492f, 30.6122f, 48.3346f);
6030path.conicTo(31.5845f, 48.1007f, 31.8184f, 49.073f, 0.707107f);
6031path.conicTo(32.0522f, 50.0453f, 31.08f, 50.2791f, 0.707107f);
6032path.close();
6033path.moveTo(27.9769f, 50.829f);
6034path.quadTo(27.4588f, 50.8887f, 26.9386f, 50.9276f);
6035path.conicTo(25.9414f, 51.0022f, 25.8668f, 50.005f, 0.707107f);
6036path.conicTo(25.7923f, 49.0078f, 26.7895f, 48.9332f, 0.707107f);
6037path.quadTo(27.2696f, 48.8973f, 27.7479f, 48.8422f);
6038path.conicTo(28.7413f, 48.7277f, 28.8558f, 49.7211f, 0.707107f);
6039path.conicTo(28.9703f, 50.7145f, 27.9769f, 50.829f, 0.707107f);
6040path.close();
6041path.moveTo(24.8625f, 50.9996f);
6042path.quadTo(24.3373f, 50.9969f, 23.8128f, 50.9729f);
6043path.conicTo(22.8138f, 50.9272f, 22.8595f, 49.9283f, 0.707107f);
6044path.conicTo(22.9051f, 48.9293f, 23.9041f, 48.975f, 0.707107f);
6045path.quadTo(24.3884f, 48.9971f, 24.8731f, 48.9997f);
6046path.conicTo(25.8731f, 49.005f, 25.8678f, 50.005f, 0.707107f);
6047path.conicTo(25.8624f, 51.0049f, 24.8625f, 50.9996f, 0.707107f);
6048path.close();
6049path.moveTo(21.7268f, 50.7931f);
6050path.quadTo(21.2121f, 50.7278f, 20.7005f, 50.642f);
6051path.conicTo(19.7143f, 50.4767f, 19.8796f, 49.4905f, 0.707107f);
6052path.conicTo(20.045f, 48.5042f, 21.0312f, 48.6696f, 0.707107f);
6053path.quadTo(21.5036f, 48.7488f, 21.9786f, 48.8091f);
6054path.conicTo(22.9707f, 48.9349f, 22.8448f, 49.927f, 0.707107f);
6055path.conicTo(22.7189f, 50.919f, 21.7268f, 50.7931f, 0.707107f);
6056path.close();
6057path.moveTo(18.6372f, 50.2094f);
6058path.quadTo(18.1089f, 50.0761f, 17.5865f, 49.9207f);
6059path.conicTo(16.628f, 49.6356f, 16.9132f, 48.6771f, 0.707107f);
6060path.conicTo(17.1983f, 47.7186f, 18.1568f, 48.0037f, 0.707107f);
6061path.quadTo(18.639f, 48.1472f, 19.1267f, 48.2702f);
6062path.conicTo(20.0963f, 48.515f, 19.8516f, 49.4846f, 0.707107f);
6063path.conicTo(19.6068f, 50.4542f, 18.6372f, 50.2094f, 0.707107f);
6064path.close();
6065path.moveTo(15.5577f, 49.2248f);
6066path.quadTo(15.0665f, 49.0334f, 14.5834f, 48.8222f);
6067path.conicTo(13.6672f, 48.4215f, 14.0678f, 47.5053f, 0.707107f);
6068path.conicTo(14.4684f, 46.589f, 15.3847f, 46.9897f, 0.707107f);
6069path.quadTo(15.8306f, 47.1846f, 16.284f, 47.3614f);
6070path.conicTo(17.2158f, 47.7246f, 16.8526f, 48.6563f, 0.707107f);
6071path.conicTo(16.4894f, 49.588f, 15.5577f, 49.2248f, 0.707107f);
6072path.close();
6073path.moveTo(12.7231f, 47.9189f);
6074path.quadTo(12.2765f, 47.6797f, 11.8395f, 47.4233f);
6075path.conicTo(10.9771f, 46.9171f, 11.4833f, 46.0547f, 0.707107f);
6076path.conicTo(11.9894f, 45.1922f, 12.8519f, 45.6984f, 0.707107f);
6077path.quadTo(13.2552f, 45.9351f, 13.6675f, 46.156f);
6078path.conicTo(14.549f, 46.6282f, 14.0768f, 47.5096f, 0.707107f);
6079path.conicTo(13.6046f, 48.3911f, 12.7231f, 47.9189f, 0.707107f);
6080path.close();
6081path.moveTo(10.1686f, 46.3548f);
6082path.quadTo(9.76024f, 46.0712f, 9.363f, 45.7722f);
6083path.conicTo(8.56406f, 45.1708f, 9.16549f, 44.3718f, 0.707107f);
6084path.conicTo(9.76691f, 43.5729f, 10.5658f, 44.1743f, 0.707107f);
6085path.quadTo(10.9325f, 44.4504f, 11.3095f, 44.7122f);
6086path.conicTo(12.1308f, 45.2826f, 11.5604f, 46.1039f, 0.707107f);
6087path.conicTo(10.9899f, 46.9253f, 10.1686f, 46.3548f, 0.707107f);
6088path.close();
6089path.moveTo(7.78853f, 44.4876f);
6090path.quadTo(7.39972f, 44.1442f, 7.02492f, 43.7855f);
6091path.conicTo(6.3024f, 43.0942f, 6.99374f, 42.3717f, 0.707107f);
6092path.conicTo(7.68509f, 41.6492f, 8.40761f, 42.3405f, 0.707107f);
6093path.quadTo(8.7536f, 42.6715f, 9.11249f, 42.9885f);
6094path.conicTo(9.86201f, 43.6505f, 9.20003f, 44.4f, 0.707107f);
6095path.conicTo(8.53805f, 45.1496f, 7.78853f, 44.4876f, 0.707107f);
6096path.close();
6097path.moveTo(5.55855f, 42.2635f);
6098path.quadTo(5.20148f, 41.8614f, 4.86131f, 41.4449f);
6099path.conicTo(4.22883f, 40.6703f, 5.0034f, 40.0378f, 0.707107f);
6100path.conicTo(5.77797f, 39.4053f, 6.41046f, 40.1799f, 0.707107f);
6101path.quadTo(6.72443f, 40.5644f, 7.05403f, 40.9356f);
6102path.conicTo(7.71802f, 41.6833f, 6.97028f, 42.3473f, 0.707107f);
6103path.conicTo(6.22254f, 43.0113f, 5.55855f, 42.2635f, 0.707107f);
6104path.close();
6105path.moveTo(3.55261f, 39.6973f);
6106path.quadTo(3.26341f, 39.2752f, 2.99107f, 38.8422f);
6107path.conicTo(2.45867f, 37.9957f, 3.30517f, 37.4633f, 0.707107f);
6108path.conicTo(4.15167f, 36.9309f, 4.68406f, 37.7774f, 0.707107f);
6109path.quadTo(4.93548f, 38.1772f, 5.20241f, 38.5667f);
6110path.conicTo(5.76769f, 39.3916f, 4.94279f, 39.9569f, 0.707107f);
6111path.conicTo(4.11789f, 40.5222f, 3.55261f, 39.6973f, 0.707107f);
6112path.close();
6113path.moveTo(1.96145f, 37.0509f);
6114path.quadTo(1.71975f, 36.5889f, 1.49677f, 36.1175f);
6115path.conicTo(1.06917f, 35.2135f, 1.97315f, 34.7859f, 0.707107f);
6116path.conicTo(2.87712f, 34.3583f, 3.30471f, 35.2623f, 0.707107f);
6117path.quadTo(3.51053f, 35.6974f, 3.73364f, 36.1239f);
6118path.conicTo(4.19714f, 37.01f, 3.31105f, 37.4735f, 0.707107f);
6119path.conicTo(2.42495f, 37.937f, 1.96145f, 37.0509f, 0.707107f);
6120path.close();
6121path.moveTo(0.676191f, 34.1844f);
6122path.quadTo(0.489621f, 33.6902f, 0.323275f, 33.189f);
6123path.conicTo(0.00831527f, 32.2399f, 0.95742f, 31.9249f, 0.707107f);
6124path.conicTo(1.90653f, 31.6099f, 2.22149f, 32.559f, 0.707107f);
6125path.quadTo(2.37504f, 33.0218f, 2.54726f, 33.4779f);
6126path.conicTo(2.9005f, 34.4134f, 1.96497f, 34.7666f, 0.707107f);
6127path.conicTo(1.02943f, 35.1199f, 0.676191f, 34.1844f, 0.707107f);
6128path.close();
6129path.moveTo(-0.261658f, 31.1521f);
6130path.quadTo(-0.387304f, 30.6362f, -0.491779f, 30.1156f);
6131path.conicTo(-0.68853f, 29.1351f, 0.291923f, 28.9384f, 0.707107f);
6132path.conicTo(1.27238f, 28.7416f, 1.46913f, 29.7221f, 0.707107f);
6133path.quadTo(1.56557f, 30.2026f, 1.68155f, 30.6789f);
6134path.conicTo(1.91817f, 31.6505f, 0.946565f, 31.8871f, 0.707107f);
6135path.conicTo(-0.0250367f, 32.1237f, -0.261658f, 31.1521f, 0.707107f);
6136path.close();
6137path.moveTo(-0.820549f, 28.0495f);
6138path.quadTo(-0.881733f, 27.5314f, -0.922089f, 27.0113f);
6139path.conicTo(-0.999449f, 26.0143f, -0.00244591f, 25.9369f, 0.707107f);
6140path.conicTo(0.994557f, 25.8596f, 1.07192f, 26.8566f, 0.707107f);
6141path.quadTo(1.10917f, 27.3367f, 1.16565f, 27.8149f);
6142path.conicTo(1.28293f, 28.808f, 0.289834f, 28.9253f, 0.707107f);
6143path.conicTo(-0.703265f, 29.0426f, -0.820549f, 28.0495f, 0.707107f);
6144path.close();
6145path.moveTo(-0.999918f, 24.9349f);
6146path.quadTo(-0.998605f, 24.4104f, -0.976138f, 23.8863f);
6147path.conicTo(-0.933305f, 22.8873f, 0.0657772f, 22.9301f, 0.707107f);
6148path.conicTo(1.06486f, 22.9729f, 1.02203f, 23.972f, 0.707107f);
6149path.quadTo(1.00129f, 24.4557f, 1.00008f, 24.9399f);
6150path.conicTo(0.997572f, 25.9399f, -0.0024244f, 25.9374f, 0.707107f);
6151path.conicTo(-1.00242f, 25.9349f, -0.999918f, 24.9349f, 0.707107f);
6152path.close();
6153path.moveTo(-0.802212f, 21.7991f);
6154path.quadTo(-0.738311f, 21.284f, -0.653903f, 20.7719f);
6155path.conicTo(-0.491283f, 19.7852f, 0.495406f, 19.9478f, 0.707107f);
6156path.conicTo(1.48209f, 20.1104f, 1.31948f, 21.0971f, 0.707107f);
6157path.quadTo(1.24156f, 21.5698f, 1.18257f, 22.0453f);
6158path.conicTo(1.05946f, 23.0377f, 0.0670681f, 22.9146f, 0.707107f);
6159path.conicTo(-0.925325f, 22.7915f, -0.802212f, 21.7991f, 0.707107f);
6160path.close();
6161path.moveTo(-0.228066f, 18.7115f);
6162path.quadTo(-0.096172f, 18.1824f, 0.0577899f, 17.6593f);
6163path.conicTo(0.340124f, 16.7f, 1.29944f, 16.9823f, 0.707107f);
6164path.conicTo(2.25876f, 17.2646f, 1.97642f, 18.2239f, 0.707107f);
6165path.quadTo(1.8343f, 18.7068f, 1.71255f, 19.1953f);
6166path.conicTo(1.47069f, 20.1656f, 0.50038f, 19.9237f, 0.707107f);
6167path.conicTo(-0.46993f, 19.6819f, -0.228066f, 18.7115f, 0.707107f);
6168path.close();
6169path.moveTo(0.74831f, 15.6269f);
6170path.quadTo(0.938539f, 15.1347f, 1.14857f, 14.6506f);
6171path.conicTo(1.54662f, 13.7333f, 2.46398f, 14.1313f, 0.707107f);
6172path.conicTo(3.38135f, 14.5294f, 2.9833f, 15.4467f, 0.707107f);
6173path.quadTo(2.78942f, 15.8936f, 2.61382f, 16.3479f);
6174path.conicTo(2.25331f, 17.2806f, 1.32056f, 16.9201f, 0.707107f);
6175path.conicTo(0.387801f, 16.5596f, 0.74831f, 15.6269f, 0.707107f);
6176path.close();
6177path.moveTo(2.04744f, 12.7861f);
6178path.quadTo(2.28569f, 12.3384f, 2.5412f, 11.9003f);
6179path.conicTo(3.04504f, 11.0365f, 3.90884f, 11.5403f, 0.707107f);
6180path.conicTo(4.77264f, 12.0442f, 4.26881f, 12.908f, 0.707107f);
6181path.quadTo(4.03293f, 13.3123f, 3.81302f, 13.7256f);
6182path.conicTo(3.34325f, 14.6084f, 2.46046f, 14.1386f, 0.707107f);
6183path.conicTo(1.57767f, 13.6689f, 2.04744f, 12.7861f, 0.707107f);
6184path.close();
6185path.moveTo(3.60589f, 10.2253f);
6186path.quadTo(3.88812f, 9.81661f, 4.18576f, 9.419f);
6187path.conicTo(4.78503f, 8.61845f, 5.58558f, 9.21772f, 0.707107f);
6188path.conicTo(6.38613f, 9.81699f, 5.78686f, 10.6175f, 0.707107f);
6189path.quadTo(5.51211f, 10.9846f, 5.25159f, 11.3618f);
6190path.conicTo(4.68333f, 12.1847f, 3.86048f, 11.6164f, 0.707107f);
6191path.conicTo(3.03763f, 11.0481f, 3.60589f, 10.2253f, 0.707107f);
6192path.close();
6193path.moveTo(5.46482f, 7.84259f);
6194path.quadTo(5.80682f, 7.4532f, 6.16407f, 7.07773f);
6195path.conicTo(6.85339f, 6.35327f, 7.57785f, 7.04259f, 0.707107f);
6196path.conicTo(8.30231f, 7.73191f, 7.61299f, 8.45636f, 0.707107f);
6197path.quadTo(7.28322f, 8.80295f, 6.96752f, 9.16239f);
6198path.conicTo(6.30762f, 9.91375f, 5.55627f, 9.25385f, 0.707107f);
6199path.conicTo(4.80492f, 8.59395f, 5.46482f, 7.84259f, 0.707107f);
6200path.close();
6201path.moveTo(7.68062f, 5.60827f);
6202path.quadTo(8.08142f, 5.25031f, 8.49666f, 4.90921f);
6203path.conicTo(9.26938f, 4.27447f, 9.90412f, 5.04719f, 0.707107f);
6204path.conicTo(10.5389f, 5.81992f, 9.76614f, 6.45466f, 0.707107f);
6205path.quadTo(9.38285f, 6.76951f, 9.01289f, 7.09994f);
6206path.conicTo(8.26705f, 7.76607f, 7.60092f, 7.02024f, 0.707107f);
6207path.conicTo(6.93479f, 6.2744f, 7.68062f, 5.60827f, 0.707107f);
6208path.close();
6209path.moveTo(10.2392f, 3.59627f);
6210path.quadTo(10.6626f, 3.30433f, 11.0971f, 3.02935f);
6211path.conicTo(11.9421f, 2.49463f, 12.4768f, 3.33965f, 0.707107f);
6212path.conicTo(13.0116f, 4.18467f, 12.1666f, 4.7194f, 0.707107f);
6213path.quadTo(11.7654f, 4.97322f, 11.3747f, 5.24271f);
6214path.conicTo(10.5515f, 5.81043f, 9.98373f, 4.98721f, 0.707107f);
6215path.conicTo(9.41601f, 4.16399f, 10.2392f, 3.59627f, 0.707107f);
6216path.close();
6217path.moveTo(12.8847f, 1.99524f);
6218path.quadTo(13.3459f, 1.75234f, 13.8165f, 1.52812f);
6219path.conicTo(14.7193f, 1.09799f, 15.1494f, 2.00075f, 0.707107f);
6220path.conicTo(15.5795f, 2.90352f, 14.6768f, 3.33365f, 0.707107f);
6221path.quadTo(14.2424f, 3.54063f, 13.8166f, 3.76484f);
6222path.conicTo(12.9318f, 4.23081f, 12.4658f, 3.34601f, 0.707107f);
6223path.conicTo(11.9999f, 2.46122f, 12.8847f, 1.99524f, 0.707107f);
6224path.close();
6225path.moveTo(15.7467f, 0.702339f);
6226path.quadTo(16.2402f, 0.514409f, 16.7409f, 0.346672f);
6227path.conicTo(17.6891f, 0.029011f, 18.0067f, 0.977215f, 0.707107f);
6228path.conicTo(18.3244f, 1.92542f, 17.3762f, 2.24308f, 0.707107f);
6229path.quadTo(16.914f, 2.39792f, 16.4585f, 2.57139f);
6230path.conicTo(15.524f, 2.92729f, 15.1681f, 1.99276f, 0.707107f);
6231path.conicTo(14.8122f, 1.05824f, 15.7467f, 0.702339f, 0.707107f);
6232path.close();
6233path.moveTo(18.7758f, -0.24399f);
6234path.quadTo(19.2913f, -0.371107f, 19.8116f, -0.477061f);
6235path.conicTo(20.7915f, -0.676608f, 20.9911f, 0.303281f, 0.707107f);
6236path.conicTo(21.1906f, 1.28317f, 20.2107f, 1.48272f, 0.707107f);
6237path.quadTo(19.7304f, 1.58052f, 19.2546f, 1.69785f);
6238path.conicTo(18.2836f, 1.93725f, 18.0443f, 0.966329f, 0.707107f);
6239path.conicTo(17.8049f, -0.00459272f, 18.7758f, -0.24399f, 0.707107f);
6240path.close();
6241path.moveTo(21.878f, -0.811882f);
6242path.quadTo(22.396f, -0.874528f, 22.916f, -0.916348f);
6243path.conicTo(23.9128f, -0.996504f, 23.993f, 0.000278629f, 0.707107f);
6244path.conicTo(24.0731f, 0.997061f, 23.0764f, 1.07722f, 0.707107f);
6245path.quadTo(22.5963f, 1.11582f, 22.1182f, 1.17365f);
6246path.conicTo(21.1254f, 1.29372f, 21.0053f, 0.300958f, 0.707107f);
6247path.conicTo(20.8853f, -0.691807f, 21.878f, -0.811882f, 0.707107f);
6248path.close();
6249path.moveTo(24.9926f, -0.999999f);
6250path.quadTo(25.5166f, -1.00015f, 26.0401f, -0.979188f);
6251path.conicTo(27.0393f, -0.939179f, 26.9992f, 0.0600199f, 0.707107f);
6252path.conicTo(26.9592f, 1.05922f, 25.96f, 1.01921f, 0.707107f);
6253path.quadTo(25.4768f, 0.999863f, 24.9932f, 1);
6254path.conicTo(23.9932f, 1.00029f, 23.9929f, 0.000287339f, 0.707107f);
6255path.conicTo(23.9926f, -0.999713f, 24.9926f, -0.999999f, 0.707107f);
6256path.close();
6257path.moveTo(28.1286f, -0.811081f);
6258path.quadTo(28.6441f, -0.748593f, 29.1567f, -0.665572f);
6259path.conicTo(30.1439f, -0.505698f, 29.984f, 0.48144f, 0.707107f);
6260path.conicTo(29.8241f, 1.46858f, 28.837f, 1.3087f, 0.707107f);
6261path.quadTo(28.3638f, 1.23207f, 27.8879f, 1.17439f);
6262path.conicTo(26.8952f, 1.05406f, 27.0155f, 0.0613233f, 0.707107f);
6263path.conicTo(27.1359f, -0.931411f, 28.1286f, -0.811081f, 0.707107f);
6264path.close();
6265path.moveTo(31.214f, -0.246499f);
6266path.quadTo(31.7439f, -0.116076f, 32.2679f, 0.0364622f);
6267path.conicTo(33.228f, 0.315996f, 32.9485f, 1.27613f, 0.707107f);
6268path.conicTo(32.6689f, 2.23627f, 31.7088f, 1.95673f, 0.707107f);
6269path.quadTo(31.2252f, 1.81593f, 30.736f, 1.69554f);
6270path.conicTo(29.765f, 1.45654f, 30.004f, 0.48552f, 0.707107f);
6271path.conicTo(30.243f, -0.485499f, 31.214f, -0.246499f, 0.707107f);
6272path.close();
6273path.moveTo(34.3038f, 0.721629f);
6274path.quadTo(34.797f, 0.910612f, 35.282f, 1.11946f);
6275path.conicTo(36.2005f, 1.51493f, 35.805f, 2.43341f, 0.707107f);
6276path.conicTo(35.4096f, 3.35189f, 34.4911f, 2.95642f, 0.707107f);
6277path.quadTo(34.0434f, 2.76365f, 33.5881f, 2.5892f);
6278path.conicTo(32.6543f, 2.23137f, 33.0122f, 1.29758f, 0.707107f);
6279path.conicTo(33.37f, 0.363796f, 34.3038f, 0.721629f, 0.707107f);
6280path.close();
6281path.moveTo(37.1508f, 2.01396f);
6282path.quadTo(37.5996f, 2.2512f, 38.0388f, 2.50578f);
6283path.conicTo(38.904f, 3.00727f, 38.4025f, 3.87244f, 0.707107f);
6284path.conicTo(37.901f, 4.7376f, 37.0358f, 4.23612f, 0.707107f);
6285path.quadTo(36.6304f, 4.00111f, 36.2161f, 3.78211f);
6286path.conicTo(35.332f, 3.31476f, 35.7994f, 2.43069f, 0.707107f);
6287path.conicTo(36.2667f, 1.54661f, 37.1508f, 2.01396f, 0.707107f);
6288path.close();
6289path.moveTo(39.718f, 3.56681f);
6290path.quadTo(40.1269f, 3.84765f, 40.5249f, 4.14392f);
6291path.conicTo(41.3271f, 4.74104f, 40.73f, 5.54319f, 0.707107f);
6292path.conicTo(40.1329f, 6.34535f, 39.3307f, 5.74823f, 0.707107f);
6293path.quadTo(38.9634f, 5.47478f, 38.5858f, 5.21552f);
6294path.conicTo(37.7615f, 4.64945f, 38.3275f, 3.82509f, 0.707107f);
6295path.conicTo(38.8936f, 3.00074f, 39.718f, 3.56681f, 0.707107f);
6296path.close();
6297path.moveTo(42.1033f, 5.41741f);
6298path.quadTo(42.4933f, 5.75802f, 42.8694f, 6.11388f);
6299path.conicTo(43.5958f, 6.80115f, 42.9085f, 7.52755f, 0.707107f);
6300path.conicTo(42.2212f, 8.25394f, 41.4948f, 7.56667f, 0.707107f);
6301path.quadTo(41.1476f, 7.23817f, 40.7876f, 6.92375f);
6302path.conicTo(40.0345f, 6.26593f, 40.6923f, 5.51275f, 0.707107f);
6303path.conicTo(41.3501f, 4.75958f, 42.1033f, 5.41741f, 0.707107f);
6304path.close();
6305path.moveTo(44.3419f, 7.62498f);
6306path.quadTo(44.7007f, 8.02444f, 45.0428f, 8.43835f);
6307path.conicTo(45.6797f, 9.20922f, 44.9089f, 9.84622f, 0.707107f);
6308path.conicTo(44.138f, 10.4832f, 43.501f, 9.71234f, 0.707107f);
6309path.quadTo(43.1852f, 9.3302f, 42.854f, 8.96151f);
6310path.conicTo(42.1858f, 8.21759f, 42.9297f, 7.54932f, 0.707107f);
6311path.conicTo(43.6736f, 6.88106f, 44.3419f, 7.62498f, 0.707107f);
6312path.close();
6313path.moveTo(46.3599f, 10.1759f);
6314path.quadTo(46.6546f, 10.6005f, 46.9322f, 11.0366f);
6315path.conicTo(47.4693f, 11.8801f, 46.6257f, 12.4172f, 0.707107f);
6316path.conicTo(45.7822f, 12.9542f, 45.2451f, 12.1107f, 0.707107f);
6317path.quadTo(44.9889f, 11.7082f, 44.7168f, 11.3162f);
6318path.conicTo(44.1467f, 10.4947f, 44.9682f, 9.92452f, 0.707107f);
6319path.conicTo(45.7897f, 9.35435f, 46.3599f, 10.1759f, 0.707107f);
6320path.close();
6321path.moveTo(47.9708f, 12.8204f);
6322path.quadTo(48.2149f, 13.2808f, 48.4403f, 13.7506f);
6323path.conicTo(48.873f, 14.6521f, 47.9715f, 15.0848f, 0.707107f);
6324path.conicTo(47.0699f, 15.5174f, 46.6372f, 14.6159f, 0.707107f);
6325path.quadTo(46.4291f, 14.1822f, 46.2038f, 13.7573f);
6326path.conicTo(45.7354f, 12.8738f, 46.6188f, 12.4054f, 0.707107f);
6327path.conicTo(47.5023f, 11.9369f, 47.9708f, 12.8204f, 0.707107f);
6328path.close();
6329path.moveTo(49.2713f, 15.6778f);
6330path.quadTo(49.4606f, 16.1706f, 49.6297f, 16.6708f);
6331path.conicTo(49.9501f, 17.6181f, 49.0028f, 17.9384f, 0.707107f);
6332path.conicTo(48.0555f, 18.2588f, 47.7351f, 17.3115f, 0.707107f);
6333path.quadTo(47.5791f, 16.8499f, 47.4043f, 16.3949f);
6334path.conicTo(47.0458f, 15.4614f, 47.9793f, 15.1029f, 0.707107f);
6335path.conicTo(48.9128f, 14.7443f, 49.2713f, 15.6778f, 0.707107f);
6336path.close();
6337path.moveTo(50.2261f, 18.7037f);
6338path.quadTo(50.3547f, 19.2188f, 50.4621f, 19.7388f);
6339path.conicTo(50.6645f, 20.7182f, 49.6852f, 20.9205f, 0.707107f);
6340path.conicTo(48.7059f, 21.1229f, 48.5035f, 20.1436f, 0.707107f);
6341path.quadTo(48.4043f, 19.6636f, 48.2856f, 19.1881f);
6342path.conicTo(48.0435f, 18.2178f, 49.0137f, 17.9757f, 0.707107f);
6343path.conicTo(49.984f, 17.7335f, 50.2261f, 18.7037f, 0.707107f);
6344path.close();
6345path.moveTo(50.803f, 21.8055f);
6346path.quadTo(50.8671f, 22.3234f, 50.9104f, 22.8434f);
6347path.conicTo(50.9934f, 23.8399f, 49.9968f, 23.9229f, 0.707107f);
6348path.conicTo(49.0002f, 24.0058f, 48.9173f, 23.0093f, 0.707107f);
6349path.quadTo(48.8773f, 22.5293f, 48.8182f, 22.0513f);
6350path.conicTo(48.6953f, 21.0588f, 49.6877f, 20.936f, 0.707107f);
6351path.conicTo(50.6801f, 20.8131f, 50.803f, 21.8055f, 0.707107f);
6352path.close();
6353path.moveTo(50.9999f, 24.9202f);
6354path.quadTo(51.0015f, 25.4434f, 50.982f, 25.9664f);
6355path.conicTo(50.9449f, 26.9657f, 49.9456f, 26.9286f, 0.707107f);
6356path.conicTo(48.9463f, 26.8914f, 48.9834f, 25.8921f, 0.707107f);
6357path.quadTo(49.0014f, 25.4094f, 48.9999f, 24.9263f);
6358path.conicTo(48.9968f, 23.9263f, 49.9968f, 23.9232f, 0.707107f);
6359path.conicTo(50.9968f, 23.9202f, 50.9999f, 24.9202f, 0.707107f);
6360path.close();
6361path.moveTo(50.8198f, 28.0562f);
6362path.quadTo(50.7587f, 28.5721f, 50.677f, 29.0852f);
6363path.conicTo(50.5199f, 30.0728f, 49.5323f, 29.9157f, 0.707107f);
6364path.conicTo(48.5448f, 29.7586f, 48.7019f, 28.771f, 0.707107f);
6365path.quadTo(48.7772f, 28.2974f, 48.8336f, 27.8211f);
6366path.conicTo(48.9512f, 26.8281f, 49.9442f, 26.9456f, 0.707107f);
6367path.conicTo(50.9373f, 27.0632f, 50.8198f, 28.0562f, 0.707107f);
6368path.close();
6369path.moveTo(50.2647f, 31.1395f);
6370path.quadTo(50.1358f, 31.6701f, 49.9847f, 32.1949f);
6371path.conicTo(49.7079f, 33.1558f, 48.747f, 32.8791f, 0.707107f);
6372path.conicTo(47.786f, 32.6024f, 48.0628f, 31.6414f, 0.707107f);
6373path.quadTo(48.2022f, 31.1571f, 48.3213f, 30.6672f);
6374path.conicTo(48.5574f, 29.6955f, 49.5291f, 29.9317f, 0.707107f);
6375path.conicTo(50.5009f, 30.1678f, 50.2647f, 31.1395f, 0.707107f);
6376path.close();
6377path.moveTo(49.3049f, 34.2343f);
6378path.quadTo(49.1171f, 34.7285f, 48.9095f, 35.2145f);
6379path.conicTo(48.5166f, 36.1341f, 47.597f, 35.7412f, 0.707107f);
6380path.conicTo(46.6774f, 35.3483f, 47.0703f, 34.4288f, 0.707107f);
6381path.quadTo(47.262f, 33.9801f, 47.4353f, 33.524f);
6382path.conicTo(47.7904f, 32.5892f, 48.7252f, 32.9444f, 0.707107f);
6383path.conicTo(49.66f, 33.2995f, 49.3049f, 34.2343f, 0.707107f);
6384path.close();
6385path.moveTo(48.0194f, 37.0875f);
6386path.quadTo(47.7831f, 37.5374f, 47.5295f, 37.9777f);
6387path.conicTo(47.0304f, 38.8443f, 46.1638f, 38.3451f, 0.707107f);
6388path.conicTo(45.2973f, 37.846f, 45.7965f, 36.9795f, 0.707107f);
6389path.quadTo(46.0306f, 36.5729f, 46.2487f, 36.1577f);
6390path.conicTo(46.7136f, 35.2723f, 47.5989f, 35.7372f, 0.707107f);
6391path.conicTo(48.4843f, 36.2021f, 48.0194f, 37.0875f, 0.707107f);
6392path.close();
6393path.moveTo(46.4721f, 39.6612f);
6394path.quadTo(46.1926f, 40.0705f, 45.8977f, 40.4688f);
6395path.conicTo(45.3028f, 41.2726f, 44.499f, 40.6776f, 0.707107f);
6396path.conicTo(43.6953f, 40.0827f, 44.2902f, 39.2789f, 0.707107f);
6397path.quadTo(44.5624f, 38.9112f, 44.8204f, 38.5334f);
6398path.conicTo(45.3843f, 37.7075f, 46.2101f, 38.2714f, 0.707107f);
6399path.conicTo(47.036f, 38.8353f, 46.4721f, 39.6612f, 0.707107f);
6400path.close();
6401path.moveTo(44.6298f, 42.0491f);
6402path.quadTo(44.2906f, 42.4396f, 43.9361f, 42.8164f);
6403path.conicTo(43.2509f, 43.5447f, 42.5226f, 42.8595f, 0.707107f);
6404path.conicTo(41.7942f, 42.1742f, 42.4795f, 41.4459f, 0.707107f);
6405path.quadTo(42.8067f, 41.0981f, 43.1198f, 40.7376f);
6406path.conicTo(43.7756f, 39.9826f, 44.5306f, 40.6383f, 0.707107f);
6407path.conicTo(45.2856f, 41.2941f, 44.6298f, 42.0491f, 0.707107f);
6408path.close();
6409path.moveTo(42.4305f, 44.2919f);
6410path.quadTo(42.0324f, 44.6516f, 41.6198f, 44.9946f);
6411path.conicTo(40.8507f, 45.6338f, 40.2115f, 44.8648f, 0.707107f);
6412path.conicTo(39.5723f, 44.0958f, 40.3413f, 43.4566f, 0.707107f);
6413path.quadTo(40.7222f, 43.1399f, 41.0897f, 42.8079f);
6414path.conicTo(41.8317f, 42.1375f, 42.5021f, 42.8795f, 0.707107f);
6415path.conicTo(43.1725f, 43.6215f, 42.4305f, 44.2919f, 0.707107f);
6416path.close();
6417path.moveTo(39.8873f, 46.3159f);
6418path.quadTo(39.4613f, 46.6134f, 39.0238f, 46.8936f);
6419path.conicTo(38.1818f, 47.433f, 37.6424f, 46.5909f, 0.707107f);
6420path.conicTo(37.103f, 45.7489f, 37.9451f, 45.2095f, 0.707107f);
6421path.quadTo(38.3489f, 44.9508f, 38.7421f, 44.6763f);
6422path.conicTo(39.5619f, 44.1037f, 40.1345f, 44.9235f, 0.707107f);
6423path.conicTo(40.7071f, 45.7434f, 39.8873f, 46.3159f, 0.707107f);
6424path.close();
6425path.moveTo(37.2437f, 47.9367f);
6426path.quadTo(36.7842f, 48.182f, 36.3153f, 48.4086f);
6427path.conicTo(35.415f, 48.8439f, 34.9797f, 47.9435f, 0.707107f);
6428path.conicTo(34.5445f, 47.0432f, 35.4449f, 46.608f, 0.707107f);
6429path.quadTo(35.8778f, 46.3987f, 36.3019f, 46.1723f);
6430path.conicTo(37.1841f, 45.7014f, 37.655f, 46.5836f, 0.707107f);
6431path.conicTo(38.1259f, 47.4658f, 37.2437f, 47.9367f, 0.707107f);
6432path.close();
6433path.moveTo(34.3909f, 49.2448f);
6434path.quadTo(33.8988f, 49.4354f, 33.3992f, 49.606f);
6435path.conicTo(32.4528f, 49.929f, 32.1298f, 48.9826f, 0.707107f);
6436path.conicTo(31.8068f, 48.0362f, 32.7532f, 47.7132f, 0.707107f);
6437path.quadTo(33.2142f, 47.5558f, 33.6685f, 47.3798f);
6438path.conicTo(34.601f, 47.0186f, 34.9622f, 47.9511f, 0.707107f);
6439path.conicTo(35.3234f, 48.8836f, 34.3909f, 49.2448f, 0.707107f);
6440path.close();
6441path.moveTo(31.3682f, 50.208f);
6442path.quadTo(30.8535f, 50.3381f, 30.3338f, 50.447f);
6443path.conicTo(29.3551f, 50.6521f, 29.15f, 49.6734f, 0.707107f);
6444path.conicTo(28.9448f, 48.6947f, 29.9236f, 48.4895f, 0.707107f);
6445path.quadTo(30.4033f, 48.389f, 30.8784f, 48.269f);
6446path.conicTo(31.8479f, 48.024f, 32.0929f, 48.9936f, 0.707107f);
6447path.conicTo(32.3378f, 49.9631f, 31.3682f, 50.208f, 0.707107f);
6448path.close();
6449path.moveTo(28.2669f, 50.7939f);
6450path.quadTo(27.7491f, 50.8595f, 27.2292f, 50.9043f);
6451path.conicTo(26.2329f, 50.99f, 26.1472f, 49.9937f, 0.707107f);
6452path.conicTo(26.0615f, 48.9973f, 27.0578f, 48.9116f, 0.707107f);
6453path.quadTo(27.5378f, 48.8703f, 28.0156f, 48.8098f);
6454path.conicTo(29.0077f, 48.6841f, 29.1334f, 49.6762f, 0.707107f);
6455path.conicTo(29.259f, 50.6683f, 28.2669f, 50.7939f, 0.707107f);
6456path.close();
6457path.moveTo(25.1523f, 50.9996f);
6458path.quadTo(24.6297f, 51.0026f, 24.1072f, 50.9847f);
6459path.conicTo(23.1078f, 50.9503f, 23.1422f, 49.9509f, 0.707107f);
6460path.conicTo(23.1765f, 48.9515f, 24.1759f, 48.9858f, 0.707107f);
6461path.quadTo(24.658f, 49.0024f, 25.1406f, 48.9996f);
6462path.conicTo(26.1406f, 48.9937f, 26.1464f, 49.9937f, 0.707107f);
6463path.conicTo(26.1523f, 50.9937f, 25.1523f, 50.9996f, 0.707107f);
6464path.close();
6465path.moveTo(22.0162f, 50.8282f);
6466path.quadTo(21.4999f, 50.7686f, 20.9863f, 50.6883f);
6467path.conicTo(19.9983f, 50.5339f, 20.1527f, 49.5459f, 0.707107f);
6468path.conicTo(20.307f, 48.5579f, 21.295f, 48.7123f, 0.707107f);
6469path.quadTo(21.7691f, 48.7864f, 22.2457f, 48.8414f);
6470path.conicTo(23.2391f, 48.9562f, 23.1243f, 49.9496f, 0.707107f);
6471path.conicTo(23.0096f, 50.943f, 22.0162f, 50.8282f, 0.707107f);
6472path.close();
6473path.moveTo(18.9351f, 50.2827f);
6474path.quadTo(18.4037f, 50.1553f, 17.8782f, 50.0056f);
6475path.conicTo(16.9164f, 49.7317f, 17.1904f, 48.7699f, 0.707107f);
6476path.conicTo(17.4643f, 47.8082f, 18.426f, 48.0821f, 0.707107f);
6477path.quadTo(18.9112f, 48.2203f, 19.4016f, 48.3379f);
6478path.conicTo(20.374f, 48.5712f, 20.1408f, 49.5436f, 0.707107f);
6479path.conicTo(19.9075f, 50.516f, 18.9351f, 50.2827f, 0.707107f);
6480path.close();
6481path.moveTo(15.8352f, 49.3312f);
6482path.quadTo(15.3403f, 49.1448f, 14.8531f, 48.9383f);
6483path.conicTo(13.9324f, 48.548f, 14.3227f, 47.6273f, 0.707107f);
6484path.conicTo(14.713f, 46.7066f, 15.6337f, 47.0969f, 0.707107f);
6485path.quadTo(16.0832f, 47.2874f, 16.5402f, 47.4596f);
6486path.conicTo(17.476f, 47.812f, 17.1235f, 48.7479f, 0.707107f);
6487path.conicTo(16.771f, 49.6837f, 15.8352f, 49.3312f, 0.707107f);
6488path.close();
6489path.moveTo(12.9759f, 48.0526f);
6490path.quadTo(12.5249f, 47.8173f, 12.0835f, 47.5647f);
6491path.conicTo(11.2156f, 47.0679f, 11.7124f, 46.2f, 0.707107f);
6492path.conicTo(12.2092f, 45.3321f, 13.0771f, 45.8289f, 0.707107f);
6493path.quadTo(13.4846f, 46.0622f, 13.9009f, 46.2793f);
6494path.conicTo(14.7875f, 46.7418f, 14.325f, 47.6284f, 0.707107f);
6495path.conicTo(13.8626f, 48.5151f, 12.9759f, 48.0526f, 0.707107f);
6496path.close();
6497path.moveTo(10.3957f, 46.5108f);
6498path.quadTo(9.9861f, 46.2327f, 9.58733f, 45.9392f);
6499path.conicTo(8.78198f, 45.3464f, 9.37478f, 44.541f, 0.707107f);
6500path.conicTo(9.96757f, 43.7357f, 10.7729f, 44.3285f, 0.707107f);
6501path.quadTo(11.141f, 44.5994f, 11.5191f, 44.8561f);
6502path.conicTo(12.3464f, 45.4178f, 11.7847f, 46.2451f, 0.707107f);
6503path.conicTo(11.223f, 47.0725f, 10.3957f, 46.5108f, 0.707107f);
6504path.close();
6505path.moveTo(8.00525f, 44.6769f);
6506path.quadTo(7.6141f, 44.339f, 7.23672f, 43.9859f);
6507path.conicTo(6.50649f, 43.3027f, 7.18969f, 42.5725f, 0.707107f);
6508path.conicTo(7.87289f, 41.8423f, 8.60312f, 42.5255f, 0.707107f);
6509path.quadTo(8.95149f, 42.8514f, 9.31254f, 43.1632f);
6510path.conicTo(10.0693f, 43.8169f, 9.4157f, 44.5737f, 0.707107f);
6511path.conicTo(8.76206f, 45.3305f, 8.00525f, 44.6769f, 0.707107f);
6512path.close();
6513path.moveTo(5.75818f, 42.4858f);
6514path.quadTo(5.39763f, 42.089f, 5.05371f, 41.6777f);
6515path.conicTo(4.41226f, 40.9105f, 5.17942f, 40.2691f, 0.707107f);
6516path.conicTo(5.94658f, 39.6276f, 6.58804f, 40.3948f, 0.707107f);
6517path.quadTo(6.90548f, 40.7744f, 7.23832f, 41.1407f);
6518path.conicTo(7.91085f, 41.8808f, 7.17078f, 42.5533f, 0.707107f);
6519path.conicTo(6.43071f, 43.2258f, 5.75818f, 42.4858f, 0.707107f);
6520path.close();
6521path.moveTo(3.72821f, 39.9503f);
6522path.quadTo(3.42794f, 39.523f, 3.1451f, 39.0842f);
6523path.conicTo(2.6034f, 38.2436f, 3.44397f, 37.7019f, 0.707107f);
6524path.conicTo(4.28454f, 37.1602f, 4.82624f, 38.0008f, 0.707107f);
6525path.quadTo(5.08734f, 38.4059f, 5.3645f, 38.8003f);
6526path.conicTo(5.93951f, 39.6184f, 5.12137f, 40.1934f, 0.707107f);
6527path.conicTo(4.30322f, 40.7684f, 3.72821f, 39.9503f, 0.707107f);
6528path.close();
6529path.moveTo(2.09762f, 37.3078f);
6530path.quadTo(1.85114f, 36.8491f, 1.62324f, 36.381f);
6531path.conicTo(1.18551f, 35.4819f, 2.08461f, 35.0442f, 0.707107f);
6532path.conicTo(2.98372f, 34.6064f, 3.42145f, 35.5055f, 0.707107f);
6533path.quadTo(3.63184f, 35.9377f, 3.85934f, 36.361f);
6534path.conicTo(4.33272f, 37.2419f, 3.45185f, 37.7153f, 0.707107f);
6535path.conicTo(2.57099f, 38.1886f, 2.09762f, 37.3078f, 0.707107f);
6536path.close();
6537path.moveTo(0.781912f, 34.4596f);
6538path.quadTo(0.589924f, 33.9681f, 0.418029f, 33.4692f);
6539path.conicTo(0.0922952f, 32.5237f, 1.03776f, 32.198f, 0.707107f);
6540path.conicTo(1.98322f, 31.8722f, 2.30895f, 32.8177f, 0.707107f);
6541path.quadTo(2.46761f, 33.2782f, 2.64484f, 33.7319f);
6542path.conicTo(3.00867f, 34.6634f, 2.07721f, 35.0272f, 0.707107f);
6543path.conicTo(1.14575f, 35.3911f, 0.781912f, 34.4596f, 0.707107f);
6544path.close();
6545path.moveTo(-0.189761f, 31.4402f);
6546path.quadTo(-0.321263f, 30.9258f, -0.431662f, 30.4065f);
6547path.conicTo(-0.639608f, 29.4284f, 0.338532f, 29.2205f, 0.707107f);
6548path.conicTo(1.31667f, 29.0125f, 1.52462f, 29.9906f, 0.707107f);
6549path.quadTo(1.62653f, 30.47f, 1.74791f, 30.9448f);
6550path.conicTo(1.99561f, 31.9136f, 1.02677f, 32.1613f, 0.707107f);
6551path.conicTo(0.0579369f, 32.409f, -0.189761f, 31.4402f, 0.707107f);
6552path.close();
6553path.moveTo(-0.784658f, 28.3394f);
6554path.quadTo(-0.851693f, 27.8218f, -0.897902f, 27.3019f);
6555path.conicTo(-0.986437f, 26.3058f, 0.00963629f, 26.2173f, 0.707107f);
6556path.conicTo(1.00571f, 26.1288f, 1.09424f, 27.1248f, 0.707107f);
6557path.quadTo(1.1369f, 27.6047f, 1.19878f, 28.0825f);
6558path.conicTo(1.32721f, 29.0742f, 0.335496f, 29.2027f, 0.707107f);
6559path.conicTo(-0.656222f, 29.3311f, -0.784658f, 28.3394f, 0.707107f);
6560path.close();
6561path.moveTo(-0.999031f, 25.2248f);
6562path.quadTo(-1.00354f, 24.7027f, -0.987098f, 24.1809f);
6563path.conicTo(-0.955596f, 23.1814f, 0.0439078f, 23.2129f, 0.707107f);
6564path.conicTo(1.04341f, 23.2444f, 1.01191f, 24.2439f, 0.707107f);
6565path.quadTo(0.996728f, 24.7256f, 1.00089f, 25.2075f);
6566path.conicTo(1.00954f, 26.2075f, 0.00957754f, 26.2161f, 0.707107f);
6567path.conicTo(-0.990385f, 26.2248f, -0.999031f, 25.2248f, 0.707107f);
6568path.close();
6569path.moveTo(-0.836492f, 22.0887f);
6570path.quadTo(-0.778263f, 21.5719f, -0.699419f, 21.0579f);
6571path.conicTo(-0.5478f, 20.0695f, 0.440639f, 20.2211f, 0.707107f);
6572path.conicTo(1.42908f, 20.3727f, 1.27746f, 21.3612f, 0.707107f);
6573path.quadTo(1.20468f, 21.8356f, 1.15093f, 22.3126f);
6574path.conicTo(1.03896f, 23.3063f, 0.0452449f, 23.1944f, 0.707107f);
6575path.conicTo(-0.948466f, 23.0824f, -0.836492f, 22.0887f, 0.707107f);
6576path.close();
6577path.moveTo(-0.300548f, 19.0098f);
6578path.quadTo(-0.174573f, 18.4777f, -0.0263361f, 17.9514f);
6579path.conicTo(0.244762f, 16.9889f, 1.20731f, 17.26f, 0.707107f);
6580path.conicTo(2.16987f, 17.5311f, 1.89877f, 18.4936f, 0.707107f);
6581path.quadTo(1.76193f, 18.9794f, 1.64565f, 19.4706f);
6582path.conicTo(1.41526f, 20.4437f, 0.442159f, 20.2133f, 0.707107f);
6583path.conicTo(-0.530939f, 19.9829f, -0.300548f, 19.0098f, 0.707107f);
6584path.close();
6585path.moveTo(0.642658f, 15.9049f);
6586path.quadTo(0.827861f, 15.409f, 1.0331f, 14.9209f);
6587path.conicTo(1.42076f, 13.9991f, 2.34256f, 14.3868f, 0.707107f);
6588path.conicTo(3.26437f, 14.7744f, 2.87671f, 15.6962f, 0.707107f);
6589path.quadTo(2.68726f, 16.1467f, 2.5163f, 16.6046f);
6590path.conicTo(2.16648f, 17.5414f, 1.22967f, 17.1916f, 0.707107f);
6591path.conicTo(0.292846f, 16.8418f, 0.642658f, 15.9049f, 0.707107f);
6592path.close();
6593path.moveTo(1.91434f, 13.0395f);
6594path.quadTo(2.14856f, 12.5875f, 2.40031f, 12.1449f);
6595path.conicTo(2.89473f, 11.2757f, 3.76395f, 11.7701f, 0.707107f);
6596path.conicTo(4.63317f, 12.2645f, 4.13875f, 13.1337f, 0.707107f);
6597path.quadTo(3.90637f, 13.5423f, 3.69016f, 13.9596f);
6598path.conicTo(3.23014f, 14.8475f, 2.34223f, 14.3875f, 0.707107f);
6599path.conicTo(1.45432f, 13.9275f, 1.91434f, 13.0395f, 0.707107f);
6600path.close();
6601path.moveTo(3.45073f, 10.4525f);
6602path.quadTo(3.72744f, 10.0426f, 4.01954f, 9.64356f);
6603path.conicTo(4.61017f, 8.83661f, 5.41711f, 9.42725f, 0.707107f);
6604path.conicTo(6.22405f, 10.0179f, 5.63342f, 10.8248f, 0.707107f);
6605path.quadTo(5.36379f, 11.1932f, 5.10836f, 11.5716f);
6606path.conicTo(4.54884f, 12.4004f, 3.72003f, 11.8409f, 0.707107f);
6607path.conicTo(2.89121f, 11.2813f, 3.45073f, 10.4525f, 0.707107f);
6608path.close();
6609path.moveTo(5.2763f, 8.05964f);
6610path.quadTo(5.61273f, 7.66793f, 5.96445f, 7.2899f);
6611path.conicTo(6.6456f, 6.55776f, 7.37774f, 7.23892f, 0.707107f);
6612path.conicTo(8.10988f, 7.92008f, 7.42872f, 8.65221f, 0.707107f);
6613path.quadTo(7.10407f, 9.00116f, 6.79351f, 9.36274f);
6614path.conicTo(6.14196f, 10.1213f, 5.38336f, 9.46979f, 0.707107f);
6615path.conicTo(4.62475f, 8.81824f, 5.2763f, 8.05964f, 0.707107f);
6616path.close();
6617path.moveTo(7.45913f, 5.80839f);
6618path.quadTo(7.85457f, 5.44696f, 8.26455f, 5.10214f);
6619path.conicTo(9.02985f, 4.45847f, 9.67352f, 5.22377f, 0.707107f);
6620path.conicTo(10.3172f, 5.98907f, 9.5519f, 6.63274f, 0.707107f);
6621path.quadTo(9.17345f, 6.95105f, 8.80843f, 7.28467f);
6622path.conicTo(8.07029f, 7.95931f, 7.39564f, 7.22117f, 0.707107f);
6623path.conicTo(6.72099f, 6.48303f, 7.45913f, 5.80839f, 0.707107f);
6624path.close();
6625path.moveTo(9.98688f, 3.77251f);
6626path.quadTo(10.4153f, 3.46948f, 10.8557f, 3.18397f);
6627path.conicTo(11.6948f, 2.63996f, 12.2388f, 3.47904f, 0.707107f);
6628path.conicTo(12.7828f, 4.31812f, 11.9437f, 4.86213f, 0.707107f);
6629path.quadTo(11.5373f, 5.12566f, 11.1417f, 5.40539f);
6630path.conicTo(10.3253f, 5.98282f, 9.74787f, 5.16638f, 0.707107f);
6631path.conicTo(9.17044f, 4.34994f, 9.98688f, 3.77251f, 0.707107f);
6632path.close();
6633path.moveTo(12.6283f, 2.13208f);
6634path.quadTo(13.0861f, 1.88442f, 13.5534f, 1.65529f);
6635path.conicTo(14.4513f, 1.21504f, 14.8915f, 2.11291f, 0.707107f);
6636path.conicTo(15.3318f, 3.01078f, 14.4339f, 3.45104f, 0.707107f);
6637path.quadTo(14.0025f, 3.66255f, 13.58f, 3.89115f);
6638path.conicTo(12.7005f, 4.36698f, 12.2246f, 3.48744f, 0.707107f);
6639path.conicTo(11.7488f, 2.60791f, 12.6283f, 2.13208f, 0.707107f);
6640path.close();
6641path.moveTo(15.4718f, 0.808815f);
6642path.quadTo(15.9627f, 0.615476f, 16.461f, 0.442208f);
6643path.conicTo(17.4055f, 0.113784f, 17.7339f, 1.05831f, 0.707107f);
6644path.conicTo(18.0624f, 2.00284f, 17.1178f, 2.33127f, 0.707107f);
6645path.quadTo(16.6578f, 2.49121f, 16.2047f, 2.66968f);
6646path.conicTo(15.2743f, 3.03614f, 14.9078f, 2.10571f, 0.707107f);
6647path.conicTo(14.5414f, 1.17528f, 15.4718f, 0.808815f, 0.707107f);
6648path.close();
6649path.moveTo(18.4879f, -0.171272f);
6650path.quadTo(19.0019f, -0.304236f, 19.5208f, -0.416111f);
6651path.conicTo(20.4984f, -0.62685f, 20.7091f, 0.350692f, 0.707107f);
6652path.conicTo(20.9198f, 1.32823f, 19.9423f, 1.53897f, 0.707107f);
6653path.quadTo(19.4633f, 1.64224f, 18.9889f, 1.76498f);
6654path.conicTo(18.0207f, 2.01544f, 17.7703f, 1.04732f, 0.707107f);
6655path.conicTo(17.5198f, 0.0791926f, 18.4879f, -0.171272f, 0.707107f);
6656path.close();
6657path.moveTo(21.5882f, -0.77517f);
6658path.quadTo(22.1056f, -0.843665f, 22.6254f, -0.891339f);
6659path.conicTo(23.6212f, -0.982672f, 23.7126f, 0.0131486f, 0.707107f);
6660path.conicTo(23.8039f, 1.00897f, 22.8081f, 1.1003f, 0.707107f);
6661path.quadTo(22.3283f, 1.14431f, 21.8506f, 1.20754f);
6662path.conicTo(20.8592f, 1.33876f, 20.728f, 0.347405f, 0.707107f);
6663path.conicTo(20.5968f, -0.643948f, 21.5882f, -0.77517f, 0.707107f);
6664path.close();
6665path.moveTo(24.7026f, -0.998301f);
6666path.quadTo(25.2241f, -1.00426f, 25.7453f, -0.989316f);
6667path.conicTo(26.7449f, -0.960651f, 26.7162f, 0.0389383f, 0.707107f);
6668path.conicTo(26.6876f, 1.03853f, 25.688f, 1.00986f, 0.707107f);
6669path.quadTo(25.2068f, 0.996064f, 24.7255f, 1.00157f);
6670path.conicTo(23.7256f, 1.013f, 23.7141f, 0.0130688f, 0.707107f);
6671path.conicTo(23.7027f, -0.986866f, 24.7026f, -0.998301f, 0.707107f);
6672path.close();
6673path.moveTo(27.8388f, -0.844563f);
6674path.quadTo(28.3559f, -0.787759f, 28.8704f, -0.710314f);
6675path.conicTo(29.8592f, -0.561454f, 29.7104f, 0.427404f, 0.707107f);
6676path.conicTo(29.5615f, 1.41626f, 28.5726f, 1.2674f, 0.707107f);
6677path.quadTo(28.0978f, 1.19591f, 27.6204f, 1.14348f);
6678path.conicTo(26.6264f, 1.0343f, 26.7356f, 0.0402742f, 0.707107f);
6679path.conicTo(26.8447f, -0.953747f, 27.8388f, -0.844563f, 0.707107f);
6680path.close();
6681path.moveTo(30.9153f, -0.318153f);
6682path.quadTo(31.4481f, -0.193671f, 31.9752f, -0.046875f);
6683path.conicTo(32.9386f, 0.221405f, 32.6703f, 1.18475f, 0.707107f);
6684path.conicTo(32.402f, 2.14809f, 31.4387f, 1.87981f, 0.707107f);
6685path.quadTo(30.9521f, 1.74431f, 30.4603f, 1.6294f);
6686path.conicTo(29.4865f, 1.40189f, 29.714f, 0.428111f, 0.707107f);
6687path.conicTo(29.9416f, -0.545664f, 30.9153f, -0.318153f, 0.707107f);
6688path.close();
6689path.moveTo(34.0252f, 0.616677f);
6690path.quadTo(34.5221f, 0.800609f, 35.0111f, 1.00465f);
6691path.conicTo(35.934f, 1.3897f, 35.549f, 2.31259f, 0.707107f);
6692path.conicTo(35.1639f, 3.23549f, 34.241f, 2.85044f, 0.707107f);
6693path.quadTo(33.7896f, 2.66211f, 33.3309f, 2.49232f);
6694path.conicTo(32.3931f, 2.1452f, 32.7402f, 1.20738f, 0.707107f);
6695path.conicTo(33.0873f, 0.269559f, 34.0252f, 0.616677f, 0.707107f);
6696path.close();
6697path.moveTo(36.8967f, 1.88141f);
6698path.quadTo(37.3499f, 2.11462f, 37.7936f, 2.3654f);
6699path.conicTo(38.6641f, 2.85746f, 38.1721f, 3.72802f, 0.707107f);
6700path.conicTo(37.68f, 4.59858f, 36.8094f, 4.10652f, 0.707107f);
6701path.quadTo(36.3999f, 3.87504f, 35.9815f, 3.65976f);
6702path.conicTo(35.0924f, 3.2022f, 35.5499f, 2.31302f, 0.707107f);
6703path.conicTo(36.0075f, 1.42384f, 36.8967f, 1.88141f, 0.707107f);
6704path.close();
6705path.moveTo(39.4914f, 3.413f);
6706path.lineTo(39.5381f, 3.44439f);
6707path.quadTo(39.9244f, 3.70494f, 40.3002f, 3.97845f);
6708path.conicTo(41.1087f, 4.56692f, 40.5202f, 5.37544f, 0.707107f);
6709path.conicTo(39.9317f, 6.18396f, 39.1232f, 5.59549f, 0.707107f);
6710path.quadTo(38.7763f, 5.34298f, 38.4215f, 5.10371f);
6711path.lineTo(38.3749f, 5.07232f);
6712path.conicTo(37.5452f, 4.51406f, 38.1035f, 3.68439f, 0.707107f);
6713path.conicTo(38.6618f, 2.85473f, 39.4914f, 3.413f, 0.707107f);
6714path.close();
6715path.moveTo(41.8859f, 5.22965f);
6716path.quadTo(42.2782f, 5.56471f, 42.6568f, 5.91499f);
6717path.conicTo(43.3908f, 6.5941f, 42.7117f, 7.32814f, 0.707107f);
6718path.conicTo(42.0326f, 8.06218f, 41.2986f, 7.38308f, 0.707107f);
6719path.quadTo(40.949f, 7.05968f, 40.587f, 6.75043f);
6720path.conicTo(39.8266f, 6.10097f, 40.476f, 5.34058f, 0.707107f);
6721path.conicTo(41.1255f, 4.58018f, 41.8859f, 5.22965f, 0.707107f);
6722path.close();
6723path.moveTo(44.1413f, 7.40421f);
6724path.quadTo(44.5035f, 7.79829f, 44.8493f, 8.20695f);
6725path.conicTo(45.4952f, 8.97038f, 44.7317f, 9.61627f, 0.707107f);
6726path.conicTo(43.9683f, 10.2622f, 43.3224f, 9.49874f, 0.707107f);
6727path.quadTo(43.0033f, 9.1215f, 42.6689f, 8.75773f);
6728path.conicTo(41.9921f, 8.02152f, 42.7283f, 7.34476f, 0.707107f);
6729path.conicTo(43.4645f, 6.668f, 44.1413f, 7.40421f, 0.707107f);
6730path.close();
6731path.moveTo(46.183f, 9.9242f);
6732path.quadTo(46.4888f, 10.3539f, 46.777f, 10.7957f);
6733path.conicTo(47.3233f, 11.6332f, 46.4857f, 12.1796f, 0.707107f);
6734path.conicTo(45.6482f, 12.7259f, 45.1018f, 11.8883f, 0.707107f);
6735path.quadTo(44.8358f, 11.4805f, 44.5535f, 11.0839f);
6736path.conicTo(43.9737f, 10.2691f, 44.7884f, 9.6893f, 0.707107f);
6737path.conicTo(45.6032f, 9.10947f, 46.183f, 9.9242f, 0.707107f);
6738path.close();
6739path.moveTo(47.8333f, 12.5645f);
6740path.quadTo(48.0821f, 13.0214f, 48.3125f, 13.4879f);
6741path.conicTo(48.7552f, 14.3845f, 47.8586f, 14.8273f, 0.707107f);
6742path.conicTo(46.962f, 15.2701f, 46.5192f, 14.3734f, 0.707107f);
6743path.quadTo(46.3065f, 13.9428f, 46.0769f, 13.5211f);
6744path.conicTo(45.5986f, 12.6429f, 46.4768f, 12.1646f, 0.707107f);
6745path.conicTo(47.355f, 11.6863f, 47.8333f, 12.5645f, 0.707107f);
6746path.close();
6747path.moveTo(49.1641f, 15.4033f);
6748path.quadTo(49.3588f, 15.8935f, 49.5334f, 16.3912f);
6749path.conicTo(49.8645f, 17.3348f, 48.9209f, 17.6659f, 0.707107f);
6750path.conicTo(47.9773f, 17.997f, 47.6462f, 17.0534f, 0.707107f);
6751path.quadTo(47.485f, 16.5939f, 47.3053f, 16.1415f);
6752path.conicTo(46.9362f, 15.2121f, 47.8656f, 14.843f, 0.707107f);
6753path.conicTo(48.795f, 14.4739f, 49.1641f, 15.4033f, 0.707107f);
6754path.close();
6755path.moveTo(50.1526f, 18.4161f);
6756path.quadTo(50.287f, 18.9296f, 50.4003f, 19.4482f);
6757path.conicTo(50.6139f, 20.4252f, 49.6369f, 20.6387f, 0.707107f);
6758path.conicTo(48.66f, 20.8522f, 48.4465f, 19.8753f, 0.707107f);
6759path.quadTo(48.3419f, 19.3966f, 48.2178f, 18.9225f);
6760path.conicTo(47.9645f, 17.9551f, 48.9319f, 17.7019f, 0.707107f);
6761path.conicTo(49.8993f, 17.4487f, 50.1526f, 18.4161f, 0.707107f);
6762path.close();
6763path.moveTo(50.7655f, 21.5157f);
6764path.quadTo(50.8354f, 22.033f, 50.8846f, 22.5528f);
6765path.conicTo(50.9787f, 23.5483f, 49.9831f, 23.6425f, 0.707107f);
6766path.conicTo(48.9876f, 23.7366f, 48.8935f, 22.741f, 0.707107f);
6767path.quadTo(48.8481f, 22.2613f, 48.7835f, 21.7837f);
6768path.conicTo(48.6495f, 20.7928f, 49.6405f, 20.6587f, 0.707107f);
6769path.conicTo(50.6315f, 20.5247f, 50.7655f, 21.5157f, 0.707107f);
6770path.close();
6771path.moveTo(50.9974f, 24.6301f);
6772path.quadTo(51.0048f, 25.1509f, 50.9913f, 25.6715f);
6773path.conicTo(50.9655f, 26.6712f, 49.9658f, 26.6454f, 0.707107f);
6774path.conicTo(48.9662f, 26.6196f, 48.992f, 25.6199f, 0.707107f);
6775path.quadTo(49.0044f, 25.1393f, 48.9976f, 24.6585f);
6776path.conicTo(48.9834f, 23.6586f, 49.9833f, 23.6444f, 0.707107f);
6777path.conicTo(50.9832f, 23.6302f, 50.9974f, 24.6301f, 0.707107f);
6778path.close();
6779path.moveTo(50.8524f, 27.7662f);
6780path.quadTo(50.7971f, 28.2837f, 50.721f, 28.7986f);
6781path.conicTo(50.5749f, 29.7879f, 49.5856f, 29.6418f, 0.707107f);
6782path.conicTo(48.5963f, 29.4957f, 48.7425f, 28.5064f, 0.707107f);
6783path.quadTo(48.8127f, 28.0311f, 48.8638f, 27.5534f);
6784path.conicTo(48.9702f, 26.5591f, 49.9645f, 26.6655f, 0.707107f);
6785path.conicTo(50.9588f, 26.7718f, 50.8524f, 27.7662f, 0.707107f);
6786path.close();
6787path.moveTo(50.3355f, 30.8404f);
6788path.quadTo(50.2125f, 31.3739f, 50.0672f, 31.9018f);
6789path.conicTo(49.8018f, 32.8659f, 48.8376f, 32.6005f, 0.707107f);
6790path.conicTo(47.8735f, 32.335f, 48.139f, 31.3709f, 0.707107f);
6791path.quadTo(48.2731f, 30.8836f, 48.3867f, 30.3912f);
6792path.conicTo(48.6113f, 29.4167f, 49.5857f, 29.6413f, 0.707107f);
6793path.conicTo(50.5602f, 29.866f, 50.3355f, 30.8404f, 0.707107f);
6794path.close();
6795path.moveTo(49.4091f, 33.9552f);
6796path.quadTo(49.2264f, 34.4531f, 49.0236f, 34.9431f);
6797path.conicTo(48.6412f, 35.8671f, 47.7172f, 35.4846f, 0.707107f);
6798path.conicTo(46.7932f, 35.1022f, 47.1757f, 34.1782f, 0.707107f);
6799path.quadTo(47.3629f, 33.7259f, 47.5315f, 33.2663f);
6800path.conicTo(47.8759f, 32.3275f, 48.8147f, 32.672f, 0.707107f);
6801path.conicTo(49.7535f, 33.0164f, 49.4091f, 33.9552f, 0.707107f);
6802path.close();
6803path.moveTo(48.1514f, 36.8328f);
6804path.quadTo(47.9191f, 37.2871f, 47.6694f, 37.7318f);
6805path.conicTo(47.1797f, 38.6038f, 46.3078f, 38.1141f, 0.707107f);
6806path.conicTo(45.4359f, 37.6244f, 45.9256f, 36.7525f, 0.707107f);
6807path.quadTo(46.1562f, 36.3418f, 46.3705f, 35.9226f);
6808path.conicTo(46.8256f, 35.0321f, 47.716f, 35.4872f, 0.707107f);
6809path.conicTo(48.6065f, 35.9423f, 48.1514f, 36.8328f, 0.707107f);
6810path.close();
6811path.moveTo(46.6245f, 39.4354f);
6812path.lineTo(46.5563f, 39.537f);
6813path.quadTo(46.3146f, 39.8955f, 46.0624f, 40.2438f);
6814path.conicTo(45.4761f, 41.0539f, 44.666f, 40.4676f, 0.707107f);
6815path.conicTo(43.8559f, 39.8813f, 44.4422f, 39.0712f, 0.707107f);
6816path.quadTo(44.6749f, 38.7498f, 44.8955f, 38.4226f);
6817path.lineTo(44.9637f, 38.3211f);
6818path.conicTo(45.5209f, 37.4907f, 46.3513f, 38.0479f, 0.707107f);
6819path.conicTo(47.1817f, 38.605f, 46.6245f, 39.4354f, 0.707107f);
6820path.close();
6821path.moveTo(44.8168f, 41.8314f);
6822path.quadTo(44.4832f, 42.2241f, 44.1342f, 42.6034f);
6823path.conicTo(43.4572f, 43.3394f, 42.7212f, 42.6623f, 0.707107f);
6824path.conicTo(41.9853f, 41.9853f, 42.6623f, 41.2494f, 0.707107f);
6825path.quadTo(42.9845f, 40.8992f, 43.2924f, 40.5366f);
6826path.conicTo(43.9398f, 39.7745f, 44.702f, 40.4218f, 0.707107f);
6827path.conicTo(45.4642f, 41.0692f, 44.8168f, 41.8314f, 0.707107f);
6828path.close();
6829path.moveTo(42.6505f, 44.0908f);
6830path.quadTo(42.2577f, 44.454f, 41.8504f, 44.8006f);
6831path.conicTo(41.0888f, 45.4487f, 40.4408f, 44.6871f, 0.707107f);
6832path.conicTo(39.7927f, 43.9256f, 40.5542f, 43.2775f, 0.707107f);
6833path.quadTo(40.9302f, 42.9575f, 41.2928f, 42.6223f);
6834path.conicTo(42.027f, 41.9434f, 42.7059f, 42.6777f, 0.707107f);
6835path.conicTo(43.3848f, 43.412f, 42.6505f, 44.0908f, 0.707107f);
6836path.close();
6837path.moveTo(40.1383f, 46.1384f);
6838path.quadTo(39.7073f, 46.4471f, 39.2641f, 46.7378f);
6839path.conicTo(38.4281f, 47.2865f, 37.8795f, 46.4504f, 0.707107f);
6840path.conicTo(37.3308f, 45.6143f, 38.1669f, 45.0657f, 0.707107f);
6841path.quadTo(38.576f, 44.7972f, 38.9738f, 44.5124f);
6842path.conicTo(39.7868f, 43.9301f, 40.369f, 44.7432f, 0.707107f);
6843path.conicTo(40.9513f, 45.5562f, 40.1383f, 46.1384f, 0.707107f);
6844path.close();
6845path.moveTo(37.4991f, 47.7985f);
6846path.quadTo(37.0431f, 48.0485f, 36.5775f, 48.2801f);
6847path.conicTo(35.6821f, 48.7254f, 35.2368f, 47.83f, 0.707107f);
6848path.conicTo(34.7915f, 46.9346f, 35.6869f, 46.4893f, 0.707107f);
6849path.quadTo(36.1167f, 46.2755f, 36.5376f, 46.0448f);
6850path.conicTo(37.4145f, 45.5641f, 37.8952f, 46.4409f, 0.707107f);
6851path.conicTo(38.376f, 47.3178f, 37.4991f, 47.7985f, 0.707107f);
6852path.close();
6853path.moveTo(34.6651f, 49.1368f);
6854path.quadTo(34.1756f, 49.3328f, 33.6785f, 49.5089f);
6855path.conicTo(32.7358f, 49.8427f, 32.402f, 48.9f, 0.707107f);
6856path.conicTo(32.0682f, 47.9574f, 33.0109f, 47.6236f, 0.707107f);
6857path.quadTo(33.4697f, 47.4611f, 33.9216f, 47.2801f);
6858path.conicTo(34.85f, 46.9084f, 35.2217f, 47.8368f, 0.707107f);
6859path.conicTo(35.5934f, 48.7651f, 34.6651f, 49.1368f, 0.707107f);
6860path.close();
6861path.moveTo(31.6557f, 50.1337f);
6862path.quadTo(31.1425f, 50.2696f, 30.6243f, 50.3844f);
6863path.conicTo(29.648f, 50.6007f, 29.4317f, 49.6244f, 0.707107f);
6864path.conicTo(29.2153f, 48.6481f, 30.1917f, 48.4317f, 0.707107f);
6865path.quadTo(30.6701f, 48.3257f, 31.1437f, 48.2003f);
6866path.conicTo(32.1104f, 47.9443f, 32.3664f, 48.911f, 0.707107f);
6867path.conicTo(32.6223f, 49.8777f, 31.6557f, 50.1337f, 0.707107f);
6868path.close();
6869path.moveTo(28.5567f, 50.7556f);
6870path.quadTo(28.0395f, 50.827f, 27.5198f, 50.8776f);
6871path.conicTo(26.5245f, 50.9745f, 26.4276f, 49.9792f, 0.707107f);
6872path.conicTo(26.3307f, 48.9839f, 27.326f, 48.887f, 0.707107f);
6873path.quadTo(27.8056f, 48.8403f, 28.2831f, 48.7744f);
6874path.conicTo(29.2737f, 48.6376f, 29.4105f, 49.6282f, 0.707107f);
6875path.conicTo(29.5473f, 50.6188f, 28.5567f, 50.7556f, 0.707107f);
6876path.close();
6877path.moveTo(25.4424f, 50.9962f);
6878path.quadTo(24.9222f, 51.0051f, 24.4022f, 50.9931f);
6879path.conicTo(23.4025f, 50.9701f, 23.4255f, 49.9704f, 0.707107f);
6880path.conicTo(23.4485f, 48.9707f, 24.4482f, 48.9937f, 0.707107f);
6881path.quadTo(24.9283f, 49.0047f, 25.4084f, 48.9965f);
6882path.conicTo(26.4083f, 48.9795f, 26.4253f, 49.9794f, 0.707107f);
6883path.conicTo(26.4423f, 50.9792f, 25.4424f, 50.9962f, 0.707107f);
6884path.close();
6885path.moveTo(22.3065f, 50.8601f);
6886path.quadTo(21.7885f, 50.8062f, 21.2732f, 50.7315f);
6887path.conicTo(20.2835f, 50.5882f, 20.4268f, 49.5985f, 0.707107f);
6888path.conicTo(20.5702f, 48.6088f, 21.5599f, 48.7522f, 0.707107f);
6889path.quadTo(22.0355f, 48.8211f, 22.5136f, 48.8709f);
6890path.conicTo(23.5083f, 48.9745f, 23.4047f, 49.9691f, 0.707107f);
6891path.conicTo(23.3011f, 50.9637f, 22.3065f, 50.8601f, 0.707107f);
6892path.close();
6893path.moveTo(19.2346f, 50.3527f);
6894path.quadTo(18.7003f, 50.2312f, 18.1717f, 50.0873f);
6895path.conicTo(17.2068f, 49.8247f, 17.4694f, 48.8598f, 0.707107f);
6896path.conicTo(17.732f, 47.8949f, 18.6969f, 48.1575f, 0.707107f);
6897path.quadTo(19.185f, 48.2904f, 19.6781f, 48.4025f);
6898path.conicTo(20.6532f, 48.6243f, 20.4314f, 49.5994f, 0.707107f);
6899path.conicTo(20.2097f, 50.5745f, 19.2346f, 50.3527f, 0.707107f);
6900path.close();
6901path.moveTo(16.1149f, 49.4347f);
6902path.quadTo(15.6161f, 49.2533f, 15.1251f, 49.0517f);
6903path.conicTo(14.2f, 48.6719f, 14.5798f, 47.7469f, 0.707107f);
6904path.conicTo(14.9596f, 46.8218f, 15.8847f, 47.2016f, 0.707107f);
6905path.quadTo(16.3379f, 47.3877f, 16.7984f, 47.5551f);
6906path.conicTo(17.7382f, 47.8969f, 17.3964f, 48.8366f, 0.707107f);
6907path.conicTo(17.0547f, 49.7764f, 16.1149f, 49.4347f, 0.707107f);
6908path.close();
6909path.moveTo(13.2313f, 48.184f);
6910path.quadTo(12.776f, 47.9529f, 12.33f, 47.704f);
6911path.conicTo(11.4568f, 47.2167f, 11.9441f, 46.3434f, 0.707107f);
6912path.conicTo(12.4314f, 45.4702f, 13.3046f, 45.9575f, 0.707107f);
6913path.quadTo(13.7162f, 46.1872f, 14.1365f, 46.4006f);
6914path.conicTo(15.0282f, 46.8532f, 14.5756f, 47.7449f, 0.707107f);
6915path.conicTo(14.123f, 48.6366f, 13.2313f, 48.184f, 0.707107f);
6916path.close();
6917path.moveTo(10.6208f, 46.6619f);
6918path.lineTo(10.4641f, 46.5571f);
6919path.quadTo(10.1333f, 46.334f, 9.81253f, 46.1031f);
6920path.conicTo(9.00087f, 45.519f, 9.585f, 44.7073f, 0.707107f);
6921path.conicTo(10.1691f, 43.8957f, 10.9808f, 44.4798f, 0.707107f);
6922path.quadTo(11.2769f, 44.6929f, 11.5763f, 44.8948f);
6923path.lineTo(11.7329f, 44.9996f);
6924path.conicTo(12.564f, 45.5557f, 12.008f, 46.3868f, 0.707107f);
6925path.conicTo(11.4519f, 47.2179f, 10.6208f, 46.6619f, 0.707107f);
6926path.close();
6927path.moveTo(8.22326f, 44.8631f);
6928path.quadTo(7.82986f, 44.5308f, 7.44999f, 44.1833f);
6929path.conicTo(6.71217f, 43.5082f, 7.38718f, 42.7704f, 0.707107f);
6930path.conicTo(8.06219f, 42.0326f, 8.8f, 42.7076f, 0.707107f);
6931path.quadTo(9.15066f, 43.0284f, 9.51375f, 43.3351f);
6932path.conicTo(10.2777f, 43.9804f, 9.63248f, 44.7443f, 0.707107f);
6933path.conicTo(8.98724f, 45.5083f, 8.22326f, 44.8631f, 0.707107f);
6934path.close();
6935path.moveTo(5.95972f, 42.705f);
6936path.quadTo(5.59577f, 42.3136f, 5.24823f, 41.9076f);
6937path.conicTo(4.59793f, 41.148f, 5.3576f, 40.4977f, 0.707107f);
6938path.conicTo(6.11728f, 39.8473f, 6.76758f, 40.607f, 0.707107f);
6939path.quadTo(7.08843f, 40.9818f, 7.42436f, 41.3431f);
6940path.conicTo(8.10532f, 42.0754f, 7.373f, 42.7564f, 0.707107f);
6941path.conicTo(6.64068f, 43.4373f, 5.95972f, 42.705f, 0.707107f);
6942path.close();
6943path.moveTo(3.90635f, 40.2006f);
6944path.quadTo(3.59492f, 39.7684f, 3.30147f, 39.3239f);
6945path.conicTo(2.75055f, 38.4893f, 3.58511f, 37.9384f, 0.707107f);
6946path.conicTo(4.41967f, 37.3875f, 4.97059f, 38.222f, 0.707107f);
6947path.quadTo(5.24148f, 38.6324f, 5.52894f, 39.0313f);
6948path.conicTo(6.11358f, 39.8426f, 5.30228f, 40.4272f, 0.707107f);
6949path.conicTo(4.49099f, 41.0119f, 3.90635f, 40.2006f, 0.707107f);
6950path.close();
6951path.moveTo(2.23643f, 37.5626f);
6952path.quadTo(1.98525f, 37.1075f, 1.75248f, 36.6427f);
6953path.conicTo(1.30469f, 35.7486f, 2.19883f, 35.3008f, 0.707107f);
6954path.conicTo(3.09296f, 34.853f, 3.54076f, 35.7471f, 0.707107f);
6955path.quadTo(3.75563f, 36.1762f, 3.98747f, 36.5963f);
6956path.conicTo(4.47065f, 37.4718f, 3.59513f, 37.955f, 0.707107f);
6957path.conicTo(2.71961f, 38.4382f, 2.23643f, 37.5626f, 0.707107f);
6958path.close();
6959path.moveTo(0.890647f, 34.7334f);
6960path.quadTo(0.69328f, 34.2445f, 0.515902f, 33.7481f);
6961path.conicTo(0.179435f, 32.8064f, 1.12113f, 32.4699f, 0.707107f);
6962path.conicTo(2.06282f, 32.1335f, 2.39929f, 33.0752f, 0.707107f);
6963path.quadTo(2.56303f, 33.5334f, 2.74521f, 33.9847f);
6964path.conicTo(3.11957f, 34.912f, 2.19229f, 35.2863f, 0.707107f);
6965path.conicTo(1.26501f, 35.6607f, 0.890647f, 34.7334f, 0.707107f);
6966path.close();
6967path.moveTo(-0.114587f, 31.7274f);
6968path.quadTo(-0.251922f, 31.2147f, -0.368218f, 30.6968f);
6969path.conicTo(-0.587327f, 29.7211f, 0.388373f, 29.502f, 0.707107f);
6970path.conicTo(1.36407f, 29.2829f, 1.58318f, 30.2586f, 0.707107f);
6971path.quadTo(1.69053f, 30.7366f, 1.8173f, 31.2099f);
6972path.conicTo(2.07605f, 32.1758f, 1.1101f, 32.4346f, 0.707107f);
6973path.conicTo(0.144159f, 32.6933f, -0.114587f, 31.7274f, 0.707107f);
6974path.close();
6975path.moveTo(-0.745485f, 28.6291f);
6976path.quadTo(-0.818367f, 28.112f, -0.870432f, 27.5925f);
6977path.conicTo(-0.970142f, 26.5974f, 0.0248742f, 26.4977f, 0.707107f);
6978path.conicTo(1.01989f, 26.398f, 1.1196f, 27.393f, 0.707107f);
6979path.quadTo(1.16766f, 27.8726f, 1.23494f, 28.3499f);
6980path.conicTo(1.37452f, 29.3401f, 0.384305f, 29.4797f, 0.707107f);
6981path.conicTo(-0.605905f, 29.6193f, -0.745485f, 28.6291f, 0.707107f);
6982path.close();
6983path.moveTo(-0.994901f, 25.515f);
6984path.quadTo(-1.00519f, 24.9955f, -0.994722f, 24.4761f);
6985path.conicTo(-0.97457f, 23.4763f, 0.0252273f, 23.4964f, 0.707107f);
6986path.conicTo(1.02502f, 23.5166f, 1.00487f, 24.5164f, 0.707107f);
6987path.quadTo(0.995207f, 24.9959f, 1.00471f, 25.4754f);
6988path.conicTo(1.02451f, 26.4752f, 0.0247103f, 26.495f, 0.707107f);
6989path.conicTo(-0.975093f, 26.5148f, -0.994901f, 25.515f, 0.707107f);
6990path.close();
6991path.moveTo(-0.867571f, 22.3792f);
6992path.quadTo(-0.81506f, 21.8609f, -0.741825f, 21.3451f);
6993path.conicTo(-0.60125f, 20.355f, 0.38882f, 20.4956f, 0.707107f);
6994path.conicTo(1.37889f, 20.6361f, 1.23831f, 21.6262f, 0.707107f);
6995path.quadTo(1.17071f, 22.1023f, 1.12224f, 22.5807f);
6996path.conicTo(1.02144f, 23.5757f, 0.026537f, 23.4749f, 0.707107f);
6997path.conicTo(-0.96837f, 23.3741f, -0.867571f, 22.3792f, 0.707107f);
6998path.close();
6999path.moveTo(-0.369678f, 19.3097f);
7000path.quadTo(-0.249693f, 18.7748f, -0.107265f, 18.2453f);
7001path.conicTo(0.152529f, 17.2797f, 1.11819f, 17.5395f, 0.707107f);
7002path.conicTo(2.08386f, 17.7993f, 1.82406f, 18.7649f, 0.707107f);
7003path.quadTo(1.69259f, 19.2536f, 1.58184f, 19.7474f);
7004path.conicTo(1.36298f, 20.7232f, 0.387221f, 20.5043f, 0.707107f);
7005path.conicTo(-0.588536f, 20.2855f, -0.369678f, 19.3097f, 0.707107f);
7006path.close();
7007path.moveTo(0.539863f, 16.1851f);
7008path.quadTo(0.719962f, 15.6854f, 0.920307f, 15.1934f);
7009path.conicTo(1.29748f, 14.2673f, 2.22362f, 14.6445f, 0.707107f);
7010path.conicTo(3.14976f, 15.0216f, 2.7726f, 15.9478f, 0.707107f);
7011path.quadTo(2.58765f, 16.4019f, 2.42141f, 16.8632f);
7012path.conicTo(2.08237f, 17.804f, 1.1416f, 17.4649f, 0.707107f);
7013path.conicTo(0.200823f, 17.1259f, 0.539863f, 16.1851f, 0.707107f);
7014path.close();
7015path.moveTo(1.78353f, 13.2955f);
7016path.quadTo(2.01364f, 12.8391f, 2.26151f, 12.392f);
7017path.conicTo(2.74643f, 11.5175f, 3.62099f, 12.0024f, 0.707107f);
7018path.conicTo(4.49555f, 12.4873f, 4.01063f, 13.3618f, 0.707107f);
7019path.quadTo(3.78183f, 13.7745f, 3.56941f, 14.1958f);
7020path.conicTo(3.11923f, 15.0888f, 2.22629f, 14.6386f, 0.707107f);
7021path.conicTo(1.33336f, 14.1884f, 1.78353f, 13.2955f, 0.707107f);
7022path.close();
7023path.moveTo(3.30083f, 10.6771f);
7024path.lineTo(3.44218f, 10.4652f);
7025path.quadTo(3.6466f, 10.1621f, 3.85641f, 9.86895f);
7026path.conicTo(4.43837f, 9.05574f, 5.25159f, 9.6377f, 0.707107f);
7027path.conicTo(6.0648f, 10.2197f, 5.48284f, 11.0329f, 0.707107f);
7028path.quadTo(5.28917f, 11.3035f, 5.10592f, 11.5752f);
7029path.lineTo(4.96457f, 11.787f);
7030path.conicTo(4.4096f, 12.6189f, 3.57773f, 12.0639f, 0.707107f);
7031path.conicTo(2.74586f, 11.509f, 3.30083f, 10.6771f, 0.707107f);
7032path.close();
7033path.moveTo(5.0909f, 8.27793f);
7034path.quadTo(5.42174f, 7.88403f, 5.76791f, 7.50353f);
7035path.conicTo(6.44085f, 6.76383f, 7.18054f, 7.43678f, 0.707107f);
7036path.conicTo(7.92024f, 8.10972f, 7.24729f, 8.84942f, 0.707107f);
7037path.quadTo(6.92775f, 9.20065f, 6.62237f, 9.56424f);
7038path.conicTo(5.97921f, 10.33f, 5.21348f, 9.68682f, 0.707107f);
7039path.conicTo(4.44774f, 9.04367f, 5.0909f, 8.27793f, 0.707107f);
7040path.close();
7041path.moveTo(7.24064f, 6.0104f);
7042path.quadTo(7.63069f, 5.64561f, 8.03537f, 5.29717f);
7043path.conicTo(8.79318f, 4.64469f, 9.44566f, 5.40249f, 0.707107f);
7044path.conicTo(10.0981f, 6.16029f, 9.34034f, 6.81278f, 0.707107f);
7045path.quadTo(8.96678f, 7.13442f, 8.60675f, 7.47113f);
7046path.conicTo(7.87638f, 8.15419f, 7.19332f, 7.42382f, 0.707107f);
7047path.conicTo(6.51027f, 6.69345f, 7.24064f, 6.0104f, 0.707107f);
7048path.close();
7049path.moveTo(9.73726f, 3.95128f);
7050path.quadTo(10.1706f, 3.63704f, 10.6165f, 3.34092f);
7051path.conicTo(11.4496f, 2.78771f, 12.0028f, 3.62075f, 0.707107f);
7052path.conicTo(12.556f, 4.4538f, 11.7229f, 5.007f, 0.707107f);
7053path.quadTo(11.3113f, 5.28035f, 10.9113f, 5.57041f);
7054path.conicTo(10.1018f, 6.15744f, 9.51472f, 5.34787f, 0.707107f);
7055path.conicTo(8.92769f, 4.53831f, 9.73726f, 3.95128f, 0.707107f);
7056path.close();
7057path.moveTo(12.374f, 2.27153f);
7058path.quadTo(12.8282f, 2.01921f, 13.2921f, 1.78522f);
7059path.conicTo(14.185f, 1.33492f, 14.6353f, 2.22779f, 0.707107f);
7060path.conicTo(15.0856f, 3.12067f, 14.1927f, 3.57097f, 0.707107f);
7061path.quadTo(13.7645f, 3.78696f, 13.3452f, 4.01988f);
7062path.conicTo(12.471f, 4.5055f, 11.9854f, 3.63132f, 0.707107f);
7063path.conicTo(11.4998f, 2.75715f, 12.374f, 2.27153f, 0.707107f);
7064path.close();
7065path.moveTo(15.1984f, 0.918296f);
7066path.quadTo(15.6866f, 0.719602f, 16.1824f, 0.540851f);
7067path.conicTo(17.1231f, 0.20171f, 17.4623f, 1.14245f, 0.707107f);
7068path.conicTo(17.8014f, 2.08318f, 16.8607f, 2.42232f, 0.707107f);
7069path.quadTo(16.403f, 2.58733f, 15.9524f, 2.77074f);
7070path.conicTo(15.0261f, 3.14772f, 14.6492f, 2.2215f, 0.707107f);
7071path.conicTo(14.2722f, 1.29528f, 15.1984f, 0.918296f, 0.707107f);
7072path.close();
7073path.moveTo(18.201f, -0.0952874f);
7074path.quadTo(18.7132f, -0.234075f, 19.2308f, -0.351842f);
7075path.conicTo(20.2058f, -0.573734f, 20.4277f, 0.401338f, 0.707107f);
7076path.conicTo(20.6496f, 1.37641f, 19.6745f, 1.5983f, 0.707107f);
7077path.quadTo(19.1968f, 1.70701f, 18.724f, 1.83512f);
7078path.conicTo(17.7588f, 2.09662f, 17.4973f, 1.13142f, 0.707107f);
7079path.conicTo(17.2358f, 0.166216f, 18.201f, -0.0952874f, 0.707107f);
7080path.close();
7081path.moveTo(21.2986f, -0.73518f);
7082path.quadTo(21.8155f, -0.809526f, 22.3349f, -0.863052f);
7083path.conicTo(23.3297f, -0.965552f, 23.4322f, 0.029181f, 0.707107f);
7084path.conicTo(23.5347f, 1.02391f, 22.5399f, 1.12641f, 0.707107f);
7085path.quadTo(22.0604f, 1.17582f, 21.5833f, 1.24445f);
7086path.conicTo(20.5935f, 1.38681f, 20.4511f, 0.397f, 0.707107f);
7087path.conicTo(20.3088f, -0.592814f, 21.2986f, -0.73518f, 0.707107f);
7088path.close();
7089path.moveTo(24.4124f, -0.993361f);
7090path.quadTo(24.9312f, -1.00509f, 25.4501f, -0.996107f);
7091path.conicTo(26.4499f, -0.978799f, 26.4326f, 0.0210512f, 0.707107f);
7092path.conicTo(26.4153f, 1.0209f, 25.4155f, 1.00359f, 0.707107f);
7093path.quadTo(24.9365f, 0.995302f, 24.4576f, 1.00613f);
7094path.conicTo(23.4578f, 1.02873f, 23.4352f, 0.0289853f, 0.707107f);
7095path.conicTo(23.4126f, -0.970759f, 24.4124f, -0.993361f, 0.707107f);
7096path.close();
7097path.moveTo(27.5481f, -0.87484f);
7098path.quadTo(28.0668f, -0.823762f, 28.583f, -0.75194f);
7099path.conicTo(29.5734f, -0.614138f, 29.4356f, 0.376322f, 0.707107f);
7100path.conicTo(29.2978f, 1.36678f, 28.3074f, 1.22898f, 0.707107f);
7101path.quadTo(27.8309f, 1.16268f, 27.3521f, 1.11553f);
7102path.conicTo(26.3569f, 1.01753f, 26.4549f, 0.0223428f, 0.707107f);
7103path.conicTo(26.5529f, -0.972843f, 27.5481f, -0.87484f, 0.707107f);
7104path.close();
7105path.moveTo(30.6151f, -0.386432f);
7106path.quadTo(31.1507f, -0.267954f, 31.6809f, -0.126991f);
7107path.conicTo(32.6473f, 0.129965f, 32.3904f, 1.09639f, 0.707107f);
7108path.conicTo(32.1334f, 2.06281f, 31.167f, 1.80585f, 0.707107f);
7109path.quadTo(30.6776f, 1.67574f, 30.1832f, 1.56637f);
7110path.conicTo(29.2068f, 1.35041f, 29.4227f, 0.374005f, 0.707107f);
7111path.conicTo(29.6387f, -0.602396f, 30.6151f, -0.386432f, 0.707107f);
7112path.close();
7113path.moveTo(33.7445f, 0.514616f);
7114path.quadTo(34.2452f, 0.693421f, 34.7381f, 0.892536f);
7115path.conicTo(35.6653f, 1.26708f, 35.2908f, 2.19429f, 0.707107f);
7116path.conicTo(34.9162f, 3.1215f, 33.989f, 2.74696f, 0.707107f);
7117path.quadTo(33.534f, 2.56316f, 33.0718f, 2.3981f);
7118path.conicTo(32.1301f, 2.06177f, 32.4664f, 1.12003f, 0.707107f);
7119path.conicTo(32.8027f, 0.178285f, 33.7445f, 0.514616f, 0.707107f);
7120path.close();
7121path.moveTo(36.6402f, 1.7512f);
7122path.quadTo(37.0977f, 1.98026f, 37.5458f, 2.22715f);
7123path.conicTo(38.4217f, 2.70968f, 37.9392f, 3.58556f, 0.707107f);
7124path.conicTo(37.4566f, 4.46144f, 36.5808f, 3.97891f, 0.707107f);
7125path.quadTo(36.1671f, 3.75102f, 35.7448f, 3.53956f);
7126path.conicTo(34.8506f, 3.09185f, 35.2983f, 2.19767f, 0.707107f);
7127path.conicTo(35.746f, 1.30349f, 36.6402f, 1.7512f, 0.707107f);
7128path.close();
7129path.moveTo(39.2611f, 3.26012f);
7130path.quadTo(39.4005f, 3.35159f, 39.539f, 3.44501f);
7131path.quadTo(39.8091f, 3.62717f, 40.0746f, 3.81611f);
7132path.conicTo(40.8893f, 4.3959f, 40.3096f, 5.21067f, 0.707107f);
7133path.conicTo(39.7298f, 6.02543f, 38.915f, 5.44564f, 0.707107f);
7134path.quadTo(38.67f, 5.2713f, 38.4206f, 5.10309f);
7135path.quadTo(38.293f, 5.017f, 38.164f, 4.9324f);
7136path.conicTo(37.3279f, 4.38388f, 37.8764f, 3.54775f, 0.707107f);
7137path.conicTo(38.4249f, 2.71161f, 39.2611f, 3.26012f, 0.707107f);
7138path.close();
7139path.moveTo(41.6673f, 5.04503f);
7140path.quadTo(42.0618f, 5.37449f, 42.4428f, 5.71927f);
7141path.conicTo(43.1844f, 6.39015f, 42.5135f, 7.13171f, 0.707107f);
7142path.conicTo(41.8426f, 7.87327f, 41.1011f, 7.20239f, 0.707107f);
7143path.quadTo(40.7493f, 6.88414f, 40.3852f, 6.58004f);
7144path.conicTo(39.6177f, 5.93899f, 40.2588f, 5.17149f, 0.707107f);
7145path.conicTo(40.8998f, 4.40399f, 41.6673f, 5.04503f, 0.707107f);
7146path.close();
7147path.moveTo(43.9388f, 7.1865f);
7148path.quadTo(44.3044f, 7.57519f, 44.6538f, 7.97856f);
7149path.conicTo(45.3084f, 8.73448f, 44.5525f, 9.38914f, 0.707107f);
7150path.conicTo(43.7966f, 10.0438f, 43.1419f, 9.28789f, 0.707107f);
7151path.quadTo(42.8195f, 8.91555f, 42.482f, 8.55677f);
7152path.conicTo(41.7969f, 7.82836f, 42.5253f, 7.14322f, 0.707107f);
7153path.conicTo(43.2537f, 6.45808f, 43.9388f, 7.1865f, 0.707107f);
7154path.close();
7155path.moveTo(46.0036f, 9.6753f);
7156path.quadTo(46.3207f, 10.1098f, 46.6195f, 10.5571f);
7157path.conicTo(47.175f, 11.3886f, 46.3435f, 11.9441f, 0.707107f);
7158path.conicTo(45.5119f, 12.4996f, 44.9564f, 11.6681f, 0.707107f);
7159path.quadTo(44.6806f, 11.2552f, 44.388f, 10.8541f);
7160path.conicTo(43.7986f, 10.0463f, 44.6064f, 9.45688f, 0.707107f);
7161path.conicTo(45.4142f, 8.86747f, 46.0036f, 9.6753f, 0.707107f);
7162path.close();
7163path.moveTo(47.6932f, 12.3107f);
7164path.quadTo(47.9467f, 12.764f, 48.1819f, 13.2271f);
7165path.conicTo(48.6347f, 14.1187f, 47.7431f, 14.5715f, 0.707107f);
7166path.conicTo(46.8514f, 15.0243f, 46.3986f, 14.1327f, 0.707107f);
7167path.quadTo(46.1816f, 13.7053f, 45.9476f, 13.2868f);
7168path.conicTo(45.4595f, 12.414f, 46.3323f, 11.9259f, 0.707107f);
7169path.conicTo(47.2051f, 11.4379f, 47.6932f, 12.3107f, 0.707107f);
7170path.close();
7171path.moveTo(49.0539f, 15.1303f);
7172path.quadTo(49.2539f, 15.6178f, 49.434f, 16.113f);
7173path.conicTo(49.7758f, 17.0527f, 48.836f, 17.3946f, 0.707107f);
7174path.conicTo(47.8963f, 17.7364f, 47.5545f, 16.7966f, 0.707107f);
7175path.quadTo(47.3882f, 16.3395f, 47.2036f, 15.8895f);
7176path.conicTo(46.824f, 14.9643f, 47.7491f, 14.5847f, 0.707107f);
7177path.conicTo(48.6743f, 14.2051f, 49.0539f, 15.1303f, 0.707107f);
7178path.close();
7179path.moveTo(50.0758f, 18.1294f);
7180path.quadTo(50.216f, 18.6412f, 50.3352f, 19.1584f);
7181path.conicTo(50.5599f, 20.1328f, 49.5855f, 20.3575f, 0.707107f);
7182path.conicTo(48.6111f, 20.5821f, 48.3864f, 19.6077f, 0.707107f);
7183path.quadTo(48.2763f, 19.1304f, 48.1469f, 18.6579f);
7184path.conicTo(47.8826f, 17.6935f, 48.8471f, 17.4292f, 0.707107f);
7185path.conicTo(49.8115f, 17.165f, 50.0758f, 18.1294f, 0.707107f);
7186path.close();
7187path.moveTo(50.7247f, 21.2262f);
7188path.quadTo(50.8005f, 21.743f, 50.8555f, 22.2623f);
7189path.conicTo(50.9607f, 23.2568f, 49.9663f, 23.3621f, 0.707107f);
7190path.conicTo(48.9719f, 23.4673f, 48.8666f, 22.4729f, 0.707107f);
7191path.quadTo(48.8158f, 21.9935f, 48.7458f, 21.5165f);
7192path.conicTo(48.6007f, 20.5271f, 49.5901f, 20.382f, 0.707107f);
7193path.conicTo(50.5795f, 20.2368f, 50.7247f, 21.2262f, 0.707107f);
7194path.close();
7195path.moveTo(50.9916f, 24.3398f);
7196path.quadTo(51.0048f, 24.858f, 50.9973f, 25.3762f);
7197path.conicTo(50.9828f, 26.3761f, 49.9829f, 26.3616f, 0.707107f);
7198path.conicTo(48.983f, 26.3472f, 48.9975f, 25.3473f, 0.707107f);
7199path.quadTo(49.0044f, 24.8687f, 48.9923f, 24.3906f);
7200path.conicTo(48.9669f, 23.3909f, 49.9665f, 23.3655f, 0.707107f);
7201path.conicTo(50.9662f, 23.3401f, 50.9916f, 24.3398f, 0.707107f);
7202path.close();
7203path.moveTo(50.8819f, 27.4753f);
7204path.quadTo(50.8323f, 27.9943f, 50.7618f, 28.511f);
7205path.conicTo(50.6268f, 29.5018f, 49.636f, 29.3668f, 0.707107f);
7206path.conicTo(48.6451f, 29.2317f, 48.7802f, 28.2409f, 0.707107f);
7207path.quadTo(48.8452f, 27.7641f, 48.891f, 27.2849f);
7208path.conicTo(48.9862f, 26.2894f, 49.9816f, 26.3846f, 0.707107f);
7209path.conicTo(50.9771f, 26.4798f, 50.8819f, 27.4753f, 0.707107f);
7210path.close();
7211path.moveTo(50.4023f, 30.5429f);
7212path.quadTo(50.2856f, 31.0775f, 50.1465f, 31.607f);
7213path.conicTo(49.8924f, 32.5742f, 48.9252f, 32.3201f, 0.707107f);
7214path.conicTo(47.9581f, 32.066f, 48.2122f, 31.0988f, 0.707107f);
7215path.quadTo(48.3405f, 30.6102f, 48.4483f, 30.1165f);
7216path.conicTo(48.6614f, 29.1395f, 49.6385f, 29.3527f, 0.707107f);
7217path.conicTo(50.6155f, 29.5659f, 50.4023f, 30.5429f, 0.707107f);
7218path.close();
7219path.moveTo(49.5104f, 33.674f);
7220path.quadTo(49.3329f, 34.1756f, 49.1351f, 34.6695f);
7221path.conicTo(48.7632f, 35.5977f, 47.8349f, 35.2258f, 0.707107f);
7222path.conicTo(46.9066f, 34.854f, 47.2785f, 33.9257f, 0.707107f);
7223path.quadTo(47.4612f, 33.4697f, 47.625f, 33.0067f);
7224path.conicTo(47.9587f, 32.064f, 48.9014f, 32.3977f, 0.707107f);
7225path.conicTo(49.8441f, 32.7313f, 49.5104f, 33.674f, 0.707107f);
7226path.close();
7227path.moveTo(48.281f, 36.5756f);
7228path.quadTo(48.053f, 37.0342f, 47.8071f, 37.4835f);
7229path.conicTo(47.3269f, 38.3607f, 46.4497f, 37.8805f, 0.707107f);
7230path.conicTo(45.5725f, 37.4004f, 46.0527f, 36.5232f, 0.707107f);
7231path.quadTo(46.2797f, 36.1085f, 46.4901f, 35.6852f);
7232path.conicTo(46.9353f, 34.7898f, 47.8307f, 35.235f, 0.707107f);
7233path.conicTo(48.7262f, 35.6802f, 48.281f, 36.5756f, 0.707107f);
7234path.close();
7235path.moveTo(46.7777f, 39.2033f);
7236path.quadTo(46.6677f, 39.3719f, 46.555f, 39.539f);
7237path.quadTo(46.3865f, 39.7888f, 46.2121f, 40.0349f);
7238path.conicTo(45.6338f, 40.8507f, 44.818f, 40.2724f, 0.707107f);
7239path.conicTo(44.0021f, 39.6942f, 44.5804f, 38.8783f, 0.707107f);
7240path.quadTo(44.7413f, 38.6513f, 44.8969f, 38.4206f);
7241path.quadTo(45.0008f, 38.2665f, 45.1025f, 38.1107f);
7242path.conicTo(45.6488f, 37.2731f, 46.4864f, 37.8194f, 0.707107f);
7243path.conicTo(47.324f, 38.3657f, 46.7777f, 39.2033f, 0.707107f);
7244path.close();
7245path.moveTo(44.9527f, 41.6701f);
7246path.quadTo(44.6177f, 42.0709f, 44.267f, 42.458f);
7247path.conicTo(43.5955f, 43.1991f, 42.8545f, 42.5276f, 0.707107f);
7248path.conicTo(42.1135f, 41.8561f, 42.7849f, 41.1151f, 0.707107f);
7249path.quadTo(43.1087f, 40.7578f, 43.4178f, 40.3878f);
7250path.conicTo(44.059f, 39.6203f, 44.8264f, 40.2615f, 0.707107f);
7251path.conicTo(45.5938f, 40.9027f, 44.9527f, 41.6701f, 0.707107f);
7252path.close();
7253path.moveTo(42.7884f, 43.9624f);
7254path.quadTo(42.4083f, 44.319f, 42.014f, 44.6602f);
7255path.conicTo(41.2578f, 45.3146f, 40.6034f, 44.5585f, 0.707107f);
7256path.conicTo(39.949f, 43.8023f, 40.7052f, 43.1479f, 0.707107f);
7257path.quadTo(41.0691f, 42.833f, 41.4201f, 42.5037f);
7258path.conicTo(42.1494f, 41.8196f, 42.8336f, 42.5489f, 0.707107f);
7259path.conicTo(43.5178f, 43.2782f, 42.7884f, 43.9624f, 0.707107f);
7260path.close();
7261path.moveTo(40.3892f, 45.9564f);
7262path.quadTo(39.9683f, 46.2655f, 39.5354f, 46.5574f);
7263path.conicTo(38.7062f, 47.1165f, 38.1472f, 46.2873f, 0.707107f);
7264path.conicTo(37.5881f, 45.4582f, 38.4173f, 44.8992f, 0.707107f);
7265path.quadTo(38.8169f, 44.6297f, 39.2054f, 44.3444f);
7266path.conicTo(40.0114f, 43.7525f, 40.6033f, 44.5585f, 0.707107f);
7267path.conicTo(41.1952f, 45.3645f, 40.3892f, 45.9564f, 0.707107f);
7268path.close();
7269path.moveTo(37.7543f, 47.6568f);
7270path.quadTo(37.2977f, 47.9138f, 36.8312f, 48.1522f);
7271path.conicTo(35.9407f, 48.6072f, 35.4857f, 47.7167f, 0.707107f);
7272path.conicTo(35.0306f, 46.8263f, 35.9211f, 46.3712f, 0.707107f);
7273path.quadTo(36.3518f, 46.1511f, 36.7732f, 45.9139f);
7274path.conicTo(37.6446f, 45.4234f, 38.1351f, 46.2948f, 0.707107f);
7275path.conicTo(38.6257f, 47.1662f, 37.7543f, 47.6568f, 0.707107f);
7276path.close();
7277path.moveTo(34.9311f, 49.0286f);
7278path.quadTo(34.4488f, 49.2279f, 33.9589f, 49.4077f);
7279path.conicTo(33.0202f, 49.7523f, 32.6756f, 48.8136f, 0.707107f);
7280path.conicTo(32.331f, 47.8748f, 33.2698f, 47.5302f, 0.707107f);
7281path.quadTo(33.722f, 47.3642f, 34.1672f, 47.1802f);
7282path.conicTo(35.0914f, 46.7983f, 35.4733f, 47.7224f, 0.707107f);
7283path.conicTo(35.8553f, 48.6466f, 34.9311f, 49.0286f, 0.707107f);
7284path.close();
7285path.moveTo(31.9824f, 50.0449f);
7286path.quadTo(31.4774f, 50.1857f, 30.9668f, 50.3061f);
7287path.conicTo(29.9935f, 50.5355f, 29.764f, 49.5622f, 0.707107f);
7288path.conicTo(29.5346f, 48.5889f, 30.5079f, 48.3594f, 0.707107f);
7289path.quadTo(30.9789f, 48.2484f, 31.4453f, 48.1184f);
7290path.conicTo(32.4086f, 47.8498f, 32.6771f, 48.8131f, 0.707107f);
7291path.conicTo(32.9457f, 49.7763f, 31.9824f, 50.0449f, 0.707107f);
7292path.close();
7293path.moveTo(28.899f, 50.706f);
7294path.quadTo(28.3834f, 50.7842f, 27.8652f, 50.8416f);
7295path.conicTo(26.8713f, 50.9518f, 26.7611f, 49.9579f, 0.707107f);
7296path.conicTo(26.6509f, 48.964f, 27.6448f, 48.8538f, 0.707107f);
7297path.quadTo(28.1231f, 48.8008f, 28.599f, 48.7286f);
7298path.conicTo(29.5877f, 48.5786f, 29.7377f, 49.5673f, 0.707107f);
7299path.conicTo(29.8877f, 50.556f, 28.899f, 50.706f, 0.707107f);
7300path.close();
7301path.moveTo(25.8106f, 50.9874f);
7302path.quadTo(25.6321f, 50.9929f, 25.4537f, 50.996f);
7303path.conicTo(24.4539f, 51.0135f, 24.4365f, 50.0136f, 0.707115f);
7304path.lineTo(24.4251f, 49.3638f);
7305path.conicTo(24.4077f, 48.364f, 25.4075f, 48.3465f, 0.707107f);
7306path.conicTo(26.4073f, 48.3291f, 26.4248f, 49.3289f, 0.707107f);
7307path.lineTo(26.4361f, 49.9787f);
7308path.lineTo(25.4363f, 49.9962f);
7309path.lineTo(25.4189f, 48.9963f);
7310path.quadTo(25.5836f, 48.9935f, 25.7482f, 48.9883f);
7311path.conicTo(26.7477f, 48.9571f, 26.7789f, 49.9567f, 0.707107f);
7312path.conicTo(26.8101f, 50.9562f, 25.8106f, 50.9874f, 0.707107f);
7313path.close();
7314path.moveTo(24.3902f, 47.3641f);
7315path.lineTo(24.3728f, 46.3643f);
7316path.conicTo(24.3553f, 45.3645f, 25.3551f, 45.347f, 0.707107f);
7317path.conicTo(26.355f, 45.3295f, 26.3724f, 46.3294f, 0.707107f);
7318path.lineTo(26.3899f, 47.3292f);
7319path.conicTo(26.4074f, 48.3291f, 25.4075f, 48.3465f, 0.707107f);
7320path.conicTo(24.4077f, 48.364f, 24.3902f, 47.3641f, 0.707107f);
7321path.close();
7322path.moveTo(24.3378f, 44.3646f);
7323path.lineTo(24.3204f, 43.3648f);
7324path.conicTo(24.3029f, 42.3649f, 25.3028f, 42.3475f, 0.707107f);
7325path.conicTo(26.3026f, 42.33f, 26.3201f, 43.3298f, 0.707107f);
7326path.lineTo(26.3375f, 44.3297f);
7327path.conicTo(26.355f, 45.3295f, 25.3551f, 45.347f, 0.707107f);
7328path.conicTo(24.3553f, 45.3645f, 24.3378f, 44.3646f, 0.707107f);
7329path.close();
7330path.moveTo(24.2855f, 41.3651f);
7331path.lineTo(24.268f, 40.3652f);
7332path.conicTo(24.2506f, 39.3654f, 25.2504f, 39.3479f, 0.707107f);
7333path.conicTo(26.2503f, 39.3305f, 26.2677f, 40.3303f, 0.707107f);
7334path.lineTo(26.2852f, 41.3302f);
7335path.conicTo(26.3026f, 42.33f, 25.3028f, 42.3475f, 0.707107f);
7336path.conicTo(24.3029f, 42.3649f, 24.2855f, 41.3651f, 0.707107f);
7337path.close();
7338path.moveTo(24.2331f, 38.3655f);
7339path.lineTo(24.2157f, 37.3657f);
7340path.conicTo(24.1982f, 36.3658f, 25.1981f, 36.3484f, 0.707107f);
7341path.conicTo(26.1979f, 36.3309f, 26.2154f, 37.3308f, 0.707107f);
7342path.lineTo(26.2328f, 38.3306f);
7343path.conicTo(26.2503f, 39.3305f, 25.2504f, 39.3479f, 0.707107f);
7344path.conicTo(24.2506f, 39.3654f, 24.2331f, 38.3655f, 0.707107f);
7345path.close();
7346path.moveTo(24.1808f, 35.366f);
7347path.lineTo(24.1633f, 34.3661f);
7348path.conicTo(24.1459f, 33.3663f, 25.1457f, 33.3488f, 0.707107f);
7349path.conicTo(26.1456f, 33.3314f, 26.163f, 34.3312f, 0.707107f);
7350path.lineTo(26.1805f, 35.3311f);
7351path.conicTo(26.1979f, 36.3309f, 25.1981f, 36.3484f, 0.707107f);
7352path.conicTo(24.1982f, 36.3658f, 24.1808f, 35.366f, 0.707107f);
7353path.close();
7354path.moveTo(24.1284f, 32.3664f);
7355path.lineTo(24.111f, 31.3666f);
7356path.conicTo(24.0935f, 30.3667f, 25.0934f, 30.3493f, 0.707107f);
7357path.conicTo(26.0932f, 30.3318f, 26.1107f, 31.3317f, 0.707107f);
7358path.lineTo(26.1281f, 32.3315f);
7359path.conicTo(26.1456f, 33.3314f, 25.1457f, 33.3488f, 0.707107f);
7360path.conicTo(24.1459f, 33.3663f, 24.1284f, 32.3664f, 0.707107f);
7361path.close();
7362path.moveTo(24.0761f, 29.3669f);
7363path.lineTo(24.0586f, 28.367f);
7364path.conicTo(24.0412f, 27.3672f, 25.041f, 27.3497f, 0.707107f);
7365path.conicTo(26.0409f, 27.3323f, 26.0583f, 28.3321f, 0.707107f);
7366path.lineTo(26.0758f, 29.332f);
7367path.conicTo(26.0932f, 30.3318f, 25.0934f, 30.3493f, 0.707107f);
7368path.conicTo(24.0935f, 30.3667f, 24.0761f, 29.3669f, 0.707107f);
7369path.close();
7370path.moveTo(24.0237f, 26.3673f);
7371path.lineTo(24.0063f, 25.3675f);
7372path.conicTo(23.9888f, 24.3676f, 24.9887f, 24.3502f, 0.707107f);
7373path.conicTo(25.9885f, 24.3327f, 26.006f, 25.3326f, 0.707107f);
7374path.lineTo(26.0234f, 26.3324f);
7375path.conicTo(26.0409f, 27.3323f, 25.041f, 27.3497f, 0.707107f);
7376path.conicTo(24.0412f, 27.3672f, 24.0237f, 26.3673f, 0.707107f);
7377path.close();
7378path1 = path;
7379path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -05007380path.setFillType(SkPathFillType::kWinding);
Cary Clark2587f412018-07-24 12:40:10 -04007381path.moveTo(25.0098f, 23.1973f);
7382path.lineTo(25.5689f, 22.3682f);
7383path.conicTo(26.1281f, 21.5392f, 26.9572f, 22.0984f, 0.707107f);
7384path.conicTo(27.7862f, 22.6576f, 27.227f, 23.4866f, 0.707107f);
7385path.lineTo(26.6678f, 24.3156f);
7386path.conicTo(26.1086f, 25.1447f, 25.2796f, 24.5855f, 0.707107f);
7387path.conicTo(24.4506f, 24.0263f, 25.0098f, 23.1973f, 0.707107f);
7388path.close();
7389path.moveTo(26.6873f, 20.7101f);
7390path.lineTo(27.2465f, 19.8811f);
7391path.conicTo(27.8057f, 19.0521f, 28.6348f, 19.6113f, 0.707107f);
7392path.conicTo(29.4638f, 20.1704f, 28.9046f, 20.9995f, 0.707107f);
7393path.lineTo(28.3454f, 21.8285f);
7394path.conicTo(27.7862f, 22.6576f, 26.9572f, 22.0984f, 0.707107f);
7395path.conicTo(26.1281f, 21.5392f, 26.6873f, 20.7101f, 0.707107f);
7396path.close();
7397path.moveTo(28.3649f, 18.223f);
7398path.lineTo(28.9241f, 17.394f);
7399path.conicTo(29.4833f, 16.565f, 30.3123f, 17.1241f, 0.707107f);
7400path.conicTo(31.1414f, 17.6833f, 30.5822f, 18.5124f, 0.707107f);
7401path.lineTo(30.023f, 19.3414f);
7402path.conicTo(29.4638f, 20.1704f, 28.6348f, 19.6113f, 0.707107f);
7403path.conicTo(27.8057f, 19.0521f, 28.3649f, 18.223f, 0.707107f);
7404path.close();
7405path.moveTo(30.0425f, 15.7359f);
7406path.lineTo(30.6017f, 14.9069f);
7407path.conicTo(31.1609f, 14.0778f, 31.9899f, 14.637f, 0.707107f);
7408path.conicTo(32.8189f, 15.1962f, 32.2598f, 16.0253f, 0.707107f);
7409path.lineTo(31.7006f, 16.8543f);
7410path.conicTo(31.1414f, 17.6833f, 30.3123f, 17.1241f, 0.707107f);
7411path.conicTo(29.4833f, 16.565f, 30.0425f, 15.7359f, 0.707107f);
7412path.close();
7413path.moveTo(31.7201f, 13.2488f);
7414path.lineTo(32.2793f, 12.4198f);
7415path.conicTo(32.8385f, 11.5907f, 33.6675f, 12.1499f, 0.707107f);
7416path.conicTo(34.4965f, 12.7091f, 33.9373f, 13.5381f, 0.707107f);
7417path.lineTo(33.3781f, 14.3672f);
7418path.conicTo(32.8189f, 15.1962f, 31.9899f, 14.637f, 0.707107f);
7419path.conicTo(31.1609f, 14.0778f, 31.7201f, 13.2488f, 0.707107f);
7420path.close();
7421path.moveTo(33.3976f, 10.7617f);
7422path.lineTo(33.9568f, 9.93265f);
7423path.conicTo(34.516f, 9.10361f, 35.3451f, 9.6628f, 0.707107f);
7424path.conicTo(36.1741f, 10.222f, 35.6149f, 11.051f, 0.707107f);
7425path.lineTo(35.0557f, 11.8801f);
7426path.conicTo(34.4965f, 12.7091f, 33.6675f, 12.1499f, 0.707107f);
7427path.conicTo(32.8385f, 11.5907f, 33.3976f, 10.7617f, 0.707107f);
7428path.close();
7429path.moveTo(35.0752f, 8.27457f);
7430path.lineTo(35.6344f, 7.44554f);
7431path.conicTo(36.1936f, 6.6165f, 37.0226f, 7.17569f, 0.707107f);
7432path.conicTo(37.8517f, 7.73488f, 37.2925f, 8.56392f, 0.707107f);
7433path.lineTo(36.7333f, 9.39296f);
7434path.conicTo(36.1741f, 10.222f, 35.3451f, 9.6628f, 0.707107f);
7435path.conicTo(34.516f, 9.10361f, 35.0752f, 8.27457f, 0.707107f);
7436path.close();
7437path.moveTo(36.7528f, 5.78746f);
7438path.lineTo(37.312f, 4.95842f);
7439path.conicTo(37.8712f, 4.12939f, 38.7002f, 4.68858f, 0.707107f);
7440path.conicTo(39.5293f, 5.24777f, 38.9701f, 6.07681f, 0.707107f);
7441path.lineTo(38.4109f, 6.90585f);
7442path.conicTo(37.8517f, 7.73488f, 37.0226f, 7.17569f, 0.707107f);
7443path.conicTo(36.1936f, 6.6165f, 36.7528f, 5.78746f, 0.707107f);
7444path.close();
7445path.moveTo(39.9447f, 3.72429f);
7446path.quadTo(40.3524f, 4.01069f, 40.7489f, 4.31248f);
7447path.conicTo(41.5445f, 4.9182f, 40.9388f, 5.71387f, 0.707107f);
7448path.conicTo(40.3331f, 6.50955f, 39.5374f, 5.90383f, 0.707107f);
7449path.quadTo(39.1714f, 5.62521f, 38.7951f, 5.36088f);
7450path.conicTo(37.9768f, 4.78608f, 38.5516f, 3.96779f, 0.707107f);
7451path.conicTo(39.1264f, 3.14949f, 39.9447f, 3.72429f, 0.707107f);
7452path.close();
7453path.moveTo(42.3194f, 5.60826f);
7454path.quadTo(42.707f, 5.95446f, 43.0804f, 6.31583f);
7455path.conicTo(43.7991f, 7.01122f, 43.1037f, 7.72985f, 0.707107f);
7456path.conicTo(42.4083f, 8.44848f, 41.6896f, 7.75308f, 0.707107f);
7457path.quadTo(41.3448f, 7.41944f, 40.9871f, 7.09992f);
7458path.conicTo(40.2413f, 6.43379f, 40.9074f, 5.68796f, 0.707107f);
7459path.conicTo(41.5735f, 4.94212f, 42.3194f, 5.60826f, 0.707107f);
7460path.close();
7461path.moveTo(44.5406f, 7.84871f);
7462path.quadTo(44.8959f, 8.25352f, 45.2341f, 8.67266f);
7463path.conicTo(45.862f, 9.4509f, 45.0838f, 10.0789f, 0.707107f);
7464path.conicTo(44.3056f, 10.7068f, 43.6776f, 9.9286f, 0.707107f);
7465path.quadTo(43.3654f, 9.54174f, 43.0374f, 9.16805f);
7466path.conicTo(42.3778f, 8.41649f, 43.1293f, 7.75682f, 0.707107f);
7467path.conicTo(43.8809f, 7.09715f, 44.5406f, 7.84871f, 0.707107f);
7468path.close();
7469path.moveTo(46.528f, 10.4211f);
7470path.quadTo(46.815f, 10.8449f, 47.0851f, 11.2796f);
7471path.conicTo(47.6128f, 12.129f, 46.7633f, 12.6567f, 0.707107f);
7472path.conicTo(45.9139f, 13.1844f, 45.3862f, 12.335f, 0.707107f);
7473path.quadTo(45.1369f, 11.9337f, 44.872f, 11.5426f);
7474path.conicTo(44.3113f, 10.7146f, 45.1393f, 10.1538f, 0.707107f);
7475path.conicTo(45.9673f, 9.5931f, 46.528f, 10.4211f, 0.707107f);
7476path.close();
7477path.moveTo(48.1056f, 13.0782f);
7478path.quadTo(48.3449f, 13.542f, 48.5654f, 14.015f);
7479path.conicTo(48.9879f, 14.9213f, 48.0816f, 15.3438f, 0.707107f);
7480path.conicTo(47.1752f, 15.7663f, 46.7527f, 14.86f, 0.707107f);
7481path.quadTo(46.5492f, 14.4234f, 46.3283f, 13.9953f);
7482path.conicTo(45.8698f, 13.1066f, 46.7584f, 12.6481f, 0.707107f);
7483path.conicTo(47.6471f, 12.1895f, 48.1056f, 13.0782f, 0.707107f);
7484path.close();
7485path.moveTo(49.3755f, 15.9538f);
7486path.quadTo(49.5594f, 16.4493f, 49.7229f, 16.9516f);
7487path.conicTo(50.0325f, 17.9025f, 49.0816f, 18.2121f, 0.707107f);
7488path.conicTo(48.1307f, 18.5216f, 47.8212f, 17.5707f, 0.707107f);
7489path.quadTo(47.6702f, 17.1069f, 47.5005f, 16.6497f);
7490path.conicTo(47.1526f, 15.7122f, 48.0901f, 15.3642f, 0.707107f);
7491path.conicTo(49.0276f, 15.0163f, 49.3755f, 15.9538f, 0.707107f);
7492path.close();
7493path.moveTo(50.2964f, 18.9923f);
7494path.quadTo(50.4191f, 19.5089f, 50.5206f, 20.0302f);
7495path.conicTo(50.7117f, 21.0117f, 49.7302f, 21.2029f, 0.707107f);
7496path.conicTo(48.7486f, 21.394f, 48.5575f, 20.4125f, 0.707107f);
7497path.quadTo(48.4638f, 19.9313f, 48.3505f, 19.4544f);
7498path.conicTo(48.1194f, 18.4815f, 49.0924f, 18.2504f, 0.707107f);
7499path.conicTo(50.0653f, 18.0193f, 50.2964f, 18.9923f, 0.707107f);
7500path.close();
7501path.moveTo(50.8373f, 22.0956f);
7502path.quadTo(50.8955f, 22.6138f, 50.933f, 23.1341f);
7503path.conicTo(51.0047f, 24.1315f, 50.0073f, 24.2033f, 0.707107f);
7504path.conicTo(49.0099f, 24.275f, 48.9381f, 23.2776f, 0.707107f);
7505path.quadTo(48.9036f, 22.7975f, 48.8498f, 22.3191f);
7506path.conicTo(48.7381f, 21.3253f, 49.7318f, 21.2136f, 0.707107f);
7507path.conicTo(50.7255f, 21.1019f, 50.8373f, 22.0956f, 0.707107f);
7508path.close();
7509path.moveTo(50.9992f, 25.2099f);
7510path.quadTo(50.9949f, 25.7358f, 50.9694f, 26.2608f);
7511path.conicTo(50.9209f, 27.2596f, 49.9221f, 27.2111f, 0.707107f);
7512path.conicTo(48.9233f, 27.1626f, 48.9718f, 26.1638f, 0.707107f);
7513path.quadTo(48.9953f, 25.679f, 48.9992f, 25.1938f);
7514path.conicTo(49.0073f, 24.1938f, 50.0073f, 24.2019f, 0.707107f);
7515path.conicTo(51.0072f, 24.21f, 50.9992f, 25.2099f, 0.707107f);
7516path.close();
7517path.moveTo(50.7839f, 28.3454f);
7518path.quadTo(50.7172f, 28.8596f, 50.63f, 29.3708f);
7519path.conicTo(50.4619f, 30.3565f, 49.4761f, 30.1884f, 0.707107f);
7520path.conicTo(48.4903f, 30.0203f, 48.6584f, 29.0346f, 0.707107f);
7521path.quadTo(48.7389f, 28.5627f, 48.8005f, 28.088f);
7522path.conicTo(48.9292f, 27.0963f, 49.9209f, 27.225f, 0.707107f);
7523path.conicTo(50.9126f, 27.3537f, 50.7839f, 28.3454f, 0.707107f);
7524path.close();
7525path.moveTo(50.1906f, 31.437f);
7526path.quadTo(50.0558f, 31.9646f, 49.899f, 32.4861f);
7527path.conicTo(49.611f, 33.4438f, 48.6534f, 33.1558f, 0.707107f);
7528path.conicTo(47.6957f, 32.8679f, 47.9837f, 31.9103f, 0.707107f);
7529path.quadTo(48.1284f, 31.4289f, 48.2528f, 30.9418f);
7530path.conicTo(48.5004f, 29.9729f, 49.4693f, 30.2205f, 0.707107f);
7531path.conicTo(50.4382f, 30.4681f, 50.1906f, 31.437f, 0.707107f);
7532path.close();
7533path.moveTo(49.1978f, 34.5114f);
7534path.quadTo(49.0051f, 35.0016f, 48.7927f, 35.4837f);
7535path.conicTo(48.3895f, 36.3988f, 47.4744f, 35.9956f, 0.707107f);
7536path.conicTo(46.5593f, 35.5923f, 46.9625f, 34.6772f, 0.707107f);
7537path.quadTo(47.1586f, 34.2323f, 47.3364f, 33.7797f);
7538path.conicTo(47.7023f, 32.849f, 48.6329f, 33.2149f, 0.707107f);
7539path.conicTo(49.5636f, 33.5807f, 49.1978f, 34.5114f, 0.707107f);
7540path.close();
7541path.moveTo(47.8852f, 37.3397f);
7542path.quadTo(47.6449f, 37.7853f, 47.3876f, 38.2211f);
7543path.conicTo(46.879f, 39.0821f, 46.018f, 38.5736f, 0.707107f);
7544path.conicTo(45.1569f, 38.0651f, 45.6655f, 37.204f, 0.707107f);
7545path.quadTo(45.903f, 36.8018f, 46.1248f, 36.3906f);
7546path.conicTo(46.5993f, 35.5103f, 47.4796f, 35.9849f, 0.707107f);
7547path.conicTo(48.3598f, 36.4595f, 47.8852f, 37.3397f, 0.707107f);
7548path.close();
7549path.moveTo(46.3154f, 39.8881f);
7550path.quadTo(46.0303f, 40.2962f, 45.7299f, 40.693f);
7551path.conicTo(45.1264f, 41.4903f, 44.3291f, 40.8867f, 0.707107f);
7552path.conicTo(43.5318f, 40.2831f, 44.1353f, 39.4858f, 0.707107f);
7553path.quadTo(44.4126f, 39.1195f, 44.6757f, 38.7428f);
7554path.conicTo(45.2483f, 37.923f, 46.0682f, 38.4956f, 0.707107f);
7555path.conicTo(46.888f, 39.0682f, 46.3154f, 39.8881f, 0.707107f);
7556path.close();
7557path.moveTo(44.4398f, 42.2654f);
7558path.quadTo(44.095f, 42.6536f, 43.7349f, 43.0278f);
7559path.conicTo(43.0415f, 43.7484f, 42.321f, 43.055f, 0.707107f);
7560path.conicTo(41.6004f, 42.3616f, 42.2938f, 41.641f, 0.707107f);
7561path.quadTo(42.6261f, 41.2957f, 42.9444f, 40.9374f);
7562path.conicTo(43.6084f, 40.1897f, 44.3561f, 40.8537f, 0.707107f);
7563path.conicTo(45.1038f, 41.5177f, 44.4398f, 42.2654f, 0.707107f);
7564path.close();
7565path.moveTo(42.2075f, 44.4911f);
7566path.quadTo(41.804f, 44.8473f, 41.3862f, 45.1865f);
7567path.conicTo(40.6098f, 45.8167f, 39.9795f, 45.0403f, 0.707107f);
7568path.conicTo(39.3493f, 44.2639f, 40.1257f, 43.6336f, 0.707107f);
7569path.quadTo(40.5114f, 43.3205f, 40.8838f, 42.9918f);
7570path.conicTo(41.6335f, 42.3299f, 42.2953f, 43.0796f, 0.707107f);
7571path.conicTo(42.9572f, 43.8292f, 42.2075f, 44.4911f, 0.707107f);
7572path.close();
7573path.moveTo(39.6379f, 46.488f);
7574path.quadTo(39.2151f, 46.776f, 38.7814f, 47.0471f);
7575path.conicTo(37.9334f, 47.5771f, 37.4034f, 46.7292f, 0.707107f);
7576path.conicTo(36.8733f, 45.8812f, 37.7213f, 45.3511f, 0.707107f);
7577path.quadTo(38.1217f, 45.1009f, 38.5119f, 44.835f);
7578path.conicTo(39.3383f, 44.2721f, 39.9013f, 45.0985f, 0.707107f);
7579path.conicTo(40.4643f, 45.925f, 39.6379f, 46.488f, 0.707107f);
7580path.close();
7581path.moveTo(36.9864f, 48.0722f);
7582path.quadTo(36.5234f, 48.3127f, 36.0513f, 48.5344f);
7583path.conicTo(35.1461f, 48.9595f, 34.7211f, 48.0543f, 0.707107f);
7584path.conicTo(34.296f, 47.1491f, 35.2012f, 46.7241f, 0.707107f);
7585path.quadTo(35.6371f, 46.5194f, 36.0644f, 46.2974f);
7586path.conicTo(36.9518f, 45.8364f, 37.4128f, 46.7238f, 0.707107f);
7587path.conicTo(37.8738f, 47.6112f, 36.9864f, 48.0722f, 0.707107f);
7588path.close();
7589path.moveTo(34.1153f, 49.3498f);
7590path.quadTo(33.6206f, 49.535f, 33.1187f, 49.6999f);
7591path.conicTo(32.1687f, 50.0122f, 31.8565f, 49.0622f, 0.707107f);
7592path.conicTo(31.5442f, 48.1122f, 32.4942f, 47.7999f, 0.707107f);
7593path.quadTo(32.9575f, 47.6477f, 33.4141f, 47.4767f);
7594path.conicTo(34.3507f, 47.1261f, 34.7012f, 48.0627f, 0.707107f);
7595path.conicTo(35.0518f, 48.9992f, 34.1153f, 49.3498f, 0.707107f);
7596path.close();
7597path.moveTo(31.08f, 50.2791f);
7598path.quadTo(30.5637f, 50.4033f, 30.0427f, 50.5063f);
7599path.conicTo(29.0617f, 50.7002f, 28.8678f, 49.7192f, 0.707107f);
7600path.conicTo(28.6738f, 48.7382f, 29.6548f, 48.5443f, 0.707107f);
7601path.quadTo(30.1357f, 48.4492f, 30.6122f, 48.3346f);
7602path.conicTo(31.5845f, 48.1007f, 31.8184f, 49.073f, 0.707107f);
7603path.conicTo(32.0522f, 50.0453f, 31.08f, 50.2791f, 0.707107f);
7604path.close();
7605path.moveTo(27.9769f, 50.829f);
7606path.quadTo(27.4588f, 50.8887f, 26.9386f, 50.9276f);
7607path.conicTo(25.9414f, 51.0022f, 25.8668f, 50.005f, 0.707107f);
7608path.conicTo(25.7923f, 49.0078f, 26.7895f, 48.9332f, 0.707107f);
7609path.quadTo(27.2696f, 48.8973f, 27.7479f, 48.8422f);
7610path.conicTo(28.7413f, 48.7277f, 28.8558f, 49.7211f, 0.707107f);
7611path.conicTo(28.9703f, 50.7145f, 27.9769f, 50.829f, 0.707107f);
7612path.close();
7613path.moveTo(24.8625f, 50.9996f);
7614path.quadTo(24.3373f, 50.9969f, 23.8128f, 50.9729f);
7615path.conicTo(22.8138f, 50.9272f, 22.8595f, 49.9283f, 0.707107f);
7616path.conicTo(22.9051f, 48.9293f, 23.9041f, 48.975f, 0.707107f);
7617path.quadTo(24.3884f, 48.9971f, 24.8731f, 48.9997f);
7618path.conicTo(25.8731f, 49.005f, 25.8678f, 50.005f, 0.707107f);
7619path.conicTo(25.8624f, 51.0049f, 24.8625f, 50.9996f, 0.707107f);
7620path.close();
7621path.moveTo(21.7268f, 50.7931f);
7622path.quadTo(21.2121f, 50.7278f, 20.7005f, 50.642f);
7623path.conicTo(19.7143f, 50.4767f, 19.8796f, 49.4905f, 0.707107f);
7624path.conicTo(20.045f, 48.5042f, 21.0312f, 48.6696f, 0.707107f);
7625path.quadTo(21.5036f, 48.7488f, 21.9786f, 48.8091f);
7626path.conicTo(22.9707f, 48.9349f, 22.8448f, 49.927f, 0.707107f);
7627path.conicTo(22.7189f, 50.919f, 21.7268f, 50.7931f, 0.707107f);
7628path.close();
7629path.moveTo(18.6372f, 50.2094f);
7630path.quadTo(18.1089f, 50.0761f, 17.5865f, 49.9207f);
7631path.conicTo(16.628f, 49.6356f, 16.9132f, 48.6771f, 0.707107f);
7632path.conicTo(17.1983f, 47.7186f, 18.1568f, 48.0037f, 0.707107f);
7633path.quadTo(18.639f, 48.1472f, 19.1267f, 48.2702f);
7634path.conicTo(20.0963f, 48.515f, 19.8516f, 49.4846f, 0.707107f);
7635path.conicTo(19.6068f, 50.4542f, 18.6372f, 50.2094f, 0.707107f);
7636path.close();
7637path.moveTo(15.5577f, 49.2248f);
7638path.quadTo(15.0665f, 49.0334f, 14.5834f, 48.8222f);
7639path.conicTo(13.6672f, 48.4215f, 14.0678f, 47.5053f, 0.707107f);
7640path.conicTo(14.4684f, 46.589f, 15.3847f, 46.9897f, 0.707107f);
7641path.quadTo(15.8306f, 47.1846f, 16.284f, 47.3614f);
7642path.conicTo(17.2158f, 47.7246f, 16.8526f, 48.6563f, 0.707107f);
7643path.conicTo(16.4894f, 49.588f, 15.5577f, 49.2248f, 0.707107f);
7644path.close();
7645path.moveTo(12.7231f, 47.9189f);
7646path.quadTo(12.2765f, 47.6797f, 11.8395f, 47.4233f);
7647path.conicTo(10.9771f, 46.9171f, 11.4833f, 46.0547f, 0.707107f);
7648path.conicTo(11.9894f, 45.1922f, 12.8519f, 45.6984f, 0.707107f);
7649path.quadTo(13.2552f, 45.9351f, 13.6675f, 46.156f);
7650path.conicTo(14.549f, 46.6282f, 14.0768f, 47.5096f, 0.707107f);
7651path.conicTo(13.6046f, 48.3911f, 12.7231f, 47.9189f, 0.707107f);
7652path.close();
7653path.moveTo(10.1686f, 46.3548f);
7654path.quadTo(9.76024f, 46.0712f, 9.363f, 45.7722f);
7655path.conicTo(8.56406f, 45.1708f, 9.16549f, 44.3718f, 0.707107f);
7656path.conicTo(9.76691f, 43.5729f, 10.5658f, 44.1743f, 0.707107f);
7657path.quadTo(10.9325f, 44.4504f, 11.3095f, 44.7122f);
7658path.conicTo(12.1308f, 45.2826f, 11.5604f, 46.1039f, 0.707107f);
7659path.conicTo(10.9899f, 46.9253f, 10.1686f, 46.3548f, 0.707107f);
7660path.close();
7661path.moveTo(7.78853f, 44.4876f);
7662path.quadTo(7.39972f, 44.1442f, 7.02492f, 43.7855f);
7663path.conicTo(6.3024f, 43.0942f, 6.99374f, 42.3717f, 0.707107f);
7664path.conicTo(7.68509f, 41.6492f, 8.40761f, 42.3405f, 0.707107f);
7665path.quadTo(8.7536f, 42.6715f, 9.11249f, 42.9885f);
7666path.conicTo(9.86201f, 43.6505f, 9.20003f, 44.4f, 0.707107f);
7667path.conicTo(8.53805f, 45.1496f, 7.78853f, 44.4876f, 0.707107f);
7668path.close();
7669path.moveTo(5.55855f, 42.2635f);
7670path.quadTo(5.20148f, 41.8614f, 4.86131f, 41.4449f);
7671path.conicTo(4.22883f, 40.6703f, 5.0034f, 40.0378f, 0.707107f);
7672path.conicTo(5.77797f, 39.4053f, 6.41046f, 40.1799f, 0.707107f);
7673path.quadTo(6.72443f, 40.5644f, 7.05403f, 40.9356f);
7674path.conicTo(7.71802f, 41.6833f, 6.97028f, 42.3473f, 0.707107f);
7675path.conicTo(6.22254f, 43.0113f, 5.55855f, 42.2635f, 0.707107f);
7676path.close();
7677path.moveTo(3.55261f, 39.6973f);
7678path.quadTo(3.26341f, 39.2752f, 2.99107f, 38.8422f);
7679path.conicTo(2.45867f, 37.9957f, 3.30517f, 37.4633f, 0.707107f);
7680path.conicTo(4.15167f, 36.9309f, 4.68406f, 37.7774f, 0.707107f);
7681path.quadTo(4.93548f, 38.1772f, 5.20241f, 38.5667f);
7682path.conicTo(5.76769f, 39.3916f, 4.94279f, 39.9569f, 0.707107f);
7683path.conicTo(4.11789f, 40.5222f, 3.55261f, 39.6973f, 0.707107f);
7684path.close();
7685path.moveTo(1.96145f, 37.0509f);
7686path.quadTo(1.71975f, 36.5889f, 1.49677f, 36.1175f);
7687path.conicTo(1.06917f, 35.2135f, 1.97315f, 34.7859f, 0.707107f);
7688path.conicTo(2.87712f, 34.3583f, 3.30471f, 35.2623f, 0.707107f);
7689path.quadTo(3.51053f, 35.6974f, 3.73364f, 36.1239f);
7690path.conicTo(4.19714f, 37.01f, 3.31105f, 37.4735f, 0.707107f);
7691path.conicTo(2.42495f, 37.937f, 1.96145f, 37.0509f, 0.707107f);
7692path.close();
7693path.moveTo(0.676191f, 34.1844f);
7694path.quadTo(0.489621f, 33.6902f, 0.323275f, 33.189f);
7695path.conicTo(0.00831527f, 32.2399f, 0.95742f, 31.9249f, 0.707107f);
7696path.conicTo(1.90653f, 31.6099f, 2.22149f, 32.559f, 0.707107f);
7697path.quadTo(2.37504f, 33.0218f, 2.54726f, 33.4779f);
7698path.conicTo(2.9005f, 34.4134f, 1.96497f, 34.7666f, 0.707107f);
7699path.conicTo(1.02943f, 35.1199f, 0.676191f, 34.1844f, 0.707107f);
7700path.close();
7701path.moveTo(-0.261658f, 31.1521f);
7702path.quadTo(-0.387304f, 30.6362f, -0.491779f, 30.1156f);
7703path.conicTo(-0.68853f, 29.1351f, 0.291923f, 28.9384f, 0.707107f);
7704path.conicTo(1.27238f, 28.7416f, 1.46913f, 29.7221f, 0.707107f);
7705path.quadTo(1.56557f, 30.2026f, 1.68155f, 30.6789f);
7706path.conicTo(1.91817f, 31.6505f, 0.946565f, 31.8871f, 0.707107f);
7707path.conicTo(-0.0250367f, 32.1237f, -0.261658f, 31.1521f, 0.707107f);
7708path.close();
7709path.moveTo(-0.820549f, 28.0495f);
7710path.quadTo(-0.881733f, 27.5314f, -0.922089f, 27.0113f);
7711path.conicTo(-0.999449f, 26.0143f, -0.00244591f, 25.9369f, 0.707107f);
7712path.conicTo(0.994557f, 25.8596f, 1.07192f, 26.8566f, 0.707107f);
7713path.quadTo(1.10917f, 27.3367f, 1.16565f, 27.8149f);
7714path.conicTo(1.28293f, 28.808f, 0.289834f, 28.9253f, 0.707107f);
7715path.conicTo(-0.703265f, 29.0426f, -0.820549f, 28.0495f, 0.707107f);
7716path.close();
7717path.moveTo(-0.999918f, 24.9349f);
7718path.quadTo(-0.998605f, 24.4104f, -0.976138f, 23.8863f);
7719path.conicTo(-0.933305f, 22.8873f, 0.0657772f, 22.9301f, 0.707107f);
7720path.conicTo(1.06486f, 22.9729f, 1.02203f, 23.972f, 0.707107f);
7721path.quadTo(1.00129f, 24.4557f, 1.00008f, 24.9399f);
7722path.conicTo(0.997572f, 25.9399f, -0.0024244f, 25.9374f, 0.707107f);
7723path.conicTo(-1.00242f, 25.9349f, -0.999918f, 24.9349f, 0.707107f);
7724path.close();
7725path.moveTo(-0.802212f, 21.7991f);
7726path.quadTo(-0.738311f, 21.284f, -0.653903f, 20.7719f);
7727path.conicTo(-0.491283f, 19.7852f, 0.495406f, 19.9478f, 0.707107f);
7728path.conicTo(1.48209f, 20.1104f, 1.31948f, 21.0971f, 0.707107f);
7729path.quadTo(1.24156f, 21.5698f, 1.18257f, 22.0453f);
7730path.conicTo(1.05946f, 23.0377f, 0.0670681f, 22.9146f, 0.707107f);
7731path.conicTo(-0.925325f, 22.7915f, -0.802212f, 21.7991f, 0.707107f);
7732path.close();
7733path.moveTo(-0.228066f, 18.7115f);
7734path.quadTo(-0.096172f, 18.1824f, 0.0577899f, 17.6593f);
7735path.conicTo(0.340124f, 16.7f, 1.29944f, 16.9823f, 0.707107f);
7736path.conicTo(2.25876f, 17.2646f, 1.97642f, 18.2239f, 0.707107f);
7737path.quadTo(1.8343f, 18.7068f, 1.71255f, 19.1953f);
7738path.conicTo(1.47069f, 20.1656f, 0.50038f, 19.9237f, 0.707107f);
7739path.conicTo(-0.46993f, 19.6819f, -0.228066f, 18.7115f, 0.707107f);
7740path.close();
7741path.moveTo(0.74831f, 15.6269f);
7742path.quadTo(0.938539f, 15.1347f, 1.14857f, 14.6506f);
7743path.conicTo(1.54662f, 13.7333f, 2.46398f, 14.1313f, 0.707107f);
7744path.conicTo(3.38135f, 14.5294f, 2.9833f, 15.4467f, 0.707107f);
7745path.quadTo(2.78942f, 15.8936f, 2.61382f, 16.3479f);
7746path.conicTo(2.25331f, 17.2806f, 1.32056f, 16.9201f, 0.707107f);
7747path.conicTo(0.387801f, 16.5596f, 0.74831f, 15.6269f, 0.707107f);
7748path.close();
7749path.moveTo(2.04744f, 12.7861f);
7750path.quadTo(2.28569f, 12.3384f, 2.5412f, 11.9003f);
7751path.conicTo(3.04504f, 11.0365f, 3.90884f, 11.5403f, 0.707107f);
7752path.conicTo(4.77264f, 12.0442f, 4.26881f, 12.908f, 0.707107f);
7753path.quadTo(4.03293f, 13.3123f, 3.81302f, 13.7256f);
7754path.conicTo(3.34325f, 14.6084f, 2.46046f, 14.1386f, 0.707107f);
7755path.conicTo(1.57767f, 13.6689f, 2.04744f, 12.7861f, 0.707107f);
7756path.close();
7757path.moveTo(3.60589f, 10.2253f);
7758path.quadTo(3.88812f, 9.81661f, 4.18576f, 9.419f);
7759path.conicTo(4.78503f, 8.61845f, 5.58558f, 9.21772f, 0.707107f);
7760path.conicTo(6.38613f, 9.81699f, 5.78686f, 10.6175f, 0.707107f);
7761path.quadTo(5.51211f, 10.9846f, 5.25159f, 11.3618f);
7762path.conicTo(4.68333f, 12.1847f, 3.86048f, 11.6164f, 0.707107f);
7763path.conicTo(3.03763f, 11.0481f, 3.60589f, 10.2253f, 0.707107f);
7764path.close();
7765path.moveTo(5.46482f, 7.84259f);
7766path.quadTo(5.80682f, 7.4532f, 6.16407f, 7.07773f);
7767path.conicTo(6.85339f, 6.35327f, 7.57785f, 7.04259f, 0.707107f);
7768path.conicTo(8.30231f, 7.73191f, 7.61299f, 8.45636f, 0.707107f);
7769path.quadTo(7.28322f, 8.80295f, 6.96752f, 9.16239f);
7770path.conicTo(6.30762f, 9.91375f, 5.55627f, 9.25385f, 0.707107f);
7771path.conicTo(4.80492f, 8.59395f, 5.46482f, 7.84259f, 0.707107f);
7772path.close();
7773path.moveTo(7.68062f, 5.60827f);
7774path.quadTo(8.08142f, 5.25031f, 8.49666f, 4.90921f);
7775path.conicTo(9.26938f, 4.27447f, 9.90412f, 5.04719f, 0.707107f);
7776path.conicTo(10.5389f, 5.81992f, 9.76614f, 6.45466f, 0.707107f);
7777path.quadTo(9.38285f, 6.76951f, 9.01289f, 7.09994f);
7778path.conicTo(8.26705f, 7.76607f, 7.60092f, 7.02024f, 0.707107f);
7779path.conicTo(6.93479f, 6.2744f, 7.68062f, 5.60827f, 0.707107f);
7780path.close();
7781path.moveTo(10.2392f, 3.59627f);
7782path.quadTo(10.6626f, 3.30433f, 11.0971f, 3.02935f);
7783path.conicTo(11.9421f, 2.49463f, 12.4768f, 3.33965f, 0.707107f);
7784path.conicTo(13.0116f, 4.18467f, 12.1666f, 4.7194f, 0.707107f);
7785path.quadTo(11.7654f, 4.97322f, 11.3747f, 5.24271f);
7786path.conicTo(10.5515f, 5.81043f, 9.98373f, 4.98721f, 0.707107f);
7787path.conicTo(9.41601f, 4.16399f, 10.2392f, 3.59627f, 0.707107f);
7788path.close();
7789path.moveTo(12.8847f, 1.99524f);
7790path.quadTo(13.3459f, 1.75234f, 13.8165f, 1.52812f);
7791path.conicTo(14.7193f, 1.09799f, 15.1494f, 2.00075f, 0.707107f);
7792path.conicTo(15.5795f, 2.90352f, 14.6768f, 3.33365f, 0.707107f);
7793path.quadTo(14.2424f, 3.54063f, 13.8166f, 3.76484f);
7794path.conicTo(12.9318f, 4.23081f, 12.4658f, 3.34601f, 0.707107f);
7795path.conicTo(11.9999f, 2.46122f, 12.8847f, 1.99524f, 0.707107f);
7796path.close();
7797path.moveTo(15.7467f, 0.702339f);
7798path.quadTo(16.2402f, 0.514409f, 16.7409f, 0.346672f);
7799path.conicTo(17.6891f, 0.029011f, 18.0067f, 0.977215f, 0.707107f);
7800path.conicTo(18.3244f, 1.92542f, 17.3762f, 2.24308f, 0.707107f);
7801path.quadTo(16.914f, 2.39792f, 16.4585f, 2.57139f);
7802path.conicTo(15.524f, 2.92729f, 15.1681f, 1.99276f, 0.707107f);
7803path.conicTo(14.8122f, 1.05824f, 15.7467f, 0.702339f, 0.707107f);
7804path.close();
7805path.moveTo(18.7758f, -0.24399f);
7806path.quadTo(19.2913f, -0.371107f, 19.8116f, -0.477061f);
7807path.conicTo(20.7915f, -0.676608f, 20.9911f, 0.303281f, 0.707107f);
7808path.conicTo(21.1906f, 1.28317f, 20.2107f, 1.48272f, 0.707107f);
7809path.quadTo(19.7304f, 1.58052f, 19.2546f, 1.69785f);
7810path.conicTo(18.2836f, 1.93725f, 18.0443f, 0.966329f, 0.707107f);
7811path.conicTo(17.8049f, -0.00459272f, 18.7758f, -0.24399f, 0.707107f);
7812path.close();
7813path.moveTo(21.878f, -0.811882f);
7814path.quadTo(22.396f, -0.874528f, 22.916f, -0.916348f);
7815path.conicTo(23.9128f, -0.996504f, 23.993f, 0.000278629f, 0.707107f);
7816path.conicTo(24.0731f, 0.997061f, 23.0764f, 1.07722f, 0.707107f);
7817path.quadTo(22.5963f, 1.11582f, 22.1182f, 1.17365f);
7818path.conicTo(21.1254f, 1.29372f, 21.0053f, 0.300958f, 0.707107f);
7819path.conicTo(20.8853f, -0.691807f, 21.878f, -0.811882f, 0.707107f);
7820path.close();
7821path.moveTo(24.9926f, -0.999999f);
7822path.quadTo(25.5166f, -1.00015f, 26.0401f, -0.979188f);
7823path.conicTo(27.0393f, -0.939179f, 26.9992f, 0.0600199f, 0.707107f);
7824path.conicTo(26.9592f, 1.05922f, 25.96f, 1.01921f, 0.707107f);
7825path.quadTo(25.4768f, 0.999863f, 24.9932f, 1);
7826path.conicTo(23.9932f, 1.00029f, 23.9929f, 0.000287339f, 0.707107f);
7827path.conicTo(23.9926f, -0.999713f, 24.9926f, -0.999999f, 0.707107f);
7828path.close();
7829path.moveTo(28.1286f, -0.811081f);
7830path.quadTo(28.6441f, -0.748593f, 29.1567f, -0.665572f);
7831path.conicTo(30.1439f, -0.505698f, 29.984f, 0.48144f, 0.707107f);
7832path.conicTo(29.8241f, 1.46858f, 28.837f, 1.3087f, 0.707107f);
7833path.quadTo(28.3638f, 1.23207f, 27.8879f, 1.17439f);
7834path.conicTo(26.8952f, 1.05406f, 27.0155f, 0.0613233f, 0.707107f);
7835path.conicTo(27.1359f, -0.931411f, 28.1286f, -0.811081f, 0.707107f);
7836path.close();
7837path.moveTo(31.214f, -0.246499f);
7838path.quadTo(31.7439f, -0.116076f, 32.2679f, 0.0364622f);
7839path.conicTo(33.228f, 0.315996f, 32.9485f, 1.27613f, 0.707107f);
7840path.conicTo(32.6689f, 2.23627f, 31.7088f, 1.95673f, 0.707107f);
7841path.quadTo(31.2252f, 1.81593f, 30.736f, 1.69554f);
7842path.conicTo(29.765f, 1.45654f, 30.004f, 0.48552f, 0.707107f);
7843path.conicTo(30.243f, -0.485499f, 31.214f, -0.246499f, 0.707107f);
7844path.close();
7845path.moveTo(34.3038f, 0.721629f);
7846path.quadTo(34.797f, 0.910612f, 35.282f, 1.11946f);
7847path.conicTo(36.2005f, 1.51493f, 35.805f, 2.43341f, 0.707107f);
7848path.conicTo(35.4096f, 3.35189f, 34.4911f, 2.95642f, 0.707107f);
7849path.quadTo(34.0434f, 2.76365f, 33.5881f, 2.5892f);
7850path.conicTo(32.6543f, 2.23137f, 33.0122f, 1.29758f, 0.707107f);
7851path.conicTo(33.37f, 0.363796f, 34.3038f, 0.721629f, 0.707107f);
7852path.close();
7853path.moveTo(37.1508f, 2.01396f);
7854path.quadTo(37.5996f, 2.2512f, 38.0388f, 2.50578f);
7855path.conicTo(38.904f, 3.00727f, 38.4025f, 3.87244f, 0.707107f);
7856path.conicTo(37.901f, 4.7376f, 37.0358f, 4.23612f, 0.707107f);
7857path.quadTo(36.6304f, 4.00111f, 36.2161f, 3.78211f);
7858path.conicTo(35.332f, 3.31476f, 35.7994f, 2.43069f, 0.707107f);
7859path.conicTo(36.2667f, 1.54661f, 37.1508f, 2.01396f, 0.707107f);
7860path.close();
7861path.moveTo(39.718f, 3.56681f);
7862path.quadTo(40.1269f, 3.84765f, 40.5249f, 4.14392f);
7863path.conicTo(41.3271f, 4.74104f, 40.73f, 5.54319f, 0.707107f);
7864path.conicTo(40.1329f, 6.34535f, 39.3307f, 5.74823f, 0.707107f);
7865path.quadTo(38.9634f, 5.47478f, 38.5858f, 5.21552f);
7866path.conicTo(37.7615f, 4.64945f, 38.3275f, 3.82509f, 0.707107f);
7867path.conicTo(38.8936f, 3.00074f, 39.718f, 3.56681f, 0.707107f);
7868path.close();
7869path.moveTo(42.1033f, 5.41741f);
7870path.quadTo(42.4933f, 5.75802f, 42.8694f, 6.11388f);
7871path.conicTo(43.5958f, 6.80115f, 42.9085f, 7.52755f, 0.707107f);
7872path.conicTo(42.2212f, 8.25394f, 41.4948f, 7.56667f, 0.707107f);
7873path.quadTo(41.1476f, 7.23817f, 40.7876f, 6.92375f);
7874path.conicTo(40.0345f, 6.26593f, 40.6923f, 5.51275f, 0.707107f);
7875path.conicTo(41.3501f, 4.75958f, 42.1033f, 5.41741f, 0.707107f);
7876path.close();
7877path.moveTo(44.3419f, 7.62498f);
7878path.quadTo(44.7007f, 8.02444f, 45.0428f, 8.43835f);
7879path.conicTo(45.6797f, 9.20922f, 44.9089f, 9.84622f, 0.707107f);
7880path.conicTo(44.138f, 10.4832f, 43.501f, 9.71234f, 0.707107f);
7881path.quadTo(43.1852f, 9.3302f, 42.854f, 8.96151f);
7882path.conicTo(42.1858f, 8.21759f, 42.9297f, 7.54932f, 0.707107f);
7883path.conicTo(43.6736f, 6.88106f, 44.3419f, 7.62498f, 0.707107f);
7884path.close();
7885path.moveTo(46.3599f, 10.1759f);
7886path.quadTo(46.6546f, 10.6005f, 46.9322f, 11.0366f);
7887path.conicTo(47.4693f, 11.8801f, 46.6257f, 12.4172f, 0.707107f);
7888path.conicTo(45.7822f, 12.9542f, 45.2451f, 12.1107f, 0.707107f);
7889path.quadTo(44.9889f, 11.7082f, 44.7168f, 11.3162f);
7890path.conicTo(44.1467f, 10.4947f, 44.9682f, 9.92452f, 0.707107f);
7891path.conicTo(45.7897f, 9.35435f, 46.3599f, 10.1759f, 0.707107f);
7892path.close();
7893path.moveTo(47.9708f, 12.8204f);
7894path.quadTo(48.2149f, 13.2808f, 48.4403f, 13.7506f);
7895path.conicTo(48.873f, 14.6521f, 47.9715f, 15.0848f, 0.707107f);
7896path.conicTo(47.0699f, 15.5174f, 46.6372f, 14.6159f, 0.707107f);
7897path.quadTo(46.4291f, 14.1822f, 46.2038f, 13.7573f);
7898path.conicTo(45.7354f, 12.8738f, 46.6188f, 12.4054f, 0.707107f);
7899path.conicTo(47.5023f, 11.9369f, 47.9708f, 12.8204f, 0.707107f);
7900path.close();
7901path.moveTo(49.2713f, 15.6778f);
7902path.quadTo(49.4606f, 16.1706f, 49.6297f, 16.6708f);
7903path.conicTo(49.9501f, 17.6181f, 49.0028f, 17.9384f, 0.707107f);
7904path.conicTo(48.0555f, 18.2588f, 47.7351f, 17.3115f, 0.707107f);
7905path.quadTo(47.5791f, 16.8499f, 47.4043f, 16.3949f);
7906path.conicTo(47.0458f, 15.4614f, 47.9793f, 15.1029f, 0.707107f);
7907path.conicTo(48.9128f, 14.7443f, 49.2713f, 15.6778f, 0.707107f);
7908path.close();
7909path.moveTo(50.2261f, 18.7037f);
7910path.quadTo(50.3547f, 19.2188f, 50.4621f, 19.7388f);
7911path.conicTo(50.6645f, 20.7182f, 49.6852f, 20.9205f, 0.707107f);
7912path.conicTo(48.7059f, 21.1229f, 48.5035f, 20.1436f, 0.707107f);
7913path.quadTo(48.4043f, 19.6636f, 48.2856f, 19.1881f);
7914path.conicTo(48.0435f, 18.2178f, 49.0137f, 17.9757f, 0.707107f);
7915path.conicTo(49.984f, 17.7335f, 50.2261f, 18.7037f, 0.707107f);
7916path.close();
7917path.moveTo(50.803f, 21.8055f);
7918path.quadTo(50.8671f, 22.3234f, 50.9104f, 22.8434f);
7919path.conicTo(50.9934f, 23.8399f, 49.9968f, 23.9229f, 0.707107f);
7920path.conicTo(49.0002f, 24.0058f, 48.9173f, 23.0093f, 0.707107f);
7921path.quadTo(48.8773f, 22.5293f, 48.8182f, 22.0513f);
7922path.conicTo(48.6953f, 21.0588f, 49.6877f, 20.936f, 0.707107f);
7923path.conicTo(50.6801f, 20.8131f, 50.803f, 21.8055f, 0.707107f);
7924path.close();
7925path.moveTo(50.9999f, 24.9202f);
7926path.quadTo(51.0015f, 25.4434f, 50.982f, 25.9664f);
7927path.conicTo(50.9449f, 26.9657f, 49.9456f, 26.9286f, 0.707107f);
7928path.conicTo(48.9463f, 26.8914f, 48.9834f, 25.8921f, 0.707107f);
7929path.quadTo(49.0014f, 25.4094f, 48.9999f, 24.9263f);
7930path.conicTo(48.9968f, 23.9263f, 49.9968f, 23.9232f, 0.707107f);
7931path.conicTo(50.9968f, 23.9202f, 50.9999f, 24.9202f, 0.707107f);
7932path.close();
7933path.moveTo(50.8198f, 28.0562f);
7934path.quadTo(50.7587f, 28.5721f, 50.677f, 29.0852f);
7935path.conicTo(50.5199f, 30.0728f, 49.5323f, 29.9157f, 0.707107f);
7936path.conicTo(48.5448f, 29.7586f, 48.7019f, 28.771f, 0.707107f);
7937path.quadTo(48.7772f, 28.2974f, 48.8336f, 27.8211f);
7938path.conicTo(48.9512f, 26.8281f, 49.9442f, 26.9456f, 0.707107f);
7939path.conicTo(50.9373f, 27.0632f, 50.8198f, 28.0562f, 0.707107f);
7940path.close();
7941path.moveTo(50.2647f, 31.1395f);
7942path.quadTo(50.1358f, 31.6701f, 49.9847f, 32.1949f);
7943path.conicTo(49.7079f, 33.1558f, 48.747f, 32.8791f, 0.707107f);
7944path.conicTo(47.786f, 32.6024f, 48.0628f, 31.6414f, 0.707107f);
7945path.quadTo(48.2022f, 31.1571f, 48.3213f, 30.6672f);
7946path.conicTo(48.5574f, 29.6955f, 49.5291f, 29.9317f, 0.707107f);
7947path.conicTo(50.5009f, 30.1678f, 50.2647f, 31.1395f, 0.707107f);
7948path.close();
7949path.moveTo(49.3049f, 34.2343f);
7950path.quadTo(49.1171f, 34.7285f, 48.9095f, 35.2145f);
7951path.conicTo(48.5166f, 36.1341f, 47.597f, 35.7412f, 0.707107f);
7952path.conicTo(46.6774f, 35.3483f, 47.0703f, 34.4288f, 0.707107f);
7953path.quadTo(47.262f, 33.9801f, 47.4353f, 33.524f);
7954path.conicTo(47.7904f, 32.5892f, 48.7252f, 32.9444f, 0.707107f);
7955path.conicTo(49.66f, 33.2995f, 49.3049f, 34.2343f, 0.707107f);
7956path.close();
7957path.moveTo(48.0194f, 37.0875f);
7958path.quadTo(47.7831f, 37.5374f, 47.5295f, 37.9777f);
7959path.conicTo(47.0304f, 38.8443f, 46.1638f, 38.3451f, 0.707107f);
7960path.conicTo(45.2973f, 37.846f, 45.7965f, 36.9795f, 0.707107f);
7961path.quadTo(46.0306f, 36.5729f, 46.2487f, 36.1577f);
7962path.conicTo(46.7136f, 35.2723f, 47.5989f, 35.7372f, 0.707107f);
7963path.conicTo(48.4843f, 36.2021f, 48.0194f, 37.0875f, 0.707107f);
7964path.close();
7965path.moveTo(46.4721f, 39.6612f);
7966path.quadTo(46.1926f, 40.0705f, 45.8977f, 40.4688f);
7967path.conicTo(45.3028f, 41.2726f, 44.499f, 40.6776f, 0.707107f);
7968path.conicTo(43.6953f, 40.0827f, 44.2902f, 39.2789f, 0.707107f);
7969path.quadTo(44.5624f, 38.9112f, 44.8204f, 38.5334f);
7970path.conicTo(45.3843f, 37.7075f, 46.2101f, 38.2714f, 0.707107f);
7971path.conicTo(47.036f, 38.8353f, 46.4721f, 39.6612f, 0.707107f);
7972path.close();
7973path.moveTo(44.6298f, 42.0491f);
7974path.quadTo(44.2906f, 42.4396f, 43.9361f, 42.8164f);
7975path.conicTo(43.2509f, 43.5447f, 42.5226f, 42.8595f, 0.707107f);
7976path.conicTo(41.7942f, 42.1742f, 42.4795f, 41.4459f, 0.707107f);
7977path.quadTo(42.8067f, 41.0981f, 43.1198f, 40.7376f);
7978path.conicTo(43.7756f, 39.9826f, 44.5306f, 40.6383f, 0.707107f);
7979path.conicTo(45.2856f, 41.2941f, 44.6298f, 42.0491f, 0.707107f);
7980path.close();
7981path.moveTo(42.4305f, 44.2919f);
7982path.quadTo(42.0324f, 44.6516f, 41.6198f, 44.9946f);
7983path.conicTo(40.8507f, 45.6338f, 40.2115f, 44.8648f, 0.707107f);
7984path.conicTo(39.5723f, 44.0958f, 40.3413f, 43.4566f, 0.707107f);
7985path.quadTo(40.7222f, 43.1399f, 41.0897f, 42.8079f);
7986path.conicTo(41.8317f, 42.1375f, 42.5021f, 42.8795f, 0.707107f);
7987path.conicTo(43.1725f, 43.6215f, 42.4305f, 44.2919f, 0.707107f);
7988path.close();
7989path.moveTo(39.8873f, 46.3159f);
7990path.quadTo(39.4613f, 46.6134f, 39.0238f, 46.8936f);
7991path.conicTo(38.1818f, 47.433f, 37.6424f, 46.5909f, 0.707107f);
7992path.conicTo(37.103f, 45.7489f, 37.9451f, 45.2095f, 0.707107f);
7993path.quadTo(38.3489f, 44.9508f, 38.7421f, 44.6763f);
7994path.conicTo(39.5619f, 44.1037f, 40.1345f, 44.9235f, 0.707107f);
7995path.conicTo(40.7071f, 45.7434f, 39.8873f, 46.3159f, 0.707107f);
7996path.close();
7997path.moveTo(37.2437f, 47.9367f);
7998path.quadTo(36.7842f, 48.182f, 36.3153f, 48.4086f);
7999path.conicTo(35.415f, 48.8439f, 34.9797f, 47.9435f, 0.707107f);
8000path.conicTo(34.5445f, 47.0432f, 35.4449f, 46.608f, 0.707107f);
8001path.quadTo(35.8778f, 46.3987f, 36.3019f, 46.1723f);
8002path.conicTo(37.1841f, 45.7014f, 37.655f, 46.5836f, 0.707107f);
8003path.conicTo(38.1259f, 47.4658f, 37.2437f, 47.9367f, 0.707107f);
8004path.close();
8005path.moveTo(34.3909f, 49.2448f);
8006path.quadTo(33.8988f, 49.4354f, 33.3992f, 49.606f);
8007path.conicTo(32.4528f, 49.929f, 32.1298f, 48.9826f, 0.707107f);
8008path.conicTo(31.8068f, 48.0362f, 32.7532f, 47.7132f, 0.707107f);
8009path.quadTo(33.2142f, 47.5558f, 33.6685f, 47.3798f);
8010path.conicTo(34.601f, 47.0186f, 34.9622f, 47.9511f, 0.707107f);
8011path.conicTo(35.3234f, 48.8836f, 34.3909f, 49.2448f, 0.707107f);
8012path.close();
8013path.moveTo(31.3682f, 50.208f);
8014path.quadTo(30.8535f, 50.3381f, 30.3338f, 50.447f);
8015path.conicTo(29.3551f, 50.6521f, 29.15f, 49.6734f, 0.707107f);
8016path.conicTo(28.9448f, 48.6947f, 29.9236f, 48.4895f, 0.707107f);
8017path.quadTo(30.4033f, 48.389f, 30.8784f, 48.269f);
8018path.conicTo(31.8479f, 48.024f, 32.0929f, 48.9936f, 0.707107f);
8019path.conicTo(32.3378f, 49.9631f, 31.3682f, 50.208f, 0.707107f);
8020path.close();
8021path.moveTo(28.2669f, 50.7939f);
8022path.quadTo(27.7491f, 50.8595f, 27.2292f, 50.9043f);
8023path.conicTo(26.2329f, 50.99f, 26.1472f, 49.9937f, 0.707107f);
8024path.conicTo(26.0615f, 48.9973f, 27.0578f, 48.9116f, 0.707107f);
8025path.quadTo(27.5378f, 48.8703f, 28.0156f, 48.8098f);
8026path.conicTo(29.0077f, 48.6841f, 29.1334f, 49.6762f, 0.707107f);
8027path.conicTo(29.259f, 50.6683f, 28.2669f, 50.7939f, 0.707107f);
8028path.close();
8029path.moveTo(25.1523f, 50.9996f);
8030path.quadTo(24.6297f, 51.0026f, 24.1072f, 50.9847f);
8031path.conicTo(23.1078f, 50.9503f, 23.1422f, 49.9509f, 0.707107f);
8032path.conicTo(23.1765f, 48.9515f, 24.1759f, 48.9858f, 0.707107f);
8033path.quadTo(24.658f, 49.0024f, 25.1406f, 48.9996f);
8034path.conicTo(26.1406f, 48.9937f, 26.1464f, 49.9937f, 0.707107f);
8035path.conicTo(26.1523f, 50.9937f, 25.1523f, 50.9996f, 0.707107f);
8036path.close();
8037path.moveTo(22.0162f, 50.8282f);
8038path.quadTo(21.4999f, 50.7686f, 20.9863f, 50.6883f);
8039path.conicTo(19.9983f, 50.5339f, 20.1527f, 49.5459f, 0.707107f);
8040path.conicTo(20.307f, 48.5579f, 21.295f, 48.7123f, 0.707107f);
8041path.quadTo(21.7691f, 48.7864f, 22.2457f, 48.8414f);
8042path.conicTo(23.2391f, 48.9562f, 23.1243f, 49.9496f, 0.707107f);
8043path.conicTo(23.0096f, 50.943f, 22.0162f, 50.8282f, 0.707107f);
8044path.close();
8045path.moveTo(18.9351f, 50.2827f);
8046path.quadTo(18.4037f, 50.1553f, 17.8782f, 50.0056f);
8047path.conicTo(16.9164f, 49.7317f, 17.1904f, 48.7699f, 0.707107f);
8048path.conicTo(17.4643f, 47.8082f, 18.426f, 48.0821f, 0.707107f);
8049path.quadTo(18.9112f, 48.2203f, 19.4016f, 48.3379f);
8050path.conicTo(20.374f, 48.5712f, 20.1408f, 49.5436f, 0.707107f);
8051path.conicTo(19.9075f, 50.516f, 18.9351f, 50.2827f, 0.707107f);
8052path.close();
8053path.moveTo(15.8352f, 49.3312f);
8054path.quadTo(15.3403f, 49.1448f, 14.8531f, 48.9383f);
8055path.conicTo(13.9324f, 48.548f, 14.3227f, 47.6273f, 0.707107f);
8056path.conicTo(14.713f, 46.7066f, 15.6337f, 47.0969f, 0.707107f);
8057path.quadTo(16.0832f, 47.2874f, 16.5402f, 47.4596f);
8058path.conicTo(17.476f, 47.812f, 17.1235f, 48.7479f, 0.707107f);
8059path.conicTo(16.771f, 49.6837f, 15.8352f, 49.3312f, 0.707107f);
8060path.close();
8061path.moveTo(12.9759f, 48.0526f);
8062path.quadTo(12.5249f, 47.8173f, 12.0835f, 47.5647f);
8063path.conicTo(11.2156f, 47.0679f, 11.7124f, 46.2f, 0.707107f);
8064path.conicTo(12.2092f, 45.3321f, 13.0771f, 45.8289f, 0.707107f);
8065path.quadTo(13.4846f, 46.0622f, 13.9009f, 46.2793f);
8066path.conicTo(14.7875f, 46.7418f, 14.325f, 47.6284f, 0.707107f);
8067path.conicTo(13.8626f, 48.5151f, 12.9759f, 48.0526f, 0.707107f);
8068path.close();
8069path.moveTo(10.3957f, 46.5108f);
8070path.quadTo(9.9861f, 46.2327f, 9.58733f, 45.9392f);
8071path.conicTo(8.78198f, 45.3464f, 9.37478f, 44.541f, 0.707107f);
8072path.conicTo(9.96757f, 43.7357f, 10.7729f, 44.3285f, 0.707107f);
8073path.quadTo(11.141f, 44.5994f, 11.5191f, 44.8561f);
8074path.conicTo(12.3464f, 45.4178f, 11.7847f, 46.2451f, 0.707107f);
8075path.conicTo(11.223f, 47.0725f, 10.3957f, 46.5108f, 0.707107f);
8076path.close();
8077path.moveTo(8.00525f, 44.6769f);
8078path.quadTo(7.6141f, 44.339f, 7.23672f, 43.9859f);
8079path.conicTo(6.50649f, 43.3027f, 7.18969f, 42.5725f, 0.707107f);
8080path.conicTo(7.87289f, 41.8423f, 8.60312f, 42.5255f, 0.707107f);
8081path.quadTo(8.95149f, 42.8514f, 9.31254f, 43.1632f);
8082path.conicTo(10.0693f, 43.8169f, 9.4157f, 44.5737f, 0.707107f);
8083path.conicTo(8.76206f, 45.3305f, 8.00525f, 44.6769f, 0.707107f);
8084path.close();
8085path.moveTo(5.75818f, 42.4858f);
8086path.quadTo(5.39763f, 42.089f, 5.05371f, 41.6777f);
8087path.conicTo(4.41226f, 40.9105f, 5.17942f, 40.2691f, 0.707107f);
8088path.conicTo(5.94658f, 39.6276f, 6.58804f, 40.3948f, 0.707107f);
8089path.quadTo(6.90548f, 40.7744f, 7.23832f, 41.1407f);
8090path.conicTo(7.91085f, 41.8808f, 7.17078f, 42.5533f, 0.707107f);
8091path.conicTo(6.43071f, 43.2258f, 5.75818f, 42.4858f, 0.707107f);
8092path.close();
8093path.moveTo(3.72821f, 39.9503f);
8094path.quadTo(3.42794f, 39.523f, 3.1451f, 39.0842f);
8095path.conicTo(2.6034f, 38.2436f, 3.44397f, 37.7019f, 0.707107f);
8096path.conicTo(4.28454f, 37.1602f, 4.82624f, 38.0008f, 0.707107f);
8097path.quadTo(5.08734f, 38.4059f, 5.3645f, 38.8003f);
8098path.conicTo(5.93951f, 39.6184f, 5.12137f, 40.1934f, 0.707107f);
8099path.conicTo(4.30322f, 40.7684f, 3.72821f, 39.9503f, 0.707107f);
8100path.close();
8101path.moveTo(2.09762f, 37.3078f);
8102path.quadTo(1.85114f, 36.8491f, 1.62324f, 36.381f);
8103path.conicTo(1.18551f, 35.4819f, 2.08461f, 35.0442f, 0.707107f);
8104path.conicTo(2.98372f, 34.6064f, 3.42145f, 35.5055f, 0.707107f);
8105path.quadTo(3.63184f, 35.9377f, 3.85934f, 36.361f);
8106path.conicTo(4.33272f, 37.2419f, 3.45185f, 37.7153f, 0.707107f);
8107path.conicTo(2.57099f, 38.1886f, 2.09762f, 37.3078f, 0.707107f);
8108path.close();
8109path.moveTo(0.781912f, 34.4596f);
8110path.quadTo(0.589924f, 33.9681f, 0.418029f, 33.4692f);
8111path.conicTo(0.0922952f, 32.5237f, 1.03776f, 32.198f, 0.707107f);
8112path.conicTo(1.98322f, 31.8722f, 2.30895f, 32.8177f, 0.707107f);
8113path.quadTo(2.46761f, 33.2782f, 2.64484f, 33.7319f);
8114path.conicTo(3.00867f, 34.6634f, 2.07721f, 35.0272f, 0.707107f);
8115path.conicTo(1.14575f, 35.3911f, 0.781912f, 34.4596f, 0.707107f);
8116path.close();
8117path.moveTo(-0.189761f, 31.4402f);
8118path.quadTo(-0.321263f, 30.9258f, -0.431662f, 30.4065f);
8119path.conicTo(-0.639608f, 29.4284f, 0.338532f, 29.2205f, 0.707107f);
8120path.conicTo(1.31667f, 29.0125f, 1.52462f, 29.9906f, 0.707107f);
8121path.quadTo(1.62653f, 30.47f, 1.74791f, 30.9448f);
8122path.conicTo(1.99561f, 31.9136f, 1.02677f, 32.1613f, 0.707107f);
8123path.conicTo(0.0579369f, 32.409f, -0.189761f, 31.4402f, 0.707107f);
8124path.close();
8125path.moveTo(-0.784658f, 28.3394f);
8126path.quadTo(-0.851693f, 27.8218f, -0.897902f, 27.3019f);
8127path.conicTo(-0.986437f, 26.3058f, 0.00963629f, 26.2173f, 0.707107f);
8128path.conicTo(1.00571f, 26.1288f, 1.09424f, 27.1248f, 0.707107f);
8129path.quadTo(1.1369f, 27.6047f, 1.19878f, 28.0825f);
8130path.conicTo(1.32721f, 29.0742f, 0.335496f, 29.2027f, 0.707107f);
8131path.conicTo(-0.656222f, 29.3311f, -0.784658f, 28.3394f, 0.707107f);
8132path.close();
8133path.moveTo(-0.999031f, 25.2248f);
8134path.quadTo(-1.00354f, 24.7027f, -0.987098f, 24.1809f);
8135path.conicTo(-0.955596f, 23.1814f, 0.0439078f, 23.2129f, 0.707107f);
8136path.conicTo(1.04341f, 23.2444f, 1.01191f, 24.2439f, 0.707107f);
8137path.quadTo(0.996728f, 24.7256f, 1.00089f, 25.2075f);
8138path.conicTo(1.00954f, 26.2075f, 0.00957754f, 26.2161f, 0.707107f);
8139path.conicTo(-0.990385f, 26.2248f, -0.999031f, 25.2248f, 0.707107f);
8140path.close();
8141path.moveTo(-0.836492f, 22.0887f);
8142path.quadTo(-0.778263f, 21.5719f, -0.699419f, 21.0579f);
8143path.conicTo(-0.5478f, 20.0695f, 0.440639f, 20.2211f, 0.707107f);
8144path.conicTo(1.42908f, 20.3727f, 1.27746f, 21.3612f, 0.707107f);
8145path.quadTo(1.20468f, 21.8356f, 1.15093f, 22.3126f);
8146path.conicTo(1.03896f, 23.3063f, 0.0452449f, 23.1944f, 0.707107f);
8147path.conicTo(-0.948466f, 23.0824f, -0.836492f, 22.0887f, 0.707107f);
8148path.close();
8149path.moveTo(-0.300548f, 19.0098f);
8150path.quadTo(-0.174573f, 18.4777f, -0.0263361f, 17.9514f);
8151path.conicTo(0.244762f, 16.9889f, 1.20731f, 17.26f, 0.707107f);
8152path.conicTo(2.16987f, 17.5311f, 1.89877f, 18.4936f, 0.707107f);
8153path.quadTo(1.76193f, 18.9794f, 1.64565f, 19.4706f);
8154path.conicTo(1.41526f, 20.4437f, 0.442159f, 20.2133f, 0.707107f);
8155path.conicTo(-0.530939f, 19.9829f, -0.300548f, 19.0098f, 0.707107f);
8156path.close();
8157path.moveTo(0.642658f, 15.9049f);
8158path.quadTo(0.827861f, 15.409f, 1.0331f, 14.9209f);
8159path.conicTo(1.42076f, 13.9991f, 2.34256f, 14.3868f, 0.707107f);
8160path.conicTo(3.26437f, 14.7744f, 2.87671f, 15.6962f, 0.707107f);
8161path.quadTo(2.68726f, 16.1467f, 2.5163f, 16.6046f);
8162path.conicTo(2.16648f, 17.5414f, 1.22967f, 17.1916f, 0.707107f);
8163path.conicTo(0.292846f, 16.8418f, 0.642658f, 15.9049f, 0.707107f);
8164path.close();
8165path.moveTo(1.91434f, 13.0395f);
8166path.quadTo(2.14856f, 12.5875f, 2.40031f, 12.1449f);
8167path.conicTo(2.89473f, 11.2757f, 3.76395f, 11.7701f, 0.707107f);
8168path.conicTo(4.63317f, 12.2645f, 4.13875f, 13.1337f, 0.707107f);
8169path.quadTo(3.90637f, 13.5423f, 3.69016f, 13.9596f);
8170path.conicTo(3.23014f, 14.8475f, 2.34223f, 14.3875f, 0.707107f);
8171path.conicTo(1.45432f, 13.9275f, 1.91434f, 13.0395f, 0.707107f);
8172path.close();
8173path.moveTo(3.45073f, 10.4525f);
8174path.quadTo(3.72744f, 10.0426f, 4.01954f, 9.64356f);
8175path.conicTo(4.61017f, 8.83661f, 5.41711f, 9.42725f, 0.707107f);
8176path.conicTo(6.22405f, 10.0179f, 5.63342f, 10.8248f, 0.707107f);
8177path.quadTo(5.36379f, 11.1932f, 5.10836f, 11.5716f);
8178path.conicTo(4.54884f, 12.4004f, 3.72003f, 11.8409f, 0.707107f);
8179path.conicTo(2.89121f, 11.2813f, 3.45073f, 10.4525f, 0.707107f);
8180path.close();
8181path.moveTo(5.2763f, 8.05964f);
8182path.quadTo(5.61273f, 7.66793f, 5.96445f, 7.2899f);
8183path.conicTo(6.6456f, 6.55776f, 7.37774f, 7.23892f, 0.707107f);
8184path.conicTo(8.10988f, 7.92008f, 7.42872f, 8.65221f, 0.707107f);
8185path.quadTo(7.10407f, 9.00116f, 6.79351f, 9.36274f);
8186path.conicTo(6.14196f, 10.1213f, 5.38336f, 9.46979f, 0.707107f);
8187path.conicTo(4.62475f, 8.81824f, 5.2763f, 8.05964f, 0.707107f);
8188path.close();
8189path.moveTo(7.45913f, 5.80839f);
8190path.quadTo(7.85457f, 5.44696f, 8.26455f, 5.10214f);
8191path.conicTo(9.02985f, 4.45847f, 9.67352f, 5.22377f, 0.707107f);
8192path.conicTo(10.3172f, 5.98907f, 9.5519f, 6.63274f, 0.707107f);
8193path.quadTo(9.17345f, 6.95105f, 8.80843f, 7.28467f);
8194path.conicTo(8.07029f, 7.95931f, 7.39564f, 7.22117f, 0.707107f);
8195path.conicTo(6.72099f, 6.48303f, 7.45913f, 5.80839f, 0.707107f);
8196path.close();
8197path.moveTo(9.98688f, 3.77251f);
8198path.quadTo(10.4153f, 3.46948f, 10.8557f, 3.18397f);
8199path.conicTo(11.6948f, 2.63996f, 12.2388f, 3.47904f, 0.707107f);
8200path.conicTo(12.7828f, 4.31812f, 11.9437f, 4.86213f, 0.707107f);
8201path.quadTo(11.5373f, 5.12566f, 11.1417f, 5.40539f);
8202path.conicTo(10.3253f, 5.98282f, 9.74787f, 5.16638f, 0.707107f);
8203path.conicTo(9.17044f, 4.34994f, 9.98688f, 3.77251f, 0.707107f);
8204path.close();
8205path.moveTo(12.6283f, 2.13208f);
8206path.quadTo(13.0861f, 1.88442f, 13.5534f, 1.65529f);
8207path.conicTo(14.4513f, 1.21504f, 14.8915f, 2.11291f, 0.707107f);
8208path.conicTo(15.3318f, 3.01078f, 14.4339f, 3.45104f, 0.707107f);
8209path.quadTo(14.0025f, 3.66255f, 13.58f, 3.89115f);
8210path.conicTo(12.7005f, 4.36698f, 12.2246f, 3.48744f, 0.707107f);
8211path.conicTo(11.7488f, 2.60791f, 12.6283f, 2.13208f, 0.707107f);
8212path.close();
8213path.moveTo(15.4718f, 0.808815f);
8214path.quadTo(15.9627f, 0.615476f, 16.461f, 0.442208f);
8215path.conicTo(17.4055f, 0.113784f, 17.7339f, 1.05831f, 0.707107f);
8216path.conicTo(18.0624f, 2.00284f, 17.1178f, 2.33127f, 0.707107f);
8217path.quadTo(16.6578f, 2.49121f, 16.2047f, 2.66968f);
8218path.conicTo(15.2743f, 3.03614f, 14.9078f, 2.10571f, 0.707107f);
8219path.conicTo(14.5414f, 1.17528f, 15.4718f, 0.808815f, 0.707107f);
8220path.close();
8221path.moveTo(18.4879f, -0.171272f);
8222path.quadTo(19.0019f, -0.304236f, 19.5208f, -0.416111f);
8223path.conicTo(20.4984f, -0.62685f, 20.7091f, 0.350692f, 0.707107f);
8224path.conicTo(20.9198f, 1.32823f, 19.9423f, 1.53897f, 0.707107f);
8225path.quadTo(19.4633f, 1.64224f, 18.9889f, 1.76498f);
8226path.conicTo(18.0207f, 2.01544f, 17.7703f, 1.04732f, 0.707107f);
8227path.conicTo(17.5198f, 0.0791926f, 18.4879f, -0.171272f, 0.707107f);
8228path.close();
8229path.moveTo(21.5882f, -0.77517f);
8230path.quadTo(22.1056f, -0.843665f, 22.6254f, -0.891339f);
8231path.conicTo(23.6212f, -0.982672f, 23.7126f, 0.0131486f, 0.707107f);
8232path.conicTo(23.8039f, 1.00897f, 22.8081f, 1.1003f, 0.707107f);
8233path.quadTo(22.3283f, 1.14431f, 21.8506f, 1.20754f);
8234path.conicTo(20.8592f, 1.33876f, 20.728f, 0.347405f, 0.707107f);
8235path.conicTo(20.5968f, -0.643948f, 21.5882f, -0.77517f, 0.707107f);
8236path.close();
8237path.moveTo(24.7026f, -0.998301f);
8238path.quadTo(25.2241f, -1.00426f, 25.7453f, -0.989316f);
8239path.conicTo(26.7449f, -0.960651f, 26.7162f, 0.0389383f, 0.707107f);
8240path.conicTo(26.6876f, 1.03853f, 25.688f, 1.00986f, 0.707107f);
8241path.quadTo(25.2068f, 0.996064f, 24.7255f, 1.00157f);
8242path.conicTo(23.7256f, 1.013f, 23.7141f, 0.0130688f, 0.707107f);
8243path.conicTo(23.7027f, -0.986866f, 24.7026f, -0.998301f, 0.707107f);
8244path.close();
8245path.moveTo(27.8388f, -0.844563f);
8246path.quadTo(28.3559f, -0.787759f, 28.8704f, -0.710314f);
8247path.conicTo(29.8592f, -0.561454f, 29.7104f, 0.427404f, 0.707107f);
8248path.conicTo(29.5615f, 1.41626f, 28.5726f, 1.2674f, 0.707107f);
8249path.quadTo(28.0978f, 1.19591f, 27.6204f, 1.14348f);
8250path.conicTo(26.6264f, 1.0343f, 26.7356f, 0.0402742f, 0.707107f);
8251path.conicTo(26.8447f, -0.953747f, 27.8388f, -0.844563f, 0.707107f);
8252path.close();
8253path.moveTo(30.9153f, -0.318153f);
8254path.quadTo(31.4481f, -0.193671f, 31.9752f, -0.046875f);
8255path.conicTo(32.9386f, 0.221405f, 32.6703f, 1.18475f, 0.707107f);
8256path.conicTo(32.402f, 2.14809f, 31.4387f, 1.87981f, 0.707107f);
8257path.quadTo(30.9521f, 1.74431f, 30.4603f, 1.6294f);
8258path.conicTo(29.4865f, 1.40189f, 29.714f, 0.428111f, 0.707107f);
8259path.conicTo(29.9416f, -0.545664f, 30.9153f, -0.318153f, 0.707107f);
8260path.close();
8261path.moveTo(34.0252f, 0.616677f);
8262path.quadTo(34.5221f, 0.800609f, 35.0111f, 1.00465f);
8263path.conicTo(35.934f, 1.3897f, 35.549f, 2.31259f, 0.707107f);
8264path.conicTo(35.1639f, 3.23549f, 34.241f, 2.85044f, 0.707107f);
8265path.quadTo(33.7896f, 2.66211f, 33.3309f, 2.49232f);
8266path.conicTo(32.3931f, 2.1452f, 32.7402f, 1.20738f, 0.707107f);
8267path.conicTo(33.0873f, 0.269559f, 34.0252f, 0.616677f, 0.707107f);
8268path.close();
8269path.moveTo(36.8967f, 1.88141f);
8270path.quadTo(37.3499f, 2.11462f, 37.7936f, 2.3654f);
8271path.conicTo(38.6641f, 2.85746f, 38.1721f, 3.72802f, 0.707107f);
8272path.conicTo(37.68f, 4.59858f, 36.8094f, 4.10652f, 0.707107f);
8273path.quadTo(36.3999f, 3.87504f, 35.9815f, 3.65976f);
8274path.conicTo(35.0924f, 3.2022f, 35.5499f, 2.31302f, 0.707107f);
8275path.conicTo(36.0075f, 1.42384f, 36.8967f, 1.88141f, 0.707107f);
8276path.close();
8277path.moveTo(39.4914f, 3.413f);
8278path.lineTo(39.5381f, 3.44439f);
8279path.quadTo(39.9244f, 3.70494f, 40.3002f, 3.97845f);
8280path.conicTo(41.1087f, 4.56692f, 40.5202f, 5.37544f, 0.707107f);
8281path.conicTo(39.9317f, 6.18396f, 39.1232f, 5.59549f, 0.707107f);
8282path.quadTo(38.7763f, 5.34298f, 38.4215f, 5.10371f);
8283path.lineTo(38.3749f, 5.07232f);
8284path.conicTo(37.5452f, 4.51406f, 38.1035f, 3.68439f, 0.707107f);
8285path.conicTo(38.6618f, 2.85473f, 39.4914f, 3.413f, 0.707107f);
8286path.close();
8287path.moveTo(41.8859f, 5.22965f);
8288path.quadTo(42.2782f, 5.56471f, 42.6568f, 5.91499f);
8289path.conicTo(43.3908f, 6.5941f, 42.7117f, 7.32814f, 0.707107f);
8290path.conicTo(42.0326f, 8.06218f, 41.2986f, 7.38308f, 0.707107f);
8291path.quadTo(40.949f, 7.05968f, 40.587f, 6.75043f);
8292path.conicTo(39.8266f, 6.10097f, 40.476f, 5.34058f, 0.707107f);
8293path.conicTo(41.1255f, 4.58018f, 41.8859f, 5.22965f, 0.707107f);
8294path.close();
8295path.moveTo(44.1413f, 7.40421f);
8296path.quadTo(44.5035f, 7.79829f, 44.8493f, 8.20695f);
8297path.conicTo(45.4952f, 8.97038f, 44.7317f, 9.61627f, 0.707107f);
8298path.conicTo(43.9683f, 10.2622f, 43.3224f, 9.49874f, 0.707107f);
8299path.quadTo(43.0033f, 9.1215f, 42.6689f, 8.75773f);
8300path.conicTo(41.9921f, 8.02152f, 42.7283f, 7.34476f, 0.707107f);
8301path.conicTo(43.4645f, 6.668f, 44.1413f, 7.40421f, 0.707107f);
8302path.close();
8303path.moveTo(46.183f, 9.9242f);
8304path.quadTo(46.4888f, 10.3539f, 46.777f, 10.7957f);
8305path.conicTo(47.3233f, 11.6332f, 46.4857f, 12.1796f, 0.707107f);
8306path.conicTo(45.6482f, 12.7259f, 45.1018f, 11.8883f, 0.707107f);
8307path.quadTo(44.8358f, 11.4805f, 44.5535f, 11.0839f);
8308path.conicTo(43.9737f, 10.2691f, 44.7884f, 9.6893f, 0.707107f);
8309path.conicTo(45.6032f, 9.10947f, 46.183f, 9.9242f, 0.707107f);
8310path.close();
8311path.moveTo(47.8333f, 12.5645f);
8312path.quadTo(48.0821f, 13.0214f, 48.3125f, 13.4879f);
8313path.conicTo(48.7552f, 14.3845f, 47.8586f, 14.8273f, 0.707107f);
8314path.conicTo(46.962f, 15.2701f, 46.5192f, 14.3734f, 0.707107f);
8315path.quadTo(46.3065f, 13.9428f, 46.0769f, 13.5211f);
8316path.conicTo(45.5986f, 12.6429f, 46.4768f, 12.1646f, 0.707107f);
8317path.conicTo(47.355f, 11.6863f, 47.8333f, 12.5645f, 0.707107f);
8318path.close();
8319path.moveTo(49.1641f, 15.4033f);
8320path.quadTo(49.3588f, 15.8935f, 49.5334f, 16.3912f);
8321path.conicTo(49.8645f, 17.3348f, 48.9209f, 17.6659f, 0.707107f);
8322path.conicTo(47.9773f, 17.997f, 47.6462f, 17.0534f, 0.707107f);
8323path.quadTo(47.485f, 16.5939f, 47.3053f, 16.1415f);
8324path.conicTo(46.9362f, 15.2121f, 47.8656f, 14.843f, 0.707107f);
8325path.conicTo(48.795f, 14.4739f, 49.1641f, 15.4033f, 0.707107f);
8326path.close();
8327path.moveTo(50.1526f, 18.4161f);
8328path.quadTo(50.287f, 18.9296f, 50.4003f, 19.4482f);
8329path.conicTo(50.6139f, 20.4252f, 49.6369f, 20.6387f, 0.707107f);
8330path.conicTo(48.66f, 20.8522f, 48.4465f, 19.8753f, 0.707107f);
8331path.quadTo(48.3419f, 19.3966f, 48.2178f, 18.9225f);
8332path.conicTo(47.9645f, 17.9551f, 48.9319f, 17.7019f, 0.707107f);
8333path.conicTo(49.8993f, 17.4487f, 50.1526f, 18.4161f, 0.707107f);
8334path.close();
8335path.moveTo(50.7655f, 21.5157f);
8336path.quadTo(50.8354f, 22.033f, 50.8846f, 22.5528f);
8337path.conicTo(50.9787f, 23.5483f, 49.9831f, 23.6425f, 0.707107f);
8338path.conicTo(48.9876f, 23.7366f, 48.8935f, 22.741f, 0.707107f);
8339path.quadTo(48.8481f, 22.2613f, 48.7835f, 21.7837f);
8340path.conicTo(48.6495f, 20.7928f, 49.6405f, 20.6587f, 0.707107f);
8341path.conicTo(50.6315f, 20.5247f, 50.7655f, 21.5157f, 0.707107f);
8342path.close();
8343path.moveTo(50.9974f, 24.6301f);
8344path.quadTo(51.0048f, 25.1509f, 50.9913f, 25.6715f);
8345path.conicTo(50.9655f, 26.6712f, 49.9658f, 26.6454f, 0.707107f);
8346path.conicTo(48.9662f, 26.6196f, 48.992f, 25.6199f, 0.707107f);
8347path.quadTo(49.0044f, 25.1393f, 48.9976f, 24.6585f);
8348path.conicTo(48.9834f, 23.6586f, 49.9833f, 23.6444f, 0.707107f);
8349path.conicTo(50.9832f, 23.6302f, 50.9974f, 24.6301f, 0.707107f);
8350path.close();
8351path.moveTo(50.8524f, 27.7662f);
8352path.quadTo(50.7971f, 28.2837f, 50.721f, 28.7986f);
8353path.conicTo(50.5749f, 29.7879f, 49.5856f, 29.6418f, 0.707107f);
8354path.conicTo(48.5963f, 29.4957f, 48.7425f, 28.5064f, 0.707107f);
8355path.quadTo(48.8127f, 28.0311f, 48.8638f, 27.5534f);
8356path.conicTo(48.9702f, 26.5591f, 49.9645f, 26.6655f, 0.707107f);
8357path.conicTo(50.9588f, 26.7718f, 50.8524f, 27.7662f, 0.707107f);
8358path.close();
8359path.moveTo(50.3355f, 30.8404f);
8360path.quadTo(50.2125f, 31.3739f, 50.0672f, 31.9018f);
8361path.conicTo(49.8018f, 32.8659f, 48.8376f, 32.6005f, 0.707107f);
8362path.conicTo(47.8735f, 32.335f, 48.139f, 31.3709f, 0.707107f);
8363path.quadTo(48.2731f, 30.8836f, 48.3867f, 30.3912f);
8364path.conicTo(48.6113f, 29.4167f, 49.5857f, 29.6413f, 0.707107f);
8365path.conicTo(50.5602f, 29.866f, 50.3355f, 30.8404f, 0.707107f);
8366path.close();
8367path.moveTo(49.4091f, 33.9552f);
8368path.quadTo(49.2264f, 34.4531f, 49.0236f, 34.9431f);
8369path.conicTo(48.6412f, 35.8671f, 47.7172f, 35.4846f, 0.707107f);
8370path.conicTo(46.7932f, 35.1022f, 47.1757f, 34.1782f, 0.707107f);
8371path.quadTo(47.3629f, 33.7259f, 47.5315f, 33.2663f);
8372path.conicTo(47.8759f, 32.3275f, 48.8147f, 32.672f, 0.707107f);
8373path.conicTo(49.7535f, 33.0164f, 49.4091f, 33.9552f, 0.707107f);
8374path.close();
8375path.moveTo(48.1514f, 36.8328f);
8376path.quadTo(47.9191f, 37.2871f, 47.6694f, 37.7318f);
8377path.conicTo(47.1797f, 38.6038f, 46.3078f, 38.1141f, 0.707107f);
8378path.conicTo(45.4359f, 37.6244f, 45.9256f, 36.7525f, 0.707107f);
8379path.quadTo(46.1562f, 36.3418f, 46.3705f, 35.9226f);
8380path.conicTo(46.8256f, 35.0321f, 47.716f, 35.4872f, 0.707107f);
8381path.conicTo(48.6065f, 35.9423f, 48.1514f, 36.8328f, 0.707107f);
8382path.close();
8383path.moveTo(46.6245f, 39.4354f);
8384path.lineTo(46.5563f, 39.537f);
8385path.quadTo(46.3146f, 39.8955f, 46.0624f, 40.2438f);
8386path.conicTo(45.4761f, 41.0539f, 44.666f, 40.4676f, 0.707107f);
8387path.conicTo(43.8559f, 39.8813f, 44.4422f, 39.0712f, 0.707107f);
8388path.quadTo(44.6749f, 38.7498f, 44.8955f, 38.4226f);
8389path.lineTo(44.9637f, 38.3211f);
8390path.conicTo(45.5209f, 37.4907f, 46.3513f, 38.0479f, 0.707107f);
8391path.conicTo(47.1817f, 38.605f, 46.6245f, 39.4354f, 0.707107f);
8392path.close();
8393path.moveTo(44.8168f, 41.8314f);
8394path.quadTo(44.4832f, 42.2241f, 44.1342f, 42.6034f);
8395path.conicTo(43.4572f, 43.3394f, 42.7212f, 42.6623f, 0.707107f);
8396path.conicTo(41.9853f, 41.9853f, 42.6623f, 41.2494f, 0.707107f);
8397path.quadTo(42.9845f, 40.8992f, 43.2924f, 40.5366f);
8398path.conicTo(43.9398f, 39.7745f, 44.702f, 40.4218f, 0.707107f);
8399path.conicTo(45.4642f, 41.0692f, 44.8168f, 41.8314f, 0.707107f);
8400path.close();
8401path.moveTo(42.6505f, 44.0908f);
8402path.quadTo(42.2577f, 44.454f, 41.8504f, 44.8006f);
8403path.conicTo(41.0888f, 45.4487f, 40.4408f, 44.6871f, 0.707107f);
8404path.conicTo(39.7927f, 43.9256f, 40.5542f, 43.2775f, 0.707107f);
8405path.quadTo(40.9302f, 42.9575f, 41.2928f, 42.6223f);
8406path.conicTo(42.027f, 41.9434f, 42.7059f, 42.6777f, 0.707107f);
8407path.conicTo(43.3848f, 43.412f, 42.6505f, 44.0908f, 0.707107f);
8408path.close();
8409path.moveTo(40.1383f, 46.1384f);
8410path.quadTo(39.7073f, 46.4471f, 39.2641f, 46.7378f);
8411path.conicTo(38.4281f, 47.2865f, 37.8795f, 46.4504f, 0.707107f);
8412path.conicTo(37.3308f, 45.6143f, 38.1669f, 45.0657f, 0.707107f);
8413path.quadTo(38.576f, 44.7972f, 38.9738f, 44.5124f);
8414path.conicTo(39.7868f, 43.9301f, 40.369f, 44.7432f, 0.707107f);
8415path.conicTo(40.9513f, 45.5562f, 40.1383f, 46.1384f, 0.707107f);
8416path.close();
8417path.moveTo(37.4991f, 47.7985f);
8418path.quadTo(37.0431f, 48.0485f, 36.5775f, 48.2801f);
8419path.conicTo(35.6821f, 48.7254f, 35.2368f, 47.83f, 0.707107f);
8420path.conicTo(34.7915f, 46.9346f, 35.6869f, 46.4893f, 0.707107f);
8421path.quadTo(36.1167f, 46.2755f, 36.5376f, 46.0448f);
8422path.conicTo(37.4145f, 45.5641f, 37.8952f, 46.4409f, 0.707107f);
8423path.conicTo(38.376f, 47.3178f, 37.4991f, 47.7985f, 0.707107f);
8424path.close();
8425path.moveTo(34.6651f, 49.1368f);
8426path.quadTo(34.1756f, 49.3328f, 33.6785f, 49.5089f);
8427path.conicTo(32.7358f, 49.8427f, 32.402f, 48.9f, 0.707107f);
8428path.conicTo(32.0682f, 47.9574f, 33.0109f, 47.6236f, 0.707107f);
8429path.quadTo(33.4697f, 47.4611f, 33.9216f, 47.2801f);
8430path.conicTo(34.85f, 46.9084f, 35.2217f, 47.8368f, 0.707107f);
8431path.conicTo(35.5934f, 48.7651f, 34.6651f, 49.1368f, 0.707107f);
8432path.close();
8433path.moveTo(31.6557f, 50.1337f);
8434path.quadTo(31.1425f, 50.2696f, 30.6243f, 50.3844f);
8435path.conicTo(29.648f, 50.6007f, 29.4317f, 49.6244f, 0.707107f);
8436path.conicTo(29.2153f, 48.6481f, 30.1917f, 48.4317f, 0.707107f);
8437path.quadTo(30.6701f, 48.3257f, 31.1437f, 48.2003f);
8438path.conicTo(32.1104f, 47.9443f, 32.3664f, 48.911f, 0.707107f);
8439path.conicTo(32.6223f, 49.8777f, 31.6557f, 50.1337f, 0.707107f);
8440path.close();
8441path.moveTo(28.5567f, 50.7556f);
8442path.quadTo(28.0395f, 50.827f, 27.5198f, 50.8776f);
8443path.conicTo(26.5245f, 50.9745f, 26.4276f, 49.9792f, 0.707107f);
8444path.conicTo(26.3307f, 48.9839f, 27.326f, 48.887f, 0.707107f);
8445path.quadTo(27.8056f, 48.8403f, 28.2831f, 48.7744f);
8446path.conicTo(29.2737f, 48.6376f, 29.4105f, 49.6282f, 0.707107f);
8447path.conicTo(29.5473f, 50.6188f, 28.5567f, 50.7556f, 0.707107f);
8448path.close();
8449path.moveTo(25.4424f, 50.9962f);
8450path.quadTo(24.9222f, 51.0051f, 24.4022f, 50.9931f);
8451path.conicTo(23.4025f, 50.9701f, 23.4255f, 49.9704f, 0.707107f);
8452path.conicTo(23.4485f, 48.9707f, 24.4482f, 48.9937f, 0.707107f);
8453path.quadTo(24.9283f, 49.0047f, 25.4084f, 48.9965f);
8454path.conicTo(26.4083f, 48.9795f, 26.4253f, 49.9794f, 0.707107f);
8455path.conicTo(26.4423f, 50.9792f, 25.4424f, 50.9962f, 0.707107f);
8456path.close();
8457path.moveTo(22.3065f, 50.8601f);
8458path.quadTo(21.7885f, 50.8062f, 21.2732f, 50.7315f);
8459path.conicTo(20.2835f, 50.5882f, 20.4268f, 49.5985f, 0.707107f);
8460path.conicTo(20.5702f, 48.6088f, 21.5599f, 48.7522f, 0.707107f);
8461path.quadTo(22.0355f, 48.8211f, 22.5136f, 48.8709f);
8462path.conicTo(23.5083f, 48.9745f, 23.4047f, 49.9691f, 0.707107f);
8463path.conicTo(23.3011f, 50.9637f, 22.3065f, 50.8601f, 0.707107f);
8464path.close();
8465path.moveTo(19.2346f, 50.3527f);
8466path.quadTo(18.7003f, 50.2312f, 18.1717f, 50.0873f);
8467path.conicTo(17.2068f, 49.8247f, 17.4694f, 48.8598f, 0.707107f);
8468path.conicTo(17.732f, 47.8949f, 18.6969f, 48.1575f, 0.707107f);
8469path.quadTo(19.185f, 48.2904f, 19.6781f, 48.4025f);
8470path.conicTo(20.6532f, 48.6243f, 20.4314f, 49.5994f, 0.707107f);
8471path.conicTo(20.2097f, 50.5745f, 19.2346f, 50.3527f, 0.707107f);
8472path.close();
8473path.moveTo(16.1149f, 49.4347f);
8474path.quadTo(15.6161f, 49.2533f, 15.1251f, 49.0517f);
8475path.conicTo(14.2f, 48.6719f, 14.5798f, 47.7469f, 0.707107f);
8476path.conicTo(14.9596f, 46.8218f, 15.8847f, 47.2016f, 0.707107f);
8477path.quadTo(16.3379f, 47.3877f, 16.7984f, 47.5551f);
8478path.conicTo(17.7382f, 47.8969f, 17.3964f, 48.8366f, 0.707107f);
8479path.conicTo(17.0547f, 49.7764f, 16.1149f, 49.4347f, 0.707107f);
8480path.close();
8481path.moveTo(13.2313f, 48.184f);
8482path.quadTo(12.776f, 47.9529f, 12.33f, 47.704f);
8483path.conicTo(11.4568f, 47.2167f, 11.9441f, 46.3434f, 0.707107f);
8484path.conicTo(12.4314f, 45.4702f, 13.3046f, 45.9575f, 0.707107f);
8485path.quadTo(13.7162f, 46.1872f, 14.1365f, 46.4006f);
8486path.conicTo(15.0282f, 46.8532f, 14.5756f, 47.7449f, 0.707107f);
8487path.conicTo(14.123f, 48.6366f, 13.2313f, 48.184f, 0.707107f);
8488path.close();
8489path.moveTo(10.6208f, 46.6619f);
8490path.lineTo(10.4641f, 46.5571f);
8491path.quadTo(10.1333f, 46.334f, 9.81253f, 46.1031f);
8492path.conicTo(9.00087f, 45.519f, 9.585f, 44.7073f, 0.707107f);
8493path.conicTo(10.1691f, 43.8957f, 10.9808f, 44.4798f, 0.707107f);
8494path.quadTo(11.2769f, 44.6929f, 11.5763f, 44.8948f);
8495path.lineTo(11.7329f, 44.9996f);
8496path.conicTo(12.564f, 45.5557f, 12.008f, 46.3868f, 0.707107f);
8497path.conicTo(11.4519f, 47.2179f, 10.6208f, 46.6619f, 0.707107f);
8498path.close();
8499path.moveTo(8.22326f, 44.8631f);
8500path.quadTo(7.82986f, 44.5308f, 7.44999f, 44.1833f);
8501path.conicTo(6.71217f, 43.5082f, 7.38718f, 42.7704f, 0.707107f);
8502path.conicTo(8.06219f, 42.0326f, 8.8f, 42.7076f, 0.707107f);
8503path.quadTo(9.15066f, 43.0284f, 9.51375f, 43.3351f);
8504path.conicTo(10.2777f, 43.9804f, 9.63248f, 44.7443f, 0.707107f);
8505path.conicTo(8.98724f, 45.5083f, 8.22326f, 44.8631f, 0.707107f);
8506path.close();
8507path.moveTo(5.95972f, 42.705f);
8508path.quadTo(5.59577f, 42.3136f, 5.24823f, 41.9076f);
8509path.conicTo(4.59793f, 41.148f, 5.3576f, 40.4977f, 0.707107f);
8510path.conicTo(6.11728f, 39.8473f, 6.76758f, 40.607f, 0.707107f);
8511path.quadTo(7.08843f, 40.9818f, 7.42436f, 41.3431f);
8512path.conicTo(8.10532f, 42.0754f, 7.373f, 42.7564f, 0.707107f);
8513path.conicTo(6.64068f, 43.4373f, 5.95972f, 42.705f, 0.707107f);
8514path.close();
8515path.moveTo(3.90635f, 40.2006f);
8516path.quadTo(3.59492f, 39.7684f, 3.30147f, 39.3239f);
8517path.conicTo(2.75055f, 38.4893f, 3.58511f, 37.9384f, 0.707107f);
8518path.conicTo(4.41967f, 37.3875f, 4.97059f, 38.222f, 0.707107f);
8519path.quadTo(5.24148f, 38.6324f, 5.52894f, 39.0313f);
8520path.conicTo(6.11358f, 39.8426f, 5.30228f, 40.4272f, 0.707107f);
8521path.conicTo(4.49099f, 41.0119f, 3.90635f, 40.2006f, 0.707107f);
8522path.close();
8523path.moveTo(2.23643f, 37.5626f);
8524path.quadTo(1.98525f, 37.1075f, 1.75248f, 36.6427f);
8525path.conicTo(1.30469f, 35.7486f, 2.19883f, 35.3008f, 0.707107f);
8526path.conicTo(3.09296f, 34.853f, 3.54076f, 35.7471f, 0.707107f);
8527path.quadTo(3.75563f, 36.1762f, 3.98747f, 36.5963f);
8528path.conicTo(4.47065f, 37.4718f, 3.59513f, 37.955f, 0.707107f);
8529path.conicTo(2.71961f, 38.4382f, 2.23643f, 37.5626f, 0.707107f);
8530path.close();
8531path.moveTo(0.890647f, 34.7334f);
8532path.quadTo(0.69328f, 34.2445f, 0.515902f, 33.7481f);
8533path.conicTo(0.179435f, 32.8064f, 1.12113f, 32.4699f, 0.707107f);
8534path.conicTo(2.06282f, 32.1335f, 2.39929f, 33.0752f, 0.707107f);
8535path.quadTo(2.56303f, 33.5334f, 2.74521f, 33.9847f);
8536path.conicTo(3.11957f, 34.912f, 2.19229f, 35.2863f, 0.707107f);
8537path.conicTo(1.26501f, 35.6607f, 0.890647f, 34.7334f, 0.707107f);
8538path.close();
8539path.moveTo(-0.114587f, 31.7274f);
8540path.quadTo(-0.251922f, 31.2147f, -0.368218f, 30.6968f);
8541path.conicTo(-0.587327f, 29.7211f, 0.388373f, 29.502f, 0.707107f);
8542path.conicTo(1.36407f, 29.2829f, 1.58318f, 30.2586f, 0.707107f);
8543path.quadTo(1.69053f, 30.7366f, 1.8173f, 31.2099f);
8544path.conicTo(2.07605f, 32.1758f, 1.1101f, 32.4346f, 0.707107f);
8545path.conicTo(0.144159f, 32.6933f, -0.114587f, 31.7274f, 0.707107f);
8546path.close();
8547path.moveTo(-0.745485f, 28.6291f);
8548path.quadTo(-0.818367f, 28.112f, -0.870432f, 27.5925f);
8549path.conicTo(-0.970142f, 26.5974f, 0.0248742f, 26.4977f, 0.707107f);
8550path.conicTo(1.01989f, 26.398f, 1.1196f, 27.393f, 0.707107f);
8551path.quadTo(1.16766f, 27.8726f, 1.23494f, 28.3499f);
8552path.conicTo(1.37452f, 29.3401f, 0.384305f, 29.4797f, 0.707107f);
8553path.conicTo(-0.605905f, 29.6193f, -0.745485f, 28.6291f, 0.707107f);
8554path.close();
8555path.moveTo(-0.994901f, 25.515f);
8556path.quadTo(-1.00519f, 24.9955f, -0.994722f, 24.4761f);
8557path.conicTo(-0.97457f, 23.4763f, 0.0252273f, 23.4964f, 0.707107f);
8558path.conicTo(1.02502f, 23.5166f, 1.00487f, 24.5164f, 0.707107f);
8559path.quadTo(0.995207f, 24.9959f, 1.00471f, 25.4754f);
8560path.conicTo(1.02451f, 26.4752f, 0.0247103f, 26.495f, 0.707107f);
8561path.conicTo(-0.975093f, 26.5148f, -0.994901f, 25.515f, 0.707107f);
8562path.close();
8563path.moveTo(-0.867571f, 22.3792f);
8564path.quadTo(-0.81506f, 21.8609f, -0.741825f, 21.3451f);
8565path.conicTo(-0.60125f, 20.355f, 0.38882f, 20.4956f, 0.707107f);
8566path.conicTo(1.37889f, 20.6361f, 1.23831f, 21.6262f, 0.707107f);
8567path.quadTo(1.17071f, 22.1023f, 1.12224f, 22.5807f);
8568path.conicTo(1.02144f, 23.5757f, 0.026537f, 23.4749f, 0.707107f);
8569path.conicTo(-0.96837f, 23.3741f, -0.867571f, 22.3792f, 0.707107f);
8570path.close();
8571path.moveTo(-0.369678f, 19.3097f);
8572path.quadTo(-0.249693f, 18.7748f, -0.107265f, 18.2453f);
8573path.conicTo(0.152529f, 17.2797f, 1.11819f, 17.5395f, 0.707107f);
8574path.conicTo(2.08386f, 17.7993f, 1.82406f, 18.7649f, 0.707107f);
8575path.quadTo(1.69259f, 19.2536f, 1.58184f, 19.7474f);
8576path.conicTo(1.36298f, 20.7232f, 0.387221f, 20.5043f, 0.707107f);
8577path.conicTo(-0.588536f, 20.2855f, -0.369678f, 19.3097f, 0.707107f);
8578path.close();
8579path.moveTo(0.539863f, 16.1851f);
8580path.quadTo(0.719962f, 15.6854f, 0.920307f, 15.1934f);
8581path.conicTo(1.29748f, 14.2673f, 2.22362f, 14.6445f, 0.707107f);
8582path.conicTo(3.14976f, 15.0216f, 2.7726f, 15.9478f, 0.707107f);
8583path.quadTo(2.58765f, 16.4019f, 2.42141f, 16.8632f);
8584path.conicTo(2.08237f, 17.804f, 1.1416f, 17.4649f, 0.707107f);
8585path.conicTo(0.200823f, 17.1259f, 0.539863f, 16.1851f, 0.707107f);
8586path.close();
8587path.moveTo(1.78353f, 13.2955f);
8588path.quadTo(2.01364f, 12.8391f, 2.26151f, 12.392f);
8589path.conicTo(2.74643f, 11.5175f, 3.62099f, 12.0024f, 0.707107f);
8590path.conicTo(4.49555f, 12.4873f, 4.01063f, 13.3618f, 0.707107f);
8591path.quadTo(3.78183f, 13.7745f, 3.56941f, 14.1958f);
8592path.conicTo(3.11923f, 15.0888f, 2.22629f, 14.6386f, 0.707107f);
8593path.conicTo(1.33336f, 14.1884f, 1.78353f, 13.2955f, 0.707107f);
8594path.close();
8595path.moveTo(3.30083f, 10.6771f);
8596path.lineTo(3.44218f, 10.4652f);
8597path.quadTo(3.6466f, 10.1621f, 3.85641f, 9.86895f);
8598path.conicTo(4.43837f, 9.05574f, 5.25159f, 9.6377f, 0.707107f);
8599path.conicTo(6.0648f, 10.2197f, 5.48284f, 11.0329f, 0.707107f);
8600path.quadTo(5.28917f, 11.3035f, 5.10592f, 11.5752f);
8601path.lineTo(4.96457f, 11.787f);
8602path.conicTo(4.4096f, 12.6189f, 3.57773f, 12.0639f, 0.707107f);
8603path.conicTo(2.74586f, 11.509f, 3.30083f, 10.6771f, 0.707107f);
8604path.close();
8605path.moveTo(5.0909f, 8.27793f);
8606path.quadTo(5.42174f, 7.88403f, 5.76791f, 7.50353f);
8607path.conicTo(6.44085f, 6.76383f, 7.18054f, 7.43678f, 0.707107f);
8608path.conicTo(7.92024f, 8.10972f, 7.24729f, 8.84942f, 0.707107f);
8609path.quadTo(6.92775f, 9.20065f, 6.62237f, 9.56424f);
8610path.conicTo(5.97921f, 10.33f, 5.21348f, 9.68682f, 0.707107f);
8611path.conicTo(4.44774f, 9.04367f, 5.0909f, 8.27793f, 0.707107f);
8612path.close();
8613path.moveTo(7.24064f, 6.0104f);
8614path.quadTo(7.63069f, 5.64561f, 8.03537f, 5.29717f);
8615path.conicTo(8.79318f, 4.64469f, 9.44566f, 5.40249f, 0.707107f);
8616path.conicTo(10.0981f, 6.16029f, 9.34034f, 6.81278f, 0.707107f);
8617path.quadTo(8.96678f, 7.13442f, 8.60675f, 7.47113f);
8618path.conicTo(7.87638f, 8.15419f, 7.19332f, 7.42382f, 0.707107f);
8619path.conicTo(6.51027f, 6.69345f, 7.24064f, 6.0104f, 0.707107f);
8620path.close();
8621path.moveTo(9.73726f, 3.95128f);
8622path.quadTo(10.1706f, 3.63704f, 10.6165f, 3.34092f);
8623path.conicTo(11.4496f, 2.78771f, 12.0028f, 3.62075f, 0.707107f);
8624path.conicTo(12.556f, 4.4538f, 11.7229f, 5.007f, 0.707107f);
8625path.quadTo(11.3113f, 5.28035f, 10.9113f, 5.57041f);
8626path.conicTo(10.1018f, 6.15744f, 9.51472f, 5.34787f, 0.707107f);
8627path.conicTo(8.92769f, 4.53831f, 9.73726f, 3.95128f, 0.707107f);
8628path.close();
8629path.moveTo(12.374f, 2.27153f);
8630path.quadTo(12.8282f, 2.01921f, 13.2921f, 1.78522f);
8631path.conicTo(14.185f, 1.33492f, 14.6353f, 2.22779f, 0.707107f);
8632path.conicTo(15.0856f, 3.12067f, 14.1927f, 3.57097f, 0.707107f);
8633path.quadTo(13.7645f, 3.78696f, 13.3452f, 4.01988f);
8634path.conicTo(12.471f, 4.5055f, 11.9854f, 3.63132f, 0.707107f);
8635path.conicTo(11.4998f, 2.75715f, 12.374f, 2.27153f, 0.707107f);
8636path.close();
8637path.moveTo(15.1984f, 0.918296f);
8638path.quadTo(15.6866f, 0.719602f, 16.1824f, 0.540851f);
8639path.conicTo(17.1231f, 0.20171f, 17.4623f, 1.14245f, 0.707107f);
8640path.conicTo(17.8014f, 2.08318f, 16.8607f, 2.42232f, 0.707107f);
8641path.quadTo(16.403f, 2.58733f, 15.9524f, 2.77074f);
8642path.conicTo(15.0261f, 3.14772f, 14.6492f, 2.2215f, 0.707107f);
8643path.conicTo(14.2722f, 1.29528f, 15.1984f, 0.918296f, 0.707107f);
8644path.close();
8645path.moveTo(18.201f, -0.0952874f);
8646path.quadTo(18.7132f, -0.234075f, 19.2308f, -0.351842f);
8647path.conicTo(20.2058f, -0.573734f, 20.4277f, 0.401338f, 0.707107f);
8648path.conicTo(20.6496f, 1.37641f, 19.6745f, 1.5983f, 0.707107f);
8649path.quadTo(19.1968f, 1.70701f, 18.724f, 1.83512f);
8650path.conicTo(17.7588f, 2.09662f, 17.4973f, 1.13142f, 0.707107f);
8651path.conicTo(17.2358f, 0.166216f, 18.201f, -0.0952874f, 0.707107f);
8652path.close();
8653path.moveTo(21.2986f, -0.73518f);
8654path.quadTo(21.8155f, -0.809526f, 22.3349f, -0.863052f);
8655path.conicTo(23.3297f, -0.965552f, 23.4322f, 0.029181f, 0.707107f);
8656path.conicTo(23.5347f, 1.02391f, 22.5399f, 1.12641f, 0.707107f);
8657path.quadTo(22.0604f, 1.17582f, 21.5833f, 1.24445f);
8658path.conicTo(20.5935f, 1.38681f, 20.4511f, 0.397f, 0.707107f);
8659path.conicTo(20.3088f, -0.592814f, 21.2986f, -0.73518f, 0.707107f);
8660path.close();
8661path.moveTo(24.4124f, -0.993361f);
8662path.quadTo(24.9312f, -1.00509f, 25.4501f, -0.996107f);
8663path.conicTo(26.4499f, -0.978799f, 26.4326f, 0.0210512f, 0.707107f);
8664path.conicTo(26.4153f, 1.0209f, 25.4155f, 1.00359f, 0.707107f);
8665path.quadTo(24.9365f, 0.995302f, 24.4576f, 1.00613f);
8666path.conicTo(23.4578f, 1.02873f, 23.4352f, 0.0289853f, 0.707107f);
8667path.conicTo(23.4126f, -0.970759f, 24.4124f, -0.993361f, 0.707107f);
8668path.close();
8669path.moveTo(27.5481f, -0.87484f);
8670path.quadTo(28.0668f, -0.823762f, 28.583f, -0.75194f);
8671path.conicTo(29.5734f, -0.614138f, 29.4356f, 0.376322f, 0.707107f);
8672path.conicTo(29.2978f, 1.36678f, 28.3074f, 1.22898f, 0.707107f);
8673path.quadTo(27.8309f, 1.16268f, 27.3521f, 1.11553f);
8674path.conicTo(26.3569f, 1.01753f, 26.4549f, 0.0223428f, 0.707107f);
8675path.conicTo(26.5529f, -0.972843f, 27.5481f, -0.87484f, 0.707107f);
8676path.close();
8677path.moveTo(30.6151f, -0.386432f);
8678path.quadTo(31.1507f, -0.267954f, 31.6809f, -0.126991f);
8679path.conicTo(32.6473f, 0.129965f, 32.3904f, 1.09639f, 0.707107f);
8680path.conicTo(32.1334f, 2.06281f, 31.167f, 1.80585f, 0.707107f);
8681path.quadTo(30.6776f, 1.67574f, 30.1832f, 1.56637f);
8682path.conicTo(29.2068f, 1.35041f, 29.4227f, 0.374005f, 0.707107f);
8683path.conicTo(29.6387f, -0.602396f, 30.6151f, -0.386432f, 0.707107f);
8684path.close();
8685path.moveTo(33.7445f, 0.514616f);
8686path.quadTo(34.2452f, 0.693421f, 34.7381f, 0.892536f);
8687path.conicTo(35.6653f, 1.26708f, 35.2908f, 2.19429f, 0.707107f);
8688path.conicTo(34.9162f, 3.1215f, 33.989f, 2.74696f, 0.707107f);
8689path.quadTo(33.534f, 2.56316f, 33.0718f, 2.3981f);
8690path.conicTo(32.1301f, 2.06177f, 32.4664f, 1.12003f, 0.707107f);
8691path.conicTo(32.8027f, 0.178285f, 33.7445f, 0.514616f, 0.707107f);
8692path.close();
8693path.moveTo(36.6402f, 1.7512f);
8694path.quadTo(37.0977f, 1.98026f, 37.5458f, 2.22715f);
8695path.conicTo(38.4217f, 2.70968f, 37.9392f, 3.58556f, 0.707107f);
8696path.conicTo(37.4566f, 4.46144f, 36.5808f, 3.97891f, 0.707107f);
8697path.quadTo(36.1671f, 3.75102f, 35.7448f, 3.53956f);
8698path.conicTo(34.8506f, 3.09185f, 35.2983f, 2.19767f, 0.707107f);
8699path.conicTo(35.746f, 1.30349f, 36.6402f, 1.7512f, 0.707107f);
8700path.close();
8701path.moveTo(39.2611f, 3.26012f);
8702path.quadTo(39.4005f, 3.35159f, 39.539f, 3.44501f);
8703path.quadTo(39.8091f, 3.62717f, 40.0746f, 3.81611f);
8704path.conicTo(40.8893f, 4.3959f, 40.3096f, 5.21067f, 0.707107f);
8705path.conicTo(39.7298f, 6.02543f, 38.915f, 5.44564f, 0.707107f);
8706path.quadTo(38.67f, 5.2713f, 38.4206f, 5.10309f);
8707path.quadTo(38.293f, 5.017f, 38.164f, 4.9324f);
8708path.conicTo(37.3279f, 4.38388f, 37.8764f, 3.54775f, 0.707107f);
8709path.conicTo(38.4249f, 2.71161f, 39.2611f, 3.26012f, 0.707107f);
8710path.close();
8711path.moveTo(41.6673f, 5.04503f);
8712path.quadTo(42.0618f, 5.37449f, 42.4428f, 5.71927f);
8713path.conicTo(43.1844f, 6.39015f, 42.5135f, 7.13171f, 0.707107f);
8714path.conicTo(41.8426f, 7.87327f, 41.1011f, 7.20239f, 0.707107f);
8715path.quadTo(40.7493f, 6.88414f, 40.3852f, 6.58004f);
8716path.conicTo(39.6177f, 5.93899f, 40.2588f, 5.17149f, 0.707107f);
8717path.conicTo(40.8998f, 4.40399f, 41.6673f, 5.04503f, 0.707107f);
8718path.close();
8719path.moveTo(43.9388f, 7.1865f);
8720path.quadTo(44.3044f, 7.57519f, 44.6538f, 7.97856f);
8721path.conicTo(45.3084f, 8.73448f, 44.5525f, 9.38914f, 0.707107f);
8722path.conicTo(43.7966f, 10.0438f, 43.1419f, 9.28789f, 0.707107f);
8723path.quadTo(42.8195f, 8.91555f, 42.482f, 8.55677f);
8724path.conicTo(41.7969f, 7.82836f, 42.5253f, 7.14322f, 0.707107f);
8725path.conicTo(43.2537f, 6.45808f, 43.9388f, 7.1865f, 0.707107f);
8726path.close();
8727path.moveTo(46.0036f, 9.6753f);
8728path.quadTo(46.3207f, 10.1098f, 46.6195f, 10.5571f);
8729path.conicTo(47.175f, 11.3886f, 46.3435f, 11.9441f, 0.707107f);
8730path.conicTo(45.5119f, 12.4996f, 44.9564f, 11.6681f, 0.707107f);
8731path.quadTo(44.6806f, 11.2552f, 44.388f, 10.8541f);
8732path.conicTo(43.7986f, 10.0463f, 44.6064f, 9.45688f, 0.707107f);
8733path.conicTo(45.4142f, 8.86747f, 46.0036f, 9.6753f, 0.707107f);
8734path.close();
8735path.moveTo(47.6932f, 12.3107f);
8736path.quadTo(47.9467f, 12.764f, 48.1819f, 13.2271f);
8737path.conicTo(48.6347f, 14.1187f, 47.7431f, 14.5715f, 0.707107f);
8738path.conicTo(46.8514f, 15.0243f, 46.3986f, 14.1327f, 0.707107f);
8739path.quadTo(46.1816f, 13.7053f, 45.9476f, 13.2868f);
8740path.conicTo(45.4595f, 12.414f, 46.3323f, 11.9259f, 0.707107f);
8741path.conicTo(47.2051f, 11.4379f, 47.6932f, 12.3107f, 0.707107f);
8742path.close();
8743path.moveTo(49.0539f, 15.1303f);
8744path.quadTo(49.2539f, 15.6178f, 49.434f, 16.113f);
8745path.conicTo(49.7758f, 17.0527f, 48.836f, 17.3946f, 0.707107f);
8746path.conicTo(47.8963f, 17.7364f, 47.5545f, 16.7966f, 0.707107f);
8747path.quadTo(47.3882f, 16.3395f, 47.2036f, 15.8895f);
8748path.conicTo(46.824f, 14.9643f, 47.7491f, 14.5847f, 0.707107f);
8749path.conicTo(48.6743f, 14.2051f, 49.0539f, 15.1303f, 0.707107f);
8750path.close();
8751path.moveTo(50.0758f, 18.1294f);
8752path.quadTo(50.216f, 18.6412f, 50.3352f, 19.1584f);
8753path.conicTo(50.5599f, 20.1328f, 49.5855f, 20.3575f, 0.707107f);
8754path.conicTo(48.6111f, 20.5821f, 48.3864f, 19.6077f, 0.707107f);
8755path.quadTo(48.2763f, 19.1304f, 48.1469f, 18.6579f);
8756path.conicTo(47.8826f, 17.6935f, 48.8471f, 17.4292f, 0.707107f);
8757path.conicTo(49.8115f, 17.165f, 50.0758f, 18.1294f, 0.707107f);
8758path.close();
8759path.moveTo(50.7247f, 21.2262f);
8760path.quadTo(50.8005f, 21.743f, 50.8555f, 22.2623f);
8761path.conicTo(50.9607f, 23.2568f, 49.9663f, 23.3621f, 0.707107f);
8762path.conicTo(48.9719f, 23.4673f, 48.8666f, 22.4729f, 0.707107f);
8763path.quadTo(48.8158f, 21.9935f, 48.7458f, 21.5165f);
8764path.conicTo(48.6007f, 20.5271f, 49.5901f, 20.382f, 0.707107f);
8765path.conicTo(50.5795f, 20.2368f, 50.7247f, 21.2262f, 0.707107f);
8766path.close();
8767path.moveTo(50.9916f, 24.3398f);
8768path.quadTo(51.0048f, 24.858f, 50.9973f, 25.3762f);
8769path.conicTo(50.9828f, 26.3761f, 49.9829f, 26.3616f, 0.707107f);
8770path.conicTo(48.983f, 26.3472f, 48.9975f, 25.3473f, 0.707107f);
8771path.quadTo(49.0044f, 24.8687f, 48.9923f, 24.3906f);
8772path.conicTo(48.9669f, 23.3909f, 49.9665f, 23.3655f, 0.707107f);
8773path.conicTo(50.9662f, 23.3401f, 50.9916f, 24.3398f, 0.707107f);
8774path.close();
8775path.moveTo(50.8819f, 27.4753f);
8776path.quadTo(50.8323f, 27.9943f, 50.7618f, 28.511f);
8777path.conicTo(50.6268f, 29.5018f, 49.636f, 29.3668f, 0.707107f);
8778path.conicTo(48.6451f, 29.2317f, 48.7802f, 28.2409f, 0.707107f);
8779path.quadTo(48.8452f, 27.7641f, 48.891f, 27.2849f);
8780path.conicTo(48.9862f, 26.2894f, 49.9816f, 26.3846f, 0.707107f);
8781path.conicTo(50.9771f, 26.4798f, 50.8819f, 27.4753f, 0.707107f);
8782path.close();
8783path.moveTo(50.4023f, 30.5429f);
8784path.quadTo(50.2856f, 31.0775f, 50.1465f, 31.607f);
8785path.conicTo(49.8924f, 32.5742f, 48.9252f, 32.3201f, 0.707107f);
8786path.conicTo(47.9581f, 32.066f, 48.2122f, 31.0988f, 0.707107f);
8787path.quadTo(48.3405f, 30.6102f, 48.4483f, 30.1165f);
8788path.conicTo(48.6614f, 29.1395f, 49.6385f, 29.3527f, 0.707107f);
8789path.conicTo(50.6155f, 29.5659f, 50.4023f, 30.5429f, 0.707107f);
8790path.close();
8791path.moveTo(49.5104f, 33.674f);
8792path.quadTo(49.3329f, 34.1756f, 49.1351f, 34.6695f);
8793path.conicTo(48.7632f, 35.5977f, 47.8349f, 35.2258f, 0.707107f);
8794path.conicTo(46.9066f, 34.854f, 47.2785f, 33.9257f, 0.707107f);
8795path.quadTo(47.4612f, 33.4697f, 47.625f, 33.0067f);
8796path.conicTo(47.9587f, 32.064f, 48.9014f, 32.3977f, 0.707107f);
8797path.conicTo(49.8441f, 32.7313f, 49.5104f, 33.674f, 0.707107f);
8798path.close();
8799path.moveTo(48.281f, 36.5756f);
8800path.quadTo(48.053f, 37.0342f, 47.8071f, 37.4835f);
8801path.conicTo(47.3269f, 38.3607f, 46.4497f, 37.8805f, 0.707107f);
8802path.conicTo(45.5725f, 37.4004f, 46.0527f, 36.5232f, 0.707107f);
8803path.quadTo(46.2797f, 36.1085f, 46.4901f, 35.6852f);
8804path.conicTo(46.9353f, 34.7898f, 47.8307f, 35.235f, 0.707107f);
8805path.conicTo(48.7262f, 35.6802f, 48.281f, 36.5756f, 0.707107f);
8806path.close();
8807path.moveTo(46.7777f, 39.2033f);
8808path.quadTo(46.6677f, 39.3719f, 46.555f, 39.539f);
8809path.quadTo(46.3865f, 39.7888f, 46.2121f, 40.0349f);
8810path.conicTo(45.6338f, 40.8507f, 44.818f, 40.2724f, 0.707107f);
8811path.conicTo(44.0021f, 39.6942f, 44.5804f, 38.8783f, 0.707107f);
8812path.quadTo(44.7413f, 38.6513f, 44.8969f, 38.4206f);
8813path.quadTo(45.0008f, 38.2665f, 45.1025f, 38.1107f);
8814path.conicTo(45.6488f, 37.2731f, 46.4864f, 37.8194f, 0.707107f);
8815path.conicTo(47.324f, 38.3657f, 46.7777f, 39.2033f, 0.707107f);
8816path.close();
8817path.moveTo(44.9527f, 41.6701f);
8818path.quadTo(44.6177f, 42.0709f, 44.267f, 42.458f);
8819path.conicTo(43.5955f, 43.1991f, 42.8545f, 42.5276f, 0.707107f);
8820path.conicTo(42.1135f, 41.8561f, 42.7849f, 41.1151f, 0.707107f);
8821path.quadTo(43.1087f, 40.7578f, 43.4178f, 40.3878f);
8822path.conicTo(44.059f, 39.6203f, 44.8264f, 40.2615f, 0.707107f);
8823path.conicTo(45.5938f, 40.9027f, 44.9527f, 41.6701f, 0.707107f);
8824path.close();
8825path.moveTo(42.7884f, 43.9624f);
8826path.quadTo(42.4083f, 44.319f, 42.014f, 44.6602f);
8827path.conicTo(41.2578f, 45.3146f, 40.6034f, 44.5585f, 0.707107f);
8828path.conicTo(39.949f, 43.8023f, 40.7052f, 43.1479f, 0.707107f);
8829path.quadTo(41.0691f, 42.833f, 41.4201f, 42.5037f);
8830path.conicTo(42.1494f, 41.8196f, 42.8336f, 42.5489f, 0.707107f);
8831path.conicTo(43.5178f, 43.2782f, 42.7884f, 43.9624f, 0.707107f);
8832path.close();
8833path.moveTo(40.3892f, 45.9564f);
8834path.quadTo(39.9683f, 46.2655f, 39.5354f, 46.5574f);
8835path.conicTo(38.7062f, 47.1165f, 38.1472f, 46.2873f, 0.707107f);
8836path.conicTo(37.5881f, 45.4582f, 38.4173f, 44.8992f, 0.707107f);
8837path.quadTo(38.8169f, 44.6297f, 39.2054f, 44.3444f);
8838path.conicTo(40.0114f, 43.7525f, 40.6033f, 44.5585f, 0.707107f);
8839path.conicTo(41.1952f, 45.3645f, 40.3892f, 45.9564f, 0.707107f);
8840path.close();
8841path.moveTo(37.7543f, 47.6568f);
8842path.quadTo(37.2977f, 47.9138f, 36.8312f, 48.1522f);
8843path.conicTo(35.9407f, 48.6072f, 35.4857f, 47.7167f, 0.707107f);
8844path.conicTo(35.0306f, 46.8263f, 35.9211f, 46.3712f, 0.707107f);
8845path.quadTo(36.3518f, 46.1511f, 36.7732f, 45.9139f);
8846path.conicTo(37.6446f, 45.4234f, 38.1351f, 46.2948f, 0.707107f);
8847path.conicTo(38.6257f, 47.1662f, 37.7543f, 47.6568f, 0.707107f);
8848path.close();
8849path.moveTo(34.9311f, 49.0286f);
8850path.quadTo(34.4488f, 49.2279f, 33.9589f, 49.4077f);
8851path.conicTo(33.0202f, 49.7523f, 32.6756f, 48.8136f, 0.707107f);
8852path.conicTo(32.331f, 47.8748f, 33.2698f, 47.5302f, 0.707107f);
8853path.quadTo(33.722f, 47.3642f, 34.1672f, 47.1802f);
8854path.conicTo(35.0914f, 46.7983f, 35.4733f, 47.7224f, 0.707107f);
8855path.conicTo(35.8553f, 48.6466f, 34.9311f, 49.0286f, 0.707107f);
8856path.close();
8857path.moveTo(31.9824f, 50.0449f);
8858path.quadTo(31.4774f, 50.1857f, 30.9668f, 50.3061f);
8859path.conicTo(29.9935f, 50.5355f, 29.764f, 49.5622f, 0.707107f);
8860path.conicTo(29.5346f, 48.5889f, 30.5079f, 48.3594f, 0.707107f);
8861path.quadTo(30.9789f, 48.2484f, 31.4453f, 48.1184f);
8862path.conicTo(32.4086f, 47.8498f, 32.6771f, 48.8131f, 0.707107f);
8863path.conicTo(32.9457f, 49.7763f, 31.9824f, 50.0449f, 0.707107f);
8864path.close();
8865path.moveTo(28.899f, 50.706f);
8866path.quadTo(28.3834f, 50.7842f, 27.8652f, 50.8416f);
8867path.conicTo(26.8713f, 50.9518f, 26.7611f, 49.9579f, 0.707107f);
8868path.conicTo(26.6509f, 48.964f, 27.6448f, 48.8538f, 0.707107f);
8869path.quadTo(28.1231f, 48.8008f, 28.599f, 48.7286f);
8870path.conicTo(29.5877f, 48.5786f, 29.7377f, 49.5673f, 0.707107f);
8871path.conicTo(29.8877f, 50.556f, 28.899f, 50.706f, 0.707107f);
8872path.close();
8873path.moveTo(25.8106f, 50.9874f);
8874path.quadTo(25.6321f, 50.9929f, 25.4537f, 50.996f);
8875path.conicTo(24.4539f, 51.0135f, 24.4365f, 50.0136f, 0.707115f);
8876path.lineTo(24.4251f, 49.3638f);
8877path.conicTo(24.4077f, 48.364f, 25.4075f, 48.3465f, 0.707107f);
8878path.conicTo(26.4073f, 48.3291f, 26.4248f, 49.3289f, 0.707107f);
8879path.lineTo(26.4361f, 49.9787f);
8880path.lineTo(25.4363f, 49.9962f);
8881path.lineTo(25.4189f, 48.9963f);
8882path.quadTo(25.5836f, 48.9935f, 25.7482f, 48.9883f);
8883path.conicTo(26.7477f, 48.9571f, 26.7789f, 49.9567f, 0.707107f);
8884path.conicTo(26.8101f, 50.9562f, 25.8106f, 50.9874f, 0.707107f);
8885path.close();
8886path.moveTo(24.3902f, 47.3641f);
8887path.lineTo(24.3728f, 46.3643f);
8888path.conicTo(24.3553f, 45.3645f, 25.3551f, 45.347f, 0.707107f);
8889path.conicTo(26.355f, 45.3295f, 26.3724f, 46.3294f, 0.707107f);
8890path.lineTo(26.3899f, 47.3292f);
8891path.conicTo(26.4074f, 48.3291f, 25.4075f, 48.3465f, 0.707107f);
8892path.conicTo(24.4077f, 48.364f, 24.3902f, 47.3641f, 0.707107f);
8893path.close();
8894path.moveTo(24.3378f, 44.3646f);
8895path.lineTo(24.3204f, 43.3648f);
8896path.conicTo(24.3029f, 42.3649f, 25.3028f, 42.3475f, 0.707107f);
8897path.conicTo(26.3026f, 42.33f, 26.3201f, 43.3298f, 0.707107f);
8898path.lineTo(26.3375f, 44.3297f);
8899path.conicTo(26.355f, 45.3295f, 25.3551f, 45.347f, 0.707107f);
8900path.conicTo(24.3553f, 45.3645f, 24.3378f, 44.3646f, 0.707107f);
8901path.close();
8902path.moveTo(24.2855f, 41.3651f);
8903path.lineTo(24.268f, 40.3652f);
8904path.conicTo(24.2506f, 39.3654f, 25.2504f, 39.3479f, 0.707107f);
8905path.conicTo(26.2503f, 39.3305f, 26.2677f, 40.3303f, 0.707107f);
8906path.lineTo(26.2852f, 41.3302f);
8907path.conicTo(26.3026f, 42.33f, 25.3028f, 42.3475f, 0.707107f);
8908path.conicTo(24.3029f, 42.3649f, 24.2855f, 41.3651f, 0.707107f);
8909path.close();
8910path.moveTo(24.2331f, 38.3655f);
8911path.lineTo(24.2157f, 37.3657f);
8912path.conicTo(24.1982f, 36.3658f, 25.1981f, 36.3484f, 0.707107f);
8913path.conicTo(26.1979f, 36.3309f, 26.2154f, 37.3308f, 0.707107f);
8914path.lineTo(26.2328f, 38.3306f);
8915path.conicTo(26.2503f, 39.3305f, 25.2504f, 39.3479f, 0.707107f);
8916path.conicTo(24.2506f, 39.3654f, 24.2331f, 38.3655f, 0.707107f);
8917path.close();
8918path.moveTo(24.1808f, 35.366f);
8919path.lineTo(24.1633f, 34.3661f);
8920path.conicTo(24.1459f, 33.3663f, 25.1457f, 33.3488f, 0.707107f);
8921path.conicTo(26.1456f, 33.3314f, 26.163f, 34.3312f, 0.707107f);
8922path.lineTo(26.1805f, 35.3311f);
8923path.conicTo(26.1979f, 36.3309f, 25.1981f, 36.3484f, 0.707107f);
8924path.conicTo(24.1982f, 36.3658f, 24.1808f, 35.366f, 0.707107f);
8925path.close();
8926path.moveTo(24.1284f, 32.3664f);
8927path.lineTo(24.111f, 31.3666f);
8928path.conicTo(24.0935f, 30.3667f, 25.0934f, 30.3493f, 0.707107f);
8929path.conicTo(26.0932f, 30.3318f, 26.1107f, 31.3317f, 0.707107f);
8930path.lineTo(26.1281f, 32.3315f);
8931path.conicTo(26.1456f, 33.3314f, 25.1457f, 33.3488f, 0.707107f);
8932path.conicTo(24.1459f, 33.3663f, 24.1284f, 32.3664f, 0.707107f);
8933path.close();
8934path.moveTo(24.0761f, 29.3669f);
8935path.lineTo(24.0586f, 28.367f);
8936path.conicTo(24.0412f, 27.3672f, 25.041f, 27.3497f, 0.707107f);
8937path.conicTo(26.0409f, 27.3323f, 26.0583f, 28.3321f, 0.707107f);
8938path.lineTo(26.0758f, 29.332f);
8939path.conicTo(26.0932f, 30.3318f, 25.0934f, 30.3493f, 0.707107f);
8940path.conicTo(24.0935f, 30.3667f, 24.0761f, 29.3669f, 0.707107f);
8941path.close();
8942path.moveTo(24.0237f, 26.3673f);
8943path.lineTo(24.0063f, 25.3675f);
8944path.conicTo(23.9888f, 24.3676f, 24.9887f, 24.3502f, 0.707107f);
8945path.conicTo(25.9885f, 24.3327f, 26.006f, 25.3326f, 0.707107f);
8946path.lineTo(26.0234f, 26.3324f);
8947path.conicTo(26.0409f, 27.3323f, 25.041f, 27.3497f, 0.707107f);
8948path.conicTo(24.0412f, 27.3672f, 24.0237f, 26.3673f, 0.707107f);
8949path.close();
8950 testPathOpFail(reporter, path, path1, kXOR_SkPathOp, filename);
8951}
8952
Cary Clarkcadc5062018-08-06 17:24:04 -04008953static void op_1(skiatest::Reporter* reporter, const char* filename) {
8954 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05008955 path.setFillType((SkPathFillType) 0);
8956path.setFillType(SkPathFillType::kWinding);
Cary Clarkcadc5062018-08-06 17:24:04 -04008957path.moveTo(SkBits2Float(0x15e80300), SkBits2Float(0x400004dc)); // 9.37088e-26f, 2.0003f
8958path.quadTo(SkBits2Float(0xe56c206c), SkBits2Float(0x646c5f40), SkBits2Float(0x6c80885e), SkBits2Float(0xb4bc576c)); // -6.96923e+22f, 1.74412e+22f, 1.24309e+27f, -3.50813e-07f
8959
8960 SkPath path1(path);
8961 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -05008962 path.setFillType((SkPathFillType) 0);
8963path.setFillType(SkPathFillType::kWinding);
Cary Clarkcadc5062018-08-06 17:24:04 -04008964path.moveTo(SkBits2Float(0x1b000010), SkBits2Float(0x6e5a5a1b)); // 1.05879e-22f, 1.68942e+28f
8965path.quadTo(SkBits2Float(0xef646464), SkBits2Float(0xefefefef), SkBits2Float(0x000000ef), SkBits2Float(0x1bb4bc00)); // -7.06839e+28f, -1.48514e+29f, 3.3491e-43f, 2.99e-22f
8966
8967 SkPath path2(path);
8968 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
8969}
8970
8971
8972static void op_2(skiatest::Reporter* reporter, const char* filename) {
8973 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05008974 path.setFillType((SkPathFillType) 1);
8975path.setFillType(SkPathFillType::kEvenOdd);
Cary Clarkcadc5062018-08-06 17:24:04 -04008976path.moveTo(SkBits2Float(0xeee3ef57), SkBits2Float(0xef6300f8)); // -3.52712e+28f, -7.02543e+28f
8977path.quadTo(SkBits2Float(0xeeee9c6e), SkBits2Float(0xef609993), SkBits2Float(0x00000000), SkBits2Float(0x6e5a5a1b)); // -3.69233e+28f, -6.95103e+28f, 0, 1.68942e+28f
8978path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
8979path.quadTo(SkBits2Float(0xe56c206c), SkBits2Float(0x646c5f40), SkBits2Float(0x6c80885e), SkBits2Float(0x00000000)); // -6.96923e+22f, 1.74412e+22f, 1.24309e+27f, 0
8980path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
8981path.quadTo(SkBits2Float(0xeeda2c5a), SkBits2Float(0xef6533a7), SkBits2Float(0xeee3ef57), SkBits2Float(0xef6300f8)); // -3.37607e+28f, -7.09345e+28f, -3.52712e+28f, -7.02543e+28f
8982path.close();
8983
8984 SkPath path1(path);
8985 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -05008986 path.setFillType((SkPathFillType) 0);
8987path.setFillType(SkPathFillType::kWinding);
Cary Clarkcadc5062018-08-06 17:24:04 -04008988path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
8989path.lineTo(SkBits2Float(0x1b1b1b00), SkBits2Float(0x1b5a5a1b)); // 1.283e-22f, 1.80617e-22f
8990
8991 SkPath path2(path);
8992 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
8993}
8994
8995
8996static void op_3(skiatest::Reporter* reporter, const char* filename) {
8997 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05008998 path.setFillType((SkPathFillType) 1);
8999path.setFillType(SkPathFillType::kEvenOdd);
Cary Clarkcadc5062018-08-06 17:24:04 -04009000path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x6e5a5a1b)); // 0, 1.68942e+28f
9001path.quadTo(SkBits2Float(0xeeee9c6e), SkBits2Float(0xef609993), SkBits2Float(0xeee3ef57), SkBits2Float(0xef6300f8)); // -3.69233e+28f, -6.95103e+28f, -3.52712e+28f, -7.02543e+28f
9002path.quadTo(SkBits2Float(0xeeda2c5a), SkBits2Float(0xef6533a7), SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // -3.37607e+28f, -7.09345e+28f, 0, 0
9003path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x6e5a5a1b)); // 0, 1.68942e+28f
9004path.close();
9005path.moveTo(SkBits2Float(0x6c80885e), SkBits2Float(0x00000000)); // 1.24309e+27f, 0
9006path.quadTo(SkBits2Float(0xe56c206c), SkBits2Float(0x646c5f40), SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // -6.96923e+22f, 1.74412e+22f, 0, 0
9007path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
9008path.lineTo(SkBits2Float(0x6c80885e), SkBits2Float(0x00000000)); // 1.24309e+27f, 0
9009path.close();
9010
9011 SkPath path1(path);
9012 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -05009013 path.setFillType((SkPathFillType) 0);
9014path.setFillType(SkPathFillType::kWinding);
Cary Clarkcadc5062018-08-06 17:24:04 -04009015
9016 SkPath path2(path);
9017 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
9018}
9019
9020static void op_4(skiatest::Reporter* reporter, const char* filename) {
9021 SkPath patha, pathb;
9022
Mike Reed7d34dc72019-11-26 12:17:17 -05009023 patha.setFillType(SkPathFillType::kEvenOdd);
Cary Clarkcadc5062018-08-06 17:24:04 -04009024 patha.moveTo(SkBits2Float(0x40d7ea90), SkBits2Float(0x3fa58930)); // 6.74738f, 1.29325f
9025 patha.lineTo(SkBits2Float(0x40ad3d93), SkBits2Float(0x3fa58930)); // 5.41377f, 1.29325f
9026 patha.lineTo(SkBits2Float(0x40ad3d93), SkBits2Float(0x3edba819)); // 5.41377f, 0.429017f
9027 patha.lineTo(SkBits2Float(0x40fc41e0), SkBits2Float(0x3edba819)); // 7.88304f, 0.429017f
9028 patha.lineTo(SkBits2Float(0x40fc41e0), SkBits2Float(0x3f3b7c94)); // 7.88304f, 0.73237f
9029 patha.lineTo(SkBits2Float(0x40d7ea90), SkBits2Float(0x3f3b7c94)); // 6.74738f, 0.73237f
9030 patha.lineTo(SkBits2Float(0x40d7ea90), SkBits2Float(0x3fa58930)); // 6.74738f, 1.29325f
9031 patha.close();
9032
Mike Reed7d34dc72019-11-26 12:17:17 -05009033 pathb.setFillType(SkPathFillType::kEvenOdd);
Cary Clarkcadc5062018-08-06 17:24:04 -04009034 pathb.moveTo(SkBits2Float(0x40d7ea89), SkBits2Float(0x409a721d)); // 6.74738f, 4.82643f
9035 pathb.lineTo(SkBits2Float(0x411a9d73), SkBits2Float(0x409a721d)); // 9.66344f, 4.82643f
9036 pathb.lineTo(SkBits2Float(0x411a9d73), SkBits2Float(0x3f3b7c9a)); // 9.66344f, 0.73237f
9037 pathb.lineTo(SkBits2Float(0x40d7ea89), SkBits2Float(0x3f3b7c9a)); // 6.74738f, 0.73237f
9038 pathb.lineTo(SkBits2Float(0x40d7ea89), SkBits2Float(0x409a721d)); // 6.74738f, 4.82643f
9039 pathb.close();
9040 testPathOp(reporter, patha, pathb, kDifference_SkPathOp, filename);
9041}
9042
Cary Clarkea2a6322018-08-27 13:19:09 -04009043static void bug8228(skiatest::Reporter* reporter, const char* filename) {
9044 SkPath path1;
9045 path1.moveTo(SkBits2Float(0x41fd5557), SkBits2Float(0x4292aaab));
9046 path1.lineTo(SkBits2Float(0x41fd5557), SkBits2Float(0x41555556));
9047 path1.conicTo(SkBits2Float(0x41fd5557), SkBits2Float(0x41200002), SkBits2Float(0x420c0000), SkBits2Float(0x41200002), SkBits2Float(0x3f3504f3));
9048 path1.lineTo(SkBits2Float(0x426071c7), SkBits2Float(0x41200002));
9049 path1.conicTo(SkBits2Float(0x426dc71d), SkBits2Float(0x41200002), SkBits2Float(0x426dc71d), SkBits2Float(0x41555556), SkBits2Float(0x3f3504f3));
9050 path1.lineTo(SkBits2Float(0x426dc71d), SkBits2Float(0x4292aaab));
9051 path1.conicTo(SkBits2Float(0x426dc71d), SkBits2Float(0x42995555), SkBits2Float(0x426071c7), SkBits2Float(0x42995555), SkBits2Float(0x3f3504f3));
9052 path1.lineTo(SkBits2Float(0x420c0000), SkBits2Float(0x42995555));
9053 path1.conicTo(SkBits2Float(0x41fd5557), SkBits2Float(0x42995555), SkBits2Float(0x41fd5557), SkBits2Float(0x4292aaab), SkBits2Float(0x3f3504f3));
9054 path1.close();
9055
9056 SkPath path2;
9057 path2.moveTo(SkBits2Float(0x41200000), SkBits2Float(0x41200000));
9058 path2.lineTo(SkBits2Float(0x41eb2366), SkBits2Float(0x41200000));
9059 path2.conicTo(SkBits2Float(0x41e9d2b6), SkBits2Float(0x4127bdec), SkBits2Float(0x41e9d2b6), SkBits2Float(0x412feb1c), SkBits2Float(0x3f7c9333));
9060 path2.lineTo(SkBits2Float(0x41e9d2b6), SkBits2Float(0x42855349));
9061 path2.conicTo(SkBits2Float(0x41e9d2b6), SkBits2Float(0x428b82b9), SkBits2Float(0x4201483b), SkBits2Float(0x428b82b9), SkBits2Float(0x3f3504f3));
9062 path2.lineTo(SkBits2Float(0x424fa11f), SkBits2Float(0x428b82b9));
9063 path2.conicTo(SkBits2Float(0x425bffff), SkBits2Float(0x428b82b9), SkBits2Float(0x425bffff), SkBits2Float(0x42855349), SkBits2Float(0x3f3504f3));
9064 path2.lineTo(SkBits2Float(0x425bffff), SkBits2Float(0x412feb1c));
9065 path2.conicTo(SkBits2Float(0x425bffff), SkBits2Float(0x4127bdec), SkBits2Float(0x425b57a7), SkBits2Float(0x41200000), SkBits2Float(0x3f7c9333));
9066 path2.lineTo(SkBits2Float(0x4282f24d), SkBits2Float(0x41200000));
9067 path2.conicTo(SkBits2Float(0x42829e21), SkBits2Float(0x4127bdec), SkBits2Float(0x42829e21), SkBits2Float(0x412feb1c), SkBits2Float(0x3f7c9333));
9068 path2.lineTo(SkBits2Float(0x42829e21), SkBits2Float(0x42855349));
9069 path2.conicTo(SkBits2Float(0x42829e21), SkBits2Float(0x428b82b9), SkBits2Float(0x4288cd91), SkBits2Float(0x428b82b9), SkBits2Float(0x3f3504f3));
9070 path2.lineTo(SkBits2Float(0x42affa03), SkBits2Float(0x428b82b9));
9071 path2.conicTo(SkBits2Float(0x42b62973), SkBits2Float(0x428b82b9), SkBits2Float(0x42b62973), SkBits2Float(0x42855349), SkBits2Float(0x3f3504f3));
9072 path2.lineTo(SkBits2Float(0x42b62973), SkBits2Float(0x412feb1c));
9073 path2.conicTo(SkBits2Float(0x42b62973), SkBits2Float(0x4127bdec), SkBits2Float(0x42b5d547), SkBits2Float(0x41200000), SkBits2Float(0x3f7c9333));
9074 path2.lineTo(SkBits2Float(0x42dc0000), SkBits2Float(0x41200000));
9075 path2.lineTo(SkBits2Float(0x42dc0000), SkBits2Float(0x42dc0000));
9076 path2.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x42dc0000));
9077 path2.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x41200000));
9078 path2.close();
9079 testPathOp(reporter, path1, path2, kIntersect_SkPathOp, filename);
9080}
9081
Cary Clark9d6049a2018-12-21 13:13:10 -05009082static void bug8380(skiatest::Reporter* reporter, const char* filename) {
9083SkPath path, path2;
Mike Reed7d34dc72019-11-26 12:17:17 -05009084path.setFillType(SkPathFillType::kEvenOdd);
Cary Clark9d6049a2018-12-21 13:13:10 -05009085path.moveTo(SkBits2Float(0xa6800000), SkBits2Float(0x43b0f22d)); // -8.88178e-16f, 353.892f
9086path.lineTo(SkBits2Float(0x42fc0000), SkBits2Float(0x4116566d)); // 126, 9.3961f
9087path.cubicTo(SkBits2Float(0x42fb439d), SkBits2Float(0x4114bbc7), SkBits2Float(0x42fa3ed7), SkBits2Float(0x411565bd), SkBits2Float(0x42f934d2), SkBits2Float(0x4116131e)); // 125.632f, 9.29584f, 125.123f, 9.33734f, 124.603f, 9.37967f
9088path.cubicTo(SkBits2Float(0x42f84915), SkBits2Float(0x4116acc3), SkBits2Float(0x42f75939), SkBits2Float(0x41174918), SkBits2Float(0x42f693f8), SkBits2Float(0x4116566d)); // 124.143f, 9.41718f, 123.674f, 9.45535f, 123.289f, 9.3961f
9089path.lineTo(SkBits2Float(0x42ec3cee), SkBits2Float(0x410127bb)); // 118.119f, 8.0722f
9090path.lineTo(SkBits2Float(0x4102c0ec), SkBits2Float(0x42d06d0e)); // 8.1721f, 104.213f
9091path.lineTo(SkBits2Float(0xa6000000), SkBits2Float(0x4381a63d)); // -4.44089e-16f, 259.299f
9092path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x43b0f22d)); // 0, 353.892f
9093path.lineTo(SkBits2Float(0xa6800000), SkBits2Float(0x43b0f22d)); // -8.88178e-16f, 353.892f
9094path.close();
Mike Reed7d34dc72019-11-26 12:17:17 -05009095path2.setFillType(SkPathFillType::kEvenOdd);
Cary Clark9d6049a2018-12-21 13:13:10 -05009096path2.moveTo(SkBits2Float(0x4102c0ec), SkBits2Float(0x42d06d0e)); // 8.1721f, 104.213f
9097path2.lineTo(SkBits2Float(0xc0ba5a1d), SkBits2Float(0x43b8e831)); // -5.8235f, 369.814f
9098path2.lineTo(SkBits2Float(0x42fc0000), SkBits2Float(0x411656d6)); // 126, 9.3962f
9099path2.cubicTo(SkBits2Float(0x42fa9cac), SkBits2Float(0x41134fdf), SkBits2Float(0x42f837cf), SkBits2Float(0x41185aee), SkBits2Float(0x42f693f8), SkBits2Float(0x411656d6)); // 125.306f, 9.207f, 124.109f, 9.5222f, 123.289f, 9.3962f
9100path2.lineTo(SkBits2Float(0x42ec3cee), SkBits2Float(0x410127bb)); // 118.119f, 8.0722f
9101path2.lineTo(SkBits2Float(0x4102c0ec), SkBits2Float(0x42d06d0e)); // 8.1721f, 104.213f
9102path2.close();
9103 testPathOp(reporter, path, path2, kIntersect_SkPathOp, filename);
9104}
9105
John Stilesfe0de302020-08-14 10:52:06 -04009106static void (*skipTest)(skiatest::Reporter* , const char* filename) = nullptr;
9107static void (*firstTest)(skiatest::Reporter* , const char* filename) = nullptr;
9108static void (*stopTest)(skiatest::Reporter* , const char* filename) = nullptr;
Yuqian Li3154a532017-09-06 13:33:30 -04009109
9110#define TEST(name) { name, #name }
9111
9112static struct TestDesc tests[] = {
Cary Clark9d6049a2018-12-21 13:13:10 -05009113 TEST(bug8380),
Cary Clark5de52332018-08-30 12:58:23 -04009114 TEST(crbug_526025),
Cary Clarkea2a6322018-08-27 13:19:09 -04009115 TEST(bug8228),
Cary Clarkcadc5062018-08-06 17:24:04 -04009116 TEST(op_4),
9117 TEST(op_1),
9118 TEST(op_2),
9119 TEST(op_3),
Cary Clark2587f412018-07-24 12:40:10 -04009120 TEST(grshapearcs1),
Cary Clark1d314432018-07-10 10:57:54 -04009121 TEST(filinmangust14),
Cary Clark1bb47df2018-06-18 08:53:00 -04009122 TEST(testRect1_u),
Cary Clark3a4a3212018-06-06 15:22:08 -04009123 TEST(halbug),
Cary Clark22582502017-12-13 14:56:53 -05009124 TEST(seanbug),
Yuqian Li3154a532017-09-06 13:33:30 -04009125 TEST(android1),
9126 TEST(bug5240),
9127 TEST(circlesOp4),
9128 TEST(loop17),
9129 TEST(cubicOp158),
9130 TEST(loops_i1),
9131 TEST(loops_i2),
9132 TEST(loops_i3),
9133 TEST(loops_i4),
9134 TEST(loops_i5),
9135 TEST(loops_i6),
9136 TEST(cubics_d3),
9137 TEST(cubics_o),
9138 TEST(cubics_d2),
9139 TEST(cubics_d),
9140 TEST(dean2),
9141 TEST(fuzzX_392),
Yuqian Li3154a532017-09-06 13:33:30 -04009142 TEST(fuzz38),
9143 TEST(cubics44d),
9144 TEST(cubics45u),
9145 TEST(loops61i),
9146 TEST(loops62i),
9147 TEST(loops63i),
9148 TEST(loops58iAsQuads),
9149 TEST(cubics41d),
9150 TEST(loops59iasQuads),
9151 TEST(loops59i),
9152 TEST(loops44i),
9153 TEST(loops45i),
9154 TEST(loops46i),
9155 TEST(loops47i),
9156 TEST(loops48i),
9157 TEST(loops49i),
9158 TEST(loops50i),
9159 TEST(loops51i),
9160 TEST(loops52i),
9161 TEST(loops53i),
9162 TEST(loops54i),
9163 TEST(loops55i),
9164 TEST(loops56i),
9165 TEST(loops57i),
9166 TEST(loops58i),
9167 TEST(loops33iMod),
9168 TEST(loops33iAsQuads),
9169 TEST(loops33i),
9170 TEST(loops40i),
9171 TEST(loops40iAsQuads),
9172 TEST(loops39i),
9173 TEST(loops38i),
9174 TEST(loops37i),
9175 TEST(loops36i),
9176 TEST(loops35i),
9177 TEST(loops34i),
9178 TEST(loops32i),
9179 TEST(loops31i),
9180 TEST(loops30i),
9181 TEST(loops29i),
9182 TEST(loops28i),
9183 TEST(loops27i),
9184 TEST(loops26i),
9185 TEST(loops25i),
9186 TEST(loops24i),
9187 TEST(loops23i),
9188 TEST(loops22i),
9189 TEST(loops21i),
9190 TEST(loops20i),
9191 TEST(cubics20d),
9192 TEST(cubics6d),
9193 TEST(cubics7d),
9194 TEST(cubics8d),
9195 TEST(cubics9d),
9196 TEST(cubics10u),
9197 TEST(cubics11i),
9198 TEST(cubics12d),
9199 TEST(cubics13d),
9200 TEST(cubics14d),
9201 TEST(cubics15d),
9202 TEST(cubics16i),
9203 TEST(cubics17d),
9204 TEST(cubics18d),
9205 TEST(cubics19d),
9206 TEST(cubicOp157),
9207 TEST(cubicOp142),
9208 TEST(loops4i),
9209 TEST(quadRect1),
9210 TEST(quadRect2),
9211 TEST(quadRect3),
9212 TEST(quadRect4),
9213 TEST(quadRect5),
9214 TEST(quadRect6),
9215 TEST(cubicOp141),
9216 TEST(cubicOp58d),
9217 TEST(loops5i),
9218 TEST(cubicOp140),
9219 TEST(cubicOp139),
9220 TEST(cubics138),
9221 TEST(cubics137),
9222 TEST(cubicOp136a),
9223 TEST(cubicOp136),
9224 TEST(cubicOp135),
9225 TEST(cubicOp134),
9226 TEST(cubicOp133),
9227 TEST(loop12),
9228 TEST(cubicOp132),
9229 TEST(loop11),
9230 TEST(loop10),
9231 TEST(circlesOp3),
9232 TEST(loop9),
9233 TEST(loop8),
9234 TEST(rects5),
9235 TEST(loop7),
9236 TEST(cubicOp130a),
9237 TEST(rRect1x),
9238 TEST(circlesOp2),
9239 TEST(circlesOp1),
9240 TEST(cubicOp131),
9241 TEST(cubicOp130),
9242 TEST(cubicOp129),
9243 TEST(cubicOp128),
9244 TEST(cubicOp127),
9245 TEST(cubicOp126),
9246 TEST(cubicOp125),
9247 TEST(cubicOp124),
9248 TEST(loop6),
9249 TEST(loop5),
9250 TEST(cubicOp123),
9251 TEST(cubicOp122),
9252 TEST(cubicOp121),
9253 TEST(cubicOp120),
9254 TEST(cubicOp119),
9255 TEST(loop4),
9256 TEST(loop3),
9257 TEST(loop2),
9258 TEST(loop1asQuad),
9259 TEST(loop1),
9260 TEST(issue3517),
9261 TEST(cubicOp118),
9262 TEST(cubicOp117),
9263 TEST(cubicOp116),
9264 TEST(testRect2),
9265 TEST(testRect1),
9266 TEST(cubicOp115),
9267 TEST(issue2753),
9268 TEST(cubicOp114),
9269 TEST(issue2808),
9270 TEST(cubicOp114asQuad),
9271 TEST(rects4),
9272 TEST(rects3),
9273 TEST(rects2),
9274 TEST(rects1),
9275 TEST(issue2540),
9276 TEST(issue2504),
9277 TEST(kari1),
9278 TEST(quadOp10i),
9279 TEST(cubicOp113),
9280 TEST(skpcarrot_is24),
9281 TEST(issue1417),
9282 TEST(cubicOp112),
9283 TEST(skpadspert_net23),
9284 TEST(skpadspert_de11),
9285 TEST(findFirst1),
9286 TEST(xOp2i),
9287 TEST(xOp3i),
9288 TEST(xOp1u),
9289 TEST(xOp1i),
9290 TEST(cubicOp111),
9291 TEST(cubicOp110),
9292 TEST(cubicOp109),
9293 TEST(cubicOp108),
9294 TEST(cubicOp107),
9295 TEST(cubicOp106),
9296 TEST(cubicOp105),
9297 TEST(cubicOp104),
9298 TEST(cubicOp103),
9299 TEST(cubicOp102),
9300 TEST(cubicOp101),
9301 TEST(cubicOp100),
9302 TEST(cubicOp99),
9303 TEST(issue1435),
9304 TEST(cubicOp98x),
9305 TEST(cubicOp97x),
9306 TEST(skpcarpetplanet_ru22),
9307 TEST(cubicOp96d),
9308 TEST(cubicOp95u),
9309 TEST(skpadbox_lt15),
9310 TEST(skpagentxsites_com55),
9311 TEST(skpadventistmission_org572),
9312 TEST(skpadoption_org196),
9313 TEST(skpbambootheme_com12),
9314 TEST(skpbakosoft_com10),
9315 TEST(skpakmmos_ru100),
9316 TEST(skpbangalorenest_com4),
9317 TEST(skpbingoentertainment_net189),
9318 TEST(skpbestred_ru37),
9319 TEST(skpbenzoteh_ru152),
9320 TEST(skpcamcorder_kz21),
9321 TEST(skpcaffelavazzait_com_ua21),
9322 TEST(skpcarrefour_ro62),
9323 TEST(skpcavablar_net563),
9324 TEST(skpinsomnia_gr72),
9325 TEST(skpadbox_lt8),
9326 TEST(skpact_com43),
9327 TEST(skpacesoftech_com47),
9328 TEST(skpabcspark_ca103),
9329 TEST(cubicOp94u),
9330 TEST(cubicOp93d),
9331 TEST(cubicOp92i),
9332 TEST(skpadithya_putr4_blogspot_com551),
9333 TEST(skpadindex_de4),
9334 TEST(skpaiaigames_com870),
9335 TEST(skpaaalgarve_org53),
9336 TEST(skpkkiste_to716),
9337 TEST(cubicOp91u),
9338 TEST(cubicOp90u),
9339 TEST(cubicOp89u),
9340 TEST(cubicOp88u),
9341 TEST(cubicOp87u),
9342 TEST(cubicOp86i),
9343 TEST(loopEdge2),
9344 TEST(loopEdge1),
9345 TEST(rectOp3x),
9346 TEST(rectOp2i),
9347 TEST(rectOp1i),
9348 TEST(issue1418b),
9349 TEST(cubicOp85i),
9350 TEST(issue1418),
9351 TEST(skpkkiste_to98),
9352 TEST(skpahrefs_com29),
9353 TEST(cubicOp85d),
9354 TEST(skpahrefs_com88),
9355 TEST(skphealth_com76),
9356 TEST(skpancestry_com1),
9357 TEST(skpbyte_com1),
9358 TEST(skpeldorado_com_ua1),
9359 TEST(skp96prezzi1),
9360 TEST(skpClip2),
9361 TEST(skpClip1),
9362 TEST(cubicOp84d),
9363 TEST(cubicOp83i),
9364 TEST(cubicOp82i),
9365 TEST(cubicOp81d),
9366 TEST(cubicOp80i),
9367 TEST(cubicOp79u),
9368 TEST(cubicOp78u),
9369 TEST(cubicOp77i),
9370 TEST(cubicOp76u),
9371 TEST(cubicOp75d),
9372 TEST(cubicOp74d),
9373 TEST(cubicOp73d),
9374 TEST(cubicOp72i),
9375 TEST(cubicOp71d),
9376 TEST(skp5),
9377 TEST(skp4),
9378 TEST(skp3),
9379 TEST(skp2),
9380 TEST(skp1),
9381 TEST(rRect1),
9382 TEST(cubicOp70d),
9383 TEST(cubicOp69d),
9384 TEST(cubicOp68u),
9385 TEST(cubicOp67u),
9386 TEST(cubicOp66u),
9387 TEST(rectOp1d),
9388 TEST(cubicOp65d),
9389 TEST(cubicOp64d),
9390 TEST(cubicOp63d),
9391 TEST(cubicOp62d),
9392 TEST(cubicOp61d),
9393 TEST(cubicOp60d),
9394 TEST(cubicOp59d),
9395 TEST(cubicOp57d),
9396 TEST(cubicOp56d),
9397 TEST(cubicOp55d),
9398 TEST(cubicOp54d),
9399 TEST(cubicOp53d),
9400 TEST(cubicOp52d),
9401 TEST(cubicOp51d),
9402 TEST(cubicOp50d),
9403 TEST(cubicOp49d),
9404 TEST(cubicOp48d),
9405 TEST(cubicOp47d),
9406 TEST(cubicOp46d),
9407 TEST(cubicOp45d),
9408 TEST(cubicOp44d),
9409 TEST(cubicOp43d),
9410 TEST(cubicOp42d),
9411 TEST(cubicOp41i),
9412 TEST(cubicOp40d),
9413 TEST(cubicOp39d),
9414 TEST(cubicOp38d),
9415 TEST(cubicOp37d),
9416 TEST(cubicOp36u),
9417 TEST(cubicOp35d),
9418 TEST(cubicOp34d),
9419 TEST(cubicOp33i),
9420 TEST(cubicOp32d),
9421 TEST(cubicOp31d),
9422 TEST(cubicOp31x),
9423 TEST(cubicOp31u),
9424 TEST(cubicOp30d),
9425 TEST(cubicOp29d),
9426 TEST(cubicOp28u),
9427 TEST(cubicOp27d),
9428 TEST(cubicOp26d),
9429 TEST(cubicOp25i),
9430 TEST(testOp8d),
9431 TEST(testDiff1),
9432 TEST(testIntersect1),
9433 TEST(testUnion1),
9434 TEST(testXor1),
9435 TEST(testDiff2),
9436 TEST(testIntersect2),
9437 TEST(testUnion2),
9438 TEST(testXor2),
9439 TEST(testOp1d),
9440 TEST(testOp2d),
9441 TEST(testOp3d),
9442 TEST(testOp1u),
9443 TEST(testOp4d),
9444 TEST(testOp5d),
9445 TEST(testOp6d),
9446 TEST(testOp7d),
9447 TEST(testOp2u),
9448
9449 TEST(cubicOp24d),
9450 TEST(cubicOp23d),
9451 TEST(cubicOp22d),
9452 TEST(cubicOp21d),
9453 TEST(cubicOp20d),
9454 TEST(cubicOp19i),
9455 TEST(cubicOp18d),
9456 TEST(cubicOp17d),
9457 TEST(cubicOp16d),
9458 TEST(cubicOp15d),
9459 TEST(cubicOp14d),
9460 TEST(cubicOp13d),
9461 TEST(cubicOp12d),
9462 TEST(cubicOp11d),
9463 TEST(cubicOp10d),
9464 TEST(cubicOp1i),
9465 TEST(cubicOp9d),
9466 TEST(quadOp9d),
9467 TEST(lineOp9d),
9468 TEST(cubicOp8d),
9469 TEST(cubicOp7d),
9470 TEST(cubicOp6d),
9471 TEST(cubicOp5d),
9472 TEST(cubicOp3d),
9473 TEST(cubicOp2d),
9474 TEST(cubicOp1d),
9475};
9476
9477static const size_t testCount = SK_ARRAY_COUNT(tests);
9478
9479static struct TestDesc subTests[] = {
9480 TEST(loops47i),
9481 TEST(loops61i),
9482 TEST(loops62i),
9483 TEST(issue3517),
9484};
9485
9486static const size_t subTestCount = SK_ARRAY_COUNT(subTests);
9487
9488static void (*firstSubTest)(skiatest::Reporter* , const char* filename) = nullptr;
9489
9490static bool runSubTests = false;
9491static bool runSubTestsFirst = true;
9492static bool runReverse = false;
9493
9494DEF_TEST(PathOpsOp, reporter) {
Yuqian Li3154a532017-09-06 13:33:30 -04009495 if (runSubTests && runSubTestsFirst) {
9496 RunTestSet(reporter, subTests, subTestCount, firstSubTest, nullptr, stopTest, runReverse);
9497 }
9498 RunTestSet(reporter, tests, testCount, firstTest, skipTest, stopTest, runReverse);
9499 if (runSubTests && !runSubTestsFirst) {
9500 RunTestSet(reporter, subTests, subTestCount, firstSubTest, nullptr, stopTest, runReverse);
9501 }
9502}
9503
Cary Clarkafca4d62017-12-01 15:23:00 -05009504static void fuzz767834(skiatest::Reporter* reporter, const char* filename) {
9505 SkPath one;
9506 SkPath two;
9507one.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
9508
9509one.conicTo(SkBits2Float(0x02807252), SkBits2Float(0xee23000a), SkBits2Float(0x00000000), SkBits2Float(0x0fe00008), SkBits2Float(0x52526831)); // 1.88735e-37f, -1.26115e+28f, 0, 2.20881e-29f, 2.25923e+11f
9510
9511one.cubicTo(SkBits2Float(0x474d475a), SkBits2Float(0x72727252), SkBits2Float(0x72267272), SkBits2Float(0x535202ff), SkBits2Float(0x53535353), SkBits2Float(0x58943353)); // 52551.4f, 4.80215e+30f, 3.29682e+30f, 9.01993e+11f, 9.07636e+11f, 1.30359e+15f
9512
9513one.quadTo(SkBits2Float(0x52727272), SkBits2Float(0x52595252), SkBits2Float(0x8e460900), SkBits2Float(0x7272db72)); // 2.60326e+11f, 2.33347e+11f, -2.44097e-30f, 4.81028e+30f
9514
9515one.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
9516
9517one.close();
9518
9519one.moveTo(SkBits2Float(0x72000400), SkBits2Float(0x72727272)); // 2.53561e+30f, 4.80216e+30f
9520
9521one.quadTo(SkBits2Float(0x60727272), SkBits2Float(0x72727272), SkBits2Float(0x2a527272), SkBits2Float(0x72525252)); // 6.98806e+19f, 4.80216e+30f, 1.86915e-13f, 4.16585e+30f
9522
9523one.cubicTo(SkBits2Float(0x72727251), SkBits2Float(0x52617272), SkBits2Float(0x46032352), SkBits2Float(0x7272728e), SkBits2Float(0x5c527272), SkBits2Float(0x72726552)); // 4.80215e+30f, 2.42072e+11f, 8392.83f, 4.80217e+30f, 2.36942e+17f, 4.80114e+30f
9524
9525one.cubicTo(SkBits2Float(0x2b7280ff), SkBits2Float(0x7240ffff), SkBits2Float(0x72724960), SkBits2Float(0x52008072), SkBits2Float(0x72725230), SkBits2Float(0x5f727272)); // 8.61547e-13f, 3.82276e+30f, 4.79898e+30f, 1.37978e+11f, 4.79966e+30f, 1.74702e+19f
9526
9527one.lineTo(SkBits2Float(0x72000400), SkBits2Float(0x72727272)); // 2.53561e+30f, 4.80216e+30f
9528
9529one.close();
9530
9531one.moveTo(SkBits2Float(0x8e524603), SkBits2Float(0x72727272)); // -2.59182e-30f, 4.80216e+30f
9532
9533one.close();
9534
9535one.moveTo(SkBits2Float(0x8e524603), SkBits2Float(0x72727272)); // -2.59182e-30f, 4.80216e+30f
9536
9537one.quadTo(SkBits2Float(0x72725d72), SkBits2Float(0x52008072), SkBits2Float(0x00016552), SkBits2Float(0x72724000)); // 4.80053e+30f, 1.37978e+11f, 1.28182e-40f, 4.79826e+30f
9538
9539one.quadTo(SkBits2Float(0x00807272), SkBits2Float(0x392a5b25), SkBits2Float(0x72685768), SkBits2Float(0x000000ff)); // 1.1796e-38f, 0.000162464f, 4.602e+30f, 3.57331e-43f
9540
9541one.moveTo(SkBits2Float(0xe0e060e0), SkBits2Float(0x728f5740)); // -1.29345e+20f, 5.67831e+30f
9542
9543one.quadTo(SkBits2Float(0x72727272), SkBits2Float(0xd2008072), SkBits2Float(0x8e460900), SkBits2Float(0x72727072)); // 4.80216e+30f, -1.37978e+11f, -2.44097e-30f, 4.802e+30f
9544
9545one.cubicTo(SkBits2Float(0xe0e060e0), SkBits2Float(0x58943303), SkBits2Float(0x72727272), SkBits2Float(0x59525252), SkBits2Float(0x00090052), SkBits2Float(0x72000000)); // -1.29345e+20f, 1.30357e+15f, 4.80216e+30f, 3.70002e+15f, 8.26634e-40f, 2.5353e+30f
9546
9547one.quadTo(SkBits2Float(0x005252ec), SkBits2Float(0x72000400), SkBits2Float(0x72727272), SkBits2Float(0x72727272)); // 7.56026e-39f, 2.53561e+30f, 4.80216e+30f, 4.80216e+30f
9548
9549one.lineTo(SkBits2Float(0xe0e060e0), SkBits2Float(0x728f5740)); // -1.29345e+20f, 5.67831e+30f
9550
9551one.close();
9552
9553one.moveTo(SkBits2Float(0xe0e060e0), SkBits2Float(0x728f5740)); // -1.29345e+20f, 5.67831e+30f
9554
9555one.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x522a5272), SkBits2Float(0x20725252), SkBits2Float(0x72727251)); // 4.80216e+30f, 1.82882e+11f, 2.05254e-19f, 4.80215e+30f
9556
9557one.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x59525252), SkBits2Float(0x46090052), SkBits2Float(0x72db728e)); // 4.80216e+30f, 3.70002e+15f, 8768.08f, 8.69321e+30f
9558
9559one.quadTo(SkBits2Float(0x005252ec), SkBits2Float(0x72000400), SkBits2Float(0x72727272), SkBits2Float(0x72727272)); // 7.56026e-39f, 2.53561e+30f, 4.80216e+30f, 4.80216e+30f
9560
9561one.lineTo(SkBits2Float(0xe0e060e0), SkBits2Float(0x728f5740)); // -1.29345e+20f, 5.67831e+30f
9562
9563one.close();
9564
9565one.moveTo(SkBits2Float(0xe0e060e0), SkBits2Float(0x728f5740)); // -1.29345e+20f, 5.67831e+30f
9566
9567one.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x522a5272), SkBits2Float(0x20725252), SkBits2Float(0x72727251)); // 4.80216e+30f, 1.82882e+11f, 2.05254e-19f, 4.80215e+30f
9568
9569one.quadTo(SkBits2Float(0x52526172), SkBits2Float(0x8e460323), SkBits2Float(0x72727272), SkBits2Float(0x525c5272)); // 2.25894e+11f, -2.44069e-30f, 4.80216e+30f, 2.36569e+11f
9570
9571one.conicTo(SkBits2Float(0xff727272), SkBits2Float(0xff2b549b), SkBits2Float(0x607240ff), SkBits2Float(0x72727249), SkBits2Float(0x30520080)); // -3.22267e+38f, -2.27737e+38f, 6.98249e+19f, 4.80215e+30f, 7.63983e-10f
9572
9573one.lineTo(SkBits2Float(0xe0e060e0), SkBits2Float(0x728f5740)); // -1.29345e+20f, 5.67831e+30f
9574
9575one.close();
9576
9577one.moveTo(SkBits2Float(0xe0e060e0), SkBits2Float(0x728f5740)); // -1.29345e+20f, 5.67831e+30f
9578
9579one.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x0052525f), SkBits2Float(0x8e524603), SkBits2Float(0x72727272)); // 4.80216e+30f, 7.56006e-39f, -2.59182e-30f, 4.80216e+30f
9580
9581one.lineTo(SkBits2Float(0xe0e060e0), SkBits2Float(0x728f5740)); // -1.29345e+20f, 5.67831e+30f
9582
9583one.close();
9584
9585one.moveTo(SkBits2Float(0xe0e060e0), SkBits2Float(0x728f5740)); // -1.29345e+20f, 5.67831e+30f
9586
9587one.quadTo(SkBits2Float(0x72725d72), SkBits2Float(0x52008072), SkBits2Float(0x00016552), SkBits2Float(0x72724000)); // 4.80053e+30f, 1.37978e+11f, 1.28182e-40f, 4.79826e+30f
9588
9589one.quadTo(SkBits2Float(0x00807272), SkBits2Float(0x392a5b25), SkBits2Float(0x72685768), SkBits2Float(0x000000ff)); // 1.1796e-38f, 0.000162464f, 4.602e+30f, 3.57331e-43f
9590
9591one.moveTo(SkBits2Float(0xe0e060e0), SkBits2Float(0x728f5740)); // -1.29345e+20f, 5.67831e+30f
9592
9593one.quadTo(SkBits2Float(0x72727272), SkBits2Float(0xd2008072), SkBits2Float(0x8e460900), SkBits2Float(0x72727072)); // 4.80216e+30f, -1.37978e+11f, -2.44097e-30f, 4.802e+30f
9594
9595one.cubicTo(SkBits2Float(0xe0e060e0), SkBits2Float(0x58943303), SkBits2Float(0x72727272), SkBits2Float(0x59525252), SkBits2Float(0x46090052), SkBits2Float(0x72db728e)); // -1.29345e+20f, 1.30357e+15f, 4.80216e+30f, 3.70002e+15f, 8768.08f, 8.69321e+30f
9596
9597one.quadTo(SkBits2Float(0x005252ec), SkBits2Float(0x72000400), SkBits2Float(0x72727272), SkBits2Float(0x72727272)); // 7.56026e-39f, 2.53561e+30f, 4.80216e+30f, 4.80216e+30f
9598
9599one.lineTo(SkBits2Float(0xe0e060e0), SkBits2Float(0x728f5740)); // -1.29345e+20f, 5.67831e+30f
9600
9601one.close();
9602
9603one.moveTo(SkBits2Float(0xe0e060e0), SkBits2Float(0x728f5740)); // -1.29345e+20f, 5.67831e+30f
9604
9605one.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x522a5272), SkBits2Float(0x20725252), SkBits2Float(0x72727251)); // 4.80216e+30f, 1.82882e+11f, 2.05254e-19f, 4.80215e+30f
9606
9607 testPathOpFuzz(reporter, two, one, kIntersect_SkPathOp, filename);
9608}
9609
Yuqian Li3154a532017-09-06 13:33:30 -04009610static void fuzz535151(skiatest::Reporter* reporter, const char* filename) {
9611 SkPath one;
Mike Reed7d34dc72019-11-26 12:17:17 -05009612 one.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04009613 SkPath two;
Mike Reed7d34dc72019-11-26 12:17:17 -05009614 two.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04009615 two.moveTo(0, 0);
9616 two.lineTo(0, 50);
9617 two.lineTo(4.29497e+09f, 50);
Yuqian Li3154a532017-09-06 13:33:30 -04009618 testPathOpFuzz(reporter, one, two, kIntersect_SkPathOp, filename);
9619}
9620
9621static void bufferOverflow(skiatest::Reporter* reporter, const char* filename) {
9622 SkPath path;
9623 path.addRect(0,0, 300,170141183460469231731687303715884105728.f);
9624 SkPath pathB;
9625 pathB.addRect(0,0, 300,16);
9626 testPathOpFuzz(reporter, path, pathB, kUnion_SkPathOp, filename);
9627}
9628
9629// m 100,0 60,170 -160,-110 200,0 -170,11000000000 z
9630static void fuzz433(skiatest::Reporter* reporter, const char* filename) {
9631 SkPath path1, path2;
9632 path1.moveTo(100,0);
9633 path1.lineTo(60,170);
9634 path1.lineTo(-160,-110);
9635 path1.lineTo(200,0);
9636 path1.lineTo(-170,11000000000.0f);
9637 path1.close();
9638
9639 path2.moveTo(100 + 20,0 + 20);
9640 path2.lineTo(60 + 20,170 + 20);
9641 path2.lineTo(-160 + 20,-110 + 20);
9642 path2.lineTo(200 + 20,0 + 20);
9643 path2.lineTo(-170 + 20,11000000000.0f + 20);
9644 path2.close();
9645
9646 testPathOpFuzz(reporter, path1, path2, kIntersect_SkPathOp, filename);
9647}
9648
9649static void fuzz433b(skiatest::Reporter* reporter, const char* filename) {
9650 SkPath path1, path2;
Mike Reed7d34dc72019-11-26 12:17:17 -05009651 path1.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04009652 path1.moveTo(140, 40);
9653 path1.lineTo(200, 210);
9654 path1.lineTo(40, 100);
9655 path1.lineTo(240, 100);
9656 path1.lineTo(70, 1.1e+10f);
9657 path1.lineTo(140, 40);
9658 path1.close();
9659
Mike Reed7d34dc72019-11-26 12:17:17 -05009660 path1.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -04009661 path2.moveTo(190, 60);
9662 path2.lineTo(250, 230);
9663 path2.lineTo(90, 120);
9664 path2.lineTo(290, 120);
9665 path2.lineTo(120, 1.1e+10f);
9666 path2.lineTo(190, 60);
9667 path2.close();
9668
9669 testPathOpFuzz(reporter, path1, path2, kUnion_SkPathOp, filename);
9670}
9671
9672static void fuzz487a(skiatest::Reporter* reporter, const char* filename) {
9673 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05009674 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -04009675path.moveTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
9676path.lineTo(SkBits2Float(0x4309999a), SkBits2Float(0x42c00000));
9677path.cubicTo(SkBits2Float(0x4309999a), SkBits2Float(0x429a6666), SkBits2Float(0x42f9999a), SkBits2Float(0x4275999a), SkBits2Float(0x42d70001), SkBits2Float(0x42633333));
9678path.lineTo(SkBits2Float(0x42e90001), SkBits2Float(0x41b8cccc));
9679path.cubicTo(SkBits2Float(0x42dc6667), SkBits2Float(0x41ab3332), SkBits2Float(0x42cf3334), SkBits2Float(0x41a3ffff), SkBits2Float(0x42c20001), SkBits2Float(0x41a3ffff));
9680path.lineTo(SkBits2Float(0x42c20001), SkBits2Float(0x425d999a));
9681path.lineTo(SkBits2Float(0x42c20001), SkBits2Float(0x425d999a));
9682path.cubicTo(SkBits2Float(0x429c6668), SkBits2Float(0x425d999a), SkBits2Float(0x4279999c), SkBits2Float(0x42886667), SkBits2Float(0x42673335), SkBits2Float(0x42ab0000));
9683path.lineTo(SkBits2Float(0x41c0ccd0), SkBits2Float(0x42990000));
9684path.cubicTo(SkBits2Float(0x41b33336), SkBits2Float(0x42a5999a), SkBits2Float(0x41ac0003), SkBits2Float(0x42b2cccd), SkBits2Float(0x41ac0003), SkBits2Float(0x42c00000));
9685path.lineTo(SkBits2Float(0x4261999c), SkBits2Float(0x42c00000));
9686path.lineTo(SkBits2Float(0x4261999c), SkBits2Float(0x42c00000));
9687path.cubicTo(SkBits2Float(0x4261999c), SkBits2Float(0x434d3333), SkBits2Float(0x4364e667), SkBits2Float(0x4346b333), SkBits2Float(0x4364e667), SkBits2Float(0x43400000));
9688path.lineTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
9689path.close();
9690
9691 SkPath path1(path);
9692 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -05009693 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -04009694path.moveTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
9695path.lineTo(SkBits2Float(0x4309999a), SkBits2Float(0x42c00000));
9696path.cubicTo(SkBits2Float(0x4309999a), SkBits2Float(0x42a20000), SkBits2Float(0x43016667), SkBits2Float(0x4287cccd), SkBits2Float(0x42ea999a), SkBits2Float(0x4273999a));
9697path.lineTo(SkBits2Float(0x4306cccd), SkBits2Float(0x41f5999a));
9698path.cubicTo(SkBits2Float(0x42f76667), SkBits2Float(0x41c26667), SkBits2Float(0x42dd999a), SkBits2Float(0x41a4cccd), SkBits2Float(0x42c23334), SkBits2Float(0x41a4cccd));
9699path.lineTo(SkBits2Float(0x42c23334), SkBits2Float(0x425e0000));
9700path.cubicTo(SkBits2Float(0x42a43334), SkBits2Float(0x425e0000), SkBits2Float(0x428a0001), SkBits2Float(0x427ecccd), SkBits2Float(0x42780002), SkBits2Float(0x4297999a));
9701path.lineTo(SkBits2Float(0x41fccccd), SkBits2Float(0x42693333));
9702path.cubicTo(SkBits2Float(0x41c9999a), SkBits2Float(0x428acccd), SkBits2Float(0x41ac0000), SkBits2Float(0x42a4999a), SkBits2Float(0x41ac0000), SkBits2Float(0x42c00000));
9703path.lineTo(SkBits2Float(0x4261999a), SkBits2Float(0x42c00000));
9704path.cubicTo(SkBits2Float(0x4261999a), SkBits2Float(0x42de0000), SkBits2Float(0x42813333), SkBits2Float(0x42f83333), SkBits2Float(0x42996666), SkBits2Float(0x4303199a));
9705path.cubicTo(SkBits2Float(0x4272cccc), SkBits2Float(0x4303199a), SkBits2Float(0x423d3332), SkBits2Float(0x430de667), SkBits2Float(0x422d9999), SkBits2Float(0x431cb334));
9706path.lineTo(SkBits2Float(0x7086a1dc), SkBits2Float(0x42eecccd));
9707path.lineTo(SkBits2Float(0x41eb3333), SkBits2Float(0xc12ccccd));
9708path.lineTo(SkBits2Float(0x42053333), SkBits2Float(0xc1cccccd));
9709path.lineTo(SkBits2Float(0x42780000), SkBits2Float(0xc18f3334));
9710path.cubicTo(SkBits2Float(0x43206666), SkBits2Float(0x43134ccd), SkBits2Float(0x43213333), SkBits2Float(0x430db333), SkBits2Float(0x43213333), SkBits2Float(0x43080000));
9711path.lineTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
9712path.close();
9713
9714 SkPath path2(path);
9715 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
9716}
9717
9718static void fuzz487b(skiatest::Reporter* reporter, const char* filename) {
9719 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05009720 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -04009721path.moveTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
9722path.lineTo(SkBits2Float(0x4309999a), SkBits2Float(0x42c00000));
9723path.cubicTo(SkBits2Float(0x4309999a), SkBits2Float(0x429a6666), SkBits2Float(0x42f9999a), SkBits2Float(0x4275999a), SkBits2Float(0x42d70001), SkBits2Float(0x42633333));
9724path.lineTo(SkBits2Float(0x42e90001), SkBits2Float(0x41b8cccc));
9725path.cubicTo(SkBits2Float(0x42dc6667), SkBits2Float(0x41ab3332), SkBits2Float(0x42cf3334), SkBits2Float(0x41a3ffff), SkBits2Float(0x42c20001), SkBits2Float(0x41a3ffff));
9726path.lineTo(SkBits2Float(0x42c20001), SkBits2Float(0x425d999a));
9727path.lineTo(SkBits2Float(0x42c20001), SkBits2Float(0x425d999a));
9728path.cubicTo(SkBits2Float(0x429c6668), SkBits2Float(0x425d999a), SkBits2Float(0x4279999c), SkBits2Float(0x42886667), SkBits2Float(0x42673335), SkBits2Float(0x42ab0000));
9729path.lineTo(SkBits2Float(0x41c0ccd0), SkBits2Float(0x42990000));
9730path.cubicTo(SkBits2Float(0x41b33336), SkBits2Float(0x42a5999a), SkBits2Float(0x41ac0003), SkBits2Float(0x42b2cccd), SkBits2Float(0x41ac0003), SkBits2Float(0x42c00000));
9731path.lineTo(SkBits2Float(0x4261999c), SkBits2Float(0x42c00000));
9732path.lineTo(SkBits2Float(0x4261999c), SkBits2Float(0x42c00000));
9733path.cubicTo(SkBits2Float(0x4261999c), SkBits2Float(0x434d3333), SkBits2Float(0x4364e667), SkBits2Float(0x4346b333), SkBits2Float(0x4364e667), SkBits2Float(0x43400000));
9734path.lineTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
9735path.close();
9736
9737 SkPath path1(path);
9738 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -05009739 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -04009740path.moveTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
9741path.lineTo(SkBits2Float(0x4309999a), SkBits2Float(0x42c00000));
9742path.cubicTo(SkBits2Float(0x4309999a), SkBits2Float(0x42a20000), SkBits2Float(0x43016667), SkBits2Float(0x4287cccd), SkBits2Float(0x42ea999a), SkBits2Float(0x4273999a));
9743path.lineTo(SkBits2Float(0x4306cccd), SkBits2Float(0x41f5999a));
9744path.cubicTo(SkBits2Float(0x42f76667), SkBits2Float(0x41c26667), SkBits2Float(0x42dd999a), SkBits2Float(0x41a4cccd), SkBits2Float(0x42c23334), SkBits2Float(0x41a4cccd));
9745path.lineTo(SkBits2Float(0x42c23334), SkBits2Float(0x425e0000));
9746path.cubicTo(SkBits2Float(0x42a43334), SkBits2Float(0x425e0000), SkBits2Float(0x428a0001), SkBits2Float(0x427ecccd), SkBits2Float(0x42780002), SkBits2Float(0x4297999a));
9747path.lineTo(SkBits2Float(0x41fccccd), SkBits2Float(0x42693333));
9748path.cubicTo(SkBits2Float(0x41c9999a), SkBits2Float(0x428acccd), SkBits2Float(0x41ac0000), SkBits2Float(0x42a4999a), SkBits2Float(0x41ac0000), SkBits2Float(0x42c00000));
9749path.lineTo(SkBits2Float(0x4261999a), SkBits2Float(0x42c00000));
9750path.cubicTo(SkBits2Float(0x4261999a), SkBits2Float(0x42de0000), SkBits2Float(0x42813333), SkBits2Float(0x42f83333), SkBits2Float(0x42996666), SkBits2Float(0x4303199a));
9751path.cubicTo(SkBits2Float(0x4272cccc), SkBits2Float(0x4303199a), SkBits2Float(0x423d3332), SkBits2Float(0x430de667), SkBits2Float(0x422d9999), SkBits2Float(0x431cb334));
9752path.lineTo(SkBits2Float(0x7086a1dc), SkBits2Float(0x42eecccd));
9753path.lineTo(SkBits2Float(0x41eb3333), SkBits2Float(0xc12ccccd));
9754path.lineTo(SkBits2Float(0x42053333), SkBits2Float(0xc1cccccd));
9755path.lineTo(SkBits2Float(0x42780000), SkBits2Float(0xc18f3334));
9756path.cubicTo(SkBits2Float(0x43206666), SkBits2Float(0x43134ccd), SkBits2Float(0x43213333), SkBits2Float(0x430db333), SkBits2Float(0x43213333), SkBits2Float(0x43080000));
9757path.lineTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
9758path.close();
9759
9760 SkPath path2(path);
9761 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
9762}
9763
9764static void fuzz714(skiatest::Reporter* reporter, const char* filename) {
9765 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05009766 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -04009767path.moveTo(SkBits2Float(0x430c0000), SkBits2Float(0x42200000));
9768path.lineTo(SkBits2Float(0x43480000), SkBits2Float(0x43520000));
9769path.lineTo(SkBits2Float(0x42200000), SkBits2Float(0x42c80000));
9770path.lineTo(SkBits2Float(0x64969569), SkBits2Float(0x42c80000)); // 2.22222e+022f
9771path.lineTo(SkBits2Float(0x64969569), SkBits2Float(0x43520000)); // 2.22222e+022f
9772path.lineTo(SkBits2Float(0x430c0000), SkBits2Float(0x42200000));
9773path.close();
9774
9775 SkPath path1(path);
9776 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -05009777 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -04009778path.moveTo(SkBits2Float(0x43200000), SkBits2Float(0x42700000));
9779path.lineTo(SkBits2Float(0x435c0000), SkBits2Float(0x43660000));
9780path.lineTo(SkBits2Float(0x42700000), SkBits2Float(0x42f00000));
9781path.lineTo(SkBits2Float(0x64969569), SkBits2Float(0x42f00000)); // 2.22222e+022f
9782path.lineTo(SkBits2Float(0x64969569), SkBits2Float(0x43660000)); // 2.22222e+022f
9783path.lineTo(SkBits2Float(0x43200000), SkBits2Float(0x42700000));
9784path.close();
9785
9786 SkPath path2(path);
9787 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
9788}
9789
9790static void fuzz1(skiatest::Reporter* reporter, const char* filename) {
9791 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05009792 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -04009793path.moveTo(SkBits2Float(0x7f800000), SkBits2Float(0x7f800000));
9794path.quadTo(SkBits2Float(0x7f800000), SkBits2Float(0x7f800000), SkBits2Float(0x7f800000), SkBits2Float(0x7f800000));
9795path.quadTo(SkBits2Float(0x7f800000), SkBits2Float(0x7f800000), SkBits2Float(0x7f800000), SkBits2Float(0x7f800000));
9796path.quadTo(SkBits2Float(0xffc00000), SkBits2Float(0x7f800000), SkBits2Float(0xffc00000), SkBits2Float(0x7f800000));
9797path.quadTo(SkBits2Float(0xff000001), SkBits2Float(0x7f800000), SkBits2Float(0xff000001), SkBits2Float(0x7f800000));
9798path.quadTo(SkBits2Float(0xff000001), SkBits2Float(0xffc00000), SkBits2Float(0xffc00000), SkBits2Float(0xffc00000));
9799path.quadTo(SkBits2Float(0xffc00000), SkBits2Float(0xff000001), SkBits2Float(0x7f800000), SkBits2Float(0xff000001));
9800path.quadTo(SkBits2Float(0x7f800000), SkBits2Float(0xff000001), SkBits2Float(0x7f800000), SkBits2Float(0xffc00000));
9801path.quadTo(SkBits2Float(0x7f800000), SkBits2Float(0xffc00000), SkBits2Float(0x7f800000), SkBits2Float(0x7f800000));
9802path.close();
9803
9804 SkPath path1(path);
9805 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -05009806 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -04009807
9808 SkPath path2(path);
9809 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
9810}
9811
9812
9813static void fuzz753_91(skiatest::Reporter* reporter, const char* filename) {
9814 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05009815 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -04009816path.moveTo(SkBits2Float(0x42910000), SkBits2Float(0x00000000)); // 72.5f, 0
9817path.lineTo(SkBits2Float(0x42166668), SkBits2Float(0x00000000)); // 37.6f, 0
9818path.cubicTo(SkBits2Float(0x42166668), SkBits2Float(0xc1966668), SkBits2Float(0x41c66668), SkBits2Float(0xc20a6666), SkBits2Float(0x40f00010), SkBits2Float(0xc21ccccd)); // 37.6f, -18.8f, 24.8f, -34.6f, 7.50001f, -39.2f
9819path.lineTo(SkBits2Float(0x41840004), SkBits2Float(0xc291cccd)); // 16.5f, -72.9f
9820path.lineTo(SkBits2Float(0x42fb6668), SkBits2Float(0x42c73334)); // 125.7f, 99.6f
9821path.lineTo(SkBits2Float(0x43646668), SkBits2Float(0x43880ccd)); // 228.4f, 272.1f
9822
9823 SkPath path1(path);
9824 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -05009825 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -04009826path.moveTo(SkBits2Float(0x428bf702), SkBits2Float(0xcf223cbf)); // 69.9824f, -2.72189e+09f
9827path.lineTo(SkBits2Float(0x42112d68), SkBits2Float(0xcf223cbf)); // 36.2943f, -2.72189e+09f
9828path.cubicTo(SkBits2Float(0x4220d9fc), SkBits2Float(0xcf223cc0), SkBits2Float(0x420ee118), SkBits2Float(0xcf223cc0), SkBits2Float(0x41cef2f8), SkBits2Float(0xcf223cc0)); // 40.2129f, -2.72189e+09f, 35.7198f, -2.72189e+09f, 25.8686f, -2.72189e+09f
9829path.lineTo(SkBits2Float(0x424a99e0), SkBits2Float(0xcf223cc0)); // 50.6503f, -2.72189e+09f
9830path.cubicTo(SkBits2Float(0x42266e32), SkBits2Float(0xcf223cc0), SkBits2Float(0x41f0fa20), SkBits2Float(0xcf223cc0), SkBits2Float(0x41872ed4), SkBits2Float(0xcf223cc0)); // 41.6076f, -2.72189e+09f, 30.1221f, -2.72189e+09f, 16.8979f, -2.72189e+09f
9831path.lineTo(SkBits2Float(0x40f8fbe0), SkBits2Float(0xcf223cc0)); // 7.78075f, -2.72189e+09f
9832
9833 SkPath path2(path);
9834 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
9835}
9836
9837static void bug597926_0(skiatest::Reporter* reporter, const char* filename) {
9838SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05009839path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -04009840path.moveTo(SkBits2Float(0x43b38000), SkBits2Float(0x433e0000)); // 359, 190
9841path.lineTo(SkBits2Float(0x40c00000), SkBits2Float(0x449ce000)); // 6, 1255
9842path.cubicTo(SkBits2Float(0x438c0000), SkBits2Float(0x4497a000), SkBits2Float(0x43e40000), SkBits2Float(0x44750000), SkBits2Float(0x41000000), SkBits2Float(0x44aa2000)); // 280, 1213, 456, 980, 8, 1361
9843path.moveTo(SkBits2Float(0x43290000), SkBits2Float(0x4431c000)); // 169, 711
9844path.lineTo(SkBits2Float(0xd987d6ba), SkBits2Float(0xd93d0ad4)); // -4.7794e+15f, -3.32567e+15f
9845path.conicTo(SkBits2Float(0x43cc8000), SkBits2Float(0x445b8000), SkBits2Float(0xd888b096), SkBits2Float(0xd9a1ebfa), SkBits2Float(0x3ebcb199)); // 409, 878, -1.20234e+15f, -5.69712e+15f, 0.368542f
9846path.cubicTo(SkBits2Float(0x43c00000), SkBits2Float(0x443a8000), SkBits2Float(0x42380000), SkBits2Float(0x4421c000), SkBits2Float(0x42500000), SkBits2Float(0x448ca000)); // 384, 746, 46, 647, 52, 1125
9847path.quadTo(SkBits2Float(0x43948000), SkBits2Float(0x42ac0000), SkBits2Float(0x43880000), SkBits2Float(0x4487e000)); // 297, 86, 272, 1087
9848SkPath path1(path);
9849path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -05009850path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -04009851path.moveTo(SkBits2Float(0xc51d735c), SkBits2Float(0xc49db029)); // -2519.21f, -1261.51f
9852path.cubicTo(SkBits2Float(0xc51d1dbd), SkBits2Float(0xc49d7a3f), SkBits2Float(0xc51c524a), SkBits2Float(0xc49d1610), SkBits2Float(0xc51d1a96), SkBits2Float(0xc49d86a6)); // -2513.86f, -1259.82f, -2501.14f, -1256.69f, -2513.66f, -1260.21f
9853path.cubicTo(SkBits2Float(0xc51cd471), SkBits2Float(0xc49d54d0), SkBits2Float(0xc51c2e51), SkBits2Float(0xc49d0081), SkBits2Float(0xc51d197b), SkBits2Float(0xc49d7927)); // -2509.28f, -1258.65f, -2498.89f, -1256.02f, -2513.59f, -1259.79f
9854path.quadTo(SkBits2Float(0xc51bf7eb), SkBits2Float(0xc49cf010), SkBits2Float(0xc51ba866), SkBits2Float(0xc49cb9e6)); // -2495.49f, -1255.5f, -2490.52f, -1253.81f
9855path.cubicTo(SkBits2Float(0xc51bac0d), SkBits2Float(0xc49cc50e), SkBits2Float(0xc51c29eb), SkBits2Float(0xc49cfb01), SkBits2Float(0xc51c5bca), SkBits2Float(0xc49d1fa6)); // -2490.75f, -1254.16f, -2498.62f, -1255.84f, -2501.74f, -1256.99f
9856SkPath path2(path);
9857testPathOpFuzz(reporter, path1, path2, (SkPathOp) 1, filename);
9858}
9859
9860static void fuzz1450_0(skiatest::Reporter* reporter, const char* filename) {
9861SkPath path;
9862path.moveTo(SkBits2Float(0x43b40000), SkBits2Float(0xcf000000)); // 360, -2.14748e+09f
9863path.conicTo(SkBits2Float(0x4e800002), SkBits2Float(0xcf000000), SkBits2Float(0x4e800002), SkBits2Float(0xce7ffffe), SkBits2Float(0x3f3504f4)); // 1.07374e+09f, -2.14748e+09f, 1.07374e+09f, -1.07374e+09f, 0.707107f
9864path.conicTo(SkBits2Float(0x4e800002), SkBits2Float(0x43800001), SkBits2Float(0x43348000), SkBits2Float(0x43800001), SkBits2Float(0x3f3504f4)); // 1.07374e+09f, 256, 180.5f, 256, 0.707107f
9865SkPath path1(path);
9866path.reset();
9867path.moveTo(SkBits2Float(0x43b40000), SkBits2Float(0x45816000)); // 360, 4140
9868path.conicTo(SkBits2Float(0x43b40005), SkBits2Float(0x458a945d), SkBits2Float(0x45610000), SkBits2Float(0x458a945d), SkBits2Float(0x3f3504f3)); // 360, 4434.55f, 3600, 4434.55f, 0.707107f
9869path.conicTo(SkBits2Float(0x45d5bfff), SkBits2Float(0x458a945d), SkBits2Float(0x45d5bfff), SkBits2Float(0x45816000), SkBits2Float(0x3f3504f3)); // 6840, 4434.55f, 6840, 4140, 0.707107f
9870path.lineTo(SkBits2Float(0x42c80000), SkBits2Float(0x44000000)); // 100, 512
9871path.lineTo(SkBits2Float(0x42000000), SkBits2Float(0x41800000)); // 32, 16
9872path.lineTo(SkBits2Float(0x43b40000), SkBits2Float(0x44800000)); // 360, 1024
9873path.lineTo(SkBits2Float(0x43b40000), SkBits2Float(0x45816000)); // 360, 4140
9874path.close();
9875SkPath path2(path);
9876testPathOpFuzz(reporter, path1, path2, kUnion_SkPathOp, filename);
9877}
9878
9879static void fuzz1450_1(skiatest::Reporter* reporter, const char* filename) {
9880SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05009881path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -04009882path.moveTo(SkBits2Float(0x4e800002), SkBits2Float(0xce7ffffe)); // 1.07374e+09f, -1.07374e+09f
9883path.conicTo(SkBits2Float(0x4e800002), SkBits2Float(0xcf000000), SkBits2Float(0x43b40000), SkBits2Float(0xcf000000), SkBits2Float(0x3f3504f4)); // 1.07374e+09f, -2.14748e+09f, 360, -2.14748e+09f, 0.707107f
9884path.lineTo(SkBits2Float(0x43348000), SkBits2Float(0x43800001)); // 180.5f, 256
9885path.lineTo(SkBits2Float(0x42000000), SkBits2Float(0x41800000)); // 32, 16
9886path.lineTo(SkBits2Float(0x42c80000), SkBits2Float(0x44000000)); // 100, 512
9887path.lineTo(SkBits2Float(0x43553abd), SkBits2Float(0x440f3cbd)); // 213.229f, 572.949f
9888path.lineTo(SkBits2Float(0x43b40000), SkBits2Float(0x44800000)); // 360, 1024
9889path.lineTo(SkBits2Float(0x43b40000), SkBits2Float(0x45816000)); // 360, 4140
9890path.conicTo(SkBits2Float(0x43b40005), SkBits2Float(0x458a945d), SkBits2Float(0x45610000), SkBits2Float(0x458a945d), SkBits2Float(0x3f3504f3)); // 360, 4434.55f, 3600, 4434.55f, 0.707107f
9891path.conicTo(SkBits2Float(0x45d5bfff), SkBits2Float(0x458a945d), SkBits2Float(0x45d5bfff), SkBits2Float(0x45816000), SkBits2Float(0x3f3504f3)); // 6840, 4434.55f, 6840, 4140, 0.707107f
9892path.lineTo(SkBits2Float(0x43553abd), SkBits2Float(0x440f3cbd)); // 213.229f, 572.949f
9893path.lineTo(SkBits2Float(0x43348000), SkBits2Float(0x43800001)); // 180.5f, 256
9894path.conicTo(SkBits2Float(0x4e800002), SkBits2Float(0x43800001), SkBits2Float(0x4e800002), SkBits2Float(0xce7ffffe), SkBits2Float(0x3f3504f4)); // 1.07374e+09f, 256, 1.07374e+09f, -1.07374e+09f, 0.707107f
9895path.close();
9896SkPath path1(path);
9897path.reset();
9898path.moveTo(SkBits2Float(0x42fe0000), SkBits2Float(0x43a08000)); // 127, 321
9899path.lineTo(SkBits2Float(0x45d5c000), SkBits2Float(0x43870000)); // 6840, 270
9900path.lineTo(SkBits2Float(0xd0a00000), SkBits2Float(0x4cbebc20)); // -2.14748e+10f, 1e+08
9901path.lineTo(SkBits2Float(0x451f7000), SkBits2Float(0x42800000)); // 2551, 64
9902path.lineTo(SkBits2Float(0x42fe0000), SkBits2Float(0x43a08000)); // 127, 321
9903path.close();
9904SkPath path2(path);
9905testPathOpFuzz(reporter, path1, path2, kUnion_SkPathOp, filename);
9906}
9907
9908static void fuzz763_9(skiatest::Reporter* reporter, const char* filename) {
9909 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05009910 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -04009911
9912 SkPath path1(path);
9913 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -05009914 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -04009915path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
9916path.conicTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x081f2a21), SkBits2Float(0x7bc00321), SkBits2Float(0xed7a6a4b), SkBits2Float(0x1f212a8c)); // 2.49282e-13f, 4.78968e-34f, 1.99397e+36f, -4.84373e+27f, 3.41283e-20f
9917path.lineTo(SkBits2Float(0x7bc00321), SkBits2Float(0xed7a6a4b)); // 1.99397e+36f, -4.84373e+27f
9918path.lineTo(SkBits2Float(0x282a3a21), SkBits2Float(0x3a21df28)); // 9.4495e-15f, 0.000617492f
9919path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
9920path.close();
9921path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
9922path.quadTo(SkBits2Float(0x8a284f9a), SkBits2Float(0x3ac23ab3), SkBits2Float(0x1d2a2928), SkBits2Float(0x63962be6)); // -8.10388e-33f, 0.00148185f, 2.25206e-21f, 5.54035e+21f
9923path.moveTo(SkBits2Float(0x29272a81), SkBits2Float(0x2ab03a55)); // 3.71183e-14f, 3.13044e-13f
9924path.quadTo(SkBits2Float(0x2720213b), SkBits2Float(0x3a214729), SkBits2Float(0xdf28282a), SkBits2Float(0x8a2f2121)); // 2.22225e-15f, 0.000615227f, -1.2117e+19f, -8.43217e-33f
9925path.quadTo(SkBits2Float(0x373b3a27), SkBits2Float(0x201fc4c1), SkBits2Float(0x27576c2a), SkBits2Float(0x5921c25d)); // 1.11596e-05f, 1.35329e-19f, 2.98959e-15f, 2.8457e+15f
9926path.quadTo(SkBits2Float(0x2720213b), SkBits2Float(0x3a214729), SkBits2Float(0xdf28282a), SkBits2Float(0x3a8a3a21)); // 2.22225e-15f, 0.000615227f, -1.2117e+19f, 0.00105459f
9927path.cubicTo(SkBits2Float(0x373b3ac5), SkBits2Float(0x201fc422), SkBits2Float(0x523a702a), SkBits2Float(0x27576c51), SkBits2Float(0x5921c25d), SkBits2Float(0x51523a70)); // 1.11598e-05f, 1.35327e-19f, 2.00186e+11f, 2.9896e-15f, 2.8457e+15f, 5.64327e+10f
9928path.quadTo(SkBits2Float(0xd912102a), SkBits2Float(0x284f9a28), SkBits2Float(0xb38a1f30), SkBits2Float(0x3a3ac23a)); // -2.56957e+15f, 1.15242e-14f, -6.4318e-08f, 0.000712428f
9929path.lineTo(SkBits2Float(0xc809272a), SkBits2Float(0x29b02829)); // -140445, 7.82294e-14f
9930
9931 SkPath path2(path);
9932 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 1, filename);
9933}
9934
9935
9936static void fuzz763_4(skiatest::Reporter* reporter, const char* filename) {
9937 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05009938 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -04009939
9940 SkPath path1(path);
9941 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -05009942 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -04009943path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
9944path.lineTo(SkBits2Float(0x555b3a2d), SkBits2Float(0x2a212a8c)); // 1.50652e+13f, 1.43144e-13f
9945path.conicTo(SkBits2Float(0xc0032108), SkBits2Float(0x7a6a4b7b), SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a3a7bc0)); // -2.04889f, 3.04132e+35f, 5.77848e-19f, 4.7323e-37f, 5.63611e+25f
9946path.conicTo(SkBits2Float(0x3a2147ed), SkBits2Float(0xdf28282a), SkBits2Float(0x3a8a3a21), SkBits2Float(0x8a284f9a), SkBits2Float(0x3ac2b33a)); // 0.000615238f, -1.2117e+19f, 0.00105459f, -8.10388e-33f, 0.00148544f
9947path.cubicTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x63962be6), SkBits2Float(0x295b2d2a), SkBits2Float(0x68295b2d), SkBits2Float(0x2d296855), SkBits2Float(0x2a8c275b)); // 2.25206e-21f, 5.54035e+21f, 4.86669e-14f, 3.19905e+24f, 9.6297e-12f, 2.48963e-13f
9948path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
9949path.close();
9950path.moveTo(SkBits2Float(0x55685b1f), SkBits2Float(0x5b2d2968)); // 1.59674e+13f, 4.87407e+16f
9951path.lineTo(SkBits2Float(0x2a212a8c), SkBits2Float(0x2a21081f)); // 1.43144e-13f, 1.43025e-13f
9952path.conicTo(SkBits2Float(0xde6a4b7b), SkBits2Float(0x2a8ced7a), SkBits2Float(0x21081f21), SkBits2Float(0x3a7bc003), SkBits2Float(0x47ed7a6a)); // -4.22068e+18f, 2.50338e-13f, 4.61198e-19f, 0.00096035f, 121589
9953path.lineTo(SkBits2Float(0x55685b1f), SkBits2Float(0x5b2d2968)); // 1.59674e+13f, 4.87407e+16f
9954path.close();
9955path.moveTo(SkBits2Float(0x55685b1f), SkBits2Float(0x5b2d2968)); // 1.59674e+13f, 4.87407e+16f
9956path.quadTo(SkBits2Float(0xdf28282a), SkBits2Float(0x3a8a3a21), SkBits2Float(0x8a284f9a), SkBits2Float(0x3ac23ab3)); // -1.2117e+19f, 0.00105459f, -8.10388e-33f, 0.00148185f
9957path.lineTo(SkBits2Float(0x2928088c), SkBits2Float(0x2be61d2a)); // 3.73109e-14f, 1.63506e-12f
9958path.conicTo(SkBits2Float(0x2a812a63), SkBits2Float(0x2d292a27), SkBits2Float(0x5568295b), SkBits2Float(0x5b2d2968), SkBits2Float(0x552d6829)); // 2.29444e-13f, 9.6159e-12f, 1.5954e+13f, 4.87407e+16f, 1.19164e+13f
9959path.conicTo(SkBits2Float(0x395b2d5b), SkBits2Float(0x68552768), SkBits2Float(0x555b2df0), SkBits2Float(0x1f722a8c), SkBits2Float(0x082a212a)); // 0.000209024f, 4.02636e+24f, 1.50619e+13f, 5.12807e-20f, 5.11965e-34f
9960path.lineTo(SkBits2Float(0x55685b1f), SkBits2Float(0x5b2d2968)); // 1.59674e+13f, 4.87407e+16f
9961path.close();
9962path.moveTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a)); // 5.7784e-19f, 4.61198e-19f
9963path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2147ed7a), SkBits2Float(0x28282a3a), SkBits2Float(0x21df212a), SkBits2Float(0x033a8a3a)); // 6.14991e+25f, 6.77381e-19f, 9.33503e-15f, 1.51198e-18f, 5.48192e-37f
9964
9965 SkPath path2(path);
9966 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 1, filename);
9967}
9968
9969static void fuzz763_3(skiatest::Reporter* reporter, const char* filename) {
9970 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -05009971 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -04009972
9973 SkPath path1(path);
9974 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -05009975 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -04009976path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
9977path.lineTo(SkBits2Float(0x555b292d), SkBits2Float(0x2a212a8c)); // 1.50606e+13f, 1.43144e-13f
9978path.conicTo(SkBits2Float(0xc0032108), SkBits2Float(0x7a6a4b7b), SkBits2Float(0x212a8ced), SkBits2Float(0x295b2d1f), SkBits2Float(0x29685568)); // -2.04889f, 3.04132e+35f, 5.77848e-19f, 4.86669e-14f, 5.15884e-14f
9979path.conicTo(SkBits2Float(0x8c28295b), SkBits2Float(0x1f21212a), SkBits2Float(0xc0032a08), SkBits2Float(0x7a6a4b7b), SkBits2Float(0x212a8ced)); // -1.29547e-31f, 3.41205e-20f, -2.04944f, 3.04132e+35f, 5.77848e-19f
9980path.moveTo(SkBits2Float(0x25682929), SkBits2Float(0x212a8c5b)); // 2.01367e-16f, 5.7784e-19f
9981path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4a7bc0)); // 4.7323e-37f, 6.11969e+25f
9982path.conicTo(SkBits2Float(0x032108ed), SkBits2Float(0x283a7bc0), SkBits2Float(0x47ed7a6a), SkBits2Float(0x282a3a21), SkBits2Float(0x3a21ff28)); // 4.73239e-37f, 1.03519e-14f, 121589, 9.4495e-15f, 0.000617968f
9983path.quadTo(SkBits2Float(0x8a284f9a), SkBits2Float(0x3ac23ab3), SkBits2Float(0x2a292827), SkBits2Float(0x962be61d)); // -8.10388e-33f, 0.00148185f, 1.50241e-13f, -1.38859e-25f
9984path.lineTo(SkBits2Float(0x295b2d2a), SkBits2Float(0x2d296868)); // 4.86669e-14f, 9.62972e-12f
9985path.moveTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a)); // 5.7784e-19f, 4.61198e-19f
9986path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x898ced7a), SkBits2Float(0x21081f21), SkBits2Float(0x3a7bc003), SkBits2Float(0x47ed7a6a)); // 6.14991e+25f, -3.39271e-33f, 4.61198e-19f, 0.00096035f, 121589
9987path.lineTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a)); // 5.7784e-19f, 4.61198e-19f
9988path.close();
9989path.moveTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a)); // 5.7784e-19f, 4.61198e-19f
9990path.quadTo(SkBits2Float(0xdf28282a), SkBits2Float(0x3a8a3a21), SkBits2Float(0xb38a281a), SkBits2Float(0x29283ac2)); // -1.2117e+19f, 0.00105459f, -6.43342e-08f, 3.73545e-14f
9991path.moveTo(SkBits2Float(0x962be61d), SkBits2Float(0x432a2927)); // -1.38859e-25f, 170.161f
9992path.conicTo(SkBits2Float(0x3a2a552a), SkBits2Float(0x3b1e2ab0), SkBits2Float(0x29272021), SkBits2Float(0x3b3ac527), SkBits2Float(0x1fc42236)); // 0.000649768f, 0.00241343f, 3.71093e-14f, 0.00284989f, 8.30658e-20f
9993path.cubicTo(SkBits2Float(0x27576c2a), SkBits2Float(0x5921c25d), SkBits2Float(0x51503a70), SkBits2Float(0x12102a10), SkBits2Float(0x633a28d9), SkBits2Float(0x29c80927)); // 2.98959e-15f, 2.8457e+15f, 5.58959e+10f, 4.54902e-28f, 3.43404e+21f, 8.88337e-14f
9994path.lineTo(SkBits2Float(0x272927b0), SkBits2Float(0x5b392929)); // 2.3475e-15f, 5.21181e+16f
9995path.moveTo(SkBits2Float(0x3a1127b4), SkBits2Float(0x2921ee3b)); // 0.000553723f, 3.59558e-14f
9996path.cubicTo(SkBits2Float(0x5e215d3b), SkBits2Float(0x7828ee3a), SkBits2Float(0x8e28b03b), SkBits2Float(0x50783be8), SkBits2Float(0x9e0b8a3a), SkBits2Float(0x555b2d68)); // 2.90688e+18f, 1.37053e+34f, -2.07925e-30f, 1.66587e+10f, -7.38718e-21f, 1.50618e+13f
9997path.moveTo(SkBits2Float(0x21081f3f), SkBits2Float(0x9fd4e62a)); // 4.61199e-19f, -9.01663e-20f
9998path.cubicTo(SkBits2Float(0x3a293a2a), SkBits2Float(0x0e3bf0c5), SkBits2Float(0x3b29d42a), SkBits2Float(0x0f217265), SkBits2Float(0x2d5d2921), SkBits2Float(0x5568295b)); // 0.000645551f, 2.31655e-30f, 0.00259138f, 7.95994e-30f, 1.25715e-11f, 1.5954e+13f
9999
10000 SkPath path2(path);
10001 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 1, filename);
10002}
10003
10004static void fuzz763_5(skiatest::Reporter* reporter, const char* filename) {
10005 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010006 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040010007
10008 SkPath path1(path);
10009 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010010 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010011path.moveTo(SkBits2Float(0x5b292d55), SkBits2Float(0x2a2a8c55)); // 4.76191e+16f, 1.51477e-13f
10012path.conicTo(SkBits2Float(0xc0032108), SkBits2Float(0x7a6a4b79), SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a3a7bc0)); // -2.04889f, 3.04132e+35f, 5.77848e-19f, 4.7323e-37f, 5.63611e+25f
10013path.conicTo(SkBits2Float(0x3a2147ed), SkBits2Float(0xdf28282a), SkBits2Float(0x3a8a3a21), SkBits2Float(0x8a284f9a), SkBits2Float(0x3ac23ab3)); // 0.000615238f, -1.2117e+19f, 0.00105459f, -8.10388e-33f, 0.00148185f
10014path.cubicTo(SkBits2Float(0xe62a2928), SkBits2Float(0x2a63962b), SkBits2Float(0x68295b2d), SkBits2Float(0x2d296855), SkBits2Float(0x2a8c555b), SkBits2Float(0x001f2a21)); // -2.0089e+23f, 2.02138e-13f, 3.19905e+24f, 9.6297e-12f, 2.49282e-13f, 2.86201e-39f
10015path.lineTo(SkBits2Float(0x5b292d55), SkBits2Float(0x2a2a8c55)); // 4.76191e+16f, 1.51477e-13f
10016path.close();
10017path.moveTo(SkBits2Float(0x5b292d55), SkBits2Float(0x2a2a8c55)); // 4.76191e+16f, 1.51477e-13f
10018path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2a8ced7a), SkBits2Float(0x21081f21), SkBits2Float(0x3a7bc003), SkBits2Float(0x47ed7a6a)); // 6.14991e+25f, 2.50338e-13f, 4.61198e-19f, 0.00096035f, 121589
10019path.lineTo(SkBits2Float(0x5b292d55), SkBits2Float(0x2a2a8c55)); // 4.76191e+16f, 1.51477e-13f
10020path.close();
10021path.moveTo(SkBits2Float(0x5b292d55), SkBits2Float(0x2a2a8c55)); // 4.76191e+16f, 1.51477e-13f
10022path.quadTo(SkBits2Float(0xdf28282a), SkBits2Float(0x3a8a3b21), SkBits2Float(0x28ee4f9a), SkBits2Float(0x68293b78)); // -1.2117e+19f, 0.00105462f, 2.64578e-14f, 3.19671e+24f
10023path.lineTo(SkBits2Float(0x5b2d2968), SkBits2Float(0x5b2d8c55)); // 4.87407e+16f, 4.88495e+16f
10024
10025 SkPath path2(path);
10026 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
10027}
10028
10029static void fuzz763_2(skiatest::Reporter* reporter, const char* filename) {
10030 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010031 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040010032
10033 SkPath path1(path);
10034 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010035 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010036path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
10037path.lineTo(SkBits2Float(0x555b292d), SkBits2Float(0x2a212a8c)); // 1.50606e+13f, 1.43144e-13f
10038path.conicTo(SkBits2Float(0xc0032108), SkBits2Float(0x7a6a4b7b), SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a3a7bc0)); // -2.04889f, 3.04132e+35f, 5.77848e-19f, 4.7323e-37f, 5.63611e+25f
10039path.lineTo(SkBits2Float(0x081f2ad7), SkBits2Float(0x7bc00321)); // 4.78977e-34f, 1.99397e+36f
10040path.moveTo(SkBits2Float(0x2a3a2147), SkBits2Float(0xdf212828)); // 1.65317e-13f, -1.16126e+19f
10041path.quadTo(SkBits2Float(0x4f1a3a8a), SkBits2Float(0x3ab38a28), SkBits2Float(0x29283ac2), SkBits2Float(0x962be62a)); // 2.58753e+09f, 0.00136978f, 3.73545e-14f, -1.38859e-25f
10042path.cubicTo(SkBits2Float(0x272a812a), SkBits2Float(0x3a2a5529), SkBits2Float(0x3b1e2ab0), SkBits2Float(0x29272021), SkBits2Float(0x3b3ac527), SkBits2Float(0x1fc42237)); // 2.36623e-15f, 0.000649768f, 0.00241343f, 3.71093e-14f, 0.00284989f, 8.30658e-20f
10043path.cubicTo(SkBits2Float(0x27576c2a), SkBits2Float(0x5921c25d), SkBits2Float(0x51523a70), SkBits2Float(0x12102a10), SkBits2Float(0x633a28d9), SkBits2Float(0x29c80927)); // 2.98959e-15f, 2.8457e+15f, 5.64327e+10f, 4.54902e-28f, 3.43404e+21f, 8.88337e-14f
10044path.lineTo(SkBits2Float(0x29292727), SkBits2Float(0x21475b3b)); // 3.75595e-14f, 6.75446e-19f
10045path.quadTo(SkBits2Float(0xdf28282a), SkBits2Float(0x3a8a3a21), SkBits2Float(0x8a284f9a), SkBits2Float(0x3ac23ab3)); // -1.2117e+19f, 0.00105459f, -8.10388e-33f, 0.00148185f
10046path.cubicTo(SkBits2Float(0x682d2928), SkBits2Float(0x555b6829), SkBits2Float(0x555b292d), SkBits2Float(0x2a212a8c), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 3.27091e+24f, 1.50775e+13f, 1.50606e+13f, 1.43144e-13f, 4.7323e-37f, 6.14991e+25f
10047path.conicTo(SkBits2Float(0x295b2ded), SkBits2Float(0x29685568), SkBits2Float(0x8c555b2d), SkBits2Float(0xe61d2a2a), SkBits2Float(0x2a63962b)); // 4.86676e-14f, 5.15884e-14f, -1.64364e-31f, -1.85547e+23f, 2.02138e-13f
10048path.conicTo(SkBits2Float(0x5568295b), SkBits2Float(0x5b2d2968), SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a), SkBits2Float(0x4b7bc003)); // 1.5954e+13f, 4.87407e+16f, 5.7784e-19f, 4.61198e-19f, 1.64987e+07f
10049path.lineTo(SkBits2Float(0x2a8ced7a), SkBits2Float(0x21081f21)); // 2.50338e-13f, 4.61198e-19f
10050path.conicTo(SkBits2Float(0x6a3a7bc0), SkBits2Float(0x2147ed7a), SkBits2Float(0x28282a3a), SkBits2Float(0x8a3a21df), SkBits2Float(0x27b42a3a)); // 5.63611e+25f, 6.77381e-19f, 9.33503e-15f, -8.96194e-33f, 5.00058e-15f
10051path.conicTo(SkBits2Float(0x2921217d), SkBits2Float(0x5e3a3b35), SkBits2Float(0x7828ee3a), SkBits2Float(0x8e28b03b), SkBits2Float(0x783be82a)); // 3.57782e-14f, 3.35484e+18f, 1.37053e+34f, -2.07925e-30f, 1.52448e+34f
10052path.conicTo(SkBits2Float(0x8e0b8a3a), SkBits2Float(0x279fd4e6), SkBits2Float(0x7a293a2a), SkBits2Float(0x2a0ef0c5), SkBits2Float(0x653b29d4)); // -1.71996e-30f, 4.43622e-15f, 2.19669e+35f, 1.26957e-13f, 5.52409e+22f
10053path.quadTo(SkBits2Float(0x29210f21), SkBits2Float(0x282a085d), SkBits2Float(0xc2ab2127), SkBits2Float(0xa6800028)); // 3.57623e-14f, 9.43871e-15f, -85.5648f, -8.88183e-16f
10054path.lineTo(SkBits2Float(0x2a3a2147), SkBits2Float(0xdf212828)); // 1.65317e-13f, -1.16126e+19f
10055path.close();
10056path.moveTo(SkBits2Float(0x2a3a2147), SkBits2Float(0xdf212828)); // 1.65317e-13f, -1.16126e+19f
10057path.quadTo(SkBits2Float(0x216a2770), SkBits2Float(0x2ab73b28), SkBits2Float(0x4b28f427), SkBits2Float(0x283b5b28)); // 7.93345e-19f, 3.25484e-13f, 1.10726e+07f, 1.04004e-14f
10058path.lineTo(SkBits2Float(0x2a3a2147), SkBits2Float(0xdf212828)); // 1.65317e-13f, -1.16126e+19f
10059path.close();
10060path.moveTo(SkBits2Float(0x2a3a2147), SkBits2Float(0xdf212828)); // 1.65317e-13f, -1.16126e+19f
10061path.conicTo(SkBits2Float(0xf86d273b), SkBits2Float(0x27e523e3), SkBits2Float(0x2927e0f5), SkBits2Float(0x2ac0e729), SkBits2Float(0x6b492128)); // -1.92402e+34f, 6.35992e-15f, 3.72766e-14f, 3.42665e-13f, 2.43151e+26f
10062path.cubicTo(SkBits2Float(0x2f273927), SkBits2Float(0xa83a2c21), SkBits2Float(0xd7122121), SkBits2Float(0x21212921), SkBits2Float(0x3be3db3a), SkBits2Float(0xa9deb63b)); // 1.52089e-10f, -1.03346e-14f, -1.60671e+14f, 5.46034e-19f, 0.00695362f, -9.89039e-14f
10063
10064 SkPath path2(path);
10065 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 1, filename);
10066}
10067
10068// crbug.com/626164
10069static void fuzz763_1c(skiatest::Reporter* reporter, const char* filename) {
10070 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010071 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010072
10073 SkPath path1(path);
10074 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010075 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010076 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
10077 path.cubicTo(SkBits2Float(0x1931204a), SkBits2Float(0x2ba1a14a), SkBits2Float(0x4a4a08ff), SkBits2Float(0x4a4a08ff), SkBits2Float(0x4a4a4a34), SkBits2Float(0x4a4a4a4a)); // 9.15721e-24f, 1.14845e-12f, 3.31014e+06f, 3.31014e+06f, 3.31432e+06f, 3.31432e+06f
10078 path.moveTo(SkBits2Float(0x000010a1), SkBits2Float(0x19312000)); // 5.96533e-42f, 9.15715e-24f
10079 path.cubicTo(SkBits2Float(0x4a4a4a4a), SkBits2Float(0x4a4a4a4a), SkBits2Float(0xa14a4a4a), SkBits2Float(0x08ff2ba1), SkBits2Float(0x08ff4a4a), SkBits2Float(0x4a344a4a)); // 3.31432e+06f, 3.31432e+06f, -6.85386e-19f, 1.53575e-33f, 1.53647e-33f, 2.95387e+06f
10080 path.cubicTo(SkBits2Float(0x4a4a4a4a), SkBits2Float(0x4a4a4a4a), SkBits2Float(0x2ba1a14a), SkBits2Float(0x4e4a08ff), SkBits2Float(0x4a4a4a4a), SkBits2Float(0xa1a181ff)); // 3.31432e+06f, 3.31432e+06f, 1.14845e-12f, 8.47397e+08f, 3.31432e+06f, -1.09442e-18f
10081
10082 SkPath path2(path);
Yuqian Li3154a532017-09-06 13:33:30 -040010083 testPathOpFuzz(reporter, path1, path2, (SkPathOp)4, filename);
10084}
10085
10086// crbug.com/626186
10087static void fuzz763_1b(skiatest::Reporter* reporter, const char* filename) {
10088 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010089 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010090 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
10091 path.cubicTo(SkBits2Float(0x0000ff07), SkBits2Float(0xf9f9ff00), SkBits2Float(0xfe0ef9f4), SkBits2Float(0xd9b105fb), SkBits2Float(0x000000f9), SkBits2Float(0xfe11f901)); // 9.14866e-41f, -1.62257e+35f, -4.75121e+37f, -6.22846e+15f, 3.48923e-43f, -4.85077e+37f
10092 path.lineTo(SkBits2Float(0xda1905ed), SkBits2Float(0x3c05fbfb)); // -1.0768e+16f, 0.00817775f
10093 path.cubicTo(SkBits2Float(0x3c3c3c3c), SkBits2Float(0x3c3c3c3c), SkBits2Float(0x253c7f00), SkBits2Float(0xfa00d3fa), SkBits2Float(0x250025fe), SkBits2Float(0x00000006)); // 0.011489f, 0.011489f, 1.63494e-16f, -1.67228e+35f, 1.11151e-16f, 8.40779e-45f
10094
10095 SkPath path1(path);
10096 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010097 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010098 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
10099 path.quadTo(SkBits2Float(0x3c3c3c3c), SkBits2Float(0xfa253c3c), SkBits2Float(0xfefa00d3), SkBits2Float(0x25fad9df)); // 0.011489f, -2.14488e+35f, -1.66156e+38f, 4.35157e-16f
10100 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
10101 path.close();
10102 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
10103 path.lineTo(SkBits2Float(0x8dfefa00), SkBits2Float(0xf0f9fad9)); // -1.57141e-30f, -6.1892e+29f
10104 path.cubicTo(SkBits2Float(0x20fe58f9), SkBits2Float(0x0525fbed), SkBits2Float(0x1905ffff), SkBits2Float(0x01f9f9f9), SkBits2Float(0xfbfe0ef9), SkBits2Float(0xfb212fff)); // 4.30882e-19f, 7.80453e-36f, 6.92764e-24f, 9.18268e-38f, -2.63829e+36f, -8.36933e+35f
10105
10106 SkPath path2(path);
10107 testPathOpFuzz(reporter, path1, path2, (SkPathOp)2, filename);
10108}
10109
10110static void fuzz763_1a(skiatest::Reporter* reporter, const char* filename) {
10111 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010112 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010113 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
10114 path.cubicTo(SkBits2Float(0x154be880), SkBits2Float(0x80000640), SkBits2Float(0x5559a419), SkBits2Float(0x59d55928), SkBits2Float(0x80045959), SkBits2Float(0x40154be8)); // 4.11789e-26f, -2.24208e-42f, 1.49562e+13f, 7.50652e+15f, -3.99394e-40f, 2.33276f
10115
10116 SkPath path1(path);
10117 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010118 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010119 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
10120 path.quadTo(SkBits2Float(0x5559a419), SkBits2Float(0x59d55928), SkBits2Float(0xbd595959), SkBits2Float(0x3f3f3f09)); // 1.49562e+13f, 7.50652e+15f, -0.0530637f, 0.747056f
10121 path.moveTo(SkBits2Float(0x3f3f3f3f), SkBits2Float(0x3f3f3f3f)); // 0.747059f, 0.747059f
10122 path.moveTo(SkBits2Float(0x3f3f3f3f), SkBits2Float(0xff3f3f3f)); // 0.747059f, -2.54211e+38f
10123 path.lineTo(SkBits2Float(0x09090909), SkBits2Float(0x3038d509)); // 1.6495e-33f, 6.72416e-10f
10124 path.conicTo(SkBits2Float(0x5947ffff), SkBits2Float(0x40e88004), SkBits2Float(0x00002059), SkBits2Float(0x28555900), SkBits2Float(0x5959d559)); // 3.51844e+15f, 7.26563f, 1.16042e-41f, 1.18432e-14f, 3.83217e+15f
10125 path.lineTo(SkBits2Float(0x3f3f3f3f), SkBits2Float(0xff3f3f3f)); // 0.747059f, -2.54211e+38f
10126 path.close();
10127 path.moveTo(SkBits2Float(0x3f3f3f3f), SkBits2Float(0xff3f3f3f)); // 0.747059f, -2.54211e+38f
10128 path.lineTo(SkBits2Float(0x38d57f4b), SkBits2Float(0x59597f4b)); // 0.000101803f, 3.82625e+15f
10129 path.lineTo(SkBits2Float(0x3f3f3f3f), SkBits2Float(0xff3f3f3f)); // 0.747059f, -2.54211e+38f
10130 path.close();
10131 path.moveTo(SkBits2Float(0x384700ff), SkBits2Float(0x0108804b)); // 4.74462e-05f, 2.50713e-38f
10132
10133 SkPath path2(path);
10134 testPathOpFuzz(reporter, path1, path2, (SkPathOp)0, filename);
10135}
10136
10137// crbug.com/627780
10138static void fuzz763_3a(skiatest::Reporter* reporter, const char* filename) {
10139 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010140 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040010141
10142 SkPath path1(path);
10143 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010144 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010145path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
10146path.lineTo(SkBits2Float(0x555b292d), SkBits2Float(0x2a212a8c)); // 1.50606e+13f, 1.43144e-13f
10147path.conicTo(SkBits2Float(0xc0032108), SkBits2Float(0x7a6a4b7b), SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a3a7bc0)); // -2.04889f, 3.04132e+35f, 5.77848e-19f, 4.7323e-37f, 5.63611e+25f
10148path.conicTo(SkBits2Float(0x3a2147ed), SkBits2Float(0xdf28282a), SkBits2Float(0x3a8a3a21), SkBits2Float(0x8a284f9a), SkBits2Float(0x3ac23ab3)); // 0.000615238f, -1.2117e+19f, 0.00105459f, -8.10388e-33f, 0.00148185f
10149path.cubicTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x63962be6), SkBits2Float(0x272a812a), SkBits2Float(0x295b2d29), SkBits2Float(0x2a685568), SkBits2Float(0x68295b2d)); // 2.25206e-21f, 5.54035e+21f, 2.36623e-15f, 4.86669e-14f, 2.06354e-13f, 3.19905e+24f
10150path.conicTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x081f2a21), SkBits2Float(0x7bc00321), SkBits2Float(0x7a6a4b77), SkBits2Float(0x3a214726)); // 2.49282e-13f, 4.78968e-34f, 1.99397e+36f, 3.04132e+35f, 0.000615226f
10151path.moveTo(SkBits2Float(0x8adf2028), SkBits2Float(0x3a219a3a)); // -2.14862e-32f, 0.000616464f
10152path.quadTo(SkBits2Float(0x3ab38e28), SkBits2Float(0x29283ac2), SkBits2Float(0x2be61d2a), SkBits2Float(0x812a4396)); // 0.0013699f, 3.73545e-14f, 1.63506e-12f, -3.12726e-38f
10153
10154 SkPath path2(path);
10155 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 1, filename);
10156}
10157
10158// crbug.com/627689
10159static void fuzz763_5a(skiatest::Reporter* reporter, const char* filename) {
10160 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010161 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040010162path.moveTo(SkBits2Float(0x38bd8610), SkBits2Float(0x00000000)); // 9.03719e-05f, 0
10163path.conicTo(SkBits2Float(0x4183d871), SkBits2Float(0x41fea321), SkBits2Float(0xb700ff00), SkBits2Float(0x4240b8b8), SkBits2Float(0x3b058283)); // 16.4807f, 31.8297f, -7.68877e-06f, 48.1804f, 0.0020372f
10164path.lineTo(SkBits2Float(0x3a3a3ab8), SkBits2Float(0xb8b8b8b8)); // 0.000710409f, -8.80821e-05f
10165path.conicTo(SkBits2Float(0x3a455ec8), SkBits2Float(0xb8b8b8b3), SkBits2Float(0x38b2418d), SkBits2Float(0xb730d014), SkBits2Float(0x3f7ffff3)); // 0.000752908f, -8.80821e-05f, 8.49991e-05f, -1.05389e-05f, 0.999999f
10166path.quadTo(SkBits2Float(0x3a51246a), SkBits2Float(0xb6da45a3), SkBits2Float(0x38bc5c3c), SkBits2Float(0x00000000)); // 0.000797814f, -6.50501e-06f, 8.98172e-05f, 0
10167path.lineTo(SkBits2Float(0x3a3a3ab8), SkBits2Float(0xb8b8b8b8)); // 0.000710409f, -8.80821e-05f
10168path.quadTo(SkBits2Float(0x39a32d2d), SkBits2Float(0x00000000), SkBits2Float(0xb8a13a00), SkBits2Float(0x00000000)); // 0.000311234f, 0, -7.68788e-05f, 0
10169path.lineTo(SkBits2Float(0x3a3a3ab8), SkBits2Float(0xb8b8b8b8)); // 0.000710409f, -8.80821e-05f
10170path.quadTo(SkBits2Float(0x39ba814c), SkBits2Float(0xb838fed2), SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0.00035573f, -4.41063e-05f, 0, 0
10171path.lineTo(SkBits2Float(0x38bd8610), SkBits2Float(0x00000000)); // 9.03719e-05f, 0
10172path.close();
10173
10174 SkPath path1(path);
10175 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010176 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010177
10178 SkPath path2(path);
10179 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
10180}
10181
10182// crbug.com/627401
10183static void fuzz763_2a(skiatest::Reporter* reporter, const char* filename) {
10184 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010185 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040010186
10187 SkPath path1(path);
10188 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010189 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010190path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
10191path.quadTo(SkBits2Float(0x3e484500), SkBits2Float(0x164f3a30), SkBits2Float(0x49484801), SkBits2Float(0x7d0100c8)); // 0.195576f, 1.67397e-25f, 820352, 1.07172e+37f
10192path.conicTo(SkBits2Float(0xff7f36fd), SkBits2Float(0x3e647d01), SkBits2Float(0x0c00f430), SkBits2Float(0x486b6448), SkBits2Float(0x00484848)); // -3.39239e+38f, 0.223133f, 9.93424e-32f, 241041, 6.63809e-39f
10193path.lineTo(SkBits2Float(0x4f4f557d), SkBits2Float(0x48480112)); // 3.47849e+09f, 204804
10194path.lineTo(SkBits2Float(0xf40c01ff), SkBits2Float(0x45008000)); // -4.43702e+31f, 2056
10195path.moveTo(SkBits2Float(0x4bfffa00), SkBits2Float(0x7d4ac859)); // 3.35514e+07f, 1.68465e+37f
10196path.conicTo(SkBits2Float(0x7d014f3e), SkBits2Float(0x00f4ff01), SkBits2Float(0x6b64480c), SkBits2Float(0x48484848), SkBits2Float(0x557d0100)); // 1.07426e+37f, 2.24993e-38f, 2.75975e+26f, 205089, 1.73863e+13f
10197
10198 SkPath path2(path);
10199 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
10200}
10201
10202// crbug.com/627761
10203static void fuzz763_2b(skiatest::Reporter* reporter, const char* filename) {
10204 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010205 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040010206
10207 SkPath path1(path);
10208 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010209 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010210path.moveTo(SkBits2Float(0x5b292d55), SkBits2Float(0x212a8c55)); // 4.76191e+16f, 5.7784e-19f
10211path.moveTo(SkBits2Float(0x3b21081f), SkBits2Float(0x4b7bc003)); // 0.00245715f, 1.64987e+07f
10212path.lineTo(SkBits2Float(0x2a8ced7a), SkBits2Float(0x21081f21)); // 2.50338e-13f, 4.61198e-19f
10213path.conicTo(SkBits2Float(0x6a3a7bc0), SkBits2Float(0x4721ed7a), SkBits2Float(0x282a3a21), SkBits2Float(0x3a21df28), SkBits2Float(0x4f9a3a8a)); // 5.63611e+25f, 41453.5f, 9.4495e-15f, 0.000617492f, 5.17506e+09f
10214path.lineTo(SkBits2Float(0x3b21081f), SkBits2Float(0x4b7bc003)); // 0.00245715f, 1.64987e+07f
10215path.close();
10216path.moveTo(SkBits2Float(0x3b21081f), SkBits2Float(0x4b7bc003)); // 0.00245715f, 1.64987e+07f
10217path.cubicTo(SkBits2Float(0x273ac23a), SkBits2Float(0x1d2a2928), SkBits2Float(0x63962be6), SkBits2Float(0x272a812a), SkBits2Float(0x295b2d29), SkBits2Float(0x29685568)); // 2.5918e-15f, 2.25206e-21f, 5.54035e+21f, 2.36623e-15f, 4.86669e-14f, 5.15884e-14f
10218path.lineTo(SkBits2Float(0x081f2a21), SkBits2Float(0x7bc00321)); // 4.78968e-34f, 1.99397e+36f
10219path.lineTo(SkBits2Float(0x282a3a21), SkBits2Float(0x3a21df28)); // 9.4495e-15f, 0.000617492f
10220path.lineTo(SkBits2Float(0x3b21081f), SkBits2Float(0x4b7bc003)); // 0.00245715f, 1.64987e+07f
10221path.close();
10222path.moveTo(SkBits2Float(0x3b21081f), SkBits2Float(0x4b7bc003)); // 0.00245715f, 1.64987e+07f
10223path.quadTo(SkBits2Float(0x8a4fc29a), SkBits2Float(0x3ab3283a), SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6)); // -1.00033e-32f, 0.00136686f, 2.25206e-21f, 300.343f
10224path.moveTo(SkBits2Float(0x5b2d2a81), SkBits2Float(0x29276829)); // 4.87419e+16f, 3.71718e-14f
10225path.conicTo(SkBits2Float(0x1e2ab03a), SkBits2Float(0x2920213b), SkBits2Float(0x3b3ac527), SkBits2Float(0xc422333b), SkBits2Float(0x6c2a9f1f)); // 9.03617e-21f, 3.5556e-14f, 0.00284989f, -648.8f, 8.25075e+26f
10226path.quadTo(SkBits2Float(0xc25d2757), SkBits2Float(0x3a705921), SkBits2Float(0x2a105152), SkBits2Float(0x28d91210)); // -55.2884f, 0.000916855f, 1.2818e-13f, 2.40997e-14f
10227path.quadTo(SkBits2Float(0x68295b2d), SkBits2Float(0x2d296855), SkBits2Float(0x2a8c555b), SkBits2Float(0x081f2a21)); // 3.19905e+24f, 9.6297e-12f, 2.49282e-13f, 4.78968e-34f
10228path.lineTo(SkBits2Float(0x5b2d2a81), SkBits2Float(0x29276829)); // 4.87419e+16f, 3.71718e-14f
10229path.close();
10230path.moveTo(SkBits2Float(0x5b2d2a81), SkBits2Float(0x29276829)); // 4.87419e+16f, 3.71718e-14f
10231path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2a8ced7a), SkBits2Float(0x21081f21), SkBits2Float(0xcb7bc003), SkBits2Float(0x47ed7a6a)); // 6.14991e+25f, 2.50338e-13f, 4.61198e-19f, -1.64987e+07f, 121589
10232path.lineTo(SkBits2Float(0x5b2d2a81), SkBits2Float(0x29276829)); // 4.87419e+16f, 3.71718e-14f
10233path.close();
10234path.moveTo(SkBits2Float(0x5b2d2a81), SkBits2Float(0x29276829)); // 4.87419e+16f, 3.71718e-14f
10235path.quadTo(SkBits2Float(0xdf28282a), SkBits2Float(0x2d8a3a21), SkBits2Float(0x5b682b68), SkBits2Float(0x5b292d55)); // -1.2117e+19f, 1.57146e-11f, 6.53499e+16f, 4.76191e+16f
10236path.lineTo(SkBits2Float(0x2a212a8c), SkBits2Float(0x0321081f)); // 1.43144e-13f, 4.7323e-37f
10237path.conicTo(SkBits2Float(0x7a6a4b7b), SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a3a7bc0), SkBits2Float(0x3a21477a)); // 3.04132e+35f, 5.77848e-19f, 4.7323e-37f, 5.63611e+25f, 0.000615231f
10238path.moveTo(SkBits2Float(0x21df2828), SkBits2Float(0x9a3a8a3a)); // 1.51217e-18f, -3.85756e-23f
10239path.quadTo(SkBits2Float(0x3ab38a28), SkBits2Float(0x28273ac2), SkBits2Float(0xe61d2a29), SkBits2Float(0x2a63962b)); // 0.00136978f, 9.2831e-15f, -1.85547e+23f, 2.02138e-13f
10240path.conicTo(SkBits2Float(0x2d29272a), SkBits2Float(0x5568295b), SkBits2Float(0x5b2d2968), SkBits2Float(0x5b2d6829), SkBits2Float(0x212a8c55)); // 9.61523e-12f, 1.5954e+13f, 4.87407e+16f, 4.88097e+16f, 5.7784e-19f
10241path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
10242path.conicTo(SkBits2Float(0x3a2147ed), SkBits2Float(0xdf28282a), SkBits2Float(0x3a8a3a21), SkBits2Float(0x8a284f9a), SkBits2Float(0x3ac23ab3)); // 0.000615238f, -1.2117e+19f, 0.00105459f, -8.10388e-33f, 0.00148185f
10243path.lineTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
10244path.close();
10245
10246 SkPath path2(path);
10247 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
10248}
10249
10250static void fuzz763_2c(skiatest::Reporter* reporter, const char* filename) {
10251 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010252 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040010253
10254path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x36344a4a)); // 0, 2.68653e-06f
10255path.cubicTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x364a4a4a), SkBits2Float(0x364a4a4a), SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0, 3.01436e-06f, 3.01436e-06f, 0, 0
10256path.lineTo(SkBits2Float(0x364a4a4a), SkBits2Float(0x00000000)); // 3.01436e-06f, 0
10257path.cubicTo(SkBits2Float(0x364a30f0), SkBits2Float(0x344ac7fb), SkBits2Float(0x3656d432), SkBits2Float(0x34cabb48), SkBits2Float(0x367031a9), SkBits2Float(0x351802f1)); // 3.01288e-06f, 1.88855e-07f, 3.2012e-06f, 3.77617e-07f, 3.57917e-06f, 5.66287e-07f
10258path.cubicTo(SkBits2Float(0x36a7b150), SkBits2Float(0x35ab09db), SkBits2Float(0x371874ed), SkBits2Float(0x3604f2c7), SkBits2Float(0x3784e0c7), SkBits2Float(0x36344a51)); // 4.99763e-06f, 1.27434e-06f, 9.08713e-06f, 1.98108e-06f, 1.58403e-05f, 2.68653e-06f
10259path.cubicTo(SkBits2Float(0x3743dc9a), SkBits2Float(0x36344a4f), SkBits2Float(0x36fbef33), SkBits2Float(0x36344a4e), SkBits2Float(0x36604a35), SkBits2Float(0x36344a4c)); // 1.16743e-05f, 2.68653e-06f, 7.50823e-06f, 2.68653e-06f, 3.34218e-06f, 2.68653e-06f
10260path.cubicTo(SkBits2Float(0x36531715), SkBits2Float(0x36344a4c), SkBits2Float(0x3645e3f5), SkBits2Float(0x36344a4b), SkBits2Float(0x3638b0d4), SkBits2Float(0x36344a4b)); // 3.14549e-06f, 2.68653e-06f, 2.9488e-06f, 2.68653e-06f, 2.75211e-06f, 2.68653e-06f
10261path.cubicTo(SkBits2Float(0x35f64120), SkBits2Float(0x36344a4b), SkBits2Float(0x35764124), SkBits2Float(0x36344a4a), SkBits2Float(0x00000000), SkBits2Float(0x36344a4a)); // 1.83474e-06f, 2.68653e-06f, 9.17369e-07f, 2.68653e-06f, 0, 2.68653e-06f
10262path.close();
10263 SkPath path1(path);
10264 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010265 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010266path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
10267path.cubicTo(SkBits2Float(0x1931204a), SkBits2Float(0x2ba1a14a), SkBits2Float(0x4a4a08ff), SkBits2Float(0x4a4a08ff), SkBits2Float(0x4a4a4a34), SkBits2Float(0x4a4a4a4a)); // 9.15721e-24f, 1.14845e-12f, 3.31014e+06f, 3.31014e+06f, 3.31432e+06f, 3.31432e+06f
10268path.moveTo(SkBits2Float(0x000010a1), SkBits2Float(0x19312000)); // 5.96533e-42f, 9.15715e-24f
10269path.cubicTo(SkBits2Float(0x4a4a4a4a), SkBits2Float(0x4a4a4a4a), SkBits2Float(0xa14a4a4a), SkBits2Float(0x08ff2ba1), SkBits2Float(0x08ff4a4a), SkBits2Float(0x4a344a4a)); // 3.31432e+06f, 3.31432e+06f, -6.85386e-19f, 1.53575e-33f, 1.53647e-33f, 2.95387e+06f
10270path.cubicTo(SkBits2Float(0x544a4a4a), SkBits2Float(0x4a4a4a4a), SkBits2Float(0x2ba1a14a), SkBits2Float(0x4e4a08ff), SkBits2Float(0x4a4a4a4a), SkBits2Float(0xa1a181ff)); // 3.47532e+12f, 3.31432e+06f, 1.14845e-12f, 8.47397e+08f, 3.31432e+06f, -1.09442e-18f
10271 SkPath path2(path);
10272 testPathOpFuzz(reporter, path1, path2, kReverseDifference_SkPathOp, filename);
10273}
10274
10275static void fuzz763_6(skiatest::Reporter* reporter, const char* filename) {
10276 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010277 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040010278path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x6a2a291f)); // 0, 5.14279e+25f
10279path.cubicTo(SkBits2Float(0x68295b2d), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x68556829)); // 3.19905e+24f, 0, 0, 0, 0, 4.03114e+24f
10280path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x68555b2a)); // 0, 4.03018e+24f
10281path.cubicTo(SkBits2Float(0x00000000), SkBits2Float(0x67d55b2a), SkBits2Float(0x67296a4b), SkBits2Float(0x67555b2a), SkBits2Float(0x677e1f70), SkBits2Float(0x66d55b2a)); // 0, 2.01509e+24f, 8.00041e+23f, 1.00755e+24f, 1.20006e+24f, 5.03773e+23f
10282path.cubicTo(SkBits2Float(0x678f0684), SkBits2Float(0x6684f008), SkBits2Float(0x6798f8ea), SkBits2Float(0x6625a942), SkBits2Float(0x67961914), SkBits2Float(0x65ce709a)); // 1.35084e+24f, 3.1389e+23f, 1.44478e+24f, 1.95578e+23f, 1.41764e+24f, 1.21861e+23f
10283path.cubicTo(SkBits2Float(0x679174f7), SkBits2Float(0x63199132), SkBits2Float(0x6756c79f), SkBits2Float(0x606478de), SkBits2Float(0x65682bcf), SkBits2Float(0x00000000)); // 1.3738e+24f, 2.83281e+21f, 1.01427e+24f, 6.58526e+19f, 6.85248e+22f, 0
10284path.conicTo(SkBits2Float(0x68295b02), SkBits2Float(0x60f7f28b), SkBits2Float(0x00000000), SkBits2Float(0x6a2a291f), SkBits2Float(0x42784f5a)); // 3.19903e+24f, 1.42932e+20f, 0, 5.14279e+25f, 62.0775f
10285path.close();
10286path.moveTo(SkBits2Float(0x654d6d10), SkBits2Float(0x00000000)); // 6.06311e+22f, 0
10287path.lineTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x00000000)); // 6.14991e+25f, 0
10288path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x6a4b7bc0)); // 0, 6.14991e+25f
10289path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
10290
10291 SkPath path1(path);
10292 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010293 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010294path.moveTo(SkBits2Float(0x3ac23a55), SkBits2Float(0x2a292827)); // 0.00148184f, 1.50241e-13f
10295path.lineTo(SkBits2Float(0x63962be6), SkBits2Float(0x272a812a)); // 5.54035e+21f, 2.36623e-15f
10296
10297 SkPath path2(path);
10298 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
10299}
10300
10301static void fuzz763_7(skiatest::Reporter* reporter, const char* filename) {
10302 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010303 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010304
10305 SkPath path1(path);
10306 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010307 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010308path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29)); // 4.03114e+24f, 1.50617e+13f
10309path.moveTo(SkBits2Float(0x0f2a312a), SkBits2Float(0xc0032108)); // 8.39112e-30f, -2.04889f
10310path.cubicTo(SkBits2Float(0x68392d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a1f2a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0)); // 3.4979e+24f, -2.71613e+29f, -1.64207e-31f, 5.76395e-19f, 4.7323e-37f, 6.14991e+25f
10311path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x2d555b2d)); // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.21279e-11f
10312path.moveTo(SkBits2Float(0x68345b2d), SkBits2Float(0xf0682955)); // 3.40683e+24f, -2.87402e+29f
10313path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0xef2a8c55), SkBits2Float(0x295b2d2a), SkBits2Float(0x08685568), SkBits2Float(0x7bc00321)); // 5.76397e-19f, -5.27821e+28f, 4.86669e-14f, 6.99154e-34f, 1.99397e+36f
10314path.lineTo(SkBits2Float(0x68345b2d), SkBits2Float(0xf0682955)); // 3.40683e+24f, -2.87402e+29f
10315path.close();
10316path.moveTo(SkBits2Float(0x68345b2d), SkBits2Float(0xf0682955)); // 3.40683e+24f, -2.87402e+29f
10317path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55)); // 4.85282e+16f, 5.7784e-19f
10318path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
10319path.lineTo(SkBits2Float(0x3a8a3adf), SkBits2Float(0x8a281a4f)); // 0.00105461f, -8.09385e-33f
10320path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x272a812a), SkBits2Float(0x3a2a5529)); // 2.25206e-21f, 300.343f, 2.36623e-15f, 0.000649768f
10321path.lineTo(SkBits2Float(0x213b1e2a), SkBits2Float(0x27292720)); // 6.3398e-19f, 2.34747e-15f
10322path.conicTo(SkBits2Float(0xba1f203a), SkBits2Float(0xc422c538), SkBits2Float(0x215d5927), SkBits2Float(0x70ec2ac2), SkBits2Float(0x2a51523a)); // -0.000607017f, -651.082f, 7.49957e-19f, 5.84721e+29f, 1.85915e-13f
10323path.quadTo(SkBits2Float(0x633ad912), SkBits2Float(0x29c80927), SkBits2Float(0x272927b0), SkBits2Float(0x683a5b2d)); // 3.44674e+21f, 8.88337e-14f, 2.3475e-15f, 3.52017e+24f
10324path.lineTo(SkBits2Float(0x295b2d68), SkBits2Float(0x29685568)); // 4.86672e-14f, 5.15884e-14f
10325path.conicTo(SkBits2Float(0xaa8c555b), SkBits2Float(0x081f2a21), SkBits2Float(0x5b2d0321), SkBits2Float(0x68556829), SkBits2Float(0x2a552d29)); // -2.49282e-13f, 4.78968e-34f, 4.86986e+16f, 4.03114e+24f, 1.89339e-13f
10326path.cubicTo(SkBits2Float(0x21295b2d), SkBits2Float(0x2a688c5b), SkBits2Float(0x68295b2d), SkBits2Float(0x2d296855), SkBits2Float(0x8c08555b), SkBits2Float(0x2a2a29ca)); // 5.73801e-19f, 2.06544e-13f, 3.19905e+24f, 9.6297e-12f, -1.05027e-31f, 1.51135e-13f
10327path.quadTo(SkBits2Float(0x68295b21), SkBits2Float(0x2d296855), SkBits2Float(0x2a8c555b), SkBits2Float(0x081f2a21)); // 3.19904e+24f, 9.6297e-12f, 2.49282e-13f, 4.78968e-34f
10328path.lineTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
10329path.close();
10330path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
10331path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x5b2d6829), SkBits2Float(0x212a8c55), SkBits2Float(0xed7aba1f), SkBits2Float(0x2a212a8c)); // 6.14991e+25f, 4.88097e+16f, 5.7784e-19f, -4.84977e+27f, 1.43144e-13f
10332path.moveTo(SkBits2Float(0x2d212d08), SkBits2Float(0x5568295b)); // 9.16179e-12f, 1.5954e+13f
10333path.moveTo(SkBits2Float(0x5529685b), SkBits2Float(0x11295b68)); // 1.16416e+13f, 1.33599e-28f
10334path.conicTo(SkBits2Float(0x5b782968), SkBits2Float(0x3a292d55), SkBits2Float(0x2a8c555b), SkBits2Float(0x68295a2d), SkBits2Float(0x2d296855)); // 6.98513e+16f, 0.000645359f, 2.49282e-13f, 3.19897e+24f, 9.6297e-12f
10335path.moveTo(SkBits2Float(0x555b8c55), SkBits2Float(0x21682929)); // 1.50872e+13f, 7.86591e-19f
10336path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
10337path.conicTo(SkBits2Float(0xac2d8ced), SkBits2Float(0x5b682968), SkBits2Float(0x5b292d55), SkBits2Float(0x212a8c55), SkBits2Float(0x081f282a)); // -2.4663e-12f, 6.53477e+16f, 4.76191e+16f, 5.7784e-19f, 4.78945e-34f
10338path.lineTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
10339path.close();
10340path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
10341path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2a8ced7a), SkBits2Float(0x03081f21), SkBits2Float(0x6a3a7bc0), SkBits2Float(0x2147ed7a)); // 6.14991e+25f, 2.50338e-13f, 4.00025e-37f, 5.63611e+25f, 6.77381e-19f
10342path.lineTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
10343path.close();
10344path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
10345path.quadTo(SkBits2Float(0x2d28282a), SkBits2Float(0x5568295b), SkBits2Float(0x3a21df68), SkBits2Float(0x4f9a3a8a)); // 9.55861e-12f, 1.5954e+13f, 0.000617495f, 5.17506e+09f
10346path.lineTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
10347path.close();
10348path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
10349path.cubicTo(SkBits2Float(0x5568c23a), SkBits2Float(0x5b2d2968), SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a), SkBits2Float(0x3a7bc003), SkBits2Float(0x294b2827)); // 1.59951e+13f, 4.87407e+16f, 5.7784e-19f, 4.61198e-19f, 0.00096035f, 4.51099e-14f
10350
10351 SkPath path2(path);
10352 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
10353}
10354
10355static void kfuzz2(skiatest::Reporter* reporter, const char* filename) {
10356 SkPath path1;
10357 SkPath path;
10358path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0xfafadbfa)); // 0, -6.51268e+35f
10359path.close();
10360path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0xfafadbfa)); // 0, -6.51268e+35f
10361path.cubicTo(SkBits2Float(0xe3000000), SkBits2Float(0xf19e92c7), SkBits2Float(0xf17febcb), SkBits2Float(0xff7febcb), SkBits2Float(0x60600100), SkBits2Float(0x0100ff60)); // -2.36118e+21f, -1.57043e+30f, -1.26726e+30f, -3.40177e+38f, 6.45647e+19f, 2.36931e-38f
10362path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0xfafadbfa)); // 0, -6.51268e+35f
10363path.close();
10364path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0xfafadbfa)); // 0, -6.51268e+35f
10365path.lineTo(SkBits2Float(0x60601a1d), SkBits2Float(0x60606060)); // 6.4593e+19f, 6.46721e+19f
10366path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0xfafadbfa)); // 0, -6.51268e+35f
10367path.close();
10368path.moveTo(SkBits2Float(0xe5e2f300), SkBits2Float(0xee244a40)); // -1.33967e+23f, -1.27113e+28f
10369path.moveTo(SkBits2Float(0xba98ffee), SkBits2Float(0xfafafa1a)); // -0.0011673f, -6.51573e+35f
10370path.close();
10371path.moveTo(SkBits2Float(0xba98ffee), SkBits2Float(0xfafafa1a)); // -0.0011673f, -6.51573e+35f
10372path.lineTo(SkBits2Float(0xfafafafa), SkBits2Float(0xe30000fa)); // -6.51582e+35f, -2.36125e+21f
10373path.conicTo(SkBits2Float(0x92e592e5), SkBits2Float(0xfafafafb), SkBits2Float(0xc4fa0000), SkBits2Float(0x6060fafa), SkBits2Float(0x60606060)); // -1.44881e-27f, -6.51582e+35f, -2000, 6.48462e+19f, 6.46721e+19f
10374path.lineTo(SkBits2Float(0xba98ffee), SkBits2Float(0xfafafa1a)); // -0.0011673f, -6.51573e+35f
10375path.close();
10376path.moveTo(SkBits2Float(0xba98ffee), SkBits2Float(0xfafafa1a)); // -0.0011673f, -6.51573e+35f
10377path.cubicTo(SkBits2Float(0xe3000000), SkBits2Float(0xf19e92c7), SkBits2Float(0xf17febcb), SkBits2Float(0xff7febcb), SkBits2Float(0xfafafa00), SkBits2Float(0xfafafafa)); // -2.36118e+21f, -1.57043e+30f, -1.26726e+30f, -3.40177e+38f, -6.51572e+35f, -6.51582e+35f
10378path.lineTo(SkBits2Float(0xba98ffee), SkBits2Float(0xfafafa1a)); // -0.0011673f, -6.51573e+35f
10379path.close();
10380path.moveTo(SkBits2Float(0xba98ffee), SkBits2Float(0xfafafa1a)); // -0.0011673f, -6.51573e+35f
10381path.cubicTo(SkBits2Float(0xe3000000), SkBits2Float(0xe39e92c7), SkBits2Float(0xf17febcb), SkBits2Float(0xff7febcb), SkBits2Float(0xeed0ee9a), SkBits2Float(0x9a98ffca)); // -2.36118e+21f, -5.85032e+21f, -1.26726e+30f, -3.40177e+38f, -3.23307e+28f, -6.3279e-23f
10382path.lineTo(SkBits2Float(0xba98ffee), SkBits2Float(0xfafafa1a)); // -0.0011673f, -6.51573e+35f
10383path.close();
10384SkPath path2(path);
10385 testPathOpFuzz(reporter, path1, path2, kXOR_SkPathOp, filename);
10386}
10387
10388static void fuzz763_10(skiatest::Reporter* reporter, const char* filename) {
10389 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010390 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040010391path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x68556829)); // 0, 4.03114e+24f
10392path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
10393path.quadTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x6a4b7bc4)); // 6.14991e+25f, 0, 0, 6.14991e+25f
10394path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x68556829)); // 0, 4.03114e+24f
10395path.close();
10396
10397 SkPath path1(path);
10398 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010399 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010400path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
10401path.lineTo(SkBits2Float(0x5b2d2968), SkBits2Float(0x2a8c8f55)); // 4.87407e+16f, 2.49685e-13f
10402path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
10403path.close();
10404path.moveTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03)); // -2.51765f, 6.14982e+25f
10405path.conicTo(SkBits2Float(0x682d2fed), SkBits2Float(0x755b6829), SkBits2Float(0x5b292d2b), SkBits2Float(0xc92a8c55), SkBits2Float(0x081f2a21)); // 3.27141e+24f, 2.78131e+32f, 4.76189e+16f, -698565, 4.78968e-34f
10406path.lineTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03)); // -2.51765f, 6.14982e+25f
10407path.close();
10408path.moveTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03)); // -2.51765f, 6.14982e+25f
10409path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2a8ced7a), SkBits2Float(0x21081f21), SkBits2Float(0x3a7bc003), SkBits2Float(0x47ed7a29)); // 6.14991e+25f, 2.50338e-13f, 4.61198e-19f, 0.00096035f, 121588
10410path.lineTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03)); // -2.51765f, 6.14982e+25f
10411path.close();
10412path.moveTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03)); // -2.51765f, 6.14982e+25f
10413path.quadTo(SkBits2Float(0x6829682d), SkBits2Float(0x292d555b), SkBits2Float(0x2a8c555b), SkBits2Float(0x081f2a29)); // 3.20001e+24f, 3.84878e-14f, 2.49282e-13f, 4.78969e-34f
10414path.conicTo(SkBits2Float(0x6a497b19), SkBits2Float(0x218ced7a), SkBits2Float(0x0321081f), SkBits2Float(0x6a3a7bc0), SkBits2Float(0x47ed3a7a)); // 6.08939e+25f, 9.54963e-19f, 4.7323e-37f, 5.63611e+25f, 121461
10415path.lineTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03)); // -2.51765f, 6.14982e+25f
10416path.close();
10417path.moveTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03)); // -2.51765f, 6.14982e+25f
10418path.quadTo(SkBits2Float(0x282a282a), SkBits2Float(0x8a3a21df), SkBits2Float(0x2728282a), SkBits2Float(0x8a3a2129)); // 9.4456e-15f, -8.96194e-33f, 2.33365e-15f, -8.96181e-33f
10419path.quadTo(SkBits2Float(0x8a284f9a), SkBits2Float(0x3a3ac2b3), SkBits2Float(0x2a292827), SkBits2Float(0x962be61d)); // -8.10388e-33f, 0.000712435f, 1.50241e-13f, -1.38859e-25f
10420path.lineTo(SkBits2Float(0x272a802a), SkBits2Float(0x2a8c2d29)); // 2.36617e-15f, 2.49003e-13f
10421path.lineTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03)); // -2.51765f, 6.14982e+25f
10422path.close();
10423path.moveTo(SkBits2Float(0x4f9a3a29), SkBits2Float(0x3ab38a28)); // 5.17501e+09f, 0.00136978f
10424path.quadTo(SkBits2Float(0xc368305b), SkBits2Float(0x5b296855), SkBits2Float(0x2d8c5568), SkBits2Float(0x1f2a2172)); // -232.189f, 4.7684e+16f, 1.59541e-11f, 3.60266e-20f
10425path.lineTo(SkBits2Float(0x29c00321), SkBits2Float(0x5b4b7b13)); // 8.52706e-14f, 5.72747e+16f
10426
10427 SkPath path2(path);
10428 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
10429}
10430
10431static void fuzz763_11(skiatest::Reporter* reporter, const char* filename) {
10432 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010433 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010434
10435 SkPath path1(path);
10436 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010437 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010438path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29)); // 4.03114e+24f, 1.50617e+13f
10439path.moveTo(SkBits2Float(0x2a0f312a), SkBits2Float(0xc0032108)); // 1.2718e-13f, -2.04889f
10440path.cubicTo(SkBits2Float(0x68392d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a1f2a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0)); // 3.4979e+24f, -2.71613e+29f, -1.64207e-31f, 5.76395e-19f, 4.7323e-37f, 6.14991e+25f
10441path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7b21), SkBits2Float(0x2829ed84), SkBits2Float(0x2d555b2d)); // 5.77848e-19f, 4.7323e-37f, 6.14984e+25f, 9.43289e-15f, 1.21279e-11f
10442path.moveTo(SkBits2Float(0x68385b2d), SkBits2Float(0x70682955)); // 3.48239e+24f, 2.87402e+29f
10443path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0xef2a8c55), SkBits2Float(0x295b2d2a), SkBits2Float(0x08685568), SkBits2Float(0x7bc00321)); // 5.76397e-19f, -5.27821e+28f, 4.86669e-14f, 6.99154e-34f, 1.99397e+36f
10444path.lineTo(SkBits2Float(0x68385b2d), SkBits2Float(0x70682955)); // 3.48239e+24f, 2.87402e+29f
10445path.close();
10446path.moveTo(SkBits2Float(0x68385b2d), SkBits2Float(0x70682955)); // 3.48239e+24f, 2.87402e+29f
10447path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55)); // 4.85282e+16f, 5.7784e-19f
10448path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
10449path.lineTo(SkBits2Float(0x3a8a3adf), SkBits2Float(0x8a281a4f)); // 0.00105461f, -8.09385e-33f
10450path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x2a812a3b), SkBits2Float(0x2a552927)); // 2.25206e-21f, 300.343f, 2.29443e-13f, 1.89325e-13f
10451path.quadTo(SkBits2Float(0x3b1e2ab0), SkBits2Float(0x29272021), SkBits2Float(0x203a3b27), SkBits2Float(0x22c5381f)); // 0.00241343f, 3.71093e-14f, 1.57744e-19f, 5.34564e-18f
10452path.moveTo(SkBits2Float(0x5d27ec2a), SkBits2Float(0x705921c2)); // 7.56256e+17f, 2.68796e+29f
10453path.quadTo(SkBits2Float(0x102a5152), SkBits2Float(0x5b2dd912), SkBits2Float(0x68556829), SkBits2Float(0x555b2d29)); // 3.35892e-29f, 4.89338e+16f, 4.03114e+24f, 1.50617e+13f
10454path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032127)); // 3.60396e-20f, -2.0489f
10455path.cubicTo(SkBits2Float(0x68392d55), SkBits2Float(0x2a8c684b), SkBits2Float(0xf05b272d), SkBits2Float(0x2a1f1555), SkBits2Float(0x21082a21), SkBits2Float(0x6a4b7b03)); // 3.4979e+24f, 2.49414e-13f, -2.71298e+29f, 1.41294e-13f, 4.61343e-19f, 6.14982e+25f
10456path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x2d555b2d)); // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.21279e-11f
10457path.moveTo(SkBits2Float(0x2a395b2d), SkBits2Float(0xf0682955)); // 1.64629e-13f, -2.87402e+29f
10458path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0xef2a8c55), SkBits2Float(0x295b2d2a), SkBits2Float(0x68210368), SkBits2Float(0x7bc05508)); // 5.76397e-19f, -5.27821e+28f, 4.86669e-14f, 3.04146e+24f, 1.99729e+36f
10459path.lineTo(SkBits2Float(0x2a395b2d), SkBits2Float(0xf0682955)); // 1.64629e-13f, -2.87402e+29f
10460path.close();
10461path.moveTo(SkBits2Float(0x2a395b2d), SkBits2Float(0xf0682955)); // 1.64629e-13f, -2.87402e+29f
10462path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x2a21211f)); // 4.85282e+16f, 1.43112e-13f
10463path.lineTo(SkBits2Float(0x03552a8c), SkBits2Float(0x6a4f7b28)); // 6.26439e-37f, 6.27073e+25f
10464path.conicTo(SkBits2Float(0x2347ed93), SkBits2Float(0x282a3a21), SkBits2Float(0x3adf2128), SkBits2Float(0x4f1a3a8a), SkBits2Float(0x3ab38a28)); // 1.08381e-17f, 9.4495e-15f, 0.00170234f, 2.58753e+09f, 0.00136978f
10465path.lineTo(SkBits2Float(0x2a395b2d), SkBits2Float(0xf0682955)); // 1.64629e-13f, -2.87402e+29f
10466path.close();
10467path.moveTo(SkBits2Float(0x2a395b2d), SkBits2Float(0xf0682955)); // 1.64629e-13f, -2.87402e+29f
10468path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x262a812a), SkBits2Float(0x3a2a5529)); // 2.25206e-21f, 300.343f, 5.91556e-16f, 0.000649768f
10469path.lineTo(SkBits2Float(0x213b1e2a), SkBits2Float(0x27292720)); // 6.3398e-19f, 2.34747e-15f
10470path.conicTo(SkBits2Float(0x371f203a), SkBits2Float(0xc52a22c4), SkBits2Float(0xc25d27ec), SkBits2Float(0x3a705921), SkBits2Float(0x5210513a)); // 9.48464e-06f, -2722.17f, -55.289f, 0.000916855f, 1.5496e+11f
10471path.cubicTo(SkBits2Float(0x63102ad9), SkBits2Float(0x29c80927), SkBits2Float(0x633a27b0), SkBits2Float(0x2909c827), SkBits2Float(0x272927b1), SkBits2Float(0x3a685b2d)); // 2.65942e+21f, 8.88337e-14f, 3.43395e+21f, 3.05937e-14f, 2.3475e-15f, 0.000886368f
10472path.moveTo(SkBits2Float(0x682d6829), SkBits2Float(0x29685555)); // 3.27556e+24f, 5.15884e-14f
10473path.conicTo(SkBits2Float(0xaa8c555b), SkBits2Float(0x081f2a21), SkBits2Float(0x5b2d0321), SkBits2Float(0x68556829), SkBits2Float(0x5b2d2729)); // -2.49282e-13f, 4.78968e-34f, 4.86986e+16f, 4.03114e+24f, 4.87382e+16f
10474path.quadTo(SkBits2Float(0x2d685568), SkBits2Float(0x5568295b), SkBits2Float(0x2a552d29), SkBits2Float(0x295b2d27)); // 1.32066e-11f, 1.5954e+13f, 1.89339e-13f, 4.86669e-14f
10475path.lineTo(SkBits2Float(0x682d6829), SkBits2Float(0x29685555)); // 3.27556e+24f, 5.15884e-14f
10476path.close();
10477
10478 SkPath path2(path);
10479 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
10480}
10481
10482static void fuzz763_12(skiatest::Reporter* reporter, const char* filename) {
10483 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010484 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040010485path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
10486path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x6a29082a)); // 0, 5.10868e+25f
10487path.conicTo(SkBits2Float(0x6a295ac3), SkBits2Float(0x61bb988e), SkBits2Float(0x6829682d), SkBits2Float(0x5f3ba76a), SkBits2Float(0x42730a87)); // 5.11843e+25f, 4.32567e+20f, 3.20001e+24f, 1.35219e+19f, 60.7603f
10488path.conicTo(SkBits2Float(0x67aedf99), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x3f801112)); // 1.65163e+24f, 0, 0, 0, 1.00052f
10489path.close();
10490path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
10491path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x68556829), SkBits2Float(0x555b2d29)); // 6.14991e+25f, 0, 0, 4.03114e+24f, 1.50617e+13f
10492path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x68555b2a)); // 0, 4.03018e+24f
10493path.cubicTo(SkBits2Float(0x00000000), SkBits2Float(0x67d55b2a), SkBits2Float(0x67296a4b), SkBits2Float(0x67555b2a), SkBits2Float(0x677e1f70), SkBits2Float(0x66d55b2a)); // 0, 2.01509e+24f, 8.00041e+23f, 1.00755e+24f, 1.20006e+24f, 5.03773e+23f
10494path.cubicTo(SkBits2Float(0x678f0684), SkBits2Float(0x6684f008), SkBits2Float(0x6798f8ea), SkBits2Float(0x6625a942), SkBits2Float(0x67961914), SkBits2Float(0x65ce709a)); // 1.35084e+24f, 3.1389e+23f, 1.44478e+24f, 1.95578e+23f, 1.41764e+24f, 1.21861e+23f
10495path.cubicTo(SkBits2Float(0x679158b0), SkBits2Float(0x00000000), SkBits2Float(0x67531e34), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 1.37276e+24f, 0, 9.96976e+23f, 0, 0, 0
10496path.close();
10497
10498 SkPath path1(path);
10499 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010500 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010501path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
10502path.conicTo(SkBits2Float(0x21081f21), SkBits2Float(0x4b7bc003), SkBits2Float(0xed237a6a), SkBits2Float(0x2d682967), SkBits2Float(0x2a8c555b)); // 4.61198e-19f, 1.64987e+07f, -3.16213e+27f, 1.31969e-11f, 2.49282e-13f
10503path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
10504path.close();
10505path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
10506path.lineTo(SkBits2Float(0x3a6821df), SkBits2Float(0x2a8c3a8a)); // 0.000885514f, 2.49096e-13f
10507path.moveTo(SkBits2Float(0x29272a1d), SkBits2Float(0xb03a2a55)); // 3.7118e-14f, -6.77266e-10f
10508path.moveTo(SkBits2Float(0x20213b1e), SkBits2Float(0xc5272927)); // 1.36568e-19f, -2674.57f
10509path.quadTo(SkBits2Float(0xc422373b), SkBits2Float(0xec2a201f), SkBits2Float(0x21c25d27), SkBits2Float(0x523a7059)); // -648.863f, -8.22676e+26f, 1.31706e-18f, 2.00187e+11f
10510path.cubicTo(SkBits2Float(0x12102a10), SkBits2Float(0xe73a28d9), SkBits2Float(0xc8092763), SkBits2Float(0x2927b029), SkBits2Float(0x295b2d27), SkBits2Float(0x2d685568)); // 4.54902e-28f, -8.79114e+23f, -140446, 3.72342e-14f, 4.86669e-14f, 1.32066e-11f
10511path.moveTo(SkBits2Float(0x68556809), SkBits2Float(0x555b2d29)); // 4.03113e+24f, 1.50617e+13f
10512path.moveTo(SkBits2Float(0x1f2a212a), SkBits2Float(0x2d032108)); // 3.60263e-20f, 7.45382e-12f
10513path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x2a552d29)); // 4.03114e+24f, 1.89339e-13f
10514path.cubicTo(SkBits2Float(0x21295b2d), SkBits2Float(0x2a528c5b), SkBits2Float(0x284f5b2d), SkBits2Float(0x218aa621), SkBits2Float(0x3f2d2db3), SkBits2Float(0x68293a2a)); // 5.73801e-19f, 1.87004e-13f, 1.15106e-14f, 9.39522e-19f, 0.676479f, 3.19661e+24f
10515
10516 SkPath path2(path);
10517 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
10518}
10519
10520static void fuzz763_13(skiatest::Reporter* reporter, const char* filename) {
10521 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010522 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040010523
10524 SkPath path1(path);
10525 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010526 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010527path.moveTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a)); // 5.7784e-19f, 4.61198e-19f
10528path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x4793ed7a), SkBits2Float(0x282a3a21), SkBits2Float(0x3adf2128), SkBits2Float(0x4f1a3a8a)); // 6.14991e+25f, 75739, 9.4495e-15f, 0.00170234f, 2.58753e+09f
10529path.lineTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a)); // 5.7784e-19f, 4.61198e-19f
10530path.close();
10531path.moveTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a)); // 5.7784e-19f, 4.61198e-19f
10532path.cubicTo(SkBits2Float(0x3ac2213a), SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x272a8128), SkBits2Float(0x3a2a5529), SkBits2Float(0x3b1e2ab0)); // 0.00148109f, 2.25206e-21f, 300.343f, 2.36623e-15f, 0.000649768f, 0.00241343f
10533path.lineTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a)); // 5.7784e-19f, 4.61198e-19f
10534path.close();
10535path.moveTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a)); // 5.7784e-19f, 4.61198e-19f
10536path.cubicTo(SkBits2Float(0x3b272927), SkBits2Float(0x381f203a), SkBits2Float(0x2ac422c5), SkBits2Float(0xc25d27ec), SkBits2Float(0x3a705921), SkBits2Float(0x2a105152)); // 0.00255067f, 3.79386e-05f, 3.48407e-13f, -55.289f, 0.000916855f, 1.2818e-13f
10537path.quadTo(SkBits2Float(0x633ad912), SkBits2Float(0x29c80927), SkBits2Float(0x272927b0), SkBits2Float(0x68295b2d)); // 3.44674e+21f, 8.88337e-14f, 2.3475e-15f, 3.19905e+24f
10538path.lineTo(SkBits2Float(0x295b2d68), SkBits2Float(0x29685568)); // 4.86672e-14f, 5.15884e-14f
10539path.conicTo(SkBits2Float(0xaa8c555b), SkBits2Float(0x081f2a21), SkBits2Float(0x5b2d0321), SkBits2Float(0x68556829), SkBits2Float(0x2a552d29)); // -2.49282e-13f, 4.78968e-34f, 4.86986e+16f, 4.03114e+24f, 1.89339e-13f
10540path.cubicTo(SkBits2Float(0x21295b2d), SkBits2Float(0x2a688c5b), SkBits2Float(0x6829292d), SkBits2Float(0x2d296855), SkBits2Float(0x8c08555b), SkBits2Float(0x2a2a291f)); // 5.73801e-19f, 2.06544e-13f, 3.19536e+24f, 9.6297e-12f, -1.05027e-31f, 1.51133e-13f
10541path.conicTo(SkBits2Float(0x68295b21), SkBits2Float(0x2d296855), SkBits2Float(0x2a8c555b), SkBits2Float(0x081f2a21), SkBits2Float(0x7bc00321)); // 3.19904e+24f, 9.6297e-12f, 2.49282e-13f, 4.78968e-34f, 1.99397e+36f
10542path.lineTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a)); // 5.7784e-19f, 4.61198e-19f
10543path.close();
10544path.moveTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a)); // 5.7784e-19f, 4.61198e-19f
10545path.lineTo(SkBits2Float(0x5b2d6829), SkBits2Float(0x212a8c55)); // 4.88097e+16f, 5.7784e-19f
10546path.conicTo(SkBits2Float(0x8ced7aba), SkBits2Float(0x3f2a212a), SkBits2Float(0x2d212d08), SkBits2Float(0x5568295b), SkBits2Float(0x29685b2d)); // -3.65895e-31f, 0.664569f, 9.16179e-12f, 1.5954e+13f, 5.15934e-14f
10547path.lineTo(SkBits2Float(0x68295b68), SkBits2Float(0x2d296855)); // 3.19906e+24f, 9.6297e-12f
10548path.moveTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a)); // 5.7784e-19f, 4.61198e-19f
10549path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2a8ced7a), SkBits2Float(0x21081f21), SkBits2Float(0x6aba7b03), SkBits2Float(0x2147ed7a)); // 6.14991e+25f, 2.50338e-13f, 4.61198e-19f, 1.12721e+26f, 6.77381e-19f
10550path.quadTo(SkBits2Float(0x6028282a), SkBits2Float(0x68292ddf), SkBits2Float(0x5b2d555b), SkBits2Float(0x68556829)); // 4.84679e+19f, 3.1957e+24f, 4.8789e+16f, 4.03114e+24f
10551
10552 SkPath path2(path);
10553 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
10554}
10555
10556static void fuzz763_14(skiatest::Reporter* reporter, const char* filename) {
10557 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010558 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010559
10560 SkPath path1(path);
10561 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010562 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010563path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0xf45b2d29)); // 4.03114e+24f, -6.94598e+31f
10564path.moveTo(SkBits2Float(0x1f2a302a), SkBits2Float(0xc8032108)); // 3.60387e-20f, -134276
10565path.cubicTo(SkBits2Float(0x68392d55), SkBits2Float(0xf0db684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x302a5b25), SkBits2Float(0xf0685568)); // 3.4979e+24f, -5.43226e+29f, -1.64207e-31f, 5.76527e-19f, 6.19752e-10f, -2.87615e+29f
10566
10567 SkPath path2(path);
10568 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
10569}
10570
10571static void fuzz763_15(skiatest::Reporter* reporter, const char* filename) {
10572 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010573 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040010574
10575 SkPath path1(path);
10576 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010577 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010578path.moveTo(SkBits2Float(0x5b292d55), SkBits2Float(0x212a8c55)); // 4.76191e+16f, 5.7784e-19f
10579path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a6b7bc4)); // 4.7323e-37f, 7.11705e+25f
10580path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x2c6829c0), SkBits2Float(0x2a8c555b), SkBits2Float(0x081f2a29)); // 5.77848e-19f, 4.7323e-37f, 3.29924e-12f, 2.49282e-13f, 4.78969e-34f
10581path.lineTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a6b7bc4)); // 4.7323e-37f, 7.11705e+25f
10582path.close();
10583path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a6b7bc4)); // 4.7323e-37f, 7.11705e+25f
10584path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x4793ed7a), SkBits2Float(0x282a3a21), SkBits2Float(0xdf218a28), SkBits2Float(0x4f1a3a3a)); // 6.14991e+25f, 75739, 9.4495e-15f, -1.16402e+19f, 2.58751e+09f
10585path.quadTo(SkBits2Float(0x3ab38a28), SkBits2Float(0x283ac221), SkBits2Float(0xe6432a29), SkBits2Float(0x2a96812b)); // 0.00136978f, 1.03672e-14f, -2.3041e+23f, 2.6735e-13f
10586path.lineTo(SkBits2Float(0x5529272a), SkBits2Float(0x1eb03a2a)); // 1.16241e+13f, 1.86588e-20f
10587path.conicTo(SkBits2Float(0x2a272021), SkBits2Float(0x3ac52729), SkBits2Float(0xc422313b), SkBits2Float(0xec2a201f), SkBits2Float(0x21c25d27)); // 1.48437e-13f, 0.00150416f, -648.769f, -8.22676e+26f, 1.31706e-18f
10588path.lineTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a6b7bc4)); // 4.7323e-37f, 7.11705e+25f
10589path.close();
10590path.moveTo(SkBits2Float(0x1051523a), SkBits2Float(0xd912102a)); // 4.12813e-29f, -2.56957e+15f
10591path.close();
10592path.moveTo(SkBits2Float(0x1051523a), SkBits2Float(0xd912102a)); // 4.12813e-29f, -2.56957e+15f
10593path.quadTo(SkBits2Float(0xc82763e7), SkBits2Float(0x2927b029), SkBits2Float(0x295b2d27), SkBits2Float(0x2d685568)); // -171408, 3.72342e-14f, 4.86669e-14f, 1.32066e-11f
10594path.moveTo(SkBits2Float(0x68556809), SkBits2Float(0x8c555b2d)); // 4.03113e+24f, -1.64364e-31f
10595path.moveTo(SkBits2Float(0x081f2a21), SkBits2Float(0x252d0321)); // 4.78968e-34f, 1.50064e-16f
10596path.moveTo(SkBits2Float(0x5568392a), SkBits2Float(0x5b2df068)); // 1.59583e+13f, 4.89595e+16f
10597path.quadTo(SkBits2Float(0x2a1f2a8c), SkBits2Float(0x21482a21), SkBits2Float(0x4b7bc003), SkBits2Float(0x8ced3a6a)); // 1.41368e-13f, 6.78184e-19f, 1.64987e+07f, -3.65508e-31f
10598path.moveTo(SkBits2Float(0x21481f21), SkBits2Float(0x4b7bc003)); // 6.78038e-19f, 1.64987e+07f
10599path.conicTo(SkBits2Float(0x6829ed27), SkBits2Float(0x2d155b2d), SkBits2Float(0x5568295b), SkBits2Float(0x5b2d2968), SkBits2Float(0x2a8c8f55)); // 3.20982e+24f, 8.48991e-12f, 1.5954e+13f, 4.87407e+16f, 2.49685e-13f
10600path.lineTo(SkBits2Float(0x21481f21), SkBits2Float(0x4b7bc003)); // 6.78038e-19f, 1.64987e+07f
10601path.close();
10602path.moveTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03)); // -2.51765f, 6.14982e+25f
10603path.conicTo(SkBits2Float(0x682d2fed), SkBits2Float(0x755b6829), SkBits2Float(0x5b292d2b), SkBits2Float(0xc92a8c55), SkBits2Float(0x081f2a21)); // 3.27141e+24f, 2.78131e+32f, 4.76189e+16f, -698565, 4.78968e-34f
10604path.lineTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03)); // -2.51765f, 6.14982e+25f
10605path.close();
10606path.moveTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03)); // -2.51765f, 6.14982e+25f
10607path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x212aed7a), SkBits2Float(0x0321081f), SkBits2Float(0x293a7bc0), SkBits2Float(0x2147ed7a)); // 6.14991e+25f, 5.79125e-19f, 4.7323e-37f, 4.14076e-14f, 6.77381e-19f
10608path.quadTo(SkBits2Float(0x6829682d), SkBits2Float(0x292d555b), SkBits2Float(0x292a8c55), SkBits2Float(0x21081f2a)); // 3.20001e+24f, 3.84878e-14f, 3.78693e-14f, 4.61198e-19f
10609path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x218ced7a), SkBits2Float(0x0321081f), SkBits2Float(0x6a3a7bc0), SkBits2Float(0x47ed3a7a)); // 6.14991e+25f, 9.54963e-19f, 4.7323e-37f, 5.63611e+25f, 121461
10610path.lineTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03)); // -2.51765f, 6.14982e+25f
10611path.close();
10612path.moveTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03)); // -2.51765f, 6.14982e+25f
10613path.quadTo(SkBits2Float(0x282a282a), SkBits2Float(0x8a3a21df), SkBits2Float(0x2728282a), SkBits2Float(0x8a3a21df)); // 9.4456e-15f, -8.96194e-33f, 2.33365e-15f, -8.96194e-33f
10614path.quadTo(SkBits2Float(0x8a284f9a), SkBits2Float(0x3a3ac2b3), SkBits2Float(0x2a292827), SkBits2Float(0x962be61d)); // -8.10388e-33f, 0.000712435f, 1.50241e-13f, -1.38859e-25f
10615path.lineTo(SkBits2Float(0x272a802a), SkBits2Float(0x2a8c2d29)); // 2.36617e-15f, 2.49003e-13f
10616path.lineTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03)); // -2.51765f, 6.14982e+25f
10617path.close();
10618path.moveTo(SkBits2Float(0x4f9a3a29), SkBits2Float(0x3ab38a28)); // 5.17501e+09f, 0.00136978f
10619path.quadTo(SkBits2Float(0xc368305b), SkBits2Float(0x5b296855), SkBits2Float(0x2d8c5568), SkBits2Float(0x1f2a2172)); // -232.189f, 4.7684e+16f, 1.59541e-11f, 3.60266e-20f
10620path.lineTo(SkBits2Float(0x29c00321), SkBits2Float(0x5b4b7b13)); // 8.52706e-14f, 5.72747e+16f
10621
10622 SkPath path2(path);
10623 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
10624}
10625
10626static void fuzz763_16(skiatest::Reporter* reporter, const char* filename) {
10627 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010628 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010629
10630 SkPath path1(path);
10631 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010632 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010633path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29)); // 4.03114e+24f, 1.50617e+13f
10634path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108)); // 3.60396e-20f, -2.04889f
10635path.cubicTo(SkBits2Float(0x68372d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c552775), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0)); // 3.46012e+24f, -2.71613e+29f, -1.64208e-31f, 5.76527e-19f, 4.7323e-37f, 6.14991e+25f
10636path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x69555b2d)); // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.61207e+25f
10637path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0682955)); // 3.35016e+24f, -2.87402e+29f
10638path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x8cef552a), SkBits2Float(0x295b2d2a), SkBits2Float(0x68210368), SkBits2Float(0x7bc05508)); // 5.76397e-19f, -3.6875e-31f, 4.86669e-14f, 3.04146e+24f, 1.99729e+36f
10639path.lineTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0682955)); // 3.35016e+24f, -2.87402e+29f
10640path.close();
10641path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0682955)); // 3.35016e+24f, -2.87402e+29f
10642path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55)); // 4.85282e+16f, 5.7784e-19f
10643path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
10644path.conicTo(SkBits2Float(0x68385b2d), SkBits2Float(0x555bf055), SkBits2Float(0x2a1f2a8c), SkBits2Float(0x03212a21), SkBits2Float(0x5a4b7bc0)); // 3.48239e+24f, 1.51141e+13f, 1.41368e-13f, 4.7362e-37f, 1.43189e+16f
10645path.conicTo(SkBits2Float(0xc08c2aed), SkBits2Float(0x211f2108), SkBits2Float(0x6a4b7b03), SkBits2Float(0x6829ed27), SkBits2Float(0x2d555b2d)); // -4.38024f, 5.3915e-19f, 6.14982e+25f, 3.20982e+24f, 1.21279e-11f
10646path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527)); // 3.35016e+24f, -2.87614e+29f
10647path.conicTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x6e2a1f72), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x4793ed7a)); // 2.49282e-13f, 1.31626e+28f, 4.7323e-37f, 6.14991e+25f, 75739
10648path.lineTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527)); // 3.35016e+24f, -2.87614e+29f
10649path.close();
10650path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527)); // 3.35016e+24f, -2.87614e+29f
10651path.quadTo(SkBits2Float(0x2128282a), SkBits2Float(0x3a8a3adf), SkBits2Float(0x8a284f1a), SkBits2Float(0x2c213ab3)); // 5.69738e-19f, 0.00105461f, -8.10378e-33f, 2.29121e-12f
10652path.lineTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527)); // 3.35016e+24f, -2.87614e+29f
10653path.close();
10654path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527)); // 3.35016e+24f, -2.87614e+29f
10655path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x3a2a812a), SkBits2Float(0x2a8ced29)); // 2.25206e-21f, 300.343f, 0.000650423f, 2.50336e-13f
10656path.lineTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527)); // 3.35016e+24f, -2.87614e+29f
10657path.close();
10658path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527)); // 3.35016e+24f, -2.87614e+29f
10659path.conicTo(SkBits2Float(0x03210831), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x681aed27), SkBits2Float(0x55555b2d), SkBits2Float(0x1e2a3a2a)); // 4.73231e-37f, 6.14991e+25f, 2.92648e+24f, 1.46617e+13f, 9.01175e-21f
10660path.conicTo(SkBits2Float(0x27202140), SkBits2Float(0x3a3b2769), SkBits2Float(0xc4371f20), SkBits2Float(0xecc52a22), SkBits2Float(0x21512727)); // 2.22225e-15f, 0.000713936f, -732.486f, -1.90686e+27f, 7.08638e-19f
10661path.lineTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527)); // 3.35016e+24f, -2.87614e+29f
10662path.close();
10663path.moveTo(SkBits2Float(0x6829523a), SkBits2Float(0x2d555b2d)); // 3.19839e+24f, 1.21279e-11f
10664path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29)); // 4.03114e+24f, 1.50617e+13f
10665path.moveTo(SkBits2Float(0x1f2a322a), SkBits2Float(0xc0032108)); // 3.60404e-20f, -2.04889f
10666path.cubicTo(SkBits2Float(0x68572d55), SkBits2Float(0xf05bd24b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0xed4b7bc0)); // 4.06458e+24f, -2.72126e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, -3.93594e+27f
10667path.conicTo(SkBits2Float(0x212a8c6a), SkBits2Float(0x0329081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x2d555b2d)); // 5.77841e-19f, 4.9674e-37f, 6.14991e+25f, 9.43289e-15f, 1.21279e-11f
10668path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0682955)); // 3.33127e+24f, -2.87402e+29f
10669path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x8cef552a), SkBits2Float(0x295b2d2a), SkBits2Float(0x68210368), SkBits2Float(0x7bc05508)); // 5.76397e-19f, -3.6875e-31f, 4.86669e-14f, 3.04146e+24f, 1.99729e+36f
10670path.lineTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0682955)); // 3.33127e+24f, -2.87402e+29f
10671path.close();
10672path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0682955)); // 3.33127e+24f, -2.87402e+29f
10673path.lineTo(SkBits2Float(0x555b6829), SkBits2Float(0x6c212a8c)); // 1.50775e+13f, 7.79352e+26f
10674path.conicTo(SkBits2Float(0x084b0321), SkBits2Float(0x6ac07b2a), SkBits2Float(0x395b2d7a), SkBits2Float(0x5bf05568), SkBits2Float(0x212a3a8c)); // 6.10918e-34f, 1.16348e+26f, 0.000209024f, 1.35296e+17f, 5.76757e-19f
10675path.lineTo(SkBits2Float(0x8c558c55), SkBits2Float(0x212a1f2a)); // -1.64512e-31f, 5.76395e-19f
10676
10677 SkPath path2(path);
10678 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
10679}
10680
10681static void fuzz763_17(skiatest::Reporter* reporter, const char* filename) {
10682 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010683 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010684
10685 SkPath path1(path);
10686 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010687 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010688path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29)); // 4.03114e+24f, 1.50617e+13f
10689path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108)); // 3.60396e-20f, -2.04889f
10690path.cubicTo(SkBits2Float(0x68392d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0)); // 3.4979e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 6.14991e+25f
10691path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x69555b2d)); // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.61207e+25f
10692path.moveTo(SkBits2Float(0x6835282d), SkBits2Float(0xf0682955)); // 3.42196e+24f, -2.87402e+29f
10693path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x2aef552a), SkBits2Float(0x68295b2d), SkBits2Float(0x08682103), SkBits2Float(0x4b7bc055)); // 5.76397e-19f, 4.2514e-13f, 3.19905e+24f, 6.98538e-34f, 1.64988e+07f
10694path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55)); // 4.85282e+16f, 5.7784e-19f
10695path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
10696path.conicTo(SkBits2Float(0x68395b2d), SkBits2Float(0x555bf055), SkBits2Float(0x2a1f2a8c), SkBits2Float(0x03212a21), SkBits2Float(0x5a4b7bc0)); // 3.50128e+24f, 1.51141e+13f, 1.41368e-13f, 4.7362e-37f, 1.43189e+16f
10697path.conicTo(SkBits2Float(0xc08c2aed), SkBits2Float(0x211f2108), SkBits2Float(0x6a4b7b03), SkBits2Float(0x6829ed27), SkBits2Float(0x2d555b2d)); // -4.38024f, 5.3915e-19f, 6.14982e+25f, 3.20982e+24f, 1.21279e-11f
10698path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527)); // 3.33127e+24f, -2.87614e+29f
10699path.conicTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x212a1f72), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x254793ed)); // 2.49282e-13f, 5.76399e-19f, 4.7323e-37f, 6.14991e+25f, 1.73106e-16f
10700path.quadTo(SkBits2Float(0x2128282a), SkBits2Float(0x3a8a3adf), SkBits2Float(0x8a284f1a), SkBits2Float(0xc2213ab3)); // 5.69738e-19f, 0.00105461f, -8.10378e-33f, -40.3073f
10701path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x3a2a812a), SkBits2Float(0x2a8ced29)); // 2.25206e-21f, 300.343f, 0.000650423f, 2.50336e-13f
10702path.lineTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527)); // 3.33127e+24f, -2.87614e+29f
10703path.close();
10704path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527)); // 3.33127e+24f, -2.87614e+29f
10705path.conicTo(SkBits2Float(0x03210831), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x6829ed27), SkBits2Float(0x55555b2d), SkBits2Float(0x1e2a3a2a)); // 4.73231e-37f, 6.14991e+25f, 3.20982e+24f, 1.46617e+13f, 9.01175e-21f
10706path.conicTo(SkBits2Float(0x27202140), SkBits2Float(0x3a3b2729), SkBits2Float(0xc4371f20), SkBits2Float(0x16c52a22), SkBits2Float(0x515d27ec)); // 2.22225e-15f, 0.000713932f, -732.486f, 3.18537e-25f, 5.93661e+10f
10707path.lineTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527)); // 3.33127e+24f, -2.87614e+29f
10708path.close();
10709path.moveTo(SkBits2Float(0x6829523a), SkBits2Float(0x2d555b2d)); // 3.19839e+24f, 1.21279e-11f
10710path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29)); // 4.03114e+24f, 1.50617e+13f
10711path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108)); // 3.60396e-20f, -2.04889f
10712path.cubicTo(SkBits2Float(0x68572d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0)); // 4.06458e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 6.14991e+25f
10713path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x2d555b2d)); // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.21279e-11f
10714path.moveTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955)); // 3.50128e+24f, -2.87402e+29f
10715path.lineTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x2a212a1f)); // 2.49282e-13f, 1.43143e-13f
10716path.lineTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955)); // 3.50128e+24f, -2.87402e+29f
10717path.close();
10718path.moveTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955)); // 3.50128e+24f, -2.87402e+29f
10719path.lineTo(SkBits2Float(0x8c2aed7a), SkBits2Float(0x2a1f08c0)); // -1.31678e-31f, 1.41251e-13f
10720path.lineTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955)); // 3.50128e+24f, -2.87402e+29f
10721path.close();
10722path.moveTo(SkBits2Float(0x2a8cef55), SkBits2Float(0x68295b2d)); // 2.50351e-13f, 3.19905e+24f
10723path.conicTo(SkBits2Float(0x55086821), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x5b2c6829), SkBits2Float(0x21218c55), SkBits2Float(0x2a6c1f03)); // 9.3738e+12f, 6.14991e+25f, 4.85282e+16f, 5.47346e-19f, 2.09718e-13f
10724path.lineTo(SkBits2Float(0x2a8cef55), SkBits2Float(0x68295b2d)); // 2.50351e-13f, 3.19905e+24f
10725path.close();
10726path.moveTo(SkBits2Float(0x2a8cef55), SkBits2Float(0x68295b2d)); // 2.50351e-13f, 3.19905e+24f
10727path.lineTo(SkBits2Float(0x6ac07b2a), SkBits2Float(0x395b2d7a)); // 1.16348e+26f, 0.000209024f
10728
10729 SkPath path2(path);
10730 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
10731}
10732
10733static void fuzz763_18(skiatest::Reporter* reporter, const char* filename) {
10734 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010735 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010736
10737 SkPath path1(path);
10738 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010739 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010740path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29)); // 4.03114e+24f, 1.50617e+13f
10741path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108)); // 3.60396e-20f, -2.04889f
10742path.cubicTo(SkBits2Float(0x68392d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0)); // 3.4979e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 6.14991e+25f
10743path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x69555b2d)); // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.61207e+25f
10744path.moveTo(SkBits2Float(0x6835282d), SkBits2Float(0xf0682955)); // 3.42196e+24f, -2.87402e+29f
10745path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x2aef552a), SkBits2Float(0x68295b2d), SkBits2Float(0x08682103), SkBits2Float(0x4b7bc055)); // 5.76397e-19f, 4.2514e-13f, 3.19905e+24f, 6.98538e-34f, 1.64988e+07f
10746path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55)); // 4.85282e+16f, 5.7784e-19f
10747path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
10748path.conicTo(SkBits2Float(0x68395b2d), SkBits2Float(0x555bf055), SkBits2Float(0x2a1f2a8c), SkBits2Float(0x03212a21), SkBits2Float(0x5a4b7bc0)); // 3.50128e+24f, 1.51141e+13f, 1.41368e-13f, 4.7362e-37f, 1.43189e+16f
10749path.conicTo(SkBits2Float(0xc08c2aed), SkBits2Float(0x211f2108), SkBits2Float(0x6a4b7b03), SkBits2Float(0x6829ed27), SkBits2Float(0x2d555b2d)); // -4.38024f, 5.3915e-19f, 6.14982e+25f, 3.20982e+24f, 1.21279e-11f
10750path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527)); // 3.33127e+24f, -2.87614e+29f
10751path.conicTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x212a1f72), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x254793ed)); // 2.49282e-13f, 5.76399e-19f, 4.7323e-37f, 6.14991e+25f, 1.73106e-16f
10752path.quadTo(SkBits2Float(0x2128282a), SkBits2Float(0x3a8a3adf), SkBits2Float(0x8a284f1a), SkBits2Float(0xc2213ab3)); // 5.69738e-19f, 0.00105461f, -8.10378e-33f, -40.3073f
10753path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x3a2a812a), SkBits2Float(0x2a8ced29)); // 2.25206e-21f, 300.343f, 0.000650423f, 2.50336e-13f
10754path.lineTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527)); // 3.33127e+24f, -2.87614e+29f
10755path.close();
10756path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527)); // 3.33127e+24f, -2.87614e+29f
10757path.conicTo(SkBits2Float(0x03210831), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x6829ed27), SkBits2Float(0x55555b2d), SkBits2Float(0x1e2a3a2a)); // 4.73231e-37f, 6.14991e+25f, 3.20982e+24f, 1.46617e+13f, 9.01175e-21f
10758path.conicTo(SkBits2Float(0x27202140), SkBits2Float(0x3a3b2729), SkBits2Float(0xc4371f20), SkBits2Float(0x16c52a22), SkBits2Float(0x515d27ec)); // 2.22225e-15f, 0.000713932f, -732.486f, 3.18537e-25f, 5.93661e+10f
10759path.lineTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527)); // 3.33127e+24f, -2.87614e+29f
10760path.close();
10761path.moveTo(SkBits2Float(0x6829523a), SkBits2Float(0x2d555b2d)); // 3.19839e+24f, 1.21279e-11f
10762path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29)); // 4.03114e+24f, 1.50617e+13f
10763path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108)); // 3.60396e-20f, -2.04889f
10764path.cubicTo(SkBits2Float(0x68572d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0)); // 4.06458e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 6.14991e+25f
10765path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x2d555b2d)); // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.21279e-11f
10766path.moveTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955)); // 3.50128e+24f, -2.87402e+29f
10767path.lineTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x2a212a1f)); // 2.49282e-13f, 1.43143e-13f
10768path.lineTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955)); // 3.50128e+24f, -2.87402e+29f
10769path.close();
10770path.moveTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955)); // 3.50128e+24f, -2.87402e+29f
10771path.lineTo(SkBits2Float(0x8c2aed7a), SkBits2Float(0x2a1f08c0)); // -1.31678e-31f, 1.41251e-13f
10772
10773path.moveTo(SkBits2Float(0x6829523a), SkBits2Float(0x2d555b2d)); // 3.19839e+24f, 1.21279e-11f
10774path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29)); // 4.03114e+24f, 1.50617e+13f
10775path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108)); // 3.60396e-20f, -2.04889f
10776path.cubicTo(SkBits2Float(0x68572d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0)); // 4.06458e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 6.14991e+25f
10777path.conicTo(SkBits2Float(0x2a8c54ed), SkBits2Float(0x21081f21), SkBits2Float(0x4b7bc003), SkBits2Float(0x29ed846a), SkBits2Float(0x555b2d28)); // 2.49279e-13f, 4.61198e-19f, 1.64987e+07f, 1.05479e-13f, 1.50617e+13f
10778path.conicTo(SkBits2Float(0x68392d5b), SkBits2Float(0xf0682955), SkBits2Float(0x2a1f5b2d), SkBits2Float(0xef552a21), SkBits2Float(0x5b2d2a8c)); // 3.4979e+24f, -2.87402e+29f, 1.41537e-13f, -6.59712e+28f, 4.8742e+16f
10779
10780 SkPath path2(path);
10781 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
10782}
10783
10784static void fuzz763_19(skiatest::Reporter* reporter, const char* filename) {
10785 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010786 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040010787
10788 SkPath path1(path);
10789 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010790 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010791path.moveTo(SkBits2Float(0x21081f21), SkBits2Float(0x4b7bc003)); // 4.61198e-19f, 1.64987e+07f
10792path.lineTo(SkBits2Float(0x2829ed84), SkBits2Float(0x69555b2d)); // 9.43289e-15f, 1.61207e+25f
10793path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0682955)); // 3.33127e+24f, -2.87402e+29f
10794path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x2aef552a), SkBits2Float(0x68295b2d), SkBits2Float(0x08682103), SkBits2Float(0x4b7bc055)); // 5.76397e-19f, 4.2514e-13f, 3.19905e+24f, 6.98538e-34f, 1.64988e+07f
10795path.moveTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55)); // 4.85282e+16f, 5.7784e-19f
10796path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
10797path.conicTo(SkBits2Float(0x68395b2d), SkBits2Float(0x8c5bf055), SkBits2Float(0x2a1f2a55), SkBits2Float(0x03212a21), SkBits2Float(0x5a4b7bc0)); // 3.50128e+24f, -1.69435e-31f, 1.41367e-13f, 4.7362e-37f, 1.43189e+16f
10798path.conicTo(SkBits2Float(0xc08c2aed), SkBits2Float(0x211f2108), SkBits2Float(0x6a4b7b03), SkBits2Float(0x6829ed27), SkBits2Float(0x2d555b2d)); // -4.38024f, 5.3915e-19f, 6.14982e+25f, 3.20982e+24f, 1.21279e-11f
10799path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527)); // 3.35016e+24f, -2.87614e+29f
10800path.conicTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x212a1f72), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2547937a)); // 2.49282e-13f, 5.76399e-19f, 4.7323e-37f, 6.14991e+25f, 1.73105e-16f
10801path.quadTo(SkBits2Float(0x2128282a), SkBits2Float(0x3a8a3adf), SkBits2Float(0x8a284f1a), SkBits2Float(0xc2213ab3)); // 5.69738e-19f, 0.00105461f, -8.10378e-33f, -40.3073f
10802path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x3a2a812a), SkBits2Float(0x2a8ced29)); // 2.25206e-21f, 300.343f, 0.000650423f, 2.50336e-13f
10803path.lineTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527)); // 3.35016e+24f, -2.87614e+29f
10804path.close();
10805path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527)); // 3.35016e+24f, -2.87614e+29f
10806path.conicTo(SkBits2Float(0x03210831), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x6829ed27), SkBits2Float(0x55555b2d), SkBits2Float(0x1e2a3a2a)); // 4.73231e-37f, 6.14991e+25f, 3.20982e+24f, 1.46617e+13f, 9.01175e-21f
10807path.conicTo(SkBits2Float(0x27202140), SkBits2Float(0x3a3b2729), SkBits2Float(0xc4371f20), SkBits2Float(0xecc52a22), SkBits2Float(0x21515d27)); // 2.22225e-15f, 0.000713932f, -732.486f, -1.90686e+27f, 7.09352e-19f
10808path.lineTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527)); // 3.35016e+24f, -2.87614e+29f
10809path.close();
10810path.moveTo(SkBits2Float(0x6829523a), SkBits2Float(0x2d555b2d)); // 3.19839e+24f, 1.21279e-11f
10811path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29)); // 4.03114e+24f, 1.50617e+13f
10812path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108)); // 3.60396e-20f, -2.04889f
10813path.cubicTo(SkBits2Float(0x68572d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0)); // 4.06458e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 6.14991e+25f
10814path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x2d555b2d)); // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.21279e-11f
10815path.moveTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955)); // 3.50128e+24f, -2.87402e+29f
10816path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x8cef552a), SkBits2Float(0x295b2d2a), SkBits2Float(0x68210368), SkBits2Float(0x7bc05508)); // 5.76397e-19f, -3.6875e-31f, 4.86669e-14f, 3.04146e+24f, 1.99729e+36f
10817path.lineTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955)); // 3.50128e+24f, -2.87402e+29f
10818path.close();
10819path.moveTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955)); // 3.50128e+24f, -2.87402e+29f
10820path.lineTo(SkBits2Float(0x555b2c29), SkBits2Float(0x6c212a8c)); // 1.50614e+13f, 7.79352e+26f
10821path.conicTo(SkBits2Float(0x084b0321), SkBits2Float(0x6ac07b2a), SkBits2Float(0x395b2d7a), SkBits2Float(0xf05b5568), SkBits2Float(0x212a3a8c)); // 6.10918e-34f, 1.16348e+26f, 0.000209024f, -2.71522e+29f, 5.76757e-19f
10822path.conicTo(SkBits2Float(0x290321d9), SkBits2Float(0x555b2d68), SkBits2Float(0x2a8c558c), SkBits2Float(0x2abe2a1f), SkBits2Float(0x7bc00321)); // 2.91172e-14f, 1.50618e+13f, 2.49284e-13f, 3.378e-13f, 1.99397e+36f
10823path.lineTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955)); // 3.50128e+24f, -2.87402e+29f
10824path.close();
10825path.moveTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955)); // 3.50128e+24f, -2.87402e+29f
10826path.lineTo(SkBits2Float(0x8c2aed7a), SkBits2Float(0x1f2128c0)); // -1.31678e-31f, 3.41268e-20f
10827path.lineTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955)); // 3.50128e+24f, -2.87402e+29f
10828path.close();
10829
10830 SkPath path2(path);
10831 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
10832}
10833
10834static void fuzz763_20(skiatest::Reporter* reporter, const char* filename) {
10835 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010836 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010837
10838 SkPath path1(path);
10839 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010840 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010841path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29)); // 4.03114e+24f, 1.50617e+13f
10842path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108)); // 3.60396e-20f, -2.04889f
10843path.cubicTo(SkBits2Float(0x68392d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0)); // 3.4979e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 6.14991e+25f
10844path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x69555b2d)); // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.61207e+25f
10845path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0682955)); // 3.33127e+24f, -2.87402e+29f
10846path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x2a8c552a), SkBits2Float(0x68295b2d), SkBits2Float(0x08682103), SkBits2Float(0x4b7bc055)); // 5.76397e-19f, 2.49281e-13f, 3.19905e+24f, 6.98538e-34f, 1.64988e+07f
10847path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55)); // 4.85282e+16f, 5.7784e-19f
10848path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
10849path.conicTo(SkBits2Float(0x68395b2d), SkBits2Float(0x555bf055), SkBits2Float(0x2a1f2a8c), SkBits2Float(0x03212a21), SkBits2Float(0x5a4b7bc0)); // 3.50128e+24f, 1.51141e+13f, 1.41368e-13f, 4.7362e-37f, 1.43189e+16f
10850path.conicTo(SkBits2Float(0xc08c2aed), SkBits2Float(0x211f2108), SkBits2Float(0x6a4b7b03), SkBits2Float(0x6829ed27), SkBits2Float(0x2d555b2d)); // -4.38024f, 5.3915e-19f, 6.14982e+25f, 3.20982e+24f, 1.21279e-11f
10851path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527)); // 3.33127e+24f, -2.87614e+29f
10852path.conicTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x6e2a1f72), SkBits2Float(0x0321182a), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x4793ed7a)); // 2.49282e-13f, 1.31626e+28f, 4.73414e-37f, 6.14991e+25f, 75739
10853path.lineTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527)); // 3.33127e+24f, -2.87614e+29f
10854path.close();
10855path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527)); // 3.33127e+24f, -2.87614e+29f
10856path.quadTo(SkBits2Float(0x2128282a), SkBits2Float(0x3a8a3adf), SkBits2Float(0x8a284f1a), SkBits2Float(0x2c213ab3)); // 5.69738e-19f, 0.00105461f, -8.10378e-33f, 2.29121e-12f
10857path.lineTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527)); // 3.33127e+24f, -2.87614e+29f
10858path.close();
10859path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527)); // 3.33127e+24f, -2.87614e+29f
10860path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x3a2a812a), SkBits2Float(0x2a8ced29)); // 2.25206e-21f, 300.343f, 0.000650423f, 2.50336e-13f
10861path.lineTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527)); // 3.33127e+24f, -2.87614e+29f
10862path.close();
10863path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527)); // 3.33127e+24f, -2.87614e+29f
10864path.conicTo(SkBits2Float(0x03210831), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x6829ed27), SkBits2Float(0x55555b2d), SkBits2Float(0x1e2a3a2a)); // 4.73231e-37f, 6.14991e+25f, 3.20982e+24f, 1.46617e+13f, 9.01175e-21f
10865path.conicTo(SkBits2Float(0x27202140), SkBits2Float(0x3a3b2769), SkBits2Float(0xc4371f20), SkBits2Float(0xecc52a22), SkBits2Float(0x51282727)); // 2.22225e-15f, 0.000713936f, -732.486f, -1.90686e+27f, 4.51382e+10f
10866path.lineTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527)); // 3.33127e+24f, -2.87614e+29f
10867path.close();
10868path.moveTo(SkBits2Float(0x6829523a), SkBits2Float(0x2d555b2d)); // 3.19839e+24f, 1.21279e-11f
10869path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x8c555b2d)); // 4.03114e+24f, -1.64364e-31f
10870path.moveTo(SkBits2Float(0x081f2a31), SkBits2Float(0xc0032921)); // 4.78969e-34f, -2.04939f
10871path.cubicTo(SkBits2Float(0x68572d55), SkBits2Float(0xf05bd24b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0xed4b7bc0)); // 4.06458e+24f, -2.72126e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, -3.93594e+27f
10872path.conicTo(SkBits2Float(0x212a8c6a), SkBits2Float(0x4329081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x5b2d2d55)); // 5.77841e-19f, 169.032f, 6.14991e+25f, 9.43289e-15f, 4.8745e+16f
10873path.moveTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955)); // 3.50128e+24f, -2.87402e+29f
10874path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x8cef552a), SkBits2Float(0x295b2d2a), SkBits2Float(0x3a210368), SkBits2Float(0x7bc05508)); // 5.76397e-19f, -3.6875e-31f, 4.86669e-14f, 0.000614217f, 1.99729e+36f
10875path.lineTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955)); // 3.50128e+24f, -2.87402e+29f
10876path.close();
10877path.moveTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955)); // 3.50128e+24f, -2.87402e+29f
10878path.lineTo(SkBits2Float(0x555b6829), SkBits2Float(0x6c212a8c)); // 1.50775e+13f, 7.79352e+26f
10879path.lineTo(SkBits2Float(0x5b2d7a6a), SkBits2Float(0xf0556830)); // 4.88298e+16f, -2.64185e+29f
10880path.lineTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955)); // 3.50128e+24f, -2.87402e+29f
10881path.close();
10882path.moveTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955)); // 3.50128e+24f, -2.87402e+29f
10883path.conicTo(SkBits2Float(0x0321d90a), SkBits2Float(0x555b2d68), SkBits2Float(0x2a8c558c), SkBits2Float(0x212a2a1f), SkBits2Float(0x4b7bc003)); // 4.75628e-37f, 1.50618e+13f, 2.49284e-13f, 5.7654e-19f, 1.64987e+07f
10884path.lineTo(SkBits2Float(0x8c2aed7a), SkBits2Float(0x212128c0)); // -1.31678e-31f, 5.46029e-19f
10885path.lineTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955)); // 3.50128e+24f, -2.87402e+29f
10886path.close();
10887
10888 SkPath path2(path);
10889 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
10890}
10891
10892static void fuzz763_21(skiatest::Reporter* reporter, const char* filename) {
10893 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010894 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040010895path.moveTo(SkBits2Float(0x6828c6f9), SkBits2Float(0x6614dc9e)); // 3.18811e+24f, 1.75745e+23f
10896path.cubicTo(SkBits2Float(0x68303469), SkBits2Float(0x661f92fc), SkBits2Float(0x6837d3c3), SkBits2Float(0x662b0eb2), SkBits2Float(0x683fa268), SkBits2Float(0x663759e1)); // 3.32841e+24f, 1.88392e+23f, 3.4724e+24f, 2.01949e+23f, 3.61987e+24f, 2.16463e+23f
10897path.cubicTo(SkBits2Float(0x68c4391f), SkBits2Float(0x672c5c9f), SkBits2Float(0x688b20ab), SkBits2Float(0x6804b825), SkBits2Float(0x681ddb5e), SkBits2Float(0x6838dc00)); // 7.4131e+24f, 8.13956e+23f, 5.25609e+24f, 2.507e+24f, 2.98183e+24f, 3.49189e+24f
10898path.lineTo(SkBits2Float(0x6828c6f9), SkBits2Float(0x6614dc9e)); // 3.18811e+24f, 1.75745e+23f
10899path.close();
10900path.moveTo(SkBits2Float(0x68226c73), SkBits2Float(0x660bd15e)); // 3.0681e+24f, 1.65068e+23f
10901path.cubicTo(SkBits2Float(0x6823b0e1), SkBits2Float(0x660d990f), SkBits2Float(0x6824f6d5), SkBits2Float(0x660f668c), SkBits2Float(0x68263e4e), SkBits2Float(0x66113632)); // 3.09203e+24f, 1.67169e+23f, 3.11609e+24f, 1.69298e+23f, 3.14025e+24f, 1.71436e+23f
10902path.cubicTo(SkBits2Float(0x682715e4), SkBits2Float(0x6612676d), SkBits2Float(0x6827ee22), SkBits2Float(0x66139997), SkBits2Float(0x6828c709), SkBits2Float(0x6614cba5)); // 3.15616e+24f, 1.72843e+23f, 3.17211e+24f, 1.74255e+23f, 3.18812e+24f, 1.75667e+23f
10903path.lineTo(SkBits2Float(0x6828d720), SkBits2Float(0x6604a1a2)); // 3.1893e+24f, 1.56583e+23f
10904path.cubicTo(SkBits2Float(0x68270421), SkBits2Float(0x6601102c), SkBits2Float(0x68252b97), SkBits2Float(0x65fb1edd), SkBits2Float(0x68234ce5), SkBits2Float(0x65f4367f)); // 3.15485e+24f, 1.52371e+23f, 3.11998e+24f, 1.48235e+23f, 3.08466e+24f, 1.44158e+23f
10905path.conicTo(SkBits2Float(0x6822e012), SkBits2Float(0x6602acc5), SkBits2Float(0x68226c73), SkBits2Float(0x660bd15e), SkBits2Float(0x3f7ffa04)); // 3.07663e+24f, 1.54274e+23f, 3.0681e+24f, 1.65068e+23f, 0.999909f
10906path.close();
10907path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x6a2a291f)); // 0, 5.14279e+25f
10908path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x68555b2a)); // 0, 4.03018e+24f
10909path.cubicTo(SkBits2Float(0x00000000), SkBits2Float(0x68617414), SkBits2Float(0x66af1c42), SkBits2Float(0x68624f96), SkBits2Float(0x6757755b), SkBits2Float(0x685b93f2)); // 0, 4.25869e+24f, 4.13468e+23f, 4.27489e+24f, 1.01747e+24f, 4.14771e+24f
10910path.cubicTo(SkBits2Float(0x67a63a84), SkBits2Float(0x68fe1c37), SkBits2Float(0x67c05eed), SkBits2Float(0x69930962), SkBits2Float(0x00000000), SkBits2Float(0x6a2a291f)); // 1.56998e+24f, 9.60001e+24f, 1.81689e+24f, 2.22196e+25f, 0, 5.14279e+25f
10911path.close();
10912path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x6a2a291f)); // 0, 5.14279e+25f
10913path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x6a4b7bc4)); // 0, 6.14991e+25f
10914path.cubicTo(SkBits2Float(0x6a2c8798), SkBits2Float(0x68f7a144), SkBits2Float(0x6951f5ea), SkBits2Float(0x6796ad55), SkBits2Float(0x683fa268), SkBits2Float(0x663759e1)); // 5.21439e+25f, 9.35519e+24f, 1.58642e+25f, 1.4231e+24f, 3.61987e+24f, 2.16463e+23f
10915path.cubicTo(SkBits2Float(0x683871e3), SkBits2Float(0x66253b4f), SkBits2Float(0x6830da01), SkBits2Float(0x66144d3e), SkBits2Float(0x6828d720), SkBits2Float(0x6604a1a2)); // 3.48407e+24f, 1.95071e+23f, 3.34063e+24f, 1.75084e+23f, 3.1893e+24f, 1.56583e+23f
10916path.conicTo(SkBits2Float(0x68295b21), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x492bb324)); // 3.19904e+24f, 0, 0, 0, 703282
10917path.cubicTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x677b84f0), SkBits2Float(0x00000000), SkBits2Float(0x68226c73), SkBits2Float(0x660bd15e)); // 0, 0, 1.18777e+24f, 0, 3.0681e+24f, 1.65068e+23f
10918path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x68156829)); // 0, 2.82222e+24f
10919path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x68555b2a)); // 0, 4.03018e+24f
10920path.lineTo(SkBits2Float(0x673918f3), SkBits2Float(0x681b0f5f)); // 8.74098e+23f, 2.929e+24f
10921path.lineTo(SkBits2Float(0x67391759), SkBits2Float(0x681b0fae)); // 8.74068e+23f, 2.92902e+24f
10922path.cubicTo(SkBits2Float(0x674384e7), SkBits2Float(0x682e2068), SkBits2Float(0x674db698), SkBits2Float(0x6843893b), SkBits2Float(0x6757755b), SkBits2Float(0x685b93f2)); // 9.23313e+23f, 3.28916e+24f, 9.71453e+23f, 3.69357e+24f, 1.01747e+24f, 4.14771e+24f
10923path.cubicTo(SkBits2Float(0x67a63484), SkBits2Float(0x68556bdd), SkBits2Float(0x67f18c5f), SkBits2Float(0x6848eb25), SkBits2Float(0x681ddb5e), SkBits2Float(0x6838dc00)); // 1.56976e+24f, 4.03142e+24f, 2.28136e+24f, 3.79524e+24f, 2.98183e+24f, 3.49189e+24f
10924path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x6a2a291f)); // 0, 5.14279e+25f
10925path.close();
10926
10927 SkPath path1(path);
10928 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010929 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010930
10931 SkPath path2(path);
10932 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 1, filename);
10933}
10934
10935static void fuzz763_22(skiatest::Reporter* reporter, const char* filename) {
10936 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010937 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040010938path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x68295b2d)); // 0, 3.19905e+24f
10939path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
10940path.lineTo(SkBits2Float(0x6a3a7bc0), SkBits2Float(0x00000000)); // 5.63611e+25f, 0
10941path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x6a034b21)); // 0, 3.9681e+25f
10942path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x68295b2d)); // 0, 3.19905e+24f
10943path.close();
10944path.moveTo(SkBits2Float(0x6617da56), SkBits2Float(0x00000000)); // 1.79276e+23f, 0
10945path.conicTo(SkBits2Float(0x5e704d09), SkBits2Float(0x5e3a4dfd), SkBits2Float(0x00000000), SkBits2Float(0x65eb62ef), SkBits2Float(0x430fa5e6)); // 4.32888e+18f, 3.35617e+18f, 0, 1.38948e+23f, 143.648f
10946path.conicTo(SkBits2Float(0x5e798b32), SkBits2Float(0x627a95c0), SkBits2Float(0x61f5014c), SkBits2Float(0x61fba0fd), SkBits2Float(0x40f8a1a1)); // 4.49538e+18f, 1.15562e+21f, 5.64943e+20f, 5.80217e+20f, 7.76973f
10947path.conicTo(SkBits2Float(0x62743d2d), SkBits2Float(0x5e49b862), SkBits2Float(0x6617da56), SkBits2Float(0x00000000), SkBits2Float(0x410ef54c)); // 1.12635e+21f, 3.63387e+18f, 1.79276e+23f, 0, 8.93489f
10948path.close();
10949
10950 SkPath path1(path);
10951 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010952 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010953path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
10954path.quadTo(SkBits2Float(0x4f9a3a8a), SkBits2Float(0xc28a0d28), SkBits2Float(0x273a3ab3), SkBits2Float(0x8b2a2928)); // 5.17506e+09f, -69.0257f, 2.58445e-15f, -3.27718e-32f
10955path.lineTo(SkBits2Float(0x63283ae6), SkBits2Float(0x27282a81)); // 3.1033e+21f, 2.33377e-15f
10956
10957 SkPath path2(path);
10958 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 3, filename);
10959}
10960
10961static void fuzz763_23(skiatest::Reporter* reporter, const char* filename) {
10962 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050010963 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010964
10965 SkPath path1(path);
10966 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050010967 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040010968path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29)); // 4.03114e+24f, 1.50617e+13f
10969path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108)); // 3.60396e-20f, -2.04889f
10970path.cubicTo(SkBits2Float(0x68392d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x03210c2a), SkBits2Float(0x6a4b7bc0)); // 3.4979e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.73276e-37f, 6.14991e+25f
10971path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x69555b2d)); // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.61207e+25f
10972path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0682955)); // 3.33127e+24f, -2.87402e+29f
10973path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x2aef552a), SkBits2Float(0x29295b2d), SkBits2Float(0x68210368), SkBits2Float(0x7bc05508)); // 5.76397e-19f, 4.2514e-13f, 3.76046e-14f, 3.04146e+24f, 1.99729e+36f
10974path.lineTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0682955)); // 3.33127e+24f, -2.87402e+29f
10975path.close();
10976path.moveTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55)); // 4.85282e+16f, 5.7784e-19f
10977path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
10978path.conicTo(SkBits2Float(0x68395b2d), SkBits2Float(0x8c5bf055), SkBits2Float(0x2a1f2a55), SkBits2Float(0x03212a21), SkBits2Float(0x5a4b7bc0)); // 3.50128e+24f, -1.69435e-31f, 1.41367e-13f, 4.7362e-37f, 1.43189e+16f
10979path.conicTo(SkBits2Float(0xc08c2aed), SkBits2Float(0x211f2108), SkBits2Float(0x6a4b7b03), SkBits2Float(0x6829ed27), SkBits2Float(0x2d555b2d)); // -4.38024f, 5.3915e-19f, 6.14982e+25f, 3.20982e+24f, 1.21279e-11f
10980path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527)); // 3.35016e+24f, -2.87614e+29f
10981path.conicTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x08211f72), SkBits2Float(0x032a2a21), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2547937a)); // 2.49282e-13f, 4.84861e-34f, 5.00069e-37f, 6.14991e+25f, 1.73105e-16f
10982path.quadTo(SkBits2Float(0x2128282a), SkBits2Float(0x3a8a3adf), SkBits2Float(0x8a284f1a), SkBits2Float(0xc2213ab3)); // 5.69738e-19f, 0.00105461f, -8.10378e-33f, -40.3073f
10983path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x3a2a812a), SkBits2Float(0x2a8ced29)); // 2.25206e-21f, 300.343f, 0.000650423f, 2.50336e-13f
10984path.lineTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527)); // 3.35016e+24f, -2.87614e+29f
10985path.close();
10986path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527)); // 3.35016e+24f, -2.87614e+29f
10987path.conicTo(SkBits2Float(0x03210831), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x6829ed27), SkBits2Float(0x55555b2d), SkBits2Float(0x1e2a3a2a)); // 4.73231e-37f, 6.14991e+25f, 3.20982e+24f, 1.46617e+13f, 9.01175e-21f
10988path.conicTo(SkBits2Float(0x27202140), SkBits2Float(0x3a3b2729), SkBits2Float(0xc4371f20), SkBits2Float(0xecc52a22), SkBits2Float(0x21515d27)); // 2.22225e-15f, 0.000713932f, -732.486f, -1.90686e+27f, 7.09352e-19f
10989path.lineTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527)); // 3.35016e+24f, -2.87614e+29f
10990path.close();
10991path.moveTo(SkBits2Float(0x6829523a), SkBits2Float(0x2d555b2d)); // 3.19839e+24f, 1.21279e-11f
10992path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29)); // 4.03114e+24f, 1.50617e+13f
10993path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108)); // 3.60396e-20f, -2.04889f
10994path.cubicTo(SkBits2Float(0x68572d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0)); // 4.06458e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 6.14991e+25f
10995path.conicTo(SkBits2Float(0x2a8c54ed), SkBits2Float(0x21081f21), SkBits2Float(0x4b7bc003), SkBits2Float(0x29ed846a), SkBits2Float(0x555b2d28)); // 2.49279e-13f, 4.61198e-19f, 1.64987e+07f, 1.05479e-13f, 1.50617e+13f
10996path.conicTo(SkBits2Float(0x68392d5b), SkBits2Float(0xf0682955), SkBits2Float(0x2a1f5b2d), SkBits2Float(0xef552a21), SkBits2Float(0x5b2d2a8c)); // 3.4979e+24f, -2.87402e+29f, 1.41537e-13f, -6.59712e+28f, 4.8742e+16f
10997
10998 SkPath path2(path);
10999 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
11000}
11001
11002static void fuzz763_24(skiatest::Reporter* reporter, const char* filename) {
11003 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011004 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040011005
11006 SkPath path1(path);
11007 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011008 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011009path.moveTo(SkBits2Float(0xededed02), SkBits2Float(0xedededed)); // -9.20431e+27f, -9.20445e+27f
11010path.close();
11011path.moveTo(SkBits2Float(0xededed02), SkBits2Float(0xedededed)); // -9.20431e+27f, -9.20445e+27f
11012path.quadTo(SkBits2Float(0x9fb9c16e), SkBits2Float(0x27737375), SkBits2Float(0xb7c5ff00), SkBits2Float(0x00ff9908)); // -7.86706e-20f, 3.37856e-15f, -2.3603e-05f, 2.34729e-38f
11013path.moveTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273)); // 1.9288e+31f, 1.9278e+31f
11014path.cubicTo(SkBits2Float(0x1616ecec), SkBits2Float(0x2c321616), SkBits2Float(0x3516c616), SkBits2Float(0x6e161616), SkBits2Float(0x4c416033), SkBits2Float(0xf6000000)); // 1.21917e-25f, 2.53076e-12f, 5.61676e-07f, 1.16124e+28f, 5.06923e+07f, -6.49037e+32f
11015path.quadTo(SkBits2Float(0x04007f41), SkBits2Float(0xecececec), SkBits2Float(0xecececec), SkBits2Float(0xecec41ec)); // 1.51048e-36f, -2.2914e+27f, -2.2914e+27f, -2.28494e+27f
11016path.lineTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273)); // 1.9288e+31f, 1.9278e+31f
11017path.close();
11018path.moveTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273)); // 1.9288e+31f, 1.9278e+31f
11019path.quadTo(SkBits2Float(0x000000ec), SkBits2Float(0xececcc00), SkBits2Float(0x48ececec), SkBits2Float(0x0278806e)); // 3.30706e-43f, -2.29016e+27f, 485223, 1.8257e-37f
11020path.lineTo(SkBits2Float(0x72ececec), SkBits2Float(0xecec02ec)); // 9.38559e+30f, -2.28256e+27f
11021path.quadTo(SkBits2Float(0xec04007f), SkBits2Float(0xecececec), SkBits2Float(0xecececec), SkBits2Float(0xecec0400)); // -6.38322e+26f, -2.2914e+27f, -2.2914e+27f, -2.2826e+27f
11022path.lineTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273)); // 1.9288e+31f, 1.9278e+31f
11023path.close();
11024path.moveTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273)); // 1.9288e+31f, 1.9278e+31f
11025path.quadTo(SkBits2Float(0x000040ec), SkBits2Float(0x3a333300), SkBits2Float(0xecec3333), SkBits2Float(0xececdbec)); // 2.32896e-41f, 0.000683591f, -2.28439e+27f, -2.29076e+27f
11026path.lineTo(SkBits2Float(0x3300007f), SkBits2Float(0x33d83333)); // 2.98028e-08f, 1.00676e-07f
11027path.lineTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273)); // 1.9288e+31f, 1.9278e+31f
11028path.close();
11029path.moveTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273)); // 1.9288e+31f, 1.9278e+31f
11030path.quadTo(SkBits2Float(0x9e9ea900), SkBits2Float(0x33ececec), SkBits2Float(0xececec33), SkBits2Float(0xec336e6e)); // -1.67988e-20f, 1.10327e-07f, -2.29138e+27f, -8.67677e+26f
11031path.lineTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273)); // 1.9288e+31f, 1.9278e+31f
11032path.close();
11033path.moveTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273)); // 1.9288e+31f, 1.9278e+31f
11034path.lineTo(SkBits2Float(0xedededed), SkBits2Float(0xedededed)); // -9.20445e+27f, -9.20445e+27f
11035path.lineTo(SkBits2Float(0xecececec), SkBits2Float(0xecececec)); // -2.2914e+27f, -2.2914e+27f
11036path.lineTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273)); // 1.9288e+31f, 1.9278e+31f
11037path.close();
11038path.moveTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273)); // 1.9288e+31f, 1.9278e+31f
11039path.lineTo(SkBits2Float(0x01003300), SkBits2Float(0x33d83333)); // 2.35465e-38f, 1.00676e-07f
11040path.quadTo(SkBits2Float(0xecec3333), SkBits2Float(0x04eeedec), SkBits2Float(0xe0e0e0e0), SkBits2Float(0x9ee0e0e0)); // -2.28439e+27f, 5.6172e-36f, -1.29634e+20f, -2.38099e-20f
11041path.lineTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273)); // 1.9288e+31f, 1.9278e+31f
11042path.close();
11043path.moveTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273)); // 1.9288e+31f, 1.9278e+31f
11044path.cubicTo(SkBits2Float(0x299e9e9e), SkBits2Float(0xecececec), SkBits2Float(0xececb6ec), SkBits2Float(0xf0ececec), SkBits2Float(0x0000ecec), SkBits2Float(0x9ebe6e6e)); // 7.04413e-14f, -2.2914e+27f, -2.28936e+27f, -5.86599e+29f, 8.49916e-41f, -2.01627e-20f
11045path.cubicTo(SkBits2Float(0x9e9e9e9e), SkBits2Float(0xe8009e9e), SkBits2Float(0x9e9e9e9e), SkBits2Float(0xecec9e9e), SkBits2Float(0xec3333ec), SkBits2Float(0xececf0ec)); // -1.67945e-20f, -2.42956e+24f, -1.67945e-20f, -2.28844e+27f, -8.66572e+26f, -2.29155e+27f
11046
11047 SkPath path2(path);
11048 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
11049}
11050
11051static void fuzz763_25(skiatest::Reporter* reporter, const char* filename) {
11052 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011053 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040011054path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x6a4b7bc4)); // 0, 6.14991e+25f
11055path.conicTo(SkBits2Float(0x653140d9), SkBits2Float(0x6a4b4f74), SkBits2Float(0x65906630), SkBits2Float(0x6a25a070), SkBits2Float(0x3f6728a2)); // 5.23159e+22f, 6.14468e+25f, 8.52382e+22f, 5.00576e+25f, 0.902964f
11056path.cubicTo(SkBits2Float(0x68295bc5), SkBits2Float(0x00000000), SkBits2Float(0x682958ff), SkBits2Float(0x00000000), SkBits2Float(0x68286829), SkBits2Float(0x00000000)); // 3.19909e+24f, 0, 3.19889e+24f, 0, 3.18112e+24f, 0
11057path.lineTo(SkBits2Float(0x68555b29), SkBits2Float(0x00000000)); // 4.03018e+24f, 0
11058path.conicTo(SkBits2Float(0x00000000), SkBits2Float(0x682d2927), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x6829686f)); // 0, 3.27091e+24f, 0, 0, 3.20003e+24f
11059path.lineTo(SkBits2Float(0xdf218a28), SkBits2Float(0x00000000)); // -1.16402e+19f, 0
11060path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x6a4b7bc4)); // 0, 6.14991e+25f
11061path.close();
11062path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11063path.conicTo(SkBits2Float(0x6642c40c), SkBits2Float(0x00000000), SkBits2Float(0x65906630), SkBits2Float(0x6a25a070), SkBits2Float(0x3edcd74d)); // 2.29939e+23f, 0, 8.52382e+22f, 5.00576e+25f, 0.43133f
11064path.conicTo(SkBits2Float(0x68295afa), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x4277a57b)); // 3.19903e+24f, 0, 0, 0, 61.9116f
11065path.close();
11066
11067 SkPath path1(path);
11068 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011069 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011070
11071 SkPath path2(path);
11072 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
11073}
11074
11075
11076static void fuzz763_26(skiatest::Reporter* reporter, const char* filename) {
11077 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011078 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011079
11080 SkPath path1(path);
11081 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011082 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011083path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29)); // 4.03114e+24f, 1.50617e+13f
11084path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc003210a)); // 3.60396e-20f, -2.04889f
11085path.cubicTo(SkBits2Float(0x68372d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0)); // 3.46012e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 6.14991e+25f
11086path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x69555b2d)); // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.61207e+25f
11087path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0682955)); // 3.35016e+24f, -2.87402e+29f
11088path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x8cef552a), SkBits2Float(0x295b2d2a), SkBits2Float(0x68210368), SkBits2Float(0x7bc05508)); // 5.76397e-19f, -3.6875e-31f, 4.86669e-14f, 3.04146e+24f, 1.99729e+36f
11089path.lineTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0682955)); // 3.35016e+24f, -2.87402e+29f
11090path.close();
11091path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0682955)); // 3.35016e+24f, -2.87402e+29f
11092path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55)); // 4.85282e+16f, 5.7784e-19f
11093path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
11094path.conicTo(SkBits2Float(0x68385b2d), SkBits2Float(0x555bf055), SkBits2Float(0x2a1f2a8c), SkBits2Float(0x03212121), SkBits2Float(0x5a4b7bc0)); // 3.48239e+24f, 1.51141e+13f, 1.41368e-13f, 4.73517e-37f, 1.43189e+16f
11095path.conicTo(SkBits2Float(0xc08c2aed), SkBits2Float(0x211f2108), SkBits2Float(0x6a4b7b03), SkBits2Float(0x6829ed27), SkBits2Float(0x2d555b2d)); // -4.38024f, 5.3915e-19f, 6.14982e+25f, 3.20982e+24f, 1.21279e-11f
11096path.moveTo(SkBits2Float(0x68355b2d), SkBits2Float(0xf0685527)); // 3.42572e+24f, -2.87614e+29f
11097path.conicTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x6e2a1f72), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x4793ed7a)); // 2.49282e-13f, 1.31626e+28f, 4.7323e-37f, 6.14991e+25f, 75739
11098path.lineTo(SkBits2Float(0x68355b2d), SkBits2Float(0xf0685527)); // 3.42572e+24f, -2.87614e+29f
11099path.close();
11100path.moveTo(SkBits2Float(0x68355b2d), SkBits2Float(0xf0685527)); // 3.42572e+24f, -2.87614e+29f
11101path.quadTo(SkBits2Float(0x2128282a), SkBits2Float(0x3a8a3adf), SkBits2Float(0x8a284f1a), SkBits2Float(0x2c213ab3)); // 5.69738e-19f, 0.00105461f, -8.10378e-33f, 2.29121e-12f
11102path.lineTo(SkBits2Float(0x68355b2d), SkBits2Float(0xf0685527)); // 3.42572e+24f, -2.87614e+29f
11103path.close();
11104path.moveTo(SkBits2Float(0x68355b2d), SkBits2Float(0xf0685527)); // 3.42572e+24f, -2.87614e+29f
11105path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x3a2a812a), SkBits2Float(0x2127ed29)); // 2.25206e-21f, 300.343f, 0.000650423f, 5.68957e-19f
11106path.conicTo(SkBits2Float(0x03210831), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x6829ed27), SkBits2Float(0x55555b2d), SkBits2Float(0x1e2a3a2a)); // 4.73231e-37f, 6.14991e+25f, 3.20982e+24f, 1.46617e+13f, 9.01175e-21f
11107path.conicTo(SkBits2Float(0x27202140), SkBits2Float(0x3a3b2769), SkBits2Float(0xc4371f20), SkBits2Float(0xecc52a22), SkBits2Float(0x21512727)); // 2.22225e-15f, 0.000713936f, -732.486f, -1.90686e+27f, 7.08638e-19f
11108path.lineTo(SkBits2Float(0x68355b2d), SkBits2Float(0xf0685527)); // 3.42572e+24f, -2.87614e+29f
11109path.close();
11110path.moveTo(SkBits2Float(0x6829523a), SkBits2Float(0x2d555b2d)); // 3.19839e+24f, 1.21279e-11f
11111path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x5b2d5529)); // 4.03114e+24f, 4.87888e+16f
11112path.moveTo(SkBits2Float(0x1f2a322a), SkBits2Float(0xc0032108)); // 3.60404e-20f, -2.04889f
11113path.cubicTo(SkBits2Float(0x68572d55), SkBits2Float(0xf05bd24b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0xed4b7bc0)); // 4.06458e+24f, -2.72126e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, -3.93594e+27f
11114path.conicTo(SkBits2Float(0x212a8c6a), SkBits2Float(0x0329081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x2d555b2d)); // 5.77841e-19f, 4.9674e-37f, 6.14991e+25f, 9.43289e-15f, 1.21279e-11f
11115path.moveTo(SkBits2Float(0x68385b2d), SkBits2Float(0xf0682955)); // 3.48239e+24f, -2.87402e+29f
11116path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x8cef552a), SkBits2Float(0x295b2d2a), SkBits2Float(0x68210368), SkBits2Float(0x7bc05508)); // 5.76397e-19f, -3.6875e-31f, 4.86669e-14f, 3.04146e+24f, 1.99729e+36f
11117path.lineTo(SkBits2Float(0x68385b2d), SkBits2Float(0xf0682955)); // 3.48239e+24f, -2.87402e+29f
11118path.close();
11119path.moveTo(SkBits2Float(0x68385b2d), SkBits2Float(0xf0682955)); // 3.48239e+24f, -2.87402e+29f
11120path.lineTo(SkBits2Float(0x555b1b29), SkBits2Float(0x6c212a8c)); // 1.50569e+13f, 7.79352e+26f
11121path.conicTo(SkBits2Float(0x084b0321), SkBits2Float(0x6ac07b2a), SkBits2Float(0x395b2d7a), SkBits2Float(0x8c5bf055), SkBits2Float(0x1f212a3a)); // 6.10918e-34f, 1.16348e+26f, 0.000209024f, -1.69435e-31f, 3.4128e-20f
11122path.conicTo(SkBits2Float(0x290321d9), SkBits2Float(0x555b2d68), SkBits2Float(0x2a8c558c), SkBits2Float(0x2a212a1f), SkBits2Float(0x7bc00321)); // 2.91172e-14f, 1.50618e+13f, 2.49284e-13f, 1.43143e-13f, 1.99397e+36f
11123path.lineTo(SkBits2Float(0x68385b2d), SkBits2Float(0xf0682955)); // 3.48239e+24f, -2.87402e+29f
11124path.close();
11125path.moveTo(SkBits2Float(0x68385b2d), SkBits2Float(0xf0682955)); // 3.48239e+24f, -2.87402e+29f
11126path.lineTo(SkBits2Float(0x8c2aed7a), SkBits2Float(0x1f2128c0)); // -1.31678e-31f, 3.41268e-20f
11127path.lineTo(SkBits2Float(0x68385b2d), SkBits2Float(0xf0682955)); // 3.48239e+24f, -2.87402e+29f
11128path.close();
11129
11130 SkPath path2(path);
11131 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
11132}
11133
11134static void fuzz763_28(skiatest::Reporter* reporter, const char* filename) {
11135 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011136 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011137
11138 SkPath path1(path);
11139 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011140 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011141path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29)); // 4.03114e+24f, 1.50617e+13f
11142path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108)); // 3.60396e-20f, -2.04889f
11143path.cubicTo(SkBits2Float(0x68302d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a1f2a), SkBits2Float(0x0321082a), SkBits2Float(0x6aa37bc0)); // 3.32789e+24f, -2.71613e+29f, -1.64207e-31f, 5.76395e-19f, 4.7323e-37f, 9.88197e+25f
11144path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2d28ed84), SkBits2Float(0x5b2d2955)); // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.60243e-12f, 4.87406e+16f
11145path.moveTo(SkBits2Float(0x6c395b2d), SkBits2Float(0xf0682955)); // 8.96327e+26f, -2.87402e+29f
11146path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x2aef8c55), SkBits2Float(0x68295b2d), SkBits2Float(0x21086855), SkBits2Float(0x4b7bc003)); // 5.76397e-19f, 4.25523e-13f, 3.19905e+24f, 4.62167e-19f, 1.64987e+07f
11147path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55)); // 4.85282e+16f, 5.7784e-19f
11148path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
11149path.lineTo(SkBits2Float(0x8a283a28), SkBits2Float(0x284f1a3a)); // -8.09984e-33f, 1.14965e-14f
11150path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x272a812a), SkBits2Float(0x3a2a5529)); // 2.25206e-21f, 300.343f, 2.36623e-15f, 0.000649768f
11151path.lineTo(SkBits2Float(0x213b1e2a), SkBits2Float(0x27292720)); // 6.3398e-19f, 2.34747e-15f
11152path.conicTo(SkBits2Float(0x381f203a), SkBits2Float(0x2ac422c5), SkBits2Float(0xc25d27ec), SkBits2Float(0x3a705921), SkBits2Float(0x2a105152)); // 3.79386e-05f, 3.48407e-13f, -55.289f, 0.000916855f, 1.2818e-13f
11153path.quadTo(SkBits2Float(0x633ad912), SkBits2Float(0x29c80927), SkBits2Float(0x272927b0), SkBits2Float(0x683a5b2d)); // 3.44674e+21f, 8.88337e-14f, 2.3475e-15f, 3.52017e+24f
11154path.lineTo(SkBits2Float(0x295b2d68), SkBits2Float(0x29685568)); // 4.86672e-14f, 5.15884e-14f
11155path.conicTo(SkBits2Float(0xaa8c555b), SkBits2Float(0x081f2a21), SkBits2Float(0x5b2d0321), SkBits2Float(0x68556829), SkBits2Float(0x2a552d29)); // -2.49282e-13f, 4.78968e-34f, 4.86986e+16f, 4.03114e+24f, 1.89339e-13f
11156path.cubicTo(SkBits2Float(0x21295b2d), SkBits2Float(0x2a688c5b), SkBits2Float(0x68295b2d), SkBits2Float(0x2d296855), SkBits2Float(0x8c08555b), SkBits2Float(0x2a2a29ca)); // 5.73801e-19f, 2.06544e-13f, 3.19905e+24f, 9.6297e-12f, -1.05027e-31f, 1.51135e-13f
11157path.quadTo(SkBits2Float(0x68295b21), SkBits2Float(0x2d296855), SkBits2Float(0x2a8c555b), SkBits2Float(0x081f2a21)); // 3.19904e+24f, 9.6297e-12f, 2.49282e-13f, 4.78968e-34f
11158path.lineTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
11159path.close();
11160path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
11161path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x5b2d6829), SkBits2Float(0x1f212a55), SkBits2Float(0x8ced7aba), SkBits2Float(0x3f2a212a)); // 6.14991e+25f, 4.88097e+16f, 3.41281e-20f, -3.65895e-31f, 0.664569f
11162path.lineTo(SkBits2Float(0x5b2d212d), SkBits2Float(0x2d556829)); // 4.87316e+16f, 1.21308e-11f
11163path.moveTo(SkBits2Float(0x68552968), SkBits2Float(0x5568295b)); // 4.02651e+24f, 1.5954e+13f
11164path.moveTo(SkBits2Float(0x5b2d2968), SkBits2Float(0x212a8c55)); // 4.87407e+16f, 5.7784e-19f
11165path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0)); // 4.7323e-37f, 6.14991e+25f
11166path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a3a7bc0), SkBits2Float(0x2147ed7a), SkBits2Float(0x28282a3a)); // 5.77848e-19f, 4.7323e-37f, 5.63611e+25f, 6.77381e-19f, 9.33503e-15f
11167
11168 SkPath path2(path);
11169 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
11170}
11171
11172static void fuzz763_27(skiatest::Reporter* reporter, const char* filename) {
11173 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011174 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011175
11176 SkPath path1(path);
11177 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011178 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011179path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11180path.quadTo(SkBits2Float(0x30309ab8), SkBits2Float(0x305b3030), SkBits2Float(0x00f53030), SkBits2Float(0x3a3a0000)); // 6.42483e-10f, 7.97402e-10f, 2.2517e-38f, 0.000709534f
11181path.quadTo(SkBits2Float(0xb8b8d5b8), SkBits2Float(0x0b0b0b03), SkBits2Float(0x0b0b0b0b), SkBits2Float(0x3a3a0b0b)); // -8.81361e-05f, 2.67787e-32f, 2.67787e-32f, 0.000709698f
11182path.quadTo(SkBits2Float(0xb8b8b8b8), SkBits2Float(0x0b1203b8), SkBits2Float(0x0b0b0b0b), SkBits2Float(0x3a3a2110)); // -8.80821e-05f, 2.81214e-32f, 2.67787e-32f, 0.000710026f
11183
11184 SkPath path2(path);
11185 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
11186}
11187
11188static void fuzz763_29(skiatest::Reporter* reporter, const char* filename) {
11189 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011190 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040011191path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11192path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x743e0000)); // 0, 6.02134e+31f
11193path.cubicTo(SkBits2Float(0x74083cf1), SkBits2Float(0x74536e73), SkBits2Float(0x742ac4e4), SkBits2Float(0x7415f5be), SkBits2Float(0x7433ee3c), SkBits2Float(0x7405a69a)); // 4.31756e+31f, 6.70053e+31f, 5.41189e+31f, 4.75242e+31f, 5.70223e+31f, 4.23556e+31f
11194path.quadTo(SkBits2Float(0x74360ca0), SkBits2Float(0x7401e10c), SkBits2Float(0x7436a382), SkBits2Float(0x7401cc18)); // 5.76937e+31f, 4.11603e+31f, 5.78805e+31f, 4.11344e+31f
11195path.cubicTo(SkBits2Float(0x74374a91), SkBits2Float(0x7401ef19), SkBits2Float(0x74375c84), SkBits2Float(0x7404d9b9), SkBits2Float(0x7437868f), SkBits2Float(0x740bae8a)); // 5.80873e+31f, 4.11777e+31f, 5.81095e+31f, 4.2102e+31f, 5.81616e+31f, 4.42669e+31f
11196path.cubicTo(SkBits2Float(0x7437d6c1), SkBits2Float(0x7418b629), SkBits2Float(0x74387e9b), SkBits2Float(0x7433fbc5), SkBits2Float(0x743e2ff7), SkBits2Float(0x74655fa2)); // 5.82609e+31f, 4.83962e+31f, 5.84687e+31f, 5.7039e+31f, 6.02728e+31f, 7.26914e+31f
11197path.cubicTo(SkBits2Float(0x741ada75), SkBits2Float(0x74745717), SkBits2Float(0x73c106b4), SkBits2Float(0x74744e64), SkBits2Float(0x00000000), SkBits2Float(0x74744006)); // 4.9075e+31f, 7.74345e+31f, 3.05862e+31f, 7.74237e+31f, 0, 7.74059e+31f
11198path.cubicTo(SkBits2Float(0x00000000), SkBits2Float(0x74746c7c), SkBits2Float(0x74244dce), SkBits2Float(0x7474733e), SkBits2Float(0x74400000), SkBits2Float(0x74747445)); // 0, 7.7461e+31f, 5.207e+31f, 7.74693e+31f, 6.08472e+31f, 7.74706e+31f
11199path.cubicTo(SkBits2Float(0x743f5854), SkBits2Float(0x746f3659), SkBits2Float(0x743ebe05), SkBits2Float(0x746a3017), SkBits2Float(0x743e2ff7), SkBits2Float(0x74655fa2)); // 6.06397e+31f, 7.58094e+31f, 6.04486e+31f, 7.42171e+31f, 6.02728e+31f, 7.26914e+31f
11200path.cubicTo(SkBits2Float(0x7447a582), SkBits2Float(0x74615dee), SkBits2Float(0x744f74f6), SkBits2Float(0x745c4903), SkBits2Float(0x7455e7e6), SkBits2Float(0x7455d751)); // 6.32705e+31f, 7.14216e+31f, 6.57457e+31f, 6.98112e+31f, 6.77895e+31f, 6.77689e+31f
11201path.cubicTo(SkBits2Float(0x74747474), SkBits2Float(0x743750a4), SkBits2Float(0x74747474), SkBits2Float(0x73f46f0d), SkBits2Float(0x74747474), SkBits2Float(0x00000000)); // 7.74708e+31f, 5.80948e+31f, 7.74708e+31f, 3.87321e+31f, 7.74708e+31f, 0
11202path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11203path.close();
11204
11205 SkPath path1(path);
11206 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011207 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011208path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11209path.lineTo(SkBits2Float(0xf0682955), SkBits2Float(0x211f5b2d)); // -2.87402e+29f, 5.3992e-19f
11210path.moveTo(SkBits2Float(0x2d2aff2d), SkBits2Float(0x74747474)); // 9.72004e-12f, 7.74708e+31f
11211path.cubicTo(SkBits2Float(0x7474748e), SkBits2Float(0x74747490), SkBits2Float(0x8c722174), SkBits2Float(0x181f0080), SkBits2Float(0x74c0e520), SkBits2Float(0x747d7463)); // 7.7471e+31f, 7.7471e+31f, -1.86531e-31f, 2.05505e-24f, 1.22262e+32f, 8.0323e+31f
11212path.cubicTo(SkBits2Float(0x7b005e4b), SkBits2Float(0xdf3a6a3a), SkBits2Float(0x2a3a2848), SkBits2Float(0x2d2d7821), SkBits2Float(0x8c55212d), SkBits2Float(0x2d2d2d24)); // 6.66526e+35f, -1.34326e+19f, 1.65341e-13f, 9.86059e-12f, -1.64189e-31f, 9.84393e-12f
11213path.conicTo(SkBits2Float(0xde28804c), SkBits2Float(0x28e03721), SkBits2Float(0x3329df28), SkBits2Float(0x2d291515), SkBits2Float(0x0568295b)); // -3.03545e+18f, 2.48929e-14f, 3.95513e-08f, 9.61122e-12f, 1.09162e-35f
11214path.conicTo(SkBits2Float(0x556a2d21), SkBits2Float(0x21088c2a), SkBits2Float(0x3a333303), SkBits2Float(0x5b293a8a), SkBits2Float(0x6855683b)); // 1.60925e+13f, 4.62641e-19f, 0.000683591f, 4.76336e+16f, 4.03115e+24f
11215
11216 SkPath path2(path);
11217 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
11218}
11219
11220static void fuzz763_30(skiatest::Reporter* reporter, const char* filename) {
11221 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011222 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040011223
11224 SkPath path1(path);
11225 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011226 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011227path.moveTo(SkBits2Float(0x1f2108c0), SkBits2Float(0x4b7b0321)); // 3.41003e-20f, 1.64503e+07f
11228path.lineTo(SkBits2Float(0x6829ed27), SkBits2Float(0x2d555b2d)); // 3.20982e+24f, 1.21279e-11f
11229path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527)); // 3.33127e+24f, -2.87614e+29f
11230path.conicTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x6e2a1f72), SkBits2Float(0x0321082a), SkBits2Float(0x2a4b7bc0), SkBits2Float(0x68295b2d)); // 2.49282e-13f, 1.31626e+28f, 4.7323e-37f, 1.8073e-13f, 3.19905e+24f
11231path.lineTo(SkBits2Float(0x5b2d2968), SkBits2Float(0x212a8c55)); // 4.87407e+16f, 5.7784e-19f
11232path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x4b7b28c0)); // 4.7323e-37f, 1.646e+07f
11233path.lineTo(SkBits2Float(0x2a8ced7a), SkBits2Float(0x2d081f21)); // 2.50338e-13f, 7.73762e-12f
11234path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29)); // 4.03114e+24f, 1.50617e+13f
11235path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108)); // 3.60396e-20f, -2.04889f
11236path.cubicTo(SkBits2Float(0x69392d55), SkBits2Float(0x2d5b684b), SkBits2Float(0x8c5527f0), SkBits2Float(0x212a1f2a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0)); // 1.39916e+25f, 1.24719e-11f, -1.64209e-31f, 5.76395e-19f, 4.7323e-37f, 6.14991e+25f
11237path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0xed7a6a1f), SkBits2Float(0x3a214793), SkBits2Float(0x3328282a), SkBits2Float(0x3a8a3adf)); // 5.77848e-19f, -4.84372e+27f, 0.000615233f, 3.91521e-08f, 0.00105461f
11238path.conicTo(SkBits2Float(0x4be80304), SkBits2Float(0xdcdcdc15), SkBits2Float(0xdcdcdcdc), SkBits2Float(0x71dcdcdc), SkBits2Float(0x6c107164)); // 3.04102e+07f, -4.97332e+17f, -4.97339e+17f, 2.18732e+30f, 6.98483e+26f
11239path.conicTo(SkBits2Float(0x6c0f1d6c), SkBits2Float(0x8e406c6e), SkBits2Float(0x6c6c0200), SkBits2Float(0x6c6ce46c), SkBits2Float(0x6c6c6c6c)); // 6.92061e+26f, -2.3718e-30f, 1.14126e+27f, 1.14554e+27f, 1.14327e+27f
11240path.lineTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108)); // 3.60396e-20f, -2.04889f
11241path.close();
11242path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108)); // 3.60396e-20f, -2.04889f
11243path.quadTo(SkBits2Float(0x3ab38a28), SkBits2Float(0x3ac22c21), SkBits2Float(0x6c401057), SkBits2Float(0x6d6d6b64)); // 0.00136978f, 0.00148142f, 9.28764e+26f, 4.59236e+27f
11244path.cubicTo(SkBits2Float(0x6d6d6d6d), SkBits2Float(0x6d6d6d6d), SkBits2Float(0x286d6d6d), SkBits2Float(0x081d2a29), SkBits2Float(0x6d690321), SkBits2Float(0x6b6b026d)); // 4.59251e+27f, 4.59251e+27f, 1.31799e-14f, 4.7295e-34f, 4.50711e+27f, 2.84109e+26f
11245
11246 SkPath path2(path);
11247 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
11248}
11249
11250static void fuzz763_31(skiatest::Reporter* reporter, const char* filename) {
11251 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011252 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040011253
11254 SkPath path1(path);
11255 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011256 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011257path.moveTo(SkBits2Float(0xd72a8c55), SkBits2Float(0x61081f2a)); // -1.8752e+14f, 1.56938e+20f
11258path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x4793ed7a), SkBits2Float(0x282a3a21), SkBits2Float(0xdf3a2128), SkBits2Float(0x471ac575)); // 6.14991e+25f, 75739, 9.4495e-15f, -1.3412e+19f, 39621.5f
11259path.lineTo(SkBits2Float(0x28404040), SkBits2Float(0x552a298a)); // 1.06721e-14f, 1.16935e+13f
11260path.moveTo(SkBits2Float(0x212c685b), SkBits2Float(0x21081f2a)); // 5.8414e-19f, 4.61198e-19f
11261path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x80ed7a3a), SkBits2Float(0x2a3a2147), SkBits2Float(0xdf212828), SkBits2Float(0x4f1a3a3a)); // 6.14991e+25f, -2.18089e-38f, 1.65317e-13f, -1.16126e+19f, 2.58751e+09f
11262path.lineTo(SkBits2Float(0x212c685b), SkBits2Float(0x21081f2a)); // 5.8414e-19f, 4.61198e-19f
11263path.close();
11264path.moveTo(SkBits2Float(0x212c685b), SkBits2Float(0x21081f2a)); // 5.8414e-19f, 4.61198e-19f
11265path.cubicTo(SkBits2Float(0x3ac2213a), SkBits2Float(0x432a2928), SkBits2Float(0x96812be6), SkBits2Float(0x272a1d2a), SkBits2Float(0x3a2a3529), SkBits2Float(0x3b1e2ab0)); // 0.00148109f, 170.161f, -2.08688e-25f, 2.3608e-15f, 0.000649291f, 0.00241343f
11266path.lineTo(SkBits2Float(0x212c685b), SkBits2Float(0x21081f2a)); // 5.8414e-19f, 4.61198e-19f
11267path.close();
11268path.moveTo(SkBits2Float(0x212c685b), SkBits2Float(0x21081f2a)); // 5.8414e-19f, 4.61198e-19f
11269path.cubicTo(SkBits2Float(0xc5272927), SkBits2Float(0x22383b39), SkBits2Float(0x1051523a), SkBits2Float(0x2927b029), SkBits2Float(0x685b2d27), SkBits2Float(0x5b2d6855)); // -2674.57f, 2.4968e-18f, 4.12813e-29f, 3.72342e-14f, 4.14012e+24f, 4.88099e+16f
11270
11271 SkPath path2(path);
11272 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
11273}
11274
11275static void fuzz763_33(skiatest::Reporter* reporter, const char* filename) {
11276 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011277 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040011278path.moveTo(SkBits2Float(0x72c185d5), SkBits2Float(0x72c184e8)); // 7.66623e+30f, 7.66608e+30f
11279path.quadTo(SkBits2Float(0x724341bf), SkBits2Float(0x72433fc4), SkBits2Float(0x6d757575), SkBits2Float(0x6d6d6d6d)); // 3.86746e+30f, 3.86731e+30f, 4.74786e+27f, 4.59251e+27f
11280path.cubicTo(SkBits2Float(0x6d18b5e5), SkBits2Float(0x6d6d6d6d), SkBits2Float(0x6cbe03bd), SkBits2Float(0x6d4b455b), SkBits2Float(0x6c6c69d8), SkBits2Float(0x6d20df31)); // 2.95385e+27f, 4.59251e+27f, 1.83771e+27f, 3.93183e+27f, 1.14323e+27f, 3.11171e+27f
11281path.conicTo(SkBits2Float(0x6c6c8b72), SkBits2Float(0x00000000), SkBits2Float(0x6c6c6c6c), SkBits2Float(0x00000000), SkBits2Float(0x400812df)); // 1.14386e+27f, 0, 1.14327e+27f, 0, 2.12615f
11282path.quadTo(SkBits2Float(0x72432acb), SkBits2Float(0x72432295), SkBits2Float(0x72c185d5), SkBits2Float(0x72c184e8)); // 3.86568e+30f, 3.86505e+30f, 7.66623e+30f, 7.66608e+30f
11283path.close();
11284path.moveTo(SkBits2Float(0x72c185d5), SkBits2Float(0x72c184e8)); // 7.66623e+30f, 7.66608e+30f
11285path.cubicTo(SkBits2Float(0x74f97d76), SkBits2Float(0x74f97d90), SkBits2Float(0x75381628), SkBits2Float(0x7538182c), SkBits2Float(0x7538153b), SkBits2Float(0x75381835)); // 1.58133e+32f, 1.58133e+32f, 2.33357e+32f, 2.33367e+32f, 2.33353e+32f, 2.33368e+32f
11286path.cubicTo(SkBits2Float(0x7538144e), SkBits2Float(0x7538183f), SkBits2Float(0x74f9760f), SkBits2Float(0x74f97ddd), SkBits2Float(0x72c185d5), SkBits2Float(0x72c184e8)); // 2.33348e+32f, 2.33368e+32f, 1.58115e+32f, 1.58134e+32f, 7.66623e+30f, 7.66608e+30f
11287path.close();
11288path.moveTo(SkBits2Float(0x6c6c69d8), SkBits2Float(0x6d20df31)); // 1.14323e+27f, 3.11171e+27f
11289path.conicTo(SkBits2Float(0x6c6c55ae), SkBits2Float(0x6d80b520), SkBits2Float(0x6c6c1071), SkBits2Float(0x6e0f1d6c), SkBits2Float(0x3f96e656)); // 1.14284e+27f, 4.97913e+27f, 1.14154e+27f, 1.1073e+28f, 1.1789f
11290path.lineTo(SkBits2Float(0x6a674231), SkBits2Float(0x6c0c3394)); // 6.98936e+25f, 6.77973e+26f
11291path.cubicTo(SkBits2Float(0x6b12c63f), SkBits2Float(0x6c881439), SkBits2Float(0x6bba4ae5), SkBits2Float(0x6ced1e23), SkBits2Float(0x6c6c69d8), SkBits2Float(0x6d20df31)); // 1.77439e+26f, 1.31608e+27f, 4.50428e+26f, 2.29326e+27f, 1.14323e+27f, 3.11171e+27f
11292path.close();
11293
11294 SkPath path1(path);
11295 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011296 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011297path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11298path.lineTo(SkBits2Float(0x6c6b6ba7), SkBits2Float(0x886b6b6b)); // 1.13842e+27f, -7.0844e-34f
11299path.quadTo(SkBits2Float(0x0000206b), SkBits2Float(0x6d6d6d6d), SkBits2Float(0x6d6d6d6d), SkBits2Float(0x6d6d6d6d)); // 1.16294e-41f, 4.59251e+27f, 4.59251e+27f, 4.59251e+27f
11300path.conicTo(SkBits2Float(0x3e3e3e3e), SkBits2Float(0xafbcad20), SkBits2Float(0x78787878), SkBits2Float(0x78787829), SkBits2Float(0x78787878)); // 0.185784f, -3.432e-10f, 2.01583e+34f, 2.01582e+34f, 2.01583e+34f
11301path.lineTo(SkBits2Float(0x78787878), SkBits2Float(0x95066b78)); // 2.01583e+34f, -2.71459e-26f
11302path.lineTo(SkBits2Float(0x6c6b6ba7), SkBits2Float(0x886b6b6b)); // 1.13842e+27f, -7.0844e-34f
11303path.quadTo(SkBits2Float(0x0000206b), SkBits2Float(0x6d6d6d6d), SkBits2Float(0x6d6d6d6d), SkBits2Float(0x6d6d6d6d)); // 1.16294e-41f, 4.59251e+27f, 4.59251e+27f, 4.59251e+27f
11304path.conicTo(SkBits2Float(0x3e3e3e3e), SkBits2Float(0xafbcad20), SkBits2Float(0x78787878), SkBits2Float(0x78787829), SkBits2Float(0x78787878)); // 0.185784f, -3.432e-10f, 2.01583e+34f, 2.01582e+34f, 2.01583e+34f
11305path.lineTo(SkBits2Float(0x8787878f), SkBits2Float(0x87878787)); // -2.03922e-34f, -2.03922e-34f
11306path.lineTo(SkBits2Float(0x78787878), SkBits2Float(0x78787878)); // 2.01583e+34f, 2.01583e+34f
11307path.lineTo(SkBits2Float(0x78787878), SkBits2Float(0x78787878)); // 2.01583e+34f, 2.01583e+34f
11308path.lineTo(SkBits2Float(0x6c105778), SkBits2Float(0x6d406b64)); // 6.97994e+26f, 3.72193e+27f
11309path.cubicTo(SkBits2Float(0x7575756d), SkBits2Float(0x75757575), SkBits2Float(0x75757575), SkBits2Float(0x75757575), SkBits2Float(0x6d6d7575), SkBits2Float(0x6d6d6d6d)); // 3.11156e+32f, 3.11156e+32f, 3.11156e+32f, 3.11156e+32f, 4.59312e+27f, 4.59251e+27f
11310path.cubicTo(SkBits2Float(0x6d696d6d), SkBits2Float(0x026d6d6d), SkBits2Float(0x80bc6b6b), SkBits2Float(0xaebcdfd0), SkBits2Float(0x7878bcac), SkBits2Float(0x78787878)); // 4.51514e+27f, 1.74434e-37f, -1.73036e-38f, -8.58901e-11f, 2.01799e+34f, 2.01583e+34f
11311path.lineTo(SkBits2Float(0x78787878), SkBits2Float(0x78787878)); // 2.01583e+34f, 2.01583e+34f
11312path.lineTo(SkBits2Float(0x78787878), SkBits2Float(0x78787878)); // 2.01583e+34f, 2.01583e+34f
11313path.lineTo(SkBits2Float(0x78787878), SkBits2Float(0x78787878)); // 2.01583e+34f, 2.01583e+34f
11314path.lineTo(SkBits2Float(0xb4bcacbc), SkBits2Float(0xbcadbcbc)); // -3.51434e-07f, -0.0212082f
11315path.moveTo(SkBits2Float(0xa03aacbc), SkBits2Float(0x757575a0)); // -1.5812e-19f, 3.11157e+32f
11316path.close();
11317
11318 SkPath path2(path);
11319 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
11320}
11321
11322static void fuzz763_32(skiatest::Reporter* reporter, const char* filename) {
11323 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011324 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040011325
11326 SkPath path1(path);
11327 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011328 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011329path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11330path.cubicTo(SkBits2Float(0xdedcdcdc), SkBits2Float(0xdcdcdcdc), SkBits2Float(0xdcdcdcdc), SkBits2Float(0xdcdcdcdc), SkBits2Float(0x55dcdcdc), SkBits2Float(0x29407d7f)); // -7.95742e+18f, -4.97339e+17f, -4.97339e+17f, -4.97339e+17f, 3.03551e+13f, 4.27414e-14f
11331path.cubicTo(SkBits2Float(0x7b93ed4b), SkBits2Float(0x29521472), SkBits2Float(0xdfc83c28), SkBits2Float(0x1a3a834e), SkBits2Float(0x6855e84f), SkBits2Float(0xf2f22a80)); // 1.53616e+36f, 4.66471e-14f, -2.88569e+19f, 3.857e-23f, 4.0406e+24f, -9.59318e+30f
11332path.moveTo(SkBits2Float(0xe0f2f210), SkBits2Float(0xc3f2eef2)); // -1.40049e+20f, -485.867f
11333path.cubicTo(SkBits2Float(0x108ced7a), SkBits2Float(0x7bc00308), SkBits2Float(0x287a6a3a), SkBits2Float(0x242847ed), SkBits2Float(0x2bcb302a), SkBits2Float(0xf21003e8)); // 5.55862e-29f, 1.99396e+36f, 1.39008e-14f, 3.64901e-17f, 1.44374e-12f, -2.85252e+30f
11334path.moveTo(SkBits2Float(0x556c0010), SkBits2Float(0x002a8768)); // 1.62178e+13f, 3.90567e-39f
11335path.quadTo(SkBits2Float(0xf2f22021), SkBits2Float(0xf2f2f56e), SkBits2Float(0xf2f2f2f2), SkBits2Float(0xf22040d9)); // -9.59158e+30f, -9.62459e+30f, -9.6242e+30f, -3.17414e+30f
11336path.lineTo(SkBits2Float(0xc013f2f2), SkBits2Float(0x0000294d)); // -2.3117f, 1.48159e-41f
11337
11338 SkPath path2(path);
11339 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
11340}
11341
11342static void fuzz763_34(skiatest::Reporter* reporter, const char* filename) {
11343 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011344 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040011345path.moveTo(SkBits2Float(0x63a95a6c), SkBits2Float(0x6cc8e7e2)); // 6.24803e+21f, 1.94304e+27f
11346path.quadTo(SkBits2Float(0x63690f37), SkBits2Float(0x6d0a3d9b), SkBits2Float(0x00000000), SkBits2Float(0x6d3e3e3e)); // 4.29919e+21f, 2.67396e+27f, 0, 3.67984e+27f
11347path.conicTo(SkBits2Float(0x6b9253fc), SkBits2Float(0x6c956a8b), SkBits2Float(0x6c6ac798), SkBits2Float(0x692a5d27), SkBits2Float(0x3e56eb72)); // 3.538e+26f, 1.44506e+27f, 1.13532e+27f, 1.28723e+25f, 0.209883f
11348path.lineTo(SkBits2Float(0x6c6c586c), SkBits2Float(0x00000000)); // 1.1429e+27f, 0
11349path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11350path.conicTo(SkBits2Float(0x6c8c6c6c), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x6cc8e82a), SkBits2Float(0x5b684b68)); // 1.35809e+27f, 0, 0, 1.94305e+27f, 6.53851e+16f
11351path.lineTo(SkBits2Float(0x63a95a6c), SkBits2Float(0x6cc8e7e2)); // 6.24803e+21f, 1.94304e+27f
11352path.close();
11353path.moveTo(SkBits2Float(0x63a95a6c), SkBits2Float(0x6cc8e7e2)); // 6.24803e+21f, 1.94304e+27f
11354path.quadTo(SkBits2Float(0x641ae35f), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 1.14287e+22f, 0, 0, 0
11355path.lineTo(SkBits2Float(0x6c6c586c), SkBits2Float(0x00000000)); // 1.1429e+27f, 0
11356path.conicTo(SkBits2Float(0x6c6ba1fc), SkBits2Float(0x688c9eb1), SkBits2Float(0x6c6ac798), SkBits2Float(0x692a5d27), SkBits2Float(0x3f7fec32)); // 1.13945e+27f, 5.31247e+24f, 1.13532e+27f, 1.28723e+25f, 0.999698f
11357path.lineTo(SkBits2Float(0x63a95a6c), SkBits2Float(0x6cc8e7e2)); // 6.24803e+21f, 1.94304e+27f
11358path.close();
11359
11360 SkPath path1(path);
11361 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011362 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011363path.moveTo(SkBits2Float(0x6c3e3e3e), SkBits2Float(0x586c79ff)); // 9.19959e+26f, 1.04003e+15f
11364path.quadTo(SkBits2Float(0x6c6c4a6c), SkBits2Float(0x6c6c6c6c), SkBits2Float(0xc83e6c6c), SkBits2Float(0x3e313e3e)); // 1.14263e+27f, 1.14327e+27f, -194994, 0.173089f
11365
11366 SkPath path2(path);
11367 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
11368}
11369
11370static void fuzz763_36(skiatest::Reporter* reporter, const char* filename) {
11371 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011372 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011373
11374 SkPath path1(path);
11375 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011376 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011377path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29)); // 4.03114e+24f, 1.50617e+13f
11378path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108)); // 3.60396e-20f, -2.04889f
11379path.cubicTo(SkBits2Float(0x68392d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0)); // 3.4979e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 6.14991e+25f
11380path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x2d555b2d)); // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.21279e-11f
11381path.moveTo(SkBits2Float(0xe8355b2d), SkBits2Float(0xf0682955)); // -3.42572e+24f, -2.87402e+29f
11382path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x8cef552a), SkBits2Float(0x295b2d2a), SkBits2Float(0x68210368), SkBits2Float(0x7bc05508)); // 5.76397e-19f, -3.6875e-31f, 4.86669e-14f, 3.04146e+24f, 1.99729e+36f
11383path.lineTo(SkBits2Float(0xe8355b2d), SkBits2Float(0xf0682955)); // -3.42572e+24f, -2.87402e+29f
11384path.close();
11385path.moveTo(SkBits2Float(0xe8355b2d), SkBits2Float(0xf0682955)); // -3.42572e+24f, -2.87402e+29f
11386path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55)); // 4.85282e+16f, 5.7784e-19f
11387path.conicTo(SkBits2Float(0x212a081f), SkBits2Float(0x4b7bc003), SkBits2Float(0x5b2d7a6a), SkBits2Float(0xf0556839), SkBits2Float(0x2a8c555b)); // 5.7609e-19f, 1.64987e+07f, 4.88298e+16f, -2.64185e+29f, 2.49282e-13f
11388path.conicTo(SkBits2Float(0xf42a212a), SkBits2Float(0x4b7bc003), SkBits2Float(0x2aed7a39), SkBits2Float(0x2108c08c), SkBits2Float(0x7b03211f)); // -5.39162e+31f, 1.64987e+07f, 4.21845e-13f, 4.63334e-19f, 6.80863e+35f
11389path.lineTo(SkBits2Float(0xe8355b2d), SkBits2Float(0xf0682955)); // -3.42572e+24f, -2.87402e+29f
11390path.close();
11391path.moveTo(SkBits2Float(0xe8355b2d), SkBits2Float(0xf0682955)); // -3.42572e+24f, -2.87402e+29f
11392path.lineTo(SkBits2Float(0x6829ed27), SkBits2Float(0x2d555b2d)); // 3.20982e+24f, 1.21279e-11f
11393path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
11394path.conicTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x212a1f72), SkBits2Float(0x03210807), SkBits2Float(0x6a4b7b28), SkBits2Float(0x4793ed7a)); // 2.49282e-13f, 5.76399e-19f, 4.73229e-37f, 6.14984e+25f, 75739
11395path.lineTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
11396path.close();
11397path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
11398path.quadTo(SkBits2Float(0x282a282a), SkBits2Float(0x8a3adf21), SkBits2Float(0x284f1a3a), SkBits2Float(0x213ab38a)); // 9.4456e-15f, -8.99754e-33f, 1.14965e-14f, 6.32569e-19f
11399path.lineTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
11400path.close();
11401path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
11402path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x3a20002a), SkBits2Float(0x2a8ced29)); // 2.25206e-21f, 300.343f, 0.000610354f, 2.50336e-13f
11403path.lineTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
11404path.close();
11405path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
11406path.conicTo(SkBits2Float(0xed210830), SkBits2Float(0xc04b6a03), SkBits2Float(0x68297b27), SkBits2Float(0x55555b2d), SkBits2Float(0x2ab03a2a)); // -3.11481e+27f, -3.17835f, 3.20141e+24f, 1.46617e+13f, 3.13042e-13f
11407path.quadTo(SkBits2Float(0x2720213b), SkBits2Float(0x3a3b2729), SkBits2Float(0xc4341f20), SkBits2Float(0xecc52a22)); // 2.22225e-15f, 0.000713932f, -720.486f, -1.90686e+27f
11408path.cubicTo(SkBits2Float(0x5921c25d), SkBits2Float(0x29523a70), SkBits2Float(0x555b2d68), SkBits2Float(0x1f212a8c), SkBits2Float(0x0321d90a), SkBits2Float(0x5b2d6829)); // 2.8457e+15f, 4.66801e-14f, 1.50618e+13f, 3.41283e-20f, 4.75628e-37f, 4.88097e+16f
11409path.lineTo(SkBits2Float(0x1f2a2a8c), SkBits2Float(0x03210821)); // 3.60341e-20f, 4.7323e-37f
11410path.lineTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
11411path.close();
11412path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
11413path.conicTo(SkBits2Float(0x2eed6a7a), SkBits2Float(0x282a3a21), SkBits2Float(0x3a21df28), SkBits2Float(0x4f1a3a8a), SkBits2Float(0x3ab38a28)); // 1.07964e-10f, 9.4495e-15f, 0.000617492f, 2.58753e+09f, 0.00136978f
11414path.lineTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
11415path.close();
11416path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
11417path.quadTo(SkBits2Float(0xe61d2a28), SkBits2Float(0x2a43962b), SkBits2Float(0x29272a81), SkBits2Float(0x2bb02a55)); // -1.85547e+23f, 1.73716e-13f, 3.71183e-14f, 1.25173e-12f
11418path.quadTo(SkBits2Float(0x2720213b), SkBits2Float(0x3ac52729), SkBits2Float(0xc4223b32), SkBits2Float(0x6c2a201f)); // 2.22225e-15f, 0.00150416f, -648.925f, 8.22676e+26f
11419
11420 SkPath path2(path);
11421 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
11422}
11423
11424static void fuzz763_35(skiatest::Reporter* reporter, const char* filename) {
11425 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011426 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040011427
11428 SkPath path1(path);
11429 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011430 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011431path.moveTo(SkBits2Float(0x2aed2a8c), SkBits2Float(0x03210a1f)); // 4.21292e-13f, 4.73253e-37f
11432path.conicTo(SkBits2Float(0x0000007b), SkBits2Float(0x7474747f), SkBits2Float(0x74747474), SkBits2Float(0x747474c4), SkBits2Float(0x74747474)); // 1.7236e-43f, 7.74709e+31f, 7.74708e+31f, 7.74712e+31f, 7.74708e+31f
11433path.quadTo(SkBits2Float(0x74747474), SkBits2Float(0x74747474), SkBits2Float(0x20437474), SkBits2Float(0x43a52b02)); // 7.74708e+31f, 7.74708e+31f, 1.65557e-19f, 330.336f
11434path.moveTo(SkBits2Float(0x3a214781), SkBits2Float(0x2128282a)); // 0.000615232f, 5.69738e-19f
11435path.lineTo(SkBits2Float(0x4b7bd603), SkBits2Float(0x6cf33b6a)); // 1.65043e+07f, 2.3524e+27f
11436path.conicTo(SkBits2Float(0x35778caa), SkBits2Float(0x0000002a), SkBits2Float(0x74742164), SkBits2Float(0x2a3a7474), SkBits2Float(0x4cc22157)); // 9.22194e-07f, 5.88545e-44f, 7.7368e+31f, 1.65605e-13f, 1.0178e+08f
11437path.cubicTo(SkBits2Float(0x21479321), SkBits2Float(0x23434cc2), SkBits2Float(0x3a214793), SkBits2Float(0x2128282a), SkBits2Float(0x323adf81), SkBits2Float(0x77291a3a)); // 6.76185e-19f, 1.05872e-17f, 0.000615233f, 5.69738e-19f, 1.08774e-08f, 3.42981e+33f
11438path.conicTo(SkBits2Float(0x0000002a), SkBits2Float(0x7474743e), SkBits2Float(0x74747474), SkBits2Float(0x74746474), SkBits2Float(0x74747474)); // 5.88545e-44f, 7.74706e+31f, 7.74708e+31f, 7.7451e+31f, 7.74708e+31f
11439path.cubicTo(SkBits2Float(0x21e7fc06), SkBits2Float(0x2a212a59), SkBits2Float(0x0321081f), SkBits2Float(0x00002a35), SkBits2Float(0x74744000), SkBits2Float(0x2974e874)); // 1.57199e-18f, 1.43144e-13f, 4.7323e-37f, 1.5141e-41f, 7.74059e+31f, 5.43805e-14f
11440path.cubicTo(SkBits2Float(0x74647474), SkBits2Float(0x74747474), SkBits2Float(0x12ec7474), SkBits2Float(0x4cc22147), SkBits2Float(0x47932343), SkBits2Float(0x282a3a21)); // 7.24002e+31f, 7.74708e+31f, 1.49224e-27f, 1.0178e+08f, 75334.5f, 9.4495e-15f
11441path.lineTo(SkBits2Float(0x3a214781), SkBits2Float(0x2128282a)); // 0.000615232f, 5.69738e-19f
11442path.close();
11443path.moveTo(SkBits2Float(0x3a214781), SkBits2Float(0x2128282a)); // 0.000615232f, 5.69738e-19f
11444path.conicTo(SkBits2Float(0x3a323adf), SkBits2Float(0x4977291a), SkBits2Float(0x0000002a), SkBits2Float(0x7474743e), SkBits2Float(0x74747474)); // 0.000679893f, 1.01237e+06f, 5.88545e-44f, 7.74706e+31f, 7.74708e+31f
11445path.cubicTo(SkBits2Float(0x74747464), SkBits2Float(0x74747474), SkBits2Float(0x21e7fc06), SkBits2Float(0x2a212a59), SkBits2Float(0x0321081f), SkBits2Float(0x00002a35)); // 7.74708e+31f, 7.74708e+31f, 1.57199e-18f, 1.43144e-13f, 4.7323e-37f, 1.5141e-41f
11446path.moveTo(SkBits2Float(0x74747440), SkBits2Float(0x742974e8)); // 7.74706e+31f, 5.3703e+31f
11447path.cubicTo(SkBits2Float(0x74746474), SkBits2Float(0x74747474), SkBits2Float(0xd912ec74), SkBits2Float(0x553a3728), SkBits2Float(0x29202a8c), SkBits2Float(0x5555201b)); // 7.7451e+31f, 7.74708e+31f, -2.58471e+15f, 1.27966e+13f, 3.5564e-14f, 1.46459e+13f
11448path.moveTo(SkBits2Float(0x31292768), SkBits2Float(0x212d2aff)); // 2.46151e-09f, 5.86716e-19f
11449path.quadTo(SkBits2Float(0x2128282a), SkBits2Float(0x323adf81), SkBits2Float(0x77291a3a), SkBits2Float(0x00002a49)); // 5.69738e-19f, 1.08774e-08f, 3.42981e+33f, 1.51691e-41f
11450path.moveTo(SkBits2Float(0x7474743e), SkBits2Float(0x74747474)); // 7.74706e+31f, 7.74708e+31f
11451path.cubicTo(SkBits2Float(0x74747464), SkBits2Float(0x74747474), SkBits2Float(0x21e7fc06), SkBits2Float(0x2a212a59), SkBits2Float(0x0321081f), SkBits2Float(0x00002a35)); // 7.74708e+31f, 7.74708e+31f, 1.57199e-18f, 1.43144e-13f, 4.7323e-37f, 1.5141e-41f
11452path.moveTo(SkBits2Float(0x74747440), SkBits2Float(0x74747474)); // 7.74706e+31f, 7.74708e+31f
11453path.cubicTo(SkBits2Float(0x74747464), SkBits2Float(0x74747474), SkBits2Float(0x43747474), SkBits2Float(0xa52b0220), SkBits2Float(0x47812a43), SkBits2Float(0x282a3a21)); // 7.74708e+31f, 7.74708e+31f, 244.455f, -1.48326e-16f, 66132.5f, 9.4495e-15f
11454path.lineTo(SkBits2Float(0x74747440), SkBits2Float(0x74747474)); // 7.74706e+31f, 7.74708e+31f
11455path.close();
11456path.moveTo(SkBits2Float(0x74747440), SkBits2Float(0x74747474)); // 7.74706e+31f, 7.74708e+31f
11457path.conicTo(SkBits2Float(0x3a323adf), SkBits2Float(0x19433b1a), SkBits2Float(0x5921e7fc), SkBits2Float(0x1f2a212a), SkBits2Float(0x35032108)); // 0.000679893f, 1.00932e-23f, 2.84828e+15f, 3.60263e-20f, 4.88494e-07f
11458
11459 SkPath path2(path);
11460 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
11461}
11462
11463static void fuzz763_37(skiatest::Reporter* reporter, const char* filename) {
11464 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011465 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011466path.moveTo(SkBits2Float(0x5568392a), SkBits2Float(0x5b2d3368)); // 1.59583e+13f, 4.87517e+16f
11467path.conicTo(SkBits2Float(0x5b2d555b), SkBits2Float(0x68275b2d), SkBits2Float(0x21685527), SkBits2Float(0x0321082a), SkBits2Float(0x6ab485c0)); // 4.8789e+16f, 3.16127e+24f, 7.87174e-19f, 4.7323e-37f, 1.09119e+26f
11468path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x5b2d2d55)); // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 4.8745e+16f
11469path.moveTo(SkBits2Float(0x6839552d), SkBits2Float(0xf0683b5b)); // 3.50084e+24f, -2.87489e+29f
11470path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x2a8cef2a), SkBits2Float(0x682d2953), SkBits2Float(0xee682103), SkBits2Float(0x4b7bc055)); // 5.76397e-19f, 2.50349e-13f, 3.27093e+24f, -1.79601e+28f, 1.64988e+07f
11471path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55)); // 4.85282e+16f, 5.7784e-19f
11472path.conicTo(SkBits2Float(0x4b03213b), SkBits2Float(0xc07b2a08), SkBits2Float(0x5b2d7a6a), SkBits2Float(0xf0556830), SkBits2Float(0x2a8c555b)); // 8.59372e+06f, -3.92444f, 4.88298e+16f, -2.64185e+29f, 2.49282e-13f
11473path.conicTo(SkBits2Float(0x0321212a), SkBits2Float(0x4b7bd2c0), SkBits2Float(0xed7ac039), SkBits2Float(0x2f218c08), SkBits2Float(0x1f037b2a)); // 4.73517e-37f, 1.65035e+07f, -4.85023e+27f, 1.46926e-10f, 2.78422e-20f
11474path.lineTo(SkBits2Float(0x6839552d), SkBits2Float(0xf0683b5b)); // 3.50084e+24f, -2.87489e+29f
11475path.close();
11476path.moveTo(SkBits2Float(0x6839552d), SkBits2Float(0xf0683b5b)); // 3.50084e+24f, -2.87489e+29f
11477path.lineTo(SkBits2Float(0x6829ed27), SkBits2Float(0x2d555b2d)); // 3.20982e+24f, 1.21279e-11f
11478path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
11479path.conicTo(SkBits2Float(0x721f2a5b), SkBits2Float(0x212a8c55), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7b28), SkBits2Float(0x4793ed7a)); // 3.1526e+30f, 5.7784e-19f, 4.7323e-37f, 6.14984e+25f, 75739
11480path.lineTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
11481path.close();
11482path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
11483path.quadTo(SkBits2Float(0x28282a2a), SkBits2Float(0x2c682921), SkBits2Float(0x8c555bf6), SkBits2Float(0x6d03de30)); // 9.33502e-15f, 3.2992e-12f, -1.64366e-31f, 2.5507e+27f
11484path.cubicTo(SkBits2Float(0x68392d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x081f2a21)); // 3.4979e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 4.78968e-34f
11485path.lineTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
11486path.close();
11487path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
11488path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0xdf93ed7a), SkBits2Float(0x1a3a803a), SkBits2Float(0xb38a294f), SkBits2Float(0x3ac2213a)); // 6.14991e+25f, -2.13186e+19f, 3.85675e-23f, -6.43364e-08f, 0.00148109f
11489path.lineTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
11490path.close();
11491path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
11492path.conicTo(SkBits2Float(0xe62b291d), SkBits2Float(0x2a812a43), SkBits2Float(0x8ced093a), SkBits2Float(0xb38a5c5c), SkBits2Float(0x3ac2213a)); // -2.02071e+23f, 2.29443e-13f, -3.65212e-31f, -6.44293e-08f, 0.00148109f
11493path.lineTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
11494path.close();
11495path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
11496path.lineTo(SkBits2Float(0x8ced293a), SkBits2Float(0x5c5c5c5c)); // -3.65404e-31f, 2.48104e+17f
11497path.moveTo(SkBits2Float(0x21081f21), SkBits2Float(0x4b7bc003)); // 4.61198e-19f, 1.64987e+07f
11498path.lineTo(SkBits2Float(0x2829ed84), SkBits2Float(0x5b2d2d55)); // 9.43289e-15f, 4.8745e+16f
11499path.moveTo(SkBits2Float(0x6839552d), SkBits2Float(0xf0683b5a)); // 3.50084e+24f, -2.87489e+29f
11500path.lineTo(SkBits2Float(0x682d2952), SkBits2Float(0xee682103)); // 3.27093e+24f, -1.79601e+28f
11501path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x2a3b0355)); // 4.85282e+16f, 1.66101e-13f
11502path.lineTo(SkBits2Float(0x6839552d), SkBits2Float(0xf0683b5a)); // 3.50084e+24f, -2.87489e+29f
11503path.close();
11504path.moveTo(SkBits2Float(0x6839552d), SkBits2Float(0xf0683b5a)); // 3.50084e+24f, -2.87489e+29f
11505path.conicTo(SkBits2Float(0x084b218c), SkBits2Float(0x6ac07b2a), SkBits2Float(0x395b2d7a), SkBits2Float(0x5bf05568), SkBits2Float(0x1f2a8c55)); // 6.11275e-34f, 1.16348e+26f, 0.000209024f, 1.35296e+17f, 3.6115e-20f
11506
11507 SkPath path1(path);
11508 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011509 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011510path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11511path.cubicTo(SkBits2Float(0xbcb4bcac), SkBits2Float(0x000029ff), SkBits2Float(0x010000bc), SkBits2Float(0x00bcbc00), SkBits2Float(0xbebcbcbc), SkBits2Float(0xb6aebcae)); // -0.0220626f, 1.50654e-41f, 2.35104e-38f, 1.73325e-38f, -0.368627f, -5.20757e-06f
11512
11513 SkPath path2(path);
11514 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
11515}
11516
11517static void fuzz763_38(skiatest::Reporter* reporter, const char* filename) {
11518 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011519 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011520path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11521path.conicTo(SkBits2Float(0x5b682968), SkBits2Float(0x5b292d11), SkBits2Float(0x212a8c55), SkBits2Float(0x555b2d2d), SkBits2Float(0x52525268)); // 6.53477e+16f, 4.76188e+16f, 5.7784e-19f, 1.50617e+13f, 2.25831e+11f
11522path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11523path.close();
11524path.moveTo(SkBits2Float(0xa5252600), SkBits2Float(0x52b4adad)); // -1.43243e-16f, 3.88004e+11f
11525path.close();
11526path.moveTo(SkBits2Float(0xa5252600), SkBits2Float(0x52b4adad)); // -1.43243e-16f, 3.88004e+11f
11527path.quadTo(SkBits2Float(0x72727270), SkBits2Float(0x52525272), SkBits2Float(0x2ac05252), SkBits2Float(0x727fb721)); // 4.80216e+30f, 2.25832e+11f, 3.41632e-13f, 5.06496e+30f
11528path.lineTo(SkBits2Float(0x73727322), SkBits2Float(0x555b2d29)); // 1.92088e+31f, 1.50617e+13f
11529path.lineTo(SkBits2Float(0xab2a212e), SkBits2Float(0x7a27872a)); // -6.04422e-13f, 2.17464e+35f
11530path.moveTo(SkBits2Float(0x25fffefb), SkBits2Float(0x7bc00321)); // 4.44082e-16f, 1.99397e+36f
11531path.quadTo(SkBits2Float(0x52524852), SkBits2Float(0x72525228), SkBits2Float(0x72727272), SkBits2Float(0x3a727272)); // 2.25789e+11f, 4.16584e+30f, 4.80216e+30f, 0.000924862f
11532path.lineTo(SkBits2Float(0x25fffefb), SkBits2Float(0x7bc00321)); // 4.44082e-16f, 1.99397e+36f
11533path.close();
11534path.moveTo(SkBits2Float(0x25fffefb), SkBits2Float(0x7bc00321)); // 4.44082e-16f, 1.99397e+36f
11535path.quadTo(SkBits2Float(0x2a292827), SkBits2Float(0x962b0080), SkBits2Float(0x5252752a), SkBits2Float(0x72725252)); // 1.50241e-13f, -1.38134e-25f, 2.25977e+11f, 4.79967e+30f
11536path.quadTo(SkBits2Float(0x72725252), SkBits2Float(0x52525272), SkBits2Float(0x72525252), SkBits2Float(0x72727272)); // 4.79967e+30f, 2.25832e+11f, 4.16585e+30f, 4.80216e+30f
11537path.quadTo(SkBits2Float(0x72727255), SkBits2Float(0xda000072), SkBits2Float(0x52525ada), SkBits2Float(0x52525252)); // 4.80215e+30f, -9.00732e+15f, 2.25867e+11f, 2.25831e+11f
11538path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x52525272), SkBits2Float(0x72525248), SkBits2Float(0x72727272)); // 4.80216e+30f, 2.25832e+11f, 4.16584e+30f, 4.80216e+30f
11539path.quadTo(SkBits2Float(0x72727255), SkBits2Float(0xda007b72), SkBits2Float(0x52525ada), SkBits2Float(0x52525252)); // 4.80215e+30f, -9.04113e+15f, 2.25867e+11f, 2.25831e+11f
11540path.quadTo(SkBits2Float(0x86727272), SkBits2Float(0x5252528d), SkBits2Float(0x72525252), SkBits2Float(0x72727227)); // -4.55992e-35f, 2.25832e+11f, 4.16585e+30f, 4.80214e+30f
11541path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x29217272), SkBits2Float(0xc003211c), SkBits2Float(0x556a4b7b)); // 4.80216e+30f, 3.58484e-14f, -2.0489f, 1.61006e+13f
11542path.moveTo(SkBits2Float(0x72557272), SkBits2Float(0x00727272)); // 4.22775e+30f, 1.05103e-38f
11543path.moveTo(SkBits2Float(0x5a61dada), SkBits2Float(0x52525252)); // 1.58931e+16f, 2.25831e+11f
11544path.close();
11545path.moveTo(SkBits2Float(0x5a61dada), SkBits2Float(0x52525252)); // 1.58931e+16f, 2.25831e+11f
11546path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x3a727272), SkBits2Float(0x28273ac2), SkBits2Float(0x00802a29)); // 4.80216e+30f, 0.000924862f, 9.2831e-15f, 1.17701e-38f
11547path.lineTo(SkBits2Float(0x52752a96), SkBits2Float(0x72525252)); // 2.63245e+11f, 4.16585e+30f
11548path.quadTo(SkBits2Float(0x72525272), SkBits2Float(0x52527272), SkBits2Float(0x52525252), SkBits2Float(0x72727272)); // 4.16586e+30f, 2.25966e+11f, 2.25831e+11f, 4.80216e+30f
11549path.quadTo(SkBits2Float(0x72725572), SkBits2Float(0x00007272), SkBits2Float(0x525adada), SkBits2Float(0x52525252)); // 4.79991e+30f, 4.10552e-41f, 2.34994e+11f, 2.25831e+11f
11550path.lineTo(SkBits2Float(0x5a61dada), SkBits2Float(0x52525252)); // 1.58931e+16f, 2.25831e+11f
11551path.close();
11552path.moveTo(SkBits2Float(0x5a61dada), SkBits2Float(0x52525252)); // 1.58931e+16f, 2.25831e+11f
11553path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x52525272), SkBits2Float(0x72525248), SkBits2Float(0x72727272)); // 4.80216e+30f, 2.25832e+11f, 4.16584e+30f, 4.80216e+30f
11554path.quadTo(SkBits2Float(0x72727255), SkBits2Float(0xda007b72), SkBits2Float(0x52525ada), SkBits2Float(0x72525252)); // 4.80215e+30f, -9.04113e+15f, 2.25867e+11f, 4.16585e+30f
11555path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x72727252), SkBits2Float(0xda007b72), SkBits2Float(0x52525ada)); // 4.80216e+30f, 4.80215e+30f, -9.04113e+15f, 2.25867e+11f
11556path.lineTo(SkBits2Float(0x5a61dada), SkBits2Float(0x52525252)); // 1.58931e+16f, 2.25831e+11f
11557path.close();
11558path.moveTo(SkBits2Float(0x5a61dada), SkBits2Float(0x52525252)); // 1.58931e+16f, 2.25831e+11f
11559path.quadTo(SkBits2Float(0x86727272), SkBits2Float(0x5252528d), SkBits2Float(0x72525252), SkBits2Float(0x72727227)); // -4.55992e-35f, 2.25832e+11f, 4.16585e+30f, 4.80214e+30f
11560path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x29217272), SkBits2Float(0xc003211c), SkBits2Float(0x556a4b7b)); // 4.80216e+30f, 3.58484e-14f, -2.0489f, 1.61006e+13f
11561path.moveTo(SkBits2Float(0x72557272), SkBits2Float(0x00727272)); // 4.22775e+30f, 1.05103e-38f
11562path.moveTo(SkBits2Float(0x525adada), SkBits2Float(0x52525252)); // 2.34994e+11f, 2.25831e+11f
11563path.close();
11564path.moveTo(SkBits2Float(0xa5252600), SkBits2Float(0x52b4adad)); // -1.43243e-16f, 3.88004e+11f
11565path.close();
11566path.moveTo(SkBits2Float(0xa5252600), SkBits2Float(0x52b4adad)); // -1.43243e-16f, 3.88004e+11f
11567path.quadTo(SkBits2Float(0x72727270), SkBits2Float(0x52525272), SkBits2Float(0x72525252), SkBits2Float(0x72727272)); // 4.80216e+30f, 2.25832e+11f, 4.16585e+30f, 4.80216e+30f
11568path.quadTo(SkBits2Float(0x72727255), SkBits2Float(0xda007b72), SkBits2Float(0x52525ada), SkBits2Float(0x52525252)); // 4.80215e+30f, -9.04113e+15f, 2.25867e+11f, 2.25831e+11f
11569path.quadTo(SkBits2Float(0x52525272), SkBits2Float(0x3b3b0052), SkBits2Float(0x5b2d553a), SkBits2Float(0x68556829)); // 2.25832e+11f, 0.00285341f, 4.87889e+16f, 4.03114e+24f
11570
11571 SkPath path1(path);
11572 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011573 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011574path.moveTo(SkBits2Float(0x52528c55), SkBits2Float(0x29215252)); // 2.26074e+11f, 3.58206e-14f
11575
11576 SkPath path2(path);
11577 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
11578}
11579
11580static void fuzz763_41(skiatest::Reporter* reporter, const char* filename) {
11581 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011582 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011583
11584 SkPath path1(path);
11585 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011586 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011587path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11588path.quadTo(SkBits2Float(0x7a057c72), SkBits2Float(0x72727272), SkBits2Float(0x725b5e72), SkBits2Float(0x055f0089)); // 1.73275e+35f, 4.80216e+30f, 4.34505e+30f, 1.04855e-35f
11589path.quadTo(SkBits2Float(0x00057272), SkBits2Float(0x72ff0000), SkBits2Float(0xba405e72), SkBits2Float(0x031b0074)); // 5.00233e-40f, 1.01016e+31f, -0.000733829f, 4.55509e-37f
11590path.lineTo(SkBits2Float(0x664af700), SkBits2Float(0x56397d39)); // 2.39619e+23f, 5.09869e+13f
11591path.quadTo(SkBits2Float(0x7a057273), SkBits2Float(0x057300e4), SkBits2Float(0x257c0c9f), SkBits2Float(0x72400006)); // 1.73224e+35f, 1.1426e-35f, 2.18618e-16f, 3.80295e+30f
11592path.quadTo(SkBits2Float(0xba5b5e72), SkBits2Float(0x030000ff), SkBits2Float(0x74ba00e8), SkBits2Float(0xe8ec4000)); // -0.000836826f, 3.7617e-37f, 1.17894e+32f, -8.92527e+24f
11593path.moveTo(SkBits2Float(0x39724aff), SkBits2Float(0x7200397d)); // 0.000231069f, 2.53975e+30f
11594path.quadTo(SkBits2Float(0x827a0572), SkBits2Float(0x08727272), SkBits2Float(0x08080808), SkBits2Float(0x08080808)); // -1.83687e-37f, 7.29588e-34f, 4.09355e-34f, 4.09355e-34f
11595path.lineTo(SkBits2Float(0x08080808), SkBits2Float(0x08080808)); // 4.09355e-34f, 4.09355e-34f
11596path.lineTo(SkBits2Float(0x08080808), SkBits2Float(0x08080808)); // 4.09355e-34f, 4.09355e-34f
11597path.conicTo(SkBits2Float(0x72728c08), SkBits2Float(0x5b5e7272), SkBits2Float(0x000074ba), SkBits2Float(0x03f8e300), SkBits2Float(0x5aff00e8)); // 4.80414e+30f, 6.26133e+16f, 4.18736e-41f, 1.46282e-36f, 3.58886e+16f
11598path.quadTo(SkBits2Float(0x00800039), SkBits2Float(0x72100039), SkBits2Float(0x727a0572), SkBits2Float(0x7a727272)); // 1.1755e-38f, 2.85223e+30f, 4.95218e+30f, 3.14714e+35f
11599path.lineTo(SkBits2Float(0x7272727a), SkBits2Float(0xdb5e6472)); // 4.80216e+30f, -6.25979e+16f
11600path.moveTo(SkBits2Float(0x440039fc), SkBits2Float(0x0000f647)); // 512.906f, 8.83477e-41f
11601path.lineTo(SkBits2Float(0x666d0100), SkBits2Float(0x726efe62)); // 2.79805e+23f, 4.73376e+30f
11602path.lineTo(SkBits2Float(0x440039fc), SkBits2Float(0x0000f647)); // 512.906f, 8.83477e-41f
11603path.close();
11604path.moveTo(SkBits2Float(0x440039fc), SkBits2Float(0x0000f647)); // 512.906f, 8.83477e-41f
11605path.conicTo(SkBits2Float(0x72727272), SkBits2Float(0xf3db5e64), SkBits2Float(0x475afc16), SkBits2Float(0x170100ad), SkBits2Float(0x01008000)); // 4.80216e+30f, -3.47604e+31f, 56060.1f, 4.1683e-25f, 2.36017e-38f
11606path.quadTo(SkBits2Float(0x72057272), SkBits2Float(0x8c7a3472), SkBits2Float(0x72727272), SkBits2Float(0x00f6475e)); // 2.64319e+30f, -1.92751e-31f, 4.80216e+30f, 2.26171e-38f
11607path.moveTo(SkBits2Float(0x6d106d43), SkBits2Float(0x6efe6266)); // 2.79362e+27f, 3.93641e+28f
11608path.quadTo(SkBits2Float(0x72727a05), SkBits2Float(0xba5b7272), SkBits2Float(0x03000074), SkBits2Float(0x5aff00e8)); // 4.80274e+30f, -0.000837124f, 3.76163e-37f, 3.58886e+16f
11609path.quadTo(SkBits2Float(0x00da0039), SkBits2Float(0x72100039), SkBits2Float(0x727a0572), SkBits2Float(0x7a727272)); // 2.00202e-38f, 2.85223e+30f, 4.95218e+30f, 3.14714e+35f
11610path.lineTo(SkBits2Float(0x7272727a), SkBits2Float(0xdb5e6472)); // 4.80216e+30f, -6.25979e+16f
11611path.lineTo(SkBits2Float(0xfc5b97fc), SkBits2Float(0x47440039)); // -4.56078e+36f, 50176.2f
11612path.lineTo(SkBits2Float(0x00710000), SkBits2Float(0x62766d01)); // 1.03774e-38f, 1.13644e+21f
11613path.quadTo(SkBits2Float(0x7a05726e), SkBits2Float(0x72727272), SkBits2Float(0xf3db5e64), SkBits2Float(0x4a5afc16)); // 1.73224e+35f, 4.80216e+30f, -3.47604e+31f, 3.58785e+06f
11614
11615 SkPath path2(path);
11616 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
11617}
11618
11619static void fuzz763_40(skiatest::Reporter* reporter, const char* filename) {
11620 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011621 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040011622
11623 SkPath path1(path);
11624 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011625 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011626path.moveTo(SkBits2Float(0x10190004), SkBits2Float(0x7272727a)); // 3.01739e-29f, 4.80216e+30f
11627path.quadTo(SkBits2Float(0xf3db5e64), SkBits2Float(0x5b97fc16), SkBits2Float(0x000039fc), SkBits2Float(0x01008000)); // -3.47604e+31f, 8.55598e+16f, 2.08009e-41f, 2.36017e-38f
11628path.quadTo(SkBits2Float(0x7a057272), SkBits2Float(0x72727272), SkBits2Float(0x725b5e72), SkBits2Float(0x41720089)); // 1.73224e+35f, 4.80216e+30f, 4.34505e+30f, 15.1251f
11629path.lineTo(SkBits2Float(0x63636363), SkBits2Float(0x63606363)); // 4.19457e+21f, 4.13923e+21f
11630path.lineTo(SkBits2Float(0x01000000), SkBits2Float(0x10010004)); // 2.35099e-38f, 2.54408e-29f
11631path.conicTo(SkBits2Float(0x72727272), SkBits2Float(0xf3db5e64), SkBits2Float(0x4a5afc16), SkBits2Float(0x0000d07d), SkBits2Float(0x01008000)); // 4.80216e+30f, -3.47604e+31f, 3.58785e+06f, 7.47915e-41f, 2.36017e-38f
11632path.quadTo(SkBits2Float(0x7a057272), SkBits2Float(0x72727272), SkBits2Float(0x725b5e72), SkBits2Float(0x63720089)); // 1.73224e+35f, 4.80216e+30f, 4.34505e+30f, 4.46415e+21f
11633path.lineTo(SkBits2Float(0x63636363), SkBits2Float(0x63606363)); // 4.19457e+21f, 4.13923e+21f
11634path.lineTo(SkBits2Float(0x72000000), SkBits2Float(0x5b5e72b4)); // 2.5353e+30f, 6.26136e+16f
11635path.quadTo(SkBits2Float(0x05720089), SkBits2Float(0x05727272), SkBits2Float(0x7272727a), SkBits2Float(0x5b5e7272)); // 1.13789e-35f, 1.13998e-35f, 4.80216e+30f, 6.26133e+16f
11636path.cubicTo(SkBits2Float(0x03000074), SkBits2Float(0x4aff00e8), SkBits2Float(0x397d3972), SkBits2Float(0x01727200), SkBits2Float(0x72727a00), SkBits2Float(0x5e8d7272)); // 3.76163e-37f, 8.35596e+06f, 0.000241494f, 4.45302e-38f, 4.80274e+30f, 5.09617e+18f
11637path.moveTo(SkBits2Float(0x72008972), SkBits2Float(0x458fe705)); // 2.54594e+30f, 4604.88f
11638path.quadTo(SkBits2Float(0x7a057272), SkBits2Float(0xe8727272), SkBits2Float(0xba5b5e03), SkBits2Float(0x03000074)); // 1.73224e+35f, -4.5797e+24f, -0.00083682f, 3.76163e-37f
11639path.lineTo(SkBits2Float(0xf3dbff00), SkBits2Float(0x00397d16)); // -3.48598e+31f, 5.2795e-39f
11640path.cubicTo(SkBits2Float(0x7a101900), SkBits2Float(0x72727272), SkBits2Float(0xf3db5e64), SkBits2Float(0x0197fc16), SkBits2Float(0x200c2010), SkBits2Float(0x20203620)); // 1.87049e+35f, 4.80216e+30f, -3.47604e+31f, 5.58304e-38f, 1.18691e-19f, 1.35704e-19f
11641
11642 SkPath path2(path);
11643 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
11644}
11645
11646static void fuzz763_39(skiatest::Reporter* reporter, const char* filename) {
11647 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011648 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011649
11650 SkPath path1(path);
11651 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011652 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011653path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11654path.quadTo(SkBits2Float(0x7a057c72), SkBits2Float(0x72727272), SkBits2Float(0x725b5e72), SkBits2Float(0x055f0089)); // 1.73275e+35f, 4.80216e+30f, 4.34505e+30f, 1.04855e-35f
11655path.quadTo(SkBits2Float(0x7a057272), SkBits2Float(0x72727272), SkBits2Float(0xba405e72), SkBits2Float(0x03000074)); // 1.73224e+35f, 4.80216e+30f, -0.000733829f, 3.76163e-37f
11656path.lineTo(SkBits2Float(0x664aff00), SkBits2Float(0x56397d39)); // 2.39655e+23f, 5.09869e+13f
11657path.quadTo(SkBits2Float(0x7a057273), SkBits2Float(0x057300ff), SkBits2Float(0x257c0c9f), SkBits2Float(0x72787257)); // 1.73224e+35f, 1.1426e-35f, 2.18618e-16f, 4.92099e+30f
11658path.quadTo(SkBits2Float(0xba5b5e72), SkBits2Float(0x03000093), SkBits2Float(0x74ba00e8), SkBits2Float(0xe8ecff00)); // -0.000836826f, 3.76165e-37f, 1.17894e+32f, -8.95346e+24f
11659path.moveTo(SkBits2Float(0x39724aff), SkBits2Float(0x7200397d)); // 0.000231069f, 2.53975e+30f
11660path.quadTo(SkBits2Float(0x827a0572), SkBits2Float(0x72727272), SkBits2Float(0x724adf00), SkBits2Float(0x00397d39)); // -1.83687e-37f, 4.80216e+30f, 4.01828e+30f, 5.27954e-39f
11661path.quadTo(SkBits2Float(0x7a057272), SkBits2Float(0x16f3abab), SkBits2Float(0xfc5b97fc), SkBits2Float(0x47440039)); // 1.73224e+35f, 3.93671e-25f, -4.56078e+36f, 50176.2f
11662path.lineTo(SkBits2Float(0x00710000), SkBits2Float(0x62767201)); // 1.03774e-38f, 1.13653e+21f
11663path.quadTo(SkBits2Float(0x7a05726e), SkBits2Float(0x72727272), SkBits2Float(0xf3db5e64), SkBits2Float(0x4a5afc16)); // 1.73224e+35f, 4.80216e+30f, -3.47604e+31f, 3.58785e+06f
11664
11665 SkPath path2(path);
11666 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
11667}
11668
11669
11670static void fuzz763_42(skiatest::Reporter* reporter, const char* filename) {
11671 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011672 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011673
11674 SkPath path1(path);
11675 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011676 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011677path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11678path.quadTo(SkBits2Float(0x7a057272), SkBits2Float(0x72727272), SkBits2Float(0x725b5e72), SkBits2Float(0x05720089)); // 1.73224e+35f, 4.80216e+30f, 4.34505e+30f, 1.13789e-35f
11679path.quadTo(SkBits2Float(0x7a057272), SkBits2Float(0x72727272), SkBits2Float(0xba405e72), SkBits2Float(0x03000074)); // 1.73224e+35f, 4.80216e+30f, -0.000733829f, 3.76163e-37f
11680path.lineTo(SkBits2Float(0x724aff00), SkBits2Float(0x56397d39)); // 4.02075e+30f, 5.09869e+13f
11681path.quadTo(SkBits2Float(0x7a057272), SkBits2Float(0xfa8d00ff), SkBits2Float(0x25727272), SkBits2Float(0x7272727a)); // 1.73224e+35f, -3.66067e+35f, 2.10289e-16f, 4.80216e+30f
11682path.quadTo(SkBits2Float(0xba5b5e72), SkBits2Float(0x03000093), SkBits2Float(0x74ba00e8), SkBits2Float(0xe8e0ff00)); // -0.000836826f, 3.76165e-37f, 1.17894e+32f, -8.50011e+24f
11683path.conicTo(SkBits2Float(0x39724aff), SkBits2Float(0x7200397d), SkBits2Float(0x7a057272), SkBits2Float(0x72727272), SkBits2Float(0x4aff0072)); // 0.000231069f, 2.53975e+30f, 1.73224e+35f, 4.80216e+30f, 8.3559e+06f
11684path.quadTo(SkBits2Float(0x00397d39), SkBits2Float(0x05727272), SkBits2Float(0x7272727a), SkBits2Float(0x385e7272)); // 5.27954e-39f, 1.13998e-35f, 4.80216e+30f, 5.30355e-05f
11685path.quadTo(SkBits2Float(0x057200ff), SkBits2Float(0x25727272), SkBits2Float(0x7272727a), SkBits2Float(0x5b5e7272)); // 1.1379e-35f, 2.10289e-16f, 4.80216e+30f, 6.26133e+16f
11686path.cubicTo(SkBits2Float(0x03000074), SkBits2Float(0x4aff00e8), SkBits2Float(0x397d3972), SkBits2Float(0x01000400), SkBits2Float(0x72727a10), SkBits2Float(0x5e647272)); // 3.76163e-37f, 8.35596e+06f, 0.000241494f, 2.35128e-38f, 4.80275e+30f, 4.11534e+18f
11687path.quadTo(SkBits2Float(0x2b2d16f3), SkBits2Float(0x0039fc4d), SkBits2Float(0x68800000), SkBits2Float(0x0100fafa)); // 6.14938e-13f, 5.32513e-39f, 4.8357e+24f, 2.369e-38f
11688path.quadTo(SkBits2Float(0x7a057272), SkBits2Float(0x72727272), SkBits2Float(0x725b5e72), SkBits2Float(0x63720089)); // 1.73224e+35f, 4.80216e+30f, 4.34505e+30f, 4.46415e+21f
11689path.lineTo(SkBits2Float(0x63636363), SkBits2Float(0x63606363)); // 4.19457e+21f, 4.13923e+21f
11690path.lineTo(SkBits2Float(0x72720000), SkBits2Float(0xff725b5e)); // 4.7933e+30f, -3.22148e+38f
11691path.moveTo(SkBits2Float(0x72720572), SkBits2Float(0x5b5e2572)); // 4.79373e+30f, 6.25286e+16f
11692path.quadTo(SkBits2Float(0x05720089), SkBits2Float(0x25727272), SkBits2Float(0x72728c7a), SkBits2Float(0x5b5e7272)); // 1.13789e-35f, 2.10289e-16f, 4.80417e+30f, 6.26133e+16f
11693path.cubicTo(SkBits2Float(0x03000074), SkBits2Float(0x4aff00e8), SkBits2Float(0x397d3972), SkBits2Float(0x01000400), SkBits2Float(0x72727a10), SkBits2Float(0x5e827272)); // 3.76163e-37f, 8.35596e+06f, 0.000241494f, 2.35128e-38f, 4.80275e+30f, 4.69985e+18f
11694path.quadTo(SkBits2Float(0x97fc16f3), SkBits2Float(0x0039fc5b), SkBits2Float(0x00f6472e), SkBits2Float(0x01008000)); // -1.62909e-24f, 5.32515e-39f, 2.26171e-38f, 2.36017e-38f
11695path.quadTo(SkBits2Float(0x7a057272), SkBits2Float(0x72727272), SkBits2Float(0xf3db5e64), SkBits2Float(0x4a5afc16)); // 1.73224e+35f, 4.80216e+30f, -3.47604e+31f, 3.58785e+06f
11696
11697 SkPath path2(path);
11698 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
11699}
11700
11701static void fuzz763_43(skiatest::Reporter* reporter, const char* filename) {
11702 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011703 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040011704
11705 SkPath path1(path);
11706 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011707 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011708path.moveTo(SkBits2Float(0x5c386c3a), SkBits2Float(0x4e691a3e)); // 2.07642e+17f, 9.77703e+08f
11709path.cubicTo(SkBits2Float(0x6f69f9f5), SkBits2Float(0x18ff8791), SkBits2Float(0x2492263c), SkBits2Float(0xbc6fdb48), SkBits2Float(0xc2f82107), SkBits2Float(0x729a18e1)); // 7.24122e+28f, 6.60528e-24f, 6.33822e-17f, -0.0146397f, -124.065f, 6.10442e+30f
11710path.cubicTo(SkBits2Float(0x07d729d1), SkBits2Float(0xdea6db48), SkBits2Float(0xcd1dfb88), SkBits2Float(0x90826769), SkBits2Float(0x1c20e5a4), SkBits2Float(0xa4c3ba9b)); // 3.23742e-34f, -6.01164e+18f, -1.65657e+08f, -5.14353e-29f, 5.32364e-22f, -8.48839e-17f
11711path.moveTo(SkBits2Float(0xcc2084b7), SkBits2Float(0x19f68bdb)); // -4.20789e+07f, 2.54923e-23f
11712path.close();
11713path.moveTo(SkBits2Float(0xcc2084b7), SkBits2Float(0x19f68bdb)); // -4.20789e+07f, 2.54923e-23f
11714path.cubicTo(SkBits2Float(0xdeea1d6e), SkBits2Float(0xc7774804), SkBits2Float(0x27cf0dcf), SkBits2Float(0x6ae8b99f), SkBits2Float(0x24ac3260), SkBits2Float(0x062fa93c)); // -8.43488e+18f, -63304, 5.7469e-15f, 1.40674e+26f, 7.46784e-17f, 3.30382e-35f
11715path.lineTo(SkBits2Float(0x438a0b9c), SkBits2Float(0x60a1d2c8)); // 276.091f, 9.32848e+19f
11716path.quadTo(SkBits2Float(0xe13fb902), SkBits2Float(0x07ee536f), SkBits2Float(0x971d8ac1), SkBits2Float(0x2f9f174b)); // -2.21041e+20f, 3.58593e-34f, -5.09046e-25f, 2.89385e-10f
11717path.lineTo(SkBits2Float(0x0f2cf5d8), SkBits2Float(0xe271654c)); // 8.5276e-30f, -1.11324e+21f
11718path.lineTo(SkBits2Float(0xe6cf24d2), SkBits2Float(0xd9537742)); // -4.89105e+23f, -3.72015e+15f
11719path.cubicTo(SkBits2Float(0x1aaaee04), SkBits2Float(0x9e3b804c), SkBits2Float(0x84cba87d), SkBits2Float(0x4e0e8ccc), SkBits2Float(0x2aec611a), SkBits2Float(0x7ae4b639)); // 7.06949e-23f, -9.92623e-21f, -4.78798e-36f, 5.97898e+08f, 4.19894e-13f, 5.9377e+35f
11720path.conicTo(SkBits2Float(0x73357921), SkBits2Float(0x6f163021), SkBits2Float(0x70ea542c), SkBits2Float(0xe008f404), SkBits2Float(0x1f6c5e52)); // 1.43778e+31f, 4.64809e+28f, 5.8017e+29f, -3.94741e+19f, 5.0053e-20f
11721path.lineTo(SkBits2Float(0xda45ad4e), SkBits2Float(0xedce4a04)); // -1.39103e+16f, -7.98042e+27f
11722path.lineTo(SkBits2Float(0xac0e45da), SkBits2Float(0x8f632841)); // -2.02182e-12f, -1.11997e-29f
11723path.lineTo(SkBits2Float(0xcc2084b7), SkBits2Float(0x19f68bdb)); // -4.20789e+07f, 2.54923e-23f
11724path.close();
11725path.moveTo(SkBits2Float(0xcc2084b7), SkBits2Float(0x19f68bdb)); // -4.20789e+07f, 2.54923e-23f
11726path.quadTo(SkBits2Float(0xf35c4ad5), SkBits2Float(0x0692f251), SkBits2Float(0x69632126), SkBits2Float(0xb927af67)); // -1.74534e+31f, 5.52751e-35f, 1.71614e+25f, -0.000159917f
11727path.moveTo(SkBits2Float(0x6534bff9), SkBits2Float(0x434a9986)); // 5.3348e+22f, 202.6f
11728path.quadTo(SkBits2Float(0x37c603e5), SkBits2Float(0xa0683953), SkBits2Float(0x751915e4), SkBits2Float(0x831c911a)); // 2.36053e-05f, -1.96701e-19f, 1.94059e+32f, -4.60108e-37f
11729path.cubicTo(SkBits2Float(0xba4f10f1), SkBits2Float(0x5a7571df), SkBits2Float(0x4ec67459), SkBits2Float(0x33c58827), SkBits2Float(0x10b78ccb), SkBits2Float(0xedbd2748)); // -0.000789895f, 1.72716e+16f, 1.66476e+09f, 9.19829e-08f, 7.23977e-29f, -7.31752e+27f
11730path.cubicTo(SkBits2Float(0x6d06f06a), SkBits2Float(0xe30465cf), SkBits2Float(0xc5458fe7), SkBits2Float(0xca488dc4), SkBits2Float(0x38f9021c), SkBits2Float(0x3e8d58db)); // 2.6101e+27f, -2.44231e+21f, -3160.99f, -3.28587e+06f, 0.000118736f, 0.276069f
11731
11732 SkPath path2(path);
11733 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
11734}
11735
11736static void fuzz763_44(skiatest::Reporter* reporter, const char* filename) {
11737 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011738 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040011739path.moveTo(SkBits2Float(0x7c223bab), SkBits2Float(0x7cf35966)); // 3.36945e+36f, 1.01083e+37f
11740path.quadTo(SkBits2Float(0x00000000), SkBits2Float(0x7ccaca6d), SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 8.4236e+36f, 0, 0
11741path.lineTo(SkBits2Float(0x7d7d7d7d), SkBits2Float(0x00000000)); // 2.10591e+37f, 0
11742path.quadTo(SkBits2Float(0x7ccacab0), SkBits2Float(0x7d1817f4), SkBits2Float(0x7c223bab), SkBits2Float(0x7cf35966)); // 8.42364e+36f, 1.26354e+37f, 3.36945e+36f, 1.01083e+37f
11743path.close();
11744
11745 SkPath path1(path);
11746 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011747 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011748path.moveTo(SkBits2Float(0x109d0000), SkBits2Float(0xff7bc000)); // 6.19256e-29f, -3.34633e+38f
11749path.conicTo(SkBits2Float(0x979797ed), SkBits2Float(0x3a214797), SkBits2Float(0x28aa217a), SkBits2Float(0x01007272), SkBits2Float(0x00000072)); // -9.7965e-25f, 0.000615233f, 1.88883e-14f, 2.3592e-38f, 1.59748e-43f
11750path.quadTo(SkBits2Float(0x72728302), SkBits2Float(0x8b727272), SkBits2Float(0x72727272), SkBits2Float(0xc00308f6)); // 4.80344e+30f, -4.66936e-32f, 4.80216e+30f, -2.04742f
11751path.conicTo(SkBits2Float(0x7f52753a), SkBits2Float(0x8072ffff), SkBits2Float(0x67af2103), SkBits2Float(0x7d2a6847), SkBits2Float(0x7d7d7d7d)); // 2.79747e+38f, -1.05611e-38f, 1.65405e+24f, 1.41569e+37f, 2.10591e+37f
11752
11753 SkPath path2(path);
11754 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 3, filename);
11755}
11756
11757static void fuzz763_45(skiatest::Reporter* reporter, const char* filename) {
11758 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011759 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011760
11761 SkPath path1(path);
11762 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011763 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011764path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11765path.cubicTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x7a303030), SkBits2Float(0x7a303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 2.28705e+35f, 2.28705e+35f, 6.40969e-10f
11766path.conicTo(SkBits2Float(0x30303030), SkBits2Float(0x74303030), SkBits2Float(0x74303030), SkBits2Float(0x30303030), SkBits2Float(0x74303030)); // 6.40969e-10f, 5.58363e+31f, 5.58363e+31f, 6.40969e-10f, 5.58363e+31f
11767path.conicTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 6.40969e-10f
11768path.moveTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f
11769path.moveTo(SkBits2Float(0x77773030), SkBits2Float(0x30303030)); // 5.01357e+33f, 6.40969e-10f
11770path.conicTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x7a743030), SkBits2Float(0x74303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f, 3.16974e+35f, 5.58363e+31f, 6.40969e-10f
11771path.lineTo(SkBits2Float(0x77773030), SkBits2Float(0x30303030)); // 5.01357e+33f, 6.40969e-10f
11772path.close();
11773path.moveTo(SkBits2Float(0x77773030), SkBits2Float(0x30303030)); // 5.01357e+33f, 6.40969e-10f
11774path.lineTo(SkBits2Float(0x7f303030), SkBits2Float(0x7a303030)); // 2.34194e+38f, 2.28705e+35f
11775path.conicTo(SkBits2Float(0x77303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0xf9303030), SkBits2Float(0x7a303030)); // 3.57352e+33f, 6.40969e-10f, 6.40969e-10f, -5.71764e+34f, 2.28705e+35f
11776path.conicTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 6.40969e-10f
11777path.quadTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 6.40969e-10f
11778path.quadTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 6.40969e-10f
11779path.conicTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 6.40969e-10f
11780path.conicTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x7a303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 2.28705e+35f, 6.40969e-10f
11781path.cubicTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x7a303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 2.28705e+35f, 6.40969e-10f
11782path.conicTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 6.40969e-10f
11783path.moveTo(SkBits2Float(0x77303030), SkBits2Float(0xff303030)); // 3.57352e+33f, -2.34194e+38f
11784path.conicTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x7f773030), SkBits2Float(0x7a7a3030), SkBits2Float(0x7a303030)); // 6.40969e-10f, 6.40969e-10f, 3.2857e+38f, 3.24763e+35f, 2.28705e+35f
11785path.quadTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x77303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f, 3.57352e+33f, 6.40969e-10f
11786path.conicTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x7b303030), SkBits2Float(0x73303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f, 9.14822e+35f, 1.39591e+31f, 6.40969e-10f
11787path.quadTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x7a7a3030)); // 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 3.24763e+35f
11788 SkPath path2(path);
11789 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 3, filename);
11790}
11791
11792static void fuzz763_46(skiatest::Reporter* reporter, const char* filename) {
11793 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011794 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011795
11796 SkPath path1(path);
11797 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011798 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011799path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11800 path.conicTo(SkBits2Float(0x44444444), SkBits2Float(0x44444444), SkBits2Float(0x44263030), SkBits2Float(0x44304430), SkBits2Float(0x4c444430)); // 785.067f, 785.067f, 664.753f, 705.065f, 5.145e+07f
11801path.moveTo(SkBits2Float(0x44444444), SkBits2Float(0x44444444)); // 785.067f, 785.067f
11802path.cubicTo(SkBits2Float(0x30303030), SkBits2Float(0x44444444), SkBits2Float(0x30303030), SkBits2Float(0x44444444), SkBits2Float(0x44444444), SkBits2Float(0x4444444c)); // 6.40969e-10f, 785.067f, 6.40969e-10f, 785.067f, 785.067f, 785.067f
11803 SkPath path2(path);
11804 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 3, filename);
11805}
11806
11807static void fuzz763_47(skiatest::Reporter* reporter, const char* filename) {
11808 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011809 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040011810
11811 SkPath path1(path);
11812 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011813 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011814path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11815path.cubicTo(SkBits2Float(0x7272728e), SkBits2Float(0x52527272), SkBits2Float(0x2d555252), SkBits2Float(0x68556829), SkBits2Float(0x555b2d29), SkBits2Float(0x2a212a8c)); // 4.80217e+30f, 2.25966e+11f, 1.21259e-11f, 4.03114e+24f, 1.50617e+13f, 1.43144e-13f
11816path.conicTo(SkBits2Float(0x00296808), SkBits2Float(0x00000002), SkBits2Float(0x52525252), SkBits2Float(0x72007272), SkBits2Float(0x52527272)); // 3.80257e-39f, 2.8026e-45f, 2.25831e+11f, 2.54416e+30f, 2.25966e+11f
11817path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11818path.close();
11819path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11820path.lineTo(SkBits2Float(0x2a212a8c), SkBits2Float(0x7272081f)); // 1.43144e-13f, 4.79393e+30f
11821path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x5974fa80), SkBits2Float(0x00747474), SkBits2Float(0x59585264)); // 4.80216e+30f, 4.30971e+15f, 1.06947e-38f, 3.80557e+15f
11822path.cubicTo(SkBits2Float(0x64007474), SkBits2Float(0x088c5852), SkBits2Float(0x80808021), SkBits2Float(0x8c808080), SkBits2Float(0x80802108), SkBits2Float(0x80808080)); // 9.4783e+21f, 8.44671e-34f, -1.18009e-38f, -1.97989e-31f, -1.17668e-38f, -1.1801e-38f
11823path.quadTo(SkBits2Float(0x80807d80), SkBits2Float(0x80808080), SkBits2Float(0xff7f0000), SkBits2Float(0x80808080)); // -1.18e-38f, -1.1801e-38f, -3.38953e+38f, -1.1801e-38f
11824path.quadTo(SkBits2Float(0x80808080), SkBits2Float(0x80808080), SkBits2Float(0xed842b00), SkBits2Float(0x7252ff6d)); // -1.1801e-38f, -1.1801e-38f, -5.113e+27f, 4.17924e+30f
11825path.quadTo(SkBits2Float(0x72577200), SkBits2Float(0x55525352), SkBits2Float(0x2a212a8c), SkBits2Float(0x7272081f)); // 4.26733e+30f, 1.44535e+13f, 1.43144e-13f, 4.79393e+30f
11826path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x6f740080), SkBits2Float(0x8c556874), SkBits2Float(0x2982ffff)); // 4.80216e+30f, 7.55149e+28f, -1.64404e-31f, 5.81757e-14f
11827
11828 SkPath path2(path);
11829 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
11830}
11831
11832static void fuzz763_48(skiatest::Reporter* reporter, const char* filename) {
11833 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011834 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040011835
11836 SkPath path1(path);
11837 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011838 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011839path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11840path.lineTo(SkBits2Float(0xed0081bc), SkBits2Float(0x1b2d8040)); // -2.48568e+27f, 1.43517e-22f
11841path.moveTo(SkBits2Float(0x74747403), SkBits2Float(0x29747474)); // 7.74703e+31f, 5.42799e-14f
11842path.close();
11843path.moveTo(SkBits2Float(0x74747403), SkBits2Float(0x29747474)); // 7.74703e+31f, 5.42799e-14f
11844path.conicTo(SkBits2Float(0x662d5576), SkBits2Float(0x2d804066), SkBits2Float(0x8068291b), SkBits2Float(0x740315ff), SkBits2Float(0x74747474)); // 2.04636e+23f, 1.45805e-11f, -9.56564e-39f, 4.15428e+31f, 7.74708e+31f
11845path.cubicTo(SkBits2Float(0x762d0529), SkBits2Float(0x72525252), SkBits2Float(0x007b7272), SkBits2Float(0x525adada), SkBits2Float(0x52525252), SkBits2Float(0x52727252)); // 8.77316e+32f, 4.16585e+30f, 1.13368e-38f, 2.34994e+11f, 2.25831e+11f, 2.60325e+11f
11846path.lineTo(SkBits2Float(0x74747403), SkBits2Float(0x29747474)); // 7.74703e+31f, 5.42799e-14f
11847path.close();
11848path.moveTo(SkBits2Float(0xa5252620), SkBits2Float(0x52b4adad)); // -1.43244e-16f, 3.88004e+11f
11849path.close();
11850path.moveTo(SkBits2Float(0xa5252620), SkBits2Float(0x52b4adad)); // -1.43244e-16f, 3.88004e+11f
11851path.quadTo(SkBits2Float(0x72727270), SkBits2Float(0x52524872), SkBits2Float(0x72525252), SkBits2Float(0x72727272)); // 4.80216e+30f, 2.2579e+11f, 4.16585e+30f, 4.80216e+30f
11852path.quadTo(SkBits2Float(0x72727255), SkBits2Float(0x80406666), SkBits2Float(0x68291b2d), SkBits2Float(0x0315ff80)); // 4.80215e+30f, -5.91421e-39f, 3.19432e+24f, 4.40805e-37f
11853path.cubicTo(SkBits2Float(0x74747474), SkBits2Float(0x7b722974), SkBits2Float(0x5adada00), SkBits2Float(0x52525252), SkBits2Float(0x72720052), SkBits2Float(0x72727272)); // 7.74708e+31f, 1.25738e+36f, 3.08006e+16f, 2.25831e+11f, 4.79333e+30f, 4.80216e+30f
11854path.lineTo(SkBits2Float(0xa5252620), SkBits2Float(0x52b4adad)); // -1.43244e-16f, 3.88004e+11f
11855path.close();
11856path.moveTo(SkBits2Float(0xa5252620), SkBits2Float(0x52b4adad)); // -1.43244e-16f, 3.88004e+11f
11857path.quadTo(SkBits2Float(0x72727227), SkBits2Float(0x72727272), SkBits2Float(0x74727272), SkBits2Float(0x55747421)); // 4.80214e+30f, 4.80216e+30f, 7.68345e+31f, 1.67987e+13f
11858path.lineTo(SkBits2Float(0xa5252620), SkBits2Float(0x52b4adad)); // -1.43244e-16f, 3.88004e+11f
11859path.close();
11860path.moveTo(SkBits2Float(0x724b0000), SkBits2Float(0x00725f72)); // 4.02083e+30f, 1.05035e-38f
11861path.lineTo(SkBits2Float(0x52525252), SkBits2Float(0x72725252)); // 2.25831e+11f, 4.79967e+30f
11862path.quadTo(SkBits2Float(0x26727272), SkBits2Float(0x0303a525), SkBits2Float(0x52005c03), SkBits2Float(0x72525252)); // 8.41157e-16f, 3.8687e-37f, 1.37825e+11f, 4.16585e+30f
11863path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x1ff07255), SkBits2Float(0x2a8c5572), SkBits2Float(0x21082a21)); // 4.80216e+30f, 1.01833e-19f, 2.49283e-13f, 4.61343e-19f
11864path.lineTo(SkBits2Float(0x2a2a3a21), SkBits2Float(0x29212828)); // 1.51192e-13f, 3.5784e-14f
11865
11866 SkPath path2(path);
11867 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
11868}
11869
11870static void fuzz763_49(skiatest::Reporter* reporter, const char* filename) {
11871 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011872 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011873
11874 SkPath path1(path);
11875 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011876 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011877path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11878path.conicTo(SkBits2Float(0x30303030), SkBits2Float(0x78303030), SkBits2Float(0x78787881), SkBits2Float(0x78787878), SkBits2Float(0x30303030)); // 6.40969e-10f, 1.42941e+34f, 2.01583e+34f, 2.01583e+34f, 6.40969e-10f
11879path.lineTo(SkBits2Float(0x78787878), SkBits2Float(0x78787878)); // 2.01583e+34f, 2.01583e+34f
11880path.lineTo(SkBits2Float(0x78787878), SkBits2Float(0x78787878)); // 2.01583e+34f, 2.01583e+34f
11881path.lineTo(SkBits2Float(0x78787878), SkBits2Float(0x78787878)); // 2.01583e+34f, 2.01583e+34f
11882path.quadTo(SkBits2Float(0x30303030), SkBits2Float(0x78787878), SkBits2Float(0x78787878), SkBits2Float(0x78787878)); // 6.40969e-10f, 2.01583e+34f, 2.01583e+34f, 2.01583e+34f
11883path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f
11884path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f
11885path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f
11886path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f
11887path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f
11888path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f
11889path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f
11890path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f
11891path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f
11892path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f
11893path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f
11894path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f
11895path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030)); // 6.40969e-10f, 6.40969e-10f
11896path.lineTo(SkBits2Float(0x78787878), SkBits2Float(0x7878788d)); // 2.01583e+34f, 2.01584e+34f
11897path.lineTo(SkBits2Float(0x78787878), SkBits2Float(0x30303030)); // 2.01583e+34f, 6.40969e-10f
11898
11899 SkPath path2(path);
11900 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 3, filename);
11901}
11902
11903static void fuzz763_50(skiatest::Reporter* reporter, const char* filename) {
11904 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011905 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040011906path.moveTo(SkBits2Float(0x70621ede), SkBits2Float(0x00000000)); // 2.79924e+29f, 0
11907path.conicTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x74fc5b97), SkBits2Float(0x7d458fe4)); // 0, 0, 0, 1.59951e+32f, 1.64128e+37f
11908path.lineTo(SkBits2Float(0xefea1ffe), SkBits2Float(0x00000000)); // -1.44916e+29f, 0
11909path.lineTo(SkBits2Float(0x70621ede), SkBits2Float(0x00000000)); // 2.79924e+29f, 0
11910path.close();
11911path.moveTo(SkBits2Float(0xefea1ffe), SkBits2Float(0x00000000)); // -1.44916e+29f, 0
11912path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11913path.lineTo(SkBits2Float(0xefea1ffe), SkBits2Float(0x00000000)); // -1.44916e+29f, 0
11914path.close();
11915
11916 SkPath path1(path);
11917 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011918 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011919
11920 SkPath path2(path);
11921 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 3, filename);
11922}
11923
11924static void fuzz763_51(skiatest::Reporter* reporter, const char* filename) {
11925 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011926 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040011927
11928 SkPath path1(path);
11929 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011930 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011931path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11932path.quadTo(SkBits2Float(0x868b5aae), SkBits2Float(0x626c45ab), SkBits2Float(0xefea1ffe), SkBits2Float(0x0029fc76)); // -5.24192e-35f, 1.08961e+21f, -1.44916e+29f, 3.85582e-39f
11933path.moveTo(SkBits2Float(0xfacbff01), SkBits2Float(0x56fc5b97)); // -5.29604e+35f, 1.38735e+14f
11934path.cubicTo(SkBits2Float(0x7d4559c9), SkBits2Float(0xad801c39), SkBits2Float(0xfbe2091a), SkBits2Float(0x7268e394), SkBits2Float(0x7c800079), SkBits2Float(0xa1d75590)); // 1.63953e+37f, -1.45644e-11f, -2.34729e+36f, 4.61284e+30f, 5.31699e+36f, -1.45916e-18f
11935
11936 SkPath path2(path);
11937 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
11938}
11939
11940static void fuzz763_52(skiatest::Reporter* reporter, const char* filename) {
11941 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011942 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040011943
11944 SkPath path1(path);
11945 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011946 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011947path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11948path.quadTo(SkBits2Float(0x29ff4bae), SkBits2Float(0xa1d75590), SkBits2Float(0x9fd6f6c3), SkBits2Float(0x70621ede)); // 1.13374e-13f, -1.45916e-18f, -9.10408e-20f, 2.79924e+29f
11949path.quadTo(SkBits2Float(0x57a839d3), SkBits2Float(0x1a80d34b), SkBits2Float(0x0147a31b), SkBits2Float(0xff7fffff)); // 3.69933e+14f, 5.32809e-23f, 3.66675e-38f, -3.40282e+38f
11950path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11951path.close();
11952path.moveTo(SkBits2Float(0x1ab8e97c), SkBits2Float(0x94fbe3ef)); // 7.64778e-23f, -2.54344e-26f
11953path.conicTo(SkBits2Float(0x75757568), SkBits2Float(0x7575755e), SkBits2Float(0x75757575), SkBits2Float(0x75757575), SkBits2Float(0x75756575)); // 3.11156e+32f, 3.11156e+32f, 3.11156e+32f, 3.11156e+32f, 3.11077e+32f
11954path.lineTo(SkBits2Float(0x1ab8e97c), SkBits2Float(0x94fbe3ef)); // 7.64778e-23f, -2.54344e-26f
11955path.close();
11956path.moveTo(SkBits2Float(0x1ab8e97c), SkBits2Float(0x94fbe3ef)); // 7.64778e-23f, -2.54344e-26f
11957path.conicTo(SkBits2Float(0x75757575), SkBits2Float(0x75757575), SkBits2Float(0x75757575), SkBits2Float(0x75917575), SkBits2Float(0x75757575)); // 3.11156e+32f, 3.11156e+32f, 3.11156e+32f, 3.68782e+32f, 3.11156e+32f
11958path.lineTo(SkBits2Float(0x1ab8e97c), SkBits2Float(0x94fbe3ef)); // 7.64778e-23f, -2.54344e-26f
11959path.close();
11960path.moveTo(SkBits2Float(0x1ab8e97c), SkBits2Float(0x94fbe3ef)); // 7.64778e-23f, -2.54344e-26f
11961path.conicTo(SkBits2Float(0x75757575), SkBits2Float(0x7575758f), SkBits2Float(0x7f757575), SkBits2Float(0x75757575), SkBits2Float(0x75757575)); // 3.11156e+32f, 3.11157e+32f, 3.26271e+38f, 3.11156e+32f, 3.11156e+32f
11962path.lineTo(SkBits2Float(0x1ab8e97c), SkBits2Float(0x94fbe3ef)); // 7.64778e-23f, -2.54344e-26f
11963path.close();
11964
11965 SkPath path2(path);
11966 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
11967}
11968
11969static void fuzz763_53(skiatest::Reporter* reporter, const char* filename) {
11970 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050011971 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040011972path.moveTo(SkBits2Float(0x7644b829), SkBits2Float(0x00000000)); // 9.97486e+32f, 0
11973path.lineTo(SkBits2Float(0x74fc5b97), SkBits2Float(0x77df944a)); // 1.59951e+32f, 9.06945e+33f
11974path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0xf8fbe3ff)); // 0, -4.08716e+34f
11975path.lineTo(SkBits2Float(0x7644b829), SkBits2Float(0x00000000)); // 9.97486e+32f, 0
11976path.close();
11977
11978 SkPath path1(path);
11979 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050011980 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040011981path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
11982path.quadTo(SkBits2Float(0x45ab86ae), SkBits2Float(0xd6d6626c), SkBits2Float(0xd6d6d6d6), SkBits2Float(0x7644d6d6)); // 5488.83f, -1.17859e+14f, -1.18109e+14f, 9.98093e+32f
11983path.moveTo(SkBits2Float(0xd6d6d6d6), SkBits2Float(0xd6d6d6d6)); // -1.18109e+14f, -1.18109e+14f
11984path.cubicTo(SkBits2Float(0xd6d6d6d6), SkBits2Float(0x64fed6d6), SkBits2Float(0x7644ef40), SkBits2Float(0x290877fc), SkBits2Float(0x447644b8), SkBits2Float(0x80fafc76)); // -1.18109e+14f, 3.76076e+22f, 9.98577e+32f, 3.03021e-14f, 985.074f, -2.30494e-38f
11985path.conicTo(SkBits2Float(0x87808080), SkBits2Float(0x764400ae), SkBits2Float(0x764400fc), SkBits2Float(0x450080fc), SkBits2Float(0x3636366c)); // -1.93348e-34f, 9.93852e+32f, 9.93858e+32f, 2056.06f, 2.71518e-06f
11986path.lineTo(SkBits2Float(0xd6d6d6d6), SkBits2Float(0xd6d6d6d6)); // -1.18109e+14f, -1.18109e+14f
11987path.close();
11988path.moveTo(SkBits2Float(0xef08a412), SkBits2Float(0x5aaeff7f)); // -4.22883e+28f, 2.46288e+16f
11989path.conicTo(SkBits2Float(0x7644626c), SkBits2Float(0x088912fc), SkBits2Float(0xae8744ef), SkBits2Float(0x76571f5a), SkBits2Float(0x45ab86fc)); // 9.95788e+32f, 8.24985e-34f, -6.15133e-11f, 1.0908e+33f, 5488.87f
11990path.conicTo(SkBits2Float(0x4064fe62), SkBits2Float(0x290877ef), SkBits2Float(0x780080b8), SkBits2Float(0x553c7644), SkBits2Float(0x644eae87)); // 3.57803f, 3.03021e-14f, 1.04254e+34f, 1.2951e+13f, 1.52504e+22f
11991path.lineTo(SkBits2Float(0xef08a412), SkBits2Float(0x5aaeff7f)); // -4.22883e+28f, 2.46288e+16f
11992path.close();
11993
11994 SkPath path2(path);
11995 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
11996}
11997
11998// hangs 654939
11999static void fuzz763_54(skiatest::Reporter* reporter, const char* filename) {
12000 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050012001 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040012002path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
12003path.conicTo(SkBits2Float(0x5b682968), SkBits2Float(0xb3b32d11), SkBits2Float(0xb3b3b3b3), SkBits2Float(0x5b29b3b3), SkBits2Float(0x212a8c55)); // 6.53477e+16f, -8.34353e-08f, -8.36802e-08f, 4.77669e+16f, 5.7784e-19f
12004path.conicTo(SkBits2Float(0x68555b2d), SkBits2Float(0x28296869), SkBits2Float(0x5b252a08), SkBits2Float(0x5d68392a), SkBits2Float(0x29282780)); // 4.03018e+24f, 9.40402e-15f, 4.64896e+16f, 1.04584e+18f, 3.73378e-14f
12005path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
12006path.close();
12007path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
12008path.cubicTo(SkBits2Float(0x52727272), SkBits2Float(0x72727252), SkBits2Float(0x525252c7), SkBits2Float(0x72725252), SkBits2Float(0x72727272), SkBits2Float(0x72727255)); // 2.60326e+11f, 4.80215e+30f, 2.25833e+11f, 4.79967e+30f, 4.80216e+30f, 4.80215e+30f
12009path.quadTo(SkBits2Float(0xd7da0000), SkBits2Float(0x5252525a), SkBits2Float(0x72525252), SkBits2Float(0x72727272)); // -4.79387e+14f, 2.25831e+11f, 4.16585e+30f, 4.80216e+30f
12010path.quadTo(SkBits2Float(0x48525252), SkBits2Float(0x72725252), SkBits2Float(0x72727272), SkBits2Float(0x72727255)); // 215369, 4.79967e+30f, 4.80216e+30f, 4.80215e+30f
12011path.quadTo(SkBits2Float(0xdada007b), SkBits2Float(0x5252525a), SkBits2Float(0x72675252), SkBits2Float(0x72727272)); // -3.0681e+16f, 2.25831e+11f, 4.5818e+30f, 4.80216e+30f
12012path.quadTo(SkBits2Float(0x52525252), SkBits2Float(0x27725252), SkBits2Float(0x72727272), SkBits2Float(0x72727272)); // 2.25831e+11f, 3.36289e-15f, 4.80216e+30f, 4.80216e+30f
12013path.quadTo(SkBits2Float(0x1c292172), SkBits2Float(0x7bc00321), SkBits2Float(0x9aaaaaaa), SkBits2Float(0x8c556a4b)); // 5.59606e-22f, 1.99397e+36f, -7.05861e-23f, -1.64409e-31f
12014path.quadTo(SkBits2Float(0x72725572), SkBits2Float(0x00007272), SkBits2Float(0x525adada), SkBits2Float(0x52525252)); // 4.79991e+30f, 4.10552e-41f, 2.34994e+11f, 2.25831e+11f
12015path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
12016path.close();
12017path.moveTo(SkBits2Float(0xa5252600), SkBits2Float(0x52b4adad)); // -1.43243e-16f, 3.88004e+11f
12018path.close();
12019path.moveTo(SkBits2Float(0xa5252600), SkBits2Float(0x52b4adad)); // -1.43243e-16f, 3.88004e+11f
12020path.quadTo(SkBits2Float(0x72725570), SkBits2Float(0x52525272), SkBits2Float(0x72525252), SkBits2Float(0x72727272)); // 4.79991e+30f, 2.25832e+11f, 4.16585e+30f, 4.80216e+30f
12021path.quadTo(SkBits2Float(0x72727255), SkBits2Float(0x555bb672), SkBits2Float(0x29686968), SkBits2Float(0x252a081f)); // 4.80215e+30f, 1.50985e+13f, 5.16058e-14f, 1.47479e-16f
12022path.moveTo(SkBits2Float(0x5d68392a), SkBits2Float(0x01002780)); // 1.04584e+18f, 2.35382e-38f
12023path.moveTo(SkBits2Float(0x72727200), SkBits2Float(0x72725252)); // 4.80212e+30f, 4.79967e+30f
12024path.quadTo(SkBits2Float(0x5adada00), SkBits2Float(0xa5252652), SkBits2Float(0x727272ad), SkBits2Float(0xda007b72)); // 3.08006e+16f, -1.43245e-16f, 4.80218e+30f, -9.04113e+15f
12025path.lineTo(SkBits2Float(0x5252525a), SkBits2Float(0x72525252)); // 2.25831e+11f, 4.16585e+30f
12026path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x52525252), SkBits2Float(0x27725252), SkBits2Float(0x72727272)); // 4.80216e+30f, 2.25831e+11f, 3.36289e-15f, 4.80216e+30f
12027path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x74217472), SkBits2Float(0x005b5574), SkBits2Float(0x72680000)); // 4.80216e+30f, 5.11671e+31f, 8.38768e-39f, 4.59523e+30f
12028path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x52525252), SkBits2Float(0x007b7272), SkBits2Float(0x525adada)); // 4.80216e+30f, 2.25831e+11f, 1.13368e-38f, 2.34994e+11f
12029path.lineTo(SkBits2Float(0x72727200), SkBits2Float(0x72725252)); // 4.80212e+30f, 4.79967e+30f
12030path.close();
12031
12032 SkPath path1(path);
12033 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050012034 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040012035
12036 SkPath path2(path);
12037 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
12038}
12039
12040
12041// afl crash
12042static void fuzz763_55(skiatest::Reporter* reporter, const char* filename) {
12043 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050012044 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040012045path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x55415500)); // 0, 1.32857e+13f
12046path.lineTo(SkBits2Float(0x55555568), SkBits2Float(0x55555555)); // 1.46602e+13f, 1.46602e+13f
12047path.lineTo(SkBits2Float(0x98989898), SkBits2Float(0x55989898)); // -3.94452e-24f, 2.09726e+13f
12048path.lineTo(SkBits2Float(0xf6f65555), SkBits2Float(0x101006f6)); // -2.49812e+33f, 2.84044e-29f
12049path.quadTo(SkBits2Float(0xdca33f10), SkBits2Float(0xf6f6f6f6), SkBits2Float(0xf621f6f6), SkBits2Float(0xf70ff6f6)); // -3.67598e+17f, -2.50452e+33f, -8.21259e+32f, -2.91995e+33f
12050path.lineTo(SkBits2Float(0x9400f6f6), SkBits2Float(0x10530000)); // -6.51105e-27f, 4.16124e-29f
12051path.quadTo(SkBits2Float(0x0f101010), SkBits2Float(0x00101010), SkBits2Float(0xf610f720), SkBits2Float(0xf6f6f6f6)); // 7.10284e-30f, 1.47513e-39f, -7.35062e+32f, -2.50452e+33f
12052path.lineTo(SkBits2Float(0x105352f6), SkBits2Float(0x1cf6ff10)); // 4.16763e-29f, 1.63448e-21f
12053path.lineTo(SkBits2Float(0xf6f6220a), SkBits2Float(0x003700f6)); // -2.49608e+33f, 5.0513e-39f
12054path.cubicTo(SkBits2Float(0x0000001e), SkBits2Float(0x00fff4f6), SkBits2Float(0xff101064), SkBits2Float(0xf6b6ac7f), SkBits2Float(0xf6f629f6), SkBits2Float(0x10f6f6f6)); // 4.2039e-44f, 2.35059e-38f, -1.91494e+38f, -1.85253e+33f, -2.4964e+33f, 9.74104e-29f
12055path.quadTo(SkBits2Float(0x10101007), SkBits2Float(0x10f7fd10), SkBits2Float(0xf6f6f6f6), SkBits2Float(0xf6f645e0)); // 2.84113e-29f, 9.78142e-29f, -2.50452e+33f, -2.4975e+33f
12056path.lineTo(SkBits2Float(0xed9ef6f6), SkBits2Float(0x53535353)); // -6.14965e+27f, 9.07636e+11f
12057path.lineTo(SkBits2Float(0x53006cf6), SkBits2Float(0x53295353)); // 5.51584e+11f, 7.27247e+11f
12058path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x55415500)); // 0, 1.32857e+13f
12059path.close();
12060path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x55415500)); // 0, 1.32857e+13f
12061path.lineTo(SkBits2Float(0xf6f6f6f6), SkBits2Float(0x5353d9f6)); // -2.50452e+33f, 9.09895e+11f
12062
12063 SkPath path1(path);
12064 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050012065 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040012066
12067 SkPath path2(path);
12068 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 3, filename);
12069}
12070
12071// 656149
12072static void fuzz763_56(skiatest::Reporter* reporter, const char* filename) {
12073 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050012074 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040012075path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
12076path.conicTo(SkBits2Float(0x5b682968), SkBits2Float(0xb3b32d11), SkBits2Float(0xb3b3b3b3), SkBits2Float(0x5b29b3b3), SkBits2Float(0x72725255)); // 6.53477e+16f, -8.34353e-08f, -8.36802e-08f, 4.77669e+16f, 4.79967e+30f
12077path.quadTo(SkBits2Float(0x525252c7), SkBits2Float(0x72725252), SkBits2Float(0x72727272), SkBits2Float(0x72727255)); // 2.25833e+11f, 4.79967e+30f, 4.80216e+30f, 4.80215e+30f
12078path.quadTo(SkBits2Float(0xd7da0000), SkBits2Float(0x5adada00), SkBits2Float(0x52525252), SkBits2Float(0x00005252)); // -4.79387e+14f, 3.08006e+16f, 2.25831e+11f, 2.9531e-41f
12079path.conicTo(SkBits2Float(0xadada525), SkBits2Float(0x52525ab4), SkBits2Float(0x52525252), SkBits2Float(0x72727272), SkBits2Float(0x52527272)); // -1.97412e-11f, 2.25866e+11f, 2.25831e+11f, 4.80216e+30f, 2.25966e+11f
12080path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
12081path.close();
12082path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
12083path.quadTo(SkBits2Float(0x72725252), SkBits2Float(0x72727272), SkBits2Float(0x72727255), SkBits2Float(0xda007b72)); // 4.79967e+30f, 4.80216e+30f, 4.80215e+30f, -9.04113e+15f
12084path.lineTo(SkBits2Float(0x5252525a), SkBits2Float(0x72525252)); // 2.25831e+11f, 4.16585e+30f
12085path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x52525252), SkBits2Float(0x27725252), SkBits2Float(0x72727272)); // 4.80216e+30f, 2.25831e+11f, 3.36289e-15f, 4.80216e+30f
12086path.lineTo(SkBits2Float(0x7bc00321), SkBits2Float(0x9aaaaaaa)); // 1.99397e+36f, -7.05861e-23f
12087path.quadTo(SkBits2Float(0x72725572), SkBits2Float(0x00007272), SkBits2Float(0x525adada), SkBits2Float(0x52525252)); // 4.79991e+30f, 4.10552e-41f, 2.34994e+11f, 2.25831e+11f
12088path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
12089path.close();
12090path.moveTo(SkBits2Float(0xa5252600), SkBits2Float(0x52b4adad)); // -1.43243e-16f, 3.88004e+11f
12091path.close();
12092path.moveTo(SkBits2Float(0xa5252600), SkBits2Float(0x52b4adad)); // -1.43243e-16f, 3.88004e+11f
12093path.quadTo(SkBits2Float(0x72727270), SkBits2Float(0x52525272), SkBits2Float(0x72525252), SkBits2Float(0x72727272)); // 4.80216e+30f, 2.25832e+11f, 4.16585e+30f, 4.80216e+30f
12094path.quadTo(SkBits2Float(0x72727255), SkBits2Float(0xda007b72), SkBits2Float(0x26525ada), SkBits2Float(0x72ada525)); // 4.80215e+30f, -9.04113e+15f, 7.29815e-16f, 6.87879e+30f
12095path.quadTo(SkBits2Float(0x007b7272), SkBits2Float(0x525adada), SkBits2Float(0x52525252), SkBits2Float(0x72727252)); // 1.13368e-38f, 2.34994e+11f, 2.25831e+11f, 4.80215e+30f
12096path.quadTo(SkBits2Float(0x52527272), SkBits2Float(0x52525252), SkBits2Float(0x72722772), SkBits2Float(0x72727272)); // 2.25966e+11f, 2.25831e+11f, 4.79636e+30f, 4.80216e+30f
12097path.quadTo(SkBits2Float(0x74727272), SkBits2Float(0x55747421), SkBits2Float(0x0000005b), SkBits2Float(0x72727268)); // 7.68345e+31f, 1.67987e+13f, 1.27518e-43f, 4.80216e+30f
12098path.quadTo(SkBits2Float(0x52527272), SkBits2Float(0x52525252), SkBits2Float(0x72727272), SkBits2Float(0x72557272)); // 2.25966e+11f, 2.25831e+11f, 4.80216e+30f, 4.22775e+30f
12099path.quadTo(SkBits2Float(0x5adada72), SkBits2Float(0x52525252), SkBits2Float(0x72725252), SkBits2Float(0x72727272)); // 3.08009e+16f, 2.25831e+11f, 4.79967e+30f, 4.80216e+30f
12100
12101 SkPath path1(path);
12102 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050012103 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040012104
12105 SkPath path2(path);
12106 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
12107}
12108
12109static void fuzz763_57(skiatest::Reporter* reporter, const char* filename) {
12110 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050012111 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040012112
12113 SkPath path1(path);
12114 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050012115 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040012116path.moveTo(SkBits2Float(0x68546829), SkBits2Float(0x555b2d29)); // 4.01225e+24f, 1.50617e+13f
12117path.moveTo(SkBits2Float(0x1f2a322a), SkBits2Float(0x4b7b2108)); // 3.60404e-20f, 1.6458e+07f
12118path.lineTo(SkBits2Float(0x2829ed84), SkBits2Float(0x5b2d2d55)); // 9.43289e-15f, 4.8745e+16f
12119path.moveTo(SkBits2Float(0x6838552d), SkBits2Float(0xf0684f5b)); // 3.48195e+24f, -2.87586e+29f
12120path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x2a8cef2a), SkBits2Float(0x682d2953), SkBits2Float(0xce682103), SkBits2Float(0x4b7bc055)); // 5.76397e-19f, 2.50349e-13f, 3.27093e+24f, -9.73619e+08f, 1.64988e+07f
12121path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x3b2a8c55)); // 4.85282e+16f, 0.00260236f
12122path.lineTo(SkBits2Float(0x6838552d), SkBits2Float(0xf0684f5b)); // 3.48195e+24f, -2.87586e+29f
12123path.close();
12124path.moveTo(SkBits2Float(0x6838552d), SkBits2Float(0xf0684f5b)); // 3.48195e+24f, -2.87586e+29f
12125path.conicTo(SkBits2Float(0xd2c00321), SkBits2Float(0xc0394b7b), SkBits2Float(0x8c08ed7a), SkBits2Float(0x211f2f2a), SkBits2Float(0x704b7b03)); // -4.12343e+11f, -2.89523f, -1.05485e-31f, 5.39337e-19f, 2.51897e+29f
12126path.cubicTo(SkBits2Float(0x2d6829ed), SkBits2Float(0x5b2d555b), SkBits2Float(0x68275b2d), SkBits2Float(0x21685527), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0)); // 1.3197e-11f, 4.8789e+16f, 3.16127e+24f, 7.87174e-19f, 4.7323e-37f, 6.14991e+25f
12127path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x5b2d2d55)); // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 4.8745e+16f
12128path.moveTo(SkBits2Float(0x6839552d), SkBits2Float(0xf0683b5b)); // 3.50084e+24f, -2.87489e+29f
12129path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x228cef2a), SkBits2Float(0x682d2953), SkBits2Float(0xee682103), SkBits2Float(0x287bc055)); // 5.76397e-19f, 3.82003e-18f, 3.27093e+24f, -1.79601e+28f, 1.3975e-14f
12130path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55)); // 4.85282e+16f, 5.7784e-19f
12131path.conicTo(SkBits2Float(0x4b03213b), SkBits2Float(0xc07b2a08), SkBits2Float(0x5b2d7a6a), SkBits2Float(0xf0556830), SkBits2Float(0x2a8c555b)); // 8.59372e+06f, -3.92444f, 4.88298e+16f, -2.64185e+29f, 2.49282e-13f
12132path.conicTo(SkBits2Float(0x0321212a), SkBits2Float(0x4b7bd2c0), SkBits2Float(0xed7ac039), SkBits2Float(0x2f2a8c08), SkBits2Float(0x7b03211f)); // 4.73517e-37f, 1.65035e+07f, -4.85023e+27f, 1.55112e-10f, 6.80863e+35f
12133path.lineTo(SkBits2Float(0x6839552d), SkBits2Float(0xf0683b5b)); // 3.50084e+24f, -2.87489e+29f
12134path.close();
12135path.moveTo(SkBits2Float(0x6839552d), SkBits2Float(0xf0683b5b)); // 3.50084e+24f, -2.87489e+29f
12136path.lineTo(SkBits2Float(0x6829ed27), SkBits2Float(0x2d555b2d)); // 3.20982e+24f, 1.21279e-11f
12137path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
12138path.conicTo(SkBits2Float(0x721f2a5b), SkBits2Float(0x212a8c55), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7b28), SkBits2Float(0x4797ed7a)); // 3.1526e+30f, 5.7784e-19f, 4.7323e-37f, 6.14984e+25f, 77787
12139path.lineTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
12140path.close();
12141path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
12142path.quadTo(SkBits2Float(0x2828102a), SkBits2Float(0x2c682921), SkBits2Float(0x8c555bf6), SkBits2Float(0x6d03de30)); // 9.32938e-15f, 3.2992e-12f, -1.64366e-31f, 2.5507e+27f
12143path.cubicTo(SkBits2Float(0x683f2d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x211f2a21)); // 3.61123e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 5.39271e-19f
12144path.lineTo(SkBits2Float(0x3a803adf), SkBits2Float(0x8a294f1a)); // 0.000978317f, -8.15193e-33f
12145path.quadTo(SkBits2Float(0x291d9628), SkBits2Float(0x2a43e62b), SkBits2Float(0x093a2a81), SkBits2Float(0x5c5c8ced)); // 3.49912e-14f, 1.73993e-13f, 2.24089e-33f, 2.48318e+17f
12146path.lineTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
12147path.close();
12148path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527)); // 3.16127e+24f, -2.87614e+29f
12149path.cubicTo(SkBits2Float(0x3ac2213a), SkBits2Float(0x291d9628), SkBits2Float(0x2a43e62b), SkBits2Float(0x293a2a81), SkBits2Float(0x5c5c8ced), SkBits2Float(0x5c5c6e5c)); // 0.00148109f, 3.49912e-14f, 1.73993e-13f, 4.13372e-14f, 2.48318e+17f, 2.48183e+17f
12150path.lineTo(SkBits2Float(0x1f212a8c), SkBits2Float(0xc0032108)); // 3.41283e-20f, -2.04889f
12151path.lineTo(SkBits2Float(0xed847b4b), SkBits2Float(0x2d552829)); // -5.12513e+27f, 1.21166e-11f
12152path.conicTo(SkBits2Float(0x552d5b5b), SkBits2Float(0x3b5a6839), SkBits2Float(0x5b2df068), SkBits2Float(0x2a212a1f), SkBits2Float(0x532a8cef)); // 1.1913e+13f, 0.00333263f, 4.89595e+16f, 1.43143e-13f, 7.32509e+11f
12153
12154 SkPath path2(path);
12155 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
12156}
12157
12158static void fuzzhang_1(skiatest::Reporter* reporter, const char* filename) {
12159 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050012160 path.setFillType((SkPathFillType) 1);
Yuqian Li3154a532017-09-06 13:33:30 -040012161path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
12162path.cubicTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x668ece09), SkBits2Float(0x00000000), SkBits2Float(0x6751c81a), SkBits2Float(0x61c4b0fb)); // 0, 0, 3.37188e+23f, 0, 9.90666e+23f, 4.53539e+20f
12163path.conicTo(SkBits2Float(0x66f837a9), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x3f823406)); // 5.86087e+23f, 0, 0, 0, 1.01721f
12164path.close();
12165path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
12166path.quadTo(SkBits2Float(0x675b1bfe), SkBits2Float(0x00000000), SkBits2Float(0x67d76c42), SkBits2Float(0x6292c469)); // 1.03471e+24f, 0, 2.03461e+24f, 1.35369e+21f
12167path.cubicTo(SkBits2Float(0x6a16df68), SkBits2Float(0x651a2f15), SkBits2Float(0x6c1e7f31), SkBits2Float(0x67a1f9b4), SkBits2Float(0x00000000), SkBits2Float(0x6a2a291f)); // 4.55985e+25f, 4.55071e+22f, 7.66444e+26f, 1.52981e+24f, 0, 5.14279e+25f
12168path.conicTo(SkBits2Float(0x680dcb75), SkBits2Float(0x68dd898d), SkBits2Float(0x681a434a), SkBits2Float(0x6871046b), SkBits2Float(0x3fea0440)); // 2.67843e+24f, 8.36944e+24f, 2.91394e+24f, 4.55269e+24f, 1.82825f
12169path.quadTo(SkBits2Float(0x679e1b26), SkBits2Float(0x687703c4), SkBits2Float(0x00000000), SkBits2Float(0x687d2968)); // 1.49327e+24f, 4.66598e+24f, 0, 4.78209e+24f
12170path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
12171path.close();
12172
12173 SkPath path1(path);
12174 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050012175 path.setFillType((SkPathFillType) 0);
Yuqian Li3154a532017-09-06 13:33:30 -040012176path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
12177path.cubicTo(SkBits2Float(0x535353ec), SkBits2Float(0x98989898), SkBits2Float(0x98989898), SkBits2Float(0xf207f36e), SkBits2Float(0xf3f2f2f2), SkBits2Float(0xed3a9781)); // 9.07646e+11f, -3.94452e-24f, -3.94452e-24f, -2.69278e+30f, -3.84968e+31f, -3.60921e+27f
12178path.quadTo(SkBits2Float(0xf8f8c0ed), SkBits2Float(0xf8f8f8f8), SkBits2Float(0x9f9f9f9f), SkBits2Float(0x3014149f)); // -4.03626e+34f, -4.03981e+34f, -6.76032e-20f, 5.38714e-10f
12179
12180 SkPath path2(path);
12181 testPathOp(reporter, path1, path2, (SkPathOp) 0, filename);
12182}
12183
12184static void release_13(skiatest::Reporter* reporter, const char* filename) {
12185 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050012186 path.setFillType((SkPathFillType) 1);
12187path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -040012188path.moveTo(SkBits2Float(0xd4438848), SkBits2Float(0xd488cf64)); // -3.35922e+12f, -4.70076e+12f
12189path.lineTo(SkBits2Float(0xd43a056e), SkBits2Float(0xd4851696)); // -3.19582e+12f, -4.57288e+12f
12190path.quadTo(SkBits2Float(0xd3d48e79), SkBits2Float(0xd49fb136), SkBits2Float(0x00000000), SkBits2Float(0xd4d4d4d4)); // -1.82585e+12f, -5.48698e+12f, 0, -7.31283e+12f
12191path.quadTo(SkBits2Float(0xd3d06670), SkBits2Float(0xd4a0bb38), SkBits2Float(0xd41d628f), SkBits2Float(0xd472c531)); // -1.79014e+12f, -5.52269e+12f, -2.70385e+12f, -4.17076e+12f
12192path.lineTo(SkBits2Float(0xd43a0559), SkBits2Float(0xd485168e)); // -3.19581e+12f, -4.57287e+12f
12193path.lineTo(SkBits2Float(0xd446958b), SkBits2Float(0xd4810278)); // -3.41165e+12f, -4.43274e+12f
12194path.lineTo(SkBits2Float(0xd443884a), SkBits2Float(0xd488cf65)); // -3.35922e+12f, -4.70076e+12f
12195path.quadTo(SkBits2Float(0xd47efa09), SkBits2Float(0xd49fd72a), SkBits2Float(0xd4a63f0f), SkBits2Float(0xd4b83ab3)); // -4.38047e+12f, -5.49208e+12f, -5.71218e+12f, -6.33007e+12f
12196path.lineTo(SkBits2Float(0xd497ca70), SkBits2Float(0xd4c4d4ae)); // -5.21549e+12f, -6.76305e+12f
12197path.lineTo(SkBits2Float(0xd459d4d4), SkBits2Float(0xd4c4d4d4)); // -3.74231e+12f, -6.76307e+12f
12198path.lineTo(SkBits2Float(0xd440daf9), SkBits2Float(0xd4c632d3)); // -3.31323e+12f, -6.81005e+12f
12199path.lineTo(SkBits2Float(0xd4438848), SkBits2Float(0xd488cf64)); // -3.35922e+12f, -4.70076e+12f
12200path.close();
12201path.moveTo(SkBits2Float(0xd4767560), SkBits2Float(0xd4d1ca84)); // -4.23412e+12f, -7.20837e+12f
12202path.lineTo(SkBits2Float(0xd4422174), SkBits2Float(0xd4d02069)); // -3.33514e+12f, -7.15118e+12f
12203path.lineTo(SkBits2Float(0xd440daa3), SkBits2Float(0xd4c632d9)); // -3.31321e+12f, -6.81005e+12f
12204path.lineTo(SkBits2Float(0xd41017bc), SkBits2Float(0xd4cb99b6)); // -2.47549e+12f, -6.99566e+12f
12205path.lineTo(SkBits2Float(0xd442213b), SkBits2Float(0xd4d02067)); // -3.33512e+12f, -7.15117e+12f
12206path.lineTo(SkBits2Float(0xd442d4d4), SkBits2Float(0xd4d4d4d4)); // -3.34718e+12f, -7.31283e+12f
12207path.lineTo(SkBits2Float(0xd4767560), SkBits2Float(0xd4d1ca84)); // -4.23412e+12f, -7.20837e+12f
12208path.close();
12209path.moveTo(SkBits2Float(0xd46c7a11), SkBits2Float(0xd46c7a2e)); // -4.06264e+12f, -4.06265e+12f
12210path.lineTo(SkBits2Float(0xd484e02c), SkBits2Float(0xd45fafcd)); // -4.56557e+12f, -3.84291e+12f
12211path.lineTo(SkBits2Float(0xd462c867), SkBits2Float(0xd45655f7)); // -3.8961e+12f, -3.68226e+12f
12212path.lineTo(SkBits2Float(0xd45ac463), SkBits2Float(0xd45ac505)); // -3.75839e+12f, -3.75843e+12f
12213path.lineTo(SkBits2Float(0xd43d2fa9), SkBits2Float(0xd43d2fb5)); // -3.25019e+12f, -3.2502e+12f
12214path.lineTo(SkBits2Float(0xd41d6287), SkBits2Float(0xd472c52a)); // -2.70385e+12f, -4.17076e+12f
12215path.quadTo(SkBits2Float(0x00000000), SkBits2Float(0xd3db1b95), SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, -1.88212e+12f, 0, 0
12216path.quadTo(SkBits2Float(0xd4b7efac), SkBits2Float(0x00000000), SkBits2Float(0xd4d0e88f), SkBits2Float(0xd40b8b46)); // -6.32e+12f, 0, -7.17804e+12f, -2.39735e+12f
12217path.lineTo(SkBits2Float(0xd4d4d4d4), SkBits2Float(0x00000000)); // -7.31283e+12f, 0
12218path.lineTo(SkBits2Float(0xdcdc154b), SkBits2Float(0x00000000)); // -4.95583e+17f, 0
12219path.lineTo(SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4c4d477)); // -7.31283e+12f, -6.76303e+12f
12220path.lineTo(SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4d4d442)); // -7.31283e+12f, -7.31275e+12f
12221path.lineTo(SkBits2Float(0xd4d4a691), SkBits2Float(0xd4d4d442)); // -7.30662e+12f, -7.31275e+12f
12222path.lineTo(SkBits2Float(0xd454d4d4), SkBits2Float(0xd4d4aa30)); // -3.65641e+12f, -7.30711e+12f
12223path.lineTo(SkBits2Float(0xd4bd9def), SkBits2Float(0xd4d43df0)); // -6.51519e+12f, -7.29258e+12f
12224path.lineTo(SkBits2Float(0xd4767560), SkBits2Float(0xd4d1ca84)); // -4.23412e+12f, -7.20837e+12f
12225path.lineTo(SkBits2Float(0xd497ca70), SkBits2Float(0xd4c4d4ae)); // -5.21549e+12f, -6.76305e+12f
12226path.lineTo(SkBits2Float(0xd4bab953), SkBits2Float(0xd4c4d48e)); // -6.41579e+12f, -6.76304e+12f
12227path.lineTo(SkBits2Float(0xd4a63f0f), SkBits2Float(0xd4b83ab3)); // -5.71218e+12f, -6.33007e+12f
12228path.lineTo(SkBits2Float(0xd4ae61eb), SkBits2Float(0xd4ae61f4)); // -5.99174e+12f, -5.99174e+12f
12229path.lineTo(SkBits2Float(0xd46c7a11), SkBits2Float(0xd46c7a2e)); // -4.06264e+12f, -4.06265e+12f
12230path.close();
12231path.moveTo(SkBits2Float(0xd46c7a11), SkBits2Float(0xd46c7a2e)); // -4.06264e+12f, -4.06265e+12f
12232path.lineTo(SkBits2Float(0xd446965c), SkBits2Float(0xd4810237)); // -3.4117e+12f, -4.4327e+12f
12233path.lineTo(SkBits2Float(0xd45ac549), SkBits2Float(0xd45ac55f)); // -3.75845e+12f, -3.75846e+12f
12234path.lineTo(SkBits2Float(0xd46c7a11), SkBits2Float(0xd46c7a2e)); // -4.06264e+12f, -4.06265e+12f
12235path.close();
12236path.moveTo(SkBits2Float(0xd4b46028), SkBits2Float(0xd41e572a)); // -6.19766e+12f, -2.72027e+12f
12237path.lineTo(SkBits2Float(0xd4cde20a), SkBits2Float(0xd434bb57)); // -7.07408e+12f, -3.10495e+12f
12238path.lineTo(SkBits2Float(0xd4c75ffe), SkBits2Float(0xd46f215d)); // -6.85047e+12f, -4.10823e+12f
12239path.lineTo(SkBits2Float(0xd4b46028), SkBits2Float(0xd41e572a)); // -6.19766e+12f, -2.72027e+12f
12240path.close();
12241
12242 SkPath path1(path);
12243 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050012244 path.setFillType((SkPathFillType) 0);
12245path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -040012246path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
12247path.quadTo(SkBits2Float(0x00000000), SkBits2Float(0xa5a50000), SkBits2Float(0xd4d4a5a5), SkBits2Float(0xd4d4d4d4)); // 0, -2.86229e-16f, -7.3065e+12f, -7.31283e+12f
12248path.quadTo(SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4cfd4d4), SkBits2Float(0xd4d41dd4)); // -7.31283e+12f, -7.31283e+12f, -7.14103e+12f, -7.28827e+12f
12249path.quadTo(SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4d432d4), SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4a5a5d4)); // -7.31283e+12f, -7.29109e+12f, -7.31283e+12f, -5.69161e+12f
12250path.quadTo(SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4d4d4d4), SkBits2Float(0x00000000)); // -7.31283e+12f, -7.31283e+12f, -7.31283e+12f, 0
12251path.moveTo(SkBits2Float(0xa5a5a500), SkBits2Float(0xd4d4d4a5)); // -2.87347e-16f, -7.31281e+12f
12252path.quadTo(SkBits2Float(0xd4d4d4d4), SkBits2Float(0x2ad4d4d4), SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4cfd4d4)); // -7.31283e+12f, 3.78064e-13f, -7.31283e+12f, -7.14103e+12f
12253path.quadTo(SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4d4d4d4)); // -7.31283e+12f, -7.31283e+12f, -7.31283e+12f, -7.31283e+12f
12254path.quadTo(SkBits2Float(0xd4d40000), SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4d4d4d4)); // -7.28426e+12f, -7.31283e+12f, -7.31283e+12f, -7.31283e+12f
12255
12256 SkPath path2(path);
12257 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
12258}
12259
12260static void fuzzhang_2(skiatest::Reporter* reporter, const char* filename) {
12261 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050012262 path.setFillType((SkPathFillType) 0);
12263path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -040012264path.moveTo(SkBits2Float(0x5568392a), SkBits2Float(0x72837268)); // 1.59583e+13f, 5.20715e+30f
12265path.quadTo(SkBits2Float(0xe0e02972), SkBits2Float(0xe0e060e0), SkBits2Float(0x728e4603), SkBits2Float(0x72727272)); // -1.29221e+20f, -1.29345e+20f, 5.63603e+30f, 4.80216e+30f
12266path.lineTo(SkBits2Float(0x5568392a), SkBits2Float(0x72837268)); // 1.59583e+13f, 5.20715e+30f
12267path.close();
12268path.moveTo(SkBits2Float(0x5568392a), SkBits2Float(0x72837268)); // 1.59583e+13f, 5.20715e+30f
12269path.quadTo(SkBits2Float(0x68720052), SkBits2Float(0x52527372), SkBits2Float(0x00527252), SkBits2Float(0x728e4601)); // 4.57127e+24f, 2.2597e+11f, 7.57152e-39f, 5.63603e+30f
12270path.quadTo(SkBits2Float(0x52ec7272), SkBits2Float(0x6265527f), SkBits2Float(0x8e460152), SkBits2Float(0x72ff8072)); // 5.07766e+11f, 1.05756e+21f, -2.4406e-30f, 1.01215e+31f
12271path.lineTo(SkBits2Float(0x5568392a), SkBits2Float(0x72837268)); // 1.59583e+13f, 5.20715e+30f
12272path.close();
12273path.moveTo(SkBits2Float(0x5568392a), SkBits2Float(0x72837268)); // 1.59583e+13f, 5.20715e+30f
12274path.lineTo(SkBits2Float(0x52626552), SkBits2Float(0x72727272)); // 2.43091e+11f, 4.80216e+30f
12275path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x62727272), SkBits2Float(0x39393939), SkBits2Float(0x728bc739)); // 4.80216e+30f, 1.11809e+21f, 0.000176643f, 5.53719e+30f
12276path.cubicTo(SkBits2Float(0x72728092), SkBits2Float(0x72727260), SkBits2Float(0x4d727272), SkBits2Float(0x5252522a), SkBits2Float(0x72735252), SkBits2Float(0x72707272)); // 4.80325e+30f, 4.80215e+30f, 2.54224e+08f, 2.2583e+11f, 4.81948e+30f, 4.76254e+30f
12277path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x56727272), SkBits2Float(0x72720152), SkBits2Float(0x72727270)); // 4.80216e+30f, 6.66433e+13f, 4.79341e+30f, 4.80216e+30f
12278path.quadTo(SkBits2Float(0x52526172), SkBits2Float(0x8e460300), SkBits2Float(0x72727272), SkBits2Float(0x52525272)); // 2.25894e+11f, -2.44068e-30f, 4.80216e+30f, 2.25832e+11f
12279path.conicTo(SkBits2Float(0xb5727272), SkBits2Float(0x7f2b727f), SkBits2Float(0x607272ff), SkBits2Float(0x72727276), SkBits2Float(0x2a527272)); // -9.03186e-07f, 2.27892e+38f, 6.98812e+19f, 4.80216e+30f, 1.86915e-13f
12280path.lineTo(SkBits2Float(0x5568392a), SkBits2Float(0x72837268)); // 1.59583e+13f, 5.20715e+30f
12281path.close();
12282path.moveTo(SkBits2Float(0x5568392a), SkBits2Float(0x72837268)); // 1.59583e+13f, 5.20715e+30f
12283path.lineTo(SkBits2Float(0x72727272), SkBits2Float(0x52525f72)); // 4.80216e+30f, 2.25886e+11f
12284path.lineTo(SkBits2Float(0x5568392a), SkBits2Float(0x72837268)); // 1.59583e+13f, 5.20715e+30f
12285path.close();
12286path.moveTo(SkBits2Float(0x5568392a), SkBits2Float(0x72837268)); // 1.59583e+13f, 5.20715e+30f
12287path.quadTo(SkBits2Float(0x52727272), SkBits2Float(0x64655252), SkBits2Float(0x72c1c152), SkBits2Float(0x72727272)); // 2.60326e+11f, 1.69209e+22f, 7.67543e+30f, 4.80216e+30f
12288
12289 SkPath path1(path);
12290 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050012291 path.setFillType((SkPathFillType) 0);
12292path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -040012293
12294 SkPath path2(path);
Cary Clarkafca4d62017-12-01 15:23:00 -050012295 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 1, filename);
Yuqian Li3154a532017-09-06 13:33:30 -040012296}
12297
12298static void fuzzhang_3(skiatest::Reporter* reporter, const char* filename) {
12299 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050012300 path.setFillType((SkPathFillType) 0);
12301path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -040012302
12303 SkPath path1(path);
12304 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050012305 path.setFillType((SkPathFillType) 0);
12306path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -040012307path.moveTo(SkBits2Float(0x46090052), SkBits2Float(0x7270726c)); // 8768.08f, 4.76254e+30f
12308path.moveTo(SkBits2Float(0xe0437272), SkBits2Float(0x03e0e060)); // -5.63338e+19f, 1.32171e-36f
12309path.close();
12310path.moveTo(SkBits2Float(0xe0437272), SkBits2Float(0x03e0e060)); // -5.63338e+19f, 1.32171e-36f
12311path.lineTo(SkBits2Float(0x77727272), SkBits2Float(0x52520072)); // 4.91741e+33f, 2.25488e+11f
12312path.lineTo(SkBits2Float(0x46090052), SkBits2Float(0x727272ce)); // 8768.08f, 4.80219e+30f
12313path.quadTo(SkBits2Float(0x725252ec), SkBits2Float(0x72727272), SkBits2Float(0x72727272), SkBits2Float(0x39393962)); // 4.16589e+30f, 4.80216e+30f, 4.80216e+30f, 0.000176644f
12314path.lineTo(SkBits2Float(0x6c460900), SkBits2Float(0x72727072)); // 9.57639e+26f, 4.802e+30f
12315path.cubicTo(SkBits2Float(0xe0e060e0), SkBits2Float(0x72943603), SkBits2Float(0x72777272), SkBits2Float(0x5c525200), SkBits2Float(0x46090052), SkBits2Float(0x727272ce)); // -1.29345e+20f, 5.87124e+30f, 4.90119e+30f, 2.368e+17f, 8768.08f, 4.80219e+30f
12316path.quadTo(SkBits2Float(0x725252ec), SkBits2Float(0x72727272), SkBits2Float(0x72727272), SkBits2Float(0x39393962)); // 4.16589e+30f, 4.80216e+30f, 4.80216e+30f, 0.000176644f
12317path.lineTo(SkBits2Float(0x0052ca00), SkBits2Float(0x728e4603)); // 7.60297e-39f, 5.63603e+30f
12318path.quadTo(SkBits2Float(0xff727272), SkBits2Float(0x52527272), SkBits2Float(0x39392072), SkBits2Float(0xe0393939)); // -3.22267e+38f, 2.25966e+11f, 0.000176551f, -5.3387e+19f
12319path.lineTo(SkBits2Float(0xe0437272), SkBits2Float(0x03e0e060)); // -5.63338e+19f, 1.32171e-36f
12320path.close();
12321path.moveTo(SkBits2Float(0xe0437272), SkBits2Float(0x03e0e060)); // -5.63338e+19f, 1.32171e-36f
12322path.cubicTo(SkBits2Float(0xdada7272), SkBits2Float(0x2dff7272), SkBits2Float(0x767272f0), SkBits2Float(0x72727272), SkBits2Float(0x21727f72), SkBits2Float(0x0b210929)); // -3.07437e+16f, 2.9041e-11f, 1.22936e+33f, 4.80216e+30f, 8.21615e-19f, 3.10144e-32f
12323path.cubicTo(SkBits2Float(0xd6d6d6d6), SkBits2Float(0x72a5d6d6), SkBits2Float(0x72553872), SkBits2Float(0xdada7072), SkBits2Float(0x5252525a), SkBits2Float(0x72727252)); // -1.18109e+14f, 6.56957e+30f, 4.22327e+30f, -3.07426e+16f, 2.25831e+11f, 4.80215e+30f
12324path.quadTo(SkBits2Float(0x72725572), SkBits2Float(0xdada0072), SkBits2Float(0x52524b5a), SkBits2Float(0x72528000)); // 4.79991e+30f, -3.0681e+16f, 2.25802e+11f, 4.16938e+30f
12325path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0xca005252), SkBits2Float(0x46030052), SkBits2Float(0x7272728e)); // 4.80216e+30f, -2.10242e+06f, 8384.08f, 4.80217e+30f
12326path.quadTo(SkBits2Float(0x7272ff72), SkBits2Float(0x20725252), SkBits2Float(0x39393939), SkBits2Float(0xd76ee039)); // 4.81307e+30f, 2.05254e-19f, 0.000176643f, -2.62647e+14f
12327path.cubicTo(SkBits2Float(0xdada7272), SkBits2Float(0x2dff7272), SkBits2Float(0x767272f0), SkBits2Float(0x72727272), SkBits2Float(0x21727f72), SkBits2Float(0x0b210929)); // -3.07437e+16f, 2.9041e-11f, 1.22936e+33f, 4.80216e+30f, 8.21615e-19f, 3.10144e-32f
12328path.cubicTo(SkBits2Float(0xd6d6d6d6), SkBits2Float(0x72a5d6d6), SkBits2Float(0x72553872), SkBits2Float(0xdada7072), SkBits2Float(0x5252525a), SkBits2Float(0x72727252)); // -1.18109e+14f, 6.56957e+30f, 4.22327e+30f, -3.07426e+16f, 2.25831e+11f, 4.80215e+30f
12329path.quadTo(SkBits2Float(0x72725572), SkBits2Float(0xdada0072), SkBits2Float(0x52524b5a), SkBits2Float(0x72528000)); // 4.79991e+30f, -3.0681e+16f, 2.25802e+11f, 4.16938e+30f
12330path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x52525252), SkBits2Float(0x27725252), SkBits2Float(0x72727272)); // 4.80216e+30f, 2.25831e+11f, 3.36289e-15f, 4.80216e+30f
12331path.quadTo(SkBits2Float(0x72667254), SkBits2Float(0x00000040), SkBits2Float(0x00a70155), SkBits2Float(0x726800ff)); // 4.56447e+30f, 8.96831e-44f, 1.5337e-38f, 4.59531e+30f
12332path.quadTo(SkBits2Float(0x7b727272), SkBits2Float(0xad000c52), SkBits2Float(0x1c10adad), SkBits2Float(0x72728d8a)); // 1.25886e+36f, -7.27869e-12f, 4.78701e-22f, 4.80425e+30f
12333path.quadTo(SkBits2Float(0xff056546), SkBits2Float(0x727205ff), SkBits2Float(0x524b5aff), SkBits2Float(0x64005252)); // -1.77313e+38f, 4.79377e+30f, 2.18351e+11f, 9.46846e+21f
12334path.quadTo(SkBits2Float(0x72524872), SkBits2Float(0xdada7272), SkBits2Float(0x5252525a), SkBits2Float(0x72727252)); // 4.16508e+30f, -3.07437e+16f, 2.25831e+11f, 4.80215e+30f
12335path.quadTo(SkBits2Float(0x72724172), SkBits2Float(0xdad10072), SkBits2Float(0x52524b5a), SkBits2Float(0x725b8000)); // 4.79837e+30f, -2.94144e+16f, 2.25802e+11f, 4.34765e+30f
12336path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x52525252), SkBits2Float(0x27725252), SkBits2Float(0x72727272)); // 4.80216e+30f, 2.25831e+11f, 3.36289e-15f, 4.80216e+30f
12337path.quadTo(SkBits2Float(0x72728372), SkBits2Float(0x00000040), SkBits2Float(0xf6a70147), SkBits2Float(0xc2c2c256)); // 4.80347e+30f, 8.96831e-44f, -1.69363e+33f, -97.3796f
12338path.lineTo(SkBits2Float(0xe0437272), SkBits2Float(0x03e0e060)); // -5.63338e+19f, 1.32171e-36f
12339path.close();
12340path.moveTo(SkBits2Float(0x7a787a7a), SkBits2Float(0x7a3a7a7a)); // 3.22543e+35f, 2.42063e+35f
12341path.lineTo(SkBits2Float(0x8f4603e0), SkBits2Float(0x72727272)); // -9.7629e-30f, 4.80216e+30f
12342path.quadTo(SkBits2Float(0x00807272), SkBits2Float(0x46090052), SkBits2Float(0x7270726c), SkBits2Float(0x60e04372)); // 1.1796e-38f, 8768.08f, 4.76254e+30f, 1.29279e+20f
12343path.moveTo(SkBits2Float(0x943603e0), SkBits2Float(0x77727272)); // -9.18942e-27f, 4.91741e+33f
12344path.quadTo(SkBits2Float(0x5c525200), SkBits2Float(0x46090052), SkBits2Float(0x727272ce), SkBits2Float(0x5252ec72)); // 2.368e+17f, 8768.08f, 4.80219e+30f, 2.26478e+11f
12345
12346 SkPath path2(path);
Cary Clarkafca4d62017-12-01 15:23:00 -050012347 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 3, filename);
Yuqian Li3154a532017-09-06 13:33:30 -040012348}
12349
12350static void fuzz754434_1(skiatest::Reporter* reporter, const char* filename) {
12351 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050012352 path.setFillType((SkPathFillType) 0);
12353path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -040012354
12355 SkPath path1(path);
12356 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050012357 path.setFillType((SkPathFillType) 0);
12358path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -040012359path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
12360path.cubicTo(SkBits2Float(0x535e5372), SkBits2Float(0x53536153), SkBits2Float(0x79530f53), SkBits2Float(0x101b6c88), SkBits2Float(0x5353735e), SkBits2Float(0x006df653)); // 9.54883e+11f, 9.07871e+11f, 6.84928e+34f, 3.0652e-29f, 9.08174e+11f, 1.00984e-38f
12361path.cubicTo(SkBits2Float(0xf26df46d), SkBits2Float(0xf6f6f6f6), SkBits2Float(0x5656f666), SkBits2Float(0x5a565656), SkBits2Float(0x00000056), SkBits2Float(0xf66e5600)); // -4.71318e+30f, -2.50452e+33f, 5.90884e+13f, 1.50826e+16f, 1.20512e-43f, -1.20851e+33f
12362path.lineTo(SkBits2Float(0xff00ff56), SkBits2Float(0x00faf6f6)); // -1.71467e+38f, 2.30475e-38f
12363path.moveTo(SkBits2Float(0x60576bfa), SkBits2Float(0x006df653)); // 6.20911e+19f, 1.00984e-38f
12364path.cubicTo(SkBits2Float(0xf26df46d), SkBits2Float(0xf653f6f6), SkBits2Float(0x563ef666), SkBits2Float(0x56565656), SkBits2Float(0x65565656), SkBits2Float(0xf6765656)); // -4.71318e+30f, -1.07479e+33f, 5.24914e+13f, 5.89166e+13f, 6.32612e+22f, -1.24908e+33f
12365
12366 SkPath path2(path);
12367 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 3, filename);
12368}
12369
12370static void fuzz754434_2(skiatest::Reporter* reporter, const char* filename) {
12371 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050012372 path.setFillType((SkPathFillType) 1);
12373path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -040012374path.moveTo(SkBits2Float(0xff00ff56), SkBits2Float(0x00000000)); // -1.71467e+38f, 0
12375path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0xf66e5600)); // 0, -1.20851e+33f
12376path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0xf629168b)); // 0, -8.57378e+32f
12377path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
12378path.lineTo(SkBits2Float(0xff00ff56), SkBits2Float(0x00000000)); // -1.71467e+38f, 0
12379path.close();
12380
12381 SkPath path1(path);
12382 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050012383 path.setFillType((SkPathFillType) 0);
12384path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -040012385path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
12386path.lineTo(SkBits2Float(0x03e8f6f6), SkBits2Float(0xf7060000)); // 1.36924e-36f, -2.71784e+33f
12387path.lineTo(SkBits2Float(0x4ff6f6f6), SkBits2Float(0x3e3e3e2a)); // 8.28676e+09f, 0.185784f
12388path.conicTo(SkBits2Float(0x6c8879ff), SkBits2Float(0x08761b1b), SkBits2Float(0x7066662d), SkBits2Float(0x70707070), SkBits2Float(0x70707070)); // 1.31992e+27f, 7.40598e-34f, 2.8522e+29f, 2.97649e+29f, 2.97649e+29f
12389
12390 SkPath path2(path);
12391 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
12392}
12393
12394static void fuzz754434_3(skiatest::Reporter* reporter, const char* filename) {
12395 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050012396 path.setFillType((SkPathFillType) 0);
12397path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -040012398
12399 SkPath path1(path);
12400 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050012401 path.setFillType((SkPathFillType) 0);
12402path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -040012403path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
12404path.cubicTo(SkBits2Float(0x535e5372), SkBits2Float(0x53536153), SkBits2Float(0x79530f53), SkBits2Float(0x101b6c88), SkBits2Float(0x5353735e), SkBits2Float(0x006df653)); // 9.54883e+11f, 9.07871e+11f, 6.84928e+34f, 3.0652e-29f, 9.08174e+11f, 1.00984e-38f
12405path.cubicTo(SkBits2Float(0xf26df46d), SkBits2Float(0xf6f6f6f6), SkBits2Float(0x5656f666), SkBits2Float(0x5a565656), SkBits2Float(0x00000056), SkBits2Float(0xf66e5600)); // -4.71318e+30f, -2.50452e+33f, 5.90884e+13f, 1.50826e+16f, 1.20512e-43f, -1.20851e+33f
12406path.lineTo(SkBits2Float(0xff00ff56), SkBits2Float(0x00faf6f6)); // -1.71467e+38f, 2.30475e-38f
12407path.moveTo(SkBits2Float(0x60576bfa), SkBits2Float(0x006df653)); // 6.20911e+19f, 1.00984e-38f
12408path.cubicTo(SkBits2Float(0xf26df46d), SkBits2Float(0xf653f6f6), SkBits2Float(0x563ef666), SkBits2Float(0x56565656), SkBits2Float(0x65565656), SkBits2Float(0xf6765656)); // -4.71318e+30f, -1.07479e+33f, 5.24914e+13f, 5.89166e+13f, 6.32612e+22f, -1.24908e+33f
12409
12410 SkPath path2(path);
12411 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 3, filename);
12412}
12413
12414static void fuzz754434_4(skiatest::Reporter* reporter, const char* filename) {
12415 SkPath path;
Mike Reed7d34dc72019-11-26 12:17:17 -050012416 path.setFillType((SkPathFillType) 1);
12417path.setFillType(SkPathFillType::kEvenOdd);
Yuqian Li3154a532017-09-06 13:33:30 -040012418path.moveTo(SkBits2Float(0xff00ff56), SkBits2Float(0x00000000)); // -1.71467e+38f, 0
12419path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0xf66e5600)); // 0, -1.20851e+33f
12420path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0xf629168b)); // 0, -8.57378e+32f
12421path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
12422path.lineTo(SkBits2Float(0xff00ff56), SkBits2Float(0x00000000)); // -1.71467e+38f, 0
12423path.close();
12424
12425 SkPath path1(path);
12426 path.reset();
Mike Reed7d34dc72019-11-26 12:17:17 -050012427 path.setFillType((SkPathFillType) 0);
12428path.setFillType(SkPathFillType::kWinding);
Yuqian Li3154a532017-09-06 13:33:30 -040012429path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
12430path.lineTo(SkBits2Float(0x03e8f6f6), SkBits2Float(0xf7060000)); // 1.36924e-36f, -2.71784e+33f
12431path.lineTo(SkBits2Float(0x4ff6f6f6), SkBits2Float(0x3e3e3e2a)); // 8.28676e+09f, 0.185784f
12432path.conicTo(SkBits2Float(0x6c8879ff), SkBits2Float(0x08761b1b), SkBits2Float(0x7066662d), SkBits2Float(0x70707070), SkBits2Float(0x70707070)); // 1.31992e+27f, 7.40598e-34f, 2.8522e+29f, 2.97649e+29f, 2.97649e+29f
12433
12434 SkPath path2(path);
12435 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
12436}
12437
12438static struct TestDesc failTests[] = {
Cary Clarkafca4d62017-12-01 15:23:00 -050012439 TEST(fuzz767834),
Yuqian Li3154a532017-09-06 13:33:30 -040012440 TEST(fuzz754434_1),
12441 TEST(fuzz754434_2),
12442 TEST(fuzz754434_3),
12443 TEST(fuzz754434_4),
12444 TEST(fuzzhang_3),
12445 TEST(fuzzhang_2),
12446 TEST(release_13),
12447 TEST(fuzzhang_1),
12448 TEST(fuzz763_57),
12449 TEST(fuzz763_56),
12450 TEST(fuzz763_55),
12451 TEST(fuzz763_54),
12452 TEST(fuzz763_53),
12453 TEST(fuzz763_52),
12454 TEST(fuzz763_51),
12455 TEST(fuzz763_50),
12456 TEST(fuzz763_49),
12457 TEST(fuzz763_48),
12458 TEST(fuzz763_47),
12459 TEST(fuzz763_46),
12460 TEST(fuzz763_45),
12461 TEST(fuzz763_44),
12462 TEST(fuzz763_43),
12463 TEST(fuzz763_42),
12464 TEST(fuzz763_41),
12465 TEST(fuzz763_40),
12466 TEST(fuzz763_39),
12467 TEST(fuzz763_38),
12468 TEST(fuzz763_37),
12469 TEST(fuzz763_36),
12470 TEST(fuzz763_35),
12471 TEST(fuzz763_34),
12472 TEST(fuzz763_33),
12473 TEST(fuzz763_32),
12474 TEST(fuzz763_31),
12475 TEST(fuzz763_30),
12476 TEST(fuzz763_29),
12477 TEST(fuzz763_28),
12478 TEST(fuzz763_27),
12479 TEST(fuzz763_26),
12480 TEST(fuzz763_25),
12481 TEST(fuzz763_24),
12482 TEST(fuzz763_23),
12483 TEST(fuzz763_22),
12484 TEST(fuzz763_21),
12485 TEST(fuzz763_20),
12486 TEST(fuzz763_19),
12487 TEST(fuzz763_18),
12488 TEST(fuzz763_17),
12489 TEST(fuzz763_16),
12490 TEST(fuzz763_15),
12491 TEST(fuzz763_14),
12492 TEST(fuzz763_13),
12493 TEST(fuzz763_12),
12494 TEST(fuzz763_11),
12495 TEST(fuzz763_10),
12496 TEST(kfuzz2),
12497 TEST(fuzz763_7),
12498 TEST(fuzz763_6),
12499 TEST(fuzz763_2c),
12500 TEST(fuzz763_2b),
12501 TEST(fuzz763_2a),
12502 TEST(fuzz763_5a),
12503 TEST(fuzz763_3a),
12504 TEST(fuzz763_1a),
12505 TEST(fuzz763_1b),
12506 TEST(fuzz763_1c),
12507 TEST(fuzz763_2),
12508 TEST(fuzz763_5),
12509 TEST(fuzz763_3),
12510 TEST(fuzz763_4),
12511 TEST(fuzz763_9),
12512 TEST(fuzz1450_1),
12513 TEST(fuzz1450_0),
12514 TEST(bug597926_0),
12515 TEST(fuzz535151),
12516 TEST(fuzz753_91),
12517 TEST(fuzz714),
12518 TEST(fuzz487a),
12519 TEST(fuzz433),
12520 TEST(fuzz1),
12521 TEST(fuzz487b),
12522 TEST(fuzz433b),
12523 TEST(bufferOverflow),
12524};
12525
12526static const size_t failTestCount = SK_ARRAY_COUNT(failTests);
12527
12528DEF_TEST(PathOpsFailOp, reporter) {
Yuqian Li3154a532017-09-06 13:33:30 -040012529 RunTestSet(reporter, failTests, failTestCount, nullptr, nullptr, nullptr, false);
12530}
12531
12532static struct TestDesc repTests[] = {
12533 TEST(fuzz763_5a),
12534};
12535
12536DEF_TEST(PathOpsRepOp, reporter) {
Cary Clark4533f3d2018-08-08 09:48:09 -040012537 if (PathOpsDebug::gJson) {
12538 return;
12539 }
Yuqian Li3154a532017-09-06 13:33:30 -040012540 for (int index = 0; index < 1; ++index)
12541 RunTestSet(reporter, repTests, SK_ARRAY_COUNT(repTests), nullptr, nullptr, nullptr, false);
12542}