diff --git a/tests/language/unsorted/ackermann_test.dart b/tests/language/unsorted/ackermann_test.dart new file mode 100644 index 000000000000..c35d2d3cc955 --- /dev/null +++ b/tests/language/unsorted/ackermann_test.dart @@ -0,0 +1,22 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart version of two-argument Ackermann-Peter function. + +import "package:expect/expect.dart"; + +class AckermannTest { + static int ack(int m, int n) { + return m == 0 + ? n + 1 + : ((n == 0) ? ack(m - 1, 1) : ack(m - 1, ack(m, n - 1))); + } + + static testMain() { + Expect.equals(253, ack(3, 5)); + } +} + +main() { + AckermannTest.testMain(); +} diff --git a/tests/language/unsorted/additional_interface_adds_optional_args_concrete_test.dart b/tests/language/unsorted/additional_interface_adds_optional_args_concrete_test.dart new file mode 100644 index 000000000000..2fe4137e202a --- /dev/null +++ b/tests/language/unsorted/additional_interface_adds_optional_args_concrete_test.dart @@ -0,0 +1,24 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +class A { + void foo() {} +} + +abstract class I { + void foo([x]); +} + +class /*@compile-error=unspecified*/ B extends A implements I { + // This class declaration violates soundness, since it allows `new + // B().foo(42)`, which would lead to invalid arguments being passed to A.foo. +} + +void f(B b) { + b.foo(); +} + +main() { + f(new B()); +} diff --git a/tests/language/unsorted/additional_interface_adds_optional_args_test.dart b/tests/language/unsorted/additional_interface_adds_optional_args_test.dart new file mode 100644 index 000000000000..5c9953e597e2 --- /dev/null +++ b/tests/language/unsorted/additional_interface_adds_optional_args_test.dart @@ -0,0 +1,36 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// This test exercises a corner case of override checking that is safe from a +// soundness perspective, but which we haven't decided whether or not to allow +// from a usability perspective. + +class A { + void foo() {} +} + +abstract class I { + void foo([x]); +} + +abstract class B extends A implements I { + // If this class were concrete, there would be a problem, since `new + // B().foo(42)` would be statically allowed, but would lead to invalid + // arguments being passed to A.foo. But since the class is abstract, there is + // no problem. +} + +class C extends B { + void foo([x]) { + super.foo(); + } +} + +void f(B b) { + b.foo(42); +} + +main() { + f(new C()); +} diff --git a/tests/language/unsorted/allocate_large_object_test.dart b/tests/language/unsorted/allocate_large_object_test.dart new file mode 100644 index 000000000000..a94d26d5d520 --- /dev/null +++ b/tests/language/unsorted/allocate_large_object_test.dart @@ -0,0 +1,46 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +class A { + int a; + double? d1; + double? d2; + double? d3; + double? d4; + double? d5; + double? d6; + double? d7; + double? d8; + double? d9; + double? d10; + double? d11; + double? d12; + double? d13; + double? d14; + static var s; + + static foo() { + return s; + } + + A(this.a) {} + + value() { + return a + foo(); + } +} + +class AllocateLargeObject { + static testMain() { + var a = new A(1); + A.s = 4; + Expect.equals(5, a.value()); + } +} + +main() { + AllocateLargeObject.testMain(); +} diff --git a/tests/language/unsorted/allocate_test.dart b/tests/language/unsorted/allocate_test.dart new file mode 100644 index 000000000000..2ab25c5e2756 --- /dev/null +++ b/tests/language/unsorted/allocate_test.dart @@ -0,0 +1,24 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +class MyAllocate { + const MyAllocate([int value = 0]) : value_ = value; + int getValue() { + return value_; + } + + final int value_; +} + +class AllocateTest { + static testMain() { + Expect.equals(900, (new MyAllocate(900)).getValue()); + } +} + +main() { + AllocateTest.testMain(); +} diff --git a/tests/language/unsorted/arg_param_trailing_comma_test.dart b/tests/language/unsorted/arg_param_trailing_comma_test.dart new file mode 100644 index 000000000000..ab9c42595b9d --- /dev/null +++ b/tests/language/unsorted/arg_param_trailing_comma_test.dart @@ -0,0 +1,562 @@ +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test program for testing params. + +// Convenience values. +var c = new C(); +var x = 42; +var y = 42; +var z = 42; + +// Trailing comma in parameter lists. + +// Typedefs. +typedef fx(x, ); // //# none: ok +typedef fy([y,]); // //# none: continued +typedef fxy(x, [y, ]); // //# none: continued +typedef fz({z,}); // //# none: continued +typedef fxz(x, {z, }); // //# none: continued + +// As arguments type. +argfx(void f(x, )) {} // //# none: continued +argfy(void f([y, ])) {} // //# none: continued +argfxy(void f(x, [y, ])) {} // //# none: continued +argfz(void f({z, })) {} // //# none: continued +argfxz(void f(x, {z, })) {} // //# none: continued + +// Top level functions +void topx(x,) {} // //# none: continued +void topy([y, ]) {} // //# none: continued +void topxy(x, [y, ]) {} // //# none: continued +void topz({z, }) {} // //# none: continued +void topxz(x, {z, }) {} // //# none: continued + +void set topsetx(x, ) {} // //# none: continued + +// After specific parameter formats. +void afterDefaultValueY([int y = 42, ]) {} // //# none: continued +void afterDefaultValueZ({int z : 42, }) {} // //# none: continued +void afterFunsigX(void f(),) {} // //# none: continued +void afterFunsigY([void f()?,]) {} // //# none: continued +void afterFunsigZ({void f()?,}) {} // //# none: continued +void afterFunsigDefaultValueY([void f() = topy,]) {} // //# none: continued +void afterFunsigDefaultValueZ({void f() : topz,}) {} // //# none: continued + +class C { + C(); + + // Constructors. + C.x(x, ); // //# none: continued + C.y([y, ]); // //# none: continued + C.xy(x, [y, ]); // //# none: continued + C.z({z, }); // //# none: continued + C.xz(x, {z, }); // //# none: continued + + // Static members + static void staticx(x,) {} // //# none: continued + static void staticy([y, ]) {} // //# none: continued + static void staticxy(x, [y, ]) {} // //# none: continued + static void staticz({z, }) {} // //# none: continued + static void staticxz(x, {z, }) {} // //# none: continued + + static void set staticsetx(x, ) {} // //# none: continued + + // Instance members + void instancex(x,) {} // //# none: continued + void instancey([y, ]) {} // //# none: continued + void instancexy(x, [y, ]) {} // //# none: continued + void instancez({z, }) {} // //# none: continued + void instancexz(x, {z, }) {} // //# none: continued + + void set instancesetx(x, ) {} // //# none: continued + + operator +(x, ) => this; // //# none: continued + operator []=(x, y, ) {} // //# none: continued +} + +main() { + testCalls(); // //# none: continued + // Make sure the cases are checked. + testBadCalls(); +} + +void testCalls() { + // Check that all functions can be called normally + topx(x); // //# none: continued + topy(y); // //# none: continued + topxy(x, y); // //# none: continued + topz(); // //# none: continued + topz(z: z); // //# none: continued + topxz(x); // //# none: continued + topxz(x, z: z); // //# none: continued + topsetx = x; // //# none: continued + afterDefaultValueY(); // //# none: continued + afterDefaultValueY(y); // //# none: continued + afterDefaultValueZ(); // //# none: continued + afterDefaultValueZ(z: z); // //# none: continued + new C.x(x); // //# none: continued + new C.xy(x); // //# none: continued + new C.xy(x, y); // //# none: continued + new C.y(y); // //# none: continued + new C.xz(x); // //# none: continued + new C.xz(x, z: z); // //# none: continued + new C.z(z: z); // //# none: continued + C.staticx(x); // //# none: continued + C.staticy(y); // //# none: continued + C.staticxy(x); // //# none: continued + C.staticxy(x, y); // //# none: continued + C.staticz(); // //# none: continued + C.staticz(z: z); // //# none: continued + C.staticxz(x); // //# none: continued + C.staticxz(x, z: z); // //# none: continued + C.staticsetx = x; // //# none: continued + c.instancex(x); // //# none: continued + c.instancey(); // //# none: continued + c.instancey(y); // //# none: continued + c.instancexy(x); // //# none: continued + c.instancexy(x, y); // //# none: continued + c.instancez(); // //# none: continued + c.instancez(z: z); // //# none: continued + c.instancexz(x); // //# none: continued + c.instancexz(x, z: z); // //# none: continued + c.instancesetx = x; // //# none: continued + c + x; // //# none: continued + c[x] = y; // //# none: continued + + // Call with extra comma (not possible for setters and operators). + topx(x, ); // //# none: continued + topy(y, ); // //# none: continued + topxy(x, y, ); // //# none: continued + topxy(x, ); // //# none: continued + topz(z: z, ); // //# none: continued + topxz(x, ); // //# none: continued + topxz(x, z: z, ); // //# none: continued + new C.x(x, ); // //# none: continued + new C.xy(x, y, ); // //# none: continued + new C.xy(x, ); // //# none: continued + new C.y(y, ); // //# none: continued + new C.xz(x, ); // //# none: continued + new C.xz(x, z: z, ); // //# none: continued + new C.z(z: z, ); // //# none: continued + C.staticx(x, ); // //# none: continued + C.staticy(y, ); // //# none: continued + C.staticxy(x, y, ); // //# none: continued + C.staticxy(x, ); // //# none: continued + C.staticz(z: z, ); // //# none: continued + C.staticxz(x, ); // //# none: continued + C.staticxz(x, z: z, ); // //# none: continued + c.instancex(x, ); // //# none: continued + c.instancey(y, ); // //# none: continued + c.instancexy(x, y, ); // //# none: continued + c.instancexy(x, ); // //# none: continued + c.instancez(z: z, ); // //# none: continued + c.instancexz(x, ); // //# none: continued + c.instancexz(x, z: z, ); // //# none: continued + + // Typedefs work as expected. + if (topx is! fx) throw "Bad type: $fx"; // //# none: continued + if (topy is! fy) throw "Bad type: $fy"; // //# none: continued + if (topxy is! fxy) throw "Bad type: $fxy"; // //# none: continued + if (topz is! fz) throw "Bad type: $fz"; // //# none: continued + if (topxz is! fxz) throw "Bad type: $fxz"; // //# none: continued + + // Parameter types work (checked mode only test). + argfx(topx); // //# none: continued + argfy(topy); // //# none: continued + argfxy(topxy); // //# none: continued + argfz(topz); // //# none: continued + argfxz(topxz); // //# none: continued +} + +// Invalid syntax. This was invalid syntax before the addition of trailing +// commas too, and should stay that way. +void topBadEmpty(,) {} // //# 1: syntax error +void topBadStart(, a) {} // //# 2: syntax error +void topBadEnd(a,,) {} // //# 3: syntax error +void topBadMiddle(a,, b) {} // //# 4: syntax error +void topBadPosEmpty([]) {} // //# 5: syntax error +void topBadPosEmpty(,[]) {} // //# 6: syntax error +void topBadPosEmpty([,]) {} // //# 7: syntax error +void topBadPosEmpty([],) {} // //# 8: syntax error +void topBadPosStart(,[a]) {} // //# 9: syntax error +void topBadPosStart([, a]) {} // //# 10: syntax error +void topBadPosEnd([a,,]) {} // //# 11: syntax error +void topBadPosStart([a],) {} // //# 12: syntax error +void topBadPosMiddle([a,, b]) {} // //# 13: syntax error +void topBadNamEmpty({}) {} // //# 14: syntax error +void topBadNamEmpty(,{}) {} // //# 15: syntax error +void topBadNamEmpty({,}) {} // //# 16: syntax error +void topBadNamEmpty({},) {} // //# 17: syntax error +void topBadNamStart(,{a}) {} // //# 18: syntax error +void topBadNamStart({, a}) {} // //# 19: syntax error +void topBadNamEnd({a,,}) {} // //# 20: syntax error +void topBadNamStart({a},) {} // //# 21: syntax error +void topBadNamMiddle({a,, b}) {} // //# 22: syntax error +void set topSetBadEmpty(,) {} // //# 23: syntax error +void set topSetBadStart(, a) {} // //# 24: syntax error +void set topSetBadEnd(a,,) {} // //# 25: syntax error +void set topSetBadMiddle(a,, b) {} // //# 26: syntax error +class Bad { + Bad() {} + Bad.empty(,) {} // //# 27: syntax error + Bad.start(, a) {} // //# 28: syntax error + Bad.end(a,,) {} // //# 29: syntax error + Bad.middle(a,, b) {} // //# 30: syntax error + Bad.posEmpty([]) {} // //# 31: syntax error + Bad.posEmpty(,[]) {} // //# 32: syntax error + Bad.posEmpty([,]) {} // //# 33: syntax error + Bad.posEmpty([],) {} // //# 34: syntax error + Bad.posStart(,[a]) {} // //# 35: syntax error + Bad.posStart([, a]) {} // //# 36: syntax error + Bad.posEnd([a,,]) {} // //# 37: syntax error + Bad.posStart([a],) {} // //# 38: syntax error + Bad.PosMiddle([a,, b]) {} // //# 39: syntax error + Bad.namEmpty({}) {} // //# 40: syntax error + Bad.namEmpty(,{}) {} // //# 41: syntax error + Bad.namEmpty({,}) {} // //# 42: syntax error + Bad.namEmpty({},) {} // //# 43: syntax error + Bad.namStart(,{a}) {} // //# 44: syntax error + Bad.namStart({, a}) {} // //# 45: syntax error + Bad.namEnd({a,,}) {} // //# 46: syntax error + Bad.namStart({a},) {} // //# 47: syntax error + Bad.namMiddle({a,, b}) {} // //# 48: syntax error + static void staticBadEmpty(,) {} // //# 49: syntax error + static void staticBadStart(, a) {} // //# 50: syntax error + static void staticBadEnd(a,,) {} // //# 51: syntax error + static void staticBadMiddle(a,, b) {} // //# 52: syntax error + static void staticBadPosEmpty([]) {} // //# 53: syntax error + static void staticBadPosEmpty(,[]) {} // //# 54: syntax error + static void staticBadPosEmpty([,]) {} // //# 55: syntax error + static void staticBadPosEmpty([],) {} // //# 56: syntax error + static void staticBadPosStart(,[a]) {} // //# 57: syntax error + static void staticBadPosStart([, a]) {} // //# 58: syntax error + static void staticBadPosEnd([a,,]) {} // //# 59: syntax error + static void staticBadPosStart([a],) {} // //# 60: syntax error + static void staticBadPosMiddle([a,, b]) {} // //# 61: syntax error + static void staticBadNamEmpty({}) {} // //# 62: syntax error + static void staticBadNamEmpty(,{}) {} // //# 63: syntax error + static void staticBadNamEmpty({,}) {} // //# 64: syntax error + static void staticBadNamEmpty({},) {} // //# 65: syntax error + static void staticBadNamStart(,{a}) {} // //# 66: syntax error + static void staticBadNamStart({, a}) {} // //# 67: syntax error + static void staticBadNamEnd({a,,}) {} // //# 68: syntax error + static void staticBadNamStart({a},) {} // //# 69: syntax error + static void staticBadNamMiddle({a,, b}) {} // //# 70: syntax error + static void set staticSetBadEmpty(,) {} // //# 71: syntax error + static void set staticSetBadStart(, a) {} // //# 72: syntax error + static void set staticSetBadEnd(a,,) {} // //# 73: syntax error + static void set staticSetBadMiddle(a,, b) {} // //# 74: syntax error + void instanceBadEmpty(,) {} // //# 75: syntax error + void instanceBadStart(, a) {} // //# 76: syntax error + void instanceBadEnd(a,,) {} // //# 77: syntax error + void instanceBadMiddle(a,, b) {} // //# 78: syntax error + void instanceBadPosEmpty([]) {} // //# 79: syntax error + void instanceBadPosEmpty(,[]) {} // //# 80: syntax error + void instanceBadPosEmpty([,]) {} // //# 81: syntax error + void instanceBadPosEmpty([],) {} // //# 82: syntax error + void instanceBadPosStart(,[a]) {} // //# 83: syntax error + void instanceBadPosStart([, a]) {} // //# 84: syntax error + void instanceBadPosEnd([a,,]) {} // //# 85: syntax error + void instanceBadPosStart([a],) {} // //# 86: syntax error + void instanceBadPosMiddle([a,, b]) {} // //# 87: syntax error + void instanceBadNamEmpty({}) {} // //# 88: syntax error + void instanceBadNamEmpty(,{}) {} // //# 89: syntax error + void instanceBadNamEmpty({,}) {} // //# 90: syntax error + void instanceBadNamEmpty({},) {} // //# 91: syntax error + void instanceBadNamStart(,{a}) {} // //# 92: syntax error + void instanceBadNamStart({, a}) {} // //# 93: syntax error + void instanceBadNamEnd({a,,}) {} // //# 94: syntax error + void instanceBadNamStart({a},) {} // //# 95: syntax error + void instanceBadNamMiddle({a,, b}) {} // //# 96: syntax error + void set instanceSetBadEmpty(,) {} // //# 97: syntax error + void set instanceSetBadStart(, a) {} // //# 98: syntax error + void set instanceSetBadEnd(a,,) {} // //# 99: syntax error + void set instanceSetBadMiddle(a,, b) {} // //# 100: syntax error + void operator *(,); // //# 101: syntax error + void operator *(, a); // //# 102: syntax error + void operator *(a,,); // //# 103: syntax error + void operator []=(, a); // //# 104: syntax error + void operator []=(a,,); // //# 105: syntax error + void operator []=(a,, b); // //# 106: syntax error + void operator []=(a,); // //# 107: compile-time error + + method() { + // Local methods. + void localBadEmpty(,) {} // //# 108: syntax error + void localBadStart(, a) {} // //# 109: syntax error + void localBadEnd(a,,) {} // //# 110: syntax error + void localBadMiddle(a,, b) {} // //# 111: syntax error + void localBadPosEmpty([]) {} // //# 112: syntax error + void localBadPosEmpty(,[]) {} // //# 113: syntax error + void localBadPosEmpty([,]) {} // //# 114: syntax error + void localBadPosEmpty([],) {} // //# 115: syntax error + void localBadPosStart(,[a]) {} // //# 116: syntax error + void localBadPosStart([, a]) {} // //# 117: syntax error + void localBadPosEnd([a,,]) {} // //# 118: syntax error + void localBadPosStart([a],) {} // //# 119: syntax error + void localBadPosMiddle([a,, b]) {} // //# 120: syntax error + void localBadNamEmpty({}) {} // //# 121: syntax error + void localBadNamEmpty(,{}) {} // //# 122: syntax error + void localBadNamEmpty({,}) {} // //# 123: syntax error + void localBadNamEmpty({},) {} // //# 124: syntax error + void localBadNamStart(,{a}) {} // //# 125: syntax error + void localBadNamStart({, a}) {} // //# 126: syntax error + void localBadNamEnd({a,,}) {} // //# 127: syntax error + void localBadNamStart({a},) {} // //# 128: syntax error + void localBadNamMiddle({a,, b}) {} // //# 129: syntax error + + // invalid calls. + + topx(,); // //# 130: syntax error + topy(,); // //# 131: syntax error + topz(,); // //# 132: syntax error + topx(, x); // //# 133: syntax error + topz(, z:z); // //# 134: syntax error + topxy(x,, y); // //# 135: syntax error + topxz(x,, z:z); // //# 136: syntax error + topx(x,,); // //# 137: syntax error + topz(z:z,,); // //# 138: syntax error + + new C.x(,); // //# 139: syntax error + new C.y(,); // //# 140: syntax error + new C.z(,); // //# 141: syntax error + new C.x(, x); // //# 142: syntax error + new C.z(, z:z); // //# 143: syntax error + new C.xy(x,, y); // //# 144: syntax error + new C.xz(x,, z:z); // //# 145: syntax error + new C.x(x,,); // //# 146: syntax error + new C.z(z:z,,); // //# 147: syntax error + + C.staticx(,); // //# 148: syntax error + C.staticy(,); // //# 149: syntax error + C.staticz(,); // //# 150: syntax error + C.staticx(, x); // //# 151: syntax error + C.staticz(, z:z); // //# 152: syntax error + C.staticxy(x,, y); // //# 153: syntax error + C.staticxz(x,, z:z); // //# 154: syntax error + C.staticx(x,,); // //# 155: syntax error + C.staticz(z:z,,); // //# 156: syntax error + + c.instancex(,); // //# 157: syntax error + c.instancey(,); // //# 158: syntax error + c.instancez(,); // //# 159: syntax error + c.instancex(, x); // //# 160: syntax error + c.instancez(, z:z); // //# 161: syntax error + c.instancexy(x,, y); // //# 162: syntax error + c.instancexz(x,, z:z); // //# 163: syntax error + c.instancex(x,,); // //# 164: syntax error + c.instancez(z:z,,); // //# 165: syntax error + + c[x,] = y; // //# 166: syntax error + } + + // As parameters: + void f(void topBadEmpty(,)) {} // //# 167: syntax error + void f(void topBadStart(, a)) {} // //# 168: syntax error + void f(void topBadEnd(a,,)) {} // //# 169: syntax error + void f(void topBadMiddle(a,, b)) {} // //# 170: syntax error + void f(void topBadPosEmpty([])) {} // //# 171: syntax error + void f(void topBadPosEmpty(,[])) {} // //# 172: syntax error + void f(void topBadPosEmpty([,])) {} // //# 173: syntax error + void f(void topBadPosEmpty([],)) {} // //# 174: syntax error + void f(void topBadPosStart(,[a])) {} // //# 175: syntax error + void f(void topBadPosStart([, a])) {} // //# 176: syntax error + void f(void topBadPosEnd([a,,])) {} // //# 177: syntax error + void f(void topBadPosStart([a],)) {} // //# 178: syntax error + void f(void topBadPosMiddle([a,, b])) {} // //# 179: syntax error + void f(void topBadNamEmpty({})) {} // //# 180: syntax error + void f(void topBadNamEmpty(,{})) {} // //# 181: syntax error + void f(void topBadNamEmpty({,})) {} // //# 182: syntax error + void f(void topBadNamEmpty({},)) {} // //# 183: syntax error + void f(void topBadNamStart(,{a})) {} // //# 184: syntax error + void f(void topBadNamStart({, a})) {} // //# 185: syntax error + void f(void topBadNamEnd({a,,})) {} // //# 186: syntax error + void f(void topBadNamStart({a},)) {} // //# 187: syntax error + void f(void topBadNamMiddle({a,, b})) {} // //# 188: syntax error +} + +// As typedefs +typedef void BadEmpty(,); // //# 189: syntax error +typedef void BadStart(, a); // //# 190: syntax error +typedef void BadEnd(a,,); // //# 191: syntax error +typedef void BadMiddle(a,, b); // //# 192: syntax error +typedef void BadPosEmpty([]); // //# 193: syntax error +typedef void BadPosEmpty(,[]); // //# 194: syntax error +typedef void BadPosEmpty([,]); // //# 195: syntax error +typedef void BadPosEmpty([],); // //# 196: syntax error +typedef void BadPosStart(,[a]); // //# 197: syntax error +typedef void BadPosStart([, a]); // //# 198: syntax error +typedef void BadPosEnd([a,,]); // //# 199: syntax error +typedef void BadPosStart([a],); // //# 200: syntax error +typedef void BadPosMiddle([a,, b]); // //# 201: syntax error +typedef void BadNamEmpty({}); // //# 202: syntax error +typedef void BadNamEmpty(,{}); // //# 203: syntax error +typedef void BadNamEmpty({,}); // //# 204: syntax error +typedef void BadNamEmpty({},); // //# 205: syntax error +typedef void BadNamStart(,{a}); // //# 206: syntax error +typedef void BadNamStart({, a}); // //# 207: syntax error +typedef void BadNamEnd({a,,}); // //# 208: syntax error +typedef void BadNamStart({a},); // //# 209: syntax error +typedef void BadNamMiddle({a,, b}); // //# 210: syntax error + +void testBadCalls() { + topBadEmpty(); // //# 1: continued + topBadStart(); // //# 2: continued + topBadEnd(); // //# 3: continued + topBadMiddle(); // //# 4: continued + topBadPosEmpty(); // //# 5: continued + topBadPosEmpty(); // //# 6: continued + topBadPosEmpty(); // //# 7: continued + topBadPosEmpty(); // //# 8: continued + topBadPosStart(); // //# 9: continued + topBadPosStart(); // //# 10: continued + topBadPosEnd(); // //# 11: continued + topBadPosStart(); // //# 12: continued + topBadPosMiddle(); // //# 13: continued + topBadNamEmpty(); // //# 14: continued + topBadNamEmpty(); // //# 15: continued + topBadNamEmpty(); // //# 16: continued + topBadNamEmpty(); // //# 17: continued + topBadNamStart(); // //# 18: continued + topBadNamStart(); // //# 19: continued + topBadNamEnd(); // //# 20: continued + topBadNamStart(); // //# 21: continued + topBadNamMiddle(); // //# 22: continued + topSetBadEmpty = 1; // //# 23: continued + topSetBadStart = 1; // //# 24: continued + topSetBadEnd = 1; // //# 25: continued + topSetBadMiddle = 1; // //# 26: continued + new Bad.empty(); // //# 27: continued + new Bad.start(); // //# 28: continued + new Bad.end(); // //# 29: continued + new Bad.middle(); // //# 30: continued + new Bad.posEmpty(); // //# 31: continued + new Bad.posEmpty(); // //# 32: continued + new Bad.posEmpty(); // //# 33: continued + new Bad.posEmpty(); // //# 34: continued + new Bad.posStart(); // //# 35: continued + new Bad.posStart(); // //# 36: continued + new Bad.posEnd(); // //# 37: continued + new Bad.posStart(); // //# 38: continued + new Bad.PosMiddle(); // //# 39: continued + new Bad.namEmpty(); // //# 40: continued + new Bad.namEmpty(); // //# 41: continued + new Bad.namEmpty(); // //# 42: continued + new Bad.namEmpty(); // //# 43: continued + new Bad.namStart(); // //# 44: continued + new Bad.namStart(); // //# 45: continued + new Bad.namEnd(); // //# 46: continued + new Bad.namStart(); // //# 47: continued + new Bad.namMiddle(); // //# 48: continued + Bad.staticBadEmpty(); // //# 49: continued + Bad.staticBadStart(); // //# 50: continued + Bad.staticBadEnd(); // //# 51: continued + Bad.staticBadMiddle(); // //# 52: continued + Bad.staticBadPosEmpty(); // //# 53: continued + Bad.staticBadPosEmpty(); // //# 54: continued + Bad.staticBadPosEmpty(); // //# 55: continued + Bad.staticBadPosEmpty(); // //# 56: continued + Bad.staticBadPosStart(); // //# 57: continued + Bad.staticBadPosStart(); // //# 58: continued + Bad.staticBadPosEnd(); // //# 59: continued + Bad.staticBadPosStart(); // //# 60: continued + Bad.staticBadPosMiddle(); // //# 61: continued + Bad.staticBadNamEmpty(); // //# 62: continued + Bad.staticBadNamEmpty(); // //# 63: continued + Bad.staticBadNamEmpty(); // //# 64: continued + Bad.staticBadNamEmpty(); // //# 65: continued + Bad.staticBadNamStart(); // //# 66: continued + Bad.staticBadNamStart(); // //# 67: continued + Bad.staticBadNamEnd(); // //# 68: continued + Bad.staticBadNamStart(); // //# 69: continued + Bad.staticBadNamMiddle(); // //# 70: continued + Bad.staticSetBadEmpty = 1; // //# 71: continued + Bad.staticSetBadStart = 1; // //# 72: continued + Bad.staticSetBadEnd = 1; // //# 73: continued + Bad.staticSetBadMiddle = 1; // //# 74: continued + + var bad = new Bad(); + bad.instanceBadEmpty(); // //# 75: continued + bad.instanceBadStart(); // //# 76: continued + bad.instanceBadEnd(); // //# 77: continued + bad.instanceBadMiddle(); // //# 78: continued + bad.instanceBadPosEmpty(); // //# 79: continued + bad.instanceBadPosEmpty(); // //# 80: continued + bad.instanceBadPosEmpty(); // //# 81: continued + bad.instanceBadPosEmpty(); // //# 82: continued + bad.instanceBadPosStart(); // //# 83: continued + bad.instanceBadPosStart(); // //# 84: continued + bad.instanceBadPosEnd(); // //# 85: continued + bad.instanceBadPosStart(); // //# 86: continued + bad.instanceBadPosMiddle(); // //# 87: continued + bad.instanceBadNamEmpty(); // //# 88: continued + bad.instanceBadNamEmpty(); // //# 89: continued + bad.instanceBadNamEmpty(); // //# 90: continued + bad.instanceBadNamEmpty(); // //# 91: continued + bad.instanceBadNamStart(); // //# 92: continued + bad.instanceBadNamStart(); // //# 93: continued + bad.instanceBadNamEnd(); // //# 94: continued + bad.instanceBadNamStart(); // //# 95: continued + bad.instanceBadNamMiddle(); // //# 96: continued + bad.instanceSetBadEmpty = 1; // //# 97: continued + bad.instanceSetBadStart = 1; // //# 98: continued + bad.instanceSetBadEnd = 1; // //# 99: continued + bad.instanceSetBadMiddle = 1; // //# 100: continued + bad * bad; // //# 101: continued + bad * bad; // //# 102: continued + bad * bad; // //# 103: continued + bad[1] = 1; // //# 104: continued + bad[1] = 1; // //# 105: continued + bad[1] = 1; // //# 106: continued + bad[1] = 1; // //# 107: continued + + // This covers tests 108-166 + bad.method(); + + bad.f(() {}); // //# 167: continued + bad.f(() {}); // //# 168: continued + bad.f(() {}); // //# 169: continued + bad.f(() {}); // //# 170: continued + bad.f(() {}); // //# 171: continued + bad.f(() {}); // //# 172: continued + bad.f(() {}); // //# 173: continued + bad.f(() {}); // //# 174: continued + bad.f(() {}); // //# 175: continued + bad.f(() {}); // //# 176: continued + bad.f(() {}); // //# 177: continued + bad.f(() {}); // //# 178: continued + bad.f(() {}); // //# 179: continued + bad.f(() {}); // //# 180: continued + bad.f(() {}); // //# 181: continued + bad.f(() {}); // //# 182: continued + bad.f(() {}); // //# 183: continued + bad.f(() {}); // //# 184: continued + bad.f(() {}); // //# 185: continued + bad.f(() {}); // //# 186: continued + bad.f(() {}); // //# 187: continued + bad.f(() {}); // //# 188: continued + + BadEmpty x; // //# 189: continued + BadStart x; // //# 190: continued + BadEnd x; // //# 191: continued + BadMiddle x; // //# 192: continued + BadPosEmpty x; // //# 193: continued + BadPosEmpty x; // //# 194: continued + BadPosEmpty x; // //# 195: continued + BadPosEmpty x; // //# 196: continued + BadPosStart x; // //# 197: continued + BadPosStart x; // //# 198: continued + BadPosEnd x; // //# 199: continued + BadPosStart x; // //# 200: continued + BadPosMiddle x; // //# 201: continued + BadNamEmpty x; // //# 202: continued + BadNamEmpty x; // //# 203: continued + BadNamEmpty x; // //# 204: continued + BadNamEmpty x; // //# 205: continued + BadNamStart x; // //# 206: continued + BadNamStart x; // //# 207: continued + BadNamEnd x; // //# 208: continued + BadNamStart x; // //# 209: continued + BadNamMiddle x; // //# 210: continued +} diff --git a/tests/language/unsorted/assignable_expression_runtime_test.dart b/tests/language/unsorted/assignable_expression_runtime_test.dart new file mode 100644 index 000000000000..942cb23d0ba6 --- /dev/null +++ b/tests/language/unsorted/assignable_expression_runtime_test.dart @@ -0,0 +1,47 @@ +// TODO(multitest): This was automatically migrated from a multitest and may +// contain strange or dead code. + +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Test to detect syntactically illegal left-hand-side (assignable) +// expressions. + +class C { + static dynamic field = 0; +} + +dynamic variable = 0; + +main() { + variable = 0; + + + + + C.field = 0; + + + + + variable = [1, 2, 3]; + variable[0] = 0; + (variable)[0] = 0; + + + + + C.field = [1, 2, 3]; + + + + + var a = 0; + + + + + // Neat palindrome expression. x is assignable, ((x)) is not. + +} diff --git a/tests/language/unsorted/assignable_expression_test.dart b/tests/language/unsorted/assignable_expression_test.dart new file mode 100644 index 000000000000..5bd904c4cb12 --- /dev/null +++ b/tests/language/unsorted/assignable_expression_test.dart @@ -0,0 +1,113 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Test to detect syntactically illegal left-hand-side (assignable) +// expressions. + +class C { + static dynamic field = 0; +} + +dynamic variable = 0; + +main() { + variable = 0; + (variable) = 0; +//^^^^^^^^^^ +// [analyzer] SYNTACTIC_ERROR.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE +//^^^^^^^^^^ +// [analyzer] SYNTACTIC_ERROR.MISSING_ASSIGNABLE_SELECTOR +// ^ +// [cfe] Can't assign to a parenthesized expression. + (variable)++; + // ^ + // [cfe] Can't assign to a parenthesized expression. + // ^^ + // [analyzer] SYNTACTIC_ERROR.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE + ++(variable); + // ^ + // [analyzer] SYNTACTIC_ERROR.MISSING_ASSIGNABLE_SELECTOR + // [cfe] Can't assign to a parenthesized expression. + + C.field = 0; + (C.field) = 0; +//^^^^^^^^^ +// [analyzer] SYNTACTIC_ERROR.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE +//^^^^^^^^^ +// [analyzer] SYNTACTIC_ERROR.MISSING_ASSIGNABLE_SELECTOR +// ^ +// [cfe] Can't assign to a parenthesized expression. + (C.field)++; + // ^ + // [cfe] Can't assign to a parenthesized expression. + // ^^ + // [analyzer] SYNTACTIC_ERROR.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE + ++(C.field); + // ^ + // [analyzer] SYNTACTIC_ERROR.MISSING_ASSIGNABLE_SELECTOR + // [cfe] Can't assign to a parenthesized expression. + + variable = [1, 2, 3]; + variable[0] = 0; + (variable)[0] = 0; + (variable[0]) = 0; +//^^^^^^^^^^^^^ +// [analyzer] SYNTACTIC_ERROR.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE +//^^^^^^^^^^^^^ +// [analyzer] SYNTACTIC_ERROR.MISSING_ASSIGNABLE_SELECTOR +// ^ +// [cfe] Can't assign to a parenthesized expression. + (variable[0])++; + // ^ + // [cfe] Can't assign to a parenthesized expression. + // ^^ + // [analyzer] SYNTACTIC_ERROR.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE + ++(variable[0]); + // ^ + // [analyzer] SYNTACTIC_ERROR.MISSING_ASSIGNABLE_SELECTOR + // [cfe] Can't assign to a parenthesized expression. + + C.field = [1, 2, 3]; + (C.field[0]) = 0; +//^^^^^^^^^^^^ +// [analyzer] SYNTACTIC_ERROR.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE +//^^^^^^^^^^^^ +// [analyzer] SYNTACTIC_ERROR.MISSING_ASSIGNABLE_SELECTOR +// ^ +// [cfe] Can't assign to a parenthesized expression. + (C.field[0])++; + // ^ + // [cfe] Can't assign to a parenthesized expression. + // ^^ + // [analyzer] SYNTACTIC_ERROR.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE + ++(C.field[0]); + // ^ + // [analyzer] SYNTACTIC_ERROR.MISSING_ASSIGNABLE_SELECTOR + // [cfe] Can't assign to a parenthesized expression. + + var a = 0; + (a) = 0; +//^^^ +// [analyzer] SYNTACTIC_ERROR.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE +//^^^ +// [analyzer] SYNTACTIC_ERROR.MISSING_ASSIGNABLE_SELECTOR +// ^ +// [cfe] Can't assign to a parenthesized expression. + (a)++; + //^ + // [cfe] Can't assign to a parenthesized expression. + // ^^ + // [analyzer] SYNTACTIC_ERROR.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE + ++(a); + // ^ + // [analyzer] SYNTACTIC_ERROR.MISSING_ASSIGNABLE_SELECTOR + // [cfe] Can't assign to a parenthesized expression. + + // Neat palindrome expression. x is assignable, ((x)) is not. + var funcnuf = (x) => ((x))=((x)) <= (x); + // ^^^^^ + // [analyzer] SYNTACTIC_ERROR.MISSING_ASSIGNABLE_SELECTOR + // ^ + // [cfe] Can't assign to a parenthesized expression. +} diff --git a/tests/language/unsorted/bad_override_runtime_test.dart b/tests/language/unsorted/bad_override_runtime_test.dart new file mode 100644 index 000000000000..1e2abe5dfb55 --- /dev/null +++ b/tests/language/unsorted/bad_override_runtime_test.dart @@ -0,0 +1,33 @@ +// TODO(multitest): This was automatically migrated from a multitest and may +// contain strange or dead code. + +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +class Fisk { + get fisk => null; + + set fisk(x) {} + + + get hest => null; + set hest(x) {} + + foo() {} + var field; + method() {} + nullary() {} +} + +class Hest extends Fisk { + + + + +} + +main() { + new Fisk(); + new Hest(); +} diff --git a/tests/language/unsorted/bad_override_test.dart b/tests/language/unsorted/bad_override_test.dart new file mode 100644 index 000000000000..07400d2bebb7 --- /dev/null +++ b/tests/language/unsorted/bad_override_test.dart @@ -0,0 +1,48 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +class Fisk { + get fisk => null; + static + set fisk(x) {} + // ^^^^ + // [analyzer] COMPILE_TIME_ERROR.CONFLICTING_STATIC_AND_INSTANCE + // [cfe] This static member conflicts with an instance member. + + static + get hest => null; + // ^^^^ + // [analyzer] COMPILE_TIME_ERROR.CONFLICTING_STATIC_AND_INSTANCE + // [cfe] This static member conflicts with an instance member. + set hest(x) {} + + foo() {} + var field; + method() {} + nullary() {} +} + +class Hest extends Fisk { + static foo() {} + // ^^^ + // [analyzer] COMPILE_TIME_ERROR.CONFLICTING_STATIC_AND_INSTANCE + // [cfe] Can't declare a member that conflicts with an inherited one. + field() {} +//^^^^^ +// [analyzer] COMPILE_TIME_ERROR.CONFLICTING_METHOD_AND_FIELD +// [cfe] Can't declare a member that conflicts with an inherited one. + var method; + // ^^^^^^ + // [analyzer] COMPILE_TIME_ERROR.CONFLICTING_FIELD_AND_METHOD + // [cfe] Can't declare a member that conflicts with an inherited one. + nullary(x) {} +//^^^^^^^ +// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE +// [cfe] The method 'Hest.nullary' has more required arguments than those of overridden method 'Fisk.nullary'. +} + +main() { + new Fisk(); + new Hest(); +} diff --git a/tests/language/unsorted/bind_test.dart b/tests/language/unsorted/bind_test.dart new file mode 100644 index 000000000000..3617af3f780a --- /dev/null +++ b/tests/language/unsorted/bind_test.dart @@ -0,0 +1,16 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +class Bound { + run() { + return 42; + } +} + +void main() { + var runner = new Bound().run; + Expect.equals(42, runner()); +} diff --git a/tests/language/unsorted/bootstrap_test.dart b/tests/language/unsorted/bootstrap_test.dart new file mode 100644 index 000000000000..6b56a65cfde0 --- /dev/null +++ b/tests/language/unsorted/bootstrap_test.dart @@ -0,0 +1,15 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +class BootstrapTest { + static testMain() { + var obj = new Object(); + + return obj; + } +} + +main() { + BootstrapTest.testMain(); +} diff --git a/tests/language/unsorted/bottom_test.dart b/tests/language/unsorted/bottom_test.dart new file mode 100644 index 000000000000..40fe845201ac --- /dev/null +++ b/tests/language/unsorted/bottom_test.dart @@ -0,0 +1,16 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +Never never() => throw "!"; + +void main() { + final f1 = () => throw never(); + final f2 = () => never(); + Expect.equals(f1.runtimeType, f2.runtimeType); + + final Bottom = ((F Function() f) => F)(() => throw never()); + Expect.equals(Never, Bottom); +} diff --git a/tests/language/unsorted/branch_canonicalization_test.dart b/tests/language/unsorted/branch_canonicalization_test.dart new file mode 100644 index 000000000000..49990cd0b135 --- /dev/null +++ b/tests/language/unsorted/branch_canonicalization_test.dart @@ -0,0 +1,66 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Test that branch fusion correctly sets branch environment for comparisons +// that require unboxing and does not fuse branches that can deoptimize. +// VMOptions=--optimization-counter-threshold=10 --no-use-osr --no-background-compilation + +import "package:expect/expect.dart"; + +var sideEffect = true; + +barDouble(a, b) { + sideEffect = false; + final result = (a == b); + sideEffect = !sideEffect; + return result; +} + +fooDouble(a, b) => barDouble(a, b) ? 1 : 0; + +barMint(a, b) { + sideEffect = false; + final result = (a == b); + sideEffect = !sideEffect; + return result; +} + +fooMint(a, b) => barMint(a, b) ? 1 : 0; + +class A { + operator ==(other) => identical(this, other); +} + +class B extends A {} + +class C extends A {} + +barPoly(a, b) { + sideEffect = false; + final result = a == b; + sideEffect = !sideEffect; + return result; +} + +fooPoly(a, b) => barPoly(a, b) ? 1 : 0; + +main() { + final a = 1.0; + final b = 0x4000000000000000; // 1 << 62 + final x = new A(), y = new B(), z = new C(); + for (var i = 0; i < 20; i++) { + Expect.equals(1, fooDouble(a, a)); + Expect.isTrue(sideEffect); + Expect.equals(0, fooMint(b, 0)); + Expect.isTrue(sideEffect); + Expect.equals(1, fooPoly(x, x)); + Expect.equals(0, fooPoly(y, x)); + } + Expect.equals(1, fooDouble(z, z)); + Expect.isTrue(sideEffect); + Expect.equals(1, fooMint(z, z)); + Expect.isTrue(sideEffect); + Expect.equals(1, fooPoly(z, z)); + Expect.isTrue(sideEffect); +} diff --git a/tests/language/unsorted/branches_test.dart b/tests/language/unsorted/branches_test.dart new file mode 100644 index 000000000000..b45917696e7e --- /dev/null +++ b/tests/language/unsorted/branches_test.dart @@ -0,0 +1,159 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test for branches. Make sure that shortcuts work, even if they have +// to jump over several expressions. + +import "package:expect/expect.dart"; + +class BranchesTest { + static bool f() { + Expect.equals("Never reached", 0); + return true; + } + + static void testMain() { + int checkPointCounter = 1; + int checkPoint1 = 0; + int checkPoint2 = 0; + int checkPoint3 = 0; + int checkPoint4 = 0; + int checkPoint5 = 0; + int checkPoint6 = 0; + int i = 0; + for (int i = 0; i < 2; i++) { + if (i == 0) { + checkPoint1 += checkPointCounter++; + if (true || // Test branch-if-true. + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f() || + f()) { + checkPoint2 += checkPointCounter++; + } + } else { + // Test branch (jumping over the else branch). + checkPoint3 += checkPointCounter++; + if (false) { + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + checkPoint4 = checkPointCounter++; // Never reached. + } + } + checkPoint5 += checkPointCounter++; + } + checkPoint6 += checkPointCounter++; + Expect.equals(1, checkPoint1); + Expect.equals(2, checkPoint2); + Expect.equals(4, checkPoint3); + Expect.equals(0, checkPoint4); + Expect.equals(8, checkPoint5); + Expect.equals(6, checkPoint6); + } +} + +main() { + BranchesTest.testMain(); +} diff --git a/tests/language/unsorted/callable_runtime_test.dart b/tests/language/unsorted/callable_runtime_test.dart new file mode 100644 index 000000000000..05fad49862ae --- /dev/null +++ b/tests/language/unsorted/callable_runtime_test.dart @@ -0,0 +1,70 @@ +// TODO(multitest): This was automatically migrated from a multitest and may +// contain strange or dead code. + +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:expect/expect.dart'; + +class X { + call() => 42; +} + +class XX extends X { + XX.named(); +} + +class Y { + call(int x) => 87 + x; + + static int staticMethod(int x) => x + 1; +} + +class Z { + final T value; + Z(this.value); + T call() => value; + + static int staticMethod(int x) => x + 1; +} + +typedef F(int x); +typedef G(String y); +typedef H(); +typedef T I(); + +main() { + X x = new X(); + Function f = x; // Should pass checked mode test + Y y = new Y(); + Function g = y; // Should pass checked mode test + F f0 = y; // Should pass checked mode test + + + + + Expect.equals(f(), 42); + Expect.equals(g(100), 187); + + var z = new Z(123); + Expect.equals(z(), 123); + Expect.equals((z as dynamic)(), 123); + + Expect.equals(Y.staticMethod(6), 7); + Expect.equals(Z.staticMethod(6), 7); + + var xx = new XX.named(); + Expect.equals(xx(), 42); + + H xx2 = new XX.named(); + Expect.equals(xx2(), 42); + + Expect.throwsTypeError(() { + F f2 = x as dynamic; + }); + + Expect.throwsTypeError(() { + G g1 = y as dynamic; + }); +} diff --git a/tests/language/unsorted/callable_test.dart b/tests/language/unsorted/callable_test.dart new file mode 100644 index 000000000000..75ff4c2cebb6 --- /dev/null +++ b/tests/language/unsorted/callable_test.dart @@ -0,0 +1,75 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:expect/expect.dart'; + +class X { + call() => 42; +} + +class XX extends X { + XX.named(); +} + +class Y { + call(int x) => 87 + x; + + static int staticMethod(int x) => x + 1; +} + +class Z { + final T value; + Z(this.value); + T call() => value; + + static int staticMethod(int x) => x + 1; +} + +typedef F(int x); +typedef G(String y); +typedef H(); +typedef T I(); + +main() { + X x = new X(); + Function f = x; // Should pass checked mode test + Y y = new Y(); + Function g = y; // Should pass checked mode test + F f0 = y; // Should pass checked mode test + + F f1 = x; + //^ + // [cfe] A value of type 'dynamic Function()' can't be assigned to a variable of type 'dynamic Function(int)'. + // ^ + // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT + G g0 = y; + //^ + // [cfe] A value of type 'dynamic Function(int)' can't be assigned to a variable of type 'dynamic Function(String)'. + // ^ + // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT + + Expect.equals(f(), 42); + Expect.equals(g(100), 187); + + var z = new Z(123); + Expect.equals(z(), 123); + Expect.equals((z as dynamic)(), 123); + + Expect.equals(Y.staticMethod(6), 7); + Expect.equals(Z.staticMethod(6), 7); + + var xx = new XX.named(); + Expect.equals(xx(), 42); + + H xx2 = new XX.named(); + Expect.equals(xx2(), 42); + + Expect.throwsTypeError(() { + F f2 = x as dynamic; + }); + + Expect.throwsTypeError(() { + G g1 = y as dynamic; + }); +} diff --git a/tests/language/unsorted/cascaded_forwarding_stubs_test.dart b/tests/language/unsorted/cascaded_forwarding_stubs_test.dart new file mode 100644 index 000000000000..856f9dccac28 --- /dev/null +++ b/tests/language/unsorted/cascaded_forwarding_stubs_test.dart @@ -0,0 +1,59 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +class A {} + +class B extends A {} + +class C { + void f(B x, B y) {} +} + +abstract class I1 { + void f(covariant A x, B y); +} + +// D contains a forwarding stub for f which ensures that `x` is type checked. +class D extends C implements I1 {} + +abstract class I2 { + void f(B x, covariant A y); +} + +// E contains a forwarding stub for f which ensures that `y` is type checked. +class E extends D implements I2 { + void f(B x, B y); +} + +main() { + E e = new E(); + C c = e; + I1 i1 = e; + D d = e; + I2 i2 = e; + A a = new A(); + B b = new B(); + c.f(b, b); // No error + i1.f(b, b); // No error + d.f(b, b); // No error + i2.f(b, b); // No error + e.f(b, b); // No error + Expect.throwsTypeError(() { + i1.f(a, b); + }); + Expect.throwsTypeError(() { + d.f(a, b); + }); + Expect.throwsTypeError(() { + i2.f(b, a); + }); + Expect.throwsTypeError(() { + e.f(a as dynamic, b); + }); + Expect.throwsTypeError(() { + e.f(b, a as dynamic); + }); +} diff --git a/tests/language/unsorted/cast2_test.dart b/tests/language/unsorted/cast2_test.dart new file mode 100644 index 000000000000..01c14fb01cd1 --- /dev/null +++ b/tests/language/unsorted/cast2_test.dart @@ -0,0 +1,34 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test program for constructors and initializers. + +import "package:expect/expect.dart"; + +// Test 'expression as Type' casts. + +class C { + final int foo = 42; + + int val = 0; + void inc() { + ++val; + } +} + +class D extends C { + final int bar = 37; +} + +main() { + C oc = new C(); + D od = new D(); + + Expect.throwsNoSuchMethodError(() => (oc as dynamic).bar); + + // Casts should always evaluate the left-hand side, if only for its effects. + oc.inc() as dynamic; + Expect.equals(1, oc.val); + oc.inc() as Object?; + Expect.equals(2, oc.val); +} diff --git a/tests/language/unsorted/cast_test.dart b/tests/language/unsorted/cast_test.dart new file mode 100644 index 000000000000..5f14ccd0b7ee --- /dev/null +++ b/tests/language/unsorted/cast_test.dart @@ -0,0 +1,77 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test program for constructors and initializers. + +import "package:expect/expect.dart"; + +// Test 'expression as Type' casts. + +class C { + final int foo = 42; +} + +class D extends C { + final int bar = 37; +} + +Object createC() => new C(); +Object createD() => new D(); +Object? getNull() => null; +Object createList() => [2]; +Object createInt() => 87; +Object createString() => "a string"; + +main() { + Object oc = createC(); + Object od = createD(); + Object? on = getNull(); + Object ol = createList(); + Object oi = createInt(); + Object os = createString(); + + Expect.equals(42, (oc as C).foo); + Expect.equals(42, (od as C).foo); + Expect.equals(42, (od as D).foo); + Expect.equals(37, (od as D).bar); + Expect.equals(37, ((od as C) as D).bar); + (oc as D).foo; // //# 01: runtime error + (on as D?).toString(); + (on as D).foo; // //# 02: runtime error + (on as C).foo; // //# 03: runtime error + // Reassign to cancel out the type promotion from the previous "as". + oc = oc as dynamic; + od = od as dynamic; + oc.foo; // //# 04: compile-time error + od.foo; // //# 05: compile-time error + (on as Object?).toString(); + (oc as Object).toString(); + (od as Object).toString(); + (on as dynamic).toString(); + (on as dynamic).foo; // //# 07: runtime error + (oc as dynamic).foo; + (od as dynamic).foo; + (oc as dynamic).bar; // //# 08: runtime error + (od as dynamic).bar; + C c = oc as C; + c = od as C; + c = oc; + D d = od as D; + d = oc as D; // //# 10: runtime error + d = od; + + (ol as List)[0]; + (ol as List)[0]; + (ol as dynamic)[0]; + (ol as String).length; // //# 12: runtime error + int x = (ol as List)[0]; + (ol as List)[0] = (oi as int); + + (os as String).length; + (os as dynamic).length; + (oi as String).length; // //# 13: runtime error + (os as List).length; // //# 14: runtime error + + (oi as int) + 2; + (oi as List).length; // //# 15: runtime error +} diff --git a/tests/language/unsorted/check_member_static_runtime_1_test.dart b/tests/language/unsorted/check_member_static_runtime_1_test.dart new file mode 100644 index 000000000000..b9b4391db7e0 --- /dev/null +++ b/tests/language/unsorted/check_member_static_runtime_1_test.dart @@ -0,0 +1,22 @@ +// TODO(multitest): This was automatically migrated from a multitest and may +// contain strange or dead code. + +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +class A { + static var a; + var b; +} + +class B extends A {} + +class C extends B { + var a; + +} + +void main() { + new C(); +} diff --git a/tests/language/unsorted/check_member_static_runtime_test.dart b/tests/language/unsorted/check_member_static_runtime_test.dart new file mode 100644 index 000000000000..db884e0654bb --- /dev/null +++ b/tests/language/unsorted/check_member_static_runtime_test.dart @@ -0,0 +1,22 @@ +// TODO(multitest): This was automatically migrated from a multitest and may +// contain strange or dead code. + +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +class A { + static var a; + var b; +} + +class B extends A {} + +class C extends B { + + +} + +void main() { + new C(); +} diff --git a/tests/language/unsorted/check_member_static_test.dart b/tests/language/unsorted/check_member_static_test.dart new file mode 100644 index 000000000000..2987cb82d363 --- /dev/null +++ b/tests/language/unsorted/check_member_static_test.dart @@ -0,0 +1,22 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +class A { + static var a; + var b; +} + +class B extends A {} + +class C extends B { + var a; + static var b; + // ^ + // [analyzer] COMPILE_TIME_ERROR.CONFLICTING_STATIC_AND_INSTANCE + // [cfe] Can't declare a member that conflicts with an inherited one. +} + +void main() { + new C(); +} diff --git a/tests/language/unsorted/check_method_override_runtime_test.dart b/tests/language/unsorted/check_method_override_runtime_test.dart new file mode 100644 index 000000000000..e538a336b25f --- /dev/null +++ b/tests/language/unsorted/check_method_override_runtime_test.dart @@ -0,0 +1,21 @@ +// TODO(multitest): This was automatically migrated from a multitest and may +// contain strange or dead code. + +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +class A { + f([var x]) {} + foo(var a, [x, y]) {} +} + +class C extends A { + + +} + +main() { + new A().foo(2); + new C().foo(1); +} diff --git a/tests/language/unsorted/check_method_override_test.dart b/tests/language/unsorted/check_method_override_test.dart new file mode 100644 index 000000000000..a23af6421a54 --- /dev/null +++ b/tests/language/unsorted/check_method_override_test.dart @@ -0,0 +1,24 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +class A { + f([var x]) {} + foo(var a, [x, y]) {} +} + +class C extends A { + f() {} +//^ +// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE +// [cfe] The method 'C.f' has fewer positional arguments than those of overridden method 'A.f'. + foo(var a, [x]) {} +//^^^ +// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE +// [cfe] The method 'C.foo' has fewer positional arguments than those of overridden method 'A.foo'. +} + +main() { + new A().foo(2); + new C().foo(1); +} diff --git a/tests/language/unsorted/checked_method_error_order_test.dart b/tests/language/unsorted/checked_method_error_order_test.dart new file mode 100644 index 000000000000..b8ebfe6a8a35 --- /dev/null +++ b/tests/language/unsorted/checked_method_error_order_test.dart @@ -0,0 +1,45 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +import "package:expect/expect.dart"; + +class Bar { + required({required int i, required String a}) { + print(i); + print(a); + } + + optional({int? i, String? a}) { + print(i); + print(a); + } +} + +main() { + bool checkedMode = false; + assert((checkedMode = true)); + // Test that in checked mode, we are checking the type of optional parameters + // in the correct order (aka, don't check the type of parameter 'a' first). + if (checkedMode) { + dynamic x = 'e'; + dynamic y = 3; + Expect.throws(() => new Bar().required(i: x, a: y), (e) { + if (e is TypeError) { + var m = e.toString(); + return m.contains("is not a subtype of type 'int'") || + m.contains( + "Expected a value of type 'int', but got one of type 'String'"); + } + return false; + }); + Expect.throws(() => new Bar().optional(i: x, a: y), (e) { + if (e is TypeError) { + var m = e.toString(); + return m.contains("is not a subtype of type 'int'") || + m.contains( + "Expected a value of type 'int', but got one of type 'String'"); + } + return false; + }); + } +} diff --git a/tests/language/unsorted/combiner_type_lookup_indexed_test.dart b/tests/language/unsorted/combiner_type_lookup_indexed_test.dart new file mode 100644 index 000000000000..e1f1a3880664 --- /dev/null +++ b/tests/language/unsorted/combiner_type_lookup_indexed_test.dart @@ -0,0 +1,19 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +class A {} + +class B extends A { + B operator +(int i) => this; +} + +class C { + B operator [](int i) => new B(); + + void operator []=(int i, A value) {} +} + +main() { + new C()[0] += 1; +} diff --git a/tests/language/unsorted/combiner_type_lookup_instance_test.dart b/tests/language/unsorted/combiner_type_lookup_instance_test.dart new file mode 100644 index 000000000000..cc9536d98d03 --- /dev/null +++ b/tests/language/unsorted/combiner_type_lookup_instance_test.dart @@ -0,0 +1,19 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +class A {} + +class B extends A { + B operator +(int i) => this; +} + +class C { + B get property => new B(); + + void set property(A value) {} +} + +main() { + new C().property += 1; +} diff --git a/tests/language/unsorted/combiner_type_lookup_static_test.dart b/tests/language/unsorted/combiner_type_lookup_static_test.dart new file mode 100644 index 000000000000..925d9782920d --- /dev/null +++ b/tests/language/unsorted/combiner_type_lookup_static_test.dart @@ -0,0 +1,19 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +class A {} + +class B extends A { + B operator +(int i) => this; +} + +class C { + static B get staticProperty => new B(); + + static void set staticProperty(A value) {} +} + +main() { + C.staticProperty += 1; +} diff --git a/tests/language/unsorted/combiner_type_lookup_top_level_test.dart b/tests/language/unsorted/combiner_type_lookup_top_level_test.dart new file mode 100644 index 000000000000..bb1cf5bc9758 --- /dev/null +++ b/tests/language/unsorted/combiner_type_lookup_top_level_test.dart @@ -0,0 +1,17 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +class A {} + +class B extends A { + B operator +(int i) => this; +} + +B get topLevel => new B(); + +void set topLevel(A value) {} + +main() { + topLevel += 1; +} diff --git a/tests/language/unsorted/condition_bailout_test.dart b/tests/language/unsorted/condition_bailout_test.dart new file mode 100644 index 000000000000..d5d08e171893 --- /dev/null +++ b/tests/language/unsorted/condition_bailout_test.dart @@ -0,0 +1,47 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test program testing closures. + +import "package:expect/expect.dart"; + +class A { + operator -() => this; + + foo(x) { + -a; + if (x) return true; + return false; + } + + loop1(x) { + -a; + while (x) return true; + return false; + } + + loop2(x) { + -a; + for (; x;) return true; + return false; + } + + loop3(x) { + -a; + var i = 0; + do { + if (i++ == 1) return false; + } while (!x); + return true; + } +} + +var a; + +main() { + a = new A(); + Expect.isTrue(a.foo(true)); + Expect.isTrue(a.loop1(true)); + Expect.isTrue(a.loop2(true)); + Expect.isTrue(a.loop3(true)); +} diff --git a/tests/language/unsorted/context2_test.dart b/tests/language/unsorted/context2_test.dart new file mode 100644 index 000000000000..1db17ff9e18d --- /dev/null +++ b/tests/language/unsorted/context2_test.dart @@ -0,0 +1,34 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test for capturing. + +import "package:expect/expect.dart"; + +// Regression test for issue 5991015. + +class V { + notCalled(Function x) { + return x(); + } + + foofoo(x) { + return x; + } + + hoop(input, n) { + while (n-- > 0) { + Expect.equals(5, input); + continue; // This continue statement must properly unchain the context. + switch (input) { + case 3: + var values = foofoo; + notCalled(() => values(input)); + } + } + } +} + +main() { + new V().hoop(5, 3); +} diff --git a/tests/language/unsorted/context_args_with_defaults_test.dart b/tests/language/unsorted/context_args_with_defaults_test.dart new file mode 100644 index 000000000000..21c89a651689 --- /dev/null +++ b/tests/language/unsorted/context_args_with_defaults_test.dart @@ -0,0 +1,22 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +class ContextArgsWithDefaultsTest { + static void testMain() { + crasher(1, 'foo')(); + } + + static crasher(int fixed, [String optional = '']) { + return () { + Expect.equals(1, fixed); + Expect.equals('foo', optional); + }; + } +} + +main() { + ContextArgsWithDefaultsTest.testMain(); +} diff --git a/tests/language/unsorted/context_test.dart b/tests/language/unsorted/context_test.dart new file mode 100644 index 000000000000..f2b96b124ee6 --- /dev/null +++ b/tests/language/unsorted/context_test.dart @@ -0,0 +1,26 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test for capturing. + +import "package:expect/expect.dart"; + +class ContextTest { + static foo(Function f) { + return f(); + } + + static void testMain() { + int x = 42; + bar() { + return x; + } + + x++; + Expect.equals(43, foo(bar)); + } +} + +main() { + ContextTest.testMain(); +} diff --git a/tests/language/unsorted/core_type_check_test.dart b/tests/language/unsorted/core_type_check_test.dart new file mode 100644 index 000000000000..79ea2c51047a --- /dev/null +++ b/tests/language/unsorted/core_type_check_test.dart @@ -0,0 +1,53 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +check(value, expectComparable, expectPattern) { + Expect.equals(expectComparable, value is Comparable); + Expect.equals(expectPattern, value is Pattern); +} + +int inscrutable(int x) => x == 0 ? 0 : x | inscrutable(x & (x - 1)); + +class A implements Comparable { + int compareTo(o) => 0; +} + +class B {} + +class C implements Pattern { + matchAsPrefix(String s, [int start = 0]) => null; + allMatches(String s, [int start = 0]) => throw "uncalled"; +} + +class D implements Pattern, Comparable { + int compareTo(o) => 0; + matchAsPrefix(String s, [int start = 0]) => null; + allMatches(String s, [int start = 0]) => throw "uncalled"; +} + +main() { + var things = [ + [], + 4, + 4.2, + 'foo', + new Object(), + new A(), + new B(), + new C(), + new D() + ]; + + check(things[inscrutable(0)], false, false); // List + check(things[inscrutable(1)], true, false); // int + check(things[inscrutable(2)], true, false); // num + check(things[inscrutable(3)], true, true); // string + check(things[inscrutable(4)], false, false); // Object + check(things[inscrutable(5)], true, false); // A + check(things[inscrutable(6)], false, false); // B + check(things[inscrutable(7)], false, true); // C + check(things[inscrutable(8)], true, true); // D +} diff --git a/tests/language/unsorted/cyclic_default_values_test.dart b/tests/language/unsorted/cyclic_default_values_test.dart new file mode 100644 index 000000000000..3ac8e0ba2f60 --- /dev/null +++ b/tests/language/unsorted/cyclic_default_values_test.dart @@ -0,0 +1,21 @@ +// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +bar([x = foo]) => x((_) => "bar"); +foo([y = bar]) => y((_) => "foo"); + +foo2({f: bar2}) => f(f: ({f}) => "foo2"); +bar2({f: foo2}) => f(f: ({f}) => "bar2"); + +main() { + var f = bar; + Expect.equals("bar", Function.apply(f, [])); + Expect.equals("main", Function.apply(f, [(_) => "main"])); + + var f_2 = bar2; + Expect.equals("bar2", Function.apply(f_2, [])); + Expect.equals("main2", Function.apply(f_2, [], {#f: ({f}) => "main2"})); +} diff --git a/tests/language/unsorted/cyclic_type2_test.dart b/tests/language/unsorted/cyclic_type2_test.dart new file mode 100644 index 000000000000..0b62f2fa1a1e --- /dev/null +++ b/tests/language/unsorted/cyclic_type2_test.dart @@ -0,0 +1,35 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Tests self referencing types. + +import "package:expect/expect.dart"; + +class Base { + get u => U; + get v => V; +} + +class Derived1 + extends Base, Derived1, Derived2>> {} + +class Derived2 + extends Base, Derived2, Derived1>> {} + +main() { + var d = new Derived1(); + Expect.equals( + "Derived1, Derived2>", + d.u.toString()); + Expect.equals( + "Derived1, " + "Derived1>, Derived2>", + d.v.toString()); + Expect.isTrue(d is Derived1); + Expect.isFalse(d is Derived1); + Expect.isTrue(d is Base, + Derived1, Derived2>>); + Expect.isFalse(d is Base, + Derived1, Derived2>>); +} diff --git a/tests/language/unsorted/cyclic_type_test.dart b/tests/language/unsorted/cyclic_type_test.dart new file mode 100644 index 000000000000..3031f6245121 --- /dev/null +++ b/tests/language/unsorted/cyclic_type_test.dart @@ -0,0 +1,80 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Tests self referencing types. + +import "package:expect/expect.dart"; + +@pragma("vm:entry-point") // Prevent obfuscation +class Base { + get t => T; +} + +// Derived is contractive. +@pragma("vm:entry-point") // Prevent obfuscation +class Derived extends Base> {} // //# 00: ok + +// Derived is contractive. +@pragma("vm:entry-point") // Prevent obfuscation +class Derived extends Base>> {} // //# 01: ok + +// Derived is non-contractive. +@pragma("vm:entry-point") // Prevent obfuscation +class Derived extends Base>> {} // //# 02: ok + +// Derived1 and Derived2 are contractive. +@pragma("vm:entry-point") // Prevent obfuscation +class Derived1 extends Base> {} // //# 03: ok +@pragma("vm:entry-point") // Prevent obfuscation +class Derived2 extends Base> {} // //# 03: ok + +// Derived1 and Derived2 are non-contractive. +@pragma("vm:entry-point") // Prevent obfuscation +class Derived1 extends Base> {} // //# 04: ok +@pragma("vm:entry-point") // Prevent obfuscation +class Derived2 extends Base>> {} // //# 04: ok + +main() { + // In the tests below we test that we get "int" and "bool" when calling + // toString() on the int and bool type respectively. This is not required + // behavior. However, we want to keep the original names for the most common + // core types so we make sure to handle these specifically in the compiler. + + var d; + d = new Derived(); // //# 00: continued + Expect.equals("Derived", d.t.toString()); // //# 00: continued + d = new Derived(); // //# 00: continued + Expect.equals("Derived", d.t.toString()); // //# 00: continued + d = new Derived(); // //# 00: continued + Expect.equals("Derived>", d.t.toString()); // //# 00: continued + + d = new Derived(); // //# 01: continued + + Expect.equals("Derived>", d.t.toString()); // //# 01: continued + d = new Derived(); // //# 01: continued + Expect.equals("Derived>", d.t.toString()); // //# 01: continued + d = new Derived(); // //# 01: continued + Expect.equals("Derived>", d.t.toString()); // //# 01: continued + + d = new Derived(); // //# 02: continued + Expect.equals("Derived>", d.t.toString()); // //# 02: continued + d = new Derived(); // //# 02: continued + Expect.equals("Derived>", d.t.toString()); // //# 02: continued + d = new Derived(); // //# 02: continued + Expect.equals("Derived>>", d.t.toString()); // //# 02: continued + + d = new Derived1(); // //# 03: continued + Expect.equals("Derived2", d.t.toString()); // //# 03: continued + d = new Derived2(); // //# 03: continued + Expect.equals("Derived1", d.t.toString()); // //# 03: continued + d = new Derived2>(); // //# 03: continued + Expect.equals("Derived1>", d.t.toString()); // //# 03: continued + + d = new Derived1(); // //# 04: continued + Expect.equals("Derived2", d.t.toString()); // //# 04: continued + d = new Derived2(); // //# 04: continued + Expect.equals("Derived1>", d.t.toString()); // //# 04: continued + d = new Derived2>(); // //# 04: continued + Expect.equals("Derived1>>", d.t.toString()); // //# 04: continued +} diff --git a/tests/language/unsorted/default_implementation2_test.dart b/tests/language/unsorted/default_implementation2_test.dart new file mode 100644 index 000000000000..0a3607c38ccd --- /dev/null +++ b/tests/language/unsorted/default_implementation2_test.dart @@ -0,0 +1,18 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test to verify incompatible constructor types + +abstract class Point { + factory Point(int x, int y) = PointImplementation; //# 01: ok + factory Point(x, y) = PointImplementation; //# 02: compile-time error +} + +class PointImplementation implements Point { + PointImplementation(int x, int y) {} +} + +main() { + new Point(1, 2); //# 01: continued + new Point(1, 2); //# 02: continued +} diff --git a/tests/language/unsorted/default_implementation_test.dart b/tests/language/unsorted/default_implementation_test.dart new file mode 100644 index 000000000000..c40a1ac27c36 --- /dev/null +++ b/tests/language/unsorted/default_implementation_test.dart @@ -0,0 +1,33 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test to verify that factory classes are working. + +import "package:expect/expect.dart"; + +abstract class Point { + factory Point(int x, int y) = PointImplementation; + + final int x = -1; + final int y = -1; +} + +class PointImplementation implements Point { + const PointImplementation(int x, int y) + : this.x = x, + this.y = y; + final int x; + final int y; +} + +class DefaultImplementationTest { + static void testMain() { + Point point = new Point(4, 2); + Expect.equals(4, point.x); + Expect.equals(2, point.y); + } +} + +main() { + DefaultImplementationTest.testMain(); +} diff --git a/tests/language/unsorted/default_init_test.dart b/tests/language/unsorted/default_init_test.dart new file mode 100644 index 000000000000..90a57c24ed11 --- /dev/null +++ b/tests/language/unsorted/default_init_test.dart @@ -0,0 +1,66 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +// Tests static and instance fields initialization. +class DefaultInitTest { + static testMain() { + Expect.equals(0, A.a); + Expect.equals(2, A.b); + Expect.equals(null, A.c); + + A a1 = new A(42); + Expect.equals(42, a1.d); + Expect.equals(null, a1.e); + + A a2 = new A.named(43); + Expect.equals(null, a2.d); + Expect.equals(43, a2.e); + + Expect.equals(42, B.instance.x); + Expect.equals(3, C.instance.z); + } +} + +class A { + static const int a = 0; + static const int b = 2; + static int? c; + int? d; + int? e; + + A(int val) { + d = val; + } + + A.named(int val) { + e = val; + } +} + +// The following tests cover cases described in b/4101270 + +class B { + static const B instance = const B(); + // by putting this field after the static initializer above, the JS code gen + // was calling the constructor before the setter of this property was defined. + final int x; + const B() : this.x = (41 + 1); +} + +class C { + // forward reference to another class + static const D instance = const D(); + C() {} +} + +class D { + const D() : this.z = 3; + final int z; +} + +main() { + DefaultInitTest.testMain(); +} diff --git a/tests/language/unsorted/deny_listed_test.dart b/tests/language/unsorted/deny_listed_test.dart new file mode 100644 index 000000000000..ba49fdcea8c1 --- /dev/null +++ b/tests/language/unsorted/deny_listed_test.dart @@ -0,0 +1,79 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test checking that static/instance field shadowing do not conflict. + +// Test that certain interfaces/classes are denylisted from being +// implemented or extended. + +// bool. +class MyBool implements bool {} // //# 01: compile-time error +abstract class MyBoolInterface implements bool default F { // //# 02: syntax error + MyBoolInterface(); // //# 02: continued +} // //# 02: continued + +// num. +class MyNum implements num {} // //# 03: compile-time error +abstract class MyNumInterface implements num default F { // //# 04: syntax error + MyNumInterface(); // //# 04: continued +} // //# 04: continued + +// int. +class MyInt implements int {} // //# 05: compile-time error +abstract class MyIntInterface implements int default F { // //# 06: syntax error + MyIntInterface(); // //# 06: continued +} // //# 06: continued + +// double. +class MyDouble implements double {} // //# 07: compile-time error +abstract class MyDoubleInterface implements double default F { // //# 08: syntax error + MyDoubleInterface(); // //# 08: continued +} // //# 08: continued + +// String. +class MyString implements String {} // //# 09: compile-time error +abstract class MyStringInterface implements String default F { // //# 10: syntax error + MyStringInterface(); // //# 10: continued +} // //# 10: continued + +// Function. +class MyFunction implements Function {} + +class MyOtherFunction extends Function {} +abstract class MyFunctionInterface implements Function default F { // //# 12: syntax error + MyFunctionInterface(); // //# 12: continued +} // //# 12: continued + +// dynamic. +class MyDynamic implements dynamic {} // //# 13: compile-time error +abstract class MyDynamicInterface implements dynamic default F { // //# 14: syntax error + MyDynamicInterface(); // //# 14: continued +} // //# 14: continued + +class F { + factory MyBoolInterface() { return null; } // //# 02: continued + factory MyNumInterface() { return null; } // //# 04: continued + factory MyIntInterface() { return null; } // //# 06: continued + factory MyDoubleInterface() { return null; } // //# 08: continued + factory MyStringInterface() { return null; } // //# 10: continued + factory MyFunctionInterface() { return null; } // //# 12: continued + factory MyDynamicInterface() { return null; } // //# 14: continued +} + +main() { + new MyBool(); // //# 01: continued + new MyBoolInterface(); // //# 02: continued + new MyNum(); // //# 03: continued + new MyNumInterface(); // //# 04: continued + new MyInt(); // //# 05: continued + new MyIntInterface(); // //# 06: continued + new MyDouble(); // //# 07: continued + new MyDoubleInterface(); // //# 08: continued + new MyString(); // //# 09: continued + new MyStringInterface(); // //# 10: continued + new MyFunction(); + new MyOtherFunction(); + new MyFunctionInterface(); //# 12: continued + new MyDynamic(); // //# 13: continued + new MyDynamicInterface(); // //# 14: continued +} diff --git a/tests/language/unsorted/disassemble_test.dart b/tests/language/unsorted/disassemble_test.dart new file mode 100644 index 000000000000..bc3b03223e8b --- /dev/null +++ b/tests/language/unsorted/disassemble_test.dart @@ -0,0 +1,16 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// VMOptions=--disassemble +// VMOptions=--disassemble --always_generate_trampolines_for_testing + +// Tests proper object recognition in disassembler. + +f(x) { + return "foo"; +} + +main() { + print(f(0)); +} diff --git a/tests/language/unsorted/efficient_length_warning_test.dart b/tests/language/unsorted/efficient_length_warning_test.dart new file mode 100644 index 000000000000..5ba2c6fdfc98 --- /dev/null +++ b/tests/language/unsorted/efficient_length_warning_test.dart @@ -0,0 +1,17 @@ +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Third dart test program. + +import "dart:math"; + +main() { + // This should no longer cause a warning because the least-upper-bound + // of List and Set is Object. + // The LUB is now EfficientLengthIterable and it extends Iterable. + var x = (new Random().nextBool() // Unpredictable condition. + ? [1] + : new Set.from([1])) + .first; + if (x != 1) throw "Wat?"; +} diff --git a/tests/language/unsorted/emit_const_fields_test.dart b/tests/language/unsorted/emit_const_fields_test.dart new file mode 100644 index 000000000000..8264c50c1802 --- /dev/null +++ b/tests/language/unsorted/emit_const_fields_test.dart @@ -0,0 +1,21 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Test that used static consts are emitted. + +import "package:expect/expect.dart"; + +class Guide { + static const LTUAE = 42; + static const TITLE = "Life, the Universe and Everything"; + static const EARTH = const { + "Sector": "ZZ9 Plural Z Alpha", + "Status": const ["Scheduled for demolition", "1978-03-08"], + "Description": "Mostly harmless" + }; +} + +main() { + Expect.isTrue(42 == Guide.LTUAE); + Expect.isTrue("1978-03-08" == (Guide.EARTH["Status"] as List)[1]); +} diff --git a/tests/language/unsorted/expect_test.dart b/tests/language/unsorted/expect_test.dart new file mode 100644 index 000000000000..5cd8c8a3f5bf --- /dev/null +++ b/tests/language/unsorted/expect_test.dart @@ -0,0 +1,77 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Testing the Expect class. + +import "package:expect/expect.dart"; + +class ExpectTest { + static testEquals(a) { + try { + Expect.equals("AB", a, "within testEquals"); + } on ExpectException catch (msg) { + print(msg); + return; + } + Expect.equals("AB", "${a}B"); + throw "Expect.equals did not fail"; + } + + static testIsTrue(f) { + try { + Expect.isTrue(f); + } on ExpectException catch (msg) { + print(msg); + return; + } + Expect.isFalse(f); + throw "Expect.isTrue did not fail"; + } + + static testIsFalse(t) { + try { + Expect.isFalse(t); + } on ExpectException catch (msg) { + print(msg); + return; + } + Expect.isTrue(t); + throw "Expect.isFalse did not fail"; + } + + static testIdentical(a) { + var ab = a + "B"; + try { + Expect.identical("AB", ab); + } on ExpectException catch (msg) { + print(msg); + return; + } + Expect.equals("AB", ab); + throw "Expect.identical did not fail"; + } + + static testFail() { + try { + Expect.fail("fail now"); + } on ExpectException catch (msg) { + print(msg); + return; + } + throw "Expect.fail did not fail"; + } + + static void testMain() { + testEquals("A"); + testIsTrue(false); + testIsTrue(1); + testIsFalse(true); + testIsFalse(0); + testIdentical("A"); + testFail(); + } +} + +main() { + ExpectTest.testMain(); +} diff --git a/tests/language/unsorted/extend_type_parameter_test.dart b/tests/language/unsorted/extend_type_parameter_test.dart new file mode 100644 index 000000000000..58991f5e8936 --- /dev/null +++ b/tests/language/unsorted/extend_type_parameter_test.dart @@ -0,0 +1,13 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Extending a type parameter is not allowed. + +abstract class A extends T {} // //# 00: compile-time error +class A extends T {} // //# 01: compile-time error + +main() { + A a = new A(); // //# 00: compile-time error + A a = new A(); // //# 01: continued +} diff --git a/tests/language/unsorted/extends_test.dart b/tests/language/unsorted/extends_test.dart new file mode 100644 index 000000000000..44c1c1895dd1 --- /dev/null +++ b/tests/language/unsorted/extends_test.dart @@ -0,0 +1,21 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +library ExtendsTestMain; + +import "extends_test_lib.dart"; +import "package:expect/expect.dart"; + +// S should extend class A from below, not the one imported +// from the library. +class S extends A {} + +class A { + var y = "class A from main script"; +} + +main() { + var s = new S(); + Expect.equals("class A from main script", s.y); +} diff --git a/tests/language/unsorted/extends_test_lib.dart b/tests/language/unsorted/extends_test_lib.dart new file mode 100644 index 000000000000..d62ca8f7da48 --- /dev/null +++ b/tests/language/unsorted/extends_test_lib.dart @@ -0,0 +1,9 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +library ExtendsTestLib; + +class A { + var y = "class A from library"; +} diff --git a/tests/language/unsorted/external_runtime_test.dart b/tests/language/unsorted/external_runtime_test.dart new file mode 100644 index 000000000000..e51282cfe0f3 --- /dev/null +++ b/tests/language/unsorted/external_runtime_test.dart @@ -0,0 +1,54 @@ +// TODO(multitest): This was automatically migrated from a multitest and may +// contain strange or dead code. + +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +class Bar { + Bar(val); +} + +class Foo { + var x; + f() {} + + Foo() : x = 0; + + // fields can't be declared external + + + + + + + + + + + + + +} + + + + +main() { + // Ensure Foo class is compiled. + var foo = new Foo(); + + + + + + + + + + + + + + +} diff --git a/tests/language/unsorted/external_test.dart b/tests/language/unsorted/external_test.dart new file mode 100644 index 000000000000..b1008e1c7a13 --- /dev/null +++ b/tests/language/unsorted/external_test.dart @@ -0,0 +1,102 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +class Bar { + Bar(val); +} + +class Foo { +// ^ +// [cfe] The non-abstract class 'Foo' is missing implementations for these members: + var x = -1; + f() {} + + Foo() : x = 0; + + // fields can't be declared external + external var x01; +//^^^^^^^^ +// [analyzer] SYNTACTIC_ERROR.EXTERNAL_FIELD + external int x02; +//^^^^^^^^ +// [analyzer] SYNTACTIC_ERROR.EXTERNAL_FIELD + + external f11() { } + // ^ + // [analyzer] SYNTACTIC_ERROR.EXTERNAL_METHOD_WITH_BODY + // [cfe] An external or native method can't have a body. + external f12() => 1; + // ^^ + // [analyzer] SYNTACTIC_ERROR.EXTERNAL_METHOD_WITH_BODY + // [cfe] An external or native method can't have a body. + // ^ + // [cfe] An external or native method can't have a body. + static external f14(); + // ^^^^^^^^ + // [analyzer] SYNTACTIC_ERROR.MODIFIER_OUT_OF_ORDER + // [cfe] The modifier 'external' should be before the modifier 'static'. + int external f16(); + // ^^^^^^^^ + // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN + // [cfe] Expected ';' after this. + // ^^^^^^ + // [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER + + external Foo.n21(val) : x = 1; + // ^ + // [analyzer] SYNTACTIC_ERROR.EXTERNAL_CONSTRUCTOR_WITH_INITIALIZER + // [cfe] An external constructor can't have any initializers. + external Foo.n22(val) { x = 1; } + // ^ + // [analyzer] SYNTACTIC_ERROR.EXTERNAL_METHOD_WITH_BODY + // [cfe] An external or native method can't have a body. + external factory Foo.n23(val) => new Foo(); + // ^^ + // [analyzer] SYNTACTIC_ERROR.EXTERNAL_FACTORY_WITH_BODY + // [cfe] External factories can't have a body. + // ^ + // [cfe] An external or native method can't have a body. + external Foo.n24(this.x); + // ^ + // [cfe] An external constructor can't initialize fields. + external factory Foo.n25(val) = Bar; + // ^ + // [analyzer] SYNTACTIC_ERROR.EXTERNAL_FACTORY_REDIRECTION + // [cfe] A redirecting factory can't be external. + // ^^^ + // [analyzer] STATIC_WARNING.REDIRECT_TO_INVALID_RETURN_TYPE + // [cfe] The constructor function type 'Bar Function(dynamic)' isn't a subtype of 'Foo Function(dynamic)'. +} + +external int t06(int i) { return 1; } +// [error line 78, column 1, length 8] +// [analyzer] SYNTACTIC_ERROR.EXTERNAL_METHOD_WITH_BODY +// [cfe] An external or native method can't have a body. +// ^ +// [cfe] An external or native method can't have a body. +external int t07(int i) => i + 1; +// [error line 84, column 1, length 8] +// [analyzer] SYNTACTIC_ERROR.EXTERNAL_METHOD_WITH_BODY +// [cfe] An external or native method can't have a body. +// ^ +// [cfe] An external or native method can't have a body. + +main() { + // Ensure Foo class is compiled. + var foo = new Foo(); + + new Foo().f11(); + new Foo().f12(); + Foo.f14(); + new Foo().f16(); + + new Foo.n21(1); + new Foo.n22(1); + new Foo.n23(1); + new Foo.n24(1); + new Foo.n25(1); + + t06(1); + t07(1); +} diff --git a/tests/language/unsorted/extract_type_arguments_test.dart b/tests/language/unsorted/extract_type_arguments_test.dart new file mode 100644 index 000000000000..52939c7cfda8 --- /dev/null +++ b/tests/language/unsorted/extract_type_arguments_test.dart @@ -0,0 +1,97 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// Tests the (probably temporary) API for extracting reified type arguments +/// from an object. + +import "package:expect/expect.dart"; + +// It's weird that a language test is testing code defined in a package. The +// rationale for putting this test here is: +// +// * This package is special and "built-in" to Dart in that the various +// compilers give it the special privilege of importing "dart:_internal" +// without error. +// +// * Eventually, the API being tested here may be replaced with an actual +// language feature, in which case this test will become an actual language +// test. +// +// * Placing the test here ensures it is tested on all of the various platforms +// and configurations where we need the API to work. +import "package:dart_internal/extract_type_arguments.dart"; + +main() { + testExtractIterableTypeArgument(); + testExtractMapTypeArguments(); +} + +testExtractIterableTypeArgument() { + Iterable object = []; + + // Invokes function with iterable's type argument. + var called = false; + extractIterableTypeArgument(object, () { + Expect.equals(T, int); + called = true; + }); + Expect.isTrue(called); + + // Returns result of function. + Object result = extractIterableTypeArgument(object, () => new Set()); + Expect.isTrue(result is Set); + Expect.isFalse(result is Set); + + // Accepts user-defined implementations of Iterable. + object = new CustomIterable(); + result = extractIterableTypeArgument(object, () => new Set()); + Expect.isTrue(result is Set); + Expect.isFalse(result is Set); +} + +testExtractMapTypeArguments() { + Map object = {}; + + // Invokes function with map's type arguments. + var called = false; + extractMapTypeArguments(object, () { + Expect.equals(K, String); + Expect.equals(V, int); + called = true; + }); + Expect.isTrue(called); + + // Returns result of function. + Object result = extractMapTypeArguments(object, () => new Two()); + Expect.isTrue(result is Two); + Expect.isFalse(result is Two); + + // Accepts user-defined implementations of Map. + object = new CustomMap(); + result = extractMapTypeArguments(object, () => new Two()); + Expect.isTrue(result is Two); + Expect.isFalse(result is Two); + + // Uses the type parameter order of Map, not any other type in the hierarchy. + object = new FlippedMap(); + result = extractMapTypeArguments(object, () => new Two()); + // Order is reversed here: + Expect.isTrue(result is Two); + Expect.isFalse(result is Two); +} + +class Two {} + +class CustomIterable implements Iterable { + noSuchMethod(i) => throw new UnimplementedError(); +} + +class CustomMap implements Map { + noSuchMethod(i) => throw new UnimplementedError(); +} + +// Note: Flips order of type parameters. +class FlippedMap implements Map { + noSuchMethod(i) => throw new UnimplementedError(); +} diff --git a/tests/language/unsorted/fannkuch_test.dart b/tests/language/unsorted/fannkuch_test.dart new file mode 100644 index 000000000000..be1a890ebc92 --- /dev/null +++ b/tests/language/unsorted/fannkuch_test.dart @@ -0,0 +1,92 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// The Computer Language Benchmarks Game +// https://benchmarksgame-team.pages.debian.net/benchmarksgame/ +// Ported from JavaScript contributed by Isaac Gouy. +// Description: Repeatedly access a tiny integer-sequence. + +import "package:expect/expect.dart"; + +class FannkuchTest { + static fannkuch(n) { + var p = List.filled(n, 0), q = List.filled(n, 0), s = List.filled(n, 0); + var sign = 1, maxflips = 0, sum = 0, m = n - 1; + for (var i = 0; i < n; i++) { + p[i] = i; + q[i] = i; + s[i] = i; + } + do { + // Copy and flip. + var q0 = p[0]; // Cache 0th element. + if (q0 != 0) { + for (var i = 1; i < n; i++) q[i] = p[i]; // Work on a copy. + var flips = 1; + do { + var qq = q[q0]; + if (qq == 0) { + // ... until 0th element is 0. + sum += sign * flips; + if (flips > maxflips) maxflips = flips; // New maximum? + break; + } + q[q0] = q0; + if (q0 >= 3) { + var i = 1, j = q0 - 1, t; + do { + t = q[i]; + q[i] = q[j]; + q[j] = t; + i++; + j--; + } while (i < j); + } + q0 = qq; + flips++; + } while (true); + } + if (sign == 1) { + var t = p[1]; + p[1] = p[0]; + p[0] = t; + sign = -1; // Rotate 0<-1. + } else { + // Rotate 0<-1 and 0<-1<-2. + var t = p[1]; + p[1] = p[2]; + p[2] = t; + sign = 1; + for (var i = 2; i < n; i++) { + var sx = s[i]; + if (sx != 0) { + s[i] = sx - 1; + break; + } + if (i == m) { + return [sum, maxflips]; + } + s[i] = i; + // Rotate 0<-...<-i+1. + t = p[0]; + for (var j = 0; j <= i; j++) { + p[j] = p[j + 1]; + } + p[i + 1] = t; + } + } + } while (true); + } + + static testMain() { + var n = 6; + var pf = fannkuch(n); + Expect.equals(49, pf[0]); + Expect.equals(10, pf[1]); + print("${pf[0]}\nPfannkuchen($n) = ${pf[1]}"); + } +} + +main() { + FannkuchTest.testMain(); +} diff --git a/tests/language/unsorted/fast_method_extraction_test.dart b/tests/language/unsorted/fast_method_extraction_test.dart new file mode 100644 index 000000000000..27620d847ede --- /dev/null +++ b/tests/language/unsorted/fast_method_extraction_test.dart @@ -0,0 +1,106 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Test that fast method extraction returns correct closure. +// VMOptions=--optimization-counter-threshold=10 --no-use-osr + +import "package:expect/expect.dart"; + +class A { + var f; + A(this.f); + foo() => 40 + f; +} + +class B { + var f; + B(this.f); + foo() => -40 - f; +} + +class X {} + +class C { + foo(v) => v is T; +} + +class ChaA { + final magic; + ChaA(magic) : this.magic = magic; + + foo() { + Expect.isTrue(this is ChaA); + Expect.equals("magicA", magic); + return "A"; + } + + bar() => foo; +} + +class ChaB extends ChaA { + ChaB(magic) : super(magic); + + foo() { + Expect.isTrue(this is ChaB); + Expect.equals("magicB", magic); + return "B"; + } +} + +mono(a) { + var f = a.foo; + return f(); +} + +poly(a) { + var f = a.foo; + return f(); +} + +types(a, b) { + var f = a.foo; + Expect.isTrue(f(b)); +} + +cha(a) { + var f = a.bar(); + return f(); +} + +extractFromNull() { + var f = (null).toString; + Expect.equals("null", f()); +} + +main() { + var a = new A(2); + var b = new B(2); + for (var i = 0; i < 20; i++) { + Expect.equals(42, mono(a)); + } + + for (var i = 0; i < 20; i++) { + Expect.equals(42, poly(a)); + Expect.equals(-42, poly(b)); + } + + var c = new C(); + var x = new X(); + for (var i = 0; i < 20; i++) { + types(c, x); + } + + var chaA = new ChaA("magicA"); + for (var i = 0; i < 20; i++) { + Expect.equals("A", cha(chaA)); + } + + var chaB = new ChaB("magicB"); + for (var i = 0; i < 20; i++) { + Expect.equals("B", cha(chaB)); + } + + for (var i = 0; i < 20; i++) { + extractFromNull(); + } +} diff --git a/tests/language/unsorted/fauxverride_runtime_test.dart b/tests/language/unsorted/fauxverride_runtime_test.dart new file mode 100644 index 000000000000..d5ae11a3c523 --- /dev/null +++ b/tests/language/unsorted/fauxverride_runtime_test.dart @@ -0,0 +1,102 @@ +// TODO(multitest): This was automatically migrated from a multitest and may +// contain strange or dead code. + +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +// Test the semantics of static members mixed with instance members. + +// Following are relevant quotes from Dart Programming Language +// Specification, Draft Version 0.10, June 7, 2012. + +// 7 Classes: + +// "It is a compile-time error if a class has an instance method and a +// static member method with the same name." + +// 7.1 Instance Methods: + +// "Instance methods are functions (6) whose declarations are +// immediately contained within a class declaration and that are not +// declared static. The instance methods of a class C are those +// instance methods declared by C and the instance methods inherited +// by C from its superclass." + +// 7.6 Static Methods + +// "Static methods are functions whose declarations are immediately +// contained within a class declaration and that are declared +// static. The static methods of a class C are those static methods +// declared by C." + +// 7.7 Static Variables + +// "Static variables are variables whose declarations are immediately +// contained within a class declaration and that are declared +// static. The static variables of a class C are those static +// variables declared by C." + +// "A static variable declaration of one of the forms static T v;, +// static T v = e; , static const T v = e; or static final T v = e; +// always induces an implicit static getter function (7.2) with +// signature static T get v whose invocation evaluates as described +// below (7.7.1)." + +m() => 'top level'; + +class Super { + // No error from hiding. + static m() => 'super'; + + static var i = 'super'; + + static var i2 = 'super'; + + instanceMethod() => m(); + + instanceMethod2() => m(); +} + +class Sub extends Super { + // According to 7.6, static methods are not inherited. + static m() => 'sub'; + + // According to 7.7, static variables are not inherited. + static var i = 'sub'; + + // According to 7.1, instance methods include those of the + // superclass, and according to 7, it is a compile-time to have an + // instance method and static method with the same name. + + instanceMethod() => m(); + + // According to 7.7, static variables are not inherited. + static i2() => m(); + + // According to 7.1, instance methods include those of the + // superclass, and according to 7, it is a compile-time to have an + // instance method and static method with the same + // name. Furthermore, according to 7.7 a static variable induces an + // implicit getter function (a static method). + + + foo() => 'foo'; +} + +main() { + Expect.equals('foo', new Sub().foo()); + Expect.equals('top level', m()); + Expect.equals('super', Super.m()); + Expect.equals('sub', Sub.m()); + Expect.equals('super', Super.i); + Expect.equals('sub', Sub.i); + Expect.equals('super', Super.i2); + Expect.equals('sub', Sub.i2()); + Expect.equals('super', new Super().instanceMethod()); + Expect.equals('sub', new Sub().instanceMethod()); + Expect.equals('super', new Super().instanceMethod2()); + Expect.equals('super', new Sub().instanceMethod2()); +} diff --git a/tests/language/unsorted/fauxverride_test.dart b/tests/language/unsorted/fauxverride_test.dart new file mode 100644 index 000000000000..d5fc6b1aeebd --- /dev/null +++ b/tests/language/unsorted/fauxverride_test.dart @@ -0,0 +1,109 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +// Test the semantics of static members mixed with instance members. + +// Following are relevant quotes from Dart Programming Language +// Specification, Draft Version 0.10, June 7, 2012. + +// 7 Classes: + +// "It is a compile-time error if a class has an instance method and a +// static member method with the same name." + +// 7.1 Instance Methods: + +// "Instance methods are functions (6) whose declarations are +// immediately contained within a class declaration and that are not +// declared static. The instance methods of a class C are those +// instance methods declared by C and the instance methods inherited +// by C from its superclass." + +// 7.6 Static Methods + +// "Static methods are functions whose declarations are immediately +// contained within a class declaration and that are declared +// static. The static methods of a class C are those static methods +// declared by C." + +// 7.7 Static Variables + +// "Static variables are variables whose declarations are immediately +// contained within a class declaration and that are declared +// static. The static variables of a class C are those static +// variables declared by C." + +// "A static variable declaration of one of the forms static T v;, +// static T v = e; , static const T v = e; or static final T v = e; +// always induces an implicit static getter function (7.2) with +// signature static T get v whose invocation evaluates as described +// below (7.7.1)." + +m() => 'top level'; + +class Super { + // No error from hiding. + static m() => 'super'; + + static var i = 'super'; + + static var i2 = 'super'; + + instanceMethod() => m(); + + instanceMethod2() => m(); +} + +class Sub extends Super { + // According to 7.6, static methods are not inherited. + static m() => 'sub'; + + // According to 7.7, static variables are not inherited. + static var i = 'sub'; + + // According to 7.1, instance methods include those of the + // superclass, and according to 7, it is a compile-time to have an + // instance method and static method with the same name. + static + instanceMethod() => m(); +//^^^^^^^^^^^^^^ +// [analyzer] COMPILE_TIME_ERROR.CONFLICTING_STATIC_AND_INSTANCE +// [cfe] Can't declare a member that conflicts with an inherited one. + + // According to 7.7, static variables are not inherited. + static i2() => m(); + + // According to 7.1, instance methods include those of the + // superclass, and according to 7, it is a compile-time to have an + // instance method and static method with the same + // name. Furthermore, according to 7.7 a static variable induces an + // implicit getter function (a static method). + static var instanceMethod2; + // ^^^^^^^^^^^^^^^ + // [analyzer] COMPILE_TIME_ERROR.CONFLICTING_STATIC_AND_INSTANCE + // [cfe] Can't declare a member that conflicts with an inherited one. + + foo() => 'foo'; +} + +main() { + Expect.equals('foo', new Sub().foo()); + Expect.equals('top level', m()); + Expect.equals('super', Super.m()); + Expect.equals('sub', Sub.m()); + Expect.equals('super', Super.i); + Expect.equals('sub', Sub.i); + Expect.equals('super', Super.i2); + Expect.equals('sub', Sub.i2()); + Expect.equals('super', new Super().instanceMethod()); + Expect.equals('sub', new Sub().instanceMethod()); + // ^ + // [cfe] The method 'instanceMethod' isn't defined for the class 'Sub'. + Expect.equals('super', new Super().instanceMethod2()); + Expect.equals('super', new Sub().instanceMethod2()); + // ^ + // [cfe] The method 'instanceMethod2' isn't defined for the class 'Sub'. +} diff --git a/tests/language/unsorted/fibo_test.dart b/tests/language/unsorted/fibo_test.dart new file mode 100644 index 000000000000..e6f13bd9c96f --- /dev/null +++ b/tests/language/unsorted/fibo_test.dart @@ -0,0 +1,33 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test program calculating the Fibonacci sequence. + +import "package:expect/expect.dart"; + +class Helper { + static int fibonacci(int n) { + int a = 0, b = 1, i = 0; + while (i++ < n) { + a = a + b; + b = a - b; + } + return a; + } +} + +class FiboTest { + static testMain() { + Expect.equals(0, Helper.fibonacci(0)); + Expect.equals(1, Helper.fibonacci(1)); + Expect.equals(1, Helper.fibonacci(2)); + Expect.equals(2, Helper.fibonacci(3)); + Expect.equals(3, Helper.fibonacci(4)); + Expect.equals(5, Helper.fibonacci(5)); + Expect.equals(102334155, Helper.fibonacci(40)); + } +} + +main() { + FiboTest.testMain(); +} diff --git a/tests/language/unsorted/first_test.dart b/tests/language/unsorted/first_test.dart new file mode 100644 index 000000000000..783dd2e61a78 --- /dev/null +++ b/tests/language/unsorted/first_test.dart @@ -0,0 +1,14 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// First dart test program. + +class FirstTest { + static testMain() { + return 42; + } +} + +main() { + FirstTest.testMain(); +} diff --git a/tests/language/unsorted/fixed_length_test.dart b/tests/language/unsorted/fixed_length_test.dart new file mode 100644 index 000000000000..ee4eb1521f12 --- /dev/null +++ b/tests/language/unsorted/fixed_length_test.dart @@ -0,0 +1,27 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +// Regression test for https://code.google.com/p/dart/issues/detail?id=7994. + +void main() { + Expect.equals(-1, foo()); +} + +int foo() { + var list = List.filled(1024, 0); + + for (int i = 0; i < list.length; i++) list[i] = -i; + + for (int n = list.length; n > 1; n--) { + for (int i = 0; i < n - 1; i++) { + if (list[i] > list[i + 1]) { + return list[i + 1]; + } + } + } + + throw "unreachable"; +} diff --git a/tests/language/unsorted/flatten_test.dart b/tests/language/unsorted/flatten_test.dart new file mode 100644 index 000000000000..2ff13e9531e0 --- /dev/null +++ b/tests/language/unsorted/flatten_test.dart @@ -0,0 +1,41 @@ +// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; + +class Derived implements Future { + noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); +} + +class FixedPoint implements Future> { + noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); +} + +class Divergent implements Future>> { + noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); +} + +test() async { + // flatten(Derived) = int + int x = await new Derived(); //# 01: runtime error + Future f() async => new Derived(); //# 02: ok + Future f() async { return new Derived(); } //# 03: ok + Future x = (() async => new Derived())(); //# 04: runtime error + + // flatten(FixedPoint) = FixedPoint + FixedPoint x = await new FixedPoint(); //# 05: runtime error + Future> f() async => new FixedPoint(); //# 06: ok + Future> f() async { return new FixedPoint(); } //# 07: ok + Future> x = (() async => new FixedPoint())(); //# 08: runtime error + + // flatten(Divergent) = Divergent> + Divergent> x = await new Divergent(); //# 09: runtime error + Future>> f() async => new Divergent(); //# 10: ok + Future>> f() async { return new Divergent(); } //# 11: ok + Future>> x = (() async => new Divergent())(); //# 12: runtime error +} + +main() { + test(); +} diff --git a/tests/language/unsorted/forwarding_semi_stub_test.dart b/tests/language/unsorted/forwarding_semi_stub_test.dart new file mode 100644 index 000000000000..12db5f8076d0 --- /dev/null +++ b/tests/language/unsorted/forwarding_semi_stub_test.dart @@ -0,0 +1,26 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +class B { + void f(num x) {} +} + +abstract class I { + void f(T x); +} + +class C extends B implements I { + // This method is a "forwarding semi-stub"--the front end needs to add an + // implementation to it that performs type checking and forwards to B::f. + void f(num x); +} + +main() { + I i = new C(); + Expect.throwsTypeError(() { + i.f('oops'); + }); +} diff --git a/tests/language/unsorted/future_or_function_test.dart b/tests/language/unsorted/future_or_function_test.dart new file mode 100644 index 000000000000..2fddb22dee12 --- /dev/null +++ b/tests/language/unsorted/future_or_function_test.dart @@ -0,0 +1,10 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; +import 'package:expect/expect.dart'; + +main() { + Expect.subtype>(); +} diff --git a/tests/language/unsorted/fuzzy_arrows_test.dart b/tests/language/unsorted/fuzzy_arrows_test.dart new file mode 100644 index 000000000000..4cbe86c1502b --- /dev/null +++ b/tests/language/unsorted/fuzzy_arrows_test.dart @@ -0,0 +1,21 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Fuzzy arrows will be eliminated from Dart 2.0 soon. This test checks that +// implementations have properly removed fuzzy arrow support, both at compile +// time and at run time. See dartbug.com/29630 for a detailed explanation. + +import "package:expect/expect.dart"; + +typedef DynamicToDynamic(x); +typedef NeverToDynamic(Never x); + +num numToNum(num x) => x; + +main() { + DynamicToDynamic x = numToNum; //# 01: compile-time error + NeverToDynamic x = numToNum; //# 02: ok + Expect.isFalse(numToNum is DynamicToDynamic); //# 03: ok + Expect.isTrue(numToNum is NeverToDynamic); //# 04: ok +} diff --git a/tests/language/unsorted/gc_test.dart b/tests/language/unsorted/gc_test.dart new file mode 100644 index 000000000000..ecb39603e4c8 --- /dev/null +++ b/tests/language/unsorted/gc_test.dart @@ -0,0 +1,19 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Testing GC, issue 1469. + +main() { + var div; + for (int i = 0; i < 200; ++i) { + List l = new List.filled(1000000, null); + var m = 2; + div = (_) { + var b = l; // Was causing OutOfMemory. + }; + var lSmall = new List.filled(3, null); + // Circular reference between new and old gen objects. + lSmall[0] = l; + l[0] = lSmall; + } +} diff --git a/tests/language/unsorted/guess_cid_test.dart b/tests/language/unsorted/guess_cid_test.dart new file mode 100644 index 000000000000..9d62a8a8719b --- /dev/null +++ b/tests/language/unsorted/guess_cid_test.dart @@ -0,0 +1,90 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test program to test cid guessing optimizations. +// VMOptions=--optimization-counter-threshold=10 --no-background-compilation + +import "package:expect/expect.dart"; + +main() { + // Warmup optimizes methods. + for (int i = 0; i < 100; i++) { + Expect.equals(i, compareInt(i)); + Expect.equals(i.toDouble(), compareDouble(i.toDouble())); + Expect.equals(i, binOpInt(i, i)); + Expect.equals(i.toDouble(), binOpDouble(i.toDouble(), i.toDouble())); + } + Expect.equals(3, compareInt(3)); + Expect.equals(-2, compareInt(-2)); + Expect.equals(0, compareInt(-1)); + + Expect.equals(3, binOpInt(3, 3)); + Expect.equals(0, binOpInt(-2, -2)); + + Expect.equals(3.0, binOpDouble(3.0, 3.0)); + Expect.equals(0.0, binOpDouble(-2.0, -2.0)); + + Expect.equals(3.0, compareDouble(3.0)); + Expect.equals(-2.0, compareDouble(-2.0)); + Expect.equals(0.0, compareDouble(-1.0)); + + testOSR(); +} + +int compareInt(int i) { + if (i < 0) { + // Not visited in before optimization. + // Guess cid of comparison below. + if (i == -1) return 0; + } + return i; +} + +double compareDouble(double i) { + if (i < 0.0) { + // Not visited in before optimization. + // Guess cid of comparison below. + if (i == -1.0) return 0.0; + } + return i; +} + +int binOpInt(int i, int x) { + if (i < 0) { + // Not visited in before optimization. + // Guess cid of binary operation below. + return x + 2; + } + return i; +} + +double binOpDouble(double i, double x) { + if (i < 0.0) { + // Not visited in before optimization. + // Guess cid of binary operation below. + return x + 2.0; + } + return i; +} + +testOSR() { + // Foul up IC data in integer's unary minus. + var y = -0x80000000; + Expect.equals( + (0x7fffffffffffffff + 2) * 10, testLoop(10, 0x7fffffffffffffff)); + // Second time no deoptimization can occur, since runtime feedback has been collected. + Expect.equals( + (0x7fffffffffffffff + 2) * 10, testLoop(10, 0x7fffffffffffffff)); +} + +testLoop(N, int x) { + for (int i = 0; i < N; ++i) { + // Will trigger OSR. Operation in loop below will use guessed cids. + } + int sum = 0; + for (int i = 0; i < N; ++i) { + // Guess 'x' is Smi, but is actually Mint: deoptimize. + sum += x + 2; + } + return sum; +} diff --git a/tests/language/unsorted/gvn_field_access_test.dart b/tests/language/unsorted/gvn_field_access_test.dart new file mode 100644 index 000000000000..cf124b17eaf1 --- /dev/null +++ b/tests/language/unsorted/gvn_field_access_test.dart @@ -0,0 +1,21 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +class A { + var y = 0; + foo(x) { + var t = this.y; + if (t < x) { + for (int i = this.y; i < x; i++) y++; + } + // dart2js was reusing the 't' from above. + return this.y; + } +} + +void main() { + Expect.equals(3, new A().foo(3)); +} diff --git a/tests/language/unsorted/gvn_interceptor_test.dart b/tests/language/unsorted/gvn_interceptor_test.dart new file mode 100644 index 000000000000..51f109edf6fb --- /dev/null +++ b/tests/language/unsorted/gvn_interceptor_test.dart @@ -0,0 +1,17 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +foo(a, index) { + if (a.length < index) { + for (int i = a.length; i <= index; i++) a.add(i); + } + // dart2js was reusing the a.length from above. + return a[a.length - 1]; +} + +void main() { + Expect.equals(3, foo([0], 3)); +} diff --git a/tests/language/unsorted/gvn_test.dart b/tests/language/unsorted/gvn_test.dart new file mode 100644 index 000000000000..a52944dcedd2 --- /dev/null +++ b/tests/language/unsorted/gvn_test.dart @@ -0,0 +1,23 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +class A { + int x = 0; + + foo(i) { + var start = x; + do { + x++; + i++; + } while (i != 10); + } +} + +main() { + var a = new A(); + a.foo(0); + Expect.equals(10, a.x); +} diff --git a/tests/language/unsorted/hash_code_mangling_test.dart b/tests/language/unsorted/hash_code_mangling_test.dart new file mode 100644 index 000000000000..615da7bd685f --- /dev/null +++ b/tests/language/unsorted/hash_code_mangling_test.dart @@ -0,0 +1,19 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +class Foo { + var $identityHash; +} + +void main() { + Foo foo = new Foo(); + foo.$identityHash = 'fisk'; + Expect.isTrue(foo.$identityHash is String); + int hash = foo.hashCode; + Expect.isTrue(hash is int); + Expect.isTrue(foo.$identityHash is String); + Expect.equals(hash, foo.hashCode); +} diff --git a/tests/language/unsorted/hello_dart_test.dart b/tests/language/unsorted/hello_dart_test.dart new file mode 100644 index 000000000000..d53705baa698 --- /dev/null +++ b/tests/language/unsorted/hello_dart_test.dart @@ -0,0 +1,16 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Simple test program invoked with an option to eagerly +// compile all code that is loaded in the isolate. +// VMOptions=--compile_all + +class HelloDartTest { + static testMain() { + print("Hello, Darter!"); + } +} + +main() { + HelloDartTest.testMain(); +} diff --git a/tests/language/unsorted/hello_script_lib.dart b/tests/language/unsorted/hello_script_lib.dart new file mode 100644 index 000000000000..35ecc6a17e56 --- /dev/null +++ b/tests/language/unsorted/hello_script_lib.dart @@ -0,0 +1,19 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Testing a simple script importing a library. +// This file contains the library. + +library HelloScriptLib; + +import "package:expect/expect.dart"; +part "hello_script_lib_source.dart"; + +class HelloLib { + static doTest() { + x = 17; + Expect.equals(17, x++); + print("Hello from Lib!"); + } +} diff --git a/tests/language/unsorted/hello_script_lib_source.dart b/tests/language/unsorted/hello_script_lib_source.dart new file mode 100644 index 000000000000..8c74bc4cc84b --- /dev/null +++ b/tests/language/unsorted/hello_script_lib_source.dart @@ -0,0 +1,12 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Testing a simple script importing a library. +// This file contains a source file included from the library. + +// A top-level variable being accessed both from the library and the importer. + +part of HelloScriptLib; + +var x; diff --git a/tests/language/unsorted/hello_script_test.dart b/tests/language/unsorted/hello_script_test.dart new file mode 100644 index 000000000000..b9f004e35526 --- /dev/null +++ b/tests/language/unsorted/hello_script_test.dart @@ -0,0 +1,18 @@ +#! This is currently only a comment. +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Testing a simple script importing a library. +// This file contains the script (aka root library). + +library HelloScriptTest.dart; + +import "package:expect/expect.dart"; +import "hello_script_lib.dart"; + +main() { + HelloLib.doTest(); + Expect.equals(18, x); + print("Hello done."); +} diff --git a/tests/language/unsorted/illegal_declaration_test.dart b/tests/language/unsorted/illegal_declaration_test.dart new file mode 100644 index 000000000000..6b8714bf8b34 --- /dev/null +++ b/tests/language/unsorted/illegal_declaration_test.dart @@ -0,0 +1,7 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +[ //# 01: syntax error + +main() {} diff --git a/tests/language/unsorted/illegal_invocation_lib.dart b/tests/language/unsorted/illegal_invocation_lib.dart new file mode 100644 index 000000000000..0d1b8df44292 --- /dev/null +++ b/tests/language/unsorted/illegal_invocation_lib.dart @@ -0,0 +1,3 @@ +library foo; + +foo() {} diff --git a/tests/language/unsorted/illegal_invocation_runtime_test.dart b/tests/language/unsorted/illegal_invocation_runtime_test.dart new file mode 100644 index 000000000000..41f46b059445 --- /dev/null +++ b/tests/language/unsorted/illegal_invocation_runtime_test.dart @@ -0,0 +1,18 @@ +// TODO(multitest): This was automatically migrated from a multitest and may +// contain strange or dead code. + +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test program for constructors and initializers. +// +// Test for issue 1393. Invoking a library prefix name caused an internal error +// in dartc. + + + +main() { + // probably what the user meant was foo.foo(), but the qualifier refers + // to the library prefix, not the method defined within the library. + +} diff --git a/tests/language/unsorted/illegal_invocation_test.dart b/tests/language/unsorted/illegal_invocation_test.dart new file mode 100644 index 000000000000..7af94798f0c0 --- /dev/null +++ b/tests/language/unsorted/illegal_invocation_test.dart @@ -0,0 +1,18 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test program for constructors and initializers. +// +// Test for issue 1393. Invoking a library prefix name caused an internal error +// in dartc. + +import "illegal_invocation_lib.dart" as foo; + +main() { + // probably what the user meant was foo.foo(), but the qualifier refers + // to the library prefix, not the method defined within the library. + foo(); +//^^^ +// [analyzer] COMPILE_TIME_ERROR.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT +// [cfe] A prefix can't be used as an expression. +} diff --git a/tests/language/unsorted/implicit_scope_test.dart b/tests/language/unsorted/implicit_scope_test.dart new file mode 100644 index 000000000000..49d0dd95c03d --- /dev/null +++ b/tests/language/unsorted/implicit_scope_test.dart @@ -0,0 +1,40 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Test that if, while etc create an implicit scope if the body +// is not a compound statement. + +import "package:expect/expect.dart"; + +class ImplicitScopeTest { + static bool alwaysTrue() { + return 1 + 1 == 2; + } + + static testMain() { + var a = "foo"; + var b; + if (alwaysTrue()) + var a = "bar"; + else + var b = a; + Expect.equals("foo", a); + Expect.equals(null, b); + + while (!alwaysTrue()) var a = "bar", b = "baz"; + Expect.equals("foo", a); + Expect.equals(null, b); + + for (int i = 0; i < 10; i++) var a = "bar", b = "baz"; + Expect.equals("foo", a); + Expect.equals(null, b); + + do var a = "bar", b = "baz"; while ("black" == "white"); + Expect.equals("foo", a); + Expect.equals(null, b); + } +} + +main() { + ImplicitScopeTest.testMain(); +} diff --git a/tests/language/unsorted/index_assign_operator_infer_return_type_test.dart b/tests/language/unsorted/index_assign_operator_infer_return_type_test.dart new file mode 100644 index 000000000000..357c281a8fe7 --- /dev/null +++ b/tests/language/unsorted/index_assign_operator_infer_return_type_test.dart @@ -0,0 +1,20 @@ +// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +class C { + dynamic operator []=(dynamic index, dynamic value) {} +} + +abstract class I { + void operator []=(dynamic index, dynamic value) {} +} + +class D extends C implements I { + // Even though `C` and `I` define different return types for `operator[]=`, it + // should still be possible to infer a return type here, since the return type + // of `operator[]=` is always inferred as `void`. + operator []=(dynamic index, dynamic value) {} +} + +main() {} diff --git a/tests/language/unsorted/indirect_const_null_test.dart b/tests/language/unsorted/indirect_const_null_test.dart new file mode 100644 index 000000000000..51616143018a --- /dev/null +++ b/tests/language/unsorted/indirect_const_null_test.dart @@ -0,0 +1,10 @@ +// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +main() { + const NULL = 1 == 1 ? null : false; + Expect.isNull(NULL); +} diff --git a/tests/language/unsorted/inference_enum_list_test.dart b/tests/language/unsorted/inference_enum_list_test.dart new file mode 100644 index 000000000000..dc7b7bd36512 --- /dev/null +++ b/tests/language/unsorted/inference_enum_list_test.dart @@ -0,0 +1,14 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +enum E1 { a, b } +enum E2 { a, b } + +var v = [E1.a, E2.b]; + +main() { + // Test that v is `List`, so any of these assignemnts are OK. + v[0] = 0; + v[1] = '1'; +} diff --git a/tests/language/unsorted/inference_list_or_null_test.dart b/tests/language/unsorted/inference_list_or_null_test.dart new file mode 100644 index 000000000000..1e8bd9c14f6a --- /dev/null +++ b/tests/language/unsorted/inference_list_or_null_test.dart @@ -0,0 +1,18 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Regression test for dart2js that used to statically inline the length of an +// array held in a variable when it could, even if that variable could +// be null. + +import "package:expect/expect.dart"; + +var list; + +main() { + if (new DateTime.now().millisecondsSinceEpoch == 0) { + list = new List.filled(4, null); + } + Expect.throwsNoSuchMethodError(() => print(list[5])); +} diff --git a/tests/language/unsorted/intrinsified_methods_test.dart b/tests/language/unsorted/intrinsified_methods_test.dart new file mode 100644 index 000000000000..302dfb869cb4 --- /dev/null +++ b/tests/language/unsorted/intrinsified_methods_test.dart @@ -0,0 +1,43 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test program for testing the instanceof operation. + +library intrinsified_methods_test; + +import "package:expect/expect.dart"; +import 'dart:math'; + +testIsNegative() { + Expect.isFalse((12.0).isNegative); + Expect.isTrue((-12.0).isNegative); + Expect.isFalse((double.nan).isNegative); + Expect.isFalse((0.0).isNegative); + Expect.isTrue((-0.0).isNegative); + Expect.isFalse((double.infinity).isNegative); + Expect.isTrue((double.negativeInfinity).isNegative); +} + +testIsNaN() { + Expect.isFalse((1.0).isNaN); + Expect.isTrue((double.nan).isNaN); +} + +testTrigonometric() { + Expect.approxEquals(1.0, sin(pi / 2.0), 0.0001); + Expect.approxEquals(1.0, cos(0), 0.0001); + Expect.approxEquals(1.0, cos(0.0), 0.0001); +} + +void foo(int n) { + for (var i = 0; i <= n; ++i) { + Expect.equals(2.0, sqrt(4.0)); + testIsNegative(); + testIsNaN(); + testTrigonometric(); + } +} + +void main() { + foo(4000); +} diff --git a/tests/language/unsorted/inv_cse_licm_test.dart b/tests/language/unsorted/inv_cse_licm_test.dart new file mode 100644 index 000000000000..78b73edc9c75 --- /dev/null +++ b/tests/language/unsorted/inv_cse_licm_test.dart @@ -0,0 +1,459 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// VMOptions=--deterministic --optimization_counter_threshold=10 + +import 'dart:typed_data'; +import "package:expect/expect.dart"; + +// Tests a few situations in which invariant instructions +// can be subject to CSE and LICM. + +@pragma('vm:never-inline') +int cse1(Int32List? a, int n) { + int x = a![0]; + for (int i = 0; i < n; i++) { + // The a[0] null check, bounds check, and the actual load can be + // CSEed with the instructions above even if loop is not taken. + x += a[0] * a[i]; + } + return x; +} + +@pragma('vm:never-inline') +int cse2(Int32List? a, int n) { + int x = a![0]; + for (int i = 0; i < n; i++) { + // The a[0] null check, bounds check, but not the actual load can be + // CSEed with the instructions above, since the value of the load + // changes in the loop. + a[i] = a[0] + 1; + } + return x; +} + +@pragma('vm:never-inline') +int licm1(Int32List? a, int n) { + int x = 0; + for (int i = 0; i < n; i++) { + // The a[0] null check, bounds check, and the actual load cannot + // be LICMed, since the loop may be non-taken. + x += a![0] * a[i]; + } + return x; +} + +@pragma('vm:never-inline') +int licm2(Int32List? a) { + int x = 0; + for (int i = 0; i < 16; i++) { + // The a[0] null check, bounds check, and the actual load can be + // LICMed, since the loop is always-taken. + x += a![0] * a[i]; + } + return x; +} + +@pragma('vm:never-inline') +int licm3(Int32List? a, bool cond) { + int x = 0; + for (int i = 0; i < 16; i++) { + // The a[0] null check, bounds check, and the actual load cannot + // be LICMed, since the condition may be non-taken (and we don't + // hoist invariant conditions). + if (cond) x += a![0] * a[i]; + } + return x; +} + +@pragma('vm:never-inline') +int licm3_brk(Int32List? a, bool cond) { + int x = 0; + for (int i = 0; i < 16; i++) { + // The a[0] null check, bounds check, and the actual load cannot + // be LICMed, since the condition may be taken (and we don't + // hoist invariant conditions). + if (cond) break; + x += a![0] * a[i]; + } + return x; +} + +int global = -1; + +@pragma('vm:never-inline') +int licm4(Int32List? a) { + int x = 0; + for (int i = 0; i < 16; i++) { + // The a[0] null check, bounds check, and the actual load cannot + // be LICMed, since something visible happens before an exception + // may be thrown. + global++; + x += a![0] * a[i]; + } + return x; +} + +@pragma('vm:never-inline') +int licm5(Int32List? a) { + int x = 0; + // Anything in the loop header can be LICMed. + for (int i = 0; i < a![1]; i++) { + x++; + } + return x; +} + +@pragma('vm:never-inline') +int licm6(Int32List? a, int n) { + int x = 0; + int i = 0; + do { + // The a[0] null check, bounds check, and the actual load can be + // LICMed, since this "header" is always-taken. + x += a![0] * a[i++]; + } while (i < n); + return x; +} + +@pragma('vm:never-inline') +int licm7(Int32List? a, int n) { + int x = 0; + int i = 0; + while (true) { + // The a[0] null check, bounds check, and the actual load can be + // LICMed, since this "header" is always-taken. + x += a![0] * a[i++]; + if (i >= n) break; + } + return x; +} + +@pragma('vm:never-inline') +int licm8(Int32List? a, int n) { + int x = 0; + int i = 0; + while (true) { + if (i >= n) break; + // No LICM at this point, loop body may not be taken. + x += a![0] * a[i++]; + } + return x; +} + +@pragma('vm:never-inline') +int licm9(Int32List? a) { + int x = 0; + int i = 0; + while (true) { + if (i >= 16) break; + // The a[0] null check, bounds check, and the actual load can be + // LICMed, since the loop is always-taken. + x += a![0] * a[i++]; + } + return x; +} + +@pragma('vm:never-inline') +int licm10(Int32List? a, bool cond) { + int x = 0; + int i = 0; + while (true) { + if (i >= 16) break; + // The a[0] null check, bounds check, and the actual load cannot + // be LICMed, since the condition may be non-taken (and we don't + // hoist invariant conditions). + if (cond) x += a![0] * a[i]; + i++; + } + return x; +} + +@pragma('vm:never-inline') +int licm10_brk(Int32List? a, bool cond) { + int x = 0; + int i = 0; + while (true) { + if (i >= 16) break; + // The a[0] null check, bounds check, and the actual load cannot + // be LICMed, since the condition may be taken (and we don't + // hoist invariant conditions). + if (cond) break; + x += a![0] * a[i++]; + } + return x; +} + +@pragma('vm:never-inline') +int licm11(Int32List? a) { + int x = 0; + while (true) { + // Anything in the loop header can be LICMed. + if (x > a![1]) break; + x++; + } + return x; +} + +@pragma('vm:never-inline') +int foo() { + return global--; +} + +@pragma('vm:never-inline') +int licm12(Int32List? a) { + int x = 0; + int i = 0; + // Side-effect loop bound. + for (int i = 0; i < foo(); i++) { + x += a![0] * a[i++]; + } + return x; +} + +doTests() { + var x = new Int32List(0); + var a = new Int32List(16); + for (int i = 0; i < 16; i++) { + a[i] = i + 1; + } + + Expect.throwsTypeError(() { + cse1(null, 0); + }); + Expect.throwsTypeError(() { + cse1(null, 1); + }); + Expect.throws(() { + cse1(x, 0); + }, (e) { + return e is RangeError; + }); + Expect.throws(() { + cse1(x, 1); + }, (e) { + return e is RangeError; + }); + Expect.equals(1, cse1(a, 0)); + Expect.equals(137, cse1(a, 16)); + + Expect.throwsTypeError(() { + cse2(null, 0); + }); + Expect.throwsTypeError(() { + cse2(null, 1); + }); + Expect.throws(() { + cse2(x, 0); + }, (e) { + return e is RangeError; + }); + Expect.throws(() { + cse2(x, 1); + }, (e) { + return e is RangeError; + }); + Expect.equals(1, cse2(a, 0)); + Expect.equals(1, cse2(a, 16)); + Expect.equals(2, a[0]); + for (int i = 1; i < 16; i++) { + Expect.equals(3, a[i]); + } + + Expect.equals(0, licm1(null, 0)); + Expect.throwsTypeError(() { + licm1(null, 1); + }); + Expect.equals(0, licm1(x, 0)); + Expect.throws(() { + licm1(x, 1); + }, (e) { + return e is RangeError; + }); + Expect.equals(0, licm1(a, 0)); + Expect.equals(94, licm1(a, 16)); + + Expect.throwsTypeError(() { + licm2(null); + }); + Expect.throws(() { + licm2(x); + }, (e) { + return e is RangeError; + }); + Expect.equals(94, licm2(a)); + + Expect.equals(0, licm3(null, false)); + Expect.throwsTypeError(() { + licm3(null, true); + }); + Expect.equals(0, licm3(x, false)); + Expect.throws(() { + licm3(x, true); + }, (e) { + return e is RangeError; + }); + Expect.equals(0, licm3(a, false)); + Expect.equals(94, licm3(a, true)); + + Expect.equals(0, licm3_brk(null, true)); + Expect.throwsTypeError(() { + licm3_brk(null, false); + }); + Expect.equals(0, licm3_brk(x, true)); + Expect.throws(() { + licm3_brk(x, false); + }, (e) { + return e is RangeError; + }); + Expect.equals(0, licm3_brk(a, true)); + Expect.equals(94, licm3_brk(a, false)); + + global = 0; + Expect.throwsTypeError(() { + licm4(null); + }); + Expect.equals(1, global); + Expect.throws(() { + licm4(x); + }, (e) { + return e is RangeError; + }); + Expect.equals(2, global); + Expect.equals(94, licm4(a)); + Expect.equals(18, global); + + Expect.throwsTypeError(() { + licm5(null); + }); + Expect.throws(() { + licm5(x); + }, (e) { + return e is RangeError; + }); + Expect.equals(3, licm5(a)); + + Expect.throwsTypeError(() { + licm6(null, 0); + }); + Expect.throwsTypeError(() { + licm6(null, 1); + }); + Expect.throws(() { + licm6(x, 0); + }, (e) { + return e is RangeError; + }); + Expect.throws(() { + licm6(x, 1); + }, (e) { + return e is RangeError; + }); + Expect.equals(4, licm6(a, 0)); + Expect.equals(94, licm6(a, 16)); + + Expect.throwsTypeError(() { + licm7(null, 0); + }); + Expect.throwsTypeError(() { + licm7(null, 1); + }); + Expect.throws(() { + licm7(x, 0); + }, (e) { + return e is RangeError; + }); + Expect.throws(() { + licm7(x, 1); + }, (e) { + return e is RangeError; + }); + Expect.equals(4, licm7(a, 0)); + Expect.equals(94, licm7(a, 16)); + + Expect.equals(0, licm8(null, 0)); + Expect.throwsTypeError(() { + licm8(null, 1); + }); + Expect.equals(0, licm8(x, 0)); + Expect.throws(() { + licm8(x, 1); + }, (e) { + return e is RangeError; + }); + Expect.equals(0, licm8(a, 0)); + Expect.equals(94, licm8(a, 16)); + + Expect.throwsTypeError(() { + licm9(null); + }); + Expect.throws(() { + licm9(x); + }, (e) { + return e is RangeError; + }); + Expect.equals(94, licm9(a)); + + Expect.equals(0, licm10(null, false)); + Expect.throwsTypeError(() { + licm10(null, true); + }); + Expect.equals(0, licm10(x, false)); + Expect.throws(() { + licm10(x, true); + }, (e) { + return e is RangeError; + }); + Expect.equals(0, licm10(a, false)); + Expect.equals(94, licm10(a, true)); + + Expect.equals(0, licm10_brk(null, true)); + Expect.throwsTypeError(() { + licm10_brk(null, false); + }); + Expect.equals(0, licm10_brk(x, true)); + Expect.throws(() { + licm10_brk(x, false); + }, (e) { + return e is RangeError; + }); + Expect.equals(0, licm10_brk(a, true)); + Expect.equals(94, licm10_brk(a, false)); + + Expect.throwsTypeError(() { + licm11(null); + }); + Expect.throws(() { + licm11(x); + }, (e) { + return e is RangeError; + }); + Expect.equals(4, licm11(a)); + + global = 0; + Expect.equals(0, licm12(null)); + Expect.equals(-1, global); + Expect.equals(0, licm12(x)); + Expect.equals(-2, global); + global = 16; + Expect.throwsTypeError(() { + licm12(null); + }); + Expect.equals(15, global); + Expect.throws(() { + licm12(x); + }, (e) { + return e is RangeError; + }); + Expect.equals(14, global); + Expect.equals(28, licm12(a)); + Expect.equals(8, global); +} + +main() { + // Repeat to enter JIT (when applicable). + for (int i = 0; i < 20; i++) { + doTests(); + } +} diff --git a/tests/language/unsorted/invalid_cast_runtime_1_test.dart b/tests/language/unsorted/invalid_cast_runtime_1_test.dart new file mode 100644 index 000000000000..179a7390d083 --- /dev/null +++ b/tests/language/unsorted/invalid_cast_runtime_1_test.dart @@ -0,0 +1,36 @@ +// TODO(multitest): This was automatically migrated from a multitest and may +// contain strange or dead code. + +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +class C { + C(); + factory C.fact() => D(); + factory C.fact2() = D; + C.nonFact(); + C.nonFact2() : this.nonFact(); + static void staticFunction(int i) {} +} + +class D extends C {} + +void topLevelFunction(int i) {} + +test() { + void localFunction(int i) {} + + + + + D e = new C.fact() as D; + + + + + + +} + +main() {} diff --git a/tests/language/unsorted/invalid_cast_runtime_2_test.dart b/tests/language/unsorted/invalid_cast_runtime_2_test.dart new file mode 100644 index 000000000000..7f6120c949f9 --- /dev/null +++ b/tests/language/unsorted/invalid_cast_runtime_2_test.dart @@ -0,0 +1,36 @@ +// TODO(multitest): This was automatically migrated from a multitest and may +// contain strange or dead code. + +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +class C { + C(); + factory C.fact() => D(); + factory C.fact2() = D; + C.nonFact(); + C.nonFact2() : this.nonFact(); + static void staticFunction(int i) {} +} + +class D extends C {} + +void topLevelFunction(int i) {} + +test() { + void localFunction(int i) {} + + + + + + D f = new C.fact2() as D; + + + + + +} + +main() {} diff --git a/tests/language/unsorted/invalid_cast_runtime_test.dart b/tests/language/unsorted/invalid_cast_runtime_test.dart new file mode 100644 index 000000000000..44f585142a99 --- /dev/null +++ b/tests/language/unsorted/invalid_cast_runtime_test.dart @@ -0,0 +1,36 @@ +// TODO(multitest): This was automatically migrated from a multitest and may +// contain strange or dead code. + +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +class C { + C(); + factory C.fact() => D(); + factory C.fact2() = D; + C.nonFact(); + C.nonFact2() : this.nonFact(); + static void staticFunction(int i) {} +} + +class D extends C {} + +void topLevelFunction(int i) {} + +test() { + void localFunction(int i) {} + + + + + + + + + + + +} + +main() {} diff --git a/tests/language/unsorted/invalid_cast_test.dart b/tests/language/unsorted/invalid_cast_test.dart new file mode 100644 index 000000000000..c3b7747098d9 --- /dev/null +++ b/tests/language/unsorted/invalid_cast_test.dart @@ -0,0 +1,66 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +class C { + C(); + factory C.fact() => D(); + factory C.fact2() = D; + C.nonFact(); + C.nonFact2() : this.nonFact(); + static void staticFunction(int i) {} +} + +class D extends C {} + +void topLevelFunction(int i) {} + +test() { + void localFunction(int i) {} + List a = []; + // ^^^^^^^^^^ + // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT + // ^ + // [cfe] A value of type 'List' can't be assigned to a variable of type 'List'. + Map b = {}; + // ^^^^^^^^^^^^^^^^^^ + // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT + // ^ + // [cfe] A value of type 'Map' can't be assigned to a variable of type 'Map'. + Map c = {}; + // ^^^^^^^^^^^^^^^ + // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT + // ^ + // [cfe] A value of type 'Map' can't be assigned to a variable of type 'Map'. + int Function(Object) d = (int i) => i; + // ^^^^^^^^^^^^ + // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT + // [cfe] A value of type 'int Function(int)' can't be assigned to a variable of type 'int Function(Object)'. + D e = new C.fact() as D; + D f = new C.fact2() as D; + D g = new C.nonFact(); + // ^^^^^^^^^^^^^^^ + // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT + // ^ + // [cfe] A value of type 'C' can't be assigned to a variable of type 'D'. + D h = new C.nonFact2(); + // ^^^^^^^^^^^^^^^^ + // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT + // ^ + // [cfe] A value of type 'C' can't be assigned to a variable of type 'D'. + void Function(Object) i = C.staticFunction; + // ^^^^^^^^^^^^^^^^ + // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT + // ^ + // [cfe] A value of type 'void Function(int)' can't be assigned to a variable of type 'void Function(Object)'. + void Function(Object) j = topLevelFunction; + // ^^^^^^^^^^^^^^^^ + // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT + // [cfe] A value of type 'void Function(int)' can't be assigned to a variable of type 'void Function(Object)'. + void Function(Object) k = localFunction; + // ^^^^^^^^^^^^^ + // [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT + // [cfe] A value of type 'void Function(int)' can't be assigned to a variable of type 'void Function(Object)'. +} + +main() {} diff --git a/tests/language/unsorted/invalid_type_argument_count_runtime_test.dart b/tests/language/unsorted/invalid_type_argument_count_runtime_test.dart new file mode 100644 index 000000000000..a0959a817355 --- /dev/null +++ b/tests/language/unsorted/invalid_type_argument_count_runtime_test.dart @@ -0,0 +1,44 @@ +// TODO(multitest): This was automatically migrated from a multitest and may +// contain strange or dead code. + +// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Test top level field. +dynamic // Formatter shouldn't join this line. + + x1 = 42; + +class Foo { + // Test class member. + dynamic // Formatter shouldn't join this line. + + x2 = 42; + + Foo() { + print(x2); + } +} + +main() { + print(x1); + + new Foo(); + + // Test local variable. + dynamic // Formatter shouldn't join this line. + + x3 = 42; + print(x3); + + foo(42); +} + +// Test parameter. +void foo( + dynamic // Formatter shouldn't join this line. + + x4) { + print(x4); +} diff --git a/tests/language/unsorted/invalid_type_argument_count_test.dart b/tests/language/unsorted/invalid_type_argument_count_test.dart new file mode 100644 index 000000000000..3a93da26446d --- /dev/null +++ b/tests/language/unsorted/invalid_type_argument_count_test.dart @@ -0,0 +1,44 @@ +// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Test top level field. +dynamic x1 = 42; +// [error line 6, column 1, length 12] +// [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS +// [cfe] Expected 0 type arguments. + +class Foo { + // Test class member. + dynamic x2 = 42; +// [error line 13, column 3, length 12] +// [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS +// [cfe] Expected 0 type arguments. + + Foo() { + print(x2); + } +} + +main() { + print(x1); + + new Foo(); + + // Test local variable. + dynamic x3 = 42; +// [error line 29, column 3, length 12] +// [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS +// [cfe] Expected 0 type arguments. + print(x3); + + foo(42); +} + +// Test parameter. +void foo(dynamic x4) { +// [error line 39, column 10, length 12] +// [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS +// [cfe] Expected 0 type arguments. + print(x4); +} diff --git a/tests/language/unsorted/invocation_mirror2_test.dart b/tests/language/unsorted/invocation_mirror2_test.dart new file mode 100644 index 000000000000..d9c6fafd7670 --- /dev/null +++ b/tests/language/unsorted/invocation_mirror2_test.dart @@ -0,0 +1,18 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +class C { + late Invocation im; + noSuchMethod(im) => this.im = im; + flif() {} +} + +main() { + dynamic c = new C(); + c.flif = 42; + Expect.equals(const Symbol("flif="), c.im.memberName); + Expect.equals(42, c.im.positionalArguments[0]); +} diff --git a/tests/language/unsorted/invocation_mirror_empty_arguments_test.dart b/tests/language/unsorted/invocation_mirror_empty_arguments_test.dart new file mode 100644 index 000000000000..4b8662a1aa42 --- /dev/null +++ b/tests/language/unsorted/invocation_mirror_empty_arguments_test.dart @@ -0,0 +1,66 @@ +// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +// Validates that positional arguments are an empty immutable list. +void expectEmptyPositionalArguments(Invocation invocation) { + Expect.isTrue(invocation.positionalArguments.isEmpty); + Expect.throwsUnsupportedError(() => invocation.positionalArguments.clear()); +} + +// Validates that positional arguments are an empty immutable map. +void expectEmptyNamedArguments(Invocation invocation) { + Expect.isTrue(invocation.namedArguments.isEmpty); + Expect.throwsUnsupportedError(() => invocation.namedArguments.clear()); +} + +class Getter { + get getterThatDoesNotExist; + + noSuchMethod(invocation) { + Expect.isTrue(invocation.isGetter); + expectEmptyPositionalArguments(invocation); + expectEmptyNamedArguments(invocation); + } +} + +class Setter { + set setterThatDoesNotExist(value); + + noSuchMethod(invocation) { + Expect.isTrue(invocation.isSetter); + expectEmptyNamedArguments(invocation); + } +} + +class Method { + methodThatDoesNotExist(); + + noSuchMethod(invocation) { + Expect.isTrue(invocation.isMethod); + expectEmptyPositionalArguments(invocation); + expectEmptyNamedArguments(invocation); + } +} + +class Operator { + operator +(other); + + noSuchMethod(invocation) { + Expect.isTrue(invocation.isMethod); + expectEmptyNamedArguments(invocation); + } +} + +main() { + var g = new Getter(); + print(g.getterThatDoesNotExist); + var s = new Setter(); + print(s.setterThatDoesNotExist = 42); + var m = new Method(); + print(m.methodThatDoesNotExist()); + var o = new Operator(); + print(o + 42); // Operator that does not exist. +} diff --git a/tests/language/unsorted/invocation_mirror_test.dart b/tests/language/unsorted/invocation_mirror_test.dart new file mode 100644 index 000000000000..c02d33d2ef4e --- /dev/null +++ b/tests/language/unsorted/invocation_mirror_test.dart @@ -0,0 +1,317 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +// Invocation and noSuchMethod testing. + +Map listToNamedArguments(list) { + var iterator = list.iterator; + var result = new Map(); + while (iterator.moveNext()) { + Symbol key = iterator.current; + Expect.isTrue(iterator.moveNext()); + result[key] = iterator.current; + } + return result; +} + +/** Class with noSuchMethod that returns the mirror */ +class N { + // Storage for the last argument to noSuchMethod. + // Needed for setters, which don't evaluate to the return value. + var last; + noSuchMethod(Invocation m) => last = m; + + flif(int x) { + Expect.fail("never get here"); + } + + flaf([int x = -1]) { + Expect.fail("never get here"); + } + + flof({int y = -1}) { + Expect.fail("never get here"); + } + + get wut => this; + final int plif = 99; + int get plaf { + Expect.fail("never get here"); + return 0; + } +} + +/** As [N] but also implements 'call', so we can call it with wrong arguments.*/ +class C extends N { + call(int x) { + Expect.fail("never get here"); + } +} + +/** + * Checks the data of an Invocation. + * + * Call without optionals for getters, with only positional for setters, + * and with both optionals for everything else. + */ +testInvocationMirror(Invocation im, Symbol name, + [List? positional, List? named, List? typeArgs]) { + Expect.isTrue(im is Invocation, "is Invocation"); + Expect.equals(name, im.memberName, "name"); + if (named == null) { + Expect.isTrue(im.isAccessor, "$name:isAccessor"); + Expect.isFalse(im.isMethod, "$name:isMethod"); + if (positional == null) { + Expect.isTrue(im.isGetter, "$name:isGetter"); + Expect.isFalse(im.isSetter, "$name:isSetter"); + Expect.equals(0, im.positionalArguments.length, "$name:#positional"); + Expect.equals(0, im.namedArguments.length, "$name:#named"); + return; + } + Expect.isTrue(im.isSetter, "$name:isSetter"); + Expect.isFalse(im.isGetter, "$name:isGetter"); + Expect.equals(1, im.positionalArguments.length, "$name:#positional"); + Expect.equals( + positional[0], im.positionalArguments[0], "$name:positional[0]"); + Expect.equals(0, im.namedArguments.length, "$name:#named"); + return; + } + Map namedArguments = listToNamedArguments(named); + Expect.isTrue(im.isMethod, "$name:isMethod"); + Expect.isFalse(im.isAccessor, "$name:isAccessor"); + Expect.isFalse(im.isSetter, "$name:isSetter"); + Expect.isFalse(im.isGetter, "$name:isGetter"); + + Expect.listEquals(positional!, im.positionalArguments); + + Expect.equals( + namedArguments.length, im.namedArguments.length, "$name:#named"); + namedArguments.forEach((k, v) { + Expect.isTrue( + im.namedArguments.containsKey(k), "$name:?namedArguments[$k]"); + Expect.equals(v, im.namedArguments[k], "$name:namedArguments[$k]"); + }); + var imTypeArgs = (im as dynamic).typeArguments as List; + Expect.listEquals(typeArgs ?? [], imTypeArgs); +} + +// Test different ways that noSuchMethod can be called. +testInvocationMirrors() { + dynamic n = new N(); + dynamic c = new C(); + + // Missing property/method access. + testInvocationMirror(n.bar, const Symbol('bar')); + testInvocationMirror((n..bar = 42).last, const Symbol('bar='), [42]); + testInvocationMirror(n.bar(), const Symbol('bar'), [], []); + testInvocationMirror(n.bar(42), const Symbol('bar'), [42], []); + testInvocationMirror( + n.bar(x: 42), const Symbol('bar'), [], [const Symbol("x"), 42]); + testInvocationMirror( + n.bar(37, x: 42), const Symbol('bar'), [37], [const Symbol("x"), 42]); + + // Missing operator access. + testInvocationMirror(n + 4, const Symbol('+'), [4], []); + testInvocationMirror(n - 4, const Symbol('-'), [4], []); + testInvocationMirror(-n, const Symbol('unary-'), [], []); + testInvocationMirror(n[42], const Symbol('[]'), [42], []); + testInvocationMirror((n..[37] = 42).last, const Symbol('[]='), [37, 42], []); + + // Calling as function when it's not. + testInvocationMirror(n(), const Symbol('call'), [], []); + testInvocationMirror(n(42), const Symbol('call'), [42], []); + testInvocationMirror( + n(x: 42), const Symbol('call'), [], [const Symbol("x"), 42]); + testInvocationMirror( + n(37, x: 42), const Symbol('call'), [37], [const Symbol("x"), 42]); + + // Calling with arguments not matching existing call method. + testInvocationMirror(c(), const Symbol('call'), [], []); + testInvocationMirror(c(37, 42), const Symbol('call'), [37, 42], []); + testInvocationMirror( + c(x: 42), const Symbol('call'), [], [const Symbol("x"), 42]); + testInvocationMirror( + c(37, x: 42), const Symbol('call'), [37], [const Symbol("x"), 42]); + + // Wrong arguments to existing function. + testInvocationMirror(n.flif(), const Symbol("flif"), [], []); + testInvocationMirror(n.flif(37, 42), const Symbol("flif"), [37, 42], []); + testInvocationMirror( + n.flif(x: 42), const Symbol("flif"), [], [const Symbol("x"), 42]); + testInvocationMirror( + n.flif(37, x: 42), const Symbol("flif"), [37], [const Symbol("x"), 42]); + testInvocationMirror((n..flif = 42).last, const Symbol("flif="), [42]); + + testInvocationMirror(n.flaf(37, 42), const Symbol("flaf"), [37, 42], []); + testInvocationMirror( + n.flaf(x: 42), const Symbol("flaf"), [], [const Symbol("x"), 42]); + testInvocationMirror( + n.flaf(37, x: 42), const Symbol("flaf"), [37], [const Symbol("x"), 42]); + testInvocationMirror((n..flaf = 42).last, const Symbol("flaf="), [42]); + + testInvocationMirror(n.flof(37, 42), const Symbol("flof"), [37, 42], []); + testInvocationMirror( + n.flof(x: 42), const Symbol("flof"), [], [const Symbol("x"), 42]); + testInvocationMirror( + n.flof(37, y: 42), const Symbol("flof"), [37], [const Symbol("y"), 42]); + testInvocationMirror((n..flof = 42).last, const Symbol("flof="), [42]); + + // Reading works. + Expect.isTrue(n.flif is Function); + Expect.isTrue(n.flaf is Function); + Expect.isTrue(n.flof is Function); + + // Writing to read-only fields. + testInvocationMirror((n..wut = 42).last, const Symbol("wut="), [42]); + testInvocationMirror((n..plif = 42).last, const Symbol("plif="), [42]); + testInvocationMirror((n..plaf = 42).last, const Symbol("plaf="), [42]); + + // Trick call to n.call - wut is a getter returning n again. + testInvocationMirror(n.wut(42), const Symbol("call"), [42], []); + + // Calling noSuchMethod itself, badly. + testInvocationMirror(n.noSuchMethod(), const Symbol("noSuchMethod"), [], []); + testInvocationMirror( + n.noSuchMethod(37, 42), const Symbol("noSuchMethod"), [37, 42], []); + testInvocationMirror(n.noSuchMethod(37, x: 42), const Symbol("noSuchMethod"), + [37], [const Symbol("x"), 42]); + testInvocationMirror(n.noSuchMethod(x: 42), const Symbol("noSuchMethod"), [], + [const Symbol("x"), 42]); + + // Closurizing a method means that calling it badly will not hit the + // original receivers noSuchMethod, only the one inherited from Object + // by the closure object. + Expect.throwsNoSuchMethodError(() { + var x = n.flif; + x(37, 42); + }); + Expect.throwsNoSuchMethodError(() { + var x = c.call; + x(37, 42); + }); +} + +class M extends N { + testSelfCalls() { + // Missing property/method access. + dynamic self = this; + testInvocationMirror(self.bar, const Symbol('bar')); + testInvocationMirror(() { + self.bar = 42; + return last; + }(), const Symbol('bar='), [42]); + testInvocationMirror(self.bar(), const Symbol('bar'), [], []); + testInvocationMirror(self.bar(42), const Symbol('bar'), [42], []); + testInvocationMirror( + self.bar(x: 42), const Symbol('bar'), [], [const Symbol("x"), 42]); + testInvocationMirror(self.bar(37, x: 42), const Symbol('bar'), [37], + [const Symbol("x"), 42]); + + // Missing operator access. + testInvocationMirror(self + 4, const Symbol('+'), [4], []); + testInvocationMirror(self - 4, const Symbol('-'), [4], []); + testInvocationMirror(-self, const Symbol('unary-'), [], []); + testInvocationMirror(self[42], const Symbol('[]'), [42], []); + testInvocationMirror(() { + self[37] = 42; + return last; + }(), const Symbol('[]='), [37, 42], []); + + // Wrong arguments to existing function. + testInvocationMirror(self.flif(), const Symbol("flif"), [], []); + testInvocationMirror(self.flif(37, 42), const Symbol("flif"), [37, 42], []); + testInvocationMirror( + self.flif(x: 42), const Symbol("flif"), [], [const Symbol("x"), 42]); + testInvocationMirror(self.flif(37, x: 42), const Symbol("flif"), [37], + [const Symbol("x"), 42]); + testInvocationMirror(() { + self.flif = 42; + return last; + }(), const Symbol("flif="), [42]); + + testInvocationMirror(self.flaf(37, 42), const Symbol("flaf"), [37, 42], []); + testInvocationMirror( + self.flaf(x: 42), const Symbol("flaf"), [], [const Symbol("x"), 42]); + testInvocationMirror(self.flaf(37, x: 42), const Symbol("flaf"), [37], + [const Symbol("x"), 42]); + testInvocationMirror(() { + self.flaf = 42; + return last; + }(), const Symbol("flaf="), [42]); + + testInvocationMirror(self.flof(37, 42), const Symbol("flof"), [37, 42], []); + testInvocationMirror( + self.flof(x: 42), const Symbol("flof"), [], [const Symbol("x"), 42]); + testInvocationMirror(self.flof(37, y: 42), const Symbol("flof"), [37], + [const Symbol("y"), 42]); + testInvocationMirror(() { + self.flof = 42; + return last; + }(), const Symbol("flof="), [42]); + + // Reading works. + Expect.isTrue(self.flif is Function); + Expect.isTrue(self.flaf is Function); + Expect.isTrue(self.flof is Function); + + // Writing to read-only fields. + testInvocationMirror(() { + self.wut = 42; + return last; + }(), const Symbol("wut="), [42]); + testInvocationMirror(() { + self.plif = 42; + return last; + }(), const Symbol("plif="), [42]); + testInvocationMirror(() { + self.plaf = 42; + return last; + }(), const Symbol("plaf="), [42]); + + // Calling noSuchMethod itself, badly. + testInvocationMirror( + self.noSuchMethod(), const Symbol("noSuchMethod"), [], []); + testInvocationMirror( + self.noSuchMethod(37, 42), const Symbol("noSuchMethod"), [37, 42], []); + testInvocationMirror(self.noSuchMethod(37, x: 42), + const Symbol("noSuchMethod"), [37], [const Symbol("x"), 42]); + testInvocationMirror(self.noSuchMethod(x: 42), const Symbol("noSuchMethod"), + [], [const Symbol("x"), 42]); + + // Closurizing a method means that calling it badly will not hit the + // original receivers noSuchMethod, only the one inherited from Object + // by the closure object. + Expect.throwsNoSuchMethodError(() { + var x = self.flif; + x(37, 42); + }); + } +} + +// Test the NoSuchMethodError thrown by different incorrect calls. +testNoSuchMethodErrors() { + dynamic n = new N(); + dynamic o = new Object(); + Expect.throwsNoSuchMethodError(() => o.bar); + Expect.throwsNoSuchMethodError(() => o.bar = 42); + Expect.throwsNoSuchMethodError(() => o.bar()); + Expect.throwsNoSuchMethodError(() => o + 2); + Expect.throwsNoSuchMethodError(() => -o); + Expect.throwsNoSuchMethodError(() => o[0]); + Expect.throwsNoSuchMethodError(() => o[0] = 42); + Expect.throwsNoSuchMethodError(() => o()); + Expect.throwsNoSuchMethodError(() => o.toString = 42); + Expect.throwsNoSuchMethodError(() => o.toString(42)); + Expect.throwsNoSuchMethodError(() => o.toString(x: 37)); + Expect.throwsNoSuchMethodError(() => o.hashCode = 42); + Expect.throwsNoSuchMethodError(() => (n.flif)()); // Extracted method has no noSuchMethod. +} + +main() { + testInvocationMirrors(); + testNoSuchMethodErrors(); + new M().testSelfCalls(); +} diff --git a/tests/language/unsorted/js_properties_test.dart b/tests/language/unsorted/js_properties_test.dart new file mode 100644 index 000000000000..b93a5474c0ca --- /dev/null +++ b/tests/language/unsorted/js_properties_test.dart @@ -0,0 +1,47 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Test that JavaScript properties on Object can still be classes in +// Dart. + +import "package:expect/expect.dart"; + +void main() { + Expect.equals(42, new __defineGetter__().hello()); + Expect.equals(42, new __defineSetter__().hello()); + Expect.equals(42, new __lookupGetter__().hello()); + Expect.equals(42, new __lookupSetter__().hello()); + Expect.equals(42, new constructor().hello()); + Expect.equals(42, new hasOwnProperty().hello()); + Expect.equals(42, new isPrototypeOf().hello()); + Expect.equals(42, new propertyIsEnumerable().hello()); + Expect.equals(42, new toLocaleString().hello()); + Expect.equals(42, new toString().hello()); + Expect.equals(42, new valueOf().hello()); +} + +class Hello { + int hello() => 42; +} + +class __defineGetter__ extends Hello {} + +class __defineSetter__ extends Hello {} + +class __lookupGetter__ extends Hello {} + +class __lookupSetter__ extends Hello {} + +class constructor extends Hello {} + +class hasOwnProperty extends Hello {} + +class isPrototypeOf extends Hello {} + +class propertyIsEnumerable extends Hello {} + +class toLocaleString extends Hello {} + +class toString extends Hello {} + +class valueOf extends Hello {} diff --git a/tests/language/unsorted/keyword_type_expression_test.dart b/tests/language/unsorted/keyword_type_expression_test.dart new file mode 100644 index 000000000000..5d981efd2114 --- /dev/null +++ b/tests/language/unsorted/keyword_type_expression_test.dart @@ -0,0 +1,15 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Test that a keyword can't be used as type. Serves as regression test for +// crashes in dart2js. + +in greeting = "fisk"; // //# 01: syntax error + +main( +in greeting // //# 02: syntax error + ) { + in greeting = "fisk"; // //# 03: syntax error + print(greeting); // //# 01: continued +} diff --git a/tests/language/unsorted/large_implicit_getter_test.dart b/tests/language/unsorted/large_implicit_getter_test.dart new file mode 100644 index 000000000000..624a06368ca6 --- /dev/null +++ b/tests/language/unsorted/large_implicit_getter_test.dart @@ -0,0 +1,1375 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test program for testing compilation of large implicit getters. +// VMOptions=--optimization-counter-threshold=10 --no-background-compilation + +List panels = [ + [6853.940039224797, 6050.837897021371], + [6953.240039224797, 6050.837897021371], + [7052.5400392247975, 5885.237897021371], + [7052.5400392247975, 5719.637897021372], + [7151.840039224798, 5885.237897021371], + [7052.5400392247975, 6050.837897021371], + [7052.5400392247975, 6216.43789702137], + [7052.5400392247975, 6382.03789702137], + [6953.240039224797, 6382.03789702137], + [6953.240039224797, 6216.43789702137], + [6853.940039224797, 6216.43789702137], + [6853.940039224797, 6382.03789702137], + [6754.640039224797, 6216.43789702137], + [6754.640039224797, 6382.03789702137], + [6754.640039224797, 6547.637897021369], + [6754.640039224797, 6713.237897021369], + [6655.340039224797, 6713.237897021369], + [6754.640039224797, 6878.837897021368], + [6853.940039224797, 6713.237897021369], + [6853.940039224797, 6878.837897021368], + [6953.240039224797, 6713.237897021369], + [7052.5400392247975, 6547.637897021369], + [7151.840039224798, 6713.237897021369], + [7151.840039224798, 6547.637897021369], + [7151.840039224798, 6382.03789702137], + [7251.140039224798, 6547.637897021369], + [7251.140039224798, 6713.237897021369], + [7350.440039224798, 6878.837897021368], + [7449.740039224798, 6878.837897021368], + [7449.740039224798, 6713.237897021369], + [7549.040039224798, 6547.637897021369], + [7449.740039224798, 6382.03789702137], + [7449.740039224798, 6216.43789702137], + [7549.040039224798, 6050.837897021371], + [7648.340039224799, 6216.43789702137], + [7549.040039224798, 6382.03789702137], + [7648.340039224799, 6382.03789702137], + [7747.640039224799, 6216.43789702137], + [7846.940039224799, 6382.03789702137], + [7946.240039224799, 6382.03789702137], + [7946.240039224799, 6547.637897021369], + [7846.940039224799, 6713.237897021369], + [7946.240039224799, 6713.237897021369], + [8045.540039224799, 6547.637897021369], + [8045.540039224799, 6713.237897021369], + [7946.240039224799, 6878.837897021368], + [7946.240039224799, 7044.4378970213675], + [8045.540039224799, 7210.037897021367], + [8144.8400392247995, 7375.637897021366], + [8144.8400392247995, 7541.237897021366], + [8045.540039224799, 7375.637897021366], + [8144.8400392247995, 7210.037897021367], + [8045.540039224799, 7044.4378970213675], + [7946.240039224799, 7210.037897021367], + [7846.940039224799, 7210.037897021367], + [7946.240039224799, 7375.637897021366], + [8045.540039224799, 7541.237897021366], + [8144.8400392247995, 7706.837897021365], + [8244.1400392248, 7541.237897021366], + [8343.4400392248, 7541.237897021366], + [8343.4400392248, 7706.837897021365], + [8244.1400392248, 7706.837897021365], + [4735.523842661975, 3503.497768214323], + [4636.223842661975, 3337.897768214323], + [4536.923842661975, 3337.897768214323], + [4437.623842661975, 3172.2977682143232], + [4338.323842661975, 3172.2977682143232], + [4239.023842661974, 3172.2977682143232], + [4338.323842661975, 3006.6977682143233], + [4437.623842661975, 2841.0977682143234], + [4338.323842661975, 2675.4977682143235], + [4338.323842661975, 2509.8977682143236], + [4239.023842661974, 2675.4977682143235], + [4139.723842661974, 2509.8977682143236], + [4040.4238426619745, 2344.2977682143237], + [4139.723842661974, 2178.697768214324], + [4239.023842661974, 2178.697768214324], + [4139.723842661974, 2344.2977682143237], + [4040.4238426619745, 2178.697768214324], + [4139.723842661974, 2013.0977682143237], + [4139.723842661974, 1847.4977682143235], + [4239.023842661974, 2013.0977682143237], + [4239.023842661974, 1847.4977682143235], + [4338.323842661975, 1847.4977682143235], + [4437.623842661975, 1847.4977682143235], + [4536.923842661975, 1681.8977682143234], + [4437.623842661975, 1516.2977682143232], + [4536.923842661975, 1516.2977682143232], + [4536.923842661975, 1350.697768214323], + [4437.623842661975, 1350.697768214323], + [4536.923842661975, 1185.097768214323], + [4636.223842661975, 1019.497768214323], + [4536.923842661975, 853.897768214323], + [4636.223842661975, 853.897768214323], + [4735.523842661975, 688.2977682143231], + [4636.223842661975, 522.6977682143232], + [4636.223842661975, 357.09776821432325], + [4735.523842661975, 357.09776821432325], + [4735.523842661975, 522.6977682143232], + [4636.223842661975, 688.2977682143231], + [4735.523842661975, 853.897768214323], + [4834.8238426619755, 853.897768214323], + [4735.523842661975, 1019.497768214323], + [4735.523842661975, 1185.097768214323], + [4735.523842661975, 1350.697768214323], + [4834.8238426619755, 1516.2977682143232], + [4735.523842661975, 1516.2977682143232], + [4834.8238426619755, 1350.697768214323], + [4834.8238426619755, 1185.097768214323], + [4934.123842661976, 1350.697768214323], + [5033.423842661976, 1185.097768214323], + [5033.423842661976, 1019.497768214323], + [5033.423842661976, 853.897768214323], + [4934.123842661976, 853.897768214323], + [4934.123842661976, 1019.497768214323], + [4834.8238426619755, 1019.497768214323], + [4934.123842661976, 1185.097768214323], + [5033.423842661976, 1350.697768214323], + [5132.723842661976, 1350.697768214323], + [5132.723842661976, 1185.097768214323], + [5232.023842661976, 1019.497768214323], + [5232.023842661976, 1185.097768214323], + [5331.323842661976, 1019.497768214323], + [5430.623842661977, 1019.497768214323], + [5529.923842661977, 1185.097768214323], + [5430.623842661977, 1350.697768214323], + [5430.623842661977, 1516.2977682143232], + [5529.923842661977, 1350.697768214323], + [5629.223842661977, 1350.697768214323], + [5728.523842661977, 1350.697768214323], + [5728.523842661977, 1516.2977682143232], + [5728.523842661977, 1681.8977682143234], + [5629.223842661977, 1516.2977682143232], + [5529.923842661977, 1516.2977682143232], + [5629.223842661977, 1681.8977682143234], + [5529.923842661977, 1681.8977682143234], + [5430.623842661977, 1847.4977682143235], + [5331.323842661976, 1847.4977682143235], + [5331.323842661976, 2013.0977682143237], + [5232.023842661976, 2178.697768214324], + [5132.723842661976, 2013.0977682143237], + [5132.723842661976, 2178.697768214324], + [5232.023842661976, 2013.0977682143237], + [5232.023842661976, 1847.4977682143235], + [5232.023842661976, 1681.8977682143234], + [5331.323842661976, 1681.8977682143234], + [5331.323842661976, 1516.2977682143232], + [5331.323842661976, 1350.697768214323], + [5232.023842661976, 1350.697768214323], + [5232.023842661976, 1516.2977682143232], + [5132.723842661976, 1516.2977682143232], + [5132.723842661976, 1681.8977682143234], + [5033.423842661976, 1847.4977682143235], + [5132.723842661976, 1847.4977682143235], + [5033.423842661976, 2013.0977682143237], + [4934.123842661976, 2178.697768214324], + [5033.423842661976, 2344.2977682143237], + [4934.123842661976, 2344.2977682143237], + [4834.8238426619755, 2178.697768214324], + [4834.8238426619755, 2344.2977682143237], + [4735.523842661975, 2344.2977682143237], + [4636.223842661975, 2344.2977682143237], + [4536.923842661975, 2178.697768214324], + [4437.623842661975, 2013.0977682143237], + [4338.323842661975, 2178.697768214324], + [4437.623842661975, 2344.2977682143237], + [4536.923842661975, 2509.8977682143236], + [4636.223842661975, 2675.4977682143235], + [4636.223842661975, 2509.8977682143236], + [4536.923842661975, 2675.4977682143235], + [4636.223842661975, 2841.0977682143234], + [4536.923842661975, 2841.0977682143234], + [4636.223842661975, 3006.6977682143233], + [4735.523842661975, 3172.2977682143232], + [4834.8238426619755, 3006.6977682143233], + [4735.523842661975, 2841.0977682143234], + [4735.523842661975, 3006.6977682143233], + [4636.223842661975, 3172.2977682143232], + [4735.523842661975, 3337.897768214323], + [4834.8238426619755, 3503.497768214323], + [4735.523842661975, 3669.097768214323], + [4834.8238426619755, 3834.697768214323], + [4834.8238426619755, 3669.097768214323], + [4934.123842661976, 3503.497768214323], + [5033.423842661976, 3503.497768214323], + [5033.423842661976, 3337.897768214323], + [4934.123842661976, 3337.897768214323], + [4834.8238426619755, 3172.2977682143232], + [4834.8238426619755, 3337.897768214323], + [4934.123842661976, 3172.2977682143232], + [5033.423842661976, 3006.6977682143233], + [5132.723842661976, 2841.0977682143234], + [5132.723842661976, 3006.6977682143233], + [5232.023842661976, 3172.2977682143232], + [5232.023842661976, 3337.897768214323], + [5132.723842661976, 3337.897768214323], + [5232.023842661976, 3503.497768214323], + [5331.323842661976, 3337.897768214323], + [5331.323842661976, 3503.497768214323], + [5430.623842661977, 3669.097768214323], + [5331.323842661976, 3669.097768214323], + [5430.623842661977, 3503.497768214323], + [5430.623842661977, 3337.897768214323], + [5529.923842661977, 3172.2977682143232], + [5529.923842661977, 3337.897768214323], + [5629.223842661977, 3337.897768214323], + [5728.523842661977, 3337.897768214323], + [5728.523842661977, 3503.497768214323], + [5827.823842661977, 3503.497768214323], + [5927.1238426619775, 3669.097768214323], + [6026.423842661978, 3669.097768214323], + [6125.723842661978, 3503.497768214323], + [6125.723842661978, 3669.097768214323], + [6225.023842661978, 3503.497768214323], + [6225.023842661978, 3337.897768214323], + [6324.323842661978, 3337.897768214323], + [6423.623842661978, 3503.497768214323], + [6324.323842661978, 3669.097768214323], + [6225.023842661978, 3669.097768214323], + [6324.323842661978, 3834.697768214323], + [6423.623842661978, 3834.697768214323], + [6324.323842661978, 4000.297768214323], + [6225.023842661978, 3834.697768214323], + [6125.723842661978, 3834.697768214323], + [6125.723842661978, 4000.297768214323], + [6225.023842661978, 4000.297768214323], + [6225.023842661978, 4165.897768214322], + [6225.023842661978, 4331.497768214322], + [6125.723842661978, 4165.897768214322], + [6026.423842661978, 4000.2977682143223], + [5927.1238426619775, 4165.897768214322], + [6026.423842661978, 4331.497768214322], + [6026.423842661978, 4497.097768214321], + [5927.1238426619775, 4497.097768214321], + [5827.823842661977, 4662.697768214321], + [5728.523842661977, 4828.29776821432], + [5827.823842661977, 4828.29776821432], + [5927.1238426619775, 4828.29776821432], + [5927.1238426619775, 4662.697768214321], + [5827.823842661977, 4497.097768214321], + [5927.1238426619775, 4331.497768214322], + [5827.823842661977, 4165.897768214322], + [5728.523842661977, 4331.497768214322], + [5728.523842661977, 4165.897768214322], + [5629.223842661977, 4000.2977682143223], + [5629.223842661977, 3834.6977682143224], + [5529.923842661977, 3669.0977682143225], + [5629.223842661977, 3503.4977682143226], + [5728.523842661977, 3669.0977682143225], + [5827.823842661977, 3669.0977682143225], + [5927.1238426619775, 3834.6977682143224], + [5927.1238426619775, 4000.2977682143223], + [6026.423842661978, 4165.897768214322], + [6125.723842661978, 4331.497768214322], + [6225.023842661978, 4497.097768214321], + [6225.023842661978, 4662.697768214321], + [6324.323842661978, 4662.697768214321], + [6225.023842661978, 4828.29776821432], + [6324.323842661978, 4828.29776821432], + [6423.623842661978, 4828.29776821432], + [6324.323842661978, 4993.8977682143195], + [6225.023842661978, 5159.497768214319], + [6125.723842661978, 5159.497768214319], + [6026.423842661978, 5325.097768214318], + [5927.1238426619775, 5490.697768214318], + [6026.423842661978, 5656.297768214317], + [5927.1238426619775, 5821.897768214317], + [5927.1238426619775, 5987.497768214316], + [6026.423842661978, 5987.497768214316], + [6026.423842661978, 5821.897768214317], + [5927.1238426619775, 5656.297768214317], + [5827.823842661977, 5656.297768214317], + [5827.823842661977, 5490.697768214318], + [5728.523842661977, 5490.697768214318], + [5629.223842661977, 5325.097768214318], + [5629.223842661977, 5159.497768214319], + [5529.923842661977, 4993.8977682143195], + [5529.923842661977, 5159.497768214319], + [5629.223842661977, 4993.8977682143195], + [5629.223842661977, 4828.29776821432], + [5529.923842661977, 4662.697768214321], + [5430.623842661977, 4828.29776821432], + [5529.923842661977, 4828.29776821432], + [5629.223842661977, 4662.697768214321], + [5728.523842661977, 4662.697768214321], + [5629.223842661977, 4497.097768214321], + [5728.523842661977, 4497.097768214321], + [5827.823842661977, 4331.497768214322], + [10216.161365168813, 2951.605409896135], + [10116.861365168812, 2951.605409896135], + [10017.56136516881, 3117.205409896135], + [9918.26136516881, 3117.205409896135], + [9818.961365168809, 3117.205409896135], + [9719.661365168808, 3282.8054098961347], + [9620.361365168807, 3282.8054098961347], + [9620.361365168807, 3117.205409896135], + [9521.061365168805, 2951.605409896135], + [9521.061365168805, 2786.005409896135], + [9620.361365168807, 2786.005409896135], + [9719.661365168808, 2786.005409896135], + [9818.961365168809, 2620.405409896135], + [9918.26136516881, 2786.005409896135], + [9818.961365168809, 2951.605409896135], + [9818.961365168809, 2786.005409896135], + [9719.661365168808, 2620.405409896135], + [9719.661365168808, 2454.805409896135], + [9620.361365168807, 2289.2054098961353], + [9521.061365168805, 2123.6054098961354], + [9620.361365168807, 1958.0054098961352], + [9719.661365168808, 2123.6054098961354], + [9818.961365168809, 2289.2054098961353], + [9818.961365168809, 2123.6054098961354], + [9818.961365168809, 1958.0054098961352], + [9719.661365168808, 1958.0054098961352], + [9620.361365168807, 1792.405409896135], + [9620.361365168807, 1626.805409896135], + [9521.061365168805, 1461.2054098961348], + [9421.761365168804, 1295.6054098961347], + [9521.061365168805, 1130.0054098961346], + [9521.061365168805, 964.4054098961345], + [9421.761365168804, 964.4054098961345], + [9521.061365168805, 798.8054098961346], + [9620.361365168807, 798.8054098961346], + [9620.361365168807, 964.4054098961345], + [9620.361365168807, 1130.0054098961346], + [9620.361365168807, 1295.6054098961347], + [9620.361365168807, 1461.2054098961348], + [9719.661365168808, 1295.6054098961347], + [9818.961365168809, 1130.0054098961346], + [9918.26136516881, 964.4054098961345], + [9818.961365168809, 964.4054098961345], + [9918.26136516881, 798.8054098961346], + [10017.56136516881, 633.2054098961347], + [9918.26136516881, 467.60540989613474], + [9918.26136516881, 302.0054098961348], + [10017.56136516881, 302.0054098961348], + [10116.861365168812, 136.40540989613478], + [10116.861365168812, 302.0054098961348], + [10116.861365168812, 467.60540989613474], + [10116.861365168812, 633.2054098961347], + [10216.161365168813, 633.2054098961347], + [10216.161365168813, 798.8054098961346], + [10315.461365168814, 633.2054098961347], + [10315.461365168814, 798.8054098961346], + [10414.761365168815, 798.8054098961346], + [10514.061365168816, 633.2054098961347], + [10514.061365168816, 798.8054098961346], + [10414.761365168815, 964.4054098961345], + [10315.461365168814, 964.4054098961345], + [10216.161365168813, 964.4054098961345], + [10116.861365168812, 798.8054098961346], + [10017.56136516881, 798.8054098961346], + [10116.861365168812, 964.4054098961345], + [10216.161365168813, 1130.0054098961346], + [10116.861365168812, 1130.0054098961346], + [10216.161365168813, 1295.6054098961347], + [10216.161365168813, 1461.2054098961348], + [10315.461365168814, 1626.805409896135], + [10315.461365168814, 1792.405409896135], + [10216.161365168813, 1958.0054098961352], + [10216.161365168813, 1792.405409896135], + [10116.861365168812, 1792.405409896135], + [10017.56136516881, 1958.0054098961352], + [9918.26136516881, 2123.6054098961354], + [9918.26136516881, 1958.0054098961352], + [10017.56136516881, 2123.6054098961354], + [10116.861365168812, 2123.6054098961354], + [10017.56136516881, 2289.2054098961353], + [10017.56136516881, 2454.805409896135], + [10116.861365168812, 2289.2054098961353], + [10216.161365168813, 2454.805409896135], + [10315.461365168814, 2620.405409896135], + [10315.461365168814, 2454.805409896135], + [10315.461365168814, 2289.2054098961353], + [10414.761365168815, 2454.805409896135], + [10514.061365168816, 2620.405409896135], + [10613.361365168817, 2786.005409896135], + [10514.061365168816, 2786.005409896135], + [10613.361365168817, 2620.405409896135], + [10514.061365168816, 2454.805409896135], + [10514.061365168816, 2289.2054098961353], + [10613.361365168817, 2289.2054098961353], + [10712.661365168819, 2289.2054098961353], + [10811.96136516882, 2454.805409896135], + [10911.26136516882, 2289.2054098961353], + [10811.96136516882, 2289.2054098961353], + [10712.661365168819, 2454.805409896135], + [10712.661365168819, 2620.405409896135], + [10811.96136516882, 2786.005409896135], + [10911.26136516882, 2620.405409896135], + [10911.26136516882, 2786.005409896135], + [11010.561365168822, 2620.405409896135], + [10911.26136516882, 2454.805409896135], + [10811.96136516882, 2620.405409896135], + [10712.661365168819, 2786.005409896135], + [10811.96136516882, 2951.605409896135], + [10911.26136516882, 2951.605409896135], + [10811.96136516882, 3117.205409896135], + [10712.661365168819, 2951.605409896135], + [10613.361365168817, 2951.605409896135], + [10514.061365168816, 2951.605409896135], + [10414.761365168815, 3117.205409896135], + [10414.761365168815, 2951.605409896135], + [10315.461365168814, 2786.005409896135], + [10216.161365168813, 2620.405409896135], + [10216.161365168813, 2786.005409896135], + [10315.461365168814, 2951.605409896135], + [10315.461365168814, 3117.205409896135], + [10216.161365168813, 3117.205409896135], + [10116.861365168812, 3117.205409896135], + [10017.56136516881, 3282.8054098961347], + [9918.26136516881, 3448.4054098961346], + [9818.961365168809, 3448.4054098961346], + [9818.961365168809, 3614.0054098961346], + [9719.661365168808, 3448.4054098961346], + [9818.961365168809, 3282.8054098961347], + [9719.661365168808, 3117.205409896135], + [9620.361365168807, 2951.605409896135], + [9521.061365168805, 3117.205409896135], + [9521.061365168805, 3282.8054098961347], + [9421.761365168804, 3117.205409896135], + [9421.761365168804, 3282.8054098961347], + [9322.461365168803, 3117.205409896135], + [9421.761365168804, 2951.605409896135], + [9322.461365168803, 2951.605409896135], + [9223.161365168802, 2786.005409896135], + [9322.461365168803, 2620.405409896135], + [9421.761365168804, 2454.805409896135], + [9521.061365168805, 2289.2054098961353], + [9421.761365168804, 2123.6054098961354], + [9421.761365168804, 1958.0054098961352], + [9421.761365168804, 1792.405409896135], + [9521.061365168805, 1626.805409896135], + [9421.761365168804, 1626.805409896135], + [9322.461365168803, 1792.405409896135], + [9322.461365168803, 1626.805409896135], + [9322.461365168803, 1461.2054098961348], + [9421.761365168804, 1461.2054098961348], + [9521.061365168805, 1295.6054098961347], + [9421.761365168804, 1130.0054098961346], + [9322.461365168803, 964.4054098961345], + [9223.161365168802, 964.4054098961345], + [9223.161365168802, 798.8054098961346], + [9322.461365168803, 633.2054098961347], + [9421.761365168804, 798.8054098961346], + [9421.761365168804, 633.2054098961347], + [9521.061365168805, 633.2054098961347], + [9421.761365168804, 467.60540989613474], + [9421.761365168804, 302.0054098961348], + [9322.461365168803, 136.40540989613478], + [9223.161365168802, 302.0054098961348], + [9123.861365168801, 302.0054098961348], + [9024.5613651688, 136.40540989613478], + [9123.861365168801, 136.40540989613478], + [9223.161365168802, 136.40540989613478], + [9322.461365168803, 302.0054098961348], + [9421.761365168804, 136.40540989613478], + [9521.061365168805, 136.40540989613478], + [9620.361365168807, 136.40540989613478], + [9620.361365168807, 302.0054098961348], + [9521.061365168805, 302.0054098961348], + [9521.061365168805, 467.60540989613474], + [9620.361365168807, 467.60540989613474], + [9719.661365168808, 302.0054098961348], + [9719.661365168808, 136.40540989613478], + [9818.961365168809, 136.40540989613478], + [9918.26136516881, 136.40540989613478], + [10017.56136516881, 136.40540989613478], + [366.07287160549004, 5394.185440937868], + [465.37287160549005, 5394.185440937868], + [465.37287160549005, 5559.785440937868], + [366.0728716054901, 5559.785440937868], + [366.0728716054901, 5725.385440937867], + [266.77287160549014, 5725.385440937867], + [167.47287160549016, 5559.785440937868], + [266.77287160549014, 5559.785440937868], + [266.77287160549014, 5394.185440937868], + [266.77287160549014, 5228.585440937869], + [167.47287160549016, 5394.185440937868], + [68.17287160549016, 5228.585440937869], + [167.47287160549013, 5062.9854409378695], + [68.17287160549013, 4897.38544093787], + [167.47287160549013, 4731.785440937871], + [266.77287160549014, 4731.785440937871], + [167.47287160549016, 4566.185440937871], + [68.17287160549016, 4566.185440937871], + [68.17287160549016, 4731.785440937871], + [167.47287160549013, 4897.38544093787], + [68.17287160549013, 5062.9854409378695], + [167.47287160549013, 5228.585440937869], + [266.77287160549014, 5062.9854409378695], + [366.0728716054901, 4897.38544093787], + [266.77287160549014, 4897.38544093787], + [366.0728716054901, 4731.785440937871], + [465.37287160549005, 4897.38544093787], + [366.0728716054901, 5062.9854409378695], + [465.37287160549005, 5062.9854409378695], + [366.0728716054901, 5228.585440937869], + [465.37287160549005, 5228.585440937869], + [564.6728716054901, 5394.185440937868], + [663.9728716054901, 5228.585440937869], + [564.6728716054901, 5062.9854409378695], + [663.9728716054901, 4897.38544093787], + [763.2728716054902, 4731.785440937871], + [862.5728716054903, 4566.185440937871], + [961.8728716054903, 4731.785440937871], + [862.5728716054903, 4731.785440937871], + [961.8728716054903, 4566.185440937871], + [862.5728716054903, 4400.585440937872], + [961.8728716054903, 4234.985440937872], + [1061.1728716054904, 4400.585440937872], + [1160.4728716054904, 4234.985440937872], + [1160.4728716054904, 4400.585440937872], + [1259.7728716054903, 4234.985440937872], + [1359.0728716054903, 4069.3854409378723], + [1458.3728716054902, 4069.3854409378723], + [1557.6728716054902, 4234.985440937872], + [1656.9728716054901, 4400.585440937872], + [1557.6728716054902, 4400.585440937872], + [1458.3728716054902, 4400.585440937872], + [1359.0728716054903, 4566.185440937871], + [1359.0728716054903, 4731.785440937871], + [1259.7728716054903, 4731.785440937871], + [1359.0728716054903, 4897.38544093787], + [1458.3728716054902, 4731.785440937871], + [1458.3728716054902, 4897.38544093787], + [1359.0728716054903, 5062.9854409378695], + [1259.7728716054903, 5228.585440937869], + [1259.7728716054903, 5062.9854409378695], + [1259.7728716054903, 4897.38544093787], + [1160.4728716054904, 5062.9854409378695], + [1160.4728716054904, 5228.585440937869], + [1061.1728716054904, 5228.585440937869], + [1061.1728716054904, 5062.9854409378695], + [961.8728716054903, 5228.585440937869], + [862.5728716054903, 5062.9854409378695], + [961.8728716054903, 5062.9854409378695], + [961.8728716054903, 4897.38544093787], + [1061.1728716054904, 4897.38544093787], + [1160.4728716054904, 4731.785440937871], + [1259.7728716054903, 4566.185440937871], + [1359.0728716054903, 4400.585440937872], + [1458.3728716054902, 4566.185440937871], + [1557.6728716054902, 4566.185440937871], + [1656.9728716054901, 4731.785440937871], + [1557.6728716054902, 4897.38544093787], + [1458.3728716054902, 5062.9854409378695], + [1557.6728716054902, 5228.585440937869], + [1656.9728716054901, 5062.9854409378695], + [1756.27287160549, 5062.9854409378695], + [1756.27287160549, 4897.38544093787], + [1855.57287160549, 5062.9854409378695], + [1954.87287160549, 4897.38544093787], + [2054.17287160549, 5062.9854409378695], + [1954.87287160549, 5062.9854409378695], + [2054.17287160549, 5228.585440937869], + [2153.4728716054897, 5228.585440937869], + [2252.7728716054894, 5062.9854409378695], + [2352.072871605489, 5228.585440937869], + [2451.372871605489, 5394.185440937868], + [2352.072871605489, 5394.185440937868], + [2252.7728716054894, 5228.585440937869], + [2153.4728716054897, 5062.9854409378695], + [2153.4728716054897, 4897.38544093787], + [2252.7728716054894, 4897.38544093787], + [2352.072871605489, 4731.785440937871], + [2252.7728716054894, 4731.785440937871], + [2153.4728716054897, 4731.785440937871], + [2054.17287160549, 4566.185440937871], + [1954.87287160549, 4731.785440937871], + [1855.57287160549, 4897.38544093787], + [1756.27287160549, 4731.785440937871], + [1855.57287160549, 4731.785440937871], + [1855.57287160549, 4566.185440937871], + [1756.27287160549, 4566.185440937871], + [1656.9728716054901, 4566.185440937871], + [1557.6728716054902, 4731.785440937871], + [1656.9728716054901, 4897.38544093787], + [1557.6728716054902, 5062.9854409378695], + [1458.3728716054902, 5228.585440937869], + [1359.0728716054903, 5228.585440937869], + [1259.7728716054903, 5394.185440937868], + [1259.7728716054903, 5559.785440937868], + [1160.4728716054904, 5559.785440937868], + [1061.1728716054904, 5559.785440937868], + [1160.4728716054904, 5725.385440937867], + [1259.7728716054903, 5725.385440937867], + [1359.0728716054903, 5559.785440937868], + [1458.3728716054902, 5725.385440937867], + [1458.3728716054902, 5559.785440937868], + [1359.0728716054903, 5725.385440937867], + [1259.7728716054903, 5890.985440937867], + [1359.0728716054903, 5890.985440937867], + [1259.7728716054903, 6056.585440937866], + [1359.0728716054903, 6222.185440937866], + [1458.3728716054902, 6222.185440937866], + [1458.3728716054902, 6387.785440937865], + [1557.6728716054902, 6222.185440937866], + [1557.6728716054902, 6387.785440937865], + [1656.9728716054901, 6222.185440937866], + [1756.27287160549, 6056.585440937866], + [1855.57287160549, 5890.985440937867], + [1756.27287160549, 5890.985440937867], + [1656.9728716054901, 6056.585440937866], + [1557.6728716054902, 5890.985440937867], + [1458.3728716054902, 5890.985440937867], + [1359.0728716054903, 6056.585440937866], + [1259.7728716054903, 6222.185440937866], + [1160.4728716054904, 6056.585440937866], + [1061.1728716054904, 5890.985440937867], + [1061.1728716054904, 6056.585440937866], + [1160.4728716054904, 6222.185440937866], + [1061.1728716054904, 6222.185440937866], + [961.8728716054903, 6222.185440937866], + [961.8728716054903, 6056.585440937866], + [961.8728716054903, 5890.985440937867], + [961.8728716054903, 5725.385440937867], + [862.5728716054903, 5559.785440937868], + [763.2728716054902, 5725.385440937867], + [862.5728716054903, 5725.385440937867], + [763.2728716054902, 5890.985440937867], + [663.9728716054901, 5725.385440937867], + [763.2728716054902, 5559.785440937868], + [763.2728716054902, 5394.185440937868], + [862.5728716054903, 5228.585440937869], + [961.8728716054903, 5394.185440937868], + [1061.1728716054904, 5394.185440937868], + [961.8728716054903, 5559.785440937868], + [862.5728716054903, 5394.185440937868], + [763.2728716054902, 5228.585440937869], + [663.9728716054901, 5062.9854409378695], + [763.2728716054902, 5062.9854409378695], + [763.2728716054902, 4897.38544093787], + [663.9728716054901, 4731.785440937871], + [564.6728716054901, 4731.785440937871], + [465.37287160549005, 4566.185440937871], + [366.0728716054901, 4566.185440937871], + [465.37287160549005, 4731.785440937871], + [564.6728716054901, 4566.185440937871], + [465.37287160549005, 4400.585440937872], + [366.0728716054901, 4400.585440937872], + [266.77287160549014, 4234.985440937872], + [167.47287160549016, 4234.985440937872], + [266.77287160549014, 4400.585440937872], + [266.77287160549014, 4566.185440937871], + [167.47287160549016, 4400.585440937872], + [68.17287160549016, 4234.985440937872], + [167.47287160549013, 4069.3854409378723], + [68.17287160549013, 3903.7854409378724], + [68.17287160549013, 4069.3854409378723], + [167.47287160549013, 3903.7854409378724], + [266.77287160549014, 3903.7854409378724], + [366.0728716054901, 3738.1854409378725], + [266.77287160549014, 3738.1854409378725], + [266.77287160549014, 3572.5854409378726], + [167.47287160549016, 3406.9854409378727], + [167.47287160549016, 3241.3854409378728], + [266.77287160549014, 3241.3854409378728], + [266.77287160549014, 3406.9854409378727], + [366.0728716054901, 3572.5854409378726], + [465.37287160549005, 3738.1854409378725], + [465.37287160549005, 3903.7854409378724], + [366.0728716054901, 4069.3854409378723], + [366.0728716054901, 4234.985440937872], + [465.37287160549005, 4234.985440937872], + [564.6728716054901, 4069.3854409378723], + [465.37287160549005, 4069.3854409378723], + [564.6728716054901, 4234.985440937872], + [663.9728716054901, 4069.3854409378723], + [663.9728716054901, 4234.985440937872], + [663.9728716054901, 4400.585440937872], + [763.2728716054902, 4566.185440937871], + [763.2728716054902, 4400.585440937872], + [663.9728716054901, 4566.185440937871], + [564.6728716054901, 4400.585440937872], + [19431.915041401327, 3495.506142643713], + [19332.61504140133, 3661.1061426437127], + [19431.915041401327, 3661.1061426437127], + [19531.215041401327, 3661.1061426437127], + [19630.515041401326, 3495.506142643713], + [19630.515041401326, 3661.1061426437127], + [19729.815041401325, 3826.7061426437126], + [19630.515041401326, 3826.7061426437126], + [19729.815041401325, 3992.3061426437125], + [19630.515041401326, 3992.3061426437125], + [19630.515041401326, 4157.906142643712], + [19630.515041401326, 4323.506142643711], + [19531.215041401327, 4157.906142643712], + [19431.915041401327, 4323.506142643711], + [19531.215041401327, 4489.106142643711], + [19431.915041401327, 4654.70614264371], + [19332.61504140133, 4654.70614264371], + [19332.61504140133, 4820.30614264371], + [19332.61504140133, 4985.906142643709], + [19233.31504140133, 4985.906142643709], + [19134.01504140133, 5151.506142643709], + [19034.71504140133, 5151.506142643709], + [19134.01504140133, 5317.106142643708], + [19034.71504140133, 5317.106142643708], + [19034.71504140133, 5482.706142643708], + [18935.41504140133, 5648.306142643707], + [18836.115041401332, 5813.9061426437065], + [18836.115041401332, 5979.506142643706], + [18935.41504140133, 5979.506142643706], + [19034.71504140133, 6145.106142643705], + [19034.71504140133, 5979.506142643706], + [19034.71504140133, 5813.9061426437065], + [19134.01504140133, 5648.306142643707], + [19233.31504140133, 5648.306142643707], + [19134.01504140133, 5813.9061426437065], + [19134.01504140133, 5979.506142643706], + [19233.31504140133, 5813.9061426437065], + [19233.31504140133, 5979.506142643706], + [19332.61504140133, 6145.106142643705], + [19332.61504140133, 6310.706142643705], + [19233.31504140133, 6310.706142643705], + [19233.31504140133, 6476.306142643704], + [19332.61504140133, 6476.306142643704], + [19431.915041401327, 6641.906142643704], + [19332.61504140133, 6807.506142643703], + [19332.61504140133, 6641.906142643704], + [19431.915041401327, 6476.306142643704], + [19431.915041401327, 6310.706142643705], + [19531.215041401327, 6145.106142643705], + [19431.915041401327, 5979.506142643706], + [19431.915041401327, 6145.106142643705], + [19531.215041401327, 5979.506142643706], + [19630.515041401326, 5813.9061426437065], + [19630.515041401326, 5979.506142643706], + [19729.815041401325, 5813.9061426437065], + [19829.115041401325, 5979.506142643706], + [19729.815041401325, 5979.506142643706], + [19729.815041401325, 6145.106142643705], + [19729.815041401325, 6310.706142643705], + [19630.515041401326, 6476.306142643704], + [19729.815041401325, 6476.306142643704], + [19630.515041401326, 6310.706142643705], + [19531.215041401327, 6310.706142643705], + [19531.215041401327, 6476.306142643704], + [19630.515041401326, 6641.906142643704], + [19729.815041401325, 6807.506142643703], + [19829.115041401325, 6973.106142643703], + [19928.415041401324, 6973.106142643703], + [19928.415041401324, 7138.706142643702], + [20027.715041401323, 7138.706142643702], + [20027.715041401323, 7304.306142643702], + [19928.415041401324, 7304.306142643702], + [19829.115041401325, 7304.306142643702], + [19829.115041401325, 7469.906142643701], + [19928.415041401324, 7469.906142643701], + [19928.415041401324, 7635.5061426437005], + [19928.415041401324, 7801.1061426437], + [20027.715041401323, 7635.5061426437005], + [20027.715041401323, 7801.1061426437], + [20127.015041401322, 7801.1061426437], + [20226.31504140132, 7801.1061426437], + [20325.61504140132, 7801.1061426437], + [20226.31504140132, 7635.5061426437005], + [20226.31504140132, 7469.906142643701], + [20226.31504140132, 7304.306142643702], + [20127.015041401322, 7304.306142643702], + [20027.715041401323, 7469.906142643701], + [20127.015041401322, 7469.906142643701], + [20127.015041401322, 7635.5061426437005], + [2748.790306732237, 2362.9553147492866], + [2848.0903067322365, 2528.5553147492865], + [2748.790306732237, 2694.1553147492864], + [2649.490306732237, 2859.7553147492863], + [2748.790306732237, 3025.355314749286], + [2848.0903067322365, 2859.7553147492863], + [2848.0903067322365, 2694.1553147492864], + [2947.3903067322362, 2694.1553147492864], + [3046.690306732236, 2859.7553147492863], + [3145.9903067322357, 2694.1553147492864], + [3145.9903067322357, 2528.5553147492865], + [3046.690306732236, 2694.1553147492864], + [3145.9903067322357, 2859.7553147492863], + [3046.690306732236, 3025.355314749286], + [3145.9903067322357, 3025.355314749286], + [3245.2903067322354, 3190.955314749286], + [3245.2903067322354, 3356.555314749286], + [3344.590306732235, 3522.155314749286], + [3443.890306732235, 3356.555314749286], + [3543.1903067322346, 3356.555314749286], + [3642.4903067322343, 3190.955314749286], + [3741.790306732234, 3025.355314749286], + [3741.790306732234, 2859.7553147492863], + [3841.090306732234, 3025.355314749286], + [3841.090306732234, 3190.955314749286], + [3741.790306732234, 3190.955314749286], + [3642.4903067322343, 3025.355314749286], + [3543.1903067322346, 3025.355314749286], + [3543.1903067322346, 2859.7553147492863], + [3443.890306732235, 3025.355314749286], + [3443.890306732235, 3190.955314749286], + [3543.1903067322346, 3190.955314749286], + [3642.4903067322343, 3356.555314749286], + [3543.1903067322346, 3522.155314749286], + [3443.890306732235, 3687.755314749286], + [3443.890306732235, 3853.3553147492858], + [3344.590306732235, 3687.755314749286], + [3245.2903067322354, 3853.3553147492858], + [3245.2903067322354, 3687.755314749286], + [3145.9903067322357, 3687.755314749286], + [3046.690306732236, 3853.3553147492858], + [3145.9903067322357, 4018.9553147492857], + [3145.9903067322357, 3853.3553147492858], + [3046.690306732236, 3687.755314749286], + [3145.9903067322357, 3522.155314749286], + [3145.9903067322357, 3356.555314749286], + [3145.9903067322357, 3190.955314749286], + [3046.690306732236, 3190.955314749286], + [3046.690306732236, 3356.555314749286], + [2947.3903067322362, 3356.555314749286], + [2848.0903067322365, 3190.955314749286], + [2947.3903067322362, 3025.355314749286], + [2848.0903067322365, 3025.355314749286], + [2748.790306732237, 2859.7553147492863], + [2649.490306732237, 2694.1553147492864], + [2748.790306732237, 2528.5553147492865], + [2848.0903067322365, 2362.9553147492866], + [2748.790306732237, 2197.3553147492867], + [2649.490306732237, 2362.9553147492866], + [2649.490306732237, 2197.3553147492867], + [2550.1903067322373, 2362.9553147492866], + [2450.8903067322376, 2362.9553147492866], + [2351.590306732238, 2528.5553147492865], + [2252.290306732238, 2528.5553147492865], + [2351.590306732238, 2362.9553147492866], + [2252.290306732238, 2197.3553147492867], + [2351.590306732238, 2197.3553147492867], + [2351.590306732238, 2031.7553147492865], + [2351.590306732238, 1866.1553147492864], + [2252.290306732238, 1866.1553147492864], + [2351.590306732238, 1700.5553147492863], + [2450.8903067322376, 1534.9553147492861], + [2351.590306732238, 1369.355314749286], + [2252.290306732238, 1203.7553147492858], + [2252.290306732238, 1369.355314749286], + [2252.290306732238, 1534.9553147492861], + [2152.9903067322384, 1369.355314749286], + [2053.6903067322387, 1369.355314749286], + [1954.3903067322387, 1203.7553147492858], + [1855.0903067322388, 1203.7553147492858], + [1755.7903067322388, 1038.1553147492857], + [1656.4903067322389, 1038.1553147492857], + [1557.190306732239, 872.5553147492857], + [1457.890306732239, 1038.1553147492857], + [1457.890306732239, 872.5553147492857], + [1457.890306732239, 706.9553147492858], + [1557.190306732239, 706.9553147492858], + [1656.4903067322389, 872.5553147492857], + [1656.4903067322389, 706.9553147492858], + [1755.7903067322388, 706.9553147492858], + [1656.4903067322389, 541.3553147492859], + [1557.190306732239, 375.7553147492859], + [1656.4903067322389, 210.1553147492859], + [1755.7903067322388, 44.55531474928592], + [1656.4903067322389, 44.55531474928592], + [1557.190306732239, 210.1553147492859], + [1457.890306732239, 210.1553147492859], + [1457.890306732239, 44.55531474928592], + [1358.590306732239, 210.1553147492859], + [1358.590306732239, 375.75531474928584], + [1259.290306732239, 210.15531474928585], + [1259.290306732239, 375.75531474928584], + [1259.290306732239, 541.3553147492859], + [1358.590306732239, 706.9553147492858], + [1358.590306732239, 872.5553147492857], + [1259.290306732239, 706.9553147492858], + [1259.290306732239, 872.5553147492857], + [1259.290306732239, 1038.1553147492857], + [1358.590306732239, 1203.7553147492858], + [1358.590306732239, 1038.1553147492857], + [1457.890306732239, 1203.7553147492858], + [1557.190306732239, 1369.355314749286], + [1656.4903067322389, 1203.7553147492858], + [1557.190306732239, 1203.7553147492858], + [1557.190306732239, 1038.1553147492857], + [17254.572515546668, 1460.5807801244923], + [17353.872515546667, 1626.1807801244925], + [17453.172515546667, 1791.7807801244926], + [17552.472515546666, 1791.7807801244926], + [17453.172515546667, 1626.1807801244925], + [17353.872515546667, 1791.7807801244926], + [17453.172515546667, 1957.3807801244927], + [17353.872515546667, 2122.980780124493], + [17453.172515546667, 2288.580780124493], + [17353.872515546667, 2454.1807801244927], + [17453.172515546667, 2619.7807801244926], + [17552.472515546666, 2619.7807801244926], + [17453.172515546667, 2785.3807801244925], + [17353.872515546667, 2619.7807801244926], + [17254.572515546668, 2454.1807801244927], + [17254.572515546668, 2288.580780124493], + [17353.872515546667, 2288.580780124493], + [17453.172515546667, 2122.980780124493], + [17552.472515546666, 2288.580780124493], + [17552.472515546666, 2454.1807801244927], + [17453.172515546667, 2454.1807801244927], + [4447.67624466283, 4761.1416826913], + [4546.97624466283, 4595.541682691301], + [4546.97624466283, 4429.941682691301], + [4447.67624466283, 4429.941682691301], + [4447.67624466283, 4595.541682691301], + [4348.37624466283, 4595.541682691301], + [4249.07624466283, 4595.541682691301], + [4348.37624466283, 4761.1416826913], + [4249.07624466283, 4761.1416826913], + [4348.37624466283, 4926.7416826912995], + [4348.37624466283, 5092.341682691299], + [4447.67624466283, 5257.941682691298], + [4546.97624466283, 5257.941682691298], + [4646.27624466283, 5092.341682691299], + [4546.97624466283, 5092.341682691299], + [4646.27624466283, 4926.7416826912995], + [4646.27624466283, 4761.1416826913], + [4546.97624466283, 4761.1416826913], + [4646.27624466283, 4595.541682691301], + [4745.5762446628305, 4595.541682691301], + [4646.27624466283, 4429.941682691301], + [4745.5762446628305, 4429.941682691301], + [4844.876244662831, 4595.541682691301], + [4745.5762446628305, 4761.1416826913], + [4745.5762446628305, 4926.7416826912995], + [4844.876244662831, 4761.1416826913], + [4944.176244662831, 4761.1416826913], + [5043.476244662831, 4926.7416826912995], + [5043.476244662831, 4761.1416826913], + [5142.776244662831, 4926.7416826912995], + [5142.776244662831, 4761.1416826913], + [5242.076244662831, 4595.541682691301], + [5142.776244662831, 4595.541682691301], + [5242.076244662831, 4429.941682691301], + [5242.076244662831, 4264.341682691302], + [5142.776244662831, 4429.941682691301], + [5043.476244662831, 4595.541682691301], + [5043.476244662831, 4429.941682691301], + [5043.476244662831, 4264.341682691302], + [5142.776244662831, 4098.741682691302], + [5043.476244662831, 4098.741682691302], + [4944.176244662831, 3933.1416826913023], + [4944.176244662831, 4098.741682691302], + [4944.176244662831, 4264.341682691302], + [4844.876244662831, 4098.741682691302], + [4745.5762446628305, 4264.341682691302], + [4646.27624466283, 4098.741682691302], + [4546.97624466283, 3933.1416826913023], + [4447.67624466283, 4098.741682691302], + [4546.97624466283, 4264.341682691302], + [4447.67624466283, 4264.341682691302], + [4546.97624466283, 4098.741682691302], + [4646.27624466283, 3933.1416826913023], + [4546.97624466283, 3767.5416826913024], + [4447.67624466283, 3601.9416826913025], + [4447.67624466283, 3767.5416826913024], + [4348.37624466283, 3767.5416826913024], + [4348.37624466283, 3933.1416826913023], + [4249.07624466283, 3767.5416826913024], + [4249.07624466283, 3933.1416826913023], + [4149.776244662829, 3933.1416826913023], + [4050.4762446628297, 4098.741682691302], + [4050.4762446628297, 3933.1416826913023], + [3951.17624466283, 3933.1416826913023], + [3951.17624466283, 4098.741682691302], + [3851.8762446628302, 4264.341682691302], + [3851.8762446628302, 4098.741682691302], + [3752.5762446628305, 4098.741682691302], + [3653.276244662831, 4264.341682691302], + [3553.976244662831, 4429.941682691301], + [3553.976244662831, 4595.541682691301], + [3454.6762446628313, 4429.941682691301], + [3553.976244662831, 4264.341682691302], + [3653.276244662831, 4429.941682691301], + [3752.5762446628305, 4264.341682691302], + [3752.5762446628305, 4429.941682691301], + [3851.8762446628302, 4595.541682691301], + [3851.8762446628302, 4429.941682691301], + [3951.17624466283, 4429.941682691301], + [4050.4762446628297, 4264.341682691302], + [4149.776244662829, 4098.741682691302], + [4249.07624466283, 4264.341682691302], + [4348.37624466283, 4098.741682691302], + [4447.67624466283, 3933.1416826913023], + [9574.088902135607, 7352.26293905581], + [9474.788902135606, 7352.26293905581], + [9375.488902135605, 7186.662939055811], + [9474.788902135606, 7021.0629390558115], + [9574.088902135607, 7021.0629390558115], + [9474.788902135606, 7186.662939055811], + [9574.088902135607, 7186.662939055811], + [9673.388902135608, 7021.0629390558115], + [9673.388902135608, 6855.462939055812], + [9772.68890213561, 6689.862939055813], + [9673.388902135608, 6689.862939055813], + [9772.68890213561, 6524.262939055813], + [9871.98890213561, 6358.662939055814], + [9971.288902135611, 6524.262939055813], + [10070.588902135612, 6358.662939055814], + [10070.588902135612, 6193.062939055814], + [9971.288902135611, 6027.462939055815], + [9971.288902135611, 5861.862939055815], + [9871.98890213561, 5861.862939055815], + [9871.98890213561, 5696.262939055816], + [9971.288902135611, 5530.662939055816], + [10070.588902135612, 5530.662939055816], + [10070.588902135612, 5696.262939055816], + [10169.888902135614, 5861.862939055815], + [10169.888902135614, 5696.262939055816], + [10070.588902135612, 5861.862939055815], + [10169.888902135614, 6027.462939055815], + [10169.888902135614, 6193.062939055814], + [10269.188902135615, 6027.462939055815], + [10269.188902135615, 5861.862939055815], + [10368.488902135616, 6027.462939055815], + [10269.188902135615, 6193.062939055814], + [10269.188902135615, 6358.662939055814], + [10169.888902135614, 6358.662939055814], + [10070.588902135612, 6524.262939055813], + [10070.588902135612, 6689.862939055813], + [9971.288902135611, 6855.462939055812], + [9971.288902135611, 7021.0629390558115], + [10070.588902135612, 7186.662939055811], + [10169.888902135614, 7186.662939055811], + [10269.188902135615, 7186.662939055811], + [10169.888902135614, 7352.26293905581], + [10070.588902135612, 7352.26293905581], + [10169.888902135614, 7517.86293905581], + [10169.888902135614, 7683.462939055809], + [10269.188902135615, 7517.86293905581], + [10368.488902135616, 7683.462939055809], + [10467.788902135617, 7683.462939055809], + [10368.488902135616, 7517.86293905581], + [10269.188902135615, 7352.26293905581], + [10368.488902135616, 7352.26293905581], + [10368.488902135616, 7186.662939055811], + [10368.488902135616, 7021.0629390558115], + [10368.488902135616, 6855.462939055812], + [10269.188902135615, 6855.462939055812], + [10169.888902135614, 6855.462939055812], + [10169.888902135614, 7021.0629390558115], + [10070.588902135612, 7021.0629390558115], + [10070.588902135612, 6855.462939055812], + [10169.888902135614, 6689.862939055813], + [10269.188902135615, 6689.862939055813], + [10169.888902135614, 6524.262939055813], + [10269.188902135615, 6524.262939055813], + [10368.488902135616, 6524.262939055813], + [10368.488902135616, 6358.662939055814], + [10467.788902135617, 6358.662939055814], + [10467.788902135617, 6193.062939055814], + [10567.088902135618, 6358.662939055814], + [10567.088902135618, 6193.062939055814], + [10666.388902135619, 6193.062939055814], + [10666.388902135619, 6358.662939055814], + [10567.088902135618, 6524.262939055813], + [10467.788902135617, 6524.262939055813], + [10567.088902135618, 6689.862939055813], + [10467.788902135617, 6855.462939055812], + [10567.088902135618, 7021.0629390558115], + [10467.788902135617, 7021.0629390558115], + [10567.088902135618, 6855.462939055812], + [10467.788902135617, 6689.862939055813], + [10368.488902135616, 6689.862939055813], + [1073.6944354374714, 1154.3681204032646], + [974.3944354374713, 1319.9681204032647], + [875.0944354374712, 1319.9681204032647], + [775.7944354374712, 1154.3681204032646], + [775.7944354374712, 988.7681204032646], + [875.0944354374712, 823.1681204032647], + [875.0944354374712, 657.5681204032647], + [775.7944354374712, 823.1681204032647], + [676.4944354374711, 657.5681204032647], + [676.4944354374711, 491.9681204032648], + [775.7944354374712, 657.5681204032647], + [676.4944354374711, 823.1681204032647], + [676.4944354374711, 988.7681204032646], + [577.194435437471, 823.1681204032647], + [577.194435437471, 988.7681204032646], + [577.194435437471, 1154.3681204032646], + [676.4944354374711, 1319.9681204032647], + [577.194435437471, 1319.9681204032647], + [477.89443543747103, 1319.9681204032647], + [577.194435437471, 1485.5681204032649], + [477.89443543747103, 1651.168120403265], + [577.194435437471, 1816.7681204032651], + [477.89443543747103, 1816.7681204032651], + [378.5944354374711, 1982.3681204032653], + [378.5944354374711, 2147.9681204032654], + [279.2944354374711, 2313.5681204032653], + [179.99443543747114, 2147.9681204032654], + [80.69443543747114, 2313.5681204032653], + [80.69443543747114, 2479.168120403265], + [179.9944354374711, 2644.768120403265], + [179.9944354374711, 2479.168120403265], + [179.9944354374711, 2313.5681204032653], + [80.69443543747111, 2147.9681204032654], + [80.69443543747111, 1982.3681204032653], + [179.9944354374711, 1982.3681204032653], + [179.9944354374711, 1816.7681204032651], + [80.69443543747111, 1816.7681204032651], + [179.9944354374711, 1651.168120403265], + [80.69443543747111, 1485.5681204032649], + [80.69443543747111, 1319.9681204032647], + [179.9944354374711, 1154.3681204032646], + [80.69443543747111, 1154.3681204032646], + [179.9944354374711, 988.7681204032646], + [279.2944354374711, 823.1681204032647], + [378.5944354374711, 657.5681204032647], + [378.5944354374711, 823.1681204032647], + [477.89443543747103, 823.1681204032647], + [477.89443543747103, 657.5681204032647], + [378.5944354374711, 491.9681204032648], + [477.89443543747103, 326.3681204032648], + [477.89443543747103, 160.76812040326482], + [378.5944354374711, 160.76812040326482], + [279.2944354374711, 326.3681204032648], + [179.99443543747114, 491.9681204032648], + [179.99443543747114, 326.3681204032648], + [279.2944354374711, 491.9681204032648], + [279.2944354374711, 657.5681204032647], + [179.99443543747114, 823.1681204032647], + [279.2944354374711, 988.7681204032646], + [279.2944354374711, 1154.3681204032646], + [378.5944354374711, 1319.9681204032647], + [477.89443543747103, 1485.5681204032649], + [577.194435437471, 1651.168120403265], + [676.4944354374711, 1651.168120403265], + [775.7944354374712, 1816.7681204032651], + [676.4944354374711, 1816.7681204032651], + [775.7944354374712, 1651.168120403265], + [875.0944354374712, 1651.168120403265], + [974.3944354374713, 1651.168120403265], + [875.0944354374712, 1485.5681204032649], + [775.7944354374712, 1485.5681204032649], + [676.4944354374711, 1485.5681204032649], + [775.7944354374712, 1319.9681204032647], + [676.4944354374711, 1154.3681204032646], + [3138.413562431697, 2355.845602060523], + [3039.113562431697, 2521.445602060523], + [3039.113562431697, 2355.845602060523], + [3039.113562431697, 2190.245602060523], + [3138.413562431697, 2024.645602060523], + [3237.7135624316966, 1859.045602060523], + [3237.7135624316966, 2024.645602060523], + [3337.0135624316963, 1859.045602060523], + [3337.0135624316963, 1693.4456020605228], + [3436.313562431696, 1527.8456020605227], + [3535.6135624316958, 1693.4456020605228], + [3535.6135624316958, 1859.045602060523], + [3634.9135624316955, 2024.645602060523], + [3734.213562431695, 2190.245602060523], + [3634.9135624316955, 2190.245602060523], + [3535.6135624316958, 2190.245602060523], + [3535.6135624316958, 2355.845602060523], + [3535.6135624316958, 2521.445602060523], + [3436.313562431696, 2687.045602060523], + [3436.313562431696, 2852.645602060523], + [3535.6135624316958, 2687.045602060523], + [3634.9135624316955, 2521.445602060523], + [3634.9135624316955, 2355.845602060523], + [3734.213562431695, 2355.845602060523], + [3833.513562431695, 2190.245602060523], + [3932.8135624316947, 2024.645602060523], + [3833.513562431695, 1859.045602060523], + [3833.513562431695, 1693.4456020605228], + [3734.213562431695, 1859.045602060523], + [3734.213562431695, 1693.4456020605228], + [3734.213562431695, 1527.8456020605227], + [3634.9135624316955, 1527.8456020605227], + [3634.9135624316955, 1693.4456020605228], + [3535.6135624316958, 1527.8456020605227], + [3634.9135624316955, 1362.2456020605225], + [3535.6135624316958, 1362.2456020605225], + [3436.313562431696, 1196.6456020605224], + [3535.6135624316958, 1196.6456020605224], + [3535.6135624316958, 1031.0456020605222], + [3436.313562431696, 1031.0456020605222], + [3535.6135624316958, 865.4456020605222], + [3436.313562431696, 865.4456020605222], + [3535.6135624316958, 699.8456020605223], + [3634.9135624316955, 699.8456020605223], + [3535.6135624316958, 534.2456020605224], + [3436.313562431696, 368.64560206052244], + [3436.313562431696, 203.04560206052244], + [3337.0135624316963, 37.445602060522454], + [3436.313562431696, 37.445602060522454], + [3337.0135624316963, 203.04560206052244], + [3237.7135624316966, 37.445602060522454], + [3138.413562431697, 37.445602060522454], + [3237.7135624316966, 203.04560206052244], + [3337.0135624316963, 368.6456020605224], + [3436.313562431696, 534.2456020605224], + [3337.0135624316963, 699.8456020605223], + [3237.7135624316966, 534.2456020605224], + [3337.0135624316963, 534.2456020605224], + [3436.313562431696, 699.8456020605223], + [3337.0135624316963, 865.4456020605222], + [3237.7135624316966, 865.4456020605222], + [3337.0135624316963, 1031.0456020605222], + [3237.7135624316966, 1196.6456020605224], + [3138.413562431697, 1362.2456020605225], + [3039.113562431697, 1527.8456020605227], + [3138.413562431697, 1527.8456020605227], + [3039.113562431697, 1693.4456020605228], + [2939.8135624316974, 1527.8456020605227], + [2840.5135624316977, 1362.2456020605225], + [2840.5135624316977, 1527.8456020605227], + [2840.5135624316977, 1693.4456020605228], + [2939.8135624316974, 1859.045602060523], + [2840.5135624316977, 2024.645602060523], + [2840.5135624316977, 1859.045602060523], + [2939.8135624316974, 1693.4456020605228], + [3039.113562431697, 1859.045602060523], + [3039.113562431697, 2024.645602060523], + [2939.8135624316974, 2190.245602060523], + [2939.8135624316974, 2024.645602060523], + [16388.412117675925, 1839.818884803299], + [16289.112117675924, 1839.818884803299], + [16388.412117675925, 1674.2188848032988], + [16487.712117675925, 1508.6188848032987], + [16487.712117675925, 1674.2188848032988], + [16388.412117675925, 1508.6188848032987], + [16289.112117675924, 1343.0188848032985], + [16289.112117675924, 1508.6188848032987], + [16189.812117675923, 1674.2188848032988], + [16090.512117675922, 1839.818884803299], + [16090.512117675922, 2005.418884803299], + [15991.212117675921, 2171.018884803299], + [16090.512117675922, 2336.618884803299], + [16090.512117675922, 2502.218884803299], + [16090.512117675922, 2667.8188848032987], + [15991.212117675921, 2833.4188848032986], + [15991.212117675921, 2999.0188848032985], + [15891.91211767592, 3164.6188848032984], + [15891.91211767592, 3330.2188848032984], + [15991.212117675921, 3330.2188848032984], + [16090.512117675922, 3330.2188848032984], + [16189.812117675923, 3495.8188848032983], + [16289.112117675924, 3495.8188848032983], + [16189.812117675923, 3330.2188848032984], + [16189.812117675923, 3164.6188848032984], + [16289.112117675924, 3164.6188848032984], + [16388.412117675925, 3164.6188848032984], + [16388.412117675925, 3330.2188848032984], + [16487.712117675925, 3330.2188848032984], + [16587.012117675924, 3495.8188848032983], + [16587.012117675924, 3661.418884803298], + [16686.312117675923, 3661.418884803298], + [16785.612117675922, 3661.418884803298], + [16884.91211767592, 3661.418884803298], + [16984.21211767592, 3661.418884803298], + [16884.91211767592, 3827.018884803298], + [16884.91211767592, 3992.618884803298], + [16984.21211767592, 3827.018884803298], + [17083.51211767592, 3661.418884803298], + [17182.81211767592, 3495.8188848032983], + [17182.81211767592, 3330.2188848032984], + [17282.11211767592, 3164.6188848032984], + [17282.11211767592, 3330.2188848032984], + [17182.81211767592, 3164.6188848032984], + [17083.51211767592, 3164.6188848032984], + [16984.21211767592, 3330.2188848032984], + [16984.21211767592, 3495.8188848032983], + [17083.51211767592, 3330.2188848032984], + [16984.21211767592, 3164.6188848032984], + [16984.21211767592, 2999.0188848032985], + [17083.51211767592, 2833.4188848032986], + [17083.51211767592, 2667.8188848032987], + [17182.81211767592, 2667.8188848032987], + [17182.81211767592, 2833.4188848032986], + [17083.51211767592, 2999.0188848032985], + [16984.21211767592, 2833.4188848032986], + [16884.91211767592, 2833.4188848032986], + [16884.91211767592, 2999.0188848032985], + [16785.612117675922, 2999.0188848032985], + [16884.91211767592, 3164.6188848032984], + [16785.612117675922, 3164.6188848032984], + [16686.312117675923, 3164.6188848032984], + [16587.012117675924, 3164.6188848032984], + [16587.012117675924, 2999.0188848032985], + [16487.712117675925, 3164.6188848032984], + [16587.012117675924, 3330.2188848032984], + [16686.312117675923, 3495.8188848032983], + [16686.312117675923, 3330.2188848032984], + [16785.612117675922, 3330.2188848032984], + [16884.91211767592, 3495.8188848032983], + [16785.612117675922, 3495.8188848032983], + [16884.91211767592, 3330.2188848032984], + [1272.175991128079, 3842.7700224365044], + [1371.475991128079, 3842.7700224365044], + [1272.175991128079, 3677.1700224365045], + [1172.875991128079, 3511.5700224365046], + [1272.175991128079, 3511.5700224365046], + [1172.875991128079, 3345.9700224365047], + [1073.575991128079, 3180.3700224365048], + [1073.575991128079, 3014.770022436505], + [974.275991128079, 3014.770022436505], + [874.9759911280789, 3014.770022436505], + [775.6759911280789, 2849.170022436505], + [775.6759911280789, 3014.770022436505], + [775.6759911280789, 3180.3700224365048], + [676.3759911280788, 3345.9700224365047], + [676.3759911280788, 3511.5700224365046], + [775.6759911280789, 3677.1700224365045], + [676.3759911280788, 3842.7700224365044], + [577.0759911280787, 3842.7700224365044], + [577.0759911280787, 3677.1700224365045], + [676.3759911280788, 3677.1700224365045], + [775.6759911280789, 3511.5700224365046], + [775.6759911280789, 3345.9700224365047], + [874.9759911280789, 3345.9700224365047], + [874.9759911280789, 3180.3700224365048], + [974.275991128079, 3180.3700224365048], + [974.275991128079, 3345.9700224365047], + [1073.575991128079, 3511.5700224365046], + [1073.575991128079, 3677.1700224365045], + [1172.875991128079, 3677.1700224365045], + [1172.875991128079, 3842.7700224365044], + [1073.575991128079, 3842.7700224365044], + [1172.875991128079, 4008.3700224365043], + [1073.575991128079, 4008.3700224365043], + [974.275991128079, 3842.7700224365044], + [974.275991128079, 4008.3700224365043], + [874.9759911280789, 4008.3700224365043], + [775.6759911280789, 4008.3700224365043], + [874.9759911280789, 3842.7700224365044], + [974.275991128079, 3677.1700224365045], + [974.275991128079, 3511.5700224365046], + [1073.575991128079, 3345.9700224365047], + [1172.875991128079, 3180.3700224365048], + [1272.175991128079, 3180.3700224365048], + [1272.175991128079, 3345.9700224365047], + [1371.475991128079, 3180.3700224365048], + [1470.7759911280789, 3345.9700224365047], + [1371.475991128079, 3345.9700224365047], + [1371.475991128079, 3511.5700224365046], + [1470.7759911280789, 3511.5700224365046], + [1570.0759911280788, 3677.1700224365045], + [1470.7759911280789, 3677.1700224365045], + [1570.0759911280788, 3511.5700224365046], + [1669.3759911280788, 3511.5700224365046], + [1669.3759911280788, 3677.1700224365045], + [1768.6759911280787, 3842.7700224365044], + [1669.3759911280788, 3842.7700224365044], + [1768.6759911280787, 4008.3700224365043], + [1867.9759911280787, 3842.7700224365044], + [1967.2759911280787, 3677.1700224365045], + [2066.5759911280784, 3842.7700224365044], + [2165.875991128078, 3677.1700224365045], + [2066.5759911280784, 3511.5700224365046], + [2165.875991128078, 3511.5700224365046], + [2066.5759911280784, 3677.1700224365045], + [2165.875991128078, 3842.7700224365044], + [2265.175991128078, 4008.3700224365043], + [2364.4759911280776, 4008.3700224365043], + [2265.175991128078, 3842.7700224365044], + [2364.4759911280776, 3677.1700224365045], + [2463.7759911280773, 3842.7700224365044], + [2463.7759911280773, 4008.3700224365043], + [2364.4759911280776, 3842.7700224365044] +]; + +main() { + for (int i = 0; i < 20; i++) { + var y = panels.length; + } +} diff --git a/tests/language/unsorted/larger_implicit_getter_test.dart b/tests/language/unsorted/larger_implicit_getter_test.dart new file mode 100644 index 000000000000..cfadc00fa867 --- /dev/null +++ b/tests/language/unsorted/larger_implicit_getter_test.dart @@ -0,0 +1,4100 @@ +// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test program for testing compilation of large implicit getters. + +import 'package:expect/expect.dart'; + +List panels = [ + [6853.940039224797, 6050.837897021371], + [6953.240039224797, 6050.837897021371], + [7052.5400392247975, 5885.237897021371], + [7052.5400392247975, 5719.637897021372], + [7151.840039224798, 5885.237897021371], + [7052.5400392247975, 6050.837897021371], + [7052.5400392247975, 6216.43789702137], + [7052.5400392247975, 6382.03789702137], + [6953.240039224797, 6382.03789702137], + [6953.240039224797, 6216.43789702137], + [6853.940039224797, 6216.43789702137], + [6853.940039224797, 6382.03789702137], + [6754.640039224797, 6216.43789702137], + [6754.640039224797, 6382.03789702137], + [6754.640039224797, 6547.637897021369], + [6754.640039224797, 6713.237897021369], + [6655.340039224797, 6713.237897021369], + [6754.640039224797, 6878.837897021368], + [6853.940039224797, 6713.237897021369], + [6853.940039224797, 6878.837897021368], + [6953.240039224797, 6713.237897021369], + [7052.5400392247975, 6547.637897021369], + [7151.840039224798, 6713.237897021369], + [7151.840039224798, 6547.637897021369], + [7151.840039224798, 6382.03789702137], + [7251.140039224798, 6547.637897021369], + [7251.140039224798, 6713.237897021369], + [7350.440039224798, 6878.837897021368], + [7449.740039224798, 6878.837897021368], + [7449.740039224798, 6713.237897021369], + [7549.040039224798, 6547.637897021369], + [7449.740039224798, 6382.03789702137], + [7449.740039224798, 6216.43789702137], + [7549.040039224798, 6050.837897021371], + [7648.340039224799, 6216.43789702137], + [7549.040039224798, 6382.03789702137], + [7648.340039224799, 6382.03789702137], + [7747.640039224799, 6216.43789702137], + [7846.940039224799, 6382.03789702137], + [7946.240039224799, 6382.03789702137], + [7946.240039224799, 6547.637897021369], + [7846.940039224799, 6713.237897021369], + [7946.240039224799, 6713.237897021369], + [8045.540039224799, 6547.637897021369], + [8045.540039224799, 6713.237897021369], + [7946.240039224799, 6878.837897021368], + [7946.240039224799, 7044.4378970213675], + [8045.540039224799, 7210.037897021367], + [8144.8400392247995, 7375.637897021366], + [8144.8400392247995, 7541.237897021366], + [8045.540039224799, 7375.637897021366], + [8144.8400392247995, 7210.037897021367], + [8045.540039224799, 7044.4378970213675], + [7946.240039224799, 7210.037897021367], + [7846.940039224799, 7210.037897021367], + [7946.240039224799, 7375.637897021366], + [8045.540039224799, 7541.237897021366], + [8144.8400392247995, 7706.837897021365], + [8244.1400392248, 7541.237897021366], + [8343.4400392248, 7541.237897021366], + [8343.4400392248, 7706.837897021365], + [8244.1400392248, 7706.837897021365], + [4735.523842661975, 3503.497768214323], + [4636.223842661975, 3337.897768214323], + [4536.923842661975, 3337.897768214323], + [4437.623842661975, 3172.2977682143232], + [4338.323842661975, 3172.2977682143232], + [4239.023842661974, 3172.2977682143232], + [4338.323842661975, 3006.6977682143233], + [4437.623842661975, 2841.0977682143234], + [4338.323842661975, 2675.4977682143235], + [4338.323842661975, 2509.8977682143236], + [4239.023842661974, 2675.4977682143235], + [4139.723842661974, 2509.8977682143236], + [4040.4238426619745, 2344.2977682143237], + [4139.723842661974, 2178.697768214324], + [4239.023842661974, 2178.697768214324], + [4139.723842661974, 2344.2977682143237], + [4040.4238426619745, 2178.697768214324], + [4139.723842661974, 2013.0977682143237], + [4139.723842661974, 1847.4977682143235], + [4239.023842661974, 2013.0977682143237], + [4239.023842661974, 1847.4977682143235], + [4338.323842661975, 1847.4977682143235], + [4437.623842661975, 1847.4977682143235], + [4536.923842661975, 1681.8977682143234], + [4437.623842661975, 1516.2977682143232], + [4536.923842661975, 1516.2977682143232], + [4536.923842661975, 1350.697768214323], + [4437.623842661975, 1350.697768214323], + [4536.923842661975, 1185.097768214323], + [4636.223842661975, 1019.497768214323], + [4536.923842661975, 853.897768214323], + [4636.223842661975, 853.897768214323], + [4735.523842661975, 688.2977682143231], + [4636.223842661975, 522.6977682143232], + [4636.223842661975, 357.09776821432325], + [4735.523842661975, 357.09776821432325], + [4735.523842661975, 522.6977682143232], + [4636.223842661975, 688.2977682143231], + [4735.523842661975, 853.897768214323], + [4834.8238426619755, 853.897768214323], + [4735.523842661975, 1019.497768214323], + [4735.523842661975, 1185.097768214323], + [4735.523842661975, 1350.697768214323], + [4834.8238426619755, 1516.2977682143232], + [4735.523842661975, 1516.2977682143232], + [4834.8238426619755, 1350.697768214323], + [4834.8238426619755, 1185.097768214323], + [4934.123842661976, 1350.697768214323], + [5033.423842661976, 1185.097768214323], + [5033.423842661976, 1019.497768214323], + [5033.423842661976, 853.897768214323], + [4934.123842661976, 853.897768214323], + [4934.123842661976, 1019.497768214323], + [4834.8238426619755, 1019.497768214323], + [4934.123842661976, 1185.097768214323], + [5033.423842661976, 1350.697768214323], + [5132.723842661976, 1350.697768214323], + [5132.723842661976, 1185.097768214323], + [5232.023842661976, 1019.497768214323], + [5232.023842661976, 1185.097768214323], + [5331.323842661976, 1019.497768214323], + [5430.623842661977, 1019.497768214323], + [5529.923842661977, 1185.097768214323], + [5430.623842661977, 1350.697768214323], + [5430.623842661977, 1516.2977682143232], + [5529.923842661977, 1350.697768214323], + [5629.223842661977, 1350.697768214323], + [5728.523842661977, 1350.697768214323], + [5728.523842661977, 1516.2977682143232], + [5728.523842661977, 1681.8977682143234], + [5629.223842661977, 1516.2977682143232], + [5529.923842661977, 1516.2977682143232], + [5629.223842661977, 1681.8977682143234], + [5529.923842661977, 1681.8977682143234], + [5430.623842661977, 1847.4977682143235], + [5331.323842661976, 1847.4977682143235], + [5331.323842661976, 2013.0977682143237], + [5232.023842661976, 2178.697768214324], + [5132.723842661976, 2013.0977682143237], + [5132.723842661976, 2178.697768214324], + [5232.023842661976, 2013.0977682143237], + [5232.023842661976, 1847.4977682143235], + [5232.023842661976, 1681.8977682143234], + [5331.323842661976, 1681.8977682143234], + [5331.323842661976, 1516.2977682143232], + [5331.323842661976, 1350.697768214323], + [5232.023842661976, 1350.697768214323], + [5232.023842661976, 1516.2977682143232], + [5132.723842661976, 1516.2977682143232], + [5132.723842661976, 1681.8977682143234], + [5033.423842661976, 1847.4977682143235], + [5132.723842661976, 1847.4977682143235], + [5033.423842661976, 2013.0977682143237], + [4934.123842661976, 2178.697768214324], + [5033.423842661976, 2344.2977682143237], + [4934.123842661976, 2344.2977682143237], + [4834.8238426619755, 2178.697768214324], + [4834.8238426619755, 2344.2977682143237], + [4735.523842661975, 2344.2977682143237], + [4636.223842661975, 2344.2977682143237], + [4536.923842661975, 2178.697768214324], + [4437.623842661975, 2013.0977682143237], + [4338.323842661975, 2178.697768214324], + [4437.623842661975, 2344.2977682143237], + [4536.923842661975, 2509.8977682143236], + [4636.223842661975, 2675.4977682143235], + [4636.223842661975, 2509.8977682143236], + [4536.923842661975, 2675.4977682143235], + [4636.223842661975, 2841.0977682143234], + [4536.923842661975, 2841.0977682143234], + [4636.223842661975, 3006.6977682143233], + [4735.523842661975, 3172.2977682143232], + [4834.8238426619755, 3006.6977682143233], + [4735.523842661975, 2841.0977682143234], + [4735.523842661975, 3006.6977682143233], + [4636.223842661975, 3172.2977682143232], + [4735.523842661975, 3337.897768214323], + [4834.8238426619755, 3503.497768214323], + [4735.523842661975, 3669.097768214323], + [4834.8238426619755, 3834.697768214323], + [4834.8238426619755, 3669.097768214323], + [4934.123842661976, 3503.497768214323], + [5033.423842661976, 3503.497768214323], + [5033.423842661976, 3337.897768214323], + [4934.123842661976, 3337.897768214323], + [4834.8238426619755, 3172.2977682143232], + [4834.8238426619755, 3337.897768214323], + [4934.123842661976, 3172.2977682143232], + [5033.423842661976, 3006.6977682143233], + [5132.723842661976, 2841.0977682143234], + [5132.723842661976, 3006.6977682143233], + [5232.023842661976, 3172.2977682143232], + [5232.023842661976, 3337.897768214323], + [5132.723842661976, 3337.897768214323], + [5232.023842661976, 3503.497768214323], + [5331.323842661976, 3337.897768214323], + [5331.323842661976, 3503.497768214323], + [5430.623842661977, 3669.097768214323], + [5331.323842661976, 3669.097768214323], + [5430.623842661977, 3503.497768214323], + [5430.623842661977, 3337.897768214323], + [5529.923842661977, 3172.2977682143232], + [5529.923842661977, 3337.897768214323], + [5629.223842661977, 3337.897768214323], + [5728.523842661977, 3337.897768214323], + [5728.523842661977, 3503.497768214323], + [5827.823842661977, 3503.497768214323], + [5927.1238426619775, 3669.097768214323], + [6026.423842661978, 3669.097768214323], + [6125.723842661978, 3503.497768214323], + [6125.723842661978, 3669.097768214323], + [6225.023842661978, 3503.497768214323], + [6225.023842661978, 3337.897768214323], + [6324.323842661978, 3337.897768214323], + [6423.623842661978, 3503.497768214323], + [6324.323842661978, 3669.097768214323], + [6225.023842661978, 3669.097768214323], + [6324.323842661978, 3834.697768214323], + [6423.623842661978, 3834.697768214323], + [6324.323842661978, 4000.297768214323], + [6225.023842661978, 3834.697768214323], + [6125.723842661978, 3834.697768214323], + [6125.723842661978, 4000.297768214323], + [6225.023842661978, 4000.297768214323], + [6225.023842661978, 4165.897768214322], + [6225.023842661978, 4331.497768214322], + [6125.723842661978, 4165.897768214322], + [6026.423842661978, 4000.2977682143223], + [5927.1238426619775, 4165.897768214322], + [6026.423842661978, 4331.497768214322], + [6026.423842661978, 4497.097768214321], + [5927.1238426619775, 4497.097768214321], + [5827.823842661977, 4662.697768214321], + [5728.523842661977, 4828.29776821432], + [5827.823842661977, 4828.29776821432], + [5927.1238426619775, 4828.29776821432], + [5927.1238426619775, 4662.697768214321], + [5827.823842661977, 4497.097768214321], + [5927.1238426619775, 4331.497768214322], + [5827.823842661977, 4165.897768214322], + [5728.523842661977, 4331.497768214322], + [5728.523842661977, 4165.897768214322], + [5629.223842661977, 4000.2977682143223], + [5629.223842661977, 3834.6977682143224], + [5529.923842661977, 3669.0977682143225], + [5629.223842661977, 3503.4977682143226], + [5728.523842661977, 3669.0977682143225], + [5827.823842661977, 3669.0977682143225], + [5927.1238426619775, 3834.6977682143224], + [5927.1238426619775, 4000.2977682143223], + [6026.423842661978, 4165.897768214322], + [6125.723842661978, 4331.497768214322], + [6225.023842661978, 4497.097768214321], + [6225.023842661978, 4662.697768214321], + [6324.323842661978, 4662.697768214321], + [6225.023842661978, 4828.29776821432], + [6324.323842661978, 4828.29776821432], + [6423.623842661978, 4828.29776821432], + [6324.323842661978, 4993.8977682143195], + [6225.023842661978, 5159.497768214319], + [6125.723842661978, 5159.497768214319], + [6026.423842661978, 5325.097768214318], + [5927.1238426619775, 5490.697768214318], + [6026.423842661978, 5656.297768214317], + [5927.1238426619775, 5821.897768214317], + [5927.1238426619775, 5987.497768214316], + [6026.423842661978, 5987.497768214316], + [6026.423842661978, 5821.897768214317], + [5927.1238426619775, 5656.297768214317], + [5827.823842661977, 5656.297768214317], + [5827.823842661977, 5490.697768214318], + [5728.523842661977, 5490.697768214318], + [5629.223842661977, 5325.097768214318], + [5629.223842661977, 5159.497768214319], + [5529.923842661977, 4993.8977682143195], + [5529.923842661977, 5159.497768214319], + [5629.223842661977, 4993.8977682143195], + [5629.223842661977, 4828.29776821432], + [5529.923842661977, 4662.697768214321], + [5430.623842661977, 4828.29776821432], + [5529.923842661977, 4828.29776821432], + [5629.223842661977, 4662.697768214321], + [5728.523842661977, 4662.697768214321], + [5629.223842661977, 4497.097768214321], + [5728.523842661977, 4497.097768214321], + [5827.823842661977, 4331.497768214322], + [10216.161365168813, 2951.605409896135], + [10116.861365168812, 2951.605409896135], + [10017.56136516881, 3117.205409896135], + [9918.26136516881, 3117.205409896135], + [9818.961365168809, 3117.205409896135], + [9719.661365168808, 3282.8054098961347], + [9620.361365168807, 3282.8054098961347], + [9620.361365168807, 3117.205409896135], + [9521.061365168805, 2951.605409896135], + [9521.061365168805, 2786.005409896135], + [9620.361365168807, 2786.005409896135], + [9719.661365168808, 2786.005409896135], + [9818.961365168809, 2620.405409896135], + [9918.26136516881, 2786.005409896135], + [9818.961365168809, 2951.605409896135], + [9818.961365168809, 2786.005409896135], + [9719.661365168808, 2620.405409896135], + [9719.661365168808, 2454.805409896135], + [9620.361365168807, 2289.2054098961353], + [9521.061365168805, 2123.6054098961354], + [9620.361365168807, 1958.0054098961352], + [9719.661365168808, 2123.6054098961354], + [9818.961365168809, 2289.2054098961353], + [9818.961365168809, 2123.6054098961354], + [9818.961365168809, 1958.0054098961352], + [9719.661365168808, 1958.0054098961352], + [9620.361365168807, 1792.405409896135], + [9620.361365168807, 1626.805409896135], + [9521.061365168805, 1461.2054098961348], + [9421.761365168804, 1295.6054098961347], + [9521.061365168805, 1130.0054098961346], + [9521.061365168805, 964.4054098961345], + [9421.761365168804, 964.4054098961345], + [9521.061365168805, 798.8054098961346], + [9620.361365168807, 798.8054098961346], + [9620.361365168807, 964.4054098961345], + [9620.361365168807, 1130.0054098961346], + [9620.361365168807, 1295.6054098961347], + [9620.361365168807, 1461.2054098961348], + [9719.661365168808, 1295.6054098961347], + [9818.961365168809, 1130.0054098961346], + [9918.26136516881, 964.4054098961345], + [9818.961365168809, 964.4054098961345], + [9918.26136516881, 798.8054098961346], + [10017.56136516881, 633.2054098961347], + [9918.26136516881, 467.60540989613474], + [9918.26136516881, 302.0054098961348], + [10017.56136516881, 302.0054098961348], + [10116.861365168812, 136.40540989613478], + [10116.861365168812, 302.0054098961348], + [10116.861365168812, 467.60540989613474], + [10116.861365168812, 633.2054098961347], + [10216.161365168813, 633.2054098961347], + [10216.161365168813, 798.8054098961346], + [10315.461365168814, 633.2054098961347], + [10315.461365168814, 798.8054098961346], + [10414.761365168815, 798.8054098961346], + [10514.061365168816, 633.2054098961347], + [10514.061365168816, 798.8054098961346], + [10414.761365168815, 964.4054098961345], + [10315.461365168814, 964.4054098961345], + [10216.161365168813, 964.4054098961345], + [10116.861365168812, 798.8054098961346], + [10017.56136516881, 798.8054098961346], + [10116.861365168812, 964.4054098961345], + [10216.161365168813, 1130.0054098961346], + [10116.861365168812, 1130.0054098961346], + [10216.161365168813, 1295.6054098961347], + [10216.161365168813, 1461.2054098961348], + [10315.461365168814, 1626.805409896135], + [10315.461365168814, 1792.405409896135], + [10216.161365168813, 1958.0054098961352], + [10216.161365168813, 1792.405409896135], + [10116.861365168812, 1792.405409896135], + [10017.56136516881, 1958.0054098961352], + [9918.26136516881, 2123.6054098961354], + [9918.26136516881, 1958.0054098961352], + [10017.56136516881, 2123.6054098961354], + [10116.861365168812, 2123.6054098961354], + [10017.56136516881, 2289.2054098961353], + [10017.56136516881, 2454.805409896135], + [10116.861365168812, 2289.2054098961353], + [10216.161365168813, 2454.805409896135], + [10315.461365168814, 2620.405409896135], + [10315.461365168814, 2454.805409896135], + [10315.461365168814, 2289.2054098961353], + [10414.761365168815, 2454.805409896135], + [10514.061365168816, 2620.405409896135], + [10613.361365168817, 2786.005409896135], + [10514.061365168816, 2786.005409896135], + [10613.361365168817, 2620.405409896135], + [10514.061365168816, 2454.805409896135], + [10514.061365168816, 2289.2054098961353], + [10613.361365168817, 2289.2054098961353], + [10712.661365168819, 2289.2054098961353], + [10811.96136516882, 2454.805409896135], + [10911.26136516882, 2289.2054098961353], + [10811.96136516882, 2289.2054098961353], + [10712.661365168819, 2454.805409896135], + [10712.661365168819, 2620.405409896135], + [10811.96136516882, 2786.005409896135], + [10911.26136516882, 2620.405409896135], + [10911.26136516882, 2786.005409896135], + [11010.561365168822, 2620.405409896135], + [10911.26136516882, 2454.805409896135], + [10811.96136516882, 2620.405409896135], + [10712.661365168819, 2786.005409896135], + [10811.96136516882, 2951.605409896135], + [10911.26136516882, 2951.605409896135], + [10811.96136516882, 3117.205409896135], + [10712.661365168819, 2951.605409896135], + [10613.361365168817, 2951.605409896135], + [10514.061365168816, 2951.605409896135], + [10414.761365168815, 3117.205409896135], + [10414.761365168815, 2951.605409896135], + [10315.461365168814, 2786.005409896135], + [10216.161365168813, 2620.405409896135], + [10216.161365168813, 2786.005409896135], + [10315.461365168814, 2951.605409896135], + [10315.461365168814, 3117.205409896135], + [10216.161365168813, 3117.205409896135], + [10116.861365168812, 3117.205409896135], + [10017.56136516881, 3282.8054098961347], + [9918.26136516881, 3448.4054098961346], + [9818.961365168809, 3448.4054098961346], + [9818.961365168809, 3614.0054098961346], + [9719.661365168808, 3448.4054098961346], + [9818.961365168809, 3282.8054098961347], + [9719.661365168808, 3117.205409896135], + [9620.361365168807, 2951.605409896135], + [9521.061365168805, 3117.205409896135], + [9521.061365168805, 3282.8054098961347], + [9421.761365168804, 3117.205409896135], + [9421.761365168804, 3282.8054098961347], + [9322.461365168803, 3117.205409896135], + [9421.761365168804, 2951.605409896135], + [9322.461365168803, 2951.605409896135], + [9223.161365168802, 2786.005409896135], + [9322.461365168803, 2620.405409896135], + [9421.761365168804, 2454.805409896135], + [9521.061365168805, 2289.2054098961353], + [9421.761365168804, 2123.6054098961354], + [9421.761365168804, 1958.0054098961352], + [9421.761365168804, 1792.405409896135], + [9521.061365168805, 1626.805409896135], + [9421.761365168804, 1626.805409896135], + [9322.461365168803, 1792.405409896135], + [9322.461365168803, 1626.805409896135], + [9322.461365168803, 1461.2054098961348], + [9421.761365168804, 1461.2054098961348], + [9521.061365168805, 1295.6054098961347], + [9421.761365168804, 1130.0054098961346], + [9322.461365168803, 964.4054098961345], + [9223.161365168802, 964.4054098961345], + [9223.161365168802, 798.8054098961346], + [9322.461365168803, 633.2054098961347], + [9421.761365168804, 798.8054098961346], + [9421.761365168804, 633.2054098961347], + [9521.061365168805, 633.2054098961347], + [9421.761365168804, 467.60540989613474], + [9421.761365168804, 302.0054098961348], + [9322.461365168803, 136.40540989613478], + [9223.161365168802, 302.0054098961348], + [9123.861365168801, 302.0054098961348], + [9024.5613651688, 136.40540989613478], + [9123.861365168801, 136.40540989613478], + [9223.161365168802, 136.40540989613478], + [9322.461365168803, 302.0054098961348], + [9421.761365168804, 136.40540989613478], + [9521.061365168805, 136.40540989613478], + [9620.361365168807, 136.40540989613478], + [9620.361365168807, 302.0054098961348], + [9521.061365168805, 302.0054098961348], + [9521.061365168805, 467.60540989613474], + [9620.361365168807, 467.60540989613474], + [9719.661365168808, 302.0054098961348], + [9719.661365168808, 136.40540989613478], + [9818.961365168809, 136.40540989613478], + [9918.26136516881, 136.40540989613478], + [10017.56136516881, 136.40540989613478], + [366.07287160549004, 5394.185440937868], + [465.37287160549005, 5394.185440937868], + [465.37287160549005, 5559.785440937868], + [366.0728716054901, 5559.785440937868], + [366.0728716054901, 5725.385440937867], + [266.77287160549014, 5725.385440937867], + [167.47287160549016, 5559.785440937868], + [266.77287160549014, 5559.785440937868], + [266.77287160549014, 5394.185440937868], + [266.77287160549014, 5228.585440937869], + [167.47287160549016, 5394.185440937868], + [68.17287160549016, 5228.585440937869], + [167.47287160549013, 5062.9854409378695], + [68.17287160549013, 4897.38544093787], + [167.47287160549013, 4731.785440937871], + [266.77287160549014, 4731.785440937871], + [167.47287160549016, 4566.185440937871], + [68.17287160549016, 4566.185440937871], + [68.17287160549016, 4731.785440937871], + [167.47287160549013, 4897.38544093787], + [68.17287160549013, 5062.9854409378695], + [167.47287160549013, 5228.585440937869], + [266.77287160549014, 5062.9854409378695], + [366.0728716054901, 4897.38544093787], + [266.77287160549014, 4897.38544093787], + [366.0728716054901, 4731.785440937871], + [465.37287160549005, 4897.38544093787], + [366.0728716054901, 5062.9854409378695], + [465.37287160549005, 5062.9854409378695], + [366.0728716054901, 5228.585440937869], + [465.37287160549005, 5228.585440937869], + [564.6728716054901, 5394.185440937868], + [663.9728716054901, 5228.585440937869], + [564.6728716054901, 5062.9854409378695], + [663.9728716054901, 4897.38544093787], + [763.2728716054902, 4731.785440937871], + [862.5728716054903, 4566.185440937871], + [961.8728716054903, 4731.785440937871], + [862.5728716054903, 4731.785440937871], + [961.8728716054903, 4566.185440937871], + [862.5728716054903, 4400.585440937872], + [961.8728716054903, 4234.985440937872], + [1061.1728716054904, 4400.585440937872], + [1160.4728716054904, 4234.985440937872], + [1160.4728716054904, 4400.585440937872], + [1259.7728716054903, 4234.985440937872], + [1359.0728716054903, 4069.3854409378723], + [1458.3728716054902, 4069.3854409378723], + [1557.6728716054902, 4234.985440937872], + [1656.9728716054901, 4400.585440937872], + [1557.6728716054902, 4400.585440937872], + [1458.3728716054902, 4400.585440937872], + [1359.0728716054903, 4566.185440937871], + [1359.0728716054903, 4731.785440937871], + [1259.7728716054903, 4731.785440937871], + [1359.0728716054903, 4897.38544093787], + [1458.3728716054902, 4731.785440937871], + [1458.3728716054902, 4897.38544093787], + [1359.0728716054903, 5062.9854409378695], + [1259.7728716054903, 5228.585440937869], + [1259.7728716054903, 5062.9854409378695], + [1259.7728716054903, 4897.38544093787], + [1160.4728716054904, 5062.9854409378695], + [1160.4728716054904, 5228.585440937869], + [1061.1728716054904, 5228.585440937869], + [1061.1728716054904, 5062.9854409378695], + [961.8728716054903, 5228.585440937869], + [862.5728716054903, 5062.9854409378695], + [961.8728716054903, 5062.9854409378695], + [961.8728716054903, 4897.38544093787], + [1061.1728716054904, 4897.38544093787], + [1160.4728716054904, 4731.785440937871], + [1259.7728716054903, 4566.185440937871], + [1359.0728716054903, 4400.585440937872], + [1458.3728716054902, 4566.185440937871], + [1557.6728716054902, 4566.185440937871], + [1656.9728716054901, 4731.785440937871], + [1557.6728716054902, 4897.38544093787], + [1458.3728716054902, 5062.9854409378695], + [1557.6728716054902, 5228.585440937869], + [1656.9728716054901, 5062.9854409378695], + [1756.27287160549, 5062.9854409378695], + [1756.27287160549, 4897.38544093787], + [1855.57287160549, 5062.9854409378695], + [1954.87287160549, 4897.38544093787], + [2054.17287160549, 5062.9854409378695], + [1954.87287160549, 5062.9854409378695], + [2054.17287160549, 5228.585440937869], + [2153.4728716054897, 5228.585440937869], + [2252.7728716054894, 5062.9854409378695], + [2352.072871605489, 5228.585440937869], + [2451.372871605489, 5394.185440937868], + [2352.072871605489, 5394.185440937868], + [2252.7728716054894, 5228.585440937869], + [2153.4728716054897, 5062.9854409378695], + [2153.4728716054897, 4897.38544093787], + [2252.7728716054894, 4897.38544093787], + [2352.072871605489, 4731.785440937871], + [2252.7728716054894, 4731.785440937871], + [2153.4728716054897, 4731.785440937871], + [2054.17287160549, 4566.185440937871], + [1954.87287160549, 4731.785440937871], + [1855.57287160549, 4897.38544093787], + [1756.27287160549, 4731.785440937871], + [1855.57287160549, 4731.785440937871], + [1855.57287160549, 4566.185440937871], + [1756.27287160549, 4566.185440937871], + [1656.9728716054901, 4566.185440937871], + [1557.6728716054902, 4731.785440937871], + [1656.9728716054901, 4897.38544093787], + [1557.6728716054902, 5062.9854409378695], + [1458.3728716054902, 5228.585440937869], + [1359.0728716054903, 5228.585440937869], + [1259.7728716054903, 5394.185440937868], + [1259.7728716054903, 5559.785440937868], + [1160.4728716054904, 5559.785440937868], + [1061.1728716054904, 5559.785440937868], + [1160.4728716054904, 5725.385440937867], + [1259.7728716054903, 5725.385440937867], + [1359.0728716054903, 5559.785440937868], + [1458.3728716054902, 5725.385440937867], + [1458.3728716054902, 5559.785440937868], + [1359.0728716054903, 5725.385440937867], + [1259.7728716054903, 5890.985440937867], + [1359.0728716054903, 5890.985440937867], + [1259.7728716054903, 6056.585440937866], + [1359.0728716054903, 6222.185440937866], + [1458.3728716054902, 6222.185440937866], + [1458.3728716054902, 6387.785440937865], + [1557.6728716054902, 6222.185440937866], + [1557.6728716054902, 6387.785440937865], + [1656.9728716054901, 6222.185440937866], + [1756.27287160549, 6056.585440937866], + [1855.57287160549, 5890.985440937867], + [1756.27287160549, 5890.985440937867], + [1656.9728716054901, 6056.585440937866], + [1557.6728716054902, 5890.985440937867], + [1458.3728716054902, 5890.985440937867], + [1359.0728716054903, 6056.585440937866], + [1259.7728716054903, 6222.185440937866], + [1160.4728716054904, 6056.585440937866], + [1061.1728716054904, 5890.985440937867], + [1061.1728716054904, 6056.585440937866], + [1160.4728716054904, 6222.185440937866], + [1061.1728716054904, 6222.185440937866], + [961.8728716054903, 6222.185440937866], + [961.8728716054903, 6056.585440937866], + [961.8728716054903, 5890.985440937867], + [961.8728716054903, 5725.385440937867], + [862.5728716054903, 5559.785440937868], + [763.2728716054902, 5725.385440937867], + [862.5728716054903, 5725.385440937867], + [763.2728716054902, 5890.985440937867], + [663.9728716054901, 5725.385440937867], + [763.2728716054902, 5559.785440937868], + [763.2728716054902, 5394.185440937868], + [862.5728716054903, 5228.585440937869], + [961.8728716054903, 5394.185440937868], + [1061.1728716054904, 5394.185440937868], + [961.8728716054903, 5559.785440937868], + [862.5728716054903, 5394.185440937868], + [763.2728716054902, 5228.585440937869], + [663.9728716054901, 5062.9854409378695], + [763.2728716054902, 5062.9854409378695], + [763.2728716054902, 4897.38544093787], + [663.9728716054901, 4731.785440937871], + [564.6728716054901, 4731.785440937871], + [465.37287160549005, 4566.185440937871], + [366.0728716054901, 4566.185440937871], + [465.37287160549005, 4731.785440937871], + [564.6728716054901, 4566.185440937871], + [465.37287160549005, 4400.585440937872], + [366.0728716054901, 4400.585440937872], + [266.77287160549014, 4234.985440937872], + [167.47287160549016, 4234.985440937872], + [266.77287160549014, 4400.585440937872], + [266.77287160549014, 4566.185440937871], + [167.47287160549016, 4400.585440937872], + [68.17287160549016, 4234.985440937872], + [167.47287160549013, 4069.3854409378723], + [68.17287160549013, 3903.7854409378724], + [68.17287160549013, 4069.3854409378723], + [167.47287160549013, 3903.7854409378724], + [266.77287160549014, 3903.7854409378724], + [366.0728716054901, 3738.1854409378725], + [266.77287160549014, 3738.1854409378725], + [266.77287160549014, 3572.5854409378726], + [167.47287160549016, 3406.9854409378727], + [167.47287160549016, 3241.3854409378728], + [266.77287160549014, 3241.3854409378728], + [266.77287160549014, 3406.9854409378727], + [366.0728716054901, 3572.5854409378726], + [465.37287160549005, 3738.1854409378725], + [465.37287160549005, 3903.7854409378724], + [366.0728716054901, 4069.3854409378723], + [366.0728716054901, 4234.985440937872], + [465.37287160549005, 4234.985440937872], + [564.6728716054901, 4069.3854409378723], + [465.37287160549005, 4069.3854409378723], + [564.6728716054901, 4234.985440937872], + [663.9728716054901, 4069.3854409378723], + [663.9728716054901, 4234.985440937872], + [663.9728716054901, 4400.585440937872], + [763.2728716054902, 4566.185440937871], + [763.2728716054902, 4400.585440937872], + [663.9728716054901, 4566.185440937871], + [564.6728716054901, 4400.585440937872], + [19431.915041401327, 3495.506142643713], + [19332.61504140133, 3661.1061426437127], + [19431.915041401327, 3661.1061426437127], + [19531.215041401327, 3661.1061426437127], + [19630.515041401326, 3495.506142643713], + [19630.515041401326, 3661.1061426437127], + [19729.815041401325, 3826.7061426437126], + [19630.515041401326, 3826.7061426437126], + [19729.815041401325, 3992.3061426437125], + [19630.515041401326, 3992.3061426437125], + [19630.515041401326, 4157.906142643712], + [19630.515041401326, 4323.506142643711], + [19531.215041401327, 4157.906142643712], + [19431.915041401327, 4323.506142643711], + [19531.215041401327, 4489.106142643711], + [19431.915041401327, 4654.70614264371], + [19332.61504140133, 4654.70614264371], + [19332.61504140133, 4820.30614264371], + [19332.61504140133, 4985.906142643709], + [19233.31504140133, 4985.906142643709], + [19134.01504140133, 5151.506142643709], + [19034.71504140133, 5151.506142643709], + [19134.01504140133, 5317.106142643708], + [19034.71504140133, 5317.106142643708], + [19034.71504140133, 5482.706142643708], + [18935.41504140133, 5648.306142643707], + [18836.115041401332, 5813.9061426437065], + [18836.115041401332, 5979.506142643706], + [18935.41504140133, 5979.506142643706], + [19034.71504140133, 6145.106142643705], + [19034.71504140133, 5979.506142643706], + [19034.71504140133, 5813.9061426437065], + [19134.01504140133, 5648.306142643707], + [19233.31504140133, 5648.306142643707], + [19134.01504140133, 5813.9061426437065], + [19134.01504140133, 5979.506142643706], + [19233.31504140133, 5813.9061426437065], + [19233.31504140133, 5979.506142643706], + [19332.61504140133, 6145.106142643705], + [19332.61504140133, 6310.706142643705], + [19233.31504140133, 6310.706142643705], + [19233.31504140133, 6476.306142643704], + [19332.61504140133, 6476.306142643704], + [19431.915041401327, 6641.906142643704], + [19332.61504140133, 6807.506142643703], + [19332.61504140133, 6641.906142643704], + [19431.915041401327, 6476.306142643704], + [19431.915041401327, 6310.706142643705], + [19531.215041401327, 6145.106142643705], + [19431.915041401327, 5979.506142643706], + [19431.915041401327, 6145.106142643705], + [19531.215041401327, 5979.506142643706], + [19630.515041401326, 5813.9061426437065], + [19630.515041401326, 5979.506142643706], + [19729.815041401325, 5813.9061426437065], + [19829.115041401325, 5979.506142643706], + [19729.815041401325, 5979.506142643706], + [19729.815041401325, 6145.106142643705], + [19729.815041401325, 6310.706142643705], + [19630.515041401326, 6476.306142643704], + [19729.815041401325, 6476.306142643704], + [19630.515041401326, 6310.706142643705], + [19531.215041401327, 6310.706142643705], + [19531.215041401327, 6476.306142643704], + [19630.515041401326, 6641.906142643704], + [19729.815041401325, 6807.506142643703], + [19829.115041401325, 6973.106142643703], + [19928.415041401324, 6973.106142643703], + [19928.415041401324, 7138.706142643702], + [20027.715041401323, 7138.706142643702], + [20027.715041401323, 7304.306142643702], + [19928.415041401324, 7304.306142643702], + [19829.115041401325, 7304.306142643702], + [19829.115041401325, 7469.906142643701], + [19928.415041401324, 7469.906142643701], + [19928.415041401324, 7635.5061426437005], + [19928.415041401324, 7801.1061426437], + [20027.715041401323, 7635.5061426437005], + [20027.715041401323, 7801.1061426437], + [20127.015041401322, 7801.1061426437], + [20226.31504140132, 7801.1061426437], + [20325.61504140132, 7801.1061426437], + [20226.31504140132, 7635.5061426437005], + [20226.31504140132, 7469.906142643701], + [20226.31504140132, 7304.306142643702], + [20127.015041401322, 7304.306142643702], + [20027.715041401323, 7469.906142643701], + [20127.015041401322, 7469.906142643701], + [20127.015041401322, 7635.5061426437005], + [2748.790306732237, 2362.9553147492866], + [2848.0903067322365, 2528.5553147492865], + [2748.790306732237, 2694.1553147492864], + [2649.490306732237, 2859.7553147492863], + [2748.790306732237, 3025.355314749286], + [2848.0903067322365, 2859.7553147492863], + [2848.0903067322365, 2694.1553147492864], + [2947.3903067322362, 2694.1553147492864], + [3046.690306732236, 2859.7553147492863], + [3145.9903067322357, 2694.1553147492864], + [3145.9903067322357, 2528.5553147492865], + [3046.690306732236, 2694.1553147492864], + [3145.9903067322357, 2859.7553147492863], + [3046.690306732236, 3025.355314749286], + [3145.9903067322357, 3025.355314749286], + [3245.2903067322354, 3190.955314749286], + [3245.2903067322354, 3356.555314749286], + [3344.590306732235, 3522.155314749286], + [3443.890306732235, 3356.555314749286], + [3543.1903067322346, 3356.555314749286], + [3642.4903067322343, 3190.955314749286], + [3741.790306732234, 3025.355314749286], + [3741.790306732234, 2859.7553147492863], + [3841.090306732234, 3025.355314749286], + [3841.090306732234, 3190.955314749286], + [3741.790306732234, 3190.955314749286], + [3642.4903067322343, 3025.355314749286], + [3543.1903067322346, 3025.355314749286], + [3543.1903067322346, 2859.7553147492863], + [3443.890306732235, 3025.355314749286], + [3443.890306732235, 3190.955314749286], + [3543.1903067322346, 3190.955314749286], + [3642.4903067322343, 3356.555314749286], + [3543.1903067322346, 3522.155314749286], + [3443.890306732235, 3687.755314749286], + [3443.890306732235, 3853.3553147492858], + [3344.590306732235, 3687.755314749286], + [3245.2903067322354, 3853.3553147492858], + [3245.2903067322354, 3687.755314749286], + [3145.9903067322357, 3687.755314749286], + [3046.690306732236, 3853.3553147492858], + [3145.9903067322357, 4018.9553147492857], + [3145.9903067322357, 3853.3553147492858], + [3046.690306732236, 3687.755314749286], + [3145.9903067322357, 3522.155314749286], + [3145.9903067322357, 3356.555314749286], + [3145.9903067322357, 3190.955314749286], + [3046.690306732236, 3190.955314749286], + [3046.690306732236, 3356.555314749286], + [2947.3903067322362, 3356.555314749286], + [2848.0903067322365, 3190.955314749286], + [2947.3903067322362, 3025.355314749286], + [2848.0903067322365, 3025.355314749286], + [2748.790306732237, 2859.7553147492863], + [2649.490306732237, 2694.1553147492864], + [2748.790306732237, 2528.5553147492865], + [2848.0903067322365, 2362.9553147492866], + [2748.790306732237, 2197.3553147492867], + [2649.490306732237, 2362.9553147492866], + [2649.490306732237, 2197.3553147492867], + [2550.1903067322373, 2362.9553147492866], + [2450.8903067322376, 2362.9553147492866], + [2351.590306732238, 2528.5553147492865], + [2252.290306732238, 2528.5553147492865], + [2351.590306732238, 2362.9553147492866], + [2252.290306732238, 2197.3553147492867], + [2351.590306732238, 2197.3553147492867], + [2351.590306732238, 2031.7553147492865], + [2351.590306732238, 1866.1553147492864], + [2252.290306732238, 1866.1553147492864], + [2351.590306732238, 1700.5553147492863], + [2450.8903067322376, 1534.9553147492861], + [2351.590306732238, 1369.355314749286], + [2252.290306732238, 1203.7553147492858], + [2252.290306732238, 1369.355314749286], + [2252.290306732238, 1534.9553147492861], + [2152.9903067322384, 1369.355314749286], + [2053.6903067322387, 1369.355314749286], + [1954.3903067322387, 1203.7553147492858], + [1855.0903067322388, 1203.7553147492858], + [1755.7903067322388, 1038.1553147492857], + [1656.4903067322389, 1038.1553147492857], + [1557.190306732239, 872.5553147492857], + [1457.890306732239, 1038.1553147492857], + [1457.890306732239, 872.5553147492857], + [1457.890306732239, 706.9553147492858], + [1557.190306732239, 706.9553147492858], + [1656.4903067322389, 872.5553147492857], + [1656.4903067322389, 706.9553147492858], + [1755.7903067322388, 706.9553147492858], + [1656.4903067322389, 541.3553147492859], + [1557.190306732239, 375.7553147492859], + [1656.4903067322389, 210.1553147492859], + [1755.7903067322388, 44.55531474928592], + [1656.4903067322389, 44.55531474928592], + [1557.190306732239, 210.1553147492859], + [1457.890306732239, 210.1553147492859], + [1457.890306732239, 44.55531474928592], + [1358.590306732239, 210.1553147492859], + [1358.590306732239, 375.75531474928584], + [1259.290306732239, 210.15531474928585], + [1259.290306732239, 375.75531474928584], + [1259.290306732239, 541.3553147492859], + [1358.590306732239, 706.9553147492858], + [1358.590306732239, 872.5553147492857], + [1259.290306732239, 706.9553147492858], + [1259.290306732239, 872.5553147492857], + [1259.290306732239, 1038.1553147492857], + [1358.590306732239, 1203.7553147492858], + [1358.590306732239, 1038.1553147492857], + [1457.890306732239, 1203.7553147492858], + [1557.190306732239, 1369.355314749286], + [1656.4903067322389, 1203.7553147492858], + [1557.190306732239, 1203.7553147492858], + [1557.190306732239, 1038.1553147492857], + [17254.572515546668, 1460.5807801244923], + [17353.872515546667, 1626.1807801244925], + [17453.172515546667, 1791.7807801244926], + [17552.472515546666, 1791.7807801244926], + [17453.172515546667, 1626.1807801244925], + [17353.872515546667, 1791.7807801244926], + [17453.172515546667, 1957.3807801244927], + [17353.872515546667, 2122.980780124493], + [17453.172515546667, 2288.580780124493], + [17353.872515546667, 2454.1807801244927], + [17453.172515546667, 2619.7807801244926], + [17552.472515546666, 2619.7807801244926], + [17453.172515546667, 2785.3807801244925], + [17353.872515546667, 2619.7807801244926], + [17254.572515546668, 2454.1807801244927], + [17254.572515546668, 2288.580780124493], + [17353.872515546667, 2288.580780124493], + [17453.172515546667, 2122.980780124493], + [17552.472515546666, 2288.580780124493], + [17552.472515546666, 2454.1807801244927], + [17453.172515546667, 2454.1807801244927], + [4447.67624466283, 4761.1416826913], + [4546.97624466283, 4595.541682691301], + [4546.97624466283, 4429.941682691301], + [4447.67624466283, 4429.941682691301], + [4447.67624466283, 4595.541682691301], + [4348.37624466283, 4595.541682691301], + [4249.07624466283, 4595.541682691301], + [4348.37624466283, 4761.1416826913], + [4249.07624466283, 4761.1416826913], + [4348.37624466283, 4926.7416826912995], + [4348.37624466283, 5092.341682691299], + [4447.67624466283, 5257.941682691298], + [4546.97624466283, 5257.941682691298], + [4646.27624466283, 5092.341682691299], + [4546.97624466283, 5092.341682691299], + [4646.27624466283, 4926.7416826912995], + [4646.27624466283, 4761.1416826913], + [4546.97624466283, 4761.1416826913], + [4646.27624466283, 4595.541682691301], + [4745.5762446628305, 4595.541682691301], + [4646.27624466283, 4429.941682691301], + [4745.5762446628305, 4429.941682691301], + [4844.876244662831, 4595.541682691301], + [4745.5762446628305, 4761.1416826913], + [4745.5762446628305, 4926.7416826912995], + [4844.876244662831, 4761.1416826913], + [4944.176244662831, 4761.1416826913], + [5043.476244662831, 4926.7416826912995], + [5043.476244662831, 4761.1416826913], + [5142.776244662831, 4926.7416826912995], + [5142.776244662831, 4761.1416826913], + [5242.076244662831, 4595.541682691301], + [5142.776244662831, 4595.541682691301], + [5242.076244662831, 4429.941682691301], + [5242.076244662831, 4264.341682691302], + [5142.776244662831, 4429.941682691301], + [5043.476244662831, 4595.541682691301], + [5043.476244662831, 4429.941682691301], + [5043.476244662831, 4264.341682691302], + [5142.776244662831, 4098.741682691302], + [5043.476244662831, 4098.741682691302], + [4944.176244662831, 3933.1416826913023], + [4944.176244662831, 4098.741682691302], + [4944.176244662831, 4264.341682691302], + [4844.876244662831, 4098.741682691302], + [4745.5762446628305, 4264.341682691302], + [4646.27624466283, 4098.741682691302], + [4546.97624466283, 3933.1416826913023], + [4447.67624466283, 4098.741682691302], + [4546.97624466283, 4264.341682691302], + [4447.67624466283, 4264.341682691302], + [4546.97624466283, 4098.741682691302], + [4646.27624466283, 3933.1416826913023], + [4546.97624466283, 3767.5416826913024], + [4447.67624466283, 3601.9416826913025], + [4447.67624466283, 3767.5416826913024], + [4348.37624466283, 3767.5416826913024], + [4348.37624466283, 3933.1416826913023], + [4249.07624466283, 3767.5416826913024], + [4249.07624466283, 3933.1416826913023], + [4149.776244662829, 3933.1416826913023], + [4050.4762446628297, 4098.741682691302], + [4050.4762446628297, 3933.1416826913023], + [3951.17624466283, 3933.1416826913023], + [3951.17624466283, 4098.741682691302], + [3851.8762446628302, 4264.341682691302], + [3851.8762446628302, 4098.741682691302], + [3752.5762446628305, 4098.741682691302], + [3653.276244662831, 4264.341682691302], + [3553.976244662831, 4429.941682691301], + [3553.976244662831, 4595.541682691301], + [3454.6762446628313, 4429.941682691301], + [3553.976244662831, 4264.341682691302], + [3653.276244662831, 4429.941682691301], + [3752.5762446628305, 4264.341682691302], + [3752.5762446628305, 4429.941682691301], + [3851.8762446628302, 4595.541682691301], + [3851.8762446628302, 4429.941682691301], + [3951.17624466283, 4429.941682691301], + [4050.4762446628297, 4264.341682691302], + [4149.776244662829, 4098.741682691302], + [4249.07624466283, 4264.341682691302], + [4348.37624466283, 4098.741682691302], + [4447.67624466283, 3933.1416826913023], + [9574.088902135607, 7352.26293905581], + [9474.788902135606, 7352.26293905581], + [9375.488902135605, 7186.662939055811], + [9474.788902135606, 7021.0629390558115], + [9574.088902135607, 7021.0629390558115], + [9474.788902135606, 7186.662939055811], + [9574.088902135607, 7186.662939055811], + [9673.388902135608, 7021.0629390558115], + [9673.388902135608, 6855.462939055812], + [9772.68890213561, 6689.862939055813], + [9673.388902135608, 6689.862939055813], + [9772.68890213561, 6524.262939055813], + [9871.98890213561, 6358.662939055814], + [9971.288902135611, 6524.262939055813], + [10070.588902135612, 6358.662939055814], + [10070.588902135612, 6193.062939055814], + [9971.288902135611, 6027.462939055815], + [9971.288902135611, 5861.862939055815], + [9871.98890213561, 5861.862939055815], + [9871.98890213561, 5696.262939055816], + [9971.288902135611, 5530.662939055816], + [10070.588902135612, 5530.662939055816], + [10070.588902135612, 5696.262939055816], + [10169.888902135614, 5861.862939055815], + [10169.888902135614, 5696.262939055816], + [10070.588902135612, 5861.862939055815], + [10169.888902135614, 6027.462939055815], + [10169.888902135614, 6193.062939055814], + [10269.188902135615, 6027.462939055815], + [10269.188902135615, 5861.862939055815], + [10368.488902135616, 6027.462939055815], + [10269.188902135615, 6193.062939055814], + [10269.188902135615, 6358.662939055814], + [10169.888902135614, 6358.662939055814], + [10070.588902135612, 6524.262939055813], + [10070.588902135612, 6689.862939055813], + [9971.288902135611, 6855.462939055812], + [9971.288902135611, 7021.0629390558115], + [10070.588902135612, 7186.662939055811], + [10169.888902135614, 7186.662939055811], + [10269.188902135615, 7186.662939055811], + [10169.888902135614, 7352.26293905581], + [10070.588902135612, 7352.26293905581], + [10169.888902135614, 7517.86293905581], + [10169.888902135614, 7683.462939055809], + [10269.188902135615, 7517.86293905581], + [10368.488902135616, 7683.462939055809], + [10467.788902135617, 7683.462939055809], + [10368.488902135616, 7517.86293905581], + [10269.188902135615, 7352.26293905581], + [10368.488902135616, 7352.26293905581], + [10368.488902135616, 7186.662939055811], + [10368.488902135616, 7021.0629390558115], + [10368.488902135616, 6855.462939055812], + [10269.188902135615, 6855.462939055812], + [10169.888902135614, 6855.462939055812], + [10169.888902135614, 7021.0629390558115], + [10070.588902135612, 7021.0629390558115], + [10070.588902135612, 6855.462939055812], + [10169.888902135614, 6689.862939055813], + [10269.188902135615, 6689.862939055813], + [10169.888902135614, 6524.262939055813], + [10269.188902135615, 6524.262939055813], + [10368.488902135616, 6524.262939055813], + [10368.488902135616, 6358.662939055814], + [10467.788902135617, 6358.662939055814], + [10467.788902135617, 6193.062939055814], + [10567.088902135618, 6358.662939055814], + [10567.088902135618, 6193.062939055814], + [10666.388902135619, 6193.062939055814], + [10666.388902135619, 6358.662939055814], + [10567.088902135618, 6524.262939055813], + [10467.788902135617, 6524.262939055813], + [10567.088902135618, 6689.862939055813], + [10467.788902135617, 6855.462939055812], + [10567.088902135618, 7021.0629390558115], + [10467.788902135617, 7021.0629390558115], + [10567.088902135618, 6855.462939055812], + [10467.788902135617, 6689.862939055813], + [10368.488902135616, 6689.862939055813], + [1073.6944354374714, 1154.3681204032646], + [974.3944354374713, 1319.9681204032647], + [875.0944354374712, 1319.9681204032647], + [775.7944354374712, 1154.3681204032646], + [775.7944354374712, 988.7681204032646], + [875.0944354374712, 823.1681204032647], + [875.0944354374712, 657.5681204032647], + [775.7944354374712, 823.1681204032647], + [676.4944354374711, 657.5681204032647], + [676.4944354374711, 491.9681204032648], + [775.7944354374712, 657.5681204032647], + [676.4944354374711, 823.1681204032647], + [676.4944354374711, 988.7681204032646], + [577.194435437471, 823.1681204032647], + [577.194435437471, 988.7681204032646], + [577.194435437471, 1154.3681204032646], + [676.4944354374711, 1319.9681204032647], + [577.194435437471, 1319.9681204032647], + [477.89443543747103, 1319.9681204032647], + [577.194435437471, 1485.5681204032649], + [477.89443543747103, 1651.168120403265], + [577.194435437471, 1816.7681204032651], + [477.89443543747103, 1816.7681204032651], + [378.5944354374711, 1982.3681204032653], + [378.5944354374711, 2147.9681204032654], + [279.2944354374711, 2313.5681204032653], + [179.99443543747114, 2147.9681204032654], + [80.69443543747114, 2313.5681204032653], + [80.69443543747114, 2479.168120403265], + [179.9944354374711, 2644.768120403265], + [179.9944354374711, 2479.168120403265], + [179.9944354374711, 2313.5681204032653], + [80.69443543747111, 2147.9681204032654], + [80.69443543747111, 1982.3681204032653], + [179.9944354374711, 1982.3681204032653], + [179.9944354374711, 1816.7681204032651], + [80.69443543747111, 1816.7681204032651], + [179.9944354374711, 1651.168120403265], + [80.69443543747111, 1485.5681204032649], + [80.69443543747111, 1319.9681204032647], + [179.9944354374711, 1154.3681204032646], + [80.69443543747111, 1154.3681204032646], + [179.9944354374711, 988.7681204032646], + [279.2944354374711, 823.1681204032647], + [378.5944354374711, 657.5681204032647], + [378.5944354374711, 823.1681204032647], + [477.89443543747103, 823.1681204032647], + [477.89443543747103, 657.5681204032647], + [378.5944354374711, 491.9681204032648], + [477.89443543747103, 326.3681204032648], + [477.89443543747103, 160.76812040326482], + [378.5944354374711, 160.76812040326482], + [279.2944354374711, 326.3681204032648], + [179.99443543747114, 491.9681204032648], + [179.99443543747114, 326.3681204032648], + [279.2944354374711, 491.9681204032648], + [279.2944354374711, 657.5681204032647], + [179.99443543747114, 823.1681204032647], + [279.2944354374711, 988.7681204032646], + [279.2944354374711, 1154.3681204032646], + [378.5944354374711, 1319.9681204032647], + [477.89443543747103, 1485.5681204032649], + [577.194435437471, 1651.168120403265], + [676.4944354374711, 1651.168120403265], + [775.7944354374712, 1816.7681204032651], + [676.4944354374711, 1816.7681204032651], + [775.7944354374712, 1651.168120403265], + [875.0944354374712, 1651.168120403265], + [974.3944354374713, 1651.168120403265], + [875.0944354374712, 1485.5681204032649], + [775.7944354374712, 1485.5681204032649], + [676.4944354374711, 1485.5681204032649], + [775.7944354374712, 1319.9681204032647], + [676.4944354374711, 1154.3681204032646], + [3138.413562431697, 2355.845602060523], + [3039.113562431697, 2521.445602060523], + [3039.113562431697, 2355.845602060523], + [3039.113562431697, 2190.245602060523], + [3138.413562431697, 2024.645602060523], + [3237.7135624316966, 1859.045602060523], + [3237.7135624316966, 2024.645602060523], + [3337.0135624316963, 1859.045602060523], + [3337.0135624316963, 1693.4456020605228], + [3436.313562431696, 1527.8456020605227], + [3535.6135624316958, 1693.4456020605228], + [3535.6135624316958, 1859.045602060523], + [3634.9135624316955, 2024.645602060523], + [3734.213562431695, 2190.245602060523], + [3634.9135624316955, 2190.245602060523], + [3535.6135624316958, 2190.245602060523], + [3535.6135624316958, 2355.845602060523], + [3535.6135624316958, 2521.445602060523], + [3436.313562431696, 2687.045602060523], + [3436.313562431696, 2852.645602060523], + [3535.6135624316958, 2687.045602060523], + [3634.9135624316955, 2521.445602060523], + [3634.9135624316955, 2355.845602060523], + [3734.213562431695, 2355.845602060523], + [3833.513562431695, 2190.245602060523], + [3932.8135624316947, 2024.645602060523], + [3833.513562431695, 1859.045602060523], + [3833.513562431695, 1693.4456020605228], + [3734.213562431695, 1859.045602060523], + [3734.213562431695, 1693.4456020605228], + [3734.213562431695, 1527.8456020605227], + [3634.9135624316955, 1527.8456020605227], + [3634.9135624316955, 1693.4456020605228], + [3535.6135624316958, 1527.8456020605227], + [3634.9135624316955, 1362.2456020605225], + [3535.6135624316958, 1362.2456020605225], + [3436.313562431696, 1196.6456020605224], + [3535.6135624316958, 1196.6456020605224], + [3535.6135624316958, 1031.0456020605222], + [3436.313562431696, 1031.0456020605222], + [3535.6135624316958, 865.4456020605222], + [3436.313562431696, 865.4456020605222], + [3535.6135624316958, 699.8456020605223], + [3634.9135624316955, 699.8456020605223], + [3535.6135624316958, 534.2456020605224], + [3436.313562431696, 368.64560206052244], + [3436.313562431696, 203.04560206052244], + [3337.0135624316963, 37.445602060522454], + [3436.313562431696, 37.445602060522454], + [3337.0135624316963, 203.04560206052244], + [3237.7135624316966, 37.445602060522454], + [3138.413562431697, 37.445602060522454], + [3237.7135624316966, 203.04560206052244], + [3337.0135624316963, 368.6456020605224], + [3436.313562431696, 534.2456020605224], + [3337.0135624316963, 699.8456020605223], + [3237.7135624316966, 534.2456020605224], + [3337.0135624316963, 534.2456020605224], + [3436.313562431696, 699.8456020605223], + [3337.0135624316963, 865.4456020605222], + [3237.7135624316966, 865.4456020605222], + [3337.0135624316963, 1031.0456020605222], + [3237.7135624316966, 1196.6456020605224], + [3138.413562431697, 1362.2456020605225], + [3039.113562431697, 1527.8456020605227], + [3138.413562431697, 1527.8456020605227], + [3039.113562431697, 1693.4456020605228], + [2939.8135624316974, 1527.8456020605227], + [2840.5135624316977, 1362.2456020605225], + [2840.5135624316977, 1527.8456020605227], + [2840.5135624316977, 1693.4456020605228], + [2939.8135624316974, 1859.045602060523], + [2840.5135624316977, 2024.645602060523], + [2840.5135624316977, 1859.045602060523], + [2939.8135624316974, 1693.4456020605228], + [3039.113562431697, 1859.045602060523], + [3039.113562431697, 2024.645602060523], + [2939.8135624316974, 2190.245602060523], + [2939.8135624316974, 2024.645602060523], + [16388.412117675925, 1839.818884803299], + [16289.112117675924, 1839.818884803299], + [16388.412117675925, 1674.2188848032988], + [16487.712117675925, 1508.6188848032987], + [16487.712117675925, 1674.2188848032988], + [16388.412117675925, 1508.6188848032987], + [16289.112117675924, 1343.0188848032985], + [16289.112117675924, 1508.6188848032987], + [16189.812117675923, 1674.2188848032988], + [16090.512117675922, 1839.818884803299], + [16090.512117675922, 2005.418884803299], + [15991.212117675921, 2171.018884803299], + [16090.512117675922, 2336.618884803299], + [16090.512117675922, 2502.218884803299], + [16090.512117675922, 2667.8188848032987], + [15991.212117675921, 2833.4188848032986], + [15991.212117675921, 2999.0188848032985], + [15891.91211767592, 3164.6188848032984], + [15891.91211767592, 3330.2188848032984], + [15991.212117675921, 3330.2188848032984], + [16090.512117675922, 3330.2188848032984], + [16189.812117675923, 3495.8188848032983], + [16289.112117675924, 3495.8188848032983], + [16189.812117675923, 3330.2188848032984], + [16189.812117675923, 3164.6188848032984], + [16289.112117675924, 3164.6188848032984], + [16388.412117675925, 3164.6188848032984], + [16388.412117675925, 3330.2188848032984], + [16487.712117675925, 3330.2188848032984], + [16587.012117675924, 3495.8188848032983], + [16587.012117675924, 3661.418884803298], + [16686.312117675923, 3661.418884803298], + [16785.612117675922, 3661.418884803298], + [16884.91211767592, 3661.418884803298], + [16984.21211767592, 3661.418884803298], + [16884.91211767592, 3827.018884803298], + [16884.91211767592, 3992.618884803298], + [16984.21211767592, 3827.018884803298], + [17083.51211767592, 3661.418884803298], + [17182.81211767592, 3495.8188848032983], + [17182.81211767592, 3330.2188848032984], + [17282.11211767592, 3164.6188848032984], + [17282.11211767592, 3330.2188848032984], + [17182.81211767592, 3164.6188848032984], + [17083.51211767592, 3164.6188848032984], + [16984.21211767592, 3330.2188848032984], + [16984.21211767592, 3495.8188848032983], + [17083.51211767592, 3330.2188848032984], + [16984.21211767592, 3164.6188848032984], + [16984.21211767592, 2999.0188848032985], + [17083.51211767592, 2833.4188848032986], + [17083.51211767592, 2667.8188848032987], + [17182.81211767592, 2667.8188848032987], + [17182.81211767592, 2833.4188848032986], + [17083.51211767592, 2999.0188848032985], + [16984.21211767592, 2833.4188848032986], + [16884.91211767592, 2833.4188848032986], + [16884.91211767592, 2999.0188848032985], + [16785.612117675922, 2999.0188848032985], + [16884.91211767592, 3164.6188848032984], + [16785.612117675922, 3164.6188848032984], + [16686.312117675923, 3164.6188848032984], + [16587.012117675924, 3164.6188848032984], + [16587.012117675924, 2999.0188848032985], + [16487.712117675925, 3164.6188848032984], + [16587.012117675924, 3330.2188848032984], + [16686.312117675923, 3495.8188848032983], + [16686.312117675923, 3330.2188848032984], + [16785.612117675922, 3330.2188848032984], + [16884.91211767592, 3495.8188848032983], + [16785.612117675922, 3495.8188848032983], + [16884.91211767592, 3330.2188848032984], + [1272.175991128079, 3842.7700224365044], + [1371.475991128079, 3842.7700224365044], + [1272.175991128079, 3677.1700224365045], + [1172.875991128079, 3511.5700224365046], + [1272.175991128079, 3511.5700224365046], + [1172.875991128079, 3345.9700224365047], + [1073.575991128079, 3180.3700224365048], + [1073.575991128079, 3014.770022436505], + [974.275991128079, 3014.770022436505], + [874.9759911280789, 3014.770022436505], + [775.6759911280789, 2849.170022436505], + [775.6759911280789, 3014.770022436505], + [775.6759911280789, 3180.3700224365048], + [676.3759911280788, 3345.9700224365047], + [676.3759911280788, 3511.5700224365046], + [775.6759911280789, 3677.1700224365045], + [676.3759911280788, 3842.7700224365044], + [577.0759911280787, 3842.7700224365044], + [577.0759911280787, 3677.1700224365045], + [676.3759911280788, 3677.1700224365045], + [775.6759911280789, 3511.5700224365046], + [775.6759911280789, 3345.9700224365047], + [874.9759911280789, 3345.9700224365047], + [874.9759911280789, 3180.3700224365048], + [974.275991128079, 3180.3700224365048], + [974.275991128079, 3345.9700224365047], + [1073.575991128079, 3511.5700224365046], + [1073.575991128079, 3677.1700224365045], + [1172.875991128079, 3677.1700224365045], + [1172.875991128079, 3842.7700224365044], + [1073.575991128079, 3842.7700224365044], + [1172.875991128079, 4008.3700224365043], + [1073.575991128079, 4008.3700224365043], + [974.275991128079, 3842.7700224365044], + [974.275991128079, 4008.3700224365043], + [874.9759911280789, 4008.3700224365043], + [775.6759911280789, 4008.3700224365043], + [874.9759911280789, 3842.7700224365044], + [974.275991128079, 3677.1700224365045], + [974.275991128079, 3511.5700224365046], + [1073.575991128079, 3345.9700224365047], + [1172.875991128079, 3180.3700224365048], + [1272.175991128079, 3180.3700224365048], + [1272.175991128079, 3345.9700224365047], + [1371.475991128079, 3180.3700224365048], + [1470.7759911280789, 3345.9700224365047], + [1371.475991128079, 3345.9700224365047], + [1371.475991128079, 3511.5700224365046], + [1470.7759911280789, 3511.5700224365046], + [1570.0759911280788, 3677.1700224365045], + [1470.7759911280789, 3677.1700224365045], + [1570.0759911280788, 3511.5700224365046], + [1669.3759911280788, 3511.5700224365046], + [1669.3759911280788, 3677.1700224365045], + [1768.6759911280787, 3842.7700224365044], + [1669.3759911280788, 3842.7700224365044], + [1768.6759911280787, 4008.3700224365043], + [1867.9759911280787, 3842.7700224365044], + [1967.2759911280787, 3677.1700224365045], + [2066.5759911280784, 3842.7700224365044], + [2165.875991128078, 3677.1700224365045], + [2066.5759911280784, 3511.5700224365046], + [2165.875991128078, 3511.5700224365046], + [2066.5759911280784, 3677.1700224365045], + [2165.875991128078, 3842.7700224365044], + [2265.175991128078, 4008.3700224365043], + [2364.4759911280776, 4008.3700224365043], + [2265.175991128078, 3842.7700224365044], + [2364.4759911280776, 3677.1700224365045], + [2463.7759911280773, 3842.7700224365044], + [2463.7759911280773, 4008.3700224365043], + [2364.4759911280776, 3842.7700224365044], + [6853.940039224797, 6050.837897021371], + [6953.240039224797, 6050.837897021371], + [7052.5400392247975, 5885.237897021371], + [7052.5400392247975, 5719.637897021372], + [7151.840039224798, 5885.237897021371], + [7052.5400392247975, 6050.837897021371], + [7052.5400392247975, 6216.43789702137], + [7052.5400392247975, 6382.03789702137], + [6953.240039224797, 6382.03789702137], + [6953.240039224797, 6216.43789702137], + [6853.940039224797, 6216.43789702137], + [6853.940039224797, 6382.03789702137], + [6754.640039224797, 6216.43789702137], + [6754.640039224797, 6382.03789702137], + [6754.640039224797, 6547.637897021369], + [6754.640039224797, 6713.237897021369], + [6655.340039224797, 6713.237897021369], + [6754.640039224797, 6878.837897021368], + [6853.940039224797, 6713.237897021369], + [6853.940039224797, 6878.837897021368], + [6953.240039224797, 6713.237897021369], + [7052.5400392247975, 6547.637897021369], + [7151.840039224798, 6713.237897021369], + [7151.840039224798, 6547.637897021369], + [7151.840039224798, 6382.03789702137], + [7251.140039224798, 6547.637897021369], + [7251.140039224798, 6713.237897021369], + [7350.440039224798, 6878.837897021368], + [7449.740039224798, 6878.837897021368], + [7449.740039224798, 6713.237897021369], + [7549.040039224798, 6547.637897021369], + [7449.740039224798, 6382.03789702137], + [7449.740039224798, 6216.43789702137], + [7549.040039224798, 6050.837897021371], + [7648.340039224799, 6216.43789702137], + [7549.040039224798, 6382.03789702137], + [7648.340039224799, 6382.03789702137], + [7747.640039224799, 6216.43789702137], + [7846.940039224799, 6382.03789702137], + [7946.240039224799, 6382.03789702137], + [7946.240039224799, 6547.637897021369], + [7846.940039224799, 6713.237897021369], + [7946.240039224799, 6713.237897021369], + [8045.540039224799, 6547.637897021369], + [8045.540039224799, 6713.237897021369], + [7946.240039224799, 6878.837897021368], + [7946.240039224799, 7044.4378970213675], + [8045.540039224799, 7210.037897021367], + [8144.8400392247995, 7375.637897021366], + [8144.8400392247995, 7541.237897021366], + [8045.540039224799, 7375.637897021366], + [8144.8400392247995, 7210.037897021367], + [8045.540039224799, 7044.4378970213675], + [7946.240039224799, 7210.037897021367], + [7846.940039224799, 7210.037897021367], + [7946.240039224799, 7375.637897021366], + [8045.540039224799, 7541.237897021366], + [8144.8400392247995, 7706.837897021365], + [8244.1400392248, 7541.237897021366], + [8343.4400392248, 7541.237897021366], + [8343.4400392248, 7706.837897021365], + [8244.1400392248, 7706.837897021365], + [4735.523842661975, 3503.497768214323], + [4636.223842661975, 3337.897768214323], + [4536.923842661975, 3337.897768214323], + [4437.623842661975, 3172.2977682143232], + [4338.323842661975, 3172.2977682143232], + [4239.023842661974, 3172.2977682143232], + [4338.323842661975, 3006.6977682143233], + [4437.623842661975, 2841.0977682143234], + [4338.323842661975, 2675.4977682143235], + [4338.323842661975, 2509.8977682143236], + [4239.023842661974, 2675.4977682143235], + [4139.723842661974, 2509.8977682143236], + [4040.4238426619745, 2344.2977682143237], + [4139.723842661974, 2178.697768214324], + [4239.023842661974, 2178.697768214324], + [4139.723842661974, 2344.2977682143237], + [4040.4238426619745, 2178.697768214324], + [4139.723842661974, 2013.0977682143237], + [4139.723842661974, 1847.4977682143235], + [4239.023842661974, 2013.0977682143237], + [4239.023842661974, 1847.4977682143235], + [4338.323842661975, 1847.4977682143235], + [4437.623842661975, 1847.4977682143235], + [4536.923842661975, 1681.8977682143234], + [4437.623842661975, 1516.2977682143232], + [4536.923842661975, 1516.2977682143232], + [4536.923842661975, 1350.697768214323], + [4437.623842661975, 1350.697768214323], + [4536.923842661975, 1185.097768214323], + [4636.223842661975, 1019.497768214323], + [4536.923842661975, 853.897768214323], + [4636.223842661975, 853.897768214323], + [4735.523842661975, 688.2977682143231], + [4636.223842661975, 522.6977682143232], + [4636.223842661975, 357.09776821432325], + [4735.523842661975, 357.09776821432325], + [4735.523842661975, 522.6977682143232], + [4636.223842661975, 688.2977682143231], + [4735.523842661975, 853.897768214323], + [4834.8238426619755, 853.897768214323], + [4735.523842661975, 1019.497768214323], + [4735.523842661975, 1185.097768214323], + [4735.523842661975, 1350.697768214323], + [4834.8238426619755, 1516.2977682143232], + [4735.523842661975, 1516.2977682143232], + [4834.8238426619755, 1350.697768214323], + [4834.8238426619755, 1185.097768214323], + [4934.123842661976, 1350.697768214323], + [5033.423842661976, 1185.097768214323], + [5033.423842661976, 1019.497768214323], + [5033.423842661976, 853.897768214323], + [4934.123842661976, 853.897768214323], + [4934.123842661976, 1019.497768214323], + [4834.8238426619755, 1019.497768214323], + [4934.123842661976, 1185.097768214323], + [5033.423842661976, 1350.697768214323], + [5132.723842661976, 1350.697768214323], + [5132.723842661976, 1185.097768214323], + [5232.023842661976, 1019.497768214323], + [5232.023842661976, 1185.097768214323], + [5331.323842661976, 1019.497768214323], + [5430.623842661977, 1019.497768214323], + [5529.923842661977, 1185.097768214323], + [5430.623842661977, 1350.697768214323], + [5430.623842661977, 1516.2977682143232], + [5529.923842661977, 1350.697768214323], + [5629.223842661977, 1350.697768214323], + [5728.523842661977, 1350.697768214323], + [5728.523842661977, 1516.2977682143232], + [5728.523842661977, 1681.8977682143234], + [5629.223842661977, 1516.2977682143232], + [5529.923842661977, 1516.2977682143232], + [5629.223842661977, 1681.8977682143234], + [5529.923842661977, 1681.8977682143234], + [5430.623842661977, 1847.4977682143235], + [5331.323842661976, 1847.4977682143235], + [5331.323842661976, 2013.0977682143237], + [5232.023842661976, 2178.697768214324], + [5132.723842661976, 2013.0977682143237], + [5132.723842661976, 2178.697768214324], + [5232.023842661976, 2013.0977682143237], + [5232.023842661976, 1847.4977682143235], + [5232.023842661976, 1681.8977682143234], + [5331.323842661976, 1681.8977682143234], + [5331.323842661976, 1516.2977682143232], + [5331.323842661976, 1350.697768214323], + [5232.023842661976, 1350.697768214323], + [5232.023842661976, 1516.2977682143232], + [5132.723842661976, 1516.2977682143232], + [5132.723842661976, 1681.8977682143234], + [5033.423842661976, 1847.4977682143235], + [5132.723842661976, 1847.4977682143235], + [5033.423842661976, 2013.0977682143237], + [4934.123842661976, 2178.697768214324], + [5033.423842661976, 2344.2977682143237], + [4934.123842661976, 2344.2977682143237], + [4834.8238426619755, 2178.697768214324], + [4834.8238426619755, 2344.2977682143237], + [4735.523842661975, 2344.2977682143237], + [4636.223842661975, 2344.2977682143237], + [4536.923842661975, 2178.697768214324], + [4437.623842661975, 2013.0977682143237], + [4338.323842661975, 2178.697768214324], + [4437.623842661975, 2344.2977682143237], + [4536.923842661975, 2509.8977682143236], + [4636.223842661975, 2675.4977682143235], + [4636.223842661975, 2509.8977682143236], + [4536.923842661975, 2675.4977682143235], + [4636.223842661975, 2841.0977682143234], + [4536.923842661975, 2841.0977682143234], + [4636.223842661975, 3006.6977682143233], + [4735.523842661975, 3172.2977682143232], + [4834.8238426619755, 3006.6977682143233], + [4735.523842661975, 2841.0977682143234], + [4735.523842661975, 3006.6977682143233], + [4636.223842661975, 3172.2977682143232], + [4735.523842661975, 3337.897768214323], + [4834.8238426619755, 3503.497768214323], + [4735.523842661975, 3669.097768214323], + [4834.8238426619755, 3834.697768214323], + [4834.8238426619755, 3669.097768214323], + [4934.123842661976, 3503.497768214323], + [5033.423842661976, 3503.497768214323], + [5033.423842661976, 3337.897768214323], + [4934.123842661976, 3337.897768214323], + [4834.8238426619755, 3172.2977682143232], + [4834.8238426619755, 3337.897768214323], + [4934.123842661976, 3172.2977682143232], + [5033.423842661976, 3006.6977682143233], + [5132.723842661976, 2841.0977682143234], + [5132.723842661976, 3006.6977682143233], + [5232.023842661976, 3172.2977682143232], + [5232.023842661976, 3337.897768214323], + [5132.723842661976, 3337.897768214323], + [5232.023842661976, 3503.497768214323], + [5331.323842661976, 3337.897768214323], + [5331.323842661976, 3503.497768214323], + [5430.623842661977, 3669.097768214323], + [5331.323842661976, 3669.097768214323], + [5430.623842661977, 3503.497768214323], + [5430.623842661977, 3337.897768214323], + [5529.923842661977, 3172.2977682143232], + [5529.923842661977, 3337.897768214323], + [5629.223842661977, 3337.897768214323], + [5728.523842661977, 3337.897768214323], + [5728.523842661977, 3503.497768214323], + [5827.823842661977, 3503.497768214323], + [5927.1238426619775, 3669.097768214323], + [6026.423842661978, 3669.097768214323], + [6125.723842661978, 3503.497768214323], + [6125.723842661978, 3669.097768214323], + [6225.023842661978, 3503.497768214323], + [6225.023842661978, 3337.897768214323], + [6324.323842661978, 3337.897768214323], + [6423.623842661978, 3503.497768214323], + [6324.323842661978, 3669.097768214323], + [6225.023842661978, 3669.097768214323], + [6324.323842661978, 3834.697768214323], + [6423.623842661978, 3834.697768214323], + [6324.323842661978, 4000.297768214323], + [6225.023842661978, 3834.697768214323], + [6125.723842661978, 3834.697768214323], + [6125.723842661978, 4000.297768214323], + [6225.023842661978, 4000.297768214323], + [6225.023842661978, 4165.897768214322], + [6225.023842661978, 4331.497768214322], + [6125.723842661978, 4165.897768214322], + [6026.423842661978, 4000.2977682143223], + [5927.1238426619775, 4165.897768214322], + [6026.423842661978, 4331.497768214322], + [6026.423842661978, 4497.097768214321], + [5927.1238426619775, 4497.097768214321], + [5827.823842661977, 4662.697768214321], + [5728.523842661977, 4828.29776821432], + [5827.823842661977, 4828.29776821432], + [5927.1238426619775, 4828.29776821432], + [5927.1238426619775, 4662.697768214321], + [5827.823842661977, 4497.097768214321], + [5927.1238426619775, 4331.497768214322], + [5827.823842661977, 4165.897768214322], + [5728.523842661977, 4331.497768214322], + [5728.523842661977, 4165.897768214322], + [5629.223842661977, 4000.2977682143223], + [5629.223842661977, 3834.6977682143224], + [5529.923842661977, 3669.0977682143225], + [5629.223842661977, 3503.4977682143226], + [5728.523842661977, 3669.0977682143225], + [5827.823842661977, 3669.0977682143225], + [5927.1238426619775, 3834.6977682143224], + [5927.1238426619775, 4000.2977682143223], + [6026.423842661978, 4165.897768214322], + [6125.723842661978, 4331.497768214322], + [6225.023842661978, 4497.097768214321], + [6225.023842661978, 4662.697768214321], + [6324.323842661978, 4662.697768214321], + [6225.023842661978, 4828.29776821432], + [6324.323842661978, 4828.29776821432], + [6423.623842661978, 4828.29776821432], + [6324.323842661978, 4993.8977682143195], + [6225.023842661978, 5159.497768214319], + [6125.723842661978, 5159.497768214319], + [6026.423842661978, 5325.097768214318], + [5927.1238426619775, 5490.697768214318], + [6026.423842661978, 5656.297768214317], + [5927.1238426619775, 5821.897768214317], + [5927.1238426619775, 5987.497768214316], + [6026.423842661978, 5987.497768214316], + [6026.423842661978, 5821.897768214317], + [5927.1238426619775, 5656.297768214317], + [5827.823842661977, 5656.297768214317], + [5827.823842661977, 5490.697768214318], + [5728.523842661977, 5490.697768214318], + [5629.223842661977, 5325.097768214318], + [5629.223842661977, 5159.497768214319], + [5529.923842661977, 4993.8977682143195], + [5529.923842661977, 5159.497768214319], + [5629.223842661977, 4993.8977682143195], + [5629.223842661977, 4828.29776821432], + [5529.923842661977, 4662.697768214321], + [5430.623842661977, 4828.29776821432], + [5529.923842661977, 4828.29776821432], + [5629.223842661977, 4662.697768214321], + [5728.523842661977, 4662.697768214321], + [5629.223842661977, 4497.097768214321], + [5728.523842661977, 4497.097768214321], + [5827.823842661977, 4331.497768214322], + [10216.161365168813, 2951.605409896135], + [10116.861365168812, 2951.605409896135], + [10017.56136516881, 3117.205409896135], + [9918.26136516881, 3117.205409896135], + [9818.961365168809, 3117.205409896135], + [9719.661365168808, 3282.8054098961347], + [9620.361365168807, 3282.8054098961347], + [9620.361365168807, 3117.205409896135], + [9521.061365168805, 2951.605409896135], + [9521.061365168805, 2786.005409896135], + [9620.361365168807, 2786.005409896135], + [9719.661365168808, 2786.005409896135], + [9818.961365168809, 2620.405409896135], + [9918.26136516881, 2786.005409896135], + [9818.961365168809, 2951.605409896135], + [9818.961365168809, 2786.005409896135], + [9719.661365168808, 2620.405409896135], + [9719.661365168808, 2454.805409896135], + [9620.361365168807, 2289.2054098961353], + [9521.061365168805, 2123.6054098961354], + [9620.361365168807, 1958.0054098961352], + [9719.661365168808, 2123.6054098961354], + [9818.961365168809, 2289.2054098961353], + [9818.961365168809, 2123.6054098961354], + [9818.961365168809, 1958.0054098961352], + [9719.661365168808, 1958.0054098961352], + [9620.361365168807, 1792.405409896135], + [9620.361365168807, 1626.805409896135], + [9521.061365168805, 1461.2054098961348], + [9421.761365168804, 1295.6054098961347], + [9521.061365168805, 1130.0054098961346], + [9521.061365168805, 964.4054098961345], + [9421.761365168804, 964.4054098961345], + [9521.061365168805, 798.8054098961346], + [9620.361365168807, 798.8054098961346], + [9620.361365168807, 964.4054098961345], + [9620.361365168807, 1130.0054098961346], + [9620.361365168807, 1295.6054098961347], + [9620.361365168807, 1461.2054098961348], + [9719.661365168808, 1295.6054098961347], + [9818.961365168809, 1130.0054098961346], + [9918.26136516881, 964.4054098961345], + [9818.961365168809, 964.4054098961345], + [9918.26136516881, 798.8054098961346], + [10017.56136516881, 633.2054098961347], + [9918.26136516881, 467.60540989613474], + [9918.26136516881, 302.0054098961348], + [10017.56136516881, 302.0054098961348], + [10116.861365168812, 136.40540989613478], + [10116.861365168812, 302.0054098961348], + [10116.861365168812, 467.60540989613474], + [10116.861365168812, 633.2054098961347], + [10216.161365168813, 633.2054098961347], + [10216.161365168813, 798.8054098961346], + [10315.461365168814, 633.2054098961347], + [10315.461365168814, 798.8054098961346], + [10414.761365168815, 798.8054098961346], + [10514.061365168816, 633.2054098961347], + [10514.061365168816, 798.8054098961346], + [10414.761365168815, 964.4054098961345], + [10315.461365168814, 964.4054098961345], + [10216.161365168813, 964.4054098961345], + [10116.861365168812, 798.8054098961346], + [10017.56136516881, 798.8054098961346], + [10116.861365168812, 964.4054098961345], + [10216.161365168813, 1130.0054098961346], + [10116.861365168812, 1130.0054098961346], + [10216.161365168813, 1295.6054098961347], + [10216.161365168813, 1461.2054098961348], + [10315.461365168814, 1626.805409896135], + [10315.461365168814, 1792.405409896135], + [10216.161365168813, 1958.0054098961352], + [10216.161365168813, 1792.405409896135], + [10116.861365168812, 1792.405409896135], + [10017.56136516881, 1958.0054098961352], + [9918.26136516881, 2123.6054098961354], + [9918.26136516881, 1958.0054098961352], + [10017.56136516881, 2123.6054098961354], + [10116.861365168812, 2123.6054098961354], + [10017.56136516881, 2289.2054098961353], + [10017.56136516881, 2454.805409896135], + [10116.861365168812, 2289.2054098961353], + [10216.161365168813, 2454.805409896135], + [10315.461365168814, 2620.405409896135], + [10315.461365168814, 2454.805409896135], + [10315.461365168814, 2289.2054098961353], + [10414.761365168815, 2454.805409896135], + [10514.061365168816, 2620.405409896135], + [10613.361365168817, 2786.005409896135], + [10514.061365168816, 2786.005409896135], + [10613.361365168817, 2620.405409896135], + [10514.061365168816, 2454.805409896135], + [10514.061365168816, 2289.2054098961353], + [10613.361365168817, 2289.2054098961353], + [10712.661365168819, 2289.2054098961353], + [10811.96136516882, 2454.805409896135], + [10911.26136516882, 2289.2054098961353], + [10811.96136516882, 2289.2054098961353], + [10712.661365168819, 2454.805409896135], + [10712.661365168819, 2620.405409896135], + [10811.96136516882, 2786.005409896135], + [10911.26136516882, 2620.405409896135], + [10911.26136516882, 2786.005409896135], + [11010.561365168822, 2620.405409896135], + [10911.26136516882, 2454.805409896135], + [10811.96136516882, 2620.405409896135], + [10712.661365168819, 2786.005409896135], + [10811.96136516882, 2951.605409896135], + [10911.26136516882, 2951.605409896135], + [10811.96136516882, 3117.205409896135], + [10712.661365168819, 2951.605409896135], + [10613.361365168817, 2951.605409896135], + [10514.061365168816, 2951.605409896135], + [10414.761365168815, 3117.205409896135], + [10414.761365168815, 2951.605409896135], + [10315.461365168814, 2786.005409896135], + [10216.161365168813, 2620.405409896135], + [10216.161365168813, 2786.005409896135], + [10315.461365168814, 2951.605409896135], + [10315.461365168814, 3117.205409896135], + [10216.161365168813, 3117.205409896135], + [10116.861365168812, 3117.205409896135], + [10017.56136516881, 3282.8054098961347], + [9918.26136516881, 3448.4054098961346], + [9818.961365168809, 3448.4054098961346], + [9818.961365168809, 3614.0054098961346], + [9719.661365168808, 3448.4054098961346], + [9818.961365168809, 3282.8054098961347], + [9719.661365168808, 3117.205409896135], + [9620.361365168807, 2951.605409896135], + [9521.061365168805, 3117.205409896135], + [9521.061365168805, 3282.8054098961347], + [9421.761365168804, 3117.205409896135], + [9421.761365168804, 3282.8054098961347], + [9322.461365168803, 3117.205409896135], + [9421.761365168804, 2951.605409896135], + [9322.461365168803, 2951.605409896135], + [9223.161365168802, 2786.005409896135], + [9322.461365168803, 2620.405409896135], + [9421.761365168804, 2454.805409896135], + [9521.061365168805, 2289.2054098961353], + [9421.761365168804, 2123.6054098961354], + [9421.761365168804, 1958.0054098961352], + [9421.761365168804, 1792.405409896135], + [9521.061365168805, 1626.805409896135], + [9421.761365168804, 1626.805409896135], + [9322.461365168803, 1792.405409896135], + [9322.461365168803, 1626.805409896135], + [9322.461365168803, 1461.2054098961348], + [9421.761365168804, 1461.2054098961348], + [9521.061365168805, 1295.6054098961347], + [9421.761365168804, 1130.0054098961346], + [9322.461365168803, 964.4054098961345], + [9223.161365168802, 964.4054098961345], + [9223.161365168802, 798.8054098961346], + [9322.461365168803, 633.2054098961347], + [9421.761365168804, 798.8054098961346], + [9421.761365168804, 633.2054098961347], + [9521.061365168805, 633.2054098961347], + [9421.761365168804, 467.60540989613474], + [9421.761365168804, 302.0054098961348], + [9322.461365168803, 136.40540989613478], + [9223.161365168802, 302.0054098961348], + [9123.861365168801, 302.0054098961348], + [9024.5613651688, 136.40540989613478], + [9123.861365168801, 136.40540989613478], + [9223.161365168802, 136.40540989613478], + [9322.461365168803, 302.0054098961348], + [9421.761365168804, 136.40540989613478], + [9521.061365168805, 136.40540989613478], + [9620.361365168807, 136.40540989613478], + [9620.361365168807, 302.0054098961348], + [9521.061365168805, 302.0054098961348], + [9521.061365168805, 467.60540989613474], + [9620.361365168807, 467.60540989613474], + [9719.661365168808, 302.0054098961348], + [9719.661365168808, 136.40540989613478], + [9818.961365168809, 136.40540989613478], + [9918.26136516881, 136.40540989613478], + [10017.56136516881, 136.40540989613478], + [366.07287160549004, 5394.185440937868], + [465.37287160549005, 5394.185440937868], + [465.37287160549005, 5559.785440937868], + [366.0728716054901, 5559.785440937868], + [366.0728716054901, 5725.385440937867], + [266.77287160549014, 5725.385440937867], + [167.47287160549016, 5559.785440937868], + [266.77287160549014, 5559.785440937868], + [266.77287160549014, 5394.185440937868], + [266.77287160549014, 5228.585440937869], + [167.47287160549016, 5394.185440937868], + [68.17287160549016, 5228.585440937869], + [167.47287160549013, 5062.9854409378695], + [68.17287160549013, 4897.38544093787], + [167.47287160549013, 4731.785440937871], + [266.77287160549014, 4731.785440937871], + [167.47287160549016, 4566.185440937871], + [68.17287160549016, 4566.185440937871], + [68.17287160549016, 4731.785440937871], + [167.47287160549013, 4897.38544093787], + [68.17287160549013, 5062.9854409378695], + [167.47287160549013, 5228.585440937869], + [266.77287160549014, 5062.9854409378695], + [366.0728716054901, 4897.38544093787], + [266.77287160549014, 4897.38544093787], + [366.0728716054901, 4731.785440937871], + [465.37287160549005, 4897.38544093787], + [366.0728716054901, 5062.9854409378695], + [465.37287160549005, 5062.9854409378695], + [366.0728716054901, 5228.585440937869], + [465.37287160549005, 5228.585440937869], + [564.6728716054901, 5394.185440937868], + [663.9728716054901, 5228.585440937869], + [564.6728716054901, 5062.9854409378695], + [663.9728716054901, 4897.38544093787], + [763.2728716054902, 4731.785440937871], + [862.5728716054903, 4566.185440937871], + [961.8728716054903, 4731.785440937871], + [862.5728716054903, 4731.785440937871], + [961.8728716054903, 4566.185440937871], + [862.5728716054903, 4400.585440937872], + [961.8728716054903, 4234.985440937872], + [1061.1728716054904, 4400.585440937872], + [1160.4728716054904, 4234.985440937872], + [1160.4728716054904, 4400.585440937872], + [1259.7728716054903, 4234.985440937872], + [1359.0728716054903, 4069.3854409378723], + [1458.3728716054902, 4069.3854409378723], + [1557.6728716054902, 4234.985440937872], + [1656.9728716054901, 4400.585440937872], + [1557.6728716054902, 4400.585440937872], + [1458.3728716054902, 4400.585440937872], + [1359.0728716054903, 4566.185440937871], + [1359.0728716054903, 4731.785440937871], + [1259.7728716054903, 4731.785440937871], + [1359.0728716054903, 4897.38544093787], + [1458.3728716054902, 4731.785440937871], + [1458.3728716054902, 4897.38544093787], + [1359.0728716054903, 5062.9854409378695], + [1259.7728716054903, 5228.585440937869], + [1259.7728716054903, 5062.9854409378695], + [1259.7728716054903, 4897.38544093787], + [1160.4728716054904, 5062.9854409378695], + [1160.4728716054904, 5228.585440937869], + [1061.1728716054904, 5228.585440937869], + [1061.1728716054904, 5062.9854409378695], + [961.8728716054903, 5228.585440937869], + [862.5728716054903, 5062.9854409378695], + [961.8728716054903, 5062.9854409378695], + [961.8728716054903, 4897.38544093787], + [1061.1728716054904, 4897.38544093787], + [1160.4728716054904, 4731.785440937871], + [1259.7728716054903, 4566.185440937871], + [1359.0728716054903, 4400.585440937872], + [1458.3728716054902, 4566.185440937871], + [1557.6728716054902, 4566.185440937871], + [1656.9728716054901, 4731.785440937871], + [1557.6728716054902, 4897.38544093787], + [1458.3728716054902, 5062.9854409378695], + [1557.6728716054902, 5228.585440937869], + [1656.9728716054901, 5062.9854409378695], + [1756.27287160549, 5062.9854409378695], + [1756.27287160549, 4897.38544093787], + [1855.57287160549, 5062.9854409378695], + [1954.87287160549, 4897.38544093787], + [2054.17287160549, 5062.9854409378695], + [1954.87287160549, 5062.9854409378695], + [2054.17287160549, 5228.585440937869], + [2153.4728716054897, 5228.585440937869], + [2252.7728716054894, 5062.9854409378695], + [2352.072871605489, 5228.585440937869], + [2451.372871605489, 5394.185440937868], + [2352.072871605489, 5394.185440937868], + [2252.7728716054894, 5228.585440937869], + [2153.4728716054897, 5062.9854409378695], + [2153.4728716054897, 4897.38544093787], + [2252.7728716054894, 4897.38544093787], + [2352.072871605489, 4731.785440937871], + [2252.7728716054894, 4731.785440937871], + [2153.4728716054897, 4731.785440937871], + [2054.17287160549, 4566.185440937871], + [1954.87287160549, 4731.785440937871], + [1855.57287160549, 4897.38544093787], + [1756.27287160549, 4731.785440937871], + [1855.57287160549, 4731.785440937871], + [1855.57287160549, 4566.185440937871], + [1756.27287160549, 4566.185440937871], + [1656.9728716054901, 4566.185440937871], + [1557.6728716054902, 4731.785440937871], + [1656.9728716054901, 4897.38544093787], + [1557.6728716054902, 5062.9854409378695], + [1458.3728716054902, 5228.585440937869], + [1359.0728716054903, 5228.585440937869], + [1259.7728716054903, 5394.185440937868], + [1259.7728716054903, 5559.785440937868], + [1160.4728716054904, 5559.785440937868], + [1061.1728716054904, 5559.785440937868], + [1160.4728716054904, 5725.385440937867], + [1259.7728716054903, 5725.385440937867], + [1359.0728716054903, 5559.785440937868], + [1458.3728716054902, 5725.385440937867], + [1458.3728716054902, 5559.785440937868], + [1359.0728716054903, 5725.385440937867], + [1259.7728716054903, 5890.985440937867], + [1359.0728716054903, 5890.985440937867], + [1259.7728716054903, 6056.585440937866], + [1359.0728716054903, 6222.185440937866], + [1458.3728716054902, 6222.185440937866], + [1458.3728716054902, 6387.785440937865], + [1557.6728716054902, 6222.185440937866], + [1557.6728716054902, 6387.785440937865], + [1656.9728716054901, 6222.185440937866], + [1756.27287160549, 6056.585440937866], + [1855.57287160549, 5890.985440937867], + [1756.27287160549, 5890.985440937867], + [1656.9728716054901, 6056.585440937866], + [1557.6728716054902, 5890.985440937867], + [1458.3728716054902, 5890.985440937867], + [1359.0728716054903, 6056.585440937866], + [1259.7728716054903, 6222.185440937866], + [1160.4728716054904, 6056.585440937866], + [1061.1728716054904, 5890.985440937867], + [1061.1728716054904, 6056.585440937866], + [1160.4728716054904, 6222.185440937866], + [1061.1728716054904, 6222.185440937866], + [961.8728716054903, 6222.185440937866], + [961.8728716054903, 6056.585440937866], + [961.8728716054903, 5890.985440937867], + [961.8728716054903, 5725.385440937867], + [862.5728716054903, 5559.785440937868], + [763.2728716054902, 5725.385440937867], + [862.5728716054903, 5725.385440937867], + [763.2728716054902, 5890.985440937867], + [663.9728716054901, 5725.385440937867], + [763.2728716054902, 5559.785440937868], + [763.2728716054902, 5394.185440937868], + [862.5728716054903, 5228.585440937869], + [961.8728716054903, 5394.185440937868], + [1061.1728716054904, 5394.185440937868], + [961.8728716054903, 5559.785440937868], + [862.5728716054903, 5394.185440937868], + [763.2728716054902, 5228.585440937869], + [663.9728716054901, 5062.9854409378695], + [763.2728716054902, 5062.9854409378695], + [763.2728716054902, 4897.38544093787], + [663.9728716054901, 4731.785440937871], + [564.6728716054901, 4731.785440937871], + [465.37287160549005, 4566.185440937871], + [366.0728716054901, 4566.185440937871], + [465.37287160549005, 4731.785440937871], + [564.6728716054901, 4566.185440937871], + [465.37287160549005, 4400.585440937872], + [366.0728716054901, 4400.585440937872], + [266.77287160549014, 4234.985440937872], + [167.47287160549016, 4234.985440937872], + [266.77287160549014, 4400.585440937872], + [266.77287160549014, 4566.185440937871], + [167.47287160549016, 4400.585440937872], + [68.17287160549016, 4234.985440937872], + [167.47287160549013, 4069.3854409378723], + [68.17287160549013, 3903.7854409378724], + [68.17287160549013, 4069.3854409378723], + [167.47287160549013, 3903.7854409378724], + [266.77287160549014, 3903.7854409378724], + [366.0728716054901, 3738.1854409378725], + [266.77287160549014, 3738.1854409378725], + [266.77287160549014, 3572.5854409378726], + [167.47287160549016, 3406.9854409378727], + [167.47287160549016, 3241.3854409378728], + [266.77287160549014, 3241.3854409378728], + [266.77287160549014, 3406.9854409378727], + [366.0728716054901, 3572.5854409378726], + [465.37287160549005, 3738.1854409378725], + [465.37287160549005, 3903.7854409378724], + [366.0728716054901, 4069.3854409378723], + [366.0728716054901, 4234.985440937872], + [465.37287160549005, 4234.985440937872], + [564.6728716054901, 4069.3854409378723], + [465.37287160549005, 4069.3854409378723], + [564.6728716054901, 4234.985440937872], + [663.9728716054901, 4069.3854409378723], + [663.9728716054901, 4234.985440937872], + [663.9728716054901, 4400.585440937872], + [763.2728716054902, 4566.185440937871], + [763.2728716054902, 4400.585440937872], + [663.9728716054901, 4566.185440937871], + [564.6728716054901, 4400.585440937872], + [19431.915041401327, 3495.506142643713], + [19332.61504140133, 3661.1061426437127], + [19431.915041401327, 3661.1061426437127], + [19531.215041401327, 3661.1061426437127], + [19630.515041401326, 3495.506142643713], + [19630.515041401326, 3661.1061426437127], + [19729.815041401325, 3826.7061426437126], + [19630.515041401326, 3826.7061426437126], + [19729.815041401325, 3992.3061426437125], + [19630.515041401326, 3992.3061426437125], + [19630.515041401326, 4157.906142643712], + [19630.515041401326, 4323.506142643711], + [19531.215041401327, 4157.906142643712], + [19431.915041401327, 4323.506142643711], + [19531.215041401327, 4489.106142643711], + [19431.915041401327, 4654.70614264371], + [19332.61504140133, 4654.70614264371], + [19332.61504140133, 4820.30614264371], + [19332.61504140133, 4985.906142643709], + [19233.31504140133, 4985.906142643709], + [19134.01504140133, 5151.506142643709], + [19034.71504140133, 5151.506142643709], + [19134.01504140133, 5317.106142643708], + [19034.71504140133, 5317.106142643708], + [19034.71504140133, 5482.706142643708], + [18935.41504140133, 5648.306142643707], + [18836.115041401332, 5813.9061426437065], + [18836.115041401332, 5979.506142643706], + [18935.41504140133, 5979.506142643706], + [19034.71504140133, 6145.106142643705], + [19034.71504140133, 5979.506142643706], + [19034.71504140133, 5813.9061426437065], + [19134.01504140133, 5648.306142643707], + [19233.31504140133, 5648.306142643707], + [19134.01504140133, 5813.9061426437065], + [19134.01504140133, 5979.506142643706], + [19233.31504140133, 5813.9061426437065], + [19233.31504140133, 5979.506142643706], + [19332.61504140133, 6145.106142643705], + [19332.61504140133, 6310.706142643705], + [19233.31504140133, 6310.706142643705], + [19233.31504140133, 6476.306142643704], + [19332.61504140133, 6476.306142643704], + [19431.915041401327, 6641.906142643704], + [19332.61504140133, 6807.506142643703], + [19332.61504140133, 6641.906142643704], + [19431.915041401327, 6476.306142643704], + [19431.915041401327, 6310.706142643705], + [19531.215041401327, 6145.106142643705], + [19431.915041401327, 5979.506142643706], + [19431.915041401327, 6145.106142643705], + [19531.215041401327, 5979.506142643706], + [19630.515041401326, 5813.9061426437065], + [19630.515041401326, 5979.506142643706], + [19729.815041401325, 5813.9061426437065], + [19829.115041401325, 5979.506142643706], + [19729.815041401325, 5979.506142643706], + [19729.815041401325, 6145.106142643705], + [19729.815041401325, 6310.706142643705], + [19630.515041401326, 6476.306142643704], + [19729.815041401325, 6476.306142643704], + [19630.515041401326, 6310.706142643705], + [19531.215041401327, 6310.706142643705], + [19531.215041401327, 6476.306142643704], + [19630.515041401326, 6641.906142643704], + [19729.815041401325, 6807.506142643703], + [19829.115041401325, 6973.106142643703], + [19928.415041401324, 6973.106142643703], + [19928.415041401324, 7138.706142643702], + [20027.715041401323, 7138.706142643702], + [20027.715041401323, 7304.306142643702], + [19928.415041401324, 7304.306142643702], + [19829.115041401325, 7304.306142643702], + [19829.115041401325, 7469.906142643701], + [19928.415041401324, 7469.906142643701], + [19928.415041401324, 7635.5061426437005], + [19928.415041401324, 7801.1061426437], + [20027.715041401323, 7635.5061426437005], + [20027.715041401323, 7801.1061426437], + [20127.015041401322, 7801.1061426437], + [20226.31504140132, 7801.1061426437], + [20325.61504140132, 7801.1061426437], + [20226.31504140132, 7635.5061426437005], + [20226.31504140132, 7469.906142643701], + [20226.31504140132, 7304.306142643702], + [20127.015041401322, 7304.306142643702], + [20027.715041401323, 7469.906142643701], + [20127.015041401322, 7469.906142643701], + [20127.015041401322, 7635.5061426437005], + [2748.790306732237, 2362.9553147492866], + [2848.0903067322365, 2528.5553147492865], + [2748.790306732237, 2694.1553147492864], + [2649.490306732237, 2859.7553147492863], + [2748.790306732237, 3025.355314749286], + [2848.0903067322365, 2859.7553147492863], + [2848.0903067322365, 2694.1553147492864], + [2947.3903067322362, 2694.1553147492864], + [3046.690306732236, 2859.7553147492863], + [3145.9903067322357, 2694.1553147492864], + [3145.9903067322357, 2528.5553147492865], + [3046.690306732236, 2694.1553147492864], + [3145.9903067322357, 2859.7553147492863], + [3046.690306732236, 3025.355314749286], + [3145.9903067322357, 3025.355314749286], + [3245.2903067322354, 3190.955314749286], + [3245.2903067322354, 3356.555314749286], + [3344.590306732235, 3522.155314749286], + [3443.890306732235, 3356.555314749286], + [3543.1903067322346, 3356.555314749286], + [3642.4903067322343, 3190.955314749286], + [3741.790306732234, 3025.355314749286], + [3741.790306732234, 2859.7553147492863], + [3841.090306732234, 3025.355314749286], + [3841.090306732234, 3190.955314749286], + [3741.790306732234, 3190.955314749286], + [3642.4903067322343, 3025.355314749286], + [3543.1903067322346, 3025.355314749286], + [3543.1903067322346, 2859.7553147492863], + [3443.890306732235, 3025.355314749286], + [3443.890306732235, 3190.955314749286], + [3543.1903067322346, 3190.955314749286], + [3642.4903067322343, 3356.555314749286], + [3543.1903067322346, 3522.155314749286], + [3443.890306732235, 3687.755314749286], + [3443.890306732235, 3853.3553147492858], + [3344.590306732235, 3687.755314749286], + [3245.2903067322354, 3853.3553147492858], + [3245.2903067322354, 3687.755314749286], + [3145.9903067322357, 3687.755314749286], + [3046.690306732236, 3853.3553147492858], + [3145.9903067322357, 4018.9553147492857], + [3145.9903067322357, 3853.3553147492858], + [3046.690306732236, 3687.755314749286], + [3145.9903067322357, 3522.155314749286], + [3145.9903067322357, 3356.555314749286], + [3145.9903067322357, 3190.955314749286], + [3046.690306732236, 3190.955314749286], + [3046.690306732236, 3356.555314749286], + [2947.3903067322362, 3356.555314749286], + [2848.0903067322365, 3190.955314749286], + [2947.3903067322362, 3025.355314749286], + [2848.0903067322365, 3025.355314749286], + [2748.790306732237, 2859.7553147492863], + [2649.490306732237, 2694.1553147492864], + [2748.790306732237, 2528.5553147492865], + [2848.0903067322365, 2362.9553147492866], + [2748.790306732237, 2197.3553147492867], + [2649.490306732237, 2362.9553147492866], + [2649.490306732237, 2197.3553147492867], + [2550.1903067322373, 2362.9553147492866], + [2450.8903067322376, 2362.9553147492866], + [2351.590306732238, 2528.5553147492865], + [2252.290306732238, 2528.5553147492865], + [2351.590306732238, 2362.9553147492866], + [2252.290306732238, 2197.3553147492867], + [2351.590306732238, 2197.3553147492867], + [2351.590306732238, 2031.7553147492865], + [2351.590306732238, 1866.1553147492864], + [2252.290306732238, 1866.1553147492864], + [2351.590306732238, 1700.5553147492863], + [2450.8903067322376, 1534.9553147492861], + [2351.590306732238, 1369.355314749286], + [2252.290306732238, 1203.7553147492858], + [2252.290306732238, 1369.355314749286], + [2252.290306732238, 1534.9553147492861], + [2152.9903067322384, 1369.355314749286], + [2053.6903067322387, 1369.355314749286], + [1954.3903067322387, 1203.7553147492858], + [1855.0903067322388, 1203.7553147492858], + [1755.7903067322388, 1038.1553147492857], + [1656.4903067322389, 1038.1553147492857], + [1557.190306732239, 872.5553147492857], + [1457.890306732239, 1038.1553147492857], + [1457.890306732239, 872.5553147492857], + [1457.890306732239, 706.9553147492858], + [1557.190306732239, 706.9553147492858], + [1656.4903067322389, 872.5553147492857], + [1656.4903067322389, 706.9553147492858], + [1755.7903067322388, 706.9553147492858], + [1656.4903067322389, 541.3553147492859], + [1557.190306732239, 375.7553147492859], + [1656.4903067322389, 210.1553147492859], + [1755.7903067322388, 44.55531474928592], + [1656.4903067322389, 44.55531474928592], + [1557.190306732239, 210.1553147492859], + [1457.890306732239, 210.1553147492859], + [1457.890306732239, 44.55531474928592], + [1358.590306732239, 210.1553147492859], + [1358.590306732239, 375.75531474928584], + [1259.290306732239, 210.15531474928585], + [1259.290306732239, 375.75531474928584], + [1259.290306732239, 541.3553147492859], + [1358.590306732239, 706.9553147492858], + [1358.590306732239, 872.5553147492857], + [1259.290306732239, 706.9553147492858], + [1259.290306732239, 872.5553147492857], + [1259.290306732239, 1038.1553147492857], + [1358.590306732239, 1203.7553147492858], + [1358.590306732239, 1038.1553147492857], + [1457.890306732239, 1203.7553147492858], + [1557.190306732239, 1369.355314749286], + [1656.4903067322389, 1203.7553147492858], + [1557.190306732239, 1203.7553147492858], + [1557.190306732239, 1038.1553147492857], + [17254.572515546668, 1460.5807801244923], + [17353.872515546667, 1626.1807801244925], + [17453.172515546667, 1791.7807801244926], + [17552.472515546666, 1791.7807801244926], + [17453.172515546667, 1626.1807801244925], + [17353.872515546667, 1791.7807801244926], + [17453.172515546667, 1957.3807801244927], + [17353.872515546667, 2122.980780124493], + [17453.172515546667, 2288.580780124493], + [17353.872515546667, 2454.1807801244927], + [17453.172515546667, 2619.7807801244926], + [17552.472515546666, 2619.7807801244926], + [17453.172515546667, 2785.3807801244925], + [17353.872515546667, 2619.7807801244926], + [17254.572515546668, 2454.1807801244927], + [17254.572515546668, 2288.580780124493], + [17353.872515546667, 2288.580780124493], + [17453.172515546667, 2122.980780124493], + [17552.472515546666, 2288.580780124493], + [17552.472515546666, 2454.1807801244927], + [17453.172515546667, 2454.1807801244927], + [4447.67624466283, 4761.1416826913], + [4546.97624466283, 4595.541682691301], + [4546.97624466283, 4429.941682691301], + [4447.67624466283, 4429.941682691301], + [4447.67624466283, 4595.541682691301], + [4348.37624466283, 4595.541682691301], + [4249.07624466283, 4595.541682691301], + [4348.37624466283, 4761.1416826913], + [4249.07624466283, 4761.1416826913], + [4348.37624466283, 4926.7416826912995], + [4348.37624466283, 5092.341682691299], + [4447.67624466283, 5257.941682691298], + [4546.97624466283, 5257.941682691298], + [4646.27624466283, 5092.341682691299], + [4546.97624466283, 5092.341682691299], + [4646.27624466283, 4926.7416826912995], + [4646.27624466283, 4761.1416826913], + [4546.97624466283, 4761.1416826913], + [4646.27624466283, 4595.541682691301], + [4745.5762446628305, 4595.541682691301], + [4646.27624466283, 4429.941682691301], + [4745.5762446628305, 4429.941682691301], + [4844.876244662831, 4595.541682691301], + [4745.5762446628305, 4761.1416826913], + [4745.5762446628305, 4926.7416826912995], + [4844.876244662831, 4761.1416826913], + [4944.176244662831, 4761.1416826913], + [5043.476244662831, 4926.7416826912995], + [5043.476244662831, 4761.1416826913], + [5142.776244662831, 4926.7416826912995], + [5142.776244662831, 4761.1416826913], + [5242.076244662831, 4595.541682691301], + [5142.776244662831, 4595.541682691301], + [5242.076244662831, 4429.941682691301], + [5242.076244662831, 4264.341682691302], + [5142.776244662831, 4429.941682691301], + [5043.476244662831, 4595.541682691301], + [5043.476244662831, 4429.941682691301], + [5043.476244662831, 4264.341682691302], + [5142.776244662831, 4098.741682691302], + [5043.476244662831, 4098.741682691302], + [4944.176244662831, 3933.1416826913023], + [4944.176244662831, 4098.741682691302], + [4944.176244662831, 4264.341682691302], + [4844.876244662831, 4098.741682691302], + [4745.5762446628305, 4264.341682691302], + [4646.27624466283, 4098.741682691302], + [4546.97624466283, 3933.1416826913023], + [4447.67624466283, 4098.741682691302], + [4546.97624466283, 4264.341682691302], + [4447.67624466283, 4264.341682691302], + [4546.97624466283, 4098.741682691302], + [4646.27624466283, 3933.1416826913023], + [4546.97624466283, 3767.5416826913024], + [4447.67624466283, 3601.9416826913025], + [4447.67624466283, 3767.5416826913024], + [4348.37624466283, 3767.5416826913024], + [4348.37624466283, 3933.1416826913023], + [4249.07624466283, 3767.5416826913024], + [4249.07624466283, 3933.1416826913023], + [4149.776244662829, 3933.1416826913023], + [4050.4762446628297, 4098.741682691302], + [4050.4762446628297, 3933.1416826913023], + [3951.17624466283, 3933.1416826913023], + [3951.17624466283, 4098.741682691302], + [3851.8762446628302, 4264.341682691302], + [3851.8762446628302, 4098.741682691302], + [3752.5762446628305, 4098.741682691302], + [3653.276244662831, 4264.341682691302], + [3553.976244662831, 4429.941682691301], + [3553.976244662831, 4595.541682691301], + [3454.6762446628313, 4429.941682691301], + [3553.976244662831, 4264.341682691302], + [3653.276244662831, 4429.941682691301], + [3752.5762446628305, 4264.341682691302], + [3752.5762446628305, 4429.941682691301], + [3851.8762446628302, 4595.541682691301], + [3851.8762446628302, 4429.941682691301], + [3951.17624466283, 4429.941682691301], + [4050.4762446628297, 4264.341682691302], + [4149.776244662829, 4098.741682691302], + [4249.07624466283, 4264.341682691302], + [4348.37624466283, 4098.741682691302], + [4447.67624466283, 3933.1416826913023], + [9574.088902135607, 7352.26293905581], + [9474.788902135606, 7352.26293905581], + [9375.488902135605, 7186.662939055811], + [9474.788902135606, 7021.0629390558115], + [9574.088902135607, 7021.0629390558115], + [9474.788902135606, 7186.662939055811], + [9574.088902135607, 7186.662939055811], + [9673.388902135608, 7021.0629390558115], + [9673.388902135608, 6855.462939055812], + [9772.68890213561, 6689.862939055813], + [9673.388902135608, 6689.862939055813], + [9772.68890213561, 6524.262939055813], + [9871.98890213561, 6358.662939055814], + [9971.288902135611, 6524.262939055813], + [10070.588902135612, 6358.662939055814], + [10070.588902135612, 6193.062939055814], + [9971.288902135611, 6027.462939055815], + [9971.288902135611, 5861.862939055815], + [9871.98890213561, 5861.862939055815], + [9871.98890213561, 5696.262939055816], + [9971.288902135611, 5530.662939055816], + [10070.588902135612, 5530.662939055816], + [10070.588902135612, 5696.262939055816], + [10169.888902135614, 5861.862939055815], + [10169.888902135614, 5696.262939055816], + [10070.588902135612, 5861.862939055815], + [10169.888902135614, 6027.462939055815], + [10169.888902135614, 6193.062939055814], + [10269.188902135615, 6027.462939055815], + [10269.188902135615, 5861.862939055815], + [10368.488902135616, 6027.462939055815], + [10269.188902135615, 6193.062939055814], + [10269.188902135615, 6358.662939055814], + [10169.888902135614, 6358.662939055814], + [10070.588902135612, 6524.262939055813], + [10070.588902135612, 6689.862939055813], + [9971.288902135611, 6855.462939055812], + [9971.288902135611, 7021.0629390558115], + [10070.588902135612, 7186.662939055811], + [10169.888902135614, 7186.662939055811], + [10269.188902135615, 7186.662939055811], + [10169.888902135614, 7352.26293905581], + [10070.588902135612, 7352.26293905581], + [10169.888902135614, 7517.86293905581], + [10169.888902135614, 7683.462939055809], + [10269.188902135615, 7517.86293905581], + [10368.488902135616, 7683.462939055809], + [10467.788902135617, 7683.462939055809], + [10368.488902135616, 7517.86293905581], + [10269.188902135615, 7352.26293905581], + [10368.488902135616, 7352.26293905581], + [10368.488902135616, 7186.662939055811], + [10368.488902135616, 7021.0629390558115], + [10368.488902135616, 6855.462939055812], + [10269.188902135615, 6855.462939055812], + [10169.888902135614, 6855.462939055812], + [10169.888902135614, 7021.0629390558115], + [10070.588902135612, 7021.0629390558115], + [10070.588902135612, 6855.462939055812], + [10169.888902135614, 6689.862939055813], + [10269.188902135615, 6689.862939055813], + [10169.888902135614, 6524.262939055813], + [10269.188902135615, 6524.262939055813], + [10368.488902135616, 6524.262939055813], + [10368.488902135616, 6358.662939055814], + [10467.788902135617, 6358.662939055814], + [10467.788902135617, 6193.062939055814], + [10567.088902135618, 6358.662939055814], + [10567.088902135618, 6193.062939055814], + [10666.388902135619, 6193.062939055814], + [10666.388902135619, 6358.662939055814], + [10567.088902135618, 6524.262939055813], + [10467.788902135617, 6524.262939055813], + [10567.088902135618, 6689.862939055813], + [10467.788902135617, 6855.462939055812], + [10567.088902135618, 7021.0629390558115], + [10467.788902135617, 7021.0629390558115], + [10567.088902135618, 6855.462939055812], + [10467.788902135617, 6689.862939055813], + [10368.488902135616, 6689.862939055813], + [1073.6944354374714, 1154.3681204032646], + [974.3944354374713, 1319.9681204032647], + [875.0944354374712, 1319.9681204032647], + [775.7944354374712, 1154.3681204032646], + [775.7944354374712, 988.7681204032646], + [875.0944354374712, 823.1681204032647], + [875.0944354374712, 657.5681204032647], + [775.7944354374712, 823.1681204032647], + [676.4944354374711, 657.5681204032647], + [676.4944354374711, 491.9681204032648], + [775.7944354374712, 657.5681204032647], + [676.4944354374711, 823.1681204032647], + [676.4944354374711, 988.7681204032646], + [577.194435437471, 823.1681204032647], + [577.194435437471, 988.7681204032646], + [577.194435437471, 1154.3681204032646], + [676.4944354374711, 1319.9681204032647], + [577.194435437471, 1319.9681204032647], + [477.89443543747103, 1319.9681204032647], + [577.194435437471, 1485.5681204032649], + [477.89443543747103, 1651.168120403265], + [577.194435437471, 1816.7681204032651], + [477.89443543747103, 1816.7681204032651], + [378.5944354374711, 1982.3681204032653], + [378.5944354374711, 2147.9681204032654], + [279.2944354374711, 2313.5681204032653], + [179.99443543747114, 2147.9681204032654], + [80.69443543747114, 2313.5681204032653], + [80.69443543747114, 2479.168120403265], + [179.9944354374711, 2644.768120403265], + [179.9944354374711, 2479.168120403265], + [179.9944354374711, 2313.5681204032653], + [80.69443543747111, 2147.9681204032654], + [80.69443543747111, 1982.3681204032653], + [179.9944354374711, 1982.3681204032653], + [179.9944354374711, 1816.7681204032651], + [80.69443543747111, 1816.7681204032651], + [179.9944354374711, 1651.168120403265], + [80.69443543747111, 1485.5681204032649], + [80.69443543747111, 1319.9681204032647], + [179.9944354374711, 1154.3681204032646], + [80.69443543747111, 1154.3681204032646], + [179.9944354374711, 988.7681204032646], + [279.2944354374711, 823.1681204032647], + [378.5944354374711, 657.5681204032647], + [378.5944354374711, 823.1681204032647], + [477.89443543747103, 823.1681204032647], + [477.89443543747103, 657.5681204032647], + [378.5944354374711, 491.9681204032648], + [477.89443543747103, 326.3681204032648], + [477.89443543747103, 160.76812040326482], + [378.5944354374711, 160.76812040326482], + [279.2944354374711, 326.3681204032648], + [179.99443543747114, 491.9681204032648], + [179.99443543747114, 326.3681204032648], + [279.2944354374711, 491.9681204032648], + [279.2944354374711, 657.5681204032647], + [179.99443543747114, 823.1681204032647], + [279.2944354374711, 988.7681204032646], + [279.2944354374711, 1154.3681204032646], + [378.5944354374711, 1319.9681204032647], + [477.89443543747103, 1485.5681204032649], + [577.194435437471, 1651.168120403265], + [676.4944354374711, 1651.168120403265], + [775.7944354374712, 1816.7681204032651], + [676.4944354374711, 1816.7681204032651], + [775.7944354374712, 1651.168120403265], + [875.0944354374712, 1651.168120403265], + [974.3944354374713, 1651.168120403265], + [875.0944354374712, 1485.5681204032649], + [775.7944354374712, 1485.5681204032649], + [676.4944354374711, 1485.5681204032649], + [775.7944354374712, 1319.9681204032647], + [676.4944354374711, 1154.3681204032646], + [3138.413562431697, 2355.845602060523], + [3039.113562431697, 2521.445602060523], + [3039.113562431697, 2355.845602060523], + [3039.113562431697, 2190.245602060523], + [3138.413562431697, 2024.645602060523], + [3237.7135624316966, 1859.045602060523], + [3237.7135624316966, 2024.645602060523], + [3337.0135624316963, 1859.045602060523], + [3337.0135624316963, 1693.4456020605228], + [3436.313562431696, 1527.8456020605227], + [3535.6135624316958, 1693.4456020605228], + [3535.6135624316958, 1859.045602060523], + [3634.9135624316955, 2024.645602060523], + [3734.213562431695, 2190.245602060523], + [3634.9135624316955, 2190.245602060523], + [3535.6135624316958, 2190.245602060523], + [3535.6135624316958, 2355.845602060523], + [3535.6135624316958, 2521.445602060523], + [3436.313562431696, 2687.045602060523], + [3436.313562431696, 2852.645602060523], + [3535.6135624316958, 2687.045602060523], + [3634.9135624316955, 2521.445602060523], + [3634.9135624316955, 2355.845602060523], + [3734.213562431695, 2355.845602060523], + [3833.513562431695, 2190.245602060523], + [3932.8135624316947, 2024.645602060523], + [3833.513562431695, 1859.045602060523], + [3833.513562431695, 1693.4456020605228], + [3734.213562431695, 1859.045602060523], + [3734.213562431695, 1693.4456020605228], + [3734.213562431695, 1527.8456020605227], + [3634.9135624316955, 1527.8456020605227], + [3634.9135624316955, 1693.4456020605228], + [3535.6135624316958, 1527.8456020605227], + [3634.9135624316955, 1362.2456020605225], + [3535.6135624316958, 1362.2456020605225], + [3436.313562431696, 1196.6456020605224], + [3535.6135624316958, 1196.6456020605224], + [3535.6135624316958, 1031.0456020605222], + [3436.313562431696, 1031.0456020605222], + [3535.6135624316958, 865.4456020605222], + [3436.313562431696, 865.4456020605222], + [3535.6135624316958, 699.8456020605223], + [3634.9135624316955, 699.8456020605223], + [3535.6135624316958, 534.2456020605224], + [3436.313562431696, 368.64560206052244], + [3436.313562431696, 203.04560206052244], + [3337.0135624316963, 37.445602060522454], + [3436.313562431696, 37.445602060522454], + [3337.0135624316963, 203.04560206052244], + [3237.7135624316966, 37.445602060522454], + [3138.413562431697, 37.445602060522454], + [3237.7135624316966, 203.04560206052244], + [3337.0135624316963, 368.6456020605224], + [3436.313562431696, 534.2456020605224], + [3337.0135624316963, 699.8456020605223], + [3237.7135624316966, 534.2456020605224], + [3337.0135624316963, 534.2456020605224], + [3436.313562431696, 699.8456020605223], + [3337.0135624316963, 865.4456020605222], + [3237.7135624316966, 865.4456020605222], + [3337.0135624316963, 1031.0456020605222], + [3237.7135624316966, 1196.6456020605224], + [3138.413562431697, 1362.2456020605225], + [3039.113562431697, 1527.8456020605227], + [3138.413562431697, 1527.8456020605227], + [3039.113562431697, 1693.4456020605228], + [2939.8135624316974, 1527.8456020605227], + [2840.5135624316977, 1362.2456020605225], + [2840.5135624316977, 1527.8456020605227], + [2840.5135624316977, 1693.4456020605228], + [2939.8135624316974, 1859.045602060523], + [2840.5135624316977, 2024.645602060523], + [2840.5135624316977, 1859.045602060523], + [2939.8135624316974, 1693.4456020605228], + [3039.113562431697, 1859.045602060523], + [3039.113562431697, 2024.645602060523], + [2939.8135624316974, 2190.245602060523], + [2939.8135624316974, 2024.645602060523], + [16388.412117675925, 1839.818884803299], + [16289.112117675924, 1839.818884803299], + [16388.412117675925, 1674.2188848032988], + [16487.712117675925, 1508.6188848032987], + [16487.712117675925, 1674.2188848032988], + [16388.412117675925, 1508.6188848032987], + [16289.112117675924, 1343.0188848032985], + [16289.112117675924, 1508.6188848032987], + [16189.812117675923, 1674.2188848032988], + [16090.512117675922, 1839.818884803299], + [16090.512117675922, 2005.418884803299], + [15991.212117675921, 2171.018884803299], + [16090.512117675922, 2336.618884803299], + [16090.512117675922, 2502.218884803299], + [16090.512117675922, 2667.8188848032987], + [15991.212117675921, 2833.4188848032986], + [15991.212117675921, 2999.0188848032985], + [15891.91211767592, 3164.6188848032984], + [15891.91211767592, 3330.2188848032984], + [15991.212117675921, 3330.2188848032984], + [16090.512117675922, 3330.2188848032984], + [16189.812117675923, 3495.8188848032983], + [16289.112117675924, 3495.8188848032983], + [16189.812117675923, 3330.2188848032984], + [16189.812117675923, 3164.6188848032984], + [16289.112117675924, 3164.6188848032984], + [16388.412117675925, 3164.6188848032984], + [16388.412117675925, 3330.2188848032984], + [16487.712117675925, 3330.2188848032984], + [16587.012117675924, 3495.8188848032983], + [16587.012117675924, 3661.418884803298], + [16686.312117675923, 3661.418884803298], + [16785.612117675922, 3661.418884803298], + [16884.91211767592, 3661.418884803298], + [16984.21211767592, 3661.418884803298], + [16884.91211767592, 3827.018884803298], + [16884.91211767592, 3992.618884803298], + [16984.21211767592, 3827.018884803298], + [17083.51211767592, 3661.418884803298], + [17182.81211767592, 3495.8188848032983], + [17182.81211767592, 3330.2188848032984], + [17282.11211767592, 3164.6188848032984], + [17282.11211767592, 3330.2188848032984], + [17182.81211767592, 3164.6188848032984], + [17083.51211767592, 3164.6188848032984], + [16984.21211767592, 3330.2188848032984], + [16984.21211767592, 3495.8188848032983], + [17083.51211767592, 3330.2188848032984], + [16984.21211767592, 3164.6188848032984], + [16984.21211767592, 2999.0188848032985], + [17083.51211767592, 2833.4188848032986], + [17083.51211767592, 2667.8188848032987], + [17182.81211767592, 2667.8188848032987], + [17182.81211767592, 2833.4188848032986], + [17083.51211767592, 2999.0188848032985], + [16984.21211767592, 2833.4188848032986], + [16884.91211767592, 2833.4188848032986], + [16884.91211767592, 2999.0188848032985], + [16785.612117675922, 2999.0188848032985], + [16884.91211767592, 3164.6188848032984], + [16785.612117675922, 3164.6188848032984], + [16686.312117675923, 3164.6188848032984], + [16587.012117675924, 3164.6188848032984], + [16587.012117675924, 2999.0188848032985], + [16487.712117675925, 3164.6188848032984], + [16587.012117675924, 3330.2188848032984], + [16686.312117675923, 3495.8188848032983], + [16686.312117675923, 3330.2188848032984], + [16785.612117675922, 3330.2188848032984], + [16884.91211767592, 3495.8188848032983], + [16785.612117675922, 3495.8188848032983], + [16884.91211767592, 3330.2188848032984], + [1272.175991128079, 3842.7700224365044], + [1371.475991128079, 3842.7700224365044], + [1272.175991128079, 3677.1700224365045], + [1172.875991128079, 3511.5700224365046], + [1272.175991128079, 3511.5700224365046], + [1172.875991128079, 3345.9700224365047], + [1073.575991128079, 3180.3700224365048], + [1073.575991128079, 3014.770022436505], + [974.275991128079, 3014.770022436505], + [874.9759911280789, 3014.770022436505], + [775.6759911280789, 2849.170022436505], + [775.6759911280789, 3014.770022436505], + [775.6759911280789, 3180.3700224365048], + [676.3759911280788, 3345.9700224365047], + [676.3759911280788, 3511.5700224365046], + [775.6759911280789, 3677.1700224365045], + [676.3759911280788, 3842.7700224365044], + [577.0759911280787, 3842.7700224365044], + [577.0759911280787, 3677.1700224365045], + [676.3759911280788, 3677.1700224365045], + [775.6759911280789, 3511.5700224365046], + [775.6759911280789, 3345.9700224365047], + [874.9759911280789, 3345.9700224365047], + [874.9759911280789, 3180.3700224365048], + [974.275991128079, 3180.3700224365048], + [974.275991128079, 3345.9700224365047], + [1073.575991128079, 3511.5700224365046], + [1073.575991128079, 3677.1700224365045], + [1172.875991128079, 3677.1700224365045], + [1172.875991128079, 3842.7700224365044], + [1073.575991128079, 3842.7700224365044], + [1172.875991128079, 4008.3700224365043], + [1073.575991128079, 4008.3700224365043], + [974.275991128079, 3842.7700224365044], + [974.275991128079, 4008.3700224365043], + [874.9759911280789, 4008.3700224365043], + [775.6759911280789, 4008.3700224365043], + [874.9759911280789, 3842.7700224365044], + [974.275991128079, 3677.1700224365045], + [974.275991128079, 3511.5700224365046], + [1073.575991128079, 3345.9700224365047], + [1172.875991128079, 3180.3700224365048], + [1272.175991128079, 3180.3700224365048], + [1272.175991128079, 3345.9700224365047], + [1371.475991128079, 3180.3700224365048], + [1470.7759911280789, 3345.9700224365047], + [1371.475991128079, 3345.9700224365047], + [1371.475991128079, 3511.5700224365046], + [1470.7759911280789, 3511.5700224365046], + [1570.0759911280788, 3677.1700224365045], + [1470.7759911280789, 3677.1700224365045], + [1570.0759911280788, 3511.5700224365046], + [1669.3759911280788, 3511.5700224365046], + [1669.3759911280788, 3677.1700224365045], + [1768.6759911280787, 3842.7700224365044], + [1669.3759911280788, 3842.7700224365044], + [1768.6759911280787, 4008.3700224365043], + [1867.9759911280787, 3842.7700224365044], + [1967.2759911280787, 3677.1700224365045], + [2066.5759911280784, 3842.7700224365044], + [2165.875991128078, 3677.1700224365045], + [2066.5759911280784, 3511.5700224365046], + [2165.875991128078, 3511.5700224365046], + [2066.5759911280784, 3677.1700224365045], + [2165.875991128078, 3842.7700224365044], + [2265.175991128078, 4008.3700224365043], + [2364.4759911280776, 4008.3700224365043], + [2265.175991128078, 3842.7700224365044], + [2364.4759911280776, 3677.1700224365045], + [2463.7759911280773, 3842.7700224365044], + [2463.7759911280773, 4008.3700224365043], + [2364.4759911280776, 3842.7700224365044], + [6853.940039224797, 6050.837897021371], + [6953.240039224797, 6050.837897021371], + [7052.5400392247975, 5885.237897021371], + [7052.5400392247975, 5719.637897021372], + [7151.840039224798, 5885.237897021371], + [7052.5400392247975, 6050.837897021371], + [7052.5400392247975, 6216.43789702137], + [7052.5400392247975, 6382.03789702137], + [6953.240039224797, 6382.03789702137], + [6953.240039224797, 6216.43789702137], + [6853.940039224797, 6216.43789702137], + [6853.940039224797, 6382.03789702137], + [6754.640039224797, 6216.43789702137], + [6754.640039224797, 6382.03789702137], + [6754.640039224797, 6547.637897021369], + [6754.640039224797, 6713.237897021369], + [6655.340039224797, 6713.237897021369], + [6754.640039224797, 6878.837897021368], + [6853.940039224797, 6713.237897021369], + [6853.940039224797, 6878.837897021368], + [6953.240039224797, 6713.237897021369], + [7052.5400392247975, 6547.637897021369], + [7151.840039224798, 6713.237897021369], + [7151.840039224798, 6547.637897021369], + [7151.840039224798, 6382.03789702137], + [7251.140039224798, 6547.637897021369], + [7251.140039224798, 6713.237897021369], + [7350.440039224798, 6878.837897021368], + [7449.740039224798, 6878.837897021368], + [7449.740039224798, 6713.237897021369], + [7549.040039224798, 6547.637897021369], + [7449.740039224798, 6382.03789702137], + [7449.740039224798, 6216.43789702137], + [7549.040039224798, 6050.837897021371], + [7648.340039224799, 6216.43789702137], + [7549.040039224798, 6382.03789702137], + [7648.340039224799, 6382.03789702137], + [7747.640039224799, 6216.43789702137], + [7846.940039224799, 6382.03789702137], + [7946.240039224799, 6382.03789702137], + [7946.240039224799, 6547.637897021369], + [7846.940039224799, 6713.237897021369], + [7946.240039224799, 6713.237897021369], + [8045.540039224799, 6547.637897021369], + [8045.540039224799, 6713.237897021369], + [7946.240039224799, 6878.837897021368], + [7946.240039224799, 7044.4378970213675], + [8045.540039224799, 7210.037897021367], + [8144.8400392247995, 7375.637897021366], + [8144.8400392247995, 7541.237897021366], + [8045.540039224799, 7375.637897021366], + [8144.8400392247995, 7210.037897021367], + [8045.540039224799, 7044.4378970213675], + [7946.240039224799, 7210.037897021367], + [7846.940039224799, 7210.037897021367], + [7946.240039224799, 7375.637897021366], + [8045.540039224799, 7541.237897021366], + [8144.8400392247995, 7706.837897021365], + [8244.1400392248, 7541.237897021366], + [8343.4400392248, 7541.237897021366], + [8343.4400392248, 7706.837897021365], + [8244.1400392248, 7706.837897021365], + [4735.523842661975, 3503.497768214323], + [4636.223842661975, 3337.897768214323], + [4536.923842661975, 3337.897768214323], + [4437.623842661975, 3172.2977682143232], + [4338.323842661975, 3172.2977682143232], + [4239.023842661974, 3172.2977682143232], + [4338.323842661975, 3006.6977682143233], + [4437.623842661975, 2841.0977682143234], + [4338.323842661975, 2675.4977682143235], + [4338.323842661975, 2509.8977682143236], + [4239.023842661974, 2675.4977682143235], + [4139.723842661974, 2509.8977682143236], + [4040.4238426619745, 2344.2977682143237], + [4139.723842661974, 2178.697768214324], + [4239.023842661974, 2178.697768214324], + [4139.723842661974, 2344.2977682143237], + [4040.4238426619745, 2178.697768214324], + [4139.723842661974, 2013.0977682143237], + [4139.723842661974, 1847.4977682143235], + [4239.023842661974, 2013.0977682143237], + [4239.023842661974, 1847.4977682143235], + [4338.323842661975, 1847.4977682143235], + [4437.623842661975, 1847.4977682143235], + [4536.923842661975, 1681.8977682143234], + [4437.623842661975, 1516.2977682143232], + [4536.923842661975, 1516.2977682143232], + [4536.923842661975, 1350.697768214323], + [4437.623842661975, 1350.697768214323], + [4536.923842661975, 1185.097768214323], + [4636.223842661975, 1019.497768214323], + [4536.923842661975, 853.897768214323], + [4636.223842661975, 853.897768214323], + [4735.523842661975, 688.2977682143231], + [4636.223842661975, 522.6977682143232], + [4636.223842661975, 357.09776821432325], + [4735.523842661975, 357.09776821432325], + [4735.523842661975, 522.6977682143232], + [4636.223842661975, 688.2977682143231], + [4735.523842661975, 853.897768214323], + [4834.8238426619755, 853.897768214323], + [4735.523842661975, 1019.497768214323], + [4735.523842661975, 1185.097768214323], + [4735.523842661975, 1350.697768214323], + [4834.8238426619755, 1516.2977682143232], + [4735.523842661975, 1516.2977682143232], + [4834.8238426619755, 1350.697768214323], + [4834.8238426619755, 1185.097768214323], + [4934.123842661976, 1350.697768214323], + [5033.423842661976, 1185.097768214323], + [5033.423842661976, 1019.497768214323], + [5033.423842661976, 853.897768214323], + [4934.123842661976, 853.897768214323], + [4934.123842661976, 1019.497768214323], + [4834.8238426619755, 1019.497768214323], + [4934.123842661976, 1185.097768214323], + [5033.423842661976, 1350.697768214323], + [5132.723842661976, 1350.697768214323], + [5132.723842661976, 1185.097768214323], + [5232.023842661976, 1019.497768214323], + [5232.023842661976, 1185.097768214323], + [5331.323842661976, 1019.497768214323], + [5430.623842661977, 1019.497768214323], + [5529.923842661977, 1185.097768214323], + [5430.623842661977, 1350.697768214323], + [5430.623842661977, 1516.2977682143232], + [5529.923842661977, 1350.697768214323], + [5629.223842661977, 1350.697768214323], + [5728.523842661977, 1350.697768214323], + [5728.523842661977, 1516.2977682143232], + [5728.523842661977, 1681.8977682143234], + [5629.223842661977, 1516.2977682143232], + [5529.923842661977, 1516.2977682143232], + [5629.223842661977, 1681.8977682143234], + [5529.923842661977, 1681.8977682143234], + [5430.623842661977, 1847.4977682143235], + [5331.323842661976, 1847.4977682143235], + [5331.323842661976, 2013.0977682143237], + [5232.023842661976, 2178.697768214324], + [5132.723842661976, 2013.0977682143237], + [5132.723842661976, 2178.697768214324], + [5232.023842661976, 2013.0977682143237], + [5232.023842661976, 1847.4977682143235], + [5232.023842661976, 1681.8977682143234], + [5331.323842661976, 1681.8977682143234], + [5331.323842661976, 1516.2977682143232], + [5331.323842661976, 1350.697768214323], + [5232.023842661976, 1350.697768214323], + [5232.023842661976, 1516.2977682143232], + [5132.723842661976, 1516.2977682143232], + [5132.723842661976, 1681.8977682143234], + [5033.423842661976, 1847.4977682143235], + [5132.723842661976, 1847.4977682143235], + [5033.423842661976, 2013.0977682143237], + [4934.123842661976, 2178.697768214324], + [5033.423842661976, 2344.2977682143237], + [4934.123842661976, 2344.2977682143237], + [4834.8238426619755, 2178.697768214324], + [4834.8238426619755, 2344.2977682143237], + [4735.523842661975, 2344.2977682143237], + [4636.223842661975, 2344.2977682143237], + [4536.923842661975, 2178.697768214324], + [4437.623842661975, 2013.0977682143237], + [4338.323842661975, 2178.697768214324], + [4437.623842661975, 2344.2977682143237], + [4536.923842661975, 2509.8977682143236], + [4636.223842661975, 2675.4977682143235], + [4636.223842661975, 2509.8977682143236], + [4536.923842661975, 2675.4977682143235], + [4636.223842661975, 2841.0977682143234], + [4536.923842661975, 2841.0977682143234], + [4636.223842661975, 3006.6977682143233], + [4735.523842661975, 3172.2977682143232], + [4834.8238426619755, 3006.6977682143233], + [4735.523842661975, 2841.0977682143234], + [4735.523842661975, 3006.6977682143233], + [4636.223842661975, 3172.2977682143232], + [4735.523842661975, 3337.897768214323], + [4834.8238426619755, 3503.497768214323], + [4735.523842661975, 3669.097768214323], + [4834.8238426619755, 3834.697768214323], + [4834.8238426619755, 3669.097768214323], + [4934.123842661976, 3503.497768214323], + [5033.423842661976, 3503.497768214323], + [5033.423842661976, 3337.897768214323], + [4934.123842661976, 3337.897768214323], + [4834.8238426619755, 3172.2977682143232], + [4834.8238426619755, 3337.897768214323], + [4934.123842661976, 3172.2977682143232], + [5033.423842661976, 3006.6977682143233], + [5132.723842661976, 2841.0977682143234], + [5132.723842661976, 3006.6977682143233], + [5232.023842661976, 3172.2977682143232], + [5232.023842661976, 3337.897768214323], + [5132.723842661976, 3337.897768214323], + [5232.023842661976, 3503.497768214323], + [5331.323842661976, 3337.897768214323], + [5331.323842661976, 3503.497768214323], + [5430.623842661977, 3669.097768214323], + [5331.323842661976, 3669.097768214323], + [5430.623842661977, 3503.497768214323], + [5430.623842661977, 3337.897768214323], + [5529.923842661977, 3172.2977682143232], + [5529.923842661977, 3337.897768214323], + [5629.223842661977, 3337.897768214323], + [5728.523842661977, 3337.897768214323], + [5728.523842661977, 3503.497768214323], + [5827.823842661977, 3503.497768214323], + [5927.1238426619775, 3669.097768214323], + [6026.423842661978, 3669.097768214323], + [6125.723842661978, 3503.497768214323], + [6125.723842661978, 3669.097768214323], + [6225.023842661978, 3503.497768214323], + [6225.023842661978, 3337.897768214323], + [6324.323842661978, 3337.897768214323], + [6423.623842661978, 3503.497768214323], + [6324.323842661978, 3669.097768214323], + [6225.023842661978, 3669.097768214323], + [6324.323842661978, 3834.697768214323], + [6423.623842661978, 3834.697768214323], + [6324.323842661978, 4000.297768214323], + [6225.023842661978, 3834.697768214323], + [6125.723842661978, 3834.697768214323], + [6125.723842661978, 4000.297768214323], + [6225.023842661978, 4000.297768214323], + [6225.023842661978, 4165.897768214322], + [6225.023842661978, 4331.497768214322], + [6125.723842661978, 4165.897768214322], + [6026.423842661978, 4000.2977682143223], + [5927.1238426619775, 4165.897768214322], + [6026.423842661978, 4331.497768214322], + [6026.423842661978, 4497.097768214321], + [5927.1238426619775, 4497.097768214321], + [5827.823842661977, 4662.697768214321], + [5728.523842661977, 4828.29776821432], + [5827.823842661977, 4828.29776821432], + [5927.1238426619775, 4828.29776821432], + [5927.1238426619775, 4662.697768214321], + [5827.823842661977, 4497.097768214321], + [5927.1238426619775, 4331.497768214322], + [5827.823842661977, 4165.897768214322], + [5728.523842661977, 4331.497768214322], + [5728.523842661977, 4165.897768214322], + [5629.223842661977, 4000.2977682143223], + [5629.223842661977, 3834.6977682143224], + [5529.923842661977, 3669.0977682143225], + [5629.223842661977, 3503.4977682143226], + [5728.523842661977, 3669.0977682143225], + [5827.823842661977, 3669.0977682143225], + [5927.1238426619775, 3834.6977682143224], + [5927.1238426619775, 4000.2977682143223], + [6026.423842661978, 4165.897768214322], + [6125.723842661978, 4331.497768214322], + [6225.023842661978, 4497.097768214321], + [6225.023842661978, 4662.697768214321], + [6324.323842661978, 4662.697768214321], + [6225.023842661978, 4828.29776821432], + [6324.323842661978, 4828.29776821432], + [6423.623842661978, 4828.29776821432], + [6324.323842661978, 4993.8977682143195], + [6225.023842661978, 5159.497768214319], + [6125.723842661978, 5159.497768214319], + [6026.423842661978, 5325.097768214318], + [5927.1238426619775, 5490.697768214318], + [6026.423842661978, 5656.297768214317], + [5927.1238426619775, 5821.897768214317], + [5927.1238426619775, 5987.497768214316], + [6026.423842661978, 5987.497768214316], + [6026.423842661978, 5821.897768214317], + [5927.1238426619775, 5656.297768214317], + [5827.823842661977, 5656.297768214317], + [5827.823842661977, 5490.697768214318], + [5728.523842661977, 5490.697768214318], + [5629.223842661977, 5325.097768214318], + [5629.223842661977, 5159.497768214319], + [5529.923842661977, 4993.8977682143195], + [5529.923842661977, 5159.497768214319], + [5629.223842661977, 4993.8977682143195], + [5629.223842661977, 4828.29776821432], + [5529.923842661977, 4662.697768214321], + [5430.623842661977, 4828.29776821432], + [5529.923842661977, 4828.29776821432], + [5629.223842661977, 4662.697768214321], + [5728.523842661977, 4662.697768214321], + [5629.223842661977, 4497.097768214321], + [5728.523842661977, 4497.097768214321], + [5827.823842661977, 4331.497768214322], + [10216.161365168813, 2951.605409896135], + [10116.861365168812, 2951.605409896135], + [10017.56136516881, 3117.205409896135], + [9918.26136516881, 3117.205409896135], + [9818.961365168809, 3117.205409896135], + [9719.661365168808, 3282.8054098961347], + [9620.361365168807, 3282.8054098961347], + [9620.361365168807, 3117.205409896135], + [9521.061365168805, 2951.605409896135], + [9521.061365168805, 2786.005409896135], + [9620.361365168807, 2786.005409896135], + [9719.661365168808, 2786.005409896135], + [9818.961365168809, 2620.405409896135], + [9918.26136516881, 2786.005409896135], + [9818.961365168809, 2951.605409896135], + [9818.961365168809, 2786.005409896135], + [9719.661365168808, 2620.405409896135], + [9719.661365168808, 2454.805409896135], + [9620.361365168807, 2289.2054098961353], + [9521.061365168805, 2123.6054098961354], + [9620.361365168807, 1958.0054098961352], + [9719.661365168808, 2123.6054098961354], + [9818.961365168809, 2289.2054098961353], + [9818.961365168809, 2123.6054098961354], + [9818.961365168809, 1958.0054098961352], + [9719.661365168808, 1958.0054098961352], + [9620.361365168807, 1792.405409896135], + [9620.361365168807, 1626.805409896135], + [9521.061365168805, 1461.2054098961348], + [9421.761365168804, 1295.6054098961347], + [9521.061365168805, 1130.0054098961346], + [9521.061365168805, 964.4054098961345], + [9421.761365168804, 964.4054098961345], + [9521.061365168805, 798.8054098961346], + [9620.361365168807, 798.8054098961346], + [9620.361365168807, 964.4054098961345], + [9620.361365168807, 1130.0054098961346], + [9620.361365168807, 1295.6054098961347], + [9620.361365168807, 1461.2054098961348], + [9719.661365168808, 1295.6054098961347], + [9818.961365168809, 1130.0054098961346], + [9918.26136516881, 964.4054098961345], + [9818.961365168809, 964.4054098961345], + [9918.26136516881, 798.8054098961346], + [10017.56136516881, 633.2054098961347], + [9918.26136516881, 467.60540989613474], + [9918.26136516881, 302.0054098961348], + [10017.56136516881, 302.0054098961348], + [10116.861365168812, 136.40540989613478], + [10116.861365168812, 302.0054098961348], + [10116.861365168812, 467.60540989613474], + [10116.861365168812, 633.2054098961347], + [10216.161365168813, 633.2054098961347], + [10216.161365168813, 798.8054098961346], + [10315.461365168814, 633.2054098961347], + [10315.461365168814, 798.8054098961346], + [10414.761365168815, 798.8054098961346], + [10514.061365168816, 633.2054098961347], + [10514.061365168816, 798.8054098961346], + [10414.761365168815, 964.4054098961345], + [10315.461365168814, 964.4054098961345], + [10216.161365168813, 964.4054098961345], + [10116.861365168812, 798.8054098961346], + [10017.56136516881, 798.8054098961346], + [10116.861365168812, 964.4054098961345], + [10216.161365168813, 1130.0054098961346], + [10116.861365168812, 1130.0054098961346], + [10216.161365168813, 1295.6054098961347], + [10216.161365168813, 1461.2054098961348], + [10315.461365168814, 1626.805409896135], + [10315.461365168814, 1792.405409896135], + [10216.161365168813, 1958.0054098961352], + [10216.161365168813, 1792.405409896135], + [10116.861365168812, 1792.405409896135], + [10017.56136516881, 1958.0054098961352], + [9918.26136516881, 2123.6054098961354], + [9918.26136516881, 1958.0054098961352], + [10017.56136516881, 2123.6054098961354], + [10116.861365168812, 2123.6054098961354], + [10017.56136516881, 2289.2054098961353], + [10017.56136516881, 2454.805409896135], + [10116.861365168812, 2289.2054098961353], + [10216.161365168813, 2454.805409896135], + [10315.461365168814, 2620.405409896135], + [10315.461365168814, 2454.805409896135], + [10315.461365168814, 2289.2054098961353], + [10414.761365168815, 2454.805409896135], + [10514.061365168816, 2620.405409896135], + [10613.361365168817, 2786.005409896135], + [10514.061365168816, 2786.005409896135], + [10613.361365168817, 2620.405409896135], + [10514.061365168816, 2454.805409896135], + [10514.061365168816, 2289.2054098961353], + [10613.361365168817, 2289.2054098961353], + [10712.661365168819, 2289.2054098961353], + [10811.96136516882, 2454.805409896135], + [10911.26136516882, 2289.2054098961353], + [10811.96136516882, 2289.2054098961353], + [10712.661365168819, 2454.805409896135], + [10712.661365168819, 2620.405409896135], + [10811.96136516882, 2786.005409896135], + [10911.26136516882, 2620.405409896135], + [10911.26136516882, 2786.005409896135], + [11010.561365168822, 2620.405409896135], + [10911.26136516882, 2454.805409896135], + [10811.96136516882, 2620.405409896135], + [10712.661365168819, 2786.005409896135], + [10811.96136516882, 2951.605409896135], + [10911.26136516882, 2951.605409896135], + [10811.96136516882, 3117.205409896135], + [10712.661365168819, 2951.605409896135], + [10613.361365168817, 2951.605409896135], + [10514.061365168816, 2951.605409896135], + [10414.761365168815, 3117.205409896135], + [10414.761365168815, 2951.605409896135], + [10315.461365168814, 2786.005409896135], + [10216.161365168813, 2620.405409896135], + [10216.161365168813, 2786.005409896135], + [10315.461365168814, 2951.605409896135], + [10315.461365168814, 3117.205409896135], + [10216.161365168813, 3117.205409896135], + [10116.861365168812, 3117.205409896135], + [10017.56136516881, 3282.8054098961347], + [9918.26136516881, 3448.4054098961346], + [9818.961365168809, 3448.4054098961346], + [9818.961365168809, 3614.0054098961346], + [9719.661365168808, 3448.4054098961346], + [9818.961365168809, 3282.8054098961347], + [9719.661365168808, 3117.205409896135], + [9620.361365168807, 2951.605409896135], + [9521.061365168805, 3117.205409896135], + [9521.061365168805, 3282.8054098961347], + [9421.761365168804, 3117.205409896135], + [9421.761365168804, 3282.8054098961347], + [9322.461365168803, 3117.205409896135], + [9421.761365168804, 2951.605409896135], + [9322.461365168803, 2951.605409896135], + [9223.161365168802, 2786.005409896135], + [9322.461365168803, 2620.405409896135], + [9421.761365168804, 2454.805409896135], + [9521.061365168805, 2289.2054098961353], + [9421.761365168804, 2123.6054098961354], + [9421.761365168804, 1958.0054098961352], + [9421.761365168804, 1792.405409896135], + [9521.061365168805, 1626.805409896135], + [9421.761365168804, 1626.805409896135], + [9322.461365168803, 1792.405409896135], + [9322.461365168803, 1626.805409896135], + [9322.461365168803, 1461.2054098961348], + [9421.761365168804, 1461.2054098961348], + [9521.061365168805, 1295.6054098961347], + [9421.761365168804, 1130.0054098961346], + [9322.461365168803, 964.4054098961345], + [9223.161365168802, 964.4054098961345], + [9223.161365168802, 798.8054098961346], + [9322.461365168803, 633.2054098961347], + [9421.761365168804, 798.8054098961346], + [9421.761365168804, 633.2054098961347], + [9521.061365168805, 633.2054098961347], + [9421.761365168804, 467.60540989613474], + [9421.761365168804, 302.0054098961348], + [9322.461365168803, 136.40540989613478], + [9223.161365168802, 302.0054098961348], + [9123.861365168801, 302.0054098961348], + [9024.5613651688, 136.40540989613478], + [9123.861365168801, 136.40540989613478], + [9223.161365168802, 136.40540989613478], + [9322.461365168803, 302.0054098961348], + [9421.761365168804, 136.40540989613478], + [9521.061365168805, 136.40540989613478], + [9620.361365168807, 136.40540989613478], + [9620.361365168807, 302.0054098961348], + [9521.061365168805, 302.0054098961348], + [9521.061365168805, 467.60540989613474], + [9620.361365168807, 467.60540989613474], + [9719.661365168808, 302.0054098961348], + [9719.661365168808, 136.40540989613478], + [9818.961365168809, 136.40540989613478], + [9918.26136516881, 136.40540989613478], + [10017.56136516881, 136.40540989613478], + [366.07287160549004, 5394.185440937868], + [465.37287160549005, 5394.185440937868], + [465.37287160549005, 5559.785440937868], + [366.0728716054901, 5559.785440937868], + [366.0728716054901, 5725.385440937867], + [266.77287160549014, 5725.385440937867], + [167.47287160549016, 5559.785440937868], + [266.77287160549014, 5559.785440937868], + [266.77287160549014, 5394.185440937868], + [266.77287160549014, 5228.585440937869], + [167.47287160549016, 5394.185440937868], + [68.17287160549016, 5228.585440937869], + [167.47287160549013, 5062.9854409378695], + [68.17287160549013, 4897.38544093787], + [167.47287160549013, 4731.785440937871], + [266.77287160549014, 4731.785440937871], + [167.47287160549016, 4566.185440937871], + [68.17287160549016, 4566.185440937871], + [68.17287160549016, 4731.785440937871], + [167.47287160549013, 4897.38544093787], + [68.17287160549013, 5062.9854409378695], + [167.47287160549013, 5228.585440937869], + [266.77287160549014, 5062.9854409378695], + [366.0728716054901, 4897.38544093787], + [266.77287160549014, 4897.38544093787], + [366.0728716054901, 4731.785440937871], + [465.37287160549005, 4897.38544093787], + [366.0728716054901, 5062.9854409378695], + [465.37287160549005, 5062.9854409378695], + [366.0728716054901, 5228.585440937869], + [465.37287160549005, 5228.585440937869], + [564.6728716054901, 5394.185440937868], + [663.9728716054901, 5228.585440937869], + [564.6728716054901, 5062.9854409378695], + [663.9728716054901, 4897.38544093787], + [763.2728716054902, 4731.785440937871], + [862.5728716054903, 4566.185440937871], + [961.8728716054903, 4731.785440937871], + [862.5728716054903, 4731.785440937871], + [961.8728716054903, 4566.185440937871], + [862.5728716054903, 4400.585440937872], + [961.8728716054903, 4234.985440937872], + [1061.1728716054904, 4400.585440937872], + [1160.4728716054904, 4234.985440937872], + [1160.4728716054904, 4400.585440937872], + [1259.7728716054903, 4234.985440937872], + [1359.0728716054903, 4069.3854409378723], + [1458.3728716054902, 4069.3854409378723], + [1557.6728716054902, 4234.985440937872], + [1656.9728716054901, 4400.585440937872], + [1557.6728716054902, 4400.585440937872], + [1458.3728716054902, 4400.585440937872], + [1359.0728716054903, 4566.185440937871], + [1359.0728716054903, 4731.785440937871], + [1259.7728716054903, 4731.785440937871], + [1359.0728716054903, 4897.38544093787], + [1458.3728716054902, 4731.785440937871], + [1458.3728716054902, 4897.38544093787], + [1359.0728716054903, 5062.9854409378695], + [1259.7728716054903, 5228.585440937869], + [1259.7728716054903, 5062.9854409378695], + [1259.7728716054903, 4897.38544093787], + [1160.4728716054904, 5062.9854409378695], + [1160.4728716054904, 5228.585440937869], + [1061.1728716054904, 5228.585440937869], + [1061.1728716054904, 5062.9854409378695], + [961.8728716054903, 5228.585440937869], + [862.5728716054903, 5062.9854409378695], + [961.8728716054903, 5062.9854409378695], + [961.8728716054903, 4897.38544093787], + [1061.1728716054904, 4897.38544093787], + [1160.4728716054904, 4731.785440937871], + [1259.7728716054903, 4566.185440937871], + [1359.0728716054903, 4400.585440937872], + [1458.3728716054902, 4566.185440937871], + [1557.6728716054902, 4566.185440937871], + [1656.9728716054901, 4731.785440937871], + [1557.6728716054902, 4897.38544093787], + [1458.3728716054902, 5062.9854409378695], + [1557.6728716054902, 5228.585440937869], + [1656.9728716054901, 5062.9854409378695], + [1756.27287160549, 5062.9854409378695], + [1756.27287160549, 4897.38544093787], + [1855.57287160549, 5062.9854409378695], + [1954.87287160549, 4897.38544093787], + [2054.17287160549, 5062.9854409378695], + [1954.87287160549, 5062.9854409378695], + [2054.17287160549, 5228.585440937869], + [2153.4728716054897, 5228.585440937869], + [2252.7728716054894, 5062.9854409378695], + [2352.072871605489, 5228.585440937869], + [2451.372871605489, 5394.185440937868], + [2352.072871605489, 5394.185440937868], + [2252.7728716054894, 5228.585440937869], + [2153.4728716054897, 5062.9854409378695], + [2153.4728716054897, 4897.38544093787], + [2252.7728716054894, 4897.38544093787], + [2352.072871605489, 4731.785440937871], + [2252.7728716054894, 4731.785440937871], + [2153.4728716054897, 4731.785440937871], + [2054.17287160549, 4566.185440937871], + [1954.87287160549, 4731.785440937871], + [1855.57287160549, 4897.38544093787], + [1756.27287160549, 4731.785440937871], + [1855.57287160549, 4731.785440937871], + [1855.57287160549, 4566.185440937871], + [1756.27287160549, 4566.185440937871], + [1656.9728716054901, 4566.185440937871], + [1557.6728716054902, 4731.785440937871], + [1656.9728716054901, 4897.38544093787], + [1557.6728716054902, 5062.9854409378695], + [1458.3728716054902, 5228.585440937869], + [1359.0728716054903, 5228.585440937869], + [1259.7728716054903, 5394.185440937868], + [1259.7728716054903, 5559.785440937868], + [1160.4728716054904, 5559.785440937868], + [1061.1728716054904, 5559.785440937868], + [1160.4728716054904, 5725.385440937867], + [1259.7728716054903, 5725.385440937867], + [1359.0728716054903, 5559.785440937868], + [1458.3728716054902, 5725.385440937867], + [1458.3728716054902, 5559.785440937868], + [1359.0728716054903, 5725.385440937867], + [1259.7728716054903, 5890.985440937867], + [1359.0728716054903, 5890.985440937867], + [1259.7728716054903, 6056.585440937866], + [1359.0728716054903, 6222.185440937866], + [1458.3728716054902, 6222.185440937866], + [1458.3728716054902, 6387.785440937865], + [1557.6728716054902, 6222.185440937866], + [1557.6728716054902, 6387.785440937865], + [1656.9728716054901, 6222.185440937866], + [1756.27287160549, 6056.585440937866], + [1855.57287160549, 5890.985440937867], + [1756.27287160549, 5890.985440937867], + [1656.9728716054901, 6056.585440937866], + [1557.6728716054902, 5890.985440937867], + [1458.3728716054902, 5890.985440937867], + [1359.0728716054903, 6056.585440937866], + [1259.7728716054903, 6222.185440937866], + [1160.4728716054904, 6056.585440937866], + [1061.1728716054904, 5890.985440937867], + [1061.1728716054904, 6056.585440937866], + [1160.4728716054904, 6222.185440937866], + [1061.1728716054904, 6222.185440937866], + [961.8728716054903, 6222.185440937866], + [961.8728716054903, 6056.585440937866], + [961.8728716054903, 5890.985440937867], + [961.8728716054903, 5725.385440937867], + [862.5728716054903, 5559.785440937868], + [763.2728716054902, 5725.385440937867], + [862.5728716054903, 5725.385440937867], + [763.2728716054902, 5890.985440937867], + [663.9728716054901, 5725.385440937867], + [763.2728716054902, 5559.785440937868], + [763.2728716054902, 5394.185440937868], + [862.5728716054903, 5228.585440937869], + [961.8728716054903, 5394.185440937868], + [1061.1728716054904, 5394.185440937868], + [961.8728716054903, 5559.785440937868], + [862.5728716054903, 5394.185440937868], + [763.2728716054902, 5228.585440937869], + [663.9728716054901, 5062.9854409378695], + [763.2728716054902, 5062.9854409378695], + [763.2728716054902, 4897.38544093787], + [663.9728716054901, 4731.785440937871], + [564.6728716054901, 4731.785440937871], + [465.37287160549005, 4566.185440937871], + [366.0728716054901, 4566.185440937871], + [465.37287160549005, 4731.785440937871], + [564.6728716054901, 4566.185440937871], + [465.37287160549005, 4400.585440937872], + [366.0728716054901, 4400.585440937872], + [266.77287160549014, 4234.985440937872], + [167.47287160549016, 4234.985440937872], + [266.77287160549014, 4400.585440937872], + [266.77287160549014, 4566.185440937871], + [167.47287160549016, 4400.585440937872], + [68.17287160549016, 4234.985440937872], + [167.47287160549013, 4069.3854409378723], + [68.17287160549013, 3903.7854409378724], + [68.17287160549013, 4069.3854409378723], + [167.47287160549013, 3903.7854409378724], + [266.77287160549014, 3903.7854409378724], + [366.0728716054901, 3738.1854409378725], + [266.77287160549014, 3738.1854409378725], + [266.77287160549014, 3572.5854409378726], + [167.47287160549016, 3406.9854409378727], + [167.47287160549016, 3241.3854409378728], + [266.77287160549014, 3241.3854409378728], + [266.77287160549014, 3406.9854409378727], + [366.0728716054901, 3572.5854409378726], + [465.37287160549005, 3738.1854409378725], + [465.37287160549005, 3903.7854409378724], + [366.0728716054901, 4069.3854409378723], + [366.0728716054901, 4234.985440937872], + [465.37287160549005, 4234.985440937872], + [564.6728716054901, 4069.3854409378723], + [465.37287160549005, 4069.3854409378723], + [564.6728716054901, 4234.985440937872], + [663.9728716054901, 4069.3854409378723], + [663.9728716054901, 4234.985440937872], + [663.9728716054901, 4400.585440937872], + [763.2728716054902, 4566.185440937871], + [763.2728716054902, 4400.585440937872], + [663.9728716054901, 4566.185440937871], + [564.6728716054901, 4400.585440937872], + [19431.915041401327, 3495.506142643713], + [19332.61504140133, 3661.1061426437127], + [19431.915041401327, 3661.1061426437127], + [19531.215041401327, 3661.1061426437127], + [19630.515041401326, 3495.506142643713], + [19630.515041401326, 3661.1061426437127], + [19729.815041401325, 3826.7061426437126], + [19630.515041401326, 3826.7061426437126], + [19729.815041401325, 3992.3061426437125], + [19630.515041401326, 3992.3061426437125], + [19630.515041401326, 4157.906142643712], + [19630.515041401326, 4323.506142643711], + [19531.215041401327, 4157.906142643712], + [19431.915041401327, 4323.506142643711], + [19531.215041401327, 4489.106142643711], + [19431.915041401327, 4654.70614264371], + [19332.61504140133, 4654.70614264371], + [19332.61504140133, 4820.30614264371], + [19332.61504140133, 4985.906142643709], + [19233.31504140133, 4985.906142643709], + [19134.01504140133, 5151.506142643709], + [19034.71504140133, 5151.506142643709], + [19134.01504140133, 5317.106142643708], + [19034.71504140133, 5317.106142643708], + [19034.71504140133, 5482.706142643708], + [18935.41504140133, 5648.306142643707], + [18836.115041401332, 5813.9061426437065], + [18836.115041401332, 5979.506142643706], + [18935.41504140133, 5979.506142643706], + [19034.71504140133, 6145.106142643705], + [19034.71504140133, 5979.506142643706], + [19034.71504140133, 5813.9061426437065], + [19134.01504140133, 5648.306142643707], + [19233.31504140133, 5648.306142643707], + [19134.01504140133, 5813.9061426437065], + [19134.01504140133, 5979.506142643706], + [19233.31504140133, 5813.9061426437065], + [19233.31504140133, 5979.506142643706], + [19332.61504140133, 6145.106142643705], + [19332.61504140133, 6310.706142643705], + [19233.31504140133, 6310.706142643705], + [19233.31504140133, 6476.306142643704], + [19332.61504140133, 6476.306142643704], + [19431.915041401327, 6641.906142643704], + [19332.61504140133, 6807.506142643703], + [19332.61504140133, 6641.906142643704], + [19431.915041401327, 6476.306142643704], + [19431.915041401327, 6310.706142643705], + [19531.215041401327, 6145.106142643705], + [19431.915041401327, 5979.506142643706], + [19431.915041401327, 6145.106142643705], + [19531.215041401327, 5979.506142643706], + [19630.515041401326, 5813.9061426437065], + [19630.515041401326, 5979.506142643706], + [19729.815041401325, 5813.9061426437065], + [19829.115041401325, 5979.506142643706], + [19729.815041401325, 5979.506142643706], + [19729.815041401325, 6145.106142643705], + [19729.815041401325, 6310.706142643705], + [19630.515041401326, 6476.306142643704], + [19729.815041401325, 6476.306142643704], + [19630.515041401326, 6310.706142643705], + [19531.215041401327, 6310.706142643705], + [19531.215041401327, 6476.306142643704], + [19630.515041401326, 6641.906142643704], + [19729.815041401325, 6807.506142643703], + [19829.115041401325, 6973.106142643703], + [19928.415041401324, 6973.106142643703], + [19928.415041401324, 7138.706142643702], + [20027.715041401323, 7138.706142643702], + [20027.715041401323, 7304.306142643702], + [19928.415041401324, 7304.306142643702], + [19829.115041401325, 7304.306142643702], + [19829.115041401325, 7469.906142643701], + [19928.415041401324, 7469.906142643701], + [19928.415041401324, 7635.5061426437005], + [19928.415041401324, 7801.1061426437], + [20027.715041401323, 7635.5061426437005], + [20027.715041401323, 7801.1061426437], + [20127.015041401322, 7801.1061426437], + [20226.31504140132, 7801.1061426437], + [20325.61504140132, 7801.1061426437], + [20226.31504140132, 7635.5061426437005], + [20226.31504140132, 7469.906142643701], + [20226.31504140132, 7304.306142643702], + [20127.015041401322, 7304.306142643702], + [20027.715041401323, 7469.906142643701], + [20127.015041401322, 7469.906142643701], + [20127.015041401322, 7635.5061426437005], + [2748.790306732237, 2362.9553147492866], + [2848.0903067322365, 2528.5553147492865], + [2748.790306732237, 2694.1553147492864], + [2649.490306732237, 2859.7553147492863], + [2748.790306732237, 3025.355314749286], + [2848.0903067322365, 2859.7553147492863], + [2848.0903067322365, 2694.1553147492864], + [2947.3903067322362, 2694.1553147492864], + [3046.690306732236, 2859.7553147492863], + [3145.9903067322357, 2694.1553147492864], + [3145.9903067322357, 2528.5553147492865], + [3046.690306732236, 2694.1553147492864], + [3145.9903067322357, 2859.7553147492863], + [3046.690306732236, 3025.355314749286], + [3145.9903067322357, 3025.355314749286], + [3245.2903067322354, 3190.955314749286], + [3245.2903067322354, 3356.555314749286], + [3344.590306732235, 3522.155314749286], + [3443.890306732235, 3356.555314749286], + [3543.1903067322346, 3356.555314749286], + [3642.4903067322343, 3190.955314749286], + [3741.790306732234, 3025.355314749286], + [3741.790306732234, 2859.7553147492863], + [3841.090306732234, 3025.355314749286], + [3841.090306732234, 3190.955314749286], + [3741.790306732234, 3190.955314749286], + [3642.4903067322343, 3025.355314749286], + [3543.1903067322346, 3025.355314749286], + [3543.1903067322346, 2859.7553147492863], + [3443.890306732235, 3025.355314749286], + [3443.890306732235, 3190.955314749286], + [3543.1903067322346, 3190.955314749286], + [3642.4903067322343, 3356.555314749286], + [3543.1903067322346, 3522.155314749286], + [3443.890306732235, 3687.755314749286], + [3443.890306732235, 3853.3553147492858], + [3344.590306732235, 3687.755314749286], + [3245.2903067322354, 3853.3553147492858], + [3245.2903067322354, 3687.755314749286], + [3145.9903067322357, 3687.755314749286], + [3046.690306732236, 3853.3553147492858], + [3145.9903067322357, 4018.9553147492857], + [3145.9903067322357, 3853.3553147492858], + [3046.690306732236, 3687.755314749286], + [3145.9903067322357, 3522.155314749286], + [3145.9903067322357, 3356.555314749286], + [3145.9903067322357, 3190.955314749286], + [3046.690306732236, 3190.955314749286], + [3046.690306732236, 3356.555314749286], + [2947.3903067322362, 3356.555314749286], + [2848.0903067322365, 3190.955314749286], + [2947.3903067322362, 3025.355314749286], + [2848.0903067322365, 3025.355314749286], + [2748.790306732237, 2859.7553147492863], + [2649.490306732237, 2694.1553147492864], + [2748.790306732237, 2528.5553147492865], + [2848.0903067322365, 2362.9553147492866], + [2748.790306732237, 2197.3553147492867], + [2649.490306732237, 2362.9553147492866], + [2649.490306732237, 2197.3553147492867], + [2550.1903067322373, 2362.9553147492866], + [2450.8903067322376, 2362.9553147492866], + [2351.590306732238, 2528.5553147492865], + [2252.290306732238, 2528.5553147492865], + [2351.590306732238, 2362.9553147492866], + [2252.290306732238, 2197.3553147492867], + [2351.590306732238, 2197.3553147492867], + [2351.590306732238, 2031.7553147492865], + [2351.590306732238, 1866.1553147492864], + [2252.290306732238, 1866.1553147492864], + [2351.590306732238, 1700.5553147492863], + [2450.8903067322376, 1534.9553147492861], + [2351.590306732238, 1369.355314749286], + [2252.290306732238, 1203.7553147492858], + [2252.290306732238, 1369.355314749286], + [2252.290306732238, 1534.9553147492861], + [2152.9903067322384, 1369.355314749286], + [2053.6903067322387, 1369.355314749286], + [1954.3903067322387, 1203.7553147492858], + [1855.0903067322388, 1203.7553147492858], + [1755.7903067322388, 1038.1553147492857], + [1656.4903067322389, 1038.1553147492857], + [1557.190306732239, 872.5553147492857], + [1457.890306732239, 1038.1553147492857], + [1457.890306732239, 872.5553147492857], + [1457.890306732239, 706.9553147492858], + [1557.190306732239, 706.9553147492858], + [1656.4903067322389, 872.5553147492857], + [1656.4903067322389, 706.9553147492858], + [1755.7903067322388, 706.9553147492858], + [1656.4903067322389, 541.3553147492859], + [1557.190306732239, 375.7553147492859], + [1656.4903067322389, 210.1553147492859], + [1755.7903067322388, 44.55531474928592], + [1656.4903067322389, 44.55531474928592], + [1557.190306732239, 210.1553147492859], + [1457.890306732239, 210.1553147492859], + [1457.890306732239, 44.55531474928592], + [1358.590306732239, 210.1553147492859], + [1358.590306732239, 375.75531474928584], + [1259.290306732239, 210.15531474928585], + [1259.290306732239, 375.75531474928584], + [1259.290306732239, 541.3553147492859], + [1358.590306732239, 706.9553147492858], + [1358.590306732239, 872.5553147492857], + [1259.290306732239, 706.9553147492858], + [1259.290306732239, 872.5553147492857], + [1259.290306732239, 1038.1553147492857], + [1358.590306732239, 1203.7553147492858], + [1358.590306732239, 1038.1553147492857], + [1457.890306732239, 1203.7553147492858], + [1557.190306732239, 1369.355314749286], + [1656.4903067322389, 1203.7553147492858], + [1557.190306732239, 1203.7553147492858], + [1557.190306732239, 1038.1553147492857], + [17254.572515546668, 1460.5807801244923], + [17353.872515546667, 1626.1807801244925], + [17453.172515546667, 1791.7807801244926], + [17552.472515546666, 1791.7807801244926], + [17453.172515546667, 1626.1807801244925], + [17353.872515546667, 1791.7807801244926], + [17453.172515546667, 1957.3807801244927], + [17353.872515546667, 2122.980780124493], + [17453.172515546667, 2288.580780124493], + [17353.872515546667, 2454.1807801244927], + [17453.172515546667, 2619.7807801244926], + [17552.472515546666, 2619.7807801244926], + [17453.172515546667, 2785.3807801244925], + [17353.872515546667, 2619.7807801244926], + [17254.572515546668, 2454.1807801244927], + [17254.572515546668, 2288.580780124493], + [17353.872515546667, 2288.580780124493], + [17453.172515546667, 2122.980780124493], + [17552.472515546666, 2288.580780124493], + [17552.472515546666, 2454.1807801244927], + [17453.172515546667, 2454.1807801244927], + [4447.67624466283, 4761.1416826913], + [4546.97624466283, 4595.541682691301], + [4546.97624466283, 4429.941682691301], + [4447.67624466283, 4429.941682691301], + [4447.67624466283, 4595.541682691301], + [4348.37624466283, 4595.541682691301], + [4249.07624466283, 4595.541682691301], + [4348.37624466283, 4761.1416826913], + [4249.07624466283, 4761.1416826913], + [4348.37624466283, 4926.7416826912995], + [4348.37624466283, 5092.341682691299], + [4447.67624466283, 5257.941682691298], + [4546.97624466283, 5257.941682691298], + [4646.27624466283, 5092.341682691299], + [4546.97624466283, 5092.341682691299], + [4646.27624466283, 4926.7416826912995], + [4646.27624466283, 4761.1416826913], + [4546.97624466283, 4761.1416826913], + [4646.27624466283, 4595.541682691301], + [4745.5762446628305, 4595.541682691301], + [4646.27624466283, 4429.941682691301], + [4745.5762446628305, 4429.941682691301], + [4844.876244662831, 4595.541682691301], + [4745.5762446628305, 4761.1416826913], + [4745.5762446628305, 4926.7416826912995], + [4844.876244662831, 4761.1416826913], + [4944.176244662831, 4761.1416826913], + [5043.476244662831, 4926.7416826912995], + [5043.476244662831, 4761.1416826913], + [5142.776244662831, 4926.7416826912995], + [5142.776244662831, 4761.1416826913], + [5242.076244662831, 4595.541682691301], + [5142.776244662831, 4595.541682691301], + [5242.076244662831, 4429.941682691301], + [5242.076244662831, 4264.341682691302], + [5142.776244662831, 4429.941682691301], + [5043.476244662831, 4595.541682691301], + [5043.476244662831, 4429.941682691301], + [5043.476244662831, 4264.341682691302], + [5142.776244662831, 4098.741682691302], + [5043.476244662831, 4098.741682691302], + [4944.176244662831, 3933.1416826913023], + [4944.176244662831, 4098.741682691302], + [4944.176244662831, 4264.341682691302], + [4844.876244662831, 4098.741682691302], + [4745.5762446628305, 4264.341682691302], + [4646.27624466283, 4098.741682691302], + [4546.97624466283, 3933.1416826913023], + [4447.67624466283, 4098.741682691302], + [4546.97624466283, 4264.341682691302], + [4447.67624466283, 4264.341682691302], + [4546.97624466283, 4098.741682691302], + [4646.27624466283, 3933.1416826913023], + [4546.97624466283, 3767.5416826913024], + [4447.67624466283, 3601.9416826913025], + [4447.67624466283, 3767.5416826913024], + [4348.37624466283, 3767.5416826913024], + [4348.37624466283, 3933.1416826913023], + [4249.07624466283, 3767.5416826913024], + [4249.07624466283, 3933.1416826913023], + [4149.776244662829, 3933.1416826913023], + [4050.4762446628297, 4098.741682691302], + [4050.4762446628297, 3933.1416826913023], + [3951.17624466283, 3933.1416826913023], + [3951.17624466283, 4098.741682691302], + [3851.8762446628302, 4264.341682691302], + [3851.8762446628302, 4098.741682691302], + [3752.5762446628305, 4098.741682691302], + [3653.276244662831, 4264.341682691302], + [3553.976244662831, 4429.941682691301], + [3553.976244662831, 4595.541682691301], + [3454.6762446628313, 4429.941682691301], + [3553.976244662831, 4264.341682691302], + [3653.276244662831, 4429.941682691301], + [3752.5762446628305, 4264.341682691302], + [3752.5762446628305, 4429.941682691301], + [3851.8762446628302, 4595.541682691301], + [3851.8762446628302, 4429.941682691301], + [3951.17624466283, 4429.941682691301], + [4050.4762446628297, 4264.341682691302], + [4149.776244662829, 4098.741682691302], + [4249.07624466283, 4264.341682691302], + [4348.37624466283, 4098.741682691302], + [4447.67624466283, 3933.1416826913023], + [9574.088902135607, 7352.26293905581], + [9474.788902135606, 7352.26293905581], + [9375.488902135605, 7186.662939055811], + [9474.788902135606, 7021.0629390558115], + [9574.088902135607, 7021.0629390558115], + [9474.788902135606, 7186.662939055811], + [9574.088902135607, 7186.662939055811], + [9673.388902135608, 7021.0629390558115], + [9673.388902135608, 6855.462939055812], + [9772.68890213561, 6689.862939055813], + [9673.388902135608, 6689.862939055813], + [9772.68890213561, 6524.262939055813], + [9871.98890213561, 6358.662939055814], + [9971.288902135611, 6524.262939055813], + [10070.588902135612, 6358.662939055814], + [10070.588902135612, 6193.062939055814], + [9971.288902135611, 6027.462939055815], + [9971.288902135611, 5861.862939055815], + [9871.98890213561, 5861.862939055815], + [9871.98890213561, 5696.262939055816], + [9971.288902135611, 5530.662939055816], + [10070.588902135612, 5530.662939055816], + [10070.588902135612, 5696.262939055816], + [10169.888902135614, 5861.862939055815], + [10169.888902135614, 5696.262939055816], + [10070.588902135612, 5861.862939055815], + [10169.888902135614, 6027.462939055815], + [10169.888902135614, 6193.062939055814], + [10269.188902135615, 6027.462939055815], + [10269.188902135615, 5861.862939055815], + [10368.488902135616, 6027.462939055815], + [10269.188902135615, 6193.062939055814], + [10269.188902135615, 6358.662939055814], + [10169.888902135614, 6358.662939055814], + [10070.588902135612, 6524.262939055813], + [10070.588902135612, 6689.862939055813], + [9971.288902135611, 6855.462939055812], + [9971.288902135611, 7021.0629390558115], + [10070.588902135612, 7186.662939055811], + [10169.888902135614, 7186.662939055811], + [10269.188902135615, 7186.662939055811], + [10169.888902135614, 7352.26293905581], + [10070.588902135612, 7352.26293905581], + [10169.888902135614, 7517.86293905581], + [10169.888902135614, 7683.462939055809], + [10269.188902135615, 7517.86293905581], + [10368.488902135616, 7683.462939055809], + [10467.788902135617, 7683.462939055809], + [10368.488902135616, 7517.86293905581], + [10269.188902135615, 7352.26293905581], + [10368.488902135616, 7352.26293905581], + [10368.488902135616, 7186.662939055811], + [10368.488902135616, 7021.0629390558115], + [10368.488902135616, 6855.462939055812], + [10269.188902135615, 6855.462939055812], + [10169.888902135614, 6855.462939055812], + [10169.888902135614, 7021.0629390558115], + [10070.588902135612, 7021.0629390558115], + [10070.588902135612, 6855.462939055812], + [10169.888902135614, 6689.862939055813], + [10269.188902135615, 6689.862939055813], + [10169.888902135614, 6524.262939055813], + [10269.188902135615, 6524.262939055813], + [10368.488902135616, 6524.262939055813], + [10368.488902135616, 6358.662939055814], + [10467.788902135617, 6358.662939055814], + [10467.788902135617, 6193.062939055814], + [10567.088902135618, 6358.662939055814], + [10567.088902135618, 6193.062939055814], + [10666.388902135619, 6193.062939055814], + [10666.388902135619, 6358.662939055814], + [10567.088902135618, 6524.262939055813], + [10467.788902135617, 6524.262939055813], + [10567.088902135618, 6689.862939055813], + [10467.788902135617, 6855.462939055812], + [10567.088902135618, 7021.0629390558115], + [10467.788902135617, 7021.0629390558115], + [10567.088902135618, 6855.462939055812], + [10467.788902135617, 6689.862939055813], + [10368.488902135616, 6689.862939055813], + [1073.6944354374714, 1154.3681204032646], + [974.3944354374713, 1319.9681204032647], + [875.0944354374712, 1319.9681204032647], + [775.7944354374712, 1154.3681204032646], + [775.7944354374712, 988.7681204032646], + [875.0944354374712, 823.1681204032647], + [875.0944354374712, 657.5681204032647], + [775.7944354374712, 823.1681204032647], + [676.4944354374711, 657.5681204032647], + [676.4944354374711, 491.9681204032648], + [775.7944354374712, 657.5681204032647], + [676.4944354374711, 823.1681204032647], + [676.4944354374711, 988.7681204032646], + [577.194435437471, 823.1681204032647], + [577.194435437471, 988.7681204032646], + [577.194435437471, 1154.3681204032646], + [676.4944354374711, 1319.9681204032647], + [577.194435437471, 1319.9681204032647], + [477.89443543747103, 1319.9681204032647], + [577.194435437471, 1485.5681204032649], + [477.89443543747103, 1651.168120403265], + [577.194435437471, 1816.7681204032651], + [477.89443543747103, 1816.7681204032651], + [378.5944354374711, 1982.3681204032653], + [378.5944354374711, 2147.9681204032654], + [279.2944354374711, 2313.5681204032653], + [179.99443543747114, 2147.9681204032654], + [80.69443543747114, 2313.5681204032653], + [80.69443543747114, 2479.168120403265], + [179.9944354374711, 2644.768120403265], + [179.9944354374711, 2479.168120403265], + [179.9944354374711, 2313.5681204032653], + [80.69443543747111, 2147.9681204032654], + [80.69443543747111, 1982.3681204032653], + [179.9944354374711, 1982.3681204032653], + [179.9944354374711, 1816.7681204032651], + [80.69443543747111, 1816.7681204032651], + [179.9944354374711, 1651.168120403265], + [80.69443543747111, 1485.5681204032649], + [80.69443543747111, 1319.9681204032647], + [179.9944354374711, 1154.3681204032646], + [80.69443543747111, 1154.3681204032646], + [179.9944354374711, 988.7681204032646], + [279.2944354374711, 823.1681204032647], + [378.5944354374711, 657.5681204032647], + [378.5944354374711, 823.1681204032647], + [477.89443543747103, 823.1681204032647], + [477.89443543747103, 657.5681204032647], + [378.5944354374711, 491.9681204032648], + [477.89443543747103, 326.3681204032648], + [477.89443543747103, 160.76812040326482], + [378.5944354374711, 160.76812040326482], + [279.2944354374711, 326.3681204032648], + [179.99443543747114, 491.9681204032648], + [179.99443543747114, 326.3681204032648], + [279.2944354374711, 491.9681204032648], + [279.2944354374711, 657.5681204032647], + [179.99443543747114, 823.1681204032647], + [279.2944354374711, 988.7681204032646], + [279.2944354374711, 1154.3681204032646], + [378.5944354374711, 1319.9681204032647], + [477.89443543747103, 1485.5681204032649], + [577.194435437471, 1651.168120403265], + [676.4944354374711, 1651.168120403265], + [775.7944354374712, 1816.7681204032651], + [676.4944354374711, 1816.7681204032651], + [775.7944354374712, 1651.168120403265], + [875.0944354374712, 1651.168120403265], + [974.3944354374713, 1651.168120403265], + [875.0944354374712, 1485.5681204032649], + [775.7944354374712, 1485.5681204032649], + [676.4944354374711, 1485.5681204032649], + [775.7944354374712, 1319.9681204032647], + [676.4944354374711, 1154.3681204032646], + [3138.413562431697, 2355.845602060523], + [3039.113562431697, 2521.445602060523], + [3039.113562431697, 2355.845602060523], + [3039.113562431697, 2190.245602060523], + [3138.413562431697, 2024.645602060523], + [3237.7135624316966, 1859.045602060523], + [3237.7135624316966, 2024.645602060523], + [3337.0135624316963, 1859.045602060523], + [3337.0135624316963, 1693.4456020605228], + [3436.313562431696, 1527.8456020605227], + [3535.6135624316958, 1693.4456020605228], + [3535.6135624316958, 1859.045602060523], + [3634.9135624316955, 2024.645602060523], + [3734.213562431695, 2190.245602060523], + [3634.9135624316955, 2190.245602060523], + [3535.6135624316958, 2190.245602060523], + [3535.6135624316958, 2355.845602060523], + [3535.6135624316958, 2521.445602060523], + [3436.313562431696, 2687.045602060523], + [3436.313562431696, 2852.645602060523], + [3535.6135624316958, 2687.045602060523], + [3634.9135624316955, 2521.445602060523], + [3634.9135624316955, 2355.845602060523], + [3734.213562431695, 2355.845602060523], + [3833.513562431695, 2190.245602060523], + [3932.8135624316947, 2024.645602060523], + [3833.513562431695, 1859.045602060523], + [3833.513562431695, 1693.4456020605228], + [3734.213562431695, 1859.045602060523], + [3734.213562431695, 1693.4456020605228], + [3734.213562431695, 1527.8456020605227], + [3634.9135624316955, 1527.8456020605227], + [3634.9135624316955, 1693.4456020605228], + [3535.6135624316958, 1527.8456020605227], + [3634.9135624316955, 1362.2456020605225], + [3535.6135624316958, 1362.2456020605225], + [3436.313562431696, 1196.6456020605224], + [3535.6135624316958, 1196.6456020605224], + [3535.6135624316958, 1031.0456020605222], + [3436.313562431696, 1031.0456020605222], + [3535.6135624316958, 865.4456020605222], + [3436.313562431696, 865.4456020605222], + [3535.6135624316958, 699.8456020605223], + [3634.9135624316955, 699.8456020605223], + [3535.6135624316958, 534.2456020605224], + [3436.313562431696, 368.64560206052244], + [3436.313562431696, 203.04560206052244], + [3337.0135624316963, 37.445602060522454], + [3436.313562431696, 37.445602060522454], + [3337.0135624316963, 203.04560206052244], + [3237.7135624316966, 37.445602060522454], + [3138.413562431697, 37.445602060522454], + [3237.7135624316966, 203.04560206052244], + [3337.0135624316963, 368.6456020605224], + [3436.313562431696, 534.2456020605224], + [3337.0135624316963, 699.8456020605223], + [3237.7135624316966, 534.2456020605224], + [3337.0135624316963, 534.2456020605224], + [3436.313562431696, 699.8456020605223], + [3337.0135624316963, 865.4456020605222], + [3237.7135624316966, 865.4456020605222], + [3337.0135624316963, 1031.0456020605222], + [3237.7135624316966, 1196.6456020605224], + [3138.413562431697, 1362.2456020605225], + [3039.113562431697, 1527.8456020605227], + [3138.413562431697, 1527.8456020605227], + [3039.113562431697, 1693.4456020605228], + [2939.8135624316974, 1527.8456020605227], + [2840.5135624316977, 1362.2456020605225], + [2840.5135624316977, 1527.8456020605227], + [2840.5135624316977, 1693.4456020605228], + [2939.8135624316974, 1859.045602060523], + [2840.5135624316977, 2024.645602060523], + [2840.5135624316977, 1859.045602060523], + [2939.8135624316974, 1693.4456020605228], + [3039.113562431697, 1859.045602060523], + [3039.113562431697, 2024.645602060523], + [2939.8135624316974, 2190.245602060523], + [2939.8135624316974, 2024.645602060523], + [16388.412117675925, 1839.818884803299], + [16289.112117675924, 1839.818884803299], + [16388.412117675925, 1674.2188848032988], + [16487.712117675925, 1508.6188848032987], + [16487.712117675925, 1674.2188848032988], + [16388.412117675925, 1508.6188848032987], + [16289.112117675924, 1343.0188848032985], + [16289.112117675924, 1508.6188848032987], + [16189.812117675923, 1674.2188848032988], + [16090.512117675922, 1839.818884803299], + [16090.512117675922, 2005.418884803299], + [15991.212117675921, 2171.018884803299], + [16090.512117675922, 2336.618884803299], + [16090.512117675922, 2502.218884803299], + [16090.512117675922, 2667.8188848032987], + [15991.212117675921, 2833.4188848032986], + [15991.212117675921, 2999.0188848032985], + [15891.91211767592, 3164.6188848032984], + [15891.91211767592, 3330.2188848032984], + [15991.212117675921, 3330.2188848032984], + [16090.512117675922, 3330.2188848032984], + [16189.812117675923, 3495.8188848032983], + [16289.112117675924, 3495.8188848032983], + [16189.812117675923, 3330.2188848032984], + [16189.812117675923, 3164.6188848032984], + [16289.112117675924, 3164.6188848032984], + [16388.412117675925, 3164.6188848032984], + [16388.412117675925, 3330.2188848032984], + [16487.712117675925, 3330.2188848032984], + [16587.012117675924, 3495.8188848032983], + [16587.012117675924, 3661.418884803298], + [16686.312117675923, 3661.418884803298], + [16785.612117675922, 3661.418884803298], + [16884.91211767592, 3661.418884803298], + [16984.21211767592, 3661.418884803298], + [16884.91211767592, 3827.018884803298], + [16884.91211767592, 3992.618884803298], + [16984.21211767592, 3827.018884803298], + [17083.51211767592, 3661.418884803298], + [17182.81211767592, 3495.8188848032983], + [17182.81211767592, 3330.2188848032984], + [17282.11211767592, 3164.6188848032984], + [17282.11211767592, 3330.2188848032984], + [17182.81211767592, 3164.6188848032984], + [17083.51211767592, 3164.6188848032984], + [16984.21211767592, 3330.2188848032984], + [16984.21211767592, 3495.8188848032983], + [17083.51211767592, 3330.2188848032984], + [16984.21211767592, 3164.6188848032984], + [16984.21211767592, 2999.0188848032985], + [17083.51211767592, 2833.4188848032986], + [17083.51211767592, 2667.8188848032987], + [17182.81211767592, 2667.8188848032987], + [17182.81211767592, 2833.4188848032986], + [17083.51211767592, 2999.0188848032985], + [16984.21211767592, 2833.4188848032986], + [16884.91211767592, 2833.4188848032986], + [16884.91211767592, 2999.0188848032985], + [16785.612117675922, 2999.0188848032985], + [16884.91211767592, 3164.6188848032984], + [16785.612117675922, 3164.6188848032984], + [16686.312117675923, 3164.6188848032984], + [16587.012117675924, 3164.6188848032984], + [16587.012117675924, 2999.0188848032985], + [16487.712117675925, 3164.6188848032984], + [16587.012117675924, 3330.2188848032984], + [16686.312117675923, 3495.8188848032983], + [16686.312117675923, 3330.2188848032984], + [16785.612117675922, 3330.2188848032984], + [16884.91211767592, 3495.8188848032983], + [16785.612117675922, 3495.8188848032983], + [16884.91211767592, 3330.2188848032984], + [1272.175991128079, 3842.7700224365044], + [1371.475991128079, 3842.7700224365044], + [1272.175991128079, 3677.1700224365045], + [1172.875991128079, 3511.5700224365046], + [1272.175991128079, 3511.5700224365046], + [1172.875991128079, 3345.9700224365047], + [1073.575991128079, 3180.3700224365048], + [1073.575991128079, 3014.770022436505], + [974.275991128079, 3014.770022436505], + [874.9759911280789, 3014.770022436505], + [775.6759911280789, 2849.170022436505], + [775.6759911280789, 3014.770022436505], + [775.6759911280789, 3180.3700224365048], + [676.3759911280788, 3345.9700224365047], + [676.3759911280788, 3511.5700224365046], + [775.6759911280789, 3677.1700224365045], + [676.3759911280788, 3842.7700224365044], + [577.0759911280787, 3842.7700224365044], + [577.0759911280787, 3677.1700224365045], + [676.3759911280788, 3677.1700224365045], + [775.6759911280789, 3511.5700224365046], + [775.6759911280789, 3345.9700224365047], + [874.9759911280789, 3345.9700224365047], + [874.9759911280789, 3180.3700224365048], + [974.275991128079, 3180.3700224365048], + [974.275991128079, 3345.9700224365047], + [1073.575991128079, 3511.5700224365046], + [1073.575991128079, 3677.1700224365045], + [1172.875991128079, 3677.1700224365045], + [1172.875991128079, 3842.7700224365044], + [1073.575991128079, 3842.7700224365044], + [1172.875991128079, 4008.3700224365043], + [1073.575991128079, 4008.3700224365043], + [974.275991128079, 3842.7700224365044], + [974.275991128079, 4008.3700224365043], + [874.9759911280789, 4008.3700224365043], + [775.6759911280789, 4008.3700224365043], + [874.9759911280789, 3842.7700224365044], + [974.275991128079, 3677.1700224365045], + [974.275991128079, 3511.5700224365046], + [1073.575991128079, 3345.9700224365047], + [1172.875991128079, 3180.3700224365048], + [1272.175991128079, 3180.3700224365048], + [1272.175991128079, 3345.9700224365047], + [1371.475991128079, 3180.3700224365048], + [1470.7759911280789, 3345.9700224365047], + [1371.475991128079, 3345.9700224365047], + [1371.475991128079, 3511.5700224365046], + [1470.7759911280789, 3511.5700224365046], + [1570.0759911280788, 3677.1700224365045], + [1470.7759911280789, 3677.1700224365045], + [1570.0759911280788, 3511.5700224365046], + [1669.3759911280788, 3511.5700224365046], + [1669.3759911280788, 3677.1700224365045], + [1768.6759911280787, 3842.7700224365044], + [1669.3759911280788, 3842.7700224365044], + [1768.6759911280787, 4008.3700224365043], + [1867.9759911280787, 3842.7700224365044], + [1967.2759911280787, 3677.1700224365045], + [2066.5759911280784, 3842.7700224365044], + [2165.875991128078, 3677.1700224365045], + [2066.5759911280784, 3511.5700224365046], + [2165.875991128078, 3511.5700224365046], + [2066.5759911280784, 3677.1700224365045], + [2165.875991128078, 3842.7700224365044], + [2265.175991128078, 4008.3700224365043], + [2364.4759911280776, 4008.3700224365043], + [2265.175991128078, 3842.7700224365044], + [2364.4759911280776, 3677.1700224365045], + [2463.7759911280773, 3842.7700224365044], + [2463.7759911280773, 4008.3700224365043], + [2364.4759911280776, 3842.7700224365044] +]; + +@pragma('dart2js:assumeDynamic') +@pragma('dart2js:noInline') +confuse(x) => x; + +main() { + print(confuse(panels).length); +} diff --git a/tests/language/unsorted/liveness_test.dart b/tests/language/unsorted/liveness_test.dart new file mode 100644 index 000000000000..61e628489da7 --- /dev/null +++ b/tests/language/unsorted/liveness_test.dart @@ -0,0 +1,16 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test program testing closures. + +import "package:expect/expect.dart"; + +foo(x) { + var y = x; + for (int i = 0; i < 10; i++) x++; + return y; +} + +main() { + Expect.equals(499, foo(499)); +} diff --git a/tests/language/unsorted/load_indexed_constant_test.dart b/tests/language/unsorted/load_indexed_constant_test.dart new file mode 100644 index 000000000000..d7ccee494ffc --- /dev/null +++ b/tests/language/unsorted/load_indexed_constant_test.dart @@ -0,0 +1,21 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Test constant propagation of load-indexed operations +// VMOptions=--optimization-counter-threshold=10 + +import "package:expect/expect.dart"; + +main() { + Expect.equals(101, stringIndexedLoad()); + Expect.equals(102, arrayIndexedLoad()); + for (int i = 0; i < 20; i++) { + stringIndexedLoad(); + arrayIndexedLoad(); + } + Expect.equals(101, stringIndexedLoad()); + Expect.equals(102, arrayIndexedLoad()); +} + +stringIndexedLoad() => ("Hello").codeUnitAt(1); +arrayIndexedLoad() => (const [101, 102, 103])[1]; diff --git a/tests/language/unsorted/local_var_in_annotation_test.dart b/tests/language/unsorted/local_var_in_annotation_test.dart new file mode 100644 index 000000000000..f6474f847665 --- /dev/null +++ b/tests/language/unsorted/local_var_in_annotation_test.dart @@ -0,0 +1,12 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Regression test for https://github.com/dart-lang/sdk/issues/37065 + +const x = 0; +main(@x args) { + const z = 0; + foo(@z args) {} + bar(@x args) {} +} diff --git a/tests/language/unsorted/many_calls_test.dart b/tests/language/unsorted/many_calls_test.dart new file mode 100644 index 000000000000..8f29d1adb8ce --- /dev/null +++ b/tests/language/unsorted/many_calls_test.dart @@ -0,0 +1,223 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Test megamorphic calls. + +import "package:expect/expect.dart"; + +class A { + A() {} + f1() { + return 1; + } + + f2() { + return 2; + } + + f3() { + return 3; + } + + f4() { + return 4; + } + + f5() { + return 5; + } + + f6() { + return 6; + } + + f7() { + return 7; + } + + f8() { + return 8; + } + + f9() { + return 9; + } + + f11() { + return 11; + } + + f12() { + return 12; + } + + f13() { + return 13; + } + + f14() { + return 14; + } + + f15() { + return 15; + } + + f16() { + return 16; + } + + f17() { + return 17; + } + + f18() { + return 18; + } + + f19() { + return 19; + } + + f20() { + return 20; + } + + f21() { + return 21; + } + + f22() { + return 22; + } + + f23() { + return 23; + } + + f24() { + return 24; + } + + f25() { + return 25; + } + + f26() { + return 26; + } + + f27() { + return 27; + } + + f28() { + return 28; + } + + f29() { + return 29; + } + + f30() { + return 30; + } + + f31() { + return 31; + } + + f32() { + return 32; + } + + f33() { + return 33; + } + + f34() { + return 34; + } + + f35() { + return 35; + } + + f36() { + return 36; + } + + f37() { + return 37; + } + + f38() { + return 38; + } + + f39() { + return 39; + } +} + +class B extends A { + B() : super() {} +} + +class ManyCallsTest { + static testMain() { + var list = new List.filled(10, null); + for (int i = 0; i < (list.length ~/ 2); i++) { + list[i] = new A(); + } + for (int i = (list.length ~/ 2); i < list.length; i++) { + list[i] = new B(); + } + for (int loop = 0; loop < 7; loop++) { + for (int i = 0; i < list.length; i++) { + Expect.equals(1, list[i].f1()); + Expect.equals(2, list[i].f2()); + Expect.equals(3, list[i].f3()); + Expect.equals(4, list[i].f4()); + Expect.equals(5, list[i].f5()); + Expect.equals(6, list[i].f6()); + Expect.equals(7, list[i].f7()); + Expect.equals(8, list[i].f8()); + Expect.equals(9, list[i].f9()); + Expect.equals(11, list[i].f11()); + Expect.equals(12, list[i].f12()); + Expect.equals(13, list[i].f13()); + Expect.equals(14, list[i].f14()); + Expect.equals(15, list[i].f15()); + Expect.equals(16, list[i].f16()); + Expect.equals(17, list[i].f17()); + Expect.equals(18, list[i].f18()); + Expect.equals(19, list[i].f19()); + Expect.equals(20, list[i].f20()); + Expect.equals(21, list[i].f21()); + Expect.equals(22, list[i].f22()); + Expect.equals(23, list[i].f23()); + Expect.equals(24, list[i].f24()); + Expect.equals(25, list[i].f25()); + Expect.equals(26, list[i].f26()); + Expect.equals(27, list[i].f27()); + Expect.equals(28, list[i].f28()); + Expect.equals(29, list[i].f29()); + Expect.equals(30, list[i].f30()); + Expect.equals(31, list[i].f31()); + Expect.equals(32, list[i].f32()); + Expect.equals(33, list[i].f33()); + Expect.equals(34, list[i].f34()); + Expect.equals(35, list[i].f35()); + Expect.equals(36, list[i].f36()); + Expect.equals(37, list[i].f37()); + Expect.equals(38, list[i].f38()); + Expect.equals(39, list[i].f39()); + } + } + } +} + +main() { + ManyCallsTest.testMain(); +} diff --git a/tests/language/unsorted/many_method_calls_test.dart b/tests/language/unsorted/many_method_calls_test.dart new file mode 100644 index 000000000000..f16aa9af0d96 --- /dev/null +++ b/tests/language/unsorted/many_method_calls_test.dart @@ -0,0 +1,6644 @@ +// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Test that compiler does not crash for very long chains of method calls. + +var field = false; + +foo() { + if (field) { + print('foo'); + } +} + +main() { + manyMethodCalls(); + field = true; +} + +manyMethodCalls() { + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); + foo(); +} diff --git a/tests/language/unsorted/many_named_arguments_test.dart b/tests/language/unsorted/many_named_arguments_test.dart new file mode 100644 index 000000000000..015a13795f3e --- /dev/null +++ b/tests/language/unsorted/many_named_arguments_test.dart @@ -0,0 +1,126 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:expect/expect.dart'; + +class Fisk { + method( + {a: 'a', + b: 'b', + c: 'c', + d: 'd', + e: 'e', + f: 'f', + g: 'g', + h: 'h', + i: 'i', + j: 'j', + k: 'k', + l: 'l', + m: 'm', + n: 'n', + o: 'o', + p: 'p', + q: 'q', + r: 'r', + s: 's', + t: 't', + u: 'u', + v: 'v', + w: 'w', + x: 'x', + y: 'y', + z: 'z'}) { + return 'a: $a, ' + 'b: $b, ' + 'c: $c, ' + 'd: $d, ' + 'e: $e, ' + 'f: $f, ' + 'g: $g, ' + 'h: $h, ' + 'i: $i, ' + 'j: $j, ' + 'k: $k, ' + 'l: $l, ' + 'm: $m, ' + 'n: $n, ' + 'o: $o, ' + 'p: $p, ' + 'q: $q, ' + 'r: $r, ' + 's: $s, ' + 't: $t, ' + 'u: $u, ' + 'v: $v, ' + 'w: $w, ' + 'x: $x, ' + 'y: $y, ' + 'z: $z'; + } +} + +main() { + var method = new Fisk().method; + var namedArguments = new Map(); + namedArguments[const Symbol('a')] = 'a'; + Expect.stringEquals( + EXPECTED_RESULT, Function.apply(method, [], namedArguments)); + Expect.stringEquals( + EXPECTED_RESULT, + new Fisk().method( + a: 'a', + b: 'b', + c: 'c', + d: 'd', + e: 'e', + f: 'f', + g: 'g', + h: 'h', + i: 'i', + j: 'j', + k: 'k', + l: 'l', + m: 'm', + n: 'n', + o: 'o', + p: 'p', + q: 'q', + r: 'r', + s: 's', + t: 't', + u: 'u', + v: 'v', + w: 'w', + x: 'x', + y: 'y', + z: 'z')); +} + +const String EXPECTED_RESULT = 'a: a, ' + 'b: b, ' + 'c: c, ' + 'd: d, ' + 'e: e, ' + 'f: f, ' + 'g: g, ' + 'h: h, ' + 'i: i, ' + 'j: j, ' + 'k: k, ' + 'l: l, ' + 'm: m, ' + 'n: n, ' + 'o: o, ' + 'p: p, ' + 'q: q, ' + 'r: r, ' + 's: s, ' + 't: t, ' + 'u: u, ' + 'v: v, ' + 'w: w, ' + 'x: x, ' + 'y: y, ' + 'z: z'; diff --git a/tests/language/unsorted/mega_load_test.dart b/tests/language/unsorted/mega_load_test.dart new file mode 100644 index 000000000000..29790a6a6aa9 --- /dev/null +++ b/tests/language/unsorted/mega_load_test.dart @@ -0,0 +1,208 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Test megamorphic, but single target field load. +// VMOptions=--optimization-counter-threshold=10 + +import "package:expect/expect.dart"; + +class Base { + var f; +} + +class A extends Base { + A() { + this.f = 0; + } +} + +class B extends Base { + B() { + this.f = 1; + } +} + +class C extends Base { + C() { + this.f = 2; + } +} + +class D extends Base { + D() { + this.f = 3; + } +} + +class E extends Base { + E() { + this.f = 4; + } +} + +class F extends Base { + F() { + this.f = 5; + } +} + +class G extends Base { + G() { + this.f = 6; + } +} + +class H extends Base { + H() { + this.f = 7; + } +} + +class I extends Base { + I() { + this.f = 8; + } +} + +class J extends Base { + J() { + this.f = 9; + } +} + +class K extends Base { + K() { + this.f = 10; + } +} + +class L extends Base { + L() { + this.f = 11; + } +} + +class M extends Base { + M() { + this.f = 12; + } +} + +class N extends Base { + N() { + this.f = 13; + } +} + +class O extends Base { + O() { + this.f = 14; + } +} + +class P extends Base { + P() { + this.f = 15; + } +} + +class Q extends Base { + Q() { + this.f = 16; + } +} + +class R extends Base { + R() { + this.f = 17; + } +} + +class S extends Base { + S() { + this.f = 18; + } +} + +class T extends Base { + T() { + this.f = 19; + } +} + +class U extends Base { + U() { + this.f = 20; + } +} + +class V extends Base { + V() { + this.f = 21; + } +} + +class W extends Base { + V() { + this.f = 22; + } +} + +class X extends Base { + V() { + this.f = 21; + } +} + +class Y extends Base { + V() { + this.f = 24; + } +} + +class Z extends Base { + V() { + this.f = 21; + } +} + +allocateObjects() { + var list = []; + list.add(new A()); + list.add(new B()); + list.add(new C()); + list.add(new D()); + list.add(new E()); + list.add(new F()); + list.add(new G()); + list.add(new H()); + list.add(new I()); + list.add(new J()); + list.add(new K()); + list.add(new L()); + list.add(new M()); + list.add(new N()); + list.add(new O()); + list.add(new P()); + list.add(new Q()); + list.add(new R()); + list.add(new S()); + list.add(new T()); + list.add(new U()); + list.add(new V()); + return list; +} + +callThemAll(var list) { + for (var i = 0; i < list.length; i++) { + Expect.equals(i, list[i].f); + } +} + +main() { + var list = allocateObjects(); + // Make sure the optimizer triggers the compilation of callThemAll. + for (var i = 0; i < 20; i++) { + callThemAll(list); + } +} diff --git a/tests/language/unsorted/memory_swap_test.dart b/tests/language/unsorted/memory_swap_test.dart new file mode 100644 index 000000000000..b8d093e18235 --- /dev/null +++ b/tests/language/unsorted/memory_swap_test.dart @@ -0,0 +1,90 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Test that the ParalleMoveResolver in the VM uses valid registers +// when requiring scratch registers. + +main() { + // Iterate enough to ensure optimizing `spillingMethod`. + for (int i = 0; i < 100000; i++) { + spillingMethod(i, () => 0); + } +} + +spillingMethod(what, obfuscate) { + // Define lots of variables to get a few in stack. + var a = obfuscate(); + var b = obfuscate(); + var c = obfuscate(); + var d = obfuscate(); + var e = obfuscate(); + var f = obfuscate(); + var g = obfuscate(); + var h = obfuscate(); + var i = obfuscate(); + var j = obfuscate(); + var k = obfuscate(); + var l = obfuscate(); + var m = obfuscate(); + var n = obfuscate(); + var o = obfuscate(); + var p = obfuscate(); + var q = obfuscate(); + var r = obfuscate(); + var s = obfuscate(); + var t = obfuscate(); + var u = obfuscate(); + var v = obfuscate(); + + // Swap all variables, in the hope of a memory <-> memory swap operation. + while (what == 42) { + a = b; + b = a; + c = d; + d = c; + e = f; + f = e; + g = h; + h = g; + i = j; + j = i; + k = l; + l = k; + m = n; + n = m; + o = p; + p = o; + q = r; + r = q; + s = t; + t = s; + u = v; + v = u; + what++; + } + + // Keep all variables alive. + return a + + b + + c + + d + + e + + f + + g + + h + + i + + j + + k + + l + + m + + n + + o + + p + + q + + r + + s + + t + + u + + v; +} diff --git a/tests/language/unsorted/mint_compares_test.dart b/tests/language/unsorted/mint_compares_test.dart new file mode 100644 index 000000000000..ef37d9a226ab --- /dev/null +++ b/tests/language/unsorted/mint_compares_test.dart @@ -0,0 +1,153 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// VMOptions=--optimization-counter-threshold=10 + +import "package:expect/expect.dart"; + +// Test compares on 64-bit integers. + +compareTest() { + Expect.isFalse(4294967296 < 6); + Expect.isFalse(4294967296 < 4294967296); + Expect.isFalse(4294967296 <= 6); + Expect.isTrue(4294967296 <= 4294967296); + Expect.isFalse(4294967296 < 4294967295); + + Expect.isTrue(-4294967296 < 6); + Expect.isTrue(-4294967296 < 4294967296); + Expect.isTrue(-4294967296 <= 6); + Expect.isTrue(-4294967296 <= 4294967296); + Expect.isTrue(-4294967296 < 4294967295); + + Expect.isFalse(4294967296 < -6); + Expect.isFalse(4294967296 <= -6); + Expect.isFalse(4294967296 < -4294967295); + + Expect.isTrue(-4294967296 < -6); + Expect.isTrue(-4294967296 <= -6); + Expect.isTrue(-4294967296 < -4294967295); + + Expect.isTrue(4294967296 > 6); + Expect.isFalse(4294967296 > 4294967296); + Expect.isTrue(4294967296 >= 6); + Expect.isTrue(4294967296 >= 4294967296); + Expect.isTrue(4294967296 > 4294967295); + + Expect.isFalse(-4294967296 > 6); + Expect.isFalse(-4294967296 > 4294967296); + Expect.isFalse(-4294967296 >= 6); + Expect.isFalse(-4294967296 >= 4294967296); + Expect.isFalse(-4294967296 > 4294967295); + + Expect.isTrue(4294967296 > -6); + Expect.isTrue(4294967296 >= -6); + Expect.isTrue(4294967296 > -4294967295); + + Expect.isFalse(-4294967296 > -6); + Expect.isFalse(-4294967296 >= -6); + Expect.isFalse(-4294967296 > -4294967295); + + Expect.isTrue(4294967296 < 9223372036854775807); + Expect.isTrue(-4294967296 < 9223372036854775807); + Expect.isFalse(4294967296 < -9223372036854775808); + Expect.isFalse(-4294967296 < -9223372036854775808); +} + +compareTest2(lt, lte, gt, gte) { + Expect.isFalse(lt(4294967296, 6)); + Expect.isFalse(lte(4294967296, 6)); + Expect.isTrue(gt(4294967296, 6)); + Expect.isTrue(gte(4294967296, 6)); + + Expect.isTrue(lte(-1, -1)); + Expect.isTrue(gte(-1, -1)); + Expect.isTrue(lte(-2, -1)); + Expect.isFalse(gte(-2, -1)); + Expect.isTrue(lte(-4294967296, -1)); + Expect.isFalse(gte(-4294967296, -1)); + + Expect.isTrue(lt(-2, -1)); + Expect.isFalse(gt(-2, -1)); + Expect.isTrue(lt(-4294967296, -1)); + Expect.isFalse(gt(-4294967296, -1)); + + Expect.isFalse(lt(-1, -4294967296)); + Expect.isTrue(gt(-1, -4294967296)); + Expect.isFalse(lt(2, -2)); + Expect.isTrue(gt(2, -2)); + Expect.isFalse(lt(4294967296, -1)); + Expect.isTrue(gt(4294967296, -1)); +} + +compareTestWithZero(lt, lte, gt, gte, eq, ne) { + Expect.isFalse(lt(4294967296)); + Expect.isFalse(lte(4294967296)); + Expect.isTrue(gt(4294967296)); + Expect.isTrue(gte(4294967296)); + Expect.isFalse(eq(4294967296)); + Expect.isTrue(ne(4294967296)); + + Expect.isTrue(lt(-1)); + Expect.isTrue(lte(-1)); + Expect.isFalse(gt(-1)); + Expect.isFalse(gte(-1)); + Expect.isFalse(eq(-1)); + Expect.isTrue(ne(-1)); + + Expect.isTrue(lt(-2)); + Expect.isTrue(lte(-2)); + Expect.isFalse(gt(-2)); + Expect.isFalse(gte(-2)); + Expect.isFalse(eq(-2)); + Expect.isTrue(ne(-2)); + + Expect.isTrue(lt(-4294967296)); + Expect.isTrue(lte(-4294967296)); + Expect.isFalse(gt(-4294967296)); + Expect.isFalse(gte(-4294967296)); + Expect.isFalse(eq(-4294967296)); + Expect.isTrue(ne(-4294967296)); + + Expect.isFalse(lt(0)); + Expect.isTrue(lte(0)); + Expect.isFalse(gt(0)); + Expect.isTrue(gte(0)); + Expect.isTrue(eq(0)); + Expect.isFalse(ne(0)); +} + +bool lt1(a, b) => a < b; +bool lte1(a, b) => a <= b; +bool gt1(a, b) => a > b; +bool gte1(a, b) => a >= b; + +bool lt2(a, b) => a < b ? true : false; +bool lte2(a, b) => a <= b ? true : false; +bool gt2(a, b) => a > b ? true : false; +bool gte2(a, b) => a >= b ? true : false; + +bool int_lt1(int a) => a < 0; +bool int_lte1(int a) => a <= 0; +bool int_gt1(int a) => a > 0; +bool int_gte1(int a) => a >= 0; +bool int_eq1(int a) => a == 0; +bool int_ne1(int a) => a != 0; + +bool int_lt2(int a) => a < 0 ? true : false; +bool int_lte2(int a) => a <= 0 ? true : false; +bool int_gt2(int a) => a > 0 ? true : false; +bool int_gte2(int a) => a >= 0 ? true : false; +bool int_eq2(int a) => a == 0 ? true : false; +bool int_ne2(int a) => a != 0 ? true : false; + +main() { + for (var i = 0; i < 20; i++) { + compareTest(); + compareTest2(lt1, lte1, gt1, gte1); + compareTest2(lt2, lte2, gt2, gte2); + + compareTestWithZero(int_lt1, int_lte1, int_gt1, int_gte1, int_eq1, int_ne1); + compareTestWithZero(int_lt2, int_lte2, int_gt2, int_gte2, int_eq2, int_ne2); + } +} diff --git a/tests/language/unsorted/mock_writable_final_field_test.dart b/tests/language/unsorted/mock_writable_final_field_test.dart new file mode 100644 index 000000000000..2a82a5658527 --- /dev/null +++ b/tests/language/unsorted/mock_writable_final_field_test.dart @@ -0,0 +1,61 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:expect/expect.dart'; + +final values = []; + +class Mock { + noSuchMethod(Invocation i) { + var expected = i.isGetter ? #x : const Symbol("x="); + Expect.equals(expected.toString(), i.memberName.toString()); + values.add(i.positionalArguments[0]); + } +} + +class Foo { + // Prevent obfuscation of 'x'. + @pragma("vm:entry-point") + int x = -1; +} + +class Bar extends Mock implements Foo { + final int x = 42; +} + +class _Baz implements Foo { + final int x = 42; + + noSuchMethod(Invocation i) { + var expected = i.isGetter ? #x : const Symbol("x="); + Expect.equals(expected.toString(), i.memberName.toString()); + values.add(i.positionalArguments[0]); + } +} + +void main() { + { + Bar b = new Bar(); + Expect.equals(b.x, 42); + b.x = 123; + Expect.listEquals([123], values); + values.clear(); + } + { + // It works the same if called statically through the Foo interface. + Foo b = new Bar(); + Expect.equals(b.x, 42); + b.x = 123; + Expect.listEquals([123], values); + values.clear(); + } + { + // It works the same if the noSuchMethod is defined directly in the class. + Foo b = new _Baz(); + Expect.equals(b.x, 42); + b.x = 123; + Expect.listEquals([123], values); + values.clear(); + } +} diff --git a/tests/language/unsorted/multi_pass2_test.dart b/tests/language/unsorted/multi_pass2_test.dart new file mode 100644 index 000000000000..e75d2d676309 --- /dev/null +++ b/tests/language/unsorted/multi_pass2_test.dart @@ -0,0 +1,27 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test for loading several dart files and resolving superclasses lazily. +// Same as MultiPassTest, except that the file order is reversed. + +library MultiPassTest.dart; + +import "package:expect/expect.dart"; +part "multi_pass_a.dart"; +part "multi_pass_b.dart"; + +class Base { + Base(this.value) {} + var value; +} + +class MultiPass2Test { + static testMain() { + var a = new B(5); + Expect.equals(5, a.value); + } +} + +main() { + MultiPass2Test.testMain(); +} diff --git a/tests/language/unsorted/multi_pass_a.dart b/tests/language/unsorted/multi_pass_a.dart new file mode 100644 index 000000000000..5b2863f78ad4 --- /dev/null +++ b/tests/language/unsorted/multi_pass_a.dart @@ -0,0 +1,10 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test for loading several dart files and resolving superclasses lazily. + +part of MultiPassTest.dart; + +class A extends Base { + A(v) : super(v) {} +} diff --git a/tests/language/unsorted/multi_pass_b.dart b/tests/language/unsorted/multi_pass_b.dart new file mode 100644 index 000000000000..ed99b832f364 --- /dev/null +++ b/tests/language/unsorted/multi_pass_b.dart @@ -0,0 +1,10 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test for loading several dart files and resolving superclasses lazily. + +part of MultiPassTest.dart; + +class B extends A { + B(v) : super(v) {} +} diff --git a/tests/language/unsorted/multi_pass_test.dart b/tests/language/unsorted/multi_pass_test.dart new file mode 100644 index 000000000000..a7f905904b1c --- /dev/null +++ b/tests/language/unsorted/multi_pass_test.dart @@ -0,0 +1,26 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test for loading several dart files and resolving superclasses lazily. + +library MultiPassTest.dart; + +import "package:expect/expect.dart"; +part "multi_pass_a.dart"; +part "multi_pass_b.dart"; + +class Base { + Base(this.value) {} + var value; +} + +class MultiPassTest { + static testMain() { + var a = new B(5); + Expect.equals(5, a.value); + } +} + +main() { + MultiPassTest.testMain(); +} diff --git a/tests/language/unsorted/namer2_test.dart b/tests/language/unsorted/namer2_test.dart new file mode 100644 index 000000000000..3d7d2bc991b3 --- /dev/null +++ b/tests/language/unsorted/namer2_test.dart @@ -0,0 +1,24 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +// Test that user field names cannot clash with internal names of the +// dart2js compiler. + +class A { + var $isA; + var $eq; + var $builtinTypeInfo; +} + +main() { + var c = [new A()]; + Expect.isTrue(c[0] is A); + Expect.isTrue(c[0] == c[0]); + + c = [new A()]; + c[0].$builtinTypeInfo = 42; + Expect.isTrue(c[0] is! A); +} diff --git a/tests/language/unsorted/namer_test.dart b/tests/language/unsorted/namer_test.dart new file mode 100644 index 000000000000..d9ad7d833f6d --- /dev/null +++ b/tests/language/unsorted/namer_test.dart @@ -0,0 +1,65 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +// Regression test for a bug in dart2js where global names could +// collide. + +var i = 'top level'; + +var i0 = 'top level zero'; + +var i00 = 'top level zero zero'; + +var i2 = 'top level too'; + +class A { + static var i = 'A'; +} + +var j = 'top level'; + +var j0 = 'top level zero'; + +var j00 = 'top level zero zero'; + +var j2 = 'top level too'; + +class B { + static var j = 'B'; +} + +var k = 'top level'; + +var k0 = 'top level zero'; + +var k00 = 'top level zero zero'; + +var k2 = 'top level too'; + +class C { + static var k = 'C'; +} + +main() { + // Order matters. This sequence triggered the bug. + Expect.equals('top level', i); + Expect.equals('A', A.i); + Expect.equals('top level too', i2); + Expect.equals('top level zero zero', i00); + Expect.equals('top level zero', i0); + + Expect.equals('top level zero zero', j00); + Expect.equals('top level', j); + Expect.equals('top level too', j2); + Expect.equals('top level zero', j0); + Expect.equals('B', B.j); + + Expect.equals('top level too', k2); + Expect.equals('top level zero', k0); + Expect.equals('top level', k); + Expect.equals('C', C.k); + Expect.equals('top level zero zero', k00); +} diff --git a/tests/language/unsorted/native_test.dart b/tests/language/unsorted/native_test.dart new file mode 100644 index 000000000000..c3401d3fb26f --- /dev/null +++ b/tests/language/unsorted/native_test.dart @@ -0,0 +1,27 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test program which shows how to write self verifying tests +// and how to print dart objects if needed. + +import "package:expect/expect.dart"; + +class Helper { + static int foo(int i) { + return i + 10; + } +} + +class NativeTest { + static testMain() { + int i = 10; + int result = 10 + 10 + 10; + i = Helper.foo(i + 10); + print("$i is result."); + Expect.equals(i, result); + } +} + +main() { + NativeTest.testMain(); +} diff --git a/tests/language/unsorted/parse_types_test.dart b/tests/language/unsorted/parse_types_test.dart new file mode 100644 index 000000000000..665759d5dbdd --- /dev/null +++ b/tests/language/unsorted/parse_types_test.dart @@ -0,0 +1,40 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test for testing parsing of "standard" types. + +import "package:expect/expect.dart"; + +class ParseTypesTest { + static bool callBool1() { + return true; + } + + static bool callBool2() { + return false; + } + + static int callInt() { + return 2; + } + + static String callString() { + return "Hey"; + } + + static double callDouble() { + return 4.0; + } + + static void testMain() { + Expect.equals(true, ParseTypesTest.callBool1()); + Expect.equals(false, ParseTypesTest.callBool2()); + Expect.equals(2, ParseTypesTest.callInt()); + Expect.equals("Hey", ParseTypesTest.callString()); + Expect.equals(4.0, ParseTypesTest.callDouble()); + } +} + +main() { + ParseTypesTest.testMain(); +} diff --git a/tests/language/unsorted/partial_min_test.dart b/tests/language/unsorted/partial_min_test.dart new file mode 100644 index 000000000000..bf80169d1ec5 --- /dev/null +++ b/tests/language/unsorted/partial_min_test.dart @@ -0,0 +1,30 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +// This test triggered an NPE in dart2js. +// The bug needed: +// - double usage of the same variable in one expression ("b != b"). +// - replacement of "b" with "typechecked b". +// - ... +// The example below is minimal (as far as I was able to do). + +num foo(num a, num b) { + if (a > b) return b; + if (b is double) { + if (true) { + if (true) { + return (a + b) * a * b; + } + } + // Check for NaN and b == -0.0. + if (a == 0 && b == 0 || b != b) return b; + } + return -1; +} + +main() { + Expect.equals(1, foo(2, 1)); +} diff --git a/tests/language/unsorted/patch_test.dart b/tests/language/unsorted/patch_test.dart new file mode 100644 index 000000000000..2815cbfb6317 --- /dev/null +++ b/tests/language/unsorted/patch_test.dart @@ -0,0 +1,14 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +patch() { + return 12; +} + +main() { + var x = patch(); + Expect.equals(12, x); +} diff --git a/tests/language/unsorted/property_field_override_test.dart b/tests/language/unsorted/property_field_override_test.dart new file mode 100644 index 000000000000..1e7b8538c8a7 --- /dev/null +++ b/tests/language/unsorted/property_field_override_test.dart @@ -0,0 +1,29 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +// Test overriding a getter property with a field. +abstract class A { + int get v; // Abstract. + + int a() { + return v - 1; + } +} + +class B extends A { + int v = 3; + + int b() { + return ++v; + } +} + +main() { + var x = new B(); + Expect.equals(3, x.v); + Expect.equals(2, x.a()); + Expect.equals(4, x.b()); +} diff --git a/tests/language/unsorted/range_analysis2_test.dart b/tests/language/unsorted/range_analysis2_test.dart new file mode 100644 index 000000000000..9443995e9f3b --- /dev/null +++ b/tests/language/unsorted/range_analysis2_test.dart @@ -0,0 +1,15 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Regression test for dart2js that used to remove bounds checks on +// boxed variables. + +import "package:expect/expect.dart"; + +main() { + var a = 0; + var b = [1]; + foo() => b[a--] + b[a]; + Expect.throwsRangeError(foo); +} diff --git a/tests/language/unsorted/range_analysis3_test.dart b/tests/language/unsorted/range_analysis3_test.dart new file mode 100644 index 000000000000..8fa0edd29bd2 --- /dev/null +++ b/tests/language/unsorted/range_analysis3_test.dart @@ -0,0 +1,210 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +confuse(x) { + if (new DateTime.now().millisecondsSinceEpoch == 0) { + return confuse(x + 1); + } else if (new DateTime.now().millisecondsSinceEpoch == 0) { + return confuse(x - 1); + } + return x; +} + +test1() { + int x = 0; + // Give x a range of -1 to 0. + if (confuse(0) == 1) x = -1; + + int y = 0; + // Give y a range of 0 to 1. + if (confuse(0) == 1) y = 1; + + var zero = 0; + + var status = "bad"; + if (x < zero) { + Expect.fail("unreachable"); + } else { + // Dart2js must not conclude that zero has a range of [-1, 0]. + if (y <= zero) { + status = "good"; + } + } + Expect.equals("good", status); +} + +test2() { + int x = 0; + // Give x a range of -1 to 0. + if (confuse(0) == 1) x = -1; + + int y = 0; + // Give y a range of -1 to 1. + if (confuse(0) == 1) y = 1; + if (confuse(1) == 2) y = -1; + + var status = "good"; + if (x < y) { + Expect.fail("unreachable"); + } else { + // Dart2js must not conclude that y has a range of [-1, -1]. + if (y == -1) { + status = "bad"; + } + } + Expect.equals("good", status); +} + +test3a() { + int x = 0; + // Give x a range of -1 to 1. + if (confuse(0) == 1) x = -1; + if (confuse(1) == 2) x = 1; + + int y = 0; + // Give y a range of -1 to 1. + if (confuse(0) == 1) y = 1; + if (confuse(1) == 2) y = -1; + + var status = "good"; + if (x < y) { + Expect.fail("unreachable"); + } else { + // Test that the range-analysis does not lose a value. + if (x <= -1) status = "bad"; + if (x >= 1) status = "bad"; + if (x < 0) status = "bad"; + if (x > 0) status = "bad"; + if (-1 >= x) status = "bad"; + if (1 <= x) status = "bad"; + if (0 > x) status = "bad"; + if (0 < x) status = "bad"; + if (y <= -1) status = "bad"; + if (y >= 1) status = "bad"; + if (y < 0) status = "bad"; + if (y > 0) status = "bad"; + if (-1 >= y) status = "bad"; + if (1 <= y) status = "bad"; + if (0 > y) status = "bad"; + if (0 < y) status = "bad"; + } + Expect.equals("good", status); +} + +test3b() { + int x = 0; + // Give x a range of -2 to 0. + if (confuse(0) == 1) x = -2; + + int y = 0; + // Give y a range of -1 to 1. + if (confuse(0) == 1) y = 1; + if (confuse(1) == 2) y = -1; + + var status = "good"; + if (x < y) { + Expect.fail("unreachable"); + } else { + // Test that the range-analysis does not lose a value. + if (x <= -1) status = "bad"; + if (x >= 1) status = "bad"; + if (x < 0) status = "bad"; + if (x > 0) status = "bad"; + if (-1 >= x) status = "bad"; + if (1 <= x) status = "bad"; + if (0 > x) status = "bad"; + if (0 < x) status = "bad"; + if (y <= -1) status = "bad"; + if (y >= 1) status = "bad"; + if (y < 0) status = "bad"; + if (y > 0) status = "bad"; + if (-1 >= y) status = "bad"; + if (1 <= y) status = "bad"; + if (0 > y) status = "bad"; + if (0 < y) status = "bad"; + } + Expect.equals("good", status); +} + +test4a() { + int x = -1; + // Give x a range of -1 to 1. + if (confuse(0) == 1) x = 1; + + int y = 0; + // Give y a range of -1 to 1. + if (confuse(0) == 1) y = 1; + if (confuse(1) == 2) y = -1; + + var status = "good"; + if (x < y) { + // Test that the range-analysis does not lose a value. + if (x <= -2) status = "bad"; + if (x >= 0) status = "bad"; + if (x < -1) status = "bad"; + if (x > -1) status = "bad"; + if (-2 >= x) status = "bad"; + if (0 <= x) status = "bad"; + if (-1 > x) status = "bad"; + if (-1 < x) status = "bad"; + if (y <= -1) status = "bad"; + if (y >= 1) status = "bad"; + if (y < 0) status = "bad"; + if (y > 0) status = "bad"; + if (-1 >= y) status = "bad"; + if (1 <= y) status = "bad"; + if (0 > y) status = "bad"; + if (0 < y) status = "bad"; + } else { + Expect.fail("unreachable"); + } + Expect.equals("good", status); +} + +test4b() { + int x = -1; + // Give x a range of -2 to 0. + if (confuse(0) == 1) x = -2; + if (confuse(1) == 2) x = 0; + + int y = 0; + // Give y a range of -1 to 1. + if (confuse(0) == 1) y = 1; + if (confuse(1) == 2) y = -1; + + var status = "good"; + if (x < y) { + // Test that the range-analysis does not lose a value. + if (x <= -2) status = "bad"; + if (x >= 0) status = "bad"; + if (x < -1) status = "bad"; + if (x > -1) status = "bad"; + if (-2 >= x) status = "bad"; + if (0 <= x) status = "bad"; + if (-1 > x) status = "bad"; + if (-1 < x) status = "bad"; + if (y <= -1) status = "bad"; + if (y >= 1) status = "bad"; + if (y < 0) status = "bad"; + if (y > 0) status = "bad"; + if (-1 >= y) status = "bad"; + if (1 <= y) status = "bad"; + if (0 > y) status = "bad"; + if (0 < y) status = "bad"; + } else { + Expect.fail("unreachable"); + } + Expect.equals("good", status); +} + +main() { + test1(); + test2(); + test3a(); + test3b(); + test4a(); + test4b(); +} diff --git a/tests/language/unsorted/range_analysis_test.dart b/tests/language/unsorted/range_analysis_test.dart new file mode 100644 index 000000000000..c07b2bf817f9 --- /dev/null +++ b/tests/language/unsorted/range_analysis_test.dart @@ -0,0 +1,118 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test program for constructors and initializers. +// VMOptions=--optimization-counter-threshold=10 --no-use-osr + +import "package:expect/expect.dart"; + +// Check that range analysis does not enter infinite loop trying to propagate +// ranges through dependant phis. +bar() { + var sum = 0; + for (var i = 0; i < 10; i++) { + for (var j = i - 1; j >= 0; j--) { + for (var k = j; k < i; k++) { + sum += (i + j + k); + } + } + } + return sum; +} + +test1() { + for (var i = 0; i < 20; i++) bar(); +} + +// Check that range analysis does not erroneously remove overflow check. +test2() { + var width = 1073741823; + Expect.equals(width - 1, foo(width - 5000, width - 1)); + Expect.equals(width, foo(width - 5000, width)); +} + +foo(n, w) { + var x = 0; + for (var i = n; i <= w; i++) { + Expect.isTrue(i > 0); + x = i; + } + return x; +} + +// Test detection of unsatisfiable constraints. +f(a, b) { + if (a < b) { + if (a > b) { + throw "unreachable"; + } + return 2; + } + return 3; +} + +f1(a, b) { + if (a < b) { + if (a > b - 1) { + throw "unreachable"; + } + return 2; + } + return 3; +} + +f2(a, b) { + if (a < b) { + if (a > b - 2) { + return 2; + } + throw "unreachable"; + } + return 3; +} + +g() { + var i; + for (i = 0; i < 10; i++) { + if (i < 0) throw "unreachable"; + } + return i; +} + +h(n) { + var i; + for (i = 0; i < n; i++) { + if (i < 0) throw "unreachable"; + var j = i - 1; + if (j >= n - 1) throw "unreachable"; + } + return i; +} + +test3() { + test_fun(fun) { + Expect.equals(2, fun(0, 1)); + Expect.equals(3, fun(0, 0)); + for (var i = 0; i < 20; i++) fun(0, 1); + Expect.equals(2, fun(0, 1)); + Expect.equals(3, fun(0, 0)); + } + + test_fun(f); + test_fun(f1); + test_fun(f2); + + Expect.equals(10, g()); + for (var i = 0; i < 20; i++) g(); + Expect.equals(10, g()); + + Expect.equals(10, h(10)); + for (var i = 0; i < 20; i++) h(10); + Expect.equals(10, h(10)); +} + +main() { + test1(); + test2(); + test3(); +} diff --git a/tests/language/unsorted/recursive_calls_test.dart b/tests/language/unsorted/recursive_calls_test.dart new file mode 100644 index 000000000000..21bc53d914c3 --- /dev/null +++ b/tests/language/unsorted/recursive_calls_test.dart @@ -0,0 +1,12 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +int bar(x) => foo(x + 1); +int foo(x) => x > 9 ? x : bar(x); + +main() { + Expect.equals(foo(int.parse("1")), 10); +} diff --git a/tests/language/unsorted/recursive_loop_phis_test.dart b/tests/language/unsorted/recursive_loop_phis_test.dart new file mode 100644 index 000000000000..f01aa0abf600 --- /dev/null +++ b/tests/language/unsorted/recursive_loop_phis_test.dart @@ -0,0 +1,22 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +// This program tripped dart2js. + +foo(bool b) { + var x = 499; + // If the loop-phi is not declared it will assign to a global and the + // recursive call will screw up the methods "local" state. + for (int i = 0; i < 3; i++) { + if (i == 0 && b) x = 42; + if (!b) foo(true); + } + return x; +} + +main() { + Expect.equals(499, foo(false)); +} diff --git a/tests/language/unsorted/refine_receiver_null_test.dart b/tests/language/unsorted/refine_receiver_null_test.dart new file mode 100644 index 000000000000..499e99839bad --- /dev/null +++ b/tests/language/unsorted/refine_receiver_null_test.dart @@ -0,0 +1,22 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Regression test for dart2js that used to infer that code following +// a dynamic call could assume the receiver is not null. This does not +// work for Object methods. + +import "package:expect/expect.dart"; +import "../compiler_annotations.dart"; + +main() { + var a = true ? null : 42; + a.toString(); + foo(a); +} + +@DontInline() +foo(a) { + var f = () => 42; + Expect.throwsNoSuchMethodError(() => a + 42); +} diff --git a/tests/language/unsorted/savannah_test.dart b/tests/language/unsorted/savannah_test.dart new file mode 100644 index 000000000000..7b2b8eff2405 --- /dev/null +++ b/tests/language/unsorted/savannah_test.dart @@ -0,0 +1,76 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart test using an identity hash. + +import "package:expect/expect.dart"; + +abstract class BigGame { + String get name; +} + +// Giraffe overrides hashCode and provides its own identity hash. +class Giraffe implements BigGame { + final String name; + final int identityHash_; + + Giraffe(this.name) : identityHash_ = nextId() {} + + int get hashCode { + return identityHash_; + } + + // Calculate identity hash for a giraffe. + static int nextId_ = 17; + static int nextId() { + return nextId_++; + } +} + +// Zebra relies on the system provided identity hash. +class Zebra implements BigGame { + final String name; + Zebra(this.name) {} +} + +class SavannahTest { + static void testMain() { + Map savannah = new Map(); + + Giraffe giraffe1 = new Giraffe("Tony"); + Giraffe giraffe2 = new Giraffe("Rose"); + savannah[giraffe1] = giraffe1.name; + savannah[giraffe2] = giraffe2.name; + print("giraffe1 hash: ${giraffe1.hashCode}"); + print("giraffe2 hash: ${giraffe2.hashCode}"); + + var count = savannah.length; + print("getCount is $count"); + Expect.equals(2, count); + + print("giraffe1: ${savannah[giraffe1]}"); + print("giraffe2: ${savannah[giraffe2]}"); + Expect.equals("Tony", savannah[giraffe1]); + Expect.equals("Rose", savannah[giraffe2]); + + Zebra zebra1 = new Zebra("Paolo"); + Zebra zebra2 = new Zebra("Zeeta"); + savannah[zebra1] = zebra1.name; + savannah[zebra2] = zebra2.name; + print("zebra1 hash: ${zebra1.hashCode}"); + print("zebra2 hash: ${zebra2.hashCode}"); + + count = savannah.length; + print("getCount is $count"); + Expect.equals(4, count); + + print("zebra1: ${savannah[zebra1]}"); + print("zebra2: ${savannah[zebra2]}"); + Expect.equals("Paolo", savannah[zebra1]); + Expect.equals("Zeeta", savannah[zebra2]); + } +} + +main() { + SavannahTest.testMain(); +} diff --git a/tests/language/unsorted/scanner_test.dart b/tests/language/unsorted/scanner_test.dart new file mode 100644 index 000000000000..01ee0480090c --- /dev/null +++ b/tests/language/unsorted/scanner_test.dart @@ -0,0 +1,15 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Test dart scanner. + +class ScannerTest { + static testMain() { + var s = "Hello\tmy\tfriend\n"; + return s; + } +} + +main() { + ScannerTest.testMain(); +} diff --git a/tests/language/unsorted/second_test.dart b/tests/language/unsorted/second_test.dart new file mode 100644 index 000000000000..0cdd2a760448 --- /dev/null +++ b/tests/language/unsorted/second_test.dart @@ -0,0 +1,24 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Second dart test program. + +import "package:expect/expect.dart"; + +class Helper { + static empty() {} + static int foo() { + return 42; + } +} + +class SecondTest { + static testMain() { + Helper.empty(); + Expect.equals(42, Helper.foo()); + } +} + +main() { + SecondTest.testMain(); +} diff --git a/tests/language/unsorted/shadow_parameter_and_local_test.dart b/tests/language/unsorted/shadow_parameter_and_local_test.dart new file mode 100644 index 000000000000..6082f59a46d4 --- /dev/null +++ b/tests/language/unsorted/shadow_parameter_and_local_test.dart @@ -0,0 +1,134 @@ +// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +// Regression test for https://github.com/dart-lang/sdk/issues/29733 in DDC. +foo(a) { + var a = 123; + return a; +} + +// Regression test for https://github.com/dart-lang/sdk/issues/30792 in DDC. +bar(a) async { + var a = 123; + return a; +} + +baz(a) sync* { + var a = 123; + yield a; +} + +qux(a) async* { + var a = 123; + yield a; +} + +// Regression test for https://github.com/dart-lang/sdk/issues/32140 +class C { + var x, y, localY, _value; + + C(a) { + var a = 123; + this.x = a; + } + + C.initY(this.y) { + var y = 123; + this.localY = y; + } + + method(a) { + var a = 123; + return a; + } + + mOptional([a = 0]) { + var a = 123; + return a; + } + + mNamed({a = 0}) { + var a = 123; + return a; + } + + mAsync({a: 0}) async { + var a = 123; + return a; + } + + mSyncStar({a: 0}) sync* { + var a = 123; + yield a; + } + + mAsyncStar({a: 0}) async* { + var a = 123; + yield a; + } + + get accessor => _value; + set accessor(a) { + var a = 123; + this._value = a; + } +} + +testCatch() { + try { + throw 'oops'; + } catch (e) { + var e = 123; + return e; + } +} + +testStackTrace() { + try { + throw 'oops'; + } catch (e, s) { + var s = 123; + return s; + } +} + +main() async { + Expect.equals(123, foo(42)); + Expect.equals(123, await bar(42)); + Expect.equals(123, baz(42).single); + Expect.equals(123, await qux(42).single); + + await testClass(); + + Expect.equals(123, testCatch()); + Expect.equals(123, testStackTrace()); +} + +testClass() async { + var c = new C('hi'); + Expect.equals(123, c.x); + Expect.equals(123, c.method(42)); + c.accessor = 42; + Expect.equals(123, c.accessor); + c = new C.initY(42); + Expect.equals(42, c.y); + Expect.equals(123, c.localY); + + Expect.equals(123, c.mOptional()); + Expect.equals(123, c.mOptional(42)); + + Expect.equals(123, c.mNamed()); + Expect.equals(123, c.mNamed(a: 42)); + + Expect.equals(123, await c.mAsync()); + + var iter = c.mSyncStar(); + Expect.listEquals([123], iter.toList()); + Expect.listEquals([123], iter.toList(), 'second iteration yields same value'); + + var stream = c.mAsyncStar(); + Expect.listEquals([123], await stream.toList()); +} diff --git a/tests/language/unsorted/side_effect_throw_test.dart b/tests/language/unsorted/side_effect_throw_test.dart new file mode 100644 index 000000000000..484b76226f0d --- /dev/null +++ b/tests/language/unsorted/side_effect_throw_test.dart @@ -0,0 +1,28 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +class B { + static var x; + operator <<(other) { + x = other; + return 33; + } +} + +class A { + get _m => new B(); + opshl(n) { + // 'n' must be a number, but we are not allowed to throw before we have + // evaluated _m << 499. + return (_m << 499) | (2 - n); + } +} + +main() { + var a = new A(); + Expect.throws(() => a.opshl("string")); + Expect.equals(499, B.x); +} diff --git a/tests/language/unsorted/smaller_4_Interface_Types_A11_t01_test.dart b/tests/language/unsorted/smaller_4_Interface_Types_A11_t01_test.dart new file mode 100644 index 000000000000..281315e0e103 --- /dev/null +++ b/tests/language/unsorted/smaller_4_Interface_Types_A11_t01_test.dart @@ -0,0 +1,269 @@ +/* + * Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +// This is a small version of the co19 test +// Language/14_Types/4_Interface_Types_A11_t01. + +import 'package:expect/expect.dart'; + +class C {} + +main() { + Expect.isTrue(new C126() is C); + Expect.isTrue(new C126() is Object); +} + +class C1 extends C {} + +class C2 extends C1 {} + +class C3 extends C2 {} + +class C4 extends C3 {} + +class C5 extends C4 {} + +class C6 extends C5 {} + +class C7 extends C6 {} + +class C8 extends C7 {} + +class C9 extends C8 {} + +class C10 extends C9 {} + +class C11 extends C10 {} + +class C12 extends C11 {} + +class C13 extends C12 {} + +class C14 extends C13 {} + +class C15 extends C14 {} + +class C16 extends C15 {} + +class C17 extends C16 {} + +class C18 extends C17 {} + +class C19 extends C18 {} + +class C20 extends C19 {} + +class C21 extends C20 {} + +class C22 extends C21 {} + +class C23 extends C22 {} + +class C24 extends C23 {} + +class C25 extends C24 {} + +class C26 extends C25 {} + +class C27 extends C26 {} + +class C28 extends C27 {} + +class C29 extends C28 {} + +class C30 extends C29 {} + +class C31 extends C30 {} + +class C32 extends C31 {} + +class C33 extends C32 {} + +class C34 extends C33 {} + +class C35 extends C34 {} + +class C36 extends C35 {} + +class C37 extends C36 {} + +class C38 extends C37 {} + +class C39 extends C38 {} + +class C40 extends C39 {} + +class C41 extends C40 {} + +class C42 extends C41 {} + +class C43 extends C42 {} + +class C44 extends C43 {} + +class C45 extends C44 {} + +class C46 extends C45 {} + +class C47 extends C46 {} + +class C48 extends C47 {} + +class C49 extends C48 {} + +class C50 extends C49 {} + +class C51 extends C50 {} + +class C52 extends C51 {} + +class C53 extends C52 {} + +class C54 extends C53 {} + +class C55 extends C54 {} + +class C56 extends C55 {} + +class C57 extends C56 {} + +class C58 extends C57 {} + +class C59 extends C58 {} + +class C60 extends C59 {} + +class C61 extends C60 {} + +class C62 extends C61 {} + +class C63 extends C62 {} + +class C64 extends C63 {} + +class C65 extends C64 {} + +class C66 extends C65 {} + +class C67 extends C66 {} + +class C68 extends C67 {} + +class C69 extends C68 {} + +class C70 extends C69 {} + +class C71 extends C70 {} + +class C72 extends C71 {} + +class C73 extends C72 {} + +class C74 extends C73 {} + +class C75 extends C74 {} + +class C76 extends C75 {} + +class C77 extends C76 {} + +class C78 extends C77 {} + +class C79 extends C78 {} + +class C80 extends C79 {} + +class C81 extends C80 {} + +class C82 extends C81 {} + +class C83 extends C82 {} + +class C84 extends C83 {} + +class C85 extends C84 {} + +class C86 extends C85 {} + +class C87 extends C86 {} + +class C88 extends C87 {} + +class C89 extends C88 {} + +class C90 extends C89 {} + +class C91 extends C90 {} + +class C92 extends C91 {} + +class C93 extends C92 {} + +class C94 extends C93 {} + +class C95 extends C94 {} + +class C96 extends C95 {} + +class C97 extends C96 {} + +class C98 extends C97 {} + +class C99 extends C98 {} + +class C100 extends C99 {} + +class C101 extends C100 {} + +class C102 extends C101 {} + +class C103 extends C102 {} + +class C104 extends C103 {} + +class C105 extends C104 {} + +class C106 extends C105 {} + +class C107 extends C106 {} + +class C108 extends C107 {} + +class C109 extends C108 {} + +class C110 extends C109 {} + +class C111 extends C110 {} + +class C112 extends C111 {} + +class C113 extends C112 {} + +class C114 extends C113 {} + +class C115 extends C114 {} + +class C116 extends C115 {} + +class C117 extends C116 {} + +class C118 extends C117 {} + +class C119 extends C118 {} + +class C120 extends C119 {} + +class C121 extends C120 {} + +class C122 extends C121 {} + +class C123 extends C122 {} + +class C124 extends C123 {} + +class C125 extends C124 {} + +class C126 extends C125 {} diff --git a/tests/language/unsorted/smaller_4_Interface_Types_A11_t02_test.dart b/tests/language/unsorted/smaller_4_Interface_Types_A11_t02_test.dart new file mode 100644 index 000000000000..db2ecca52396 --- /dev/null +++ b/tests/language/unsorted/smaller_4_Interface_Types_A11_t02_test.dart @@ -0,0 +1,270 @@ +/* + * Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +// This is a small version of the co19 test +// Language/14_Types/4_Interface_Types_A11_t02. + +import 'package:expect/expect.dart'; + +class C {} + +class G {} + +main() { + Expect.isTrue(new G() is G); +} + +class C1 extends C {} + +class C2 extends C1 {} + +class C3 extends C2 {} + +class C4 extends C3 {} + +class C5 extends C4 {} + +class C6 extends C5 {} + +class C7 extends C6 {} + +class C8 extends C7 {} + +class C9 extends C8 {} + +class C10 extends C9 {} + +class C11 extends C10 {} + +class C12 extends C11 {} + +class C13 extends C12 {} + +class C14 extends C13 {} + +class C15 extends C14 {} + +class C16 extends C15 {} + +class C17 extends C16 {} + +class C18 extends C17 {} + +class C19 extends C18 {} + +class C20 extends C19 {} + +class C21 extends C20 {} + +class C22 extends C21 {} + +class C23 extends C22 {} + +class C24 extends C23 {} + +class C25 extends C24 {} + +class C26 extends C25 {} + +class C27 extends C26 {} + +class C28 extends C27 {} + +class C29 extends C28 {} + +class C30 extends C29 {} + +class C31 extends C30 {} + +class C32 extends C31 {} + +class C33 extends C32 {} + +class C34 extends C33 {} + +class C35 extends C34 {} + +class C36 extends C35 {} + +class C37 extends C36 {} + +class C38 extends C37 {} + +class C39 extends C38 {} + +class C40 extends C39 {} + +class C41 extends C40 {} + +class C42 extends C41 {} + +class C43 extends C42 {} + +class C44 extends C43 {} + +class C45 extends C44 {} + +class C46 extends C45 {} + +class C47 extends C46 {} + +class C48 extends C47 {} + +class C49 extends C48 {} + +class C50 extends C49 {} + +class C51 extends C50 {} + +class C52 extends C51 {} + +class C53 extends C52 {} + +class C54 extends C53 {} + +class C55 extends C54 {} + +class C56 extends C55 {} + +class C57 extends C56 {} + +class C58 extends C57 {} + +class C59 extends C58 {} + +class C60 extends C59 {} + +class C61 extends C60 {} + +class C62 extends C61 {} + +class C63 extends C62 {} + +class C64 extends C63 {} + +class C65 extends C64 {} + +class C66 extends C65 {} + +class C67 extends C66 {} + +class C68 extends C67 {} + +class C69 extends C68 {} + +class C70 extends C69 {} + +class C71 extends C70 {} + +class C72 extends C71 {} + +class C73 extends C72 {} + +class C74 extends C73 {} + +class C75 extends C74 {} + +class C76 extends C75 {} + +class C77 extends C76 {} + +class C78 extends C77 {} + +class C79 extends C78 {} + +class C80 extends C79 {} + +class C81 extends C80 {} + +class C82 extends C81 {} + +class C83 extends C82 {} + +class C84 extends C83 {} + +class C85 extends C84 {} + +class C86 extends C85 {} + +class C87 extends C86 {} + +class C88 extends C87 {} + +class C89 extends C88 {} + +class C90 extends C89 {} + +class C91 extends C90 {} + +class C92 extends C91 {} + +class C93 extends C92 {} + +class C94 extends C93 {} + +class C95 extends C94 {} + +class C96 extends C95 {} + +class C97 extends C96 {} + +class C98 extends C97 {} + +class C99 extends C98 {} + +class C100 extends C99 {} + +class C101 extends C100 {} + +class C102 extends C101 {} + +class C103 extends C102 {} + +class C104 extends C103 {} + +class C105 extends C104 {} + +class C106 extends C105 {} + +class C107 extends C106 {} + +class C108 extends C107 {} + +class C109 extends C108 {} + +class C110 extends C109 {} + +class C111 extends C110 {} + +class C112 extends C111 {} + +class C113 extends C112 {} + +class C114 extends C113 {} + +class C115 extends C114 {} + +class C116 extends C115 {} + +class C117 extends C116 {} + +class C118 extends C117 {} + +class C119 extends C118 {} + +class C120 extends C119 {} + +class C121 extends C120 {} + +class C122 extends C121 {} + +class C123 extends C122 {} + +class C124 extends C123 {} + +class C125 extends C124 {} + +class C126 extends C125 {} diff --git a/tests/language/unsorted/stack_overflow_stacktrace_test.dart b/tests/language/unsorted/stack_overflow_stacktrace_test.dart new file mode 100644 index 000000000000..6e544771ab4b --- /dev/null +++ b/tests/language/unsorted/stack_overflow_stacktrace_test.dart @@ -0,0 +1,28 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart program testing stack overflow. + +import "package:expect/expect.dart"; + +class StackOverflowTest { + static void curseTheRecurse(a, b, c) { + curseTheRecurse(b, c, a); + } + + static void testMain() { + bool exceptionCaught = false; + try { + curseTheRecurse(1, 2, 3); + } on StackOverflowError catch (e, stacktrace) { + String s = stacktrace.toString(); + Expect.equals(-1, s.indexOf("-1:-1")); + exceptionCaught = true; + } + Expect.equals(true, exceptionCaught); + } +} + +main() { + StackOverflowTest.testMain(); +} diff --git a/tests/language/unsorted/stack_overflow_test.dart b/tests/language/unsorted/stack_overflow_test.dart new file mode 100644 index 000000000000..bd87a256b58d --- /dev/null +++ b/tests/language/unsorted/stack_overflow_test.dart @@ -0,0 +1,26 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Dart program testing stack overflow. + +import "package:expect/expect.dart"; + +class StackOverflowTest { + static void curseTheRecurse(a, b, c) { + curseTheRecurse(b, c, a); + } + + static void testMain() { + bool exceptionCaught = false; + try { + curseTheRecurse(1, 2, 3); + } on StackOverflowError catch (e) { + exceptionCaught = true; + } + Expect.equals(true, exceptionCaught); + } +} + +main() { + StackOverflowTest.testMain(); +} diff --git a/tests/language/unsorted/state_mangling2_test.dart b/tests/language/unsorted/state_mangling2_test.dart new file mode 100644 index 000000000000..53a7677a7fbb --- /dev/null +++ b/tests/language/unsorted/state_mangling2_test.dart @@ -0,0 +1,38 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +foo(state) { + if (state == null) return 0; + var sum = 0; + state = inscrutableId(state); + for (int i = 0; i < state.length; i++) { + sum += state[i] as int; + } + state = inscrutableId(state); + for (int i = 0; i < state.length; i++) { + sum += state[i] as int; + } + return sum; +} + +int inscrutable(int x) => x == 0 ? 0 : x | inscrutable(x & (x - 1)); + +inscrutableId(x) { + if (x == 0) return inscrutable(x); + return (3 == inscrutable(3)) ? x : false; +} + +class A { + int length = 3; + operator [](i) => 1; +} + +main() { + Expect.equals(12, foo([1, 2, 3])); + if (inscrutableId(0) == 0) { + Expect.equals(6, foo(new A())); + } +} diff --git a/tests/language/unsorted/state_mangling3_test.dart b/tests/language/unsorted/state_mangling3_test.dart new file mode 100644 index 000000000000..6db531658338 --- /dev/null +++ b/tests/language/unsorted/state_mangling3_test.dart @@ -0,0 +1,37 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +foo(state0) { + if (state0 == null) return 0; + var sum = 0; + for (int i = 0; i < state0.length; i++) { + sum += state0[i] as int; + } + state0 = inscrutableId(state0); + for (int i = 0; i < state0.length; i++) { + sum += state0[i] as int; + } + return sum; +} + +int inscrutable(int x) => x == 0 ? 0 : x | inscrutable(x & (x - 1)); + +inscrutableId(x) { + if (x == 0) return inscrutable(x); + return (3 == inscrutable(3)) ? x : false; +} + +class A { + int length = 3; + operator [](i) => 1; +} + +main() { + Expect.equals(12, foo([1, 2, 3])); + if (inscrutableId(0) == 0) { + Expect.equals(6, foo(new A())); + } +} diff --git a/tests/language/unsorted/state_mangling4_test.dart b/tests/language/unsorted/state_mangling4_test.dart new file mode 100644 index 000000000000..ff30b226789b --- /dev/null +++ b/tests/language/unsorted/state_mangling4_test.dart @@ -0,0 +1,37 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +foo(env1) { + if (env1 == null) return 0; + var env0 = 0; + for (int i = 0; i < env1.length; i++) { + env0 += env1[i] as int; + } + env1 = inscrutableId(new A()); + for (int i = 0; i < env1.length; i++) { + env0 += env1[i] as int; + } + return env0; +} + +int inscrutable(int x) => x == 0 ? 0 : x | inscrutable(x & (x - 1)); + +inscrutableId(x) { + if (x == 0) return inscrutable(x); + return (3 == inscrutable(3)) ? x : false; +} + +class A { + int length = 3; + operator [](i) => 1; +} + +main() { + Expect.equals(9, foo([1, 2, 3])); + if (inscrutableId(0) == 0) { + Expect.equals(6, foo(new A())); + } +} diff --git a/tests/language/unsorted/state_mangling_test.dart b/tests/language/unsorted/state_mangling_test.dart new file mode 100644 index 000000000000..c63f615e49bd --- /dev/null +++ b/tests/language/unsorted/state_mangling_test.dart @@ -0,0 +1,37 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +foo(state) { + if (state == null) return 0; + var sum = 0; + for (int i = 0; i < state.length; i++) { + sum += state[i] as int; + } + state = inscrutableId(state); + for (int i = 0; i < state.length; i++) { + sum += state[i] as int; + } + return sum; +} + +int inscrutable(int x) => x == 0 ? 0 : x | inscrutable(x & (x - 1)); + +inscrutableId(x) { + if (x == 0) return inscrutable(x); + return (3 == inscrutable(3)) ? x : false; +} + +class A { + int length = 3; + operator [](i) => 1; +} + +main() { + Expect.equals(12, foo([1, 2, 3])); + if (inscrutableId(0) == 0) { + Expect.equals(6, foo(new A())); + } +} diff --git a/tests/language/unsorted/temp_mangling_test.dart b/tests/language/unsorted/temp_mangling_test.dart new file mode 100644 index 000000000000..bbe8e4adb4be --- /dev/null +++ b/tests/language/unsorted/temp_mangling_test.dart @@ -0,0 +1,33 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +main() { + testOne(); + testTwo(); +} + +testOne() { + // Dart2JS uses t[0-9]* to declare temporaries, so a local variable + // with that pattern can conflict with them. + var t0 = []; + // By using 'is' check, we make sure 't0.length' does not become + // generate at use site. + Expect.isTrue(t0.length is int); + Expect.isTrue(t0 is List); +} + +testTwo() { + var x = []; + var x_0 = []; + { + // This used to introduce x_0. + var x = new Set(); + Expect.equals(0, x.length); + Expect.isTrue(x.isEmpty); + } + Expect.isTrue(x is List); + Expect.isTrue(x_0 is List); +} diff --git a/tests/language/unsorted/third_test.dart b/tests/language/unsorted/third_test.dart new file mode 100644 index 000000000000..3df66d3715c1 --- /dev/null +++ b/tests/language/unsorted/third_test.dart @@ -0,0 +1,54 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Third dart test program. + +import "package:expect/expect.dart"; + +class A extends B { + var a; + static var s; + + static foo() { + return s; + } + + A(x, y) + : a = x, + super(y) {} + + value() { + return a + b + foo(); + } +} + +class B { + var b; + static var s; + + static foo(x) { + return x + s; + } + + value() { + return b + foo(s) + A.foo(); + } + + B(x) : b = x { + b = b + 1; + } +} + +class ThirdTest { + static testMain() { + var a = new A(1, 2); + var b = new B(3); + A.s = 4; + B.s = 5; + Expect.equals(26, a.value() + b.value()); + } +} + +main() { + ThirdTest.testMain(); +} diff --git a/tests/language/unsorted/tree_shake_typed_selector_test.dart b/tests/language/unsorted/tree_shake_typed_selector_test.dart new file mode 100644 index 000000000000..480c846b996a --- /dev/null +++ b/tests/language/unsorted/tree_shake_typed_selector_test.dart @@ -0,0 +1,25 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Check that dart2js emits code for classes that implement another +// class. + +import "package:expect/expect.dart"; + +class A { + factory A() => new B(); + foo() => 0; +} + +class B implements A { + foo() => 42; +} + +main() { + var a = new A(); + if (a is A) { + Expect.equals(42, a.foo()); + } else { + Expect.fail('Should not be here'); + } +} diff --git a/tests/language/unsorted/typecheck_multifield_declaration_test.dart b/tests/language/unsorted/typecheck_multifield_declaration_test.dart new file mode 100644 index 000000000000..ccccf6ff0237 --- /dev/null +++ b/tests/language/unsorted/typecheck_multifield_declaration_test.dart @@ -0,0 +1,16 @@ +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +/// Checks that we can correctly typecheck multi-variable declarations on fields +/// and top-levels. This is also a regression test for Issue 27401. + +class A {} + +A a = new A(), b = new A(); + +class B { + A a = new A(), b = new A(); +} + +main() => [a, b, new B().a, new B().b]; diff --git a/tests/language/unsorted/typed_equality_test.dart b/tests/language/unsorted/typed_equality_test.dart new file mode 100644 index 000000000000..9f48e7910b61 --- /dev/null +++ b/tests/language/unsorted/typed_equality_test.dart @@ -0,0 +1,21 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Regression test for http://dartbug.com/6036. dart2js used to fail +// this method because it was computing that intersecting type D with +// type C is conflicting. + +foo(a, b) { + if (identical(a, b)) return; + throw 'broken'; +} + +class D {} + +class C implements D {} + +main() { + var c = new C(); + foo(c, c as D); +} diff --git a/tests/language/unsorted/typed_selector2_test.dart b/tests/language/unsorted/typed_selector2_test.dart new file mode 100644 index 000000000000..db1cc3076d3f --- /dev/null +++ b/tests/language/unsorted/typed_selector2_test.dart @@ -0,0 +1,22 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Test for dart2js to handle a typed selector with a typedef as a +// receiver type. + +getComparator() => (a, b) => 42; + +class A { + foo() => 42; +} + +main() { + Comparator a = getComparator(); + if (a(1, 2) != 42) { + // This call used to crash dart2js because 'foo' was a typed + // selector with a typedef as a receiver type. + a.foo(); /*@compile-error=unspecified*/ + } + var b = new A(); + b.foo(); +} diff --git a/tests/language/unsorted/typed_selector_test.dart b/tests/language/unsorted/typed_selector_test.dart new file mode 100644 index 000000000000..98c2d0892f42 --- /dev/null +++ b/tests/language/unsorted/typed_selector_test.dart @@ -0,0 +1,30 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +// Regression test for http://dartbug.com/6259. This test used to fail +// on dart2js because class A does not know [A.document] is a target for +// the call [:obj.document:] in the [main] method. Therefore, dart2js +// would not compile [A.document]. + +class A { + get document => 42; +} + +abstract class B { + get document; // Abstract. +} + +class C extends A implements B {} + +int inscrutable(int x) => x == 0 ? 0 : x | inscrutable(x & (x - 1)); + +void main() { + var tab = [new Object(), new C()]; + var obj = tab[inscrutable(1)]; + int res = 0; + if (obj is B) res = obj.document; + Expect.equals(42, res); +} diff --git a/tests/language/unsorted/unevaluated_field.dart b/tests/language/unsorted/unevaluated_field.dart new file mode 100644 index 000000000000..5c701db09472 --- /dev/null +++ b/tests/language/unsorted/unevaluated_field.dart @@ -0,0 +1,23 @@ +// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Test that environment constants in field initializers work properly. + +import "package:expect/expect.dart"; + +const int gx = + const bool.hasEnvironment("x") ? const int.fromEnvironment("x") : null; + +class A { + final int x = gx; + final int y = + const bool.hasEnvironment("y") ? const int.fromEnvironment("y") : null; + const A(); +} + +main() { + const a = const A(); + Expect.isTrue(a.x == null || a.x != null); + Expect.isTrue(a.y == null || a.y != null); +} diff --git a/tests/language/unsorted/unused_overridden_async_test.dart b/tests/language/unsorted/unused_overridden_async_test.dart new file mode 100644 index 000000000000..da7aa72b9cb1 --- /dev/null +++ b/tests/language/unsorted/unused_overridden_async_test.dart @@ -0,0 +1,31 @@ +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +import 'dart:async'; + +class Base { + Future method() async { + throw 'Should be unused'; + } +} + +class Sub1 extends Base { + Future method() async { + return 1; + } +} + +class Sub2 extends Base { + Future method() async { + return 2; + } +} + +help(Base object) async { + print(await object.method()); +} + +main() async { + await help(new Sub1()); + await help(new Sub2()); +} diff --git a/tests/language/unsorted/value_range2_test.dart b/tests/language/unsorted/value_range2_test.dart new file mode 100644 index 000000000000..ac0a99d07f9c --- /dev/null +++ b/tests/language/unsorted/value_range2_test.dart @@ -0,0 +1,22 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +int inscrutable(int x) => x == 0 ? 0 : x | inscrutable(x & (x - 1)); + +foo() { + int x = 0; + if (inscrutable(0) == 0) x = -2; // x is now in range [-2 .. 0]. + int y = 2; + if (inscrutable(0) == 0) y = 4; // y is now in range [2 .. 4]. + int i = y - x; // i should be in range [2 .. 6]. + i -= 4; // i should be in range [-2 .. 2]. Actual value: 2. + var a = const [1]; + return a[i]; +} + +main() { + Expect.throwsRangeError(() => foo()); +} diff --git a/tests/language/unsorted/value_range3_test.dart b/tests/language/unsorted/value_range3_test.dart new file mode 100644 index 000000000000..a7f05f17327c --- /dev/null +++ b/tests/language/unsorted/value_range3_test.dart @@ -0,0 +1,18 @@ +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:expect/expect.dart'; + +class A { + copy(array, index1, index2) { + if (index1 < index2 + index2) { + // dart2js used to remove the bounds check. + return array[index1]; + } + } +} + +main() { + Expect.throwsRangeError(() => new A().copy(new List.empty(), 0, 1)); +} diff --git a/tests/language/unsorted/value_range_test.dart b/tests/language/unsorted/value_range_test.dart new file mode 100644 index 000000000000..83fcc9f0b2af --- /dev/null +++ b/tests/language/unsorted/value_range_test.dart @@ -0,0 +1,20 @@ +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import "package:expect/expect.dart"; + +int inscrutable(int x) => x == 0 ? 0 : x | inscrutable(x & (x - 1)); + +foo() { + var x = 0x102; + if (inscrutable(x) == 0) x = 0x0; + if (inscrutable(10) == 10) x = 0x10; // x is in range [0 .. 0x102]. + x = x & 0xFF; // x should be in range [0 .. 0xFF]. Actual value: 0x10. + var a = const [1, 2, 3]; + return a[x]; +} + +main() { + Expect.throwsRangeError(() => foo()); +} diff --git a/tests/language/unsorted/var_init_test.dart b/tests/language/unsorted/var_init_test.dart new file mode 100644 index 000000000000..61ffd9bb1399 --- /dev/null +++ b/tests/language/unsorted/var_init_test.dart @@ -0,0 +1,20 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Testing correct initialization of variables in scopes. + +import "package:expect/expect.dart"; + +class VarInitTest { + static void testMain() { + for (int i = 0; i < 10; i++) { + var x; + Expect.equals(null, x); + x = 1; + } + } +} + +main() { + VarInitTest.testMain(); +}