/*
 * Copyright 2012 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */
#include "PathOpsExtendedTest.h"

#define TEST(name) { name, #name }

#define TRY_NEW_TESTS 0
#define TRY_NEW_TESTS_IS_CLOSED 0

static void skpcheeseandburger_com225(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(555, 468);
    path.lineTo(555, 362);
    path.lineTo(872, 362);
    path.lineTo(872, 468);
    path.lineTo(555, 468);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(859.11792f, 397.320343f);
    pathB.cubicTo(855.523071f, 399.691284f, 853.721191f, 402.40863f, 853.721191f, 405.552216f);
    pathB.cubicTo(853.721191f, 407.911163f, 854.727478f, 410.115387f, 857.043518f, 412.252716f);
    pathB.cubicTo(859.920532f, 414.916138f, 862.704773f, 417.086426f, 864.679382f, 418.852386f);
    pathB.cubicTo(866.382446f, 420.371765f, 867.19104f, 422.108795f, 867.19104f, 423.506378f);
    pathB.cubicTo(867.19104f, 424.551605f, 866.741821f, 425.539886f, 865.935242f, 426.281616f);
    pathB.cubicTo(865.250366f, 426.910553f, 864.662415f, 427.339813f, 864.139282f, 427.4646f);
    pathB.cubicTo(863.536377f, 427.605347f, 862.259521f, 426.491272f, 860.366821f, 424.208191f);
    pathB.cubicTo(858.345276f, 421.770355f, 857.317017f, 419.733856f, 857.317017f, 417.98587f);
    pathB.cubicTo(857.317017f, 417.198212f, 857.942993f, 415.930389f, 857.942993f, 415.930389f);
    pathB.cubicTo(857.942993f, 415.930389f, 852.106018f, 421.296173f, 852.279663f, 422.549042f);
    pathB.cubicTo(852.462402f, 423.890747f, 853.669312f, 425.703613f, 855.876465f, 428.252258f);
    pathB.cubicTo(858.038818f, 430.754944f, 859.4953f, 431.840088f, 860.190125f, 431.594513f);
    pathB.cubicTo(862.571045f, 430.754944f, 865.48999f, 429.237549f, 868.44397f, 427.018372f);
    pathB.cubicTo(870.505371f, 425.470032f, 871.582581f, 423.534332f, 871.582581f, 421.001678f);
    pathB.cubicTo(871.582581f, 417.945923f, 870.056213f, 415.171692f, 867.015381f, 412.640045f);
    pathB.cubicTo(863.683105f, 409.872803f, 861.445923f, 408.027954f, 860.551514f, 407.140503f);
    pathB.cubicTo(858.660767f, 405.264709f, 857.765259f, 403.50174f, 857.765259f, 402.187988f);
    pathB.cubicTo(857.765259f, 401.141785f, 858.339355f, 400.394073f, 859.476318f, 399.925873f);
    pathB.cubicTo(860.004395f, 399.704254f, 861.270264f, 400.515869f, 863.156006f, 402.36969f);
    pathB.cubicTo(865.094727f, 404.28241f, 866.203796f, 405.565186f, 866.383484f, 406.130219f);
    pathB.cubicTo(868.250244f, 404.305359f, 869.179688f, 403.397919f, 871.046509f, 401.58902f);
    pathB.cubicTo(868.26825f, 399.296967f, 864.431824f, 394.705841f, 863.156006f, 394.600037f);
    pathB.cubicTo(863.145996f, 394.600037f, 863.136108f, 394.59903f, 863.126099f, 394.59903f);
    pathB.cubicTo(862.352417f, 394.598022f, 859.909607f, 396.79425f, 859.11792f, 397.320343f);
    pathB.moveTo(832.164246f, 394.307526f);
    pathB.cubicTo(832.451721f, 394.425323f, 832.598511f, 394.486206f, 832.886963f, 394.605011f);
    pathB.cubicTo(834.078979f, 395.474518f, 834.674927f, 395.90979f, 835.867859f, 396.781281f);
    pathB.cubicTo(836.502808f, 397.325348f, 836.863159f, 398.000183f, 836.863159f, 398.964539f);
    pathB.lineTo(836.863159f, 419.740845f);
    pathB.cubicTo(836.863159f, 420.876923f, 836.319092f, 422.17868f, 835.055298f, 423.617188f);
    pathB.cubicTo(836.39502f, 424.512665f, 837.063843f, 424.961884f, 838.39856f, 425.864349f);
    pathB.cubicTo(839.477661f, 426.578125f, 841.37439f, 427.27594f, 842.275879f, 427.443634f);
    pathB.cubicTo(842.999634f, 427.574402f, 843.82019f, 427.513519f, 844.354309f, 427.216034f);
    pathB.cubicTo(846.956787f, 425.765503f, 848.689819f, 423.588257f, 848.58606f, 423.483429f);
    pathB.cubicTo(848.58606f, 423.483429f, 846.877991f, 423.327698f, 845.971558f, 422.807587f);
    pathB.cubicTo(845.253784f, 422.284485f, 844.892395f, 422.022949f, 844.171631f, 421.502838f);
    pathB.cubicTo(843.361023f, 420.915833f, 842.907837f, 420.308899f, 842.907837f, 419.350525f);
    pathB.lineTo(842.907837f, 399.445709f);
    pathB.cubicTo(842.907837f, 398.053101f, 843.272217f, 397.417175f, 843.812256f, 397.518005f);
    pathB.cubicTo(844.170654f, 397.583893f, 844.711731f, 398.122986f, 845.432495f, 398.782837f);
    pathB.cubicTo(846.116333f, 399.402771f, 846.459717f, 399.709259f, 847.14856f, 400.3302f);
    pathB.cubicTo(844.986206f, 402.099152f, 843.988892f, 403.926025f, 843.988892f, 405.932556f);
    pathB.cubicTo(843.988892f, 410.209229f, 848.272583f, 410.951935f, 849.576355f, 408.394348f);
    pathB.cubicTo(849.871826f, 407.816345f, 850.421875f, 406.214081f, 850.387939f, 406.196106f);
    pathB.cubicTo(850.387939f, 406.196106f, 849.305786f, 406.771118f, 848.495239f, 406.615387f);
    pathB.cubicTo(846.96582f, 406.316895f, 846.153198f, 405.46637f, 846.153198f, 403.89505f);
    pathB.cubicTo(846.153198f, 401.796661f, 848.50116f, 399.09729f, 852.279663f, 396.270142f);
    pathB.cubicTo(851.014893f, 395.315796f, 847.723511f, 391.546265f, 846.875f, 391.546265f);
    pathB.cubicTo(846.330933f, 391.546265f, 843.988892f, 394.403351f, 843.273193f, 394.972382f);
    pathB.cubicTo(840.889282f, 392.886963f, 839.700317f, 391.850739f, 837.312378f, 389.786285f);
    pathB.cubicTo(835.257935f, 391.589203f, 834.225708f, 392.491638f, 832.164246f, 394.307526f);
    pathB.moveTo(818.860107f, 392.707275f);
    pathB.cubicTo(819.857361f, 393.382111f, 822.302124f, 395.764038f, 824.387573f, 397.051819f);
    pathB.cubicTo(822.57666f, 398.249756f, 820.582092f, 399.687286f, 818.860107f, 400.827332f);
    pathB.lineTo(818.860107f, 392.707275f);
    pathB.close();
    pathB.moveTo(810.69812f, 391.096039f);
    pathB.cubicTo(810.69812f, 391.096039f, 812.786499f, 394.093903f, 812.786499f, 394.965393f);
    pathB.lineTo(812.786499f, 415.743713f);
    pathB.cubicTo(812.786499f, 417.753265f, 811.881042f, 418.497986f, 810.974609f, 419.769806f);
    pathB.cubicTo(813.948486f, 421.160431f, 815.437988f, 421.864197f, 818.404846f, 423.283783f);
    pathB.cubicTo(819.948181f, 423.95462f, 822.417969f, 424.592529f, 823.937317f, 423.782928f);
    pathB.cubicTo(827.905518f, 421.663544f, 831.53125f, 417.600525f, 832.255005f, 415.191681f);
    pathB.cubicTo(833.882263f, 409.877808f, 823.095825f, 411.495026f, 823.119751f, 411.518982f);
    pathB.cubicTo(823.119751f, 411.518982f, 832.000488f, 411.874359f, 830.537964f, 416.29776f);
    pathB.cubicTo(829.888123f, 418.253418f, 827.278564f, 420.292908f, 825.385864f, 419.55719f);
    pathB.cubicTo(821.14209f, 417.915985f, 818.861023f, 417.414856f, 818.861023f, 414.970032f);
    pathB.lineTo(818.861023f, 403.096436f);
    pathB.cubicTo(822.126404f, 399.132233f, 831.289673f, 395.897797f, 831.356567f, 395.657227f);
    pathB.cubicTo(831.356567f, 395.657227f, 823.022888f, 387.594055f, 821.763062f, 387.476257f);
    pathB.cubicTo(821.755066f, 387.47525f, 821.746094f, 387.47525f, 821.737061f, 387.47525f);
    pathB.cubicTo(820.793701f, 387.47525f, 810.72406f, 390.967255f, 810.69812f, 391.096039f);
    pathB.moveTo(624.254211f, 390.498077f);
    pathB.cubicTo(625.252502f, 390.893402f, 627.708252f, 392.592468f, 629.796692f, 393.307251f);
    pathB.cubicTo(627.978821f, 395.006317f, 625.980225f, 397.000916f, 624.254211f, 398.618134f);
    pathB.lineTo(624.254211f, 390.498077f);
    pathB.close();
    pathB.moveTo(627.160217f, 384.460449f);
    pathB.cubicTo(626.286743f, 384.51535f, 616.076233f, 390.993225f, 616.086243f, 391.141968f);
    pathB.cubicTo(616.086243f, 391.141968f, 618.173645f, 393.561798f, 618.173645f, 394.437317f);
    pathB.lineTo(618.173645f, 415.216614f);
    pathB.cubicTo(618.173645f, 417.222168f, 617.265198f, 418.219482f, 616.355774f, 419.742859f);
    pathB.cubicTo(619.331665f, 420.307892f, 620.824097f, 420.599396f, 623.802979f, 421.198364f);
    pathB.cubicTo(625.346313f, 421.437958f, 627.818115f, 421.39801f, 629.342468f, 420.166138f);
    pathB.cubicTo(633.340576f, 416.939667f, 636.982361f, 411.871368f, 637.714111f, 409.263855f);
    pathB.cubicTo(639.348267f, 403.500732f, 628.508911f, 408.111816f, 628.52887f, 408.126801f);
    pathB.cubicTo(628.52887f, 408.126801f, 637.468506f, 405.998444f, 635.985046f, 410.844147f);
    pathB.cubicTo(635.332153f, 412.984467f, 632.705688f, 415.748718f, 630.801941f, 415.541077f);
    pathB.cubicTo(626.537292f, 415.072876f, 624.257202f, 415.202667f, 624.257202f, 412.755859f);
    pathB.cubicTo(624.257202f, 408.007019f, 624.255188f, 405.636078f, 624.255188f, 400.884247f);
    pathB.cubicTo(627.525574f, 396.016602f, 636.801636f, 390.283447f, 636.801636f, 389.97995f);
    pathB.cubicTo(636.801636f, 389.97995f, 628.360168f, 384.458435f, 627.18219f, 384.458435f);
    pathB.cubicTo(627.174194f, 384.460449f, 627.167236f, 384.460449f, 627.160217f, 384.460449f);
    pathB.moveTo(796.530396f, 416.438538f);
    pathB.cubicTo(795.892517f, 416.365662f, 794.527832f, 415.589996f, 792.348572f, 414.036652f);
    pathB.lineTo(792.348572f, 391.425476f);
    pathB.cubicTo(792.348572f, 390.465118f, 792.530273f, 390.047852f, 792.89563f, 390.088776f);
    pathB.cubicTo(793.075317f, 390.109741f, 793.3479f, 390.317383f, 793.804077f, 390.629852f);
    pathB.cubicTo(795.113831f, 391.585205f, 795.768738f, 392.059387f, 797.077515f, 393.018738f);
    pathB.cubicTo(797.983948f, 393.648651f, 798.348267f, 394.219666f, 798.348267f, 394.742767f);
    pathB.lineTo(798.348267f, 413.253998f);
    pathB.cubicTo(798.348267f, 415.391327f, 797.783264f, 416.451508f, 796.728088f, 416.451508f);
    pathB.cubicTo(796.664185f, 416.4505f, 796.598267f, 416.446533f, 796.530396f, 416.438538f);
    pathB.moveTo(795.165771f, 383.714722f);
    pathB.cubicTo(794.022705f, 383.851471f, 783.959961f, 388.652252f, 783.880127f, 388.873871f);
    pathB.cubicTo(783.880127f, 388.873871f, 785.054077f, 389.871155f, 785.522339f, 390.606873f);
    pathB.cubicTo(786.000488f, 391.361603f, 786.246094f, 391.9935f, 786.246094f, 392.427765f);
    pathB.lineTo(786.246094f, 411.987183f);
    pathB.cubicTo(786.246094f, 413.733185f, 784.160645f, 416.428558f, 784.246521f, 416.759979f);
    pathB.cubicTo(784.258484f, 416.79892f, 785.432495f, 417.14032f, 785.793823f, 417.350952f);
    pathB.cubicTo(786.739258f, 417.937958f, 787.213379f, 418.228455f, 788.161804f, 418.821442f);
    pathB.cubicTo(789.342773f, 419.554199f, 790.619568f, 419.956482f, 791.892395f, 420.098236f);
    pathB.cubicTo(794.533813f, 420.390747f, 796.717102f, 419.337555f, 798.349304f, 416.999573f);
    pathB.lineTo(798.349304f, 425.212463f);
    pathB.cubicTo(797.94696f, 425.47702f, 797.750305f, 425.609772f, 797.356018f, 425.874329f);
    pathB.cubicTo(795.259583f, 423.619202f, 792.806824f, 422.286499f, 789.985657f, 421.984009f);
    pathB.cubicTo(785.157959f, 421.463898f, 780.409119f, 428.344086f, 780.423096f, 428.346069f);
    pathB.cubicTo(780.423096f, 428.346069f, 783.340088f, 424.960907f, 785.889709f, 425.218445f);
    pathB.cubicTo(789.25592f, 425.565857f, 793.166199f, 430.745972f, 793.805115f, 430.790894f);
    pathB.cubicTo(793.940857f, 430.798889f, 795.918457f, 429.091797f, 798.454102f, 427.383728f);
    pathB.cubicTo(801.049683f, 425.635742f, 804.230225f, 423.886749f, 806.619141f, 423.980591f);
    pathB.cubicTo(805.621826f, 423.586243f, 805.048828f, 423.074127f, 804.804199f, 422.609924f);
    pathB.cubicTo(804.616577f, 422.25354f, 804.616577f, 421.539764f, 804.616577f, 420.31488f);
    pathB.cubicTo(804.623535f, 411.732605f, 804.623535f, 403.147339f, 804.623535f, 394.562073f);
    pathB.cubicTo(804.623535f, 392.464691f, 805.970215f, 391.000183f, 805.984192f, 390.896362f);
    pathB.cubicTo(805.984192f, 390.896362f, 796.785034f, 383.7117f, 795.219666f, 383.7117f);
    pathB.cubicTo(795.19873f, 383.712708f, 795.181763f, 383.712708f, 795.165771f, 383.714722f);
    pathB.moveTo(648.092285f, 387.883545f);
    pathB.cubicTo(649.095581f, 388.312805f, 651.55835f, 390.099762f, 653.655701f, 390.884399f);
    pathB.cubicTo(651.831848f, 392.522583f, 649.82428f, 394.447296f, 648.092285f, 396.003601f);
    pathB.lineTo(648.092285f, 387.883545f);
    pathB.close();
    pathB.moveTo(651.009277f, 381.943756f);
    pathB.cubicTo(650.147766f, 381.983704f, 639.893372f, 388.105164f, 639.899353f, 388.254913f);
    pathB.cubicTo(639.899353f, 388.254913f, 641.987793f, 390.744659f, 641.987793f, 391.617157f);
    pathB.lineTo(641.987793f, 412.399475f);
    pathB.cubicTo(641.987793f, 414.409027f, 641.082336f, 415.369354f, 640.169861f, 416.864807f);
    pathB.cubicTo(643.155762f, 417.53064f, 644.650208f, 417.87207f, 647.638062f, 418.573853f);
    pathB.cubicTo(649.188416f, 418.865356f, 651.666138f, 418.908295f, 653.19751f, 417.725311f);
    pathB.cubicTo(657.204651f, 414.633636f, 660.859375f, 409.690125f, 661.590088f, 407.106567f);
    pathB.cubicTo(663.231262f, 401.397339f, 652.356934f, 405.644073f, 652.375916f, 405.663025f);
    pathB.cubicTo(652.375916f, 405.663025f, 661.338562f, 403.835175f, 659.857056f, 408.632935f);
    pathB.cubicTo(659.199219f, 410.748291f, 656.568726f, 413.424713f, 654.656982f, 413.151184f);
    pathB.cubicTo(650.381348f, 412.536224f, 648.092285f, 412.591125f, 648.092285f, 410.146332f);
    pathB.lineTo(648.092285f, 398.270721f);
    pathB.cubicTo(651.374634f, 393.5159f, 660.66571f, 388.09021f, 660.674683f, 387.791718f);
    pathB.cubicTo(660.674683f, 387.791718f, 652.188232f, 381.941772f, 651.022278f, 381.942749f);
    pathB.cubicTo(651.01825f, 381.942749f, 651.013245f, 381.942749f, 651.009277f, 381.943756f);
    pathB.moveTo(761.636353f, 385.965851f);
    pathB.cubicTo(761.927856f, 386.056702f, 762.071594f, 386.098633f, 762.363098f, 386.189453f);
    pathB.cubicTo(763.570007f, 386.938171f, 764.175964f, 387.311554f, 765.376892f, 388.066254f);
    pathB.cubicTo(766.019775f, 388.546417f, 766.384155f, 389.184326f, 766.384155f, 390.147675f);
    pathB.lineTo(766.384155f, 410.924011f);
    pathB.cubicTo(766.384155f, 412.057037f, 765.836121f, 413.410736f, 764.559326f, 414.979034f);
    pathB.cubicTo(765.911987f, 415.738739f, 766.579834f, 416.12207f, 767.934509f, 416.887756f);
    pathB.cubicTo(769.029602f, 417.495728f, 770.944336f, 418.000854f, 771.85675f, 418.075714f);
    pathB.cubicTo(772.58551f, 418.134613f, 773.413086f, 417.987854f, 773.950195f, 417.638458f);
    pathB.cubicTo(776.583618f, 415.917419f, 778.332642f, 413.564453f, 778.237793f, 413.473633f);
    pathB.cubicTo(778.237793f, 413.473633f, 776.507812f, 413.497559f, 775.596313f, 413.066315f);
    pathB.cubicTo(774.866577f, 412.61908f, 774.497253f, 412.39447f, 773.771484f, 411.951233f);
    pathB.cubicTo(772.947876f, 411.444092f, 772.493652f, 410.877075f, 772.493652f, 409.919708f);
    pathB.lineTo(772.493652f, 390.013885f);
    pathB.cubicTo(772.493652f, 388.618286f, 772.860046f, 387.949432f, 773.407104f, 387.995361f);
    pathB.cubicTo(773.771484f, 388.026306f, 774.318542f, 388.509491f, 775.049316f, 389.09848f);
    pathB.cubicTo(775.742065f, 389.646515f, 776.088501f, 389.923065f, 776.77533f, 390.470123f);
    pathB.cubicTo(774.590088f, 392.45871f, 773.589783f, 394.385376f, 773.589783f, 396.395935f);
    pathB.cubicTo(773.589783f, 400.673584f, 777.907349f, 401.008026f, 779.237122f, 398.292694f);
    pathB.cubicTo(779.539551f, 397.684723f, 780.089661f, 396.027557f, 780.058716f, 396.01358f);
    pathB.cubicTo(780.058716f, 396.01358f, 778.970581f, 396.694427f, 778.149963f, 396.618561f);
    pathB.cubicTo(776.598633f, 396.4758f, 775.775024f, 395.709106f, 775.775024f, 394.13681f);
    pathB.cubicTo(775.775024f, 392.042419f, 778.149963f, 389.103455f, 781.973389f, 385.892975f);
    pathB.cubicTo(780.697571f, 385.06839f, 777.326416f, 381.676208f, 776.506775f, 381.719147f);
    pathB.cubicTo(775.908813f, 381.747101f, 773.588806f, 384.868744f, 772.860046f, 385.506622f);
    pathB.cubicTo(770.451172f, 383.664795f, 769.248291f, 382.749359f, 766.843384f, 380.929504f);
    pathB.cubicTo(764.758972f, 382.934052f, 763.716736f, 383.940338f, 761.636353f, 385.965851f);
    pathB.moveTo(672.996521f, 379.821411f);
    pathB.cubicTo(672.123047f, 379.891266f, 669.7052f, 382.898132f, 668.887573f, 383.64682f);
    pathB.cubicTo(665.239868f, 386.999084f, 663.41095f, 390.213562f, 663.41095f, 393.356171f);
    pathB.cubicTo(663.41095f, 395.715118f, 664.439209f, 397.642792f, 666.785156f, 399.150208f);
    pathB.cubicTo(669.702148f, 401.02002f, 672.547302f, 402.439575f, 674.545837f, 403.655487f);
    pathB.cubicTo(676.261902f, 404.697693f, 677.105469f, 406.231049f, 677.105469f, 407.625671f);
    pathB.cubicTo(677.105469f, 408.671875f, 676.651245f, 409.777954f, 675.825684f, 410.7453f);
    pathB.cubicTo(675.12384f, 411.569885f, 674.538879f, 412.145905f, 673.997803f, 412.417419f);
    pathB.cubicTo(673.38385f, 412.724915f, 672.080078f, 411.958221f, 670.166382f, 410.198242f);
    pathB.cubicTo(668.113892f, 408.319458f, 667.062683f, 406.55249f, 667.062683f, 404.808502f);
    pathB.cubicTo(667.062683f, 404.020844f, 667.701599f, 402.580322f, 667.701599f, 402.580322f);
    pathB.cubicTo(667.701599f, 402.580322f, 661.773804f, 409.542358f, 661.951477f, 410.7453f);
    pathB.cubicTo(662.13916f, 412.037079f, 663.368042f, 413.524536f, 665.60321f, 415.469208f);
    pathB.cubicTo(667.791443f, 417.368927f, 669.261963f, 418.074738f, 669.983704f, 417.630493f);
    pathB.cubicTo(672.412537f, 416.138062f, 675.369446f, 413.822021f, 678.385254f, 410.790222f);
    pathB.cubicTo(680.485657f, 408.677856f, 681.587769f, 406.446686f, 681.587769f, 403.917023f);
    pathB.cubicTo(681.587769f, 400.859283f, 680.007446f, 398.490356f, 676.923767f, 396.806244f);
    pathB.cubicTo(673.540588f, 394.957428f, 671.257507f, 393.71756f, 670.351074f, 393.075653f);
    pathB.cubicTo(668.434326f, 391.71698f, 667.518921f, 390.193604f, 667.518921f, 388.88385f);
    pathB.cubicTo(667.518921f, 387.837646f, 668.101929f, 386.934204f, 669.25592f, 386.156525f);
    pathB.cubicTo(669.796997f, 385.788147f, 671.085815f, 386.257355f, 672.997498f, 387.592072f);
    pathB.cubicTo(674.966125f, 388.968689f, 676.104187f, 389.951019f, 676.284851f, 390.465118f);
    pathB.cubicTo(678.186584f, 388.130127f, 679.136963f, 386.966125f, 681.035706f, 384.646118f);
    pathB.cubicTo(678.244507f, 383.133728f, 674.247375f, 379.819397f, 673.044434f, 379.819397f);
    pathB.cubicTo(673.027466f, 379.819397f, 673.011475f, 379.820404f, 672.996521f, 379.821411f);
    pathB.moveTo(732.95459f, 384.60318f);
    pathB.cubicTo(733.246094f, 384.680054f, 733.391846f, 384.720001f, 733.689331f, 384.794861f);
    pathB.cubicTo(735.072937f, 385.500641f, 735.769714f, 385.856049f, 737.162354f, 386.563812f);
    pathB.cubicTo(737.891113f, 386.938171f, 738.164612f, 387.642975f, 738.164612f, 388.6073f);
    pathB.lineTo(738.164612f, 408.510132f);
    pathB.cubicTo(738.164612f, 410.257141f, 737.709412f, 411.893341f, 736.064209f, 413.416718f);
    pathB.cubicTo(737.635498f, 414.235321f, 738.419189f, 414.651611f, 739.991455f, 415.475189f);
    pathB.cubicTo(740.997742f, 416.034241f, 742.186707f, 416.344696f, 743.098145f, 416.379639f);
    pathB.cubicTo(743.830872f, 416.410583f, 744.476807f, 416.175964f, 745.019836f, 415.851532f);
    pathB.cubicTo(746.476318f, 414.977051f, 748.58075f, 413.571442f, 749.225647f, 413.079285f);
    pathB.cubicTo(751.012573f, 414.253296f, 751.907043f, 414.845276f, 753.69696f, 416.028229f);
    pathB.cubicTo(754.703247f, 416.610229f, 755.706543f, 416.84082f, 756.528076f, 416.892761f);
    pathB.cubicTo(757.259827f, 416.93866f, 757.996582f, 416.807892f, 758.537659f, 416.494446f);
    pathB.cubicTo(760.814758f, 415.174713f, 762.185425f, 413.509552f, 762.552734f, 412.830719f);
    pathB.cubicTo(761.637329f, 412.681976f, 759.633789f, 411.58786f, 759.263428f, 411.387207f);
    pathB.cubicTo(758.607544f, 410.994873f, 758.279114f, 410.803223f, 757.621216f, 410.413879f);
    pathB.cubicTo(756.983276f, 410.020538f, 756.616943f, 409.301788f, 756.616943f, 408.343445f);
    pathB.lineTo(756.616943f, 388.351746f);
    pathB.cubicTo(756.616943f, 387.387421f, 757.164978f, 386.548859f, 758.627502f, 385.067383f);
    pathB.cubicTo(755.523804f, 383.05484f, 753.97052f, 382.057556f, 750.862854f, 380.078949f);
    pathB.cubicTo(749.001038f, 382.112457f, 748.069641f, 383.130707f, 746.207825f, 385.174194f);
    pathB.cubicTo(746.501343f, 385.292999f, 746.647095f, 385.353912f, 746.939575f, 385.472687f);
    pathB.cubicTo(747.996765f, 386.183472f, 748.525879f, 386.538879f, 749.587036f, 387.257629f);
    pathB.cubicTo(750.224915f, 387.724823f, 750.498474f, 388.351746f, 750.498474f, 389.223267f);
    pathB.lineTo(750.498474f, 407.822327f);
    pathB.cubicTo(750.498474f, 408.694824f, 750.339722f, 409.955658f, 749.951416f, 410.847137f);
    pathB.cubicTo(749.550049f, 411.761566f, 749.039978f, 411.585876f, 748.487915f, 411.560913f);
    pathB.cubicTo(747.393799f, 411.503998f, 746.385498f, 410.53067f, 745.473083f, 410.022552f);
    pathB.cubicTo(744.760254f, 409.627228f, 744.380981f, 409.013275f, 744.380981f, 407.965088f);
    pathB.lineTo(744.380981f, 386.840363f);
    pathB.cubicTo(744.380981f, 385.791138f, 744.833191f, 384.763916f, 745.657776f, 383.839508f);
    pathB.cubicTo(742.656921f, 382.101501f, 741.161499f, 381.234985f, 738.162659f, 379.525909f);
    pathB.cubicTo(736.083191f, 381.548431f, 735.039978f, 382.562683f, 732.95459f, 384.60318f);
    pathB.moveTo(692.546936f, 385.171204f);
    pathB.cubicTo(693.552246f, 385.667358f, 696.018005f, 387.607025f, 698.122375f, 388.521454f);
    pathB.cubicTo(696.293518f, 390.043854f, 694.281982f, 391.844757f, 692.546936f, 393.294281f);
    pathB.lineTo(692.546936f, 385.171204f);
    pathB.close();
    pathB.moveTo(695.4729f, 379.417084f);
    pathB.cubicTo(694.635376f, 379.426086f, 684.32605f, 384.880707f, 684.322083f, 385.025452f);
    pathB.cubicTo(684.322083f, 385.025452f, 686.422485f, 387.645966f, 686.422485f, 388.521454f);
    pathB.lineTo(686.422485f, 409.300781f);
    pathB.cubicTo(686.422485f, 411.312347f, 685.51001f, 412.21579f, 684.595581f, 413.65033f);
    pathB.cubicTo(687.592468f, 414.504852f, 689.089905f, 414.945099f, 692.088745f, 415.833557f);
    pathB.cubicTo(693.645081f, 416.221893f, 696.128784f, 416.420563f, 697.667114f, 415.334412f);
    pathB.cubicTo(701.67926f, 412.494293f, 705.344971f, 407.783386f, 706.077698f, 405.240753f);
    pathB.cubicTo(707.721924f, 399.638367f, 696.822632f, 403.198273f, 696.845581f, 403.216248f);
    pathB.cubicTo(696.845581f, 403.216248f, 705.825134f, 401.960388f, 704.337708f, 406.658325f);
    pathB.cubicTo(703.683838f, 408.733765f, 701.044373f, 411.241455f, 699.129639f, 410.847137f);
    pathB.cubicTo(694.843018f, 409.968628f, 692.545959f, 409.876801f, 692.545959f, 407.432983f);
    pathB.lineTo(692.545959f, 395.563354f);
    pathB.cubicTo(695.838318f, 391.012177f, 705.134338f, 386.160522f, 705.162292f, 385.873993f);
    pathB.cubicTo(705.162292f, 385.873993f, 696.635925f, 379.416107f, 695.473938f, 379.417084f);
    pathB.cubicTo(695.474915f, 379.417084f, 695.473938f, 379.417084f, 695.4729f, 379.417084f);
    pathB.moveTo(570.463562f, 420.81601f);
    pathB.lineTo(570.463562f, 402.922729f);
    pathB.cubicTo(571.039551f, 402.800934f, 571.327087f, 402.743042f, 571.901123f, 402.625244f);
    pathB.lineTo(571.901123f, 423.142029f);
    pathB.cubicTo(570.911804f, 422.823578f, 570.463562f, 422.123779f, 570.463562f, 420.81601f);
    pathB.moveTo(570.463562f, 384.062134f);
    pathB.cubicTo(571.039551f, 384.149963f, 571.327087f, 384.198883f, 571.901123f, 384.290741f);
    pathB.lineTo(571.901123f, 401.580048f);
    pathB.cubicTo(571.327087f, 401.695862f, 571.039551f, 401.756744f, 570.463562f, 401.874542f);
    pathB.lineTo(570.463562f, 384.062134f);
    pathB.close();
    pathB.moveTo(573.880676f, 376.556f);
    pathB.cubicTo(572.483093f, 376.996246f, 561.476013f, 385.624451f, 561.482971f, 385.70929f);
    pathB.cubicTo(561.482971f, 385.70929f, 563.637268f, 388.554413f, 563.637268f, 389.688446f);
    pathB.lineTo(563.637268f, 398.423462f);
    pathB.cubicTo(556.411682f, 399.838043f, 555.429382f, 404.307373f, 555.418396f, 405.679993f);
    pathB.lineTo(555.418396f, 405.724915f);
    pathB.cubicTo(555.42041f, 405.94455f, 555.448364f, 406.073334f, 555.477295f, 406.083313f);
    pathB.cubicTo(555.477295f, 406.083313f, 558.070862f, 404.250458f, 563.637268f, 403.222229f);
    pathB.lineTo(563.637268f, 404.797516f);
    pathB.cubicTo(556.993713f, 406.233063f, 555.191772f, 412.494293f, 555.569153f, 412.614105f);
    pathB.cubicTo(555.569153f, 412.614105f, 561.572815f, 410.21521f, 563.637268f, 409.598267f);
    pathB.lineTo(563.637268f, 424.00354f);
    pathB.cubicTo(563.637268f, 426.357483f, 563.36676f, 427.901855f, 562.291565f, 429.70874f);
    pathB.cubicTo(565.448181f, 430.067139f, 567.028442f, 430.256805f, 570.192017f, 430.653137f);
    pathB.cubicTo(571.99292f, 430.893707f, 574.782166f, 430.669098f, 576.403381f, 429.136719f);
    pathB.cubicTo(580.960571f, 424.828125f, 586.135681f, 419.346527f, 586.135681f, 416.115082f);
    pathB.lineTo(586.135681f, 406.511566f);
    pathB.cubicTo(586.135681f, 405.377533f, 586.047791f, 404.608856f, 586.678711f, 403.271149f);
    pathB.cubicTo(584.151062f, 404.98819f, 582.888245f, 405.851715f, 580.362549f, 407.587738f);
    pathB.cubicTo(579.281433f, 408.320465f, 579.192566f, 409.2948f, 579.192566f, 410.955933f);
    pathB.lineTo(579.192566f, 421.869202f);
    pathB.cubicTo(579.192566f, 423.180969f, 577.746033f, 423.273804f, 577.392639f, 423.266815f);
    pathB.cubicTo(575.636658f, 423.228882f, 574.153259f, 423.295776f, 573.071106f, 423.077148f);
    pathB.lineTo(573.071106f, 384.663086f);
    pathB.cubicTo(575.230408f, 385.379852f, 576.309509f, 385.742249f, 578.473816f, 386.473999f);
    pathB.cubicTo(579.373291f, 386.996094f, 579.553955f, 387.490234f, 579.553955f, 388.013336f);
    pathB.cubicTo(581.861023f, 384.848785f, 583.015991f, 383.267487f, 585.325073f, 380.114899f);
    pathB.cubicTo(581.680298f, 379.229431f, 575.865295f, 376.520081f, 574.157227f, 376.521057f);
    pathB.cubicTo(574.047424f, 376.522064f, 573.955566f, 376.533051f, 573.880676f, 376.556f);
    pathB.moveTo(593.447083f, 375.096527f);
    pathB.cubicTo(592.363953f, 375.804291f, 591.821899f, 376.772644f, 591.821899f, 377.908691f);
    pathB.lineTo(591.821899f, 419.46933f);
    pathB.cubicTo(591.821899f, 420.517517f, 591.187012f, 422.018951f, 589.921143f, 423.991577f);
    pathB.cubicTo(591.2948f, 424.412842f, 591.982605f, 424.622467f, 593.354248f, 425.050751f);
    pathB.cubicTo(594.53125f, 425.462036f, 595.525513f, 425.555878f, 596.427979f, 425.404144f);
    pathB.cubicTo(597.150757f, 425.279358f, 597.785645f, 424.914978f, 598.326721f, 424.475739f);
    pathB.cubicTo(600.935242f, 422.385315f, 602.846985f, 419.809753f, 602.759094f, 419.749847f);
    pathB.cubicTo(602.759094f, 419.749847f, 601.582153f, 419.935516f, 600.59082f, 419.831696f);
    pathB.cubicTo(600.0448f, 419.74585f, 599.774231f, 419.700928f, 599.233154f, 419.615082f);
    pathB.cubicTo(598.416565f, 419.484314f, 597.965332f, 418.860382f, 597.965332f, 417.988861f);
    pathB.lineTo(597.965332f, 396.857147f);
    pathB.cubicTo(597.965332f, 395.376678f, 598.326721f, 394.617004f, 598.867798f, 394.528137f);
    pathB.cubicTo(599.232178f, 394.466248f, 599.773254f, 394.731812f, 600.59082f, 395.124115f);
    pathB.cubicTo(601.601074f, 395.589325f, 602.111206f, 395.819946f, 603.123474f, 396.288116f);
    pathB.cubicTo(603.93811f, 396.686432f, 603.93512f, 397.38324f, 603.93512f, 398.169891f);
    pathB.cubicTo(603.93512f, 405.971497f, 603.93512f, 413.768127f, 603.93811f, 421.569702f);
    pathB.cubicTo(603.93811f, 425.325256f, 601.109924f, 430.634155f, 601.133911f, 430.656128f);
    pathB.cubicTo(601.133911f, 430.656128f, 605.184937f, 427.222015f, 607.017822f, 424.414825f);
    pathB.cubicTo(609.118164f, 421.201355f, 610.280212f, 417.987854f, 610.280212f, 415.109802f);
    pathB.lineTo(610.280212f, 394.593048f);
    pathB.cubicTo(610.280212f, 393.890228f, 610.823242f, 393.112579f, 611.728699f, 392.020447f);
    pathB.cubicTo(608.827698f, 390.960266f, 604.000977f, 387.703857f, 602.759094f, 387.967407f);
    pathB.cubicTo(602.120239f, 388.104187f, 599.957947f, 391.29071f, 597.965332f, 393.27829f);
    pathB.lineTo(597.965332f, 374.422668f);
    pathB.cubicTo(597.965332f, 373.461334f, 598.326721f, 372.440063f, 598.867798f, 371.567566f);
    pathB.cubicTo(596.701538f, 372.96817f, 595.616394f, 373.677948f, 593.447083f, 375.096527f);
    pathB.moveTo(718.054138f, 409.318756f);
    pathB.cubicTo(717.461182f, 408.789673f, 716.867188f, 408.178711f, 716.867188f, 407.218353f);
    pathB.lineTo(716.867188f, 387.053986f);
    pathB.cubicTo(716.867188f, 385.305969f, 717.323425f, 385.566528f, 718.328674f, 386.013763f);
    pathB.cubicTo(719.645386f, 386.859314f, 720.307251f, 387.284576f, 721.622009f, 388.135132f);
    pathB.cubicTo(722.266907f, 388.4935f, 722.903809f, 388.934753f, 722.903809f, 389.721405f);
    pathB.lineTo(722.903809f, 407.794373f);
    pathB.cubicTo(722.903809f, 408.66687f, 722.746094f, 410.490753f, 722.259888f, 410.758301f);
    pathB.cubicTo(722.125122f, 410.83017f, 721.950439f, 410.862122f, 721.746826f, 410.862122f);
    pathB.cubicTo(720.655701f, 410.864105f, 718.747925f, 409.936707f, 718.054138f, 409.318756f);
    pathB.moveTo(711.928711f, 364.782227f);
    pathB.cubicTo(711.195923f, 365.134613f, 710.648865f, 365.834412f, 710.648865f, 366.794769f);
    pathB.lineTo(710.648865f, 407.392059f);
    pathB.cubicTo(710.648865f, 409.397614f, 708.519531f, 411.37323f, 708.547485f, 411.684692f);
    pathB.cubicTo(708.550476f, 411.745605f, 711.838867f, 413.067322f, 713.849365f, 414.368073f);
    pathB.cubicTo(717.766663f, 416.906738f, 720.162537f, 415.845551f, 722.354797f, 414.073608f);
    pathB.cubicTo(724.059875f, 412.69397f, 726.55957f, 410.981903f, 730.675537f, 410.124359f);
    pathB.cubicTo(729.75708f, 409.143066f, 729.213013f, 407.993042f, 729.213013f, 406.683289f);
    pathB.cubicTo(729.213013f, 399.630402f, 729.209045f, 396.103455f, 729.209045f, 389.047546f);
    pathB.cubicTo(729.209045f, 387.648956f, 730.577698f, 385.292023f, 730.583679f, 385.149261f);
    pathB.cubicTo(730.583679f, 385.149261f, 720.888306f, 378.762207f, 719.609497f, 378.947906f);
    pathB.cubicTo(719.275085f, 378.996826f, 717.872498f, 381.118164f, 716.868225f, 381.896851f);
    pathB.lineTo(716.868225f, 365.046783f);
    pathB.cubicTo(716.868225f, 363.740021f, 716.960083f, 363.043213f, 717.597961f, 362);
    pathB.cubicTo(715.331848f, 363.104095f, 714.19873f, 363.657166f, 711.928711f, 364.782227f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpeverytechpro_blogspot_com100(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1074.29285f, 627.292786f);
    path.quadTo(1074.58582f, 627, 1075, 627);
    path.lineTo(1117, 627);
    path.quadTo(1124.04163f, 627, 1129.02246f, 631.9776f);
    path.quadTo(1134, 636.958374f, 1134, 644);
    path.lineTo(1134, 645);
    path.quadTo(1134, 652.041626f, 1129.02246f, 657.0224f);
    path.quadTo(1124.04163f, 662, 1117, 662);
    path.lineTo(1075, 662);
    path.quadTo(1074.58582f, 662, 1074.29285f, 661.707214f);
    path.quadTo(1074, 661.414185f, 1074, 661);
    path.lineTo(1074, 628);
    path.quadTo(1074, 627.585815f, 1074.29285f, 627.292786f);
    path.close();
    path.moveTo(1076, 629);
    path.lineTo(1117, 629);
    path.cubicTo(1125.2843f, 629, 1132, 635.715698f, 1132, 644);
    path.lineTo(1132, 645);
    path.cubicTo(1132, 653.284302f, 1125.2843f, 660, 1117, 660);
    path.lineTo(1076, 660);
    path.lineTo(1076, 629);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(1074, 627);
    pathB.lineTo(1075, 628);
    pathB.lineTo(1116.5f, 644.5f);
    pathB.lineTo(1134, 627);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpflite_com41(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(301.464081f, 424);
    path.lineTo(296, 433.46405f);
    path.lineTo(296, 433.810822f);
    path.lineTo(303.25589f, 438);
    path.lineTo(304.729736f, 438);
    path.lineTo(311, 427.139557f);
    path.lineTo(311, 426.305237f);
    path.lineTo(307.007202f, 424);
    path.lineTo(301.464081f, 424);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(302.849854f, 421.599762f);
    pathB.lineTo(311.510101f, 426.599762f);
    pathB.lineTo(304.510101f, 438.724121f);
    pathB.lineTo(295.849854f, 433.724121f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpilkoora_com37(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(818, 157);
    path.cubicTo(818, 148.715729f, 824.715698f, 142, 833, 142);
    path.lineTo(909, 142);
    path.lineTo(909, 143);
    path.lineTo(833, 143);
    path.cubicTo(825.268005f, 143, 819, 149.268005f, 819, 157);
    path.lineTo(819, 926);
    path.lineTo(818, 926);
    path.lineTo(818, 157);
    path.close();
    path.moveTo(1184, 926);
    path.lineTo(1185, 926);
    path.lineTo(1185, 157);
    path.cubicTo(1185, 148.715729f, 1178.2843f, 142, 1170, 142);
    path.lineTo(1093, 142);
    path.lineTo(1093, 143);
    path.lineTo(1170, 143);
    path.cubicTo(1177.73193f, 143, 1184, 149.268005f, 1184, 157);
    path.lineTo(1184, 926);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(1185, 142);
    pathB.lineTo(1001.5f, 325.5f);
    pathB.lineTo(1001.5f, 782.5f);
    pathB.lineTo(1185, 966);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpmm4everfriends_com43(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(540.74231f, 215.922546f);
    path.cubicTo(540.893127f, 215.391159f, 541.443909f, 215.090134f, 541.972473f, 215.250168f);
    path.lineTo(581.213318f, 227.131104f);
    path.cubicTo(581.741882f, 227.291153f, 582.048157f, 227.851654f, 581.897339f, 228.383041f);
    path.lineTo(576.708923f, 246.663925f);
    path.cubicTo(576.558167f, 247.195297f, 576.007324f, 247.496338f, 575.47876f, 247.336288f);
    path.lineTo(536.237915f, 235.455353f);
    path.cubicTo(535.709351f, 235.295319f, 535.403137f, 234.734802f, 535.553894f, 234.20343f);
    path.lineTo(540.74231f, 215.922546f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(541.015381f, 214.960388f);
    pathB.lineTo(582.17041f, 227.420883f);
    pathB.lineTo(576.435852f, 247.626068f);
    pathB.lineTo(535.280823f, 235.165573f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpmtrk_uz27(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(33, 787);
    path.lineTo(33, 412);
    path.lineTo(1233, 412);
    path.lineTo(1233, 787);
    path.quadTo(1233, 793.213196f, 1228.60803f, 797.607971f);
    path.quadTo(1224.21326f, 802, 1218, 802);
    path.lineTo(48, 802);
    path.quadTo(41.7867966f, 802, 37.3919983f, 797.607971f);
    path.quadTo(33, 793.213196f, 33, 787);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(33, 412);
    pathB.lineTo(1233, 412);
    pathB.lineTo(1233, 787);
    pathB.quadTo(1233, 793.213196f, 1228.60791f, 797.608032f);
    pathB.quadTo(1224.21313f, 802, 1218, 802);
    pathB.lineTo(48, 802);
    pathB.quadTo(41.7867432f, 802, 37.3919678f, 797.608032f);
    pathB.quadTo(33, 793.213196f, 33, 787);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpfrauen_magazin_com83(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(808, 886);
    path.cubicTo(805.581055f, 886, 803.563293f, 887.717773f, 803.100037f, 890);
    path.lineTo(1122.90002f, 890);
    path.cubicTo(1122.43677f, 887.717773f, 1120.41895f, 886, 1118, 886);
    path.lineTo(808, 886);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(808, 886);
    pathB.lineTo(1118, 886);
    pathB.cubicTo(1120.76147f, 886, 1123, 888.238586f, 1123, 891);
    pathB.lineTo(1123, 1521);
    pathB.cubicTo(1123, 1523.20911f, 1120.76147f, 1525, 1118, 1525);
    pathB.lineTo(808, 1525);
    pathB.cubicTo(805.238586f, 1525, 803, 1523.20911f, 803, 1521);
    pathB.lineTo(803, 891);
    pathB.cubicTo(803, 888.238586f, 805.238586f, 886, 808, 886);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpi_gino_com16(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(184, 734);
    path.quadTo(133.051727f, 734, 97.0258636f, 770.025879f);
    path.quadTo(61, 806.051758f, 61, 857);
    path.quadTo(61, 895.835083f, 81.9317017f, 926);
    path.lineTo(286.068298f, 926);
    path.quadTo(307, 895.835083f, 307, 857);
    path.quadTo(307, 806.051758f, 270.974121f, 770.025879f);
    path.quadTo(234.948273f, 734, 184, 734);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(185, 734);
    pathB.cubicTo(252.93103f, 734, 308, 789.06897f, 308, 857);
    pathB.cubicTo(308, 924.93103f, 252.93103f, 980, 185, 980);
    pathB.lineTo(184, 980);
    pathB.cubicTo(116.068977f, 980, 61, 924.93103f, 61, 857);
    pathB.cubicTo(61, 789.06897f, 116.068977f, 734, 184, 734);
    pathB.lineTo(185, 734);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skppchappy_com_au102(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(363, 493);
    path.cubicTo(360.790863f, 493, 359, 494.790863f, 359, 497);
    path.lineTo(359, 656);
    path.cubicTo(359, 658.209106f, 360.790863f, 660, 363, 660);
    path.lineTo(623.001709f, 660);
    path.cubicTo(624.657776f, 659.999023f, 626, 658.65625f, 626, 657);
    path.lineTo(626, 496);
    path.cubicTo(626, 494.343872f, 624.657959f, 493.00116f, 623.002075f, 493);
    path.lineTo(363, 493);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(362, 494);
    pathB.lineTo(623, 494);
    pathB.cubicTo(624.65686f, 494, 626, 494.895416f, 626, 496);
    pathB.lineTo(626, 657);
    pathB.cubicTo(626, 658.65686f, 624.65686f, 660, 623, 660);
    pathB.lineTo(362, 660);
    pathB.cubicTo(360.34314f, 660, 359, 658.65686f, 359, 657);
    pathB.lineTo(359, 496);
    pathB.cubicTo(359, 494.895416f, 360.34314f, 494, 362, 494);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpsciality_com161(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(656, 728);
    path.cubicTo(653.790833f, 728, 652, 729.790833f, 652, 732);
    path.lineTo(652, 789);
    path.cubicTo(652, 791.209106f, 653.790833f, 793, 656, 793);
    path.lineTo(769.001282f, 793);
    path.cubicTo(770.657532f, 792.999268f, 772, 791.656433f, 772, 790);
    path.lineTo(772, 731);
    path.cubicTo(772, 729.34314f, 770.65686f, 728, 769, 728);
    path.lineTo(656, 728);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(655, 729);
    pathB.lineTo(769, 729);
    pathB.cubicTo(770.65686f, 729, 772, 729.895447f, 772, 731);
    pathB.lineTo(772, 790);
    pathB.cubicTo(772, 791.65686f, 770.65686f, 793, 769, 793);
    pathB.lineTo(655, 793);
    pathB.cubicTo(653.34314f, 793, 652, 791.65686f, 652, 790);
    pathB.lineTo(652, 731);
    pathB.cubicTo(652, 729.895447f, 653.34314f, 729, 655, 729);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpsudoestenegocios_com186(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(0, 495);
    path.lineTo(1.23685242e-14f, 293);
    path.lineTo(44, 293);
    path.quadTo(45.6568527f, 293, 46.8288002f, 294.171204f);
    path.quadTo(48, 295.34314f, 48, 297);
    path.lineTo(48, 491);
    path.quadTo(48, 492.65686f, 46.8288002f, 493.828796f);
    path.quadTo(45.6568527f, 495, 44, 495);
    path.lineTo(0, 495);
    path.close();
    path.moveTo(1, 294);
    path.lineTo(44, 294);
    path.cubicTo(45.6568565f, 294, 47, 295.34314f, 47, 297);
    path.lineTo(47, 491);
    path.cubicTo(47, 492.65686f, 45.6568565f, 494, 44, 494);
    path.lineTo(1, 494);
    path.lineTo(1, 294);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(48, 495);
    pathB.lineTo(24, 471);
    pathB.lineTo(24, 317);
    pathB.lineTo(48, 293);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpthesuburbanite_com213(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(863.439026f, 692);
    path.lineTo(863.283264f, 692);
    path.lineTo(802, 708.420837f);
    path.lineTo(802, 718.773621f);
    path.lineTo(866, 701.624817f);
    path.lineTo(866, 701.557922f);
    path.lineTo(863.439026f, 692);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(783.256775f, 713.443054f);
    pathB.lineTo(863.428589f, 691.96106f);
    pathB.lineTo(866.016724f, 701.620361f);
    pathB.lineTo(785.84491f, 723.102356f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skphostloco_com11(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(6.66133815e-16f, 648);
    path.lineTo(25.8522835f, 648);
    path.quadTo(27.5087376f, 647.999634f, 28.6807098f, 646.82843f);
    path.quadTo(29.8518829f, 645.656433f, 29.8522835f, 644);
    path.lineTo(29.8522835f, 467);
    path.quadTo(29.8518829f, 465.343536f, 28.6807098f, 464.17157f);
    path.quadTo(27.5087376f, 463.000397f, 25.8522835f, 463);
    path.lineTo(2.22044605e-16f, 463);
    path.lineTo(6.66133815e-16f, 648);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(0, 463);
    pathB.lineTo(30, 463);
    pathB.lineTo(30, 648);
    pathB.lineTo(0, 648);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpsergeychunkevich_com8(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(0, 926);
    path.lineTo(0, 0);
    path.lineTo(1265, 0);
    path.lineTo(1265, 926);
    path.lineTo(0, 926);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(37, 374);
    pathB.lineTo(37, 535);
    pathB.cubicTo(37, 536.65686f, 35.6568565f, 538, 34, 538);
    pathB.lineTo(1.02866934e-14f, 538);
    pathB.lineTo(6.12303177e-17f, 371);
    pathB.lineTo(34, 371);
    pathB.cubicTo(35.6568565f, 371, 37, 372.34314f, 37, 374);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skptracksflow_com9(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(16, 56);
    path.lineTo(32, 56);
    path.lineTo(32, 72);
    path.lineTo(16, 72);
    path.lineTo(16, 56);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kEvenOdd_FillType);
    pathB.moveTo(31.65625f, 70.0555649f);
    pathB.lineTo(31.65625f, 70.0554962f);
    pathB.lineTo(26.9727192f, 65.3615341f);
    pathB.cubicTo(27.6210003f, 64.4029694f, 28.0048752f, 63.2470932f, 28.0048752f, 62.0027809f);
    pathB.cubicTo(28.0048752f, 58.6875305f, 25.3199062f, 56, 22.0046558f, 56);
    pathB.cubicTo(18.6894073f, 56, 16.0031872f, 58.6875305f, 16.0031872f, 62.0027809f);
    pathB.cubicTo(16.0031872f, 65.3180008f, 18.6913433f, 68.0055618f, 22.0066261f, 68.0055618f);
    pathB.cubicTo(23.2509995f, 68.0055618f, 24.4072189f, 67.6187515f, 25.3657818f, 66.9704056f);
    pathB.lineTo(30.0599365f, 71.65625f);
    pathB.lineTo(30.0600014f, 71.65625f);
    pathB.cubicTo(30.2668133f, 71.875f, 30.5524693f, 71.9992828f, 30.868f, 71.9992828f);
    pathB.cubicTo(31.4994049f, 71.9992828f, 32.0014687f, 71.4909363f, 32.0014687f, 70.8595276f);
    pathB.cubicTo(32.0015335f, 70.5439072f, 31.875f, 70.2623444f, 31.65625f, 70.0555649f);
    pathB.close();
    pathB.moveTo(18.0054054f, 62.0027809f);
    pathB.cubicTo(18.0054054f, 59.7925949f, 19.7970943f, 58.0009079f, 22.0072823f, 58.0009079f);
    pathB.cubicTo(24.2174377f, 58.0009079f, 26.0091248f, 59.7925949f, 26.0091248f, 62.0027809f);
    pathB.cubicTo(26.0091248f, 64.2129364f, 24.2174377f, 66.0046234f, 22.0072803f, 66.0046234f);
    pathB.cubicTo(19.7970943f, 66.0045929f, 18.0054054f, 64.2129059f, 18.0054054f, 62.0027809f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpautobutler_dk29(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(0, 926);
    path.lineTo(0, 0);
    path.lineTo(1265, 0);
    path.lineTo(1265, 926);
    path.lineTo(0, 926);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(21, 162);
    pathB.lineTo(21, 301);
    pathB.lineTo(8.57224448e-15f, 301);
    pathB.lineTo(6.12303177e-17f, 162);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skponlinecollege_org144(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(179, 407);
    path.cubicTo(177.34314f, 407, 176, 408.34314f, 176, 410);
    path.lineTo(176, 436);
    path.cubicTo(176, 437.65686f, 177.34314f, 439, 179, 439);
    path.lineTo(337.002289f, 439);
    path.cubicTo(338.105835f, 438.998779f, 339, 438.103821f, 339, 437);
    path.lineTo(339, 409);
    path.cubicTo(339, 407.896362f, 338.10611f, 407.001526f, 337.002838f, 407);
    path.lineTo(179, 407);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(179, 408);
    pathB.lineTo(337, 408);
    pathB.cubicTo(338.65686f, 408, 340, 408.895416f, 340, 410);
    pathB.lineTo(340, 436);
    pathB.cubicTo(340, 437.65686f, 338.65686f, 439, 337, 439);
    pathB.lineTo(179, 439);
    pathB.cubicTo(177.895432f, 439, 177, 437.65686f, 177, 436);
    pathB.lineTo(177, 410);
    pathB.cubicTo(177, 408.895416f, 177.895432f, 408, 179, 408);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpnational_com_au81(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(807, 817);
    path.quadTo(806.585876f, 817.000122f, 806.292908f, 817.292908f);
    path.quadTo(806.000122f, 817.585876f, 806, 818);
    path.lineTo(806, 881);
    path.lineTo(1111, 881);
    path.lineTo(1111, 818);
    path.quadTo(1110.99988f, 817.585876f, 1110.70715f, 817.292908f);
    path.quadTo(1110.41406f, 817.000122f, 1110, 817);
    path.lineTo(807, 817);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(807, 817);
    pathB.lineTo(1110, 817);
    pathB.cubicTo(1110.55225f, 817, 1111, 817.447693f, 1111, 818);
    pathB.lineTo(1111, 880);
    pathB.lineTo(806, 880);
    pathB.lineTo(806, 818);
    pathB.cubicTo(806, 817.447693f, 806.447693f, 817, 807, 817);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skprentacheat_com30(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(967, 263);
    path.quadTo(966.585876f, 263.000092f, 966.292908f, 263.292908f);
    path.quadTo(966.000122f, 263.585876f, 966, 264);
    path.lineTo(966, 301);
    path.lineTo(1214, 301);
    path.lineTo(1214, 264);
    path.quadTo(1213.99988f, 263.585876f, 1213.70715f, 263.292908f);
    path.quadTo(1213.41406f, 263.000092f, 1213, 263);
    path.lineTo(967, 263);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(967, 263);
    pathB.lineTo(1213, 263);
    pathB.cubicTo(1213.55225f, 263, 1214, 263.447723f, 1214, 264);
    pathB.lineTo(1214, 300);
    pathB.lineTo(966, 300);
    pathB.lineTo(966, 264);
    pathB.cubicTo(966, 263.447723f, 966.447693f, 263, 967, 263);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpbreakmystyle_com10(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(271.032867f, -5.32907052e-15f);
    path.lineTo(56.9671326f, -5.16253706e-15f);
    path.quadTo(52.7835083f, 3.69968891f, 48.7416f, 7.74160004f);
    path.quadTo(1, 55.4831848f, 1, 123);
    path.quadTo(1, 190.516815f, 48.7416f, 238.258392f);
    path.quadTo(96.4831848f, 286, 164, 286);
    path.quadTo(231.516815f, 286, 279.258392f, 238.258392f);
    path.quadTo(327, 190.516815f, 327, 123);
    path.quadTo(327, 55.4831848f, 279.258392f, 7.74160004f);
    path.quadTo(275.216431f, 3.69964004f, 271.032867f, -5.32907052e-15f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(327, 123);
    pathB.quadTo(327, 190.516815f, 279.258392f, 238.258392f);
    pathB.quadTo(231.516815f, 286, 164, 286);
    pathB.quadTo(96.4831848f, 286, 48.7416f, 238.258392f);
    pathB.quadTo(1, 190.516815f, 1, 123);
    pathB.quadTo(1, 55.4831848f, 48.7416f, 7.74160004f);
    pathB.quadTo(96.4831848f, -40, 164, -40);
    pathB.quadTo(231.516815f, -40, 279.258392f, 7.74160004f);
    pathB.quadTo(327, 55.4831848f, 327, 123);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpsd_graphic_net104(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(475.421448f, 836.985962f);
    path.lineTo(461.280975f, 841.990662f);
    path.cubicTo(466.80899f, 857.609802f, 458.62854f, 874.752991f, 443.009399f, 880.281006f);
    path.cubicTo(435.199829f, 883.044983f, 427.009247f, 882.381897f, 420.080048f, 879.075378f);
    path.lineTo(413.620056f, 892.613037f);
    path.quadTo(430.419983f, 900.629761f, 447.96701f, 894.43811f);
    path.quadTo(448.00708f, 894.42395f, 448.014038f, 894.421509f);
    path.quadTo(448.043976f, 894.410889f, 448.061066f, 894.404846f);
    path.quadTo(465.596313f, 888.179932f, 473.613037f, 871.379944f);
    path.quadTo(477.351227f, 863.546143f, 478, 855.549866f);
    path.lineTo(478, 848.804321f);
    path.quadTo(477.528076f, 842.93811f, 475.421448f, 836.985962f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(405.592621f, 909.435547f);
    pathB.lineTo(390.578583f, 867.014099f);
    pathB.lineTo(433, 852.000061f);
    pathB.lineTo(490.435486f, 879.40741f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

/* this cubic/quad pair
 c = 430,280 430,278.895416 473.876068,278 528,278
 q = 430,280 430.009796,277.101196 458.703552,275.050262
 only intersect at the shared point (430,280)
 they sort backwards because the tangent from pt[0] to control pt[1]
 c' = (0.00000000000000000, -1.1045837402343750)
 q' = (0.0097961425781250000, -2.8988037109375000)
 suggests that the quad is counterclockwise of the cubic, when the reverse is true
 the angle code is fooled because the control pt[1] of both the quad and cubic
 is far away from cubic cntl [2] and quad pt [2].
 Maybe in angle setup, this instability can be detected to suppress sorting on the initial tangent
 Or the error term can be passed to NearRay that is magnified by the distance from the next ctrl?
 */
static void skpnaoxrane_ru23(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(458.703552f, 275.050262f);
    path.quadTo(487.41687f, 273.000702f, 528, 273);
    path.lineTo(529, 273);
    path.quadTo(530.242371f, 273.000305f, 531.121338f, 273.878693f);
    path.quadTo(531.999695f, 274.75766f, 532, 276);
    path.lineTo(532, 378);
    path.quadTo(531.990173f, 380.898804f, 503.296448f, 382.949738f);
    path.quadTo(474.58313f, 384.999298f, 434, 385);
    path.lineTo(433, 385);
    path.quadTo(431.75766f, 384.999695f, 430.878693f, 384.121307f);
    path.quadTo(430.000305f, 383.24234f, 430, 382);
    path.lineTo(430, 280);
    path.quadTo(430.009796f, 277.101196f, 458.703552f, 275.050262f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(528, 278);
    pathB.lineTo(529, 278);
    pathB.cubicTo(530.65686f, 278, 532, 278, 532, 278);
    pathB.lineTo(532, 378);
    pathB.cubicTo(532, 379.104584f, 488.123932f, 380, 434, 380);
    pathB.lineTo(433, 380);
    pathB.cubicTo(431.34314f, 380, 430, 380, 430, 380);
    pathB.lineTo(430, 280);
    pathB.cubicTo(430, 278.895416f, 473.876068f, 278, 528, 278);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

/* didn't investigate thoroughly, but looks to be missorting quad and cubic
    {{468.507751,560.724426}, {467.275146,552.856262}, {465.84668,547.288391}}
    {{463.779907,542.671143}, {464.829529,542.672974}, {466.946289,550.755676}, {468.507751,560.724426}}
    decision maker is case 14 leftLessThanRight
 */
static void skptcmevents_org23(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(465.503998f, 546);
    path.lineTo(347, 546);
    path.lineTo(347, 632);
    path.lineTo(469.104248f, 632);
    path.quadTo(470.79007f, 627.638672f, 471.833496f, 621.036255f);
    path.quadTo(474.902588f, 601.562866f, 470.591064f, 574.024353f);
    path.lineTo(468.507751f, 560.724426f);
    path.quadTo(467.275146f, 552.856262f, 465.84668f, 547.288391f);
    path.quadTo(465.670349f, 546.601501f, 465.503998f, 546);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(363.052246f, 542.495361f);
    pathB.lineTo(463.779907f, 542.671143f);
    pathB.cubicTo(464.829529f, 542.672974f, 466.946289f, 550.755676f, 468.507751f, 560.724426f);
    pathB.lineTo(470.591064f, 574.024353f);
    pathB.cubicTo(476.26178f, 610.226624f, 471.498932f, 639.557922f, 459.953003f, 639.537781f);
    pathB.lineTo(368.727936f, 639.378601f);
    pathB.cubicTo(351.933868f, 639.349304f, 337.053741f, 631.244324f, 335.492249f, 621.275574f);
    pathB.lineTo(325.968597f, 560.475708f);
    pathB.cubicTo(324.407104f, 550.506958f, 341.01001f, 542.456909f, 363.052246f, 542.495361f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpredbullskatearcade_es16(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(936.765625f, 458.965302f);
    path.cubicTo(937.028442f, 453.863251f, 933.145813f, 449.864502f, 928.093445f, 450.033905f);
    path.lineTo(661.882263f, 458.958862f);
    path.lineTo(661.875366f, 458.959106f);
    path.cubicTo(656.828369f, 459.13205f, 652.525085f, 463.399719f, 652.258545f, 468.496124f);
    path.lineTo(652.258179f, 468.503662f);
    path.lineTo(649.021729f, 531.322754f);
    path.cubicTo(648.75885f, 536.424805f, 652.641479f, 540.423523f, 657.693848f, 540.25415f);
    path.lineTo(923.905029f, 531.329163f);
    path.cubicTo(928.955017f, 531.159851f, 933.262268f, 526.890442f, 933.528809f, 521.791565f);
    path.lineTo(933.529175f, 521.784363f);
    path.lineTo(936.765625f, 458.965302f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(661.882263f, 458.958862f);
    pathB.lineTo(928.093445f, 450.033905f);
    pathB.cubicTo(929.103882f, 450, 929.709961f, 454.108612f, 929.447144f, 459.210663f);
    pathB.lineTo(926.210693f, 522.029724f);
    pathB.cubicTo(926.079224f, 524.58075f, 925.153442f, 526.676208f, 924.143066f, 526.710083f);
    pathB.lineTo(657.931885f, 535.635071f);
    pathB.cubicTo(652.879456f, 535.804443f, 648.890259f, 533.873779f, 649.021729f, 531.322754f);
    pathB.lineTo(652.258179f, 468.503662f);
    pathB.cubicTo(652.520996f, 463.401611f, 656.829834f, 459.128235f, 661.882263f, 458.958862f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpfinanzasdigital_com9(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(156, 126);
    path.quadTo(154.343552f, 126.000397f, 153.17157f, 127.17157f);
    path.quadTo(152.000397f, 128.343552f, 152, 130);
    path.lineTo(152, 174);
    path.lineTo(1114, 174);
    path.lineTo(1114, 130);
    path.quadTo(1113.99963f, 128.343552f, 1112.82837f, 127.17157f);
    path.quadTo(1111.65649f, 126.000397f, 1110, 126);
    path.lineTo(156, 126);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(156, 126);
    pathB.lineTo(1110, 126);
    pathB.cubicTo(1111.65686f, 126, 1113, 127.790863f, 1113, 130);
    pathB.lineTo(1113, 174);
    pathB.lineTo(153, 174);
    pathB.lineTo(153, 130);
    pathB.cubicTo(153, 127.790863f, 154.34314f, 126, 156, 126);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skppartainasdemo250_org56(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(182.000015f, 645);
    path.lineTo(182, 640);
    path.cubicTo(174.322327f, 640, 166.644669f, 637.071045f, 160.786804f, 631.213196f);
    path.cubicTo(149.071075f, 619.497437f, 149.071075f, 600.502563f, 160.786804f, 588.786804f);
    path.lineTo(157.251266f, 585.251221f);
    path.quadTo(147, 595.502502f, 147.000015f, 610);
    path.quadTo(147, 624.482605f, 157.230255f, 634.727722f);
    path.quadTo(157.251251f, 634.748779f, 157.251282f, 634.748779f);
    path.quadTo(157.282852f, 634.780334f, 157.272263f, 634.769775f);
    path.quadTo(167.517334f, 645, 182.000015f, 645);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(182, 659.497498f);
    pathB.lineTo(206.748749f, 634.748718f);
    pathB.lineTo(182.000015f, 610);
    pathB.lineTo(132.502533f, 610);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpmlk_com326(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(154, 670);
    path.cubicTo(151.238571f, 670, 149, 672.238586f, 149, 675);
    path.lineTo(149, 710.001465f);
    path.cubicTo(149.000809f, 712.209961f, 150.791367f, 714, 153, 714);
    path.lineTo(189, 714);
    path.cubicTo(191.209137f, 714, 193, 712.209167f, 193, 710);
    path.lineTo(193, 675);
    path.cubicTo(193, 672.238586f, 190.761429f, 670, 188, 670);
    path.lineTo(154, 670);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(154, 671);
    pathB.lineTo(188, 671);
    pathB.cubicTo(190.761429f, 671, 193, 672.790833f, 193, 675);
    pathB.lineTo(193, 710);
    pathB.cubicTo(193, 712.761414f, 190.761429f, 715, 188, 715);
    pathB.lineTo(154, 715);
    pathB.cubicTo(151.238571f, 715, 149, 712.761414f, 149, 710);
    pathB.lineTo(149, 675);
    pathB.cubicTo(149, 672.790833f, 151.238571f, 671, 154, 671);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpcyclist_friends_gr52(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(50, 182);
    path.lineTo(1215, 182);
    path.lineTo(1215, 202);
    path.quadTo(1214.99951f, 204.070572f, 1213.53552f, 205.535538f);
    path.quadTo(1212.07056f, 206.999496f, 1210, 207);
    path.lineTo(55, 207);
    path.quadTo(52.9294319f, 206.999496f, 51.4644661f, 205.535538f);
    path.quadTo(50.0004997f, 204.070572f, 50, 202);
    path.lineTo(50, 182);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(50, 183);
    pathB.lineTo(1215, 183);
    pathB.lineTo(1215, 202);
    pathB.cubicTo(1215, 204.761429f, 1212.76147f, 207, 1210, 207);
    pathB.lineTo(55, 207);
    pathB.cubicTo(52.238575f, 207, 50, 204.761429f, 50, 202);
    pathB.lineTo(50, 183);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

/* cubic ends just above opp line */
static void skpwww_fj_p_com_22(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(172, 201);
    path.lineTo(172, 202);
    path.lineTo(220, 202);
    path.cubicTo(221.65686f, 202, 223, 200.65686f, 223, 199);
    path.cubicTo(223, 200.104568f, 221.65686f, 201, 220, 201);
    path.lineTo(172, 201);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(161, 202);
    pathB.lineTo(161, 199);
    pathB.lineTo(223, 199.000015f);
    pathB.lineTo(223, 202);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// pair of lines are not quite coincident, so sorting line/cubic fails (i think)
static void skpwww_lavoixdunord_fr_11(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(806, 57);
    path.cubicTo(806, 55.3431473f, 807.34314f, 54, 809, 54);
    path.lineTo(930, 54);
    path.cubicTo(931.65686f, 54, 933, 55.3431473f, 933, 57);
    path.lineTo(933, 91);
    path.cubicTo(933, 92.6568527f, 931.65686f, 94, 930, 94);
    path.lineTo(809, 94);
    path.cubicTo(807.34314f, 94, 806, 92.6568527f, 806, 91);
    path.lineTo(806, 57);
    path.close();
    path.moveTo(808, 58);
    path.cubicTo(808, 56.8954315f, 808.895447f, 56, 810, 56);
    path.lineTo(929, 56);
    path.cubicTo(930.104553f, 56, 931, 56.8954315f, 931, 58);
    path.lineTo(931, 90);
    path.cubicTo(931, 91.1045685f, 930.104553f, 92, 929, 92);
    path.lineTo(810, 92);
    path.cubicTo(808.895447f, 92, 808, 91.1045685f, 808, 90);
    path.lineTo(808, 58);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(806, 54);
    pathB.lineTo(808, 56);
    pathB.lineTo(935.02002f, 56.0200005f);
    pathB.lineTo(933, 54);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// pair of curves have nearly the same initial tangent but are sorting by
// that alone sorts them incorrectly. Need to detect that tangents are nearly
// identical and not reliable by themselves
static void skppptv_com_62(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(173, 5342);
    path.quadTo(171.343536f, 5342.00049f, 170.17157f, 5343.17139f);
    path.quadTo(169.000397f, 5344.34375f, 169, 5346);
    path.lineTo(169, 5372);
    path.lineTo(234, 5372);
    path.lineTo(234, 5346);
    path.quadTo(233.999603f, 5344.34375f, 232.82843f, 5343.17139f);
    path.quadTo(231.656464f, 5342.00049f, 230, 5342);
    path.lineTo(173, 5342);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(173, 5342);
    pathB.lineTo(230, 5342);
    pathB.cubicTo(231.65686f, 5342, 233, 5343.79102f, 233, 5346);
    pathB.lineTo(233, 5372);
    pathB.lineTo(169, 5372);
    pathB.lineTo(169, 5346);
    pathB.cubicTo(169, 5343.79102f, 170.790863f, 5342, 173, 5342);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// nearly identical to lavoixdunord -- to not-quite-coincident lines
static void skpwww_booking_com_68(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(90, 187);
    path.cubicTo(90, 185.34314f, 91.3431473f, 184, 93, 184);
    path.lineTo(588, 184);
    path.cubicTo(589.65686f, 184, 591, 185.34314f, 591, 187);
    path.lineTo(591, 218);
    path.cubicTo(591, 219.65686f, 589.65686f, 221, 588, 221);
    path.lineTo(93, 221);
    path.cubicTo(91.3431473f, 221, 90, 219.65686f, 90, 218);
    path.lineTo(90, 187);
    path.close();
    path.moveTo(92, 188);
    path.cubicTo(92, 186.895432f, 92.8954315f, 186, 94, 186);
    path.lineTo(587, 186);
    path.cubicTo(588.104553f, 186, 589, 186.895432f, 589, 188);
    path.lineTo(589, 217);
    path.cubicTo(589, 218.104568f, 588.104553f, 219, 587, 219);
    path.lineTo(94, 219);
    path.cubicTo(92.8954315f, 219, 92, 218.104568f, 92, 217);
    path.lineTo(92, 188);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(90, 184);
    pathB.lineTo(92, 186);
    pathB.lineTo(593.02002f, 186.020004f);
    pathB.lineTo(591, 184);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// visually looks like lavoixdunord and www_booking_com
static void skpwww_despegar_com_mx_272(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(635, 1788);
    path.cubicTo(635, 1786.34314f, 636.34314f, 1785, 638, 1785);
    path.lineTo(832, 1785);
    path.cubicTo(833.65686f, 1785, 835, 1786.34314f, 835, 1788);
    path.lineTo(835, 1812);
    path.cubicTo(835, 1813.65686f, 833.65686f, 1815, 832, 1815);
    path.lineTo(638, 1815);
    path.cubicTo(636.34314f, 1815, 635, 1813.65686f, 635, 1812);
    path.lineTo(635, 1788);
    path.close();
    path.moveTo(637, 1789);
    path.cubicTo(637, 1787.89539f, 637.895447f, 1787, 639, 1787);
    path.lineTo(831, 1787);
    path.cubicTo(832.104553f, 1787, 833, 1787.89539f, 833, 1789);
    path.lineTo(833, 1811);
    path.cubicTo(833, 1812.10461f, 832.104553f, 1813, 831, 1813);
    path.lineTo(639, 1813);
    path.cubicTo(637.895447f, 1813, 637, 1812.10461f, 637, 1811);
    path.lineTo(637, 1789);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(835, 1785);
    pathB.lineTo(833, 1787);
    pathB.lineTo(832.97998f, 1817.02002f);
    pathB.lineTo(835, 1815);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_joomla_org_23(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(320, 347);
    path.cubicTo(320, 344.238586f, 322.238586f, 342, 325, 342);
    path.lineTo(416, 342);
    path.cubicTo(418.761414f, 342, 421, 344.238586f, 421, 347);
    path.cubicTo(421, 344.790863f, 418.761414f, 343, 416, 343);
    path.lineTo(325, 343);
    path.cubicTo(322.238586f, 343, 320, 344.790863f, 320, 347);
    path.close();
    path.moveTo(320, 378);
    path.cubicTo(320, 380.761414f, 322.238586f, 383, 325, 383);
    path.lineTo(416, 383);
    path.cubicTo(418.761414f, 383, 421, 380.761414f, 421, 378);
    path.cubicTo(421, 380.209137f, 418.761414f, 382, 416, 382);
    path.lineTo(325, 382);
    path.cubicTo(322.238586f, 382, 320, 380.209137f, 320, 378);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(320, 383);
    pathB.lineTo(320, 378);
    pathB.lineTo(421, 378.000031f);
    pathB.lineTo(421, 383);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_macrumors_com_131(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(136, 14089);
    path.lineTo(136, 14056);
    path.lineTo(778, 14056);
    path.lineTo(778, 14089);
    path.quadTo(777.999573f, 14090.6562f, 776.82843f, 14091.8281f);
    path.quadTo(775.656433f, 14093, 774, 14093);
    path.lineTo(140, 14093);
    path.quadTo(138.343552f, 14093, 137.17157f, 14091.8281f);
    path.quadTo(136.000397f, 14090.6562f, 136, 14089);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(136, 14057);
    pathB.lineTo(778, 14057);
    pathB.lineTo(778, 14089);
    pathB.cubicTo(778, 14091.209f, 776.209167f, 14093, 774, 14093);
    pathB.lineTo(140, 14093);
    pathB.cubicTo(137.790863f, 14093, 136, 14091.209f, 136, 14089);
    pathB.lineTo(136, 14057);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_leadpages_net_84(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(377.1716f, 5910.17139f);
    path.cubicTo(376.447723f, 5910.89551f, 376, 5911.89551f, 376, 5913);
    path.lineTo(376, 5972);
    path.cubicTo(376, 5974.20898f, 377.790863f, 5976, 380, 5976);
    path.cubicTo(378.34314f, 5976, 377, 5974.20898f, 377, 5972);
    path.lineTo(377, 5913);
    path.cubicTo(377, 5912.17139f, 377.335785f, 5911.42188f, 377.878693f, 5910.87891f);
    path.lineTo(377.1716f, 5910.17139f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(376, 5909);
    pathB.lineTo(378.481873f, 5909);
    pathB.lineTo(379.999878f, 5976);
    pathB.lineTo(376, 5976);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_briian_com_34(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(843, 216);
    path.cubicTo(843, 213.238571f, 845.238586f, 211, 848, 211);
    path.lineTo(1191, 211);
    path.cubicTo(1193.76147f, 211, 1196, 213.238571f, 1196, 216);
    path.lineTo(1196, 779);
    path.cubicTo(1196, 781.761414f, 1193.76147f, 784, 1191, 784);
    path.lineTo(848, 784);
    path.cubicTo(845.238586f, 784, 843, 781.761414f, 843, 779);
    path.lineTo(843, 216);
    path.close();
    path.moveTo(844, 217);
    path.cubicTo(844, 214.238571f, 846.238586f, 212, 849, 212);
    path.lineTo(1190, 212);
    path.cubicTo(1192.76147f, 212, 1195, 214.238571f, 1195, 217);
    path.lineTo(1195, 778);
    path.cubicTo(1195, 779.65686f, 1192.76147f, 781, 1190, 781);
    path.lineTo(849, 781);
    path.cubicTo(846.238586f, 781, 844, 779.65686f, 844, 778);
    path.lineTo(844, 217);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(843, 784);
    pathB.lineTo(843, 779);
    pathB.lineTo(1196, 779.000061f);
    pathB.lineTo(1196, 784);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_sciality_com_100(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(162, 468);
    path.cubicTo(159.790863f, 468, 158, 469.790863f, 158, 472);
    path.lineTo(158, 528);
    path.cubicTo(158, 530.209106f, 159.790863f, 532, 162, 532);
    path.lineTo(275, 532);
    path.cubicTo(277.209137f, 532, 279, 530.209106f, 279, 528);
    path.lineTo(279, 472);
    path.cubicTo(279, 469.790863f, 277.209137f, 468, 275, 468);
    path.lineTo(162, 468);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(275, 468);
    pathB.cubicTo(276.65686f, 468, 278, 469.34314f, 278, 471);
    pathB.lineTo(278, 529);
    pathB.cubicTo(278, 530.65686f, 276.65686f, 532, 275, 532);
    pathB.lineTo(161, 532);
    pathB.cubicTo(159.34314f, 532, 158, 530.65686f, 158, 529);
    pathB.lineTo(158, 471);
    pathB.cubicTo(158, 469.34314f, 159.34314f, 468, 161, 468);
    pathB.lineTo(275, 468);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_sciality_com_101(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(162, 468);
    path.cubicTo(159.790863f, 468, 158, 469.790863f, 158, 472);
    path.lineTo(158, 528);
    path.cubicTo(158, 530.209106f, 159.790863f, 532, 162, 532);
    path.lineTo(275.009186f, 532);
    path.cubicTo(276.661774f, 531.994995f, 278, 530.653748f, 278, 529);
    path.lineTo(278, 471);
    path.cubicTo(278, 469.346375f, 276.662079f, 468.005249f, 275.009705f, 468);
    path.lineTo(162, 468);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(161, 469);
    pathB.lineTo(275, 469);
    pathB.cubicTo(276.65686f, 469, 278, 469.895416f, 278, 471);
    pathB.lineTo(278, 529);
    pathB.cubicTo(278, 530.65686f, 276.65686f, 532, 275, 532);
    pathB.lineTo(161, 532);
    pathB.cubicTo(159.34314f, 532, 158, 530.65686f, 158, 529);
    pathB.lineTo(158, 471);
    pathB.cubicTo(158, 469.895416f, 159.34314f, 469, 161, 469);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_meb_gov_tr_5(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(137.34314f, 145.34314f);
    path.quadTo(139.687088f, 143.000793f, 143, 143);
    path.lineTo(242, 143);
    path.quadTo(245.312912f, 143.000793f, 247.65686f, 145.34314f);
    path.quadTo(249.999207f, 147.687088f, 250, 151);
    path.lineTo(250, 177);
    path.lineTo(135, 177);
    path.lineTo(135, 151);
    path.quadTo(135.000793f, 147.687088f, 137.34314f, 145.34314f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(135, 143);
    pathB.lineTo(250, 143);
    pathB.lineTo(250, 177);
    pathB.lineTo(135, 177);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_meb_gov_tr_6(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(143, 143);
    path.quadTo(139.687088f, 143.000793f, 137.34314f, 145.34314f);
    path.quadTo(135.000793f, 147.687088f, 135, 151);
    path.lineTo(135, 177);
    path.lineTo(250, 177);
    path.lineTo(250, 151);
    path.quadTo(249.999207f, 147.687088f, 247.65686f, 145.34314f);
    path.quadTo(245.312912f, 143.000793f, 242, 143);
    path.lineTo(143, 143);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(143, 143);
    pathB.lineTo(242, 143);
    pathB.cubicTo(245.865997f, 143, 249, 146.581726f, 249, 151);
    pathB.lineTo(249, 177);
    pathB.lineTo(135, 177);
    pathB.lineTo(135, 151);
    pathB.cubicTo(135, 146.581726f, 138.581726f, 143, 143, 143);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpgithub_io_25(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1001.87866f, 14.8786793f);
    path.quadTo(1002.75745f, 14.0001001f, 1004, 14);
    path.lineTo(1105, 14);
    path.quadTo(1106.24255f, 14.0001001f, 1107.12134f, 14.8786793f);
    path.quadTo(1107.99988f, 15.7574596f, 1108, 17);
    path.lineTo(1108, 41);
    path.quadTo(1107.99988f, 42.2425423f, 1107.12134f, 43.1213188f);
    path.quadTo(1106.24255f, 43.9999008f, 1105, 44);
    path.lineTo(1004, 44);
    path.quadTo(1002.75745f, 43.9999008f, 1001.87866f, 43.1213188f);
    path.quadTo(1001.00012f, 42.2425423f, 1001, 41);
    path.lineTo(1001, 17);
    path.quadTo(1001.00012f, 15.7574596f, 1001.87866f, 14.8786793f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(1005, 16);
    pathB.lineTo(1104, 16);
    pathB.cubicTo(1105.10461f, 16, 1106, 16.8954296f, 1106, 18);
    pathB.lineTo(1106, 40);
    pathB.cubicTo(1106, 41.1045685f, 1105.10461f, 42, 1104, 42);
    pathB.lineTo(1005, 42);
    pathB.cubicTo(1003.89545f, 42, 1003, 41.1045685f, 1003, 40);
    pathB.lineTo(1003, 18);
    pathB.cubicTo(1003, 16.8954296f, 1003.89545f, 16, 1005, 16);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpgithub_io_26(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1001.87866f, 14.8786793f);
    path.quadTo(1002.75745f, 14.0001001f, 1004, 14);
    path.lineTo(1105, 14);
    path.quadTo(1106.24255f, 14.0001001f, 1107.12134f, 14.8786793f);
    path.quadTo(1107.99988f, 15.7574596f, 1108, 17);
    path.lineTo(1108, 41);
    path.quadTo(1107.99988f, 42.2425423f, 1107.12134f, 43.1213188f);
    path.quadTo(1106.24255f, 43.9999008f, 1105, 44);
    path.lineTo(1004, 44);
    path.quadTo(1002.75745f, 43.9999008f, 1001.87866f, 43.1213188f);
    path.quadTo(1001.00012f, 42.2425423f, 1001, 41);
    path.lineTo(1001, 17);
    path.quadTo(1001.00012f, 15.7574596f, 1001.87866f, 14.8786793f);
    path.close();
    path.moveTo(1003, 18);
    path.cubicTo(1003, 16.8954296f, 1003.89545f, 16, 1005, 16);
    path.lineTo(1104, 16);
    path.cubicTo(1105.10461f, 16, 1106, 16.8954296f, 1106, 18);
    path.lineTo(1106, 40);
    path.cubicTo(1106, 41.1045685f, 1105.10461f, 42, 1104, 42);
    path.lineTo(1005, 42);
    path.cubicTo(1003.89545f, 42, 1003, 41.1045685f, 1003, 40);
    path.lineTo(1003, 18);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(1108, 14);
    pathB.lineTo(1106, 16);
    pathB.lineTo(1105.97998f, 46.0200005f);
    pathB.lineTo(1108, 44);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpskpicture14(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(0, 994);
    path.lineTo(0, 0);
    path.lineTo(512, 0);
    path.lineTo(512, 994);
    path.lineTo(0, 994);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(-317, 168);
    pathB.quadTo(-317, 166.757385f, -316.121338f, 165.878662f);
    pathB.quadTo(-315.242645f, 165, -314, 165);
    pathB.lineTo(320, 165);
    pathB.quadTo(321.242615f, 165, 322.121338f, 165.878662f);
    pathB.quadTo(323, 166.757385f, 323, 168);
    pathB.lineTo(323, 193);
    pathB.lineTo(-317, 193);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpskpicture15(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(0, 193);
    path.lineTo(323, 193);
    path.lineTo(323, 168);
    path.quadTo(323, 166.757385f, 322.121338f, 165.878662f);
    path.quadTo(321.242615f, 165, 320, 165);
    path.lineTo(0, 165);
    path.lineTo(0, 193);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(-314, 165);
    pathB.lineTo(320, 165);
    pathB.cubicTo(321.65686f, 165, 323, 166.34314f, 323, 168);
    pathB.lineTo(323, 192);
    pathB.lineTo(-317, 192);
    pathB.lineTo(-317, 168);
    pathB.cubicTo(-317, 166.34314f, -315.65686f, 165, -314, 165);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

/* Three edges are partially coincident. Only one of the three knows about the other two.
   Subsequently, when the angle loop is created, it misses one of the edges.
   After coincident edges are processed, probably need a check-and-correct that makes sure the
   coincidences are all self-consistent.
 */
static void skpelpais_com_18(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(183, 8507);
    path.lineTo(552, 8506.99023f);
    path.lineTo(552, 8508);
    path.lineTo(183, 8508);
    path.lineTo(183, 8507);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(183, 8508);
    pathB.lineTo(183, 8506.99023f);
    pathB.lineTo(552, 8507);
    pathB.lineTo(552, 8508);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

/* this generates a pair of lines that are essentially coincident; but the next line at a right
   angle is not treated as if it intersects at the same point.
   There are several of options:
     move the intersection of the right angle line to the coincident point (should 'near' do this?
     construct another coincident pair from the right angle line to the coincident point
     treat the intersection as simple and not coincident
 */
static void skpnamecheap_com_405(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(140, 1000);
    path.lineTo(140, 842);
    path.lineTo(141, 842);
    path.lineTo(141.14502f, 1000);
    path.lineTo(140, 1000);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(140, 842);
    pathB.lineTo(141.008835f, 837.9646f);
    pathB.lineTo(141.235291f, 1109.05884f);
    pathB.lineTo(140, 1114);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// fails on angle insert -- haven't investigated yet
static void skpwww_alrakoba_net_62(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(134.34314f, 9802.34277f);
    path.quadTo(132, 9804.68652f, 132, 9808);
    path.lineTo(132, 9822);
    path.quadTo(132, 9825.31348f, 134.34314f, 9827.65723f);
    path.quadTo(136.686295f, 9830, 140, 9830);
    path.lineTo(140.028473f, 9830);
    path.lineTo(139.877213f, 9828.90723f);
    path.quadTo(137.692032f, 9828.5332f, 136.050247f, 9826.65723f);
    path.quadTo(134, 9824.31348f, 134, 9821);
    path.lineTo(134, 9809);
    path.quadTo(134, 9806.10059f, 136.050247f, 9804.0498f);
    path.lineTo(134.34314f, 9802.34277f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(132, 9800);
    pathB.lineTo(135.962357f, 9800);
    pathB.lineTo(140, 9830);
    pathB.lineTo(132, 9830);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

/* asserts in alignSpanState looks like a coincident related bug */
static void skpwww_cityads_ru_249(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(817.464478f, 11.4644661f);
    path.quadTo(818.928955f, 10, 821, 10);
    path.lineTo(998, 10);
    path.quadTo(999.082947f, 10, 1000, 10.4003992f);
    path.lineTo(1000, 13.3527431f);
    path.quadTo(999.917603f, 13.2607508f, 999.82843f, 13.1715727f);
    path.quadTo(998.65686f, 12, 997, 12);
    path.lineTo(822, 12);
    path.quadTo(820.34314f, 12, 819.17157f, 13.1715727f);
    path.quadTo(818, 14.3431454f, 818, 16);
    path.lineTo(818, 28);
    path.quadTo(818, 29.6568546f, 819.17157f, 30.8284264f);
    path.quadTo(820.34314f, 32, 822, 32);
    path.lineTo(997, 32);
    path.quadTo(998.65686f, 32, 999.82843f, 30.8284264f);
    path.quadTo(999.917603f, 30.7392426f, 1000, 30.6472569f);
    path.lineTo(1000, 33.5996017f);
    path.quadTo(999.082947f, 34, 998, 34);
    path.lineTo(821, 34);
    path.quadTo(818.928955f, 34, 817.464478f, 32.5355339f);
    path.quadTo(816, 31.0710678f, 816, 29);
    path.lineTo(816, 15);
    path.quadTo(816, 12.9289322f, 817.464478f, 11.4644661f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(1003, 10);
    pathB.lineTo(1000, 13);
    pathB.lineTo(999.969971f, 37.0299988f);
    pathB.lineTo(1003, 34);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// fails on angle insert
static void skpwww_dealnews_com_315(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(966.464478f, 4261.46436f);
    path.quadTo(965, 4262.92871f, 965, 4265);
    path.lineTo(965, 4276);
    path.quadTo(965, 4278.07129f, 966.464478f, 4279.53564f);
    path.quadTo(967.928955f, 4281, 970, 4281);
    path.lineTo(970.020325f, 4281);
    path.lineTo(969.887512f, 4279.81641f);
    path.quadTo(968.928284f, 4279.48145f, 968.17157f, 4278.53564f);
    path.quadTo(967, 4277.07129f, 967, 4275);
    path.lineTo(967, 4266);
    path.quadTo(967, 4264.44287f, 968.035217f, 4263.31396f);
    path.lineTo(968, 4263);
    path.lineTo(966.464478f, 4261.46436f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(965, 4260);
    pathB.lineTo(967.716675f, 4260);
    pathB.lineTo(970, 4281);
    pathB.lineTo(965, 4281);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// fails in intersections insert
static void skpwww_inmotionhosting_com_9(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(991.633911f, 1839);
    path.lineTo(964.265015f, 1839);
    path.lineTo(963.734985f, 1893.73242f);
    path.lineTo(991.3703f, 1894);
    path.lineTo(1018.23492f, 1894);
    path.lineTo(1018.76501f, 1839.2627f);
    path.lineTo(991.638184f, 1839);
    path.lineTo(991.633911f, 1839);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(964.267578f, 1838.73499f);
    pathB.lineTo(1019.26501f, 1839.26758f);
    pathB.lineTo(1018.73242f, 1894.26501f);
    pathB.lineTo(963.734985f, 1893.73242f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_alucinados_net_101(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1129.53552f, 1164.46448f);
    path.lineTo(1128, 1166);
    path.lineTo(1128.12231f, 1166.49548f);
    path.quadTo(1129, 1167.56592f, 1129, 1169);
    path.lineTo(1129, 1170.05054f);
    path.lineTo(1130.34509f, 1175.49878f);
    path.quadTo(1131, 1174.38513f, 1131, 1173);
    path.lineTo(1131, 1168);
    path.quadTo(1131, 1165.92896f, 1129.53552f, 1164.46448f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(1131, 1163);
    pathB.lineTo(-43515.8555f, -177415.594f);
    pathB.lineTo(1129.76465f, 1173.05884f);
    pathB.lineTo(1131, 1178);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// /SkOpContour.cpp:278: failed assertion "!approximately_negative(oEndT - oStartT)
static void skpwww_hairjobsearch_com_31(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(143.292892f, 0.707106769f);
    path.quadTo(143, 0.414213538f, 143, 0);
    path.lineTo(1123, 0);
    path.quadTo(1123, 0.414213538f, 1122.70715f, 0.707106769f);
    path.quadTo(1122.41418f, 1, 1122, 1);
    path.lineTo(144, 1);
    path.quadTo(143.585785f, 1, 143.292892f, 0.707106769f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(143, 1);
    pathB.lineTo(144, 0);
    pathB.lineTo(1122, 0);
    pathB.lineTo(1123, 1);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// SkOpSegment::checkSmallCoincidence; line 1958 SkASSERT(span.fWindValue);
static void skpwww_heartiste_wordpress_com_86(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(741, 9432);
    path.lineTo(761, 9431.99023f);
    path.lineTo(761, 9433);
    path.lineTo(741, 9433);
    path.lineTo(741, 9432);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(741, 9433);
    pathB.lineTo(741, 9431.99023f);
    pathB.lineTo(761, 9432);
    pathB.lineTo(761, 9433);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

/*
 * 125          SkASSERT(index < fCount);
(gdb) bt
#0  0x000000000041094b in SkTDArray<SkOpSpan>::operator[] (this=0x18, index=2) at ../../include/core/SkTDArray.h:125
#1  0x00000000005ad2ce in SkOpSegment::tAtMid (this=0x0, start=2, end=5, mid=0.90000000000000002) at ../../src/pathops/SkOpSegment.h:219
#2  0x00000000005aadea in contourRangeCheckY (contourList=..., currentPtr=0x7fffd77f4ec0, indexPtr=0x7fffd77f4f88, endIndexPtr=0x7fffd77f4f8c, bestHit=0x7fffd77f4ec8,
    bestDx=0x7fffd77f4edc, tryAgain=0x7fffd77f4eff, midPtr=0x7fffd77f4e60, opp=false) at ../../src/pathops/SkPathOpsCommon.cpp:20
#3  0x00000000005ab8ee in rightAngleWinding (contourList=..., current=0x7fffd77f4ec0, index=0x7fffd77f4f88, endIndex=0x7fffd77f4f8c, tHit=0x7fffd77f4ec8, hitDx=0x7fffd77f4edc,
 */
#if TRY_NEW_TESTS
static void skpwww_argus_presse_fr_41(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1000, 343);
    path.lineTo(165, 343);
    path.lineTo(165, 364.869873f);
    path.lineTo(1000, 364.869873f);
    path.lineTo(1000, 343);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(165, 343.000031f);
    pathB.lineTo(1000, 343.000031f);
    pathB.lineTo(1000, 364.869904f);
    pathB.lineTo(165, 364.869904f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}
#endif

// SkOpSegment::checkSmallCoincidence; line 1958 SkASSERT(span.fWindValue);
static void skpwww_320kbps_net_2231(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(838, 9125);
    path.lineTo(862, 9124.99023f);
    path.lineTo(862, 9126);
    path.lineTo(838, 9126);
    path.lineTo(838, 9125);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(838, 9126);
    pathB.lineTo(838, 9124.99023f);
    pathB.lineTo(862, 9125);
    pathB.lineTo(862, 9126);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// debugValidateLoop loop sum fails
static void skpwww_exystence_net_61(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(143, 9075);
    path.lineTo(316, 9075);
    path.lineTo(316, 9073.99023f);
    path.lineTo(143, 9074);
    path.lineTo(143, 9075);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(143, 9075);
    pathB.lineTo(143, 9073.99023f);
    pathB.lineTo(316, 9074);
    pathB.lineTo(316, 9075);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// debugValidateLoop loop sum fails
static void skpwww_trashness_com_36(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(541.5f, 4835.99512f);
    path.lineTo(91.5f, 4836);
    path.lineTo(91.5f, 4836.5f);
    path.lineTo(541.5f, 4836.5f);
    path.lineTo(541.5f, 4835.99512f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(91.5f, 4836.5f);
    pathB.lineTo(91.5f, 4835.99512f);
    pathB.lineTo(541.5f, 4836);
    pathB.lineTo(541.5f, 4836.5f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// SkIntersections::lineVertical fUsed >= fMax
static void skpwww_getgold_jp_731(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(284.878693f, 10134.8789f);
    path.quadTo(284, 10135.7578f, 284, 10137);
    path.lineTo(284, 10216);
    path.quadTo(284, 10217.2422f, 284.878693f, 10218.1211f);
    path.quadTo(285.125122f, 10218.3672f, 285.40213f, 10218.5459f);
    path.lineTo(286, 10138);
    path.lineTo(286, 10136);
    path.lineTo(284.878693f, 10134.8789f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(284, 10134);
    pathB.lineTo(286.05957f, 10129.8809f);
    pathB.lineTo(285.399994f, 10216.2002f);
    pathB.lineTo(284, 10219);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// SkOpContour::calcPartialCoincidentWinding SkASSERT(!approximately_negative(endT - startT));
static void skpwww_maturesupertube_com_21(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(3.17157292f, 11831.1719f);
    path.quadTo(4.34314585f, 11830, 6, 11830);
    path.lineTo(1259, 11830);
    path.quadTo(1260.65686f, 11830, 1261.82837f, 11831.1719f);
    path.quadTo(1263, 11832.3428f, 1263, 11834);
    path.lineTo(1263, 11848);
    path.quadTo(1263, 11849.6572f, 1261.82837f, 11850.8281f);
    path.quadTo(1260.65686f, 11852, 1259, 11852);
    path.lineTo(6, 11852);
    path.quadTo(4.34314585f, 11852, 3.17157292f, 11850.8281f);
    path.quadTo(2, 11849.6572f, 2, 11848);
    path.lineTo(2, 11834);
    path.quadTo(2, 11832.3428f, 3.17157292f, 11831.1719f);
    path.close();
    path.moveTo(3.87867975f, 11831.8789f);
    path.quadTo(4.7573595f, 11831, 6, 11831);
    path.lineTo(1259, 11831);
    path.quadTo(1260.24268f, 11831, 1261.12134f, 11831.8789f);
    path.quadTo(1262, 11832.7578f, 1262, 11834);
    path.lineTo(1262, 11848);
    path.quadTo(1262, 11849.2422f, 1261.12134f, 11850.1211f);
    path.quadTo(1260.24268f, 11851, 1259, 11851);
    path.lineTo(6, 11851);
    path.quadTo(4.7573595f, 11851, 3.87867975f, 11850.1211f);
    path.quadTo(3, 11849.2422f, 3, 11848);
    path.lineTo(3, 11834);
    path.quadTo(3, 11832.7578f, 3.87867975f, 11831.8789f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(2, 11830);
    pathB.lineTo(4.5f, 11832.5f);
    pathB.lineTo(1260.5f, 11832.5f);
    pathB.lineTo(1263, 11830);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// can't find winding of remaining vertical edges
static void skpwww_hubbyscook_com_22(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1000, 902.329346f);
    path.quadTo(998, 905.250427f, 998, 909);
    path.lineTo(998, 910);
    path.quadTo(998, 913.749573f, 1000, 916.670654f);
    path.lineTo(1000, 902.329346f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(998, 910);
    pathB.lineTo(998, 909);
    pathB.quadTo(998, 904.029419f, 1001.51471f, 900.514709f);
    pathB.quadTo(1005.02942f, 897, 1010, 897);
    pathB.lineTo(1011, 897);
    pathB.quadTo(1015.14215f, 897, 1018.07104f, 900.514709f);
    pathB.quadTo(1021, 904.029419f, 1021, 909);
    pathB.lineTo(1021, 910);
    pathB.quadTo(1021, 914.142151f, 1018.07104f, 917.071045f);
    pathB.quadTo(1015.14215f, 920, 1011, 920);
    pathB.lineTo(1010, 920);
    pathB.quadTo(1005.02942f, 920, 1001.51471f, 917.071045f);
    pathB.quadTo(998, 914.142151f, 998, 910);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

// calcCoincidentWinding asserts in zeroSpan
#if TRY_NEW_TESTS
static void skpwww_gruposejaumdivulgador_com_br_4(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(610.5f, 5.78626502e-14f);
    path.lineTo(1083.5f, -6.12303177e-17f);
    path.lineTo(1083.5f, 469);
    path.lineTo(610.5f, 469);
    path.lineTo(610.5f, 5.78626502e-14f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(611, 0);
    pathB.lineTo(1084, 0);
    pathB.lineTo(1084, 469);
    pathB.lineTo(611, 469);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}
#endif

// asserts in bridgeOp simple->isClosed()
#if TRY_NEW_TESTS_IS_CLOSED
static void skpwww_phototransferapp_com_24(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(85.6091843f, 5.92893219f);
    path.quadTo(89.6041641f, 3, 93.7462997f, 3);
    path.lineTo(1212.74634f, 3);
    path.quadTo(1216.88843f, 3, 1218.75134f, 5.92893219f);
    path.quadTo(1220.61414f, 8.85775471f, 1219.10669f, 12.9996767f);
    path.quadTo(1220.46338f, 9.27196693f, 1218.4939f, 6.63603878f);
    path.quadTo(1216.52441f, 4, 1212.38232f, 4);
    path.lineTo(93.3823318f, 4);
    path.quadTo(89.2401962f, 4, 85.3518219f, 6.63603878f);
    path.quadTo(81.4634476f, 9.27207756f, 80.1065979f, 13);
    path.quadTo(81.614212f, 8.85786438f, 85.6091843f, 5.92893219f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(83.7462997f, 3);
    pathB.lineTo(1222.74634f, 3);
    pathB.lineTo(1219.10657f, 13);
    pathB.lineTo(80.1065979f, 13);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}
#endif

// !simple->isClosed()
#if TRY_NEW_TESTS_IS_CLOSED
static void skpwww_helha_be_109(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(117.686981f, 3339.08423f);
    path.lineTo(109.533035f, 3350.72925f);
    path.quadTo(107.120552f, 3354.17456f, 103.879379f, 3354.41821f);
    path.quadTo(100.638504f, 3354.66187f, 98.4674301f, 3351.56177f);
    path.quadTo(100.87973f, 3355.00635f, 104.291222f, 3355.00635f);
    path.quadTo(107.70298f, 3355.00635f, 110.115463f, 3351.56104f);
    path.lineTo(118, 3340.30078f);
    path.lineTo(118, 3339.53125f);
    path.lineTo(117.686981f, 3339.08423f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(118.269409f, 3339.91602f);
    pathB.lineTo(117.686981f, 3339.08423f);
    pathB.lineTo(98.4669647f, 3351.56104f);
    pathB.lineTo(104.291214f, 3359.87891f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}
#endif

// !simple->isClosed()
static void skpwww_cooksnaps_com_32(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(509.34021f, 176);
    path.lineTo(505, 176);
    path.quadTo(500.964233f, 176, 497.299988f, 176.896912f);
    path.quadTo(493.678162f, 177.952286f, 490.183014f, 179.9702f);
    path.lineTo(489.316986f, 180.4702f);
    path.quadTo(485.175385f, 182.861359f, 482.115265f, 186.082397f);
    path.quadTo(479.69455f, 188.700821f, 477.995941f, 191.618286f);
    path.quadTo(476.316772f, 194.550476f, 475.258759f, 197.959335f);
    path.quadTo(474, 202.218979f, 474, 207);
    path.lineTo(474, 208);
    path.quadTo(474, 212.03569f, 474.896851f, 215.699799f);
    path.quadTo(475.950256f, 219.315002f, 477.962708f, 222.803986f);
    path.lineTo(477.970215f, 222.816986f);
    path.lineTo(478.470215f, 223.683014f);
    path.quadTo(478.474915f, 223.691162f, 478.479645f, 223.69931f);
    path.quadTo(480.867981f, 227.831055f, 484.082947f, 230.885254f);
    path.quadTo(486.701447f, 233.305939f, 489.61908f, 235.004517f);
    path.quadTo(492.550232f, 236.682983f, 495.957611f, 237.740738f);
    path.quadTo(500.217987f, 239, 505, 239);
    path.lineTo(509.482178f, 239);
    path.quadTo(515.299133f, 238.212051f, 520.801941f, 235.038513f);
    path.quadTo(520.809509f, 235.034164f, 520.817017f, 235.0298f);
    path.lineTo(521.683044f, 234.5298f);
    path.quadTo(521.692078f, 234.524582f, 521.701111f, 234.519348f);
    path.quadTo(532.80603f, 228.09938f, 536.126709f, 215.70639f);
    path.quadTo(539.450134f, 203.303314f, 533.029785f, 192.183014f);
    path.lineTo(532.529785f, 191.316986f);
    path.quadTo(526.109497f, 180.196686f, 513.706421f, 176.873276f);
    path.quadTo(511.503082f, 176.282898f, 509.34021f, 176);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(478.470215f, 223.683014f);
    pathB.lineTo(477.970215f, 222.816986f);
    pathB.quadTo(471.549896f, 211.696686f, 474.873322f, 199.293594f);
    pathB.quadTo(478.196686f, 186.890503f, 489.316986f, 180.4702f);
    pathB.lineTo(490.183014f, 179.9702f);
    pathB.quadTo(501.303345f, 173.549896f, 513.706421f, 176.873276f);
    pathB.quadTo(526.109497f, 180.196686f, 532.529785f, 191.316986f);
    pathB.lineTo(533.029785f, 192.183014f);
    pathB.quadTo(539.450134f, 203.303314f, 536.126709f, 215.70639f);
    pathB.quadTo(532.803345f, 228.109497f, 521.683044f, 234.5298f);
    pathB.lineTo(520.817017f, 235.0298f);
    pathB.quadTo(509.696686f, 241.450104f, 497.29361f, 238.126709f);
    pathB.quadTo(484.890533f, 234.803314f, 478.470215f, 223.683014f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// !simple->isClosed()
static void skpwww_contextualnewsfeeds_com_346(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(460.257355f, 1202.27808f);
    path.lineTo(460.257355f, 1204.27808f);
    path.quadTo(461.081207f, 1204.27808f, 461.665161f, 1203.69873f);
    path.lineTo(461.67157f, 1203.69238f);
    path.lineTo(466.621307f, 1198.74268f);
    path.quadTo(466.623993f, 1198.73999f, 466.626648f, 1198.7373f);
    path.quadTo(466.914185f, 1198.44604f, 466.914185f, 1198.03552f);
    path.quadTo(466.914215f, 1197.62122f, 466.621307f, 1197.32837f);
    path.lineTo(465.914215f, 1196.62122f);
    path.lineTo(460.257355f, 1202.27808f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(460.257355f, 1205.10657f);
    pathB.lineTo(458.828979f, 1203.67822f);
    pathB.lineTo(465.914215f, 1196.62122f);
    pathB.lineTo(467.32843f, 1198.03552f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// line quad intersection SkIntersections::assert
static void skpwww_pindosiya_com_99(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(899.17157f, 548.17157f);
    path.quadTo(898, 549.34314f, 898, 551);
    path.lineTo(898, 556);
    path.lineTo(899.027283f, 556);
    path.lineTo(900.02356f, 551.602844f);
    path.quadTo(900.06073f, 551.297058f, 900.156555f, 551.015747f);
    path.lineTo(900.5f, 549.5f);
    path.lineTo(899.17157f, 548.17157f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(898, 547);
    pathB.lineTo(901.086914f, 547);
    pathB.lineTo(899, 556);
    pathB.lineTo(898, 556);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// SkOpAngle::setSector SkASSERT(fSectorStart >= 0);
static void skpwww_karnivool_com_au_11(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(0, 1431);
    path.lineTo(0, 775);
    path.lineTo(1265, 775);
    path.lineTo(1265, 1431);
    path.lineTo(0, 1431);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(32.3243904f, 851);
    pathB.lineTo(459.324402f, 851);
    pathB.lineTo(427, 1081);
    pathB.lineTo(-3.81469727e-06f, 1081);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// computeonesumreverse calls markwinding with 0 winding
#if TRY_NEW_TESTS
static void skpwww_tunero_de_24(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1020.79303f, 2252);
    path.quadTo(1018.72198f, 2252, 1016.86798f, 2253.46436f);
    path.quadTo(1015.02032f, 2254.92383f, 1014.4668f, 2256.98584f);
    path.lineTo(1014.46301f, 2257);
    path.lineTo(1011.53705f, 2268);
    path.quadTo(1010.98615f, 2270.07104f, 1012.06104f, 2271.53564f);
    path.quadTo(1013.13599f, 2273, 1015.20703f, 2273);
    path.lineTo(1083.20703f, 2273);
    path.quadTo(1085.27808f, 2273, 1087.13208f, 2271.53564f);
    path.quadTo(1088.97144f, 2270.08252f, 1089.52832f, 2268.03271f);
    path.lineTo(1089.53711f, 2268);
    path.lineTo(1092.46301f, 2257);
    path.lineTo(1092.4679f, 2256.98145f);
    path.quadTo(1093.00916f, 2254.92236f, 1091.93909f, 2253.46436f);
    path.quadTo(1090.86414f, 2252, 1088.79297f, 2252);
    path.lineTo(1020.79303f, 2252);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(1011.53705f, 2268);
    pathB.lineTo(1014.46301f, 2257);
    pathB.quadTo(1015.01392f, 2254.92896f, 1016.86798f, 2253.46436f);
    pathB.quadTo(1018.72198f, 2252, 1020.79303f, 2252);
    pathB.lineTo(1088.79297f, 2252);
    pathB.quadTo(1090.86414f, 2252, 1091.93909f, 2253.46436f);
    pathB.quadTo(1093.01392f, 2254.92896f, 1092.46301f, 2257);
    pathB.lineTo(1089.53711f, 2268);
    pathB.quadTo(1088.98608f, 2270.07104f, 1087.13208f, 2271.53564f);
    pathB.quadTo(1085.27808f, 2273, 1083.20703f, 2273);
    pathB.lineTo(1015.20703f, 2273);
    pathB.quadTo(1013.13599f, 2273, 1012.06104f, 2271.53564f);
    pathB.quadTo(1010.98615f, 2270.07104f, 1011.53705f, 2268);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}
#endif

// rightAngleWinding (probably same as argus_presse)
#if TRY_NEW_TESTS
static void skpwww_docgelo_com_66(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(22.5f, 24174.5f);
    path.lineTo(185.5f, 24174.498f);
    path.lineTo(185.5f, 24174.75f);
    path.lineTo(22.5f, 24174.75f);
    path.lineTo(22.5f, 24174.5f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(22.5f, 24174.75f);
    pathB.lineTo(22.5f, 24174.498f);
    pathB.lineTo(185.5f, 24174.5f);
    pathB.lineTo(185.5f, 24174.75f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}
#endif

// joinCoincidence / findT / assert
static void skpwww_kpopexplorer_net_22(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1000, 866.329346f);
    path.quadTo(998, 869.250427f, 998, 873);
    path.lineTo(998, 874);
    path.quadTo(998, 877.749573f, 1000, 880.670654f);
    path.lineTo(1000, 866.329346f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(998, 874);
    pathB.lineTo(998, 873);
    pathB.quadTo(998, 868.029419f, 1001.51471f, 864.514709f);
    pathB.quadTo(1005.02942f, 861, 1010, 861);
    pathB.lineTo(1011, 861);
    pathB.quadTo(1015.14215f, 861, 1018.07104f, 864.514709f);
    pathB.quadTo(1021, 868.029419f, 1021, 873);
    pathB.lineTo(1021, 874);
    pathB.quadTo(1021, 878.142151f, 1018.07104f, 881.071045f);
    pathB.quadTo(1015.14215f, 884, 1011, 884);
    pathB.lineTo(1010, 884);
    pathB.quadTo(1005.02942f, 884, 1001.51471f, 881.071045f);
    pathB.quadTo(998, 878.142151f, 998, 874);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

// rightAngleWinding
#if TRY_NEW_TESTS
static void skpwww_artblart_com_8(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(22.5f, 24527.25f);
    path.lineTo(45, 24527.248f);
    path.lineTo(45, 24527.5f);
    path.lineTo(22.5f, 24527.5f);
    path.lineTo(22.5f, 24527.25f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(22.5f, 24527.5f);
    pathB.lineTo(22.5f, 24527.248f);
    pathB.lineTo(45, 24527.25f);
    pathB.lineTo(45, 24527.5f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}
#endif

// joinCoincidence / findT / assert
static void skpwww_jessicaslens_wordpress_com_222(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1000, 844.329346f);
    path.quadTo(998, 847.250427f, 998, 851);
    path.lineTo(998, 852);
    path.quadTo(998, 855.749573f, 1000, 858.670654f);
    path.lineTo(1000, 844.329346f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(998, 852);
    pathB.lineTo(998, 851);
    pathB.quadTo(998, 846.029419f, 1001.51471f, 842.514709f);
    pathB.quadTo(1005.02942f, 839, 1010, 839);
    pathB.lineTo(1011, 839);
    pathB.quadTo(1015.14215f, 839, 1018.07104f, 842.514709f);
    pathB.quadTo(1021, 846.029419f, 1021, 851);
    pathB.lineTo(1021, 852);
    pathB.quadTo(1021, 856.142151f, 1018.07104f, 859.071045f);
    pathB.quadTo(1015.14215f, 862, 1011, 862);
    pathB.lineTo(1010, 862);
    pathB.quadTo(1005.02942f, 862, 1001.51471f, 859.071045f);
    pathB.quadTo(998, 856.142151f, 998, 852);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

// joinCoincidence / findT / assert
static void skpwww_simplysaru_com_40(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1000, 866.329346f);
    path.quadTo(998, 869.250427f, 998, 873);
    path.lineTo(998, 874);
    path.quadTo(998, 877.749573f, 1000, 880.670654f);
    path.lineTo(1000, 866.329346f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(998, 874);
    pathB.lineTo(998, 873);
    pathB.quadTo(998, 868.029419f, 1001.51471f, 864.514709f);
    pathB.quadTo(1005.02942f, 861, 1010, 861);
    pathB.lineTo(1011, 861);
    pathB.quadTo(1015.14215f, 861, 1018.07104f, 864.514709f);
    pathB.quadTo(1021, 868.029419f, 1021, 873);
    pathB.lineTo(1021, 874);
    pathB.quadTo(1021, 878.142151f, 1018.07104f, 881.071045f);
    pathB.quadTo(1015.14215f, 884, 1011, 884);
    pathB.lineTo(1010, 884);
    pathB.quadTo(1005.02942f, 884, 1001.51471f, 881.071045f);
    pathB.quadTo(998, 878.142151f, 998, 874);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

// cubic-cubic intersection reduce checkLinear assert
static void skpwww_partsdata_de_53(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(407, 119);
    path.lineTo(407, 28);
    path.lineTo(647, 28);
    path.lineTo(647, 119);
    path.lineTo(407, 119);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(471.228394f, 64.443222f);
    pathB.cubicTo(471.193878f, 60.953373f, 470.234985f, 52.4797592f, 462.201569f, 46.6231461f);
    pathB.cubicTo(454.168152f, 40.7665405f, 446.592804f, 41.993145f, 443.033936f, 42.8568878f);
    pathB.cubicTo(439.475098f, 43.7206268f, 436.978638f, 45.4052658f, 436.304871f, 45.7851906f);
    pathB.cubicTo(435.631104f, 46.1651154f, 435.156006f, 45.8026352f, 434.957306f, 45.6384506f);
    pathB.cubicTo(434.758636f, 45.4742737f, 431.460999f, 42.0105858f, 430.916901f, 41.4664841f);
    pathB.cubicTo(430.372803f, 40.9223785f, 429.731628f, 41.3303604f, 429.375214f, 41.6996689f);
    pathB.cubicTo(429.375214f, 41.6996689f, 420.610016f, 50.5190887f, 419.918793f, 51.1754227f);
    pathB.cubicTo(419.22757f, 51.8321419f, 419.331482f, 52.2465706f, 419.884308f, 52.8339005f);
    pathB.cubicTo(420.437134f, 53.4212303f, 425.170624f, 58.0167313f, 425.619568f, 58.4660416f);
    pathB.cubicTo(426.068512f, 58.9153557f, 426.137878f, 59.2952805f, 426.137878f, 59.8136024f);
    pathB.cubicTo(426.137878f, 60.3319244f, 426.103394f, 103.141357f, 426.103394f, 103.970215f);
    pathB.cubicTo(426.103394f, 104.799835f, 426.310791f, 105.525177f, 427.17453f, 105.525177f);
    pathB.cubicTo(428.038269f, 105.525177f, 440.131409f, 105.491432f, 440.85675f, 105.491432f);
    pathB.cubicTo(441.582489f, 105.491432f, 441.996918f, 104.903343f, 441.996918f, 104.17762f);
    pathB.cubicTo(441.996918f, 103.452271f, 441.996918f, 89.5622559f, 441.996918f, 87.8002701f);
    pathB.cubicTo(441.996918f, 86.0382843f, 442.342712f, 86.2453079f, 442.826141f, 86.3491974f);
    pathB.cubicTo(443.309601f, 86.4530945f, 445.832184f, 87.040802f, 448.700195f, 87.040802f);
    pathB.cubicTo(466.87442f, 86.6949997f, 471.815338f, 69.4876556f, 471.228394f, 64.443222f);
    pathB.close();
    pathB.moveTo(448.873108f, 72.4595642f);
    pathB.cubicTo(444.636658f, 72.4595642f, 441.202545f, 69.0254517f, 441.202545f, 64.7890244f);
    pathB.cubicTo(441.202545f, 60.5525932f, 444.636658f, 57.1184845f, 448.873108f, 57.1184845f);
    pathB.cubicTo(453.109528f, 57.1184845f, 456.54364f, 60.552597f, 456.54364f, 64.7890244f);
    pathB.cubicTo(456.54364f, 69.0254517f, 453.109528f, 72.4595642f, 448.873108f, 72.4595642f);
    pathB.close();
    pathB.moveTo(520.242859f, 82.5275803f);
    pathB.cubicTo(519.733276f, 81.6547394f, 494.845154f, 41.3379478f, 494.263123f, 40.3923073f);
    pathB.cubicTo(493.681122f, 39.4462852f, 493.244324f, 39.5918846f, 492.807495f, 40.3195038f);
    pathB.cubicTo(492.515167f, 40.8071136f, 467.238037f, 81.6790085f, 466.528625f, 82.8373566f);
    pathB.cubicTo(465.819183f, 83.9945831f, 466.497528f, 84.2975311f, 466.904358f, 84.5792542f);
    pathB.cubicTo(466.904358f, 84.5792542f, 477.399689f, 91.2036743f, 478.235748f, 91.6981049f);
    pathB.cubicTo(479.071838f, 92.1929092f, 479.396393f, 91.9028473f, 479.669403f, 91.5104141f);
    pathB.cubicTo(479.942383f, 91.1175995f, 484.106384f, 84.1549606f, 484.481781f, 83.5570221f);
    pathB.cubicTo(484.857147f, 82.9602051f, 485.198792f, 82.8741379f, 485.966583f, 82.8741379f);
    pathB.cubicTo(486.734406f, 82.8741379f, 499.635925f, 82.8062668f, 500.830322f, 82.8062668f);
    pathB.cubicTo(502.024658f, 82.8062668f, 502.229797f, 83.4038391f, 502.400452f, 83.6427078f);
    pathB.cubicTo(502.571045f, 83.8815842f, 506.615631f, 90.7414703f, 506.990997f, 91.2870865f);
    pathB.cubicTo(507.651123f, 92.2475128f, 508.017395f, 92.1333847f, 508.672241f, 91.6962051f);
    pathB.cubicTo(509.327423f, 91.2597809f, 519.442444f, 85.0744324f, 520.243286f, 84.4920349f);
    pathB.cubicTo(521.042908f, 83.9100189f, 520.751709f, 83.4004211f, 520.242859f, 82.5275803f);
    pathB.close();
    pathB.moveTo(493.720551f, 72.4811783f);
    pathB.cubicTo(491.265442f, 72.4811783f, 489.275574f, 70.4905548f, 489.275574f, 68.0362091f);
    pathB.cubicTo(489.275574f, 65.5811005f, 491.265808f, 63.5912399f, 493.720551f, 63.5912399f);
    pathB.cubicTo(496.175262f, 63.5912399f, 498.165527f, 65.5814819f, 498.165527f, 68.0362091f);
    pathB.cubicTo(498.165894f, 70.4905548f, 496.175659f, 72.4811783f, 493.720551f, 72.4811783f);
    pathB.close();
    pathB.moveTo(526.561707f, 42.132679f);
    pathB.cubicTo(526.876404f, 41.786499f, 527.537292f, 41.1881752f, 528.512878f, 42.1956215f);
    pathB.cubicTo(529.488892f, 43.2030678f, 531.691833f, 45.2486725f, 531.881042f, 45.4693451f);
    pathB.cubicTo(532.07019f, 45.6896439f, 532.762939f, 46.2875862f, 533.517883f, 45.7525826f);
    pathB.cubicTo(534.272827f, 45.2172012f, 539.497681f, 41.9753265f, 545.384277f, 42.132679f);
    pathB.cubicTo(546.203247f, 42.2270889f, 546.580566f, 42.5421791f, 546.612f, 43.8324814f);
    pathB.cubicTo(546.643494f, 45.1227837f, 546.674561f, 55.1957283f, 546.612f, 56.2657356f);
    pathB.cubicTo(546.549072f, 57.3361206f, 546.549072f, 57.7452469f, 544.975525f, 57.8396568f);
    pathB.cubicTo(543.401978f, 57.9340706f, 538.742798f, 59.5709305f, 538.774658f, 64.6070251f);
    pathB.cubicTo(538.806458f, 69.6431122f, 538.806091f, 86.2631226f, 538.806091f, 86.9554901f);
    pathB.cubicTo(538.806091f, 87.6478424f, 538.585815f, 88.4349976f, 537.484314f, 88.4349976f);
    pathB.cubicTo(536.382446f, 88.4349976f, 524.79895f, 88.4031372f, 524.04364f, 88.4031372f);
    pathB.cubicTo(523.287964f, 88.4031372f, 522.910706f, 88.3402023f, 522.910706f, 86.8606949f);
    pathB.cubicTo(522.910706f, 85.3823242f, 522.910706f, 60.6094704f, 522.910706f, 60.0740852f);
    pathB.cubicTo(522.910706f, 59.5387039f, 522.81665f, 58.9092865f, 522.470093f, 58.6260452f);
    pathB.cubicTo(522.123901f, 58.3428116f, 517.465088f, 53.621048f, 517.181885f, 53.3378105f);
    pathB.cubicTo(516.898621f, 53.0545731f, 516.300659f, 52.330368f, 517.213318f, 51.5121231f);
    pathB.cubicTo(518.125977f, 50.6942635f, 526.561707f, 42.132679f, 526.561707f, 42.132679f);
    pathB.close();
    pathB.moveTo(550.169006f, 43.7373123f);
    pathB.cubicTo(550.169006f, 42.6358337f, 550.767334f, 42.2263336f, 551.49115f, 42.2263336f);
    pathB.cubicTo(552.214966f, 42.2263336f, 552.781433f, 42.2263336f, 552.938843f, 42.2263336f);
    pathB.cubicTo(553.096191f, 42.2263336f, 553.725586f, 41.8801537f, 553.662598f, 41.124855f);
    pathB.cubicTo(553.600098f, 40.369175f, 553.662598f, 31.4614124f, 553.662598f, 30.8005257f);
    pathB.cubicTo(553.662598f, 30.1396389f, 553.75708f, 29.1951332f, 555.110657f, 29.1951332f);
    pathB.cubicTo(556.463928f, 29.1951332f, 566.536865f, 29.1951332f, 567.859009f, 29.1951332f);
    pathB.cubicTo(569.180786f, 29.1951332f, 569.463623f, 30.1711082f, 569.463623f, 30.7690544f);
    pathB.cubicTo(569.463623f, 31.3670006f, 569.463623f, 40.2122002f, 569.463623f, 41.0619125f);
    pathB.cubicTo(569.463623f, 41.9116249f, 569.746887f, 42.3207474f, 570.659912f, 42.3207474f);
    pathB.cubicTo(571.572571f, 42.3207474f, 575.507568f, 42.2263336f, 576.199951f, 42.2263336f);
    pathB.cubicTo(576.892273f, 42.2263336f, 577.742004f, 42.5725098f, 577.742004f, 43.8631973f);
    pathB.cubicTo(577.742004f, 45.1538811f, 577.742004f, 55.8877106f, 577.742004f, 56.5800705f);
    pathB.cubicTo(577.742004f, 57.2724266f, 577.616455f, 58.0595779f, 576.45166f, 58.0595779f);
    pathB.cubicTo(575.286865f, 58.0595779f, 570.943115f, 58.0595779f, 570.471069f, 58.0595779f);
    pathB.cubicTo(569.999023f, 58.0595779f, 569.479919f, 57.8389015f, 569.479919f, 59.0510979f);
    pathB.cubicTo(569.479919f, 60.2629128f, 569.479919f, 66.2124176f, 569.479919f, 67.1880188f);
    pathB.cubicTo(569.479919f, 68.1636047f, 570.628418f, 73.6406708f, 575.917053f, 73.6406708f);
    pathB.cubicTo(577.018921f, 73.6406708f, 577.742737f, 73.9242859f, 577.742737f, 75.4348907f);
    pathB.cubicTo(577.742737f, 76.945488f, 577.742737f, 87.0813751f, 577.742737f, 87.8366699f);
    pathB.cubicTo(577.742737f, 88.5915909f, 577.648315f, 89.4416809f, 576.295044f, 89.4416809f);
    pathB.cubicTo(574.028809f, 89.6312714f, 553.978088f, 88.0254974f, 553.631897f, 65.928421f);
    pathB.cubicTo(553.631897f, 65.928421f, 553.631897f, 59.6964378f, 553.631897f, 58.972229f);
    pathB.cubicTo(553.631897f, 58.2484055f, 553.034363f, 58.0436554f, 552.703735f, 58.0436554f);
    pathB.cubicTo(552.372681f, 58.0436554f, 551.522949f, 58.0436554f, 551.208252f, 58.0436554f);
    pathB.cubicTo(550.893921f, 58.0436554f, 550.170105f, 58.0906677f, 550.170105f, 56.6115417f);
    pathB.cubicTo(550.170105f, 55.1324081f, 550.169006f, 43.7373123f, 550.169006f, 43.7373123f);
    pathB.close();
    pathB.moveTo(611.203857f, 39.5509338f);
    pathB.cubicTo(612.084961f, 39.5509338f, 612.620422f, 40.0544662f, 612.620422f, 40.8097687f);
    pathB.cubicTo(612.620422f, 41.5650673f, 612.620422f, 53.1486092f, 612.620422f, 53.6839905f);
    pathB.cubicTo(612.620422f, 54.2193718f, 612.651489f, 55.2264404f, 611.612976f, 55.2264404f);
    pathB.cubicTo(610.574463f, 55.2264404f, 604.404663f, 55.9817429f, 604.404663f, 61.899395f);
    pathB.cubicTo(604.404663f, 65.4878235f, 604.373169f, 66.6211548f, 604.373169f, 67.5338135f);
    pathB.cubicTo(604.373169f, 68.0684357f, 604.414124f, 74.3353043f, 599.934631f, 80.4702148f);
    pathB.cubicTo(596.765564f, 84.8109131f, 590.664368f, 89.3942871f, 582.150208f, 89.630127f);
    pathB.cubicTo(580.028015f, 89.630127f, 580.230469f, 88.5286484f, 580.230469f, 88.1820908f);
    pathB.cubicTo(580.230469f, 87.5845184f, 580.198975f, 75.8436279f, 580.198975f, 75.2142105f);
    pathB.cubicTo(580.198975f, 74.5844116f, 580.608154f, 73.8605804f, 581.58374f, 73.8605804f);
    pathB.cubicTo(583.40979f, 73.8605804f, 588.603271f, 72.7905731f, 588.603271f, 66.9043884f);
    pathB.cubicTo(588.603271f, 61.3958588f, 588.603271f, 61.8679237f, 588.603271f, 61.0496788f);
    pathB.cubicTo(588.603271f, 60.2314377f, 588.666565f, 54.3137856f, 593.230591f, 48.3961296f);
    pathB.cubicTo(597.794617f, 42.4784775f, 604.814087f, 39.5509338f, 611.203857f, 39.5509338f);
    pathB.close();
    pathB.moveTo(635.22937f, 81.9311447f);
    pathB.cubicTo(635.057617f, 81.6475296f, 634.869141f, 81.3851471f, 634.664429f, 81.1439972f);
    pathB.lineTo(635.039001f, 81.0385895f);
    pathB.cubicTo(635.447754f, 80.9233246f, 635.729858f, 80.5509796f, 635.729858f, 80.1263123f);
    pathB.lineTo(635.729858f, 78.6149597f);
    pathB.cubicTo(635.729858f, 78.3309631f, 635.602417f, 78.0617523f, 635.382935f, 77.8816452f);
    pathB.cubicTo(635.162598f, 77.7015381f, 634.873291f, 77.6295013f, 634.595764f, 77.6852341f);
    pathB.cubicTo(633.906799f, 77.8232498f, 633.194397f, 77.9017334f, 632.478149f, 77.9191818f);
    pathB.cubicTo(631.714844f, 77.9373779f, 630.851501f, 77.9464874f, 629.911133f, 77.9464874f);
    pathB.lineTo(615.131226f, 77.9464874f);
    pathB.cubicTo(614.607605f, 77.9464874f, 614.18335f, 78.3707733f, 614.18335f, 78.8944016f);
    pathB.lineTo(614.18335f, 81.1337585f);
    pathB.cubicTo(614.18335f, 81.6573868f, 614.607605f, 82.0816803f, 615.131226f, 82.0816803f);
    pathB.lineTo(619.693787f, 82.0816803f);
    pathB.cubicTo(619.680908f, 82.1423492f, 619.669128f, 82.2026367f, 619.657776f, 82.2629166f);
    pathB.cubicTo(619.571289f, 82.728157f, 619.529602f, 83.3200302f, 619.529602f, 84.0730591f);
    pathB.cubicTo(619.529602f, 86.3196259f, 620.260254f, 88.1236954f, 621.701477f, 89.4348602f);
    pathB.cubicTo(623.116516f, 90.7225037f, 625.163269f, 91.3754272f, 627.784058f, 91.3754272f);
    pathB.cubicTo(630.525024f, 91.3754272f, 632.517944f, 90.8669662f, 633.876099f, 89.8208466f);
    pathB.cubicTo(635.291565f, 88.7314987f, 636.009705f, 87.0798492f, 636.009705f, 84.9129181f);
    pathB.cubicTo(636.010071f, 83.7905807f, 635.747314f, 82.7873077f, 635.22937f, 81.9311447f);
    pathB.close();
    pathB.moveTo(631.880554f, 85.7326736f);
    pathB.cubicTo(631.690552f, 86.0545807f, 631.436157f, 86.307869f, 631.102844f, 86.5076904f);
    pathB.cubicTo(630.736206f, 86.7279816f, 630.277039f, 86.8906479f, 629.737854f, 86.9903717f);
    pathB.cubicTo(629.146362f, 87.1003265f, 628.488892f, 87.1564484f, 627.783997f, 87.1564484f);
    pathB.cubicTo(626.159668f, 87.1564484f, 624.996399f, 86.8656235f, 624.327881f, 86.293457f);
    pathB.cubicTo(623.693604f, 85.7489777f, 623.385315f, 84.995575f, 623.385315f, 83.9896393f);
    pathB.cubicTo(623.385315f, 83.3655396f, 623.431519f, 82.8718567f, 623.522583f, 82.5215149f);
    pathB.cubicTo(623.563477f, 82.3645325f, 623.616943f, 82.2189331f, 623.684448f, 82.0824356f);
    pathB.lineTo(630.008179f, 82.0824356f);
    pathB.cubicTo(630.758911f, 82.247757f, 631.311401f, 82.5256805f, 631.650757f, 82.9101562f);
    pathB.cubicTo(631.990112f, 83.2942505f, 632.154663f, 83.8303986f, 632.154663f, 84.549675f);
    pathB.cubicTo(632.154663f, 85.02742f, 632.062927f, 85.4251709f, 631.880554f, 85.7326736f);
    pathB.close();
    pathB.moveTo(635.667664f, 69.5979919f);
    pathB.cubicTo(635.518311f, 69.0645142f, 635.325684f, 68.5818329f, 635.093994f, 68.1620941f);
    pathB.cubicTo(634.940796f, 67.8856812f, 634.770569f, 67.6316376f, 634.586304f, 67.4026184f);
    pathB.lineTo(635.054565f, 67.2619476f);
    pathB.cubicTo(635.455322f, 67.1417542f, 635.729858f, 66.7724457f, 635.729858f, 66.3538437f);
    pathB.lineTo(635.729858f, 64.7021942f);
    pathB.cubicTo(635.729858f, 64.4045486f, 635.590332f, 64.1243439f, 635.3526f, 63.9449997f);
    pathB.cubicTo(635.115234f, 63.7660294f, 634.807373f, 63.7087784f, 634.521057f, 63.7906761f);
    pathB.cubicTo(634.059998f, 63.9226265f, 633.544678f, 64.0155258f, 632.988831f, 64.0659485f);
    pathB.cubicTo(631.578735f, 64.1941071f, 629.921387f, 64.1565704f, 628.141968f, 64.0632935f);
    pathB.cubicTo(627.067383f, 64.0068054f, 625.948853f, 63.9779854f, 624.81665f, 63.9779854f);
    pathB.cubicTo(624.253601f, 63.9779854f, 623.681396f, 64.0359955f, 623.116089f, 64.1512604f);
    pathB.cubicTo(622.479126f, 64.2809448f, 621.888367f, 64.5437012f, 621.35907f, 64.9315872f);
    pathB.cubicTo(620.807007f, 65.3365402f, 620.360352f, 65.9159088f, 620.031189f, 66.6548996f);
    pathB.cubicTo(619.712708f, 67.3722839f, 619.557983f, 68.2625656f, 619.557983f, 69.3769379f);
    pathB.cubicTo(619.557983f, 70.4655304f, 619.669128f, 71.5268097f, 619.887878f, 72.5323639f);
    pathB.cubicTo(620.11499f, 73.573555f, 620.473694f, 74.5040283f, 620.954468f, 75.2983856f);
    pathB.cubicTo(621.196411f, 75.6976471f, 621.693481f, 75.861824f, 622.124939f, 75.6847534f);
    pathB.lineTo(623.832336f, 74.9851913f);
    pathB.cubicTo(624.086365f, 74.8809204f, 624.282776f, 74.6716156f, 624.370728f, 74.4111328f);
    pathB.cubicTo(624.45874f, 74.15065f, 624.429138f, 73.8651276f, 624.290405f, 73.6281509f);
    pathB.cubicTo(624.166382f, 73.416954f, 624.051147f, 73.1644287f, 623.947205f, 72.875885f);
    pathB.cubicTo(623.836853f, 72.5702744f, 623.741333f, 72.2407837f, 623.663574f, 71.8968811f);
    pathB.cubicTo(623.584717f, 71.549942f, 623.522217f, 71.2018585f, 623.477417f, 70.8621292f);
    pathB.cubicTo(623.434937f, 70.5409775f, 623.41333f, 70.2391663f, 623.41333f, 69.9646454f);
    pathB.cubicTo(623.41333f, 68.8229752f, 623.672729f, 68.4748993f, 623.75116f, 68.3960266f);
    pathB.cubicTo(623.853577f, 68.2940369f, 624.20166f, 68.0574341f, 625.236755f, 68.0574341f);
    pathB.cubicTo(625.39679f, 68.0574341f, 625.566284f, 68.0616074f, 625.744446f, 68.0695648f);
    pathB.lineTo(625.744446f, 68.7331085f);
    pathB.cubicTo(625.744446f, 69.8065338f, 625.819153f, 70.8048782f, 625.967041f, 71.70047f);
    pathB.cubicTo(626.12323f, 72.6483841f, 626.392456f, 73.4825516f, 626.767456f, 74.1794586f);
    pathB.cubicTo(627.173523f, 74.9328613f, 627.730957f, 75.5292969f, 628.424438f, 75.9528198f);
    pathB.cubicTo(629.123596f, 76.3790054f, 629.981628f, 76.5951309f, 630.975464f, 76.5951309f);
    pathB.cubicTo(631.722046f, 76.5951309f, 632.406799f, 76.4597626f, 633.009644f, 76.1924591f);
    pathB.cubicTo(633.611816f, 75.9262848f, 634.136536f, 75.5543213f, 634.567688f, 75.0875626f);
    pathB.cubicTo(634.998779f, 74.6223297f, 635.333191f, 74.0672302f, 635.561096f, 73.4370575f);
    pathB.cubicTo(635.78479f, 72.8212891f, 635.898193f, 72.1520538f, 635.898193f, 71.4479446f);
    pathB.cubicTo(635.898193f, 70.7688599f, 635.820496f, 70.1462708f, 635.667664f, 69.5979919f);
    pathB.close();
    pathB.moveTo(631.656494f, 71.9905396f);
    pathB.cubicTo(631.416077f, 72.2574692f, 631.13739f, 72.3765259f, 630.751404f, 72.3765259f);
    pathB.cubicTo(630.390015f, 72.3765259f, 630.239502f, 72.2536774f, 630.190247f, 72.2127228f);
    pathB.cubicTo(630.002197f, 72.0587845f, 629.853149f, 71.8483429f, 629.735596f, 71.5704193f);
    pathB.cubicTo(629.594177f, 71.2348557f, 629.494507f, 70.8310394f, 629.439453f, 70.3714905f);
    pathB.cubicTo(629.379211f, 69.8607559f, 629.348511f, 69.3284073f, 629.348511f, 68.7892303f);
    pathB.cubicTo(629.348511f, 68.5765228f, 629.351929f, 68.3603973f, 629.357971f, 68.1416168f);
    pathB.lineTo(630.581177f, 68.1416168f);
    pathB.cubicTo(630.702515f, 68.2026672f, 630.831787f, 68.2841797f, 630.967163f, 68.3857956f);
    pathB.cubicTo(631.149902f, 68.523056f, 631.322815f, 68.703537f, 631.480225f, 68.922699f);
    pathB.cubicTo(631.639038f, 69.1437531f, 631.77478f, 69.4186478f, 631.884399f, 69.7390442f);
    pathB.cubicTo(631.989807f, 70.0488281f, 632.04364f, 70.4169922f, 632.04364f, 70.8329391f);
    pathB.cubicTo(632.042847f, 71.3228302f, 631.916565f, 71.7012329f, 631.656494f, 71.9905396f);
    pathB.close();
    pathB.moveTo(622.689575f, 63.4953079f);
    pathB.lineTo(620.72998f, 63.4953079f);
    pathB.cubicTo(620.206421f, 63.4953079f, 619.782104f, 63.0710182f, 619.782104f, 62.54739f);
    pathB.lineTo(619.782104f, 61.3116837f);
    pathB.lineTo(617.958679f, 61.3116837f);
    pathB.cubicTo(617.536255f, 61.3116837f, 617.164307f, 61.0318604f, 617.047913f, 60.6257744f);
    pathB.lineTo(616.404114f, 58.3864136f);
    pathB.cubicTo(616.321411f, 58.1001472f, 616.378662f, 57.7922592f, 616.557678f, 57.5541458f);
    pathB.cubicTo(616.737061f, 57.3164062f, 617.017212f, 57.1764946f, 617.31488f, 57.1764946f);
    pathB.lineTo(619.782104f, 57.1764946f);
    pathB.lineTo(619.782104f, 54.3171997f);
    pathB.cubicTo(619.782104f, 53.7935715f, 620.206421f, 53.3692818f, 620.730042f, 53.3692818f);
    pathB.lineTo(622.689575f, 53.3692818f);
    pathB.cubicTo(623.213196f, 53.3692818f, 623.637512f, 53.7935715f, 623.637512f, 54.3171997f);
    pathB.lineTo(623.637512f, 57.1764946f);
    pathB.lineTo(630.443176f, 57.1764946f);
    pathB.cubicTo(631.548828f, 57.1764946f, 631.921936f, 57.0028381f, 632.009888f, 56.9493713f);
    pathB.cubicTo(632.057617f, 56.9205589f, 632.154724f, 56.8621674f, 632.154724f, 56.5288773f);
    pathB.cubicTo(632.154724f, 56.139473f, 632.116821f, 55.8179398f, 632.04248f, 55.5737572f);
    pathB.cubicTo(631.949219f, 55.268528f, 631.822205f, 54.9193192f, 631.665588f, 54.5363579f);
    pathB.cubicTo(631.563599f, 54.288002f, 631.572327f, 54.0085602f, 631.688354f, 53.7670288f);
    pathB.cubicTo(631.804749f, 53.5251198f, 632.017456f, 53.3438797f, 632.274536f, 53.2680435f);
    pathB.lineTo(633.9823f, 52.7641296f);
    pathB.cubicTo(634.430115f, 52.6325607f, 634.90332f, 52.8437576f, 635.105042f, 53.2623596f);
    pathB.cubicTo(635.375f, 53.8235245f, 635.59491f, 54.4404297f, 635.758301f, 55.0956268f);
    pathB.cubicTo(635.925537f, 55.7656174f, 636.010498f, 56.4928589f, 636.010498f, 57.2565002f);
    pathB.cubicTo(636.010498f, 58.7109833f, 635.553589f, 59.7790947f, 634.653076f, 60.4316406f);
    pathB.cubicTo(633.835938f, 61.0235176f, 632.596069f, 61.311306f, 630.863647f, 61.311306f);
    pathB.lineTo(623.637878f, 61.311306f);
    pathB.lineTo(623.637878f, 62.5470123f);
    pathB.cubicTo(623.637451f, 63.071022f, 623.213196f, 63.4953079f, 622.689575f, 63.4953079f);
    pathB.close();
    pathB.moveTo(635.667664f, 46.2246475f);
    pathB.cubicTo(635.518311f, 45.6911545f, 635.325684f, 45.2084808f, 635.093994f, 44.7887421f);
    pathB.cubicTo(634.940796f, 44.5123291f, 634.770569f, 44.2582855f, 634.586304f, 44.029274f);
    pathB.lineTo(635.054565f, 43.8886032f);
    pathB.cubicTo(635.455322f, 43.7684059f, 635.729858f, 43.3990974f, 635.729858f, 42.9804955f);
    pathB.lineTo(635.729858f, 41.328846f);
    pathB.cubicTo(635.729858f, 41.0312004f, 635.590332f, 40.7509995f, 635.3526f, 40.5716515f);
    pathB.cubicTo(635.115234f, 40.3926849f, 634.807373f, 40.3354301f, 634.521057f, 40.4173279f);
    pathB.cubicTo(634.059998f, 40.5492783f, 633.544678f, 40.6421738f, 632.988831f, 40.6926041f);
    pathB.cubicTo(631.578735f, 40.8207626f, 629.921387f, 40.7836075f, 628.141968f, 40.689949f);
    pathB.cubicTo(627.067383f, 40.6334534f, 625.948853f, 40.6046371f, 624.81665f, 40.6046371f);
    pathB.cubicTo(624.253601f, 40.6046371f, 623.681396f, 40.6626511f, 623.116089f, 40.777916f);
    pathB.cubicTo(622.479126f, 40.9075928f, 621.888367f, 41.1703568f, 621.35907f, 41.5582428f);
    pathB.cubicTo(620.807007f, 41.963192f, 620.360352f, 42.5425606f, 620.031189f, 43.2815552f);
    pathB.cubicTo(619.712708f, 43.9989395f, 619.557983f, 44.8892212f, 619.557983f, 46.0035934f);
    pathB.cubicTo(619.557983f, 47.0921783f, 619.669128f, 48.1534653f, 619.887878f, 49.1590195f);
    pathB.cubicTo(620.11499f, 50.2002106f, 620.473694f, 51.1306839f, 620.954468f, 51.9250374f);
    pathB.cubicTo(621.196411f, 52.3243027f, 621.693481f, 52.4880981f, 622.124939f, 52.311409f);
    pathB.lineTo(623.832336f, 51.6118431f);
    pathB.cubicTo(624.086365f, 51.5075722f, 624.282776f, 51.2982712f, 624.370728f, 51.0377846f);
    pathB.cubicTo(624.45874f, 50.777298f, 624.429138f, 50.4917831f, 624.290405f, 50.2548065f);
    pathB.cubicTo(624.166382f, 50.0436096f, 624.051147f, 49.7910843f, 623.947205f, 49.5025406f);
    pathB.cubicTo(623.836853f, 49.1969299f, 623.741333f, 48.8674355f, 623.663574f, 48.5235291f);
    pathB.cubicTo(623.584717f, 48.1765938f, 623.522217f, 47.8285179f, 623.477417f, 47.4887848f);
    pathB.cubicTo(623.434937f, 47.1676331f, 623.41333f, 46.8658142f, 623.41333f, 46.5912971f);
    pathB.cubicTo(623.41333f, 45.4496269f, 623.672729f, 45.1015511f, 623.75116f, 45.0226822f);
    pathB.cubicTo(623.853577f, 44.9206886f, 624.20166f, 44.6840897f, 625.236755f, 44.6840897f);
    pathB.cubicTo(625.39679f, 44.6840897f, 625.566284f, 44.6882591f, 625.744446f, 44.6962204f);
    pathB.lineTo(625.744446f, 45.3597641f);
    pathB.cubicTo(625.744446f, 46.4331856f, 625.819153f, 47.43153f, 625.967041f, 48.3271217f);
    pathB.cubicTo(626.12323f, 49.2750397f, 626.392456f, 50.1092072f, 626.767456f, 50.8061142f);
    pathB.cubicTo(627.173523f, 51.5595169f, 627.730957f, 52.1559486f, 628.424438f, 52.5794754f);
    pathB.cubicTo(629.123596f, 53.005661f, 629.981628f, 53.2217865f, 630.975464f, 53.2217865f);
    pathB.cubicTo(631.722046f, 53.2217865f, 632.406799f, 53.086422f, 633.009644f, 52.8191147f);
    pathB.cubicTo(633.611816f, 52.5529366f, 634.136536f, 52.1809769f, 634.567688f, 51.7142181f);
    pathB.cubicTo(634.998779f, 51.2489815f, 635.333191f, 50.693882f, 635.561096f, 50.0637054f);
    pathB.cubicTo(635.78479f, 49.4479408f, 635.898193f, 48.7787094f, 635.898193f, 48.0746002f);
    pathB.cubicTo(635.898193f, 47.3958893f, 635.820496f, 46.7733002f, 635.667664f, 46.2246475f);
    pathB.close();
    pathB.moveTo(631.656494f, 48.6171875f);
    pathB.cubicTo(631.416077f, 48.8841209f, 631.13739f, 49.0031815f, 630.751404f, 49.0031815f);
    pathB.cubicTo(630.390015f, 49.0031815f, 630.239502f, 48.8803291f, 630.190247f, 48.8393784f);
    pathB.cubicTo(630.002197f, 48.6854401f, 629.853149f, 48.4749985f, 629.735596f, 48.1970711f);
    pathB.cubicTo(629.594177f, 47.8615112f, 629.494507f, 47.457695f, 629.439453f, 46.9981461f);
    pathB.cubicTo(629.379211f, 46.4874115f, 629.348511f, 45.9550591f, 629.348511f, 45.4158859f);
    pathB.cubicTo(629.348511f, 45.2031708f, 629.351929f, 44.9870453f, 629.357971f, 44.7682648f);
    pathB.lineTo(630.581177f, 44.7682648f);
    pathB.cubicTo(630.702515f, 44.8293152f, 630.831787f, 44.9108353f, 630.967163f, 45.0124512f);
    pathB.cubicTo(631.149902f, 45.1497116f, 631.322815f, 45.3301926f, 631.480225f, 45.5493507f);
    pathB.cubicTo(631.639038f, 45.7704048f, 631.77478f, 46.0453033f, 631.884399f, 46.3656998f);
    pathB.cubicTo(631.989807f, 46.6754761f, 632.04364f, 47.0436478f, 632.04364f, 47.4595947f);
    pathB.cubicTo(632.042847f, 47.949852f, 631.916565f, 48.3282623f, 631.656494f, 48.6171875f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// SkOpAngle::setSector SkASSERT(fSectorStart >= 0);
static void skpwww_seopack_blogspot_com_2153(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(999.892212f, 246);
    path.lineTo(927.340759f, 245.505722f);
    path.quadTo(928.068054f, 246, 929, 246);
    path.lineTo(999.892212f, 246);
    path.close();
    path.moveTo(927.340759f, 245.505722f);
    path.lineTo(926.5f, 245.5f);
    path.lineTo(925.17157f, 246.82843f);
    path.quadTo(926.34314f, 248, 928, 248);
    path.lineTo(1000, 248);
    path.lineTo(1000, 246);
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(924, 248);
    pathB.lineTo(924, 245.472672f);
    pathB.lineTo(1143, 247);
    pathB.lineTo(1143, 248);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// joinCoincidence / findT / assert
static void skpwww_lokado_de_173(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1000, 896.991394f);
    path.quadTo(999.789917f, 896.718872f, 999.535522f, 896.464478f);
    path.quadTo(998.071045f, 895, 996, 895);
    path.lineTo(956, 895);
    path.quadTo(951.857849f, 895, 948.928955f, 897.928955f);
    path.quadTo(946, 900.857849f, 946, 905);
    path.lineTo(946, 906);
    path.quadTo(946, 910.142151f, 948.928955f, 913.071045f);
    path.quadTo(951.857849f, 916, 956, 916);
    path.lineTo(996, 916);
    path.quadTo(998.071045f, 916, 999.535522f, 914.535522f);
    path.quadTo(999.789917f, 914.281128f, 1000, 914.008606f);
    path.lineTo(1000, 896.991394f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(946, 906);
    pathB.lineTo(946, 905);
    pathB.quadTo(946, 901.272095f, 948.928955f, 898.636047f);
    pathB.quadTo(951.857849f, 896, 956, 896);
    pathB.lineTo(996, 896);
    pathB.quadTo(998.071045f, 896, 999.535522f, 897.17157f);
    pathB.quadTo(1001, 898.34314f, 1001, 900);
    pathB.lineTo(1001, 911);
    pathB.quadTo(1001, 913.071045f, 999.535522f, 914.535522f);
    pathB.quadTo(998.071045f, 916, 996, 916);
    pathB.lineTo(956, 916);
    pathB.quadTo(951.857849f, 916, 948.928955f, 913.071045f);
    pathB.quadTo(946, 910.142151f, 946, 906);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

// !simple->isClosed()
static void skpwww_wartepop_blogspot_com_br_6(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(90.9763107f, 153.309662f);
    path.quadTo(91.9526215f, 152.333344f, 93.3333359f, 152.333344f);
    path.lineTo(124.666664f, 152.333344f);
    path.quadTo(126.047379f, 152.333344f, 127.023689f, 153.309662f);
    path.quadTo(128, 154.285965f, 128, 155.666672f);
    path.lineTo(128, 163.666672f);
    path.lineTo(90, 163.666672f);
    path.lineTo(90, 155.666672f);
    path.quadTo(90, 154.285965f, 90.9763107f, 153.309662f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(90, 163.666672f);
    pathB.lineTo(90, 155.666672f);
    pathB.quadTo(90, 154.285965f, 90.9763107f, 153.309662f);
    pathB.quadTo(91.9526215f, 152.333344f, 93.3333359f, 152.333344f);
    pathB.lineTo(124.666672f, 152.333344f);
    pathB.quadTo(125.909309f, 152.333344f, 126.787994f, 153.309662f);
    pathB.quadTo(127.666672f, 154.285965f, 127.666672f, 155.666672f);
    pathB.lineTo(127.666672f, 163.666672f);
    pathB.lineTo(127.666672f, 163.666672f);
    pathB.lineTo(127.666672f, 163.666672f);
    pathB.lineTo(90, 163.666672f);
    pathB.lineTo(90, 163.666672f);
    pathB.lineTo(90, 163.666672f);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

// !simple->isClosed()
static void skpwww_odia_com_br_26(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(360.740479f, 741.040771f);
    path.quadTo(360.378967f, 741, 360, 741);
    path.quadTo(359.159821f, 741, 358.403076f, 741.200745f);
    path.quadTo(357.649658f, 741.415833f, 356.92746f, 741.846436f);
    path.quadTo(356.600769f, 742.041199f, 356.310211f, 742.262268f);
    path.quadTo(356.025513f, 742.489197f, 355.757355f, 742.757385f);
    path.quadTo(355.16394f, 743.350769f, 354.770874f, 744.027283f);
    path.quadTo(354.389618f, 744.71283f, 354.183258f, 745.528564f);
    path.quadTo(354.090027f, 745.897095f, 354.040833f, 746.259277f);
    path.quadTo(354, 746.621216f, 354, 747);
    path.quadTo(354, 747.839844f, 354.200653f, 748.596497f);
    path.quadTo(354.415771f, 749.35022f, 354.846466f, 750.072632f);
    path.quadTo(355.040741f, 750.398438f, 355.261444f, 750.688721f);
    path.quadTo(355.488861f, 750.974121f, 355.757355f, 751.242615f);
    path.quadTo(356.352142f, 751.837402f, 357.030304f, 752.230896f);
    path.quadTo(357.714539f, 752.610901f, 358.528564f, 752.816833f);
    path.quadTo(358.895294f, 752.909607f, 359.25528f, 752.95874f);
    path.quadTo(359.618896f, 753, 360, 753);
    path.quadTo(360.842285f, 753, 361.600952f, 752.798157f);
    path.quadTo(362.352386f, 752.583008f, 363.072601f, 752.153625f);
    path.quadTo(363.397339f, 751.960022f, 363.686829f, 751.740051f);
    path.quadTo(363.973297f, 751.511963f, 364.242645f, 751.242615f);
    path.quadTo(364.837799f, 750.647461f, 365.231354f, 749.968933f);
    path.quadTo(365.610992f, 749.285034f, 365.816803f, 748.471497f);
    path.quadTo(365.909668f, 748.104431f, 365.958832f, 747.743713f);
    path.quadTo(366, 747.380371f, 366, 747);
    path.quadTo(366, 746.158997f, 365.798767f, 745.401367f);
    path.quadTo(365.583618f, 744.648682f, 365.153595f, 743.927429f);
    path.quadTo(364.959442f, 743.601807f, 364.738678f, 743.311462f);
    path.quadTo(364.511108f, 743.025818f, 364.242645f, 742.757385f);
    path.quadTo(363.649017f, 742.163757f, 362.972168f, 741.770569f);
    path.quadTo(362.286835f, 741.389526f, 361.471497f, 741.183289f);
    path.quadTo(361.102509f, 741.089966f, 360.740479f, 741.040771f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(355.654724f, 739.711792f);
    pathB.lineTo(367.288269f, 742.654724f);
    pathB.lineTo(364.345337f, 754.288269f);
    pathB.lineTo(352.711792f, 751.345337f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_evolvehq_com_210(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(172, 972);
    path.quadTo(170.757355f, 972, 169.878677f, 972.878662f);
    path.quadTo(169, 973.757385f, 169, 975);
    path.lineTo(169, 1171);
    path.quadTo(169, 1172.24268f, 169.878677f, 1173.12134f);
    path.quadTo(170.757355f, 1174, 172, 1174);
    path.lineTo(308, 1174);
    path.quadTo(309.242645f, 1174, 310.121307f, 1173.12134f);
    path.quadTo(310.337311f, 1172.9054f, 310.5f, 1172.66772f);
    path.lineTo(310.5f, 973.332336f);
    path.quadTo(310.337219f, 973.094604f, 310.121307f, 972.878662f);
    path.quadTo(309.242645f, 972, 308, 972);
    path.lineTo(172, 972);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(170, 1171);
    pathB.lineTo(170, 975);
    pathB.quadTo(170, 974.17157f, 170.585785f, 973.585815f);
    pathB.quadTo(171.17157f, 973, 172, 973);
    pathB.lineTo(308, 973);
    pathB.quadTo(309.242645f, 973, 310.121307f, 973.585815f);
    pathB.quadTo(311, 974.17157f, 311, 975);
    pathB.lineTo(311, 1171);
    pathB.quadTo(311, 1172.24268f, 310.121307f, 1173.12134f);
    pathB.quadTo(309.242645f, 1174, 308, 1174);
    pathB.lineTo(172, 1174);
    pathB.quadTo(171.17157f, 1174, 170.585785f, 1173.12134f);
    pathB.quadTo(170, 1172.24268f, 170, 1171);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

// hangs
static void skpwww_catingueiraonline_com_352(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(443, 8292);
    path.lineTo(443, 8140);
    path.lineTo(444, 8140);
    path.lineTo(444.01001f, 8292);
    path.lineTo(443, 8292);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(443, 8140);
    pathB.lineTo(444.01001f, 8140);
    pathB.lineTo(444, 8292);
    pathB.lineTo(443, 8292);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// hangs
static void skpwww_galaxystwo_com_4(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(10105, 2510);
    path.lineTo(10123, 2509.98999f);
    path.lineTo(10123, 2511);
    path.lineTo(10105, 2511);
    path.lineTo(10105, 2510);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(10105, 2511);
    pathB.lineTo(10105, 2509.98999f);
    pathB.lineTo(10123, 2510);
    pathB.lineTo(10123, 2511);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// hangs in find top
#if TRY_NEW_TESTS
static void skpwww_thaienews_blogspot_com_36(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(429.994995f, 6268);
    path.lineTo(430, 2187);
    path.lineTo(430.5f, 2187);
    path.lineTo(430.5f, 6268);
    path.lineTo(429.994995f, 6268);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(430.5f, 2187);
    pathB.lineTo(429.994995f, 2187);
    pathB.lineTo(430, 6268);
    pathB.lineTo(430.5f, 6268);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}
#endif

// hangs
static void skpwww_fashionscandal_com_94(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(25.9107456f, 272.577423f);
    path.quadTo(26.1548233f, 272.333344f, 26.5000019f, 272.333344f);
    path.lineTo(131.166672f, 272.333344f);
    path.quadTo(131.511841f, 272.333344f, 131.75592f, 272.577423f);
    path.quadTo(132, 272.821503f, 132, 273.166687f);
    path.lineTo(132, 417.166656f);
    path.quadTo(132, 417.511841f, 131.75592f, 417.75592f);
    path.quadTo(131.511841f, 418, 131.166672f, 418);
    path.lineTo(26.5000019f, 418);
    path.quadTo(26.1548233f, 418, 25.9107456f, 417.75592f);
    path.quadTo(25.6666679f, 417.511841f, 25.6666679f, 417.166656f);
    path.lineTo(25.6666679f, 273.166687f);
    path.quadTo(25.6666679f, 272.821503f, 25.9107456f, 272.577423f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(25.833334f, 417.166656f);
    pathB.lineTo(25.833334f, 273.166656f);
    pathB.quadTo(25.833334f, 272.890533f, 26.0285969f, 272.695251f);
    pathB.quadTo(26.2238579f, 272.5f, 26.5f, 272.5f);
    pathB.lineTo(131.166672f, 272.5f);
    pathB.quadTo(131.442825f, 272.5f, 131.638077f, 272.695251f);
    pathB.quadTo(131.833344f, 272.890533f, 131.833344f, 273.166656f);
    pathB.lineTo(131.833344f, 417.166656f);
    pathB.quadTo(131.833344f, 417.511841f, 131.638077f, 417.75592f);
    pathB.quadTo(131.442825f, 418, 131.166672f, 418);
    pathB.lineTo(26.5f, 418);
    pathB.quadTo(26.2238579f, 418, 26.0285969f, 417.75592f);
    pathB.quadTo(25.833334f, 417.511841f, 25.833334f, 417.166656f);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

static void skpwww_kenlevine_blogspot_com_28(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(276, 9506);
    path.lineTo(276, 7531);
    path.lineTo(277, 7531);
    path.lineTo(277.01001f, 9506);
    path.lineTo(276, 9506);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(276, 7531);
    pathB.lineTo(277.01001f, 7531);
    pathB.lineTo(277, 9506);
    pathB.lineTo(276, 9506);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_defense_studies_blogspot_com_64(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(276, 9600);
    path.lineTo(276, 7703);
    path.lineTo(277, 7703);
    path.lineTo(277.01001f, 9600);
    path.lineTo(276, 9600);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(276, 7703);
    pathB.lineTo(277.01001f, 7703);
    pathB.lineTo(277, 9600);
    pathB.lineTo(276, 9600);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// checkSmall / addTPair / addT assert
#if TRY_NEW_TESTS
static void skpwww_uniquefx_net_442(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(960, 306);
    path.lineTo(960, 305);
    path.lineTo(1000, 305);
    path.lineTo(1000, 306.708527f);
    path.lineTo(960, 306);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(960, 305);
    pathB.lineTo(958.997253f, 306.002747f);
    pathB.lineTo(1017, 307);
    pathB.lineTo(1019, 305);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}
#endif

// rightAngleWinding
#if TRY_NEW_TESTS
static void skpwww_kitcheninspirations_wordpress_com_32(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(47.1666679f, 19651.334f);
    path.lineTo(65.8333359f, 19651.332f);
    path.lineTo(65.8333359f, 19651.5f);
    path.lineTo(47.1666679f, 19651.5f);
    path.lineTo(47.1666679f, 19651.334f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(47.1666679f, 19651.5f);
    pathB.lineTo(47.1666679f, 19651.332f);
    pathB.lineTo(65.8333359f, 19651.334f);
    pathB.lineTo(65.8333359f, 19651.5f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}
#endif

static void (*firstTest)(skiatest::Reporter* , const char* filename) = 0;

static struct TestDesc tests[] = {
#if TRY_NEW_TESTS
    TEST(skpwww_kitcheninspirations_wordpress_com_32),  // rightanglewinding
#endif
#if TRY_NEW_TESTS
    TEST(skpwww_uniquefx_net_442),  // checkSmall / addTPair / addT assert
#endif
    TEST(skpwww_defense_studies_blogspot_com_64),
    TEST(skpwww_kenlevine_blogspot_com_28),
    TEST(skpwww_fashionscandal_com_94),
#if TRY_NEW_TESTS
    TEST(skpwww_thaienews_blogspot_com_36),  // completes but fails to produce correct output
#endif
    TEST(skpwww_galaxystwo_com_4),
    TEST(skpwww_catingueiraonline_com_352),
    TEST(skpwww_evolvehq_com_210),
    TEST(skpwww_odia_com_br_26),  // asserts expecting isClosed
    TEST(skpwww_wartepop_blogspot_com_br_6),  // asserts expecting isClosed
    TEST(skpwww_lokado_de_173),
    TEST(skpwww_seopack_blogspot_com_2153),
    TEST(skpwww_partsdata_de_53),
    TEST(skpwww_simplysaru_com_40),
    TEST(skpwww_jessicaslens_wordpress_com_222),
#if TRY_NEW_TESTS
    TEST(skpwww_artblart_com_8),  // rightanglewinding
#endif
    TEST(skpwww_kpopexplorer_net_22),
#if TRY_NEW_TESTS
    TEST(skpwww_docgelo_com_66),  // rightanglewinding
#endif
#if TRY_NEW_TESTS  // nearly coincident curves -- maybe angle is written before coincidence detected?
    TEST(skpwww_tunero_de_24),  // has both winding and oppWinding set to zero in markWinding
#endif
    TEST(skpwww_karnivool_com_au_11),
    TEST(skpwww_pindosiya_com_99),
    TEST(skpwww_contextualnewsfeeds_com_346),  // asserts expecting isClosed
    TEST(skpwww_cooksnaps_com_32),  // asserts expecting isClosed
#if TRY_NEW_TESTS_IS_CLOSED
    TEST(skpwww_helha_be_109),  // asserts expecting isClosed
    TEST(skpwww_phototransferapp_com_24),  // asserts expecting isClosed
#endif
#if TRY_NEW_TESTS
    TEST(skpwww_gruposejaumdivulgador_com_br_4),  // span already marked done is futher marked coin
#endif
    TEST(skpwww_hubbyscook_com_22),
#if TRY_NEW_TESTS
    TEST(skpwww_argus_presse_fr_41),  // rightanglewinding
#endif
    TEST(skpwww_maturesupertube_com_21),
    TEST(skpwww_getgold_jp_731),
    TEST(skpwww_trashness_com_36),
    TEST(skpwww_exystence_net_61),
    TEST(skpwww_320kbps_net_2231),
    TEST(skpwww_heartiste_wordpress_com_86),
    TEST(skpwww_hairjobsearch_com_31),
    TEST(skpwww_alucinados_net_101),
    TEST(skpnamecheap_com_405),
    TEST(skpelpais_com_18),
    TEST(skpwww_cityads_ru_249),
    TEST(skpwww_alrakoba_net_62),
    TEST(skpwww_dealnews_com_315),
    TEST(skpwww_inmotionhosting_com_9),
    TEST(skpskpicture14),
    TEST(skpskpicture15),
    TEST(skpwww_meb_gov_tr_6),
    TEST(skpwww_sciality_com_101),
    TEST(skpwww_booking_com_68),  // similar to lavoixdunord
    TEST(skpwww_despegar_com_mx_272),  // similar to lavoixdunord
    TEST(skpwww_lavoixdunord_fr_11),  // not quite coincident, sorting line/cubic fails
    TEST(skppptv_com_62),  // cubic have nearly identical tangents, sort incorrectly
    TEST(skppchappy_com_au102),
    TEST(skpsciality_com161),
    TEST(skpi_gino_com16),
    TEST(skpnaoxrane_ru23),  // see test for failure evaluation
    TEST(skptcmevents_org23),  // see test for (partial) failure evaluation
    TEST(skpredbullskatearcade_es16),  // cubic have nearly identical tangents, sort incorrectly
    TEST(skpfinanzasdigital_com9),  // cubic/quad tangents too close to sort
    TEST(skpgithub_io_26),
    TEST(skpgithub_io_25),
    TEST(skpwww_meb_gov_tr_5),
    TEST(skpwww_sciality_com_100),
    TEST(skpwww_joomla_org_23),
    TEST(skpwww_macrumors_com_131),
    TEST(skpwww_briian_com_34),
    TEST(skpwww_leadpages_net_84),
    TEST(skpwww_fj_p_com_22),
    TEST(skppartainasdemo250_org56),
    TEST(skpsd_graphic_net104),
    TEST(skpbreakmystyle_com10),
    TEST(skpnational_com_au81),
    TEST(skprentacheat_com30),
    TEST(skptracksflow_com9),
    TEST(skpautobutler_dk29),
    TEST(skponlinecollege_org144),
    TEST(skphostloco_com11),
    TEST(skpsergeychunkevich_com8),
    TEST(skpmlk_com326),
    TEST(skpcyclist_friends_gr52),
    TEST(skpfrauen_magazin_com83),
    TEST(skpthesuburbanite_com213),
    TEST(skpsudoestenegocios_com186),
    TEST(skpmtrk_uz27),
    TEST(skpilkoora_com37),
    TEST(skpmm4everfriends_com43),
    TEST(skpflite_com41),
    TEST(skpcheeseandburger_com225),
    TEST(skpeverytechpro_blogspot_com100),
};

static const size_t testCount = SK_ARRAY_COUNT(tests);

static bool runReverse = false;
static void (*stopTest)(skiatest::Reporter* , const char* filename) = 0;

DEF_TEST(PathOpsSkp, reporter) {
#if DEBUG_SHOW_TEST_NAME
    strncpy(DEBUG_FILENAME_STRING, "", DEBUG_FILENAME_STRING_LENGTH);
#endif
    RunTestSet(reporter, tests, testCount, firstTest, stopTest, runReverse);
}
