From 582f5dbf12601343bce2acbca8d7e63d5ef02199 Mon Sep 17 00:00:00 2001 From: Kamil Jarosz Date: Thu, 11 Jul 2024 23:51:27 +0200 Subject: [PATCH] tests: Add tab_ordering_arrows test This test verifies the behavior of keyboard navigation with arrows. --- .../swfs/avm2/tab_ordering_arrows/Test.as | 690 ++++++++++++ .../swfs/avm2/tab_ordering_arrows/input.json | 700 ++++++++++++ .../swfs/avm2/tab_ordering_arrows/output.txt | 998 ++++++++++++++++++ .../swfs/avm2/tab_ordering_arrows/test.swf | Bin 0 -> 4365 bytes .../swfs/avm2/tab_ordering_arrows/test.toml | 1 + 5 files changed, 2389 insertions(+) create mode 100644 tests/tests/swfs/avm2/tab_ordering_arrows/Test.as create mode 100644 tests/tests/swfs/avm2/tab_ordering_arrows/input.json create mode 100644 tests/tests/swfs/avm2/tab_ordering_arrows/output.txt create mode 100644 tests/tests/swfs/avm2/tab_ordering_arrows/test.swf create mode 100644 tests/tests/swfs/avm2/tab_ordering_arrows/test.toml diff --git a/tests/tests/swfs/avm2/tab_ordering_arrows/Test.as b/tests/tests/swfs/avm2/tab_ordering_arrows/Test.as new file mode 100644 index 000000000..8b631cdd1 --- /dev/null +++ b/tests/tests/swfs/avm2/tab_ordering_arrows/Test.as @@ -0,0 +1,690 @@ +package { + +import flash.display.Sprite; +import flash.display.MovieClip; +import flash.events.KeyboardEvent; +import flash.ui.Keyboard; + +[SWF(width="1000", height="1000", backgroundColor="#000000")] +public class Test extends MovieClip { + // This is the originally focused sprite. + // Upon pressing tab, the focus will switch to other sprites. + // By selecting the positions of others we can verify + // which object is preferred by the automatic tab ordering. + var origin:Sprite; + + var others:Array = []; + + // Tab collectors are used to prevent the order from performing a cycle. + // They are placed far outside the visible area and "collect" the focus. + var tabCollectors:Array = []; + + var nextTestStage:int = 0; + var testStages:Array = []; + var arrowDirection:uint = 0; + + public function Test() { + super(); + + // Set up collectors + for each (var x in [-100000, 0, 100000]) { + for each (var y in [-100000, 0, 100000]) { + if (x == 0 && y == 0) continue; + var tabCollector = newSprite(); + tabCollector.x = x; + tabCollector.y = y; + tabCollector.addEventListener("focusIn", function (evt:*):void { + trace("Collected the tab at " + evt.target.x + ", " + evt.target.y); + nextStage(); + }); + tabCollectors.push(tabCollector); + stage.addChild(tabCollector); + } + } + + // Set up origin + origin = newSprite(); + origin.x = 500; + origin.y = 500; + + stage.addChild(origin); + + setUpTestCases(); + nextStage(); + + stage.addEventListener("keyDown", function (evt:KeyboardEvent):void { + if (evt.keyCode == Keyboard.ESCAPE) { + stage.focus = origin; + } + if (evt.keyCode == Keyboard.NUMBER_1) { + arrowDirection += 1; + nextTestStage = 0; + origin.tabEnabled = true; + for each (var tabCollector in tabCollectors) { + tabCollector.tabEnabled = true; + } + trace("===== Changing arrow: " + arrowDirection); + nextStage(); + } + }); + } + + function newSprite() { + var sprite:Sprite = new Sprite(); + sprite.graphics.beginFill(0xFF00FF); + sprite.graphics.drawRect(0, 0, 10, 10); + sprite.tabEnabled = true; + return sprite; + } + + function nextStage() { + // Clean up + for each (var other in others) { + other.tabEnabled = false; + stage.removeChild(other); + } + others = []; + + if (nextTestStage >= testStages.length) { + origin.tabEnabled = false; + for each (var tabCollector in tabCollectors) { + tabCollector.tabEnabled = false; + } + stage.focus = null; + trace("===== Finished"); + return; + } + + var config:* = testStages[nextTestStage]; + if (config["message"]) { + trace("===== Stage " + nextTestStage + " (direction " + arrowDirection + ", " + config["message"] + ")"); + } else { + trace("===== Stage " + nextTestStage); + } + ++nextTestStage; + + var othersConfig = config["others"]; + var i = 0; + for each (var otherConfig in othersConfig) { + var other = newSprite(); + other.x = 500 + otherConfig["dx"]; + other.y = 500 + otherConfig["dy"]; + if (otherConfig["w"]) { + other.width = otherConfig["w"]; + } + if (otherConfig["h"]) { + other.height = otherConfig["h"]; + } + if (otherConfig["tabIndex"]) { + other.tabIndex = otherConfig["tabIndex"]; + } + other.name = "other" + (i++); + other.addEventListener("focusIn", function (evt:*):void { + trace("Focused " + evt.target.name + " at dx=" + (evt.target.x - 500) + ", dy=" + (evt.target.y - 500) + + ", w=" + evt.target.width + ", h=" + evt.target.height); + }); + + if (arrowDirection == 0) { // Down + // default + } else if (arrowDirection == 1) { // Up + other.x = 1000 - other.x - other.width; + other.y = 1000 - other.y - other.height; + } else if (arrowDirection == 2) { // Left + var tmp = other.x; + other.x = other.y; + other.y = tmp; + var tmp = other.scaleX; + other.scaleX = other.scaleY; + other.scaleY = tmp; + other.x = 1000 - other.x - other.width; + other.y = 1000 - other.y - other.height; + } else if (arrowDirection == 3) { // Right + var tmp = other.x; + other.x = other.y; + other.y = tmp; + var tmp = other.scaleX; + other.scaleX = other.scaleY; + other.scaleY = tmp; + } + + stage.addChild(other); + others.push(other); + } + + if (config["origin_w"]) { + origin.width = config["origin_w"]; + } else { + origin.width = 10; + } + if (config["origin_h"]) { + origin.height = config["origin_h"]; + } else { + origin.height = 10; + } + if (arrowDirection == 1 || arrowDirection == 2) { + origin.scaleX = -1; + origin.scaleY = -1; + } else { + origin.scaleX = 1; + origin.scaleY = 1; + } + + stage.focus = origin; + } + + function setUpTestCases() { + testStages.push({ + "message": "Initial", + "others": [ + {"dx": 0, "dy": 20} + ] + }); + + testStages.push({ + "message": "General direction", + "others": [ + {"dx": 50, "dy": 0} + ] + }); + testStages.push({ + "others": [ + {"dx": -50, "dy": 0} + ] + }); + testStages.push({ + "others": [ + {"dx": 0, "dy": 50} + ] + }); + testStages.push({ + "others": [ + {"dx": 0, "dy": -50} + ] + }); + testStages.push({ + "others": [ + {"dx": 50, "dy": 50} + ] + }); + testStages.push({ + "others": [ + {"dx": -50, "dy": 50} + ] + }); + testStages.push({ + "others": [ + {"dx": 50, "dy": -50} + ] + }); + testStages.push({ + "others": [ + {"dx": -50, "dy": -50} + ] + }); + + // ============================================= + + testStages.push({ + "message": "Overlapping bounds", + "others": [ + {"dx": 0, "dy": 0, "w": 5, "h": 5} + ] + }); + testStages.push({ + "others": [ + {"dx": 5, "dy": 0, "w": 5, "h": 5} + ] + }); + testStages.push({ + "others": [ + {"dx": 5, "dy": 5, "w": 5, "h": 5} + ] + }); + testStages.push({ + "others": [ + {"dx": 0, "dy": 5, "w": 5, "h": 5} + ] + }); + testStages.push({ + "others": [ + {"dx": 0, "dy": 0, "w": 10, "h": 5} + ] + }); + testStages.push({ + "others": [ + {"dx": 0, "dy": 5, "w": 10, "h": 5} + ] + }); + testStages.push({ + "others": [ + {"dx": 0, "dy": 0, "w": 5, "h": 10} + ] + }); + testStages.push({ + "others": [ + {"dx": 5, "dy": 0, "w": 5, "h": 10} + ] + }); + + // ============================================= + + testStages.push({ + "message": "Specific direction", + "others": [ + {"dx": 50, "dy": 50}, + {"dx": 5, "dy": 0} + ] + }); + testStages.push({ + "others": [ + {"dx": 50, "dy": 50}, + {"dx": 5, "dy": 1} + ] + }); + testStages.push({ + "others": [ + {"dx": 50, "dy": 50}, + {"dx": 5, "dy": 1, "h": 9} + ] + }); + testStages.push({ + "others": [ + {"dx": 50, "dy": 50}, + {"dx": 5, "dy": 1, "h": 8} + ] + }); + testStages.push({ + "others": [ + {"dx": 50, "dy": 50}, + {"dx": 5, "dy": -10, "h": 19} + ] + }); + testStages.push({ + "others": [ + {"dx": 50, "dy": 50}, + {"dx": 5, "dy": -10, "h": 20} + ] + }); + testStages.push({ + "others": [ + {"dx": 50, "dy": 50}, + {"dx": 5, "dy": -10, "h": 21} + ] + }); + testStages.push({ + "others": [ + {"dx": 20, "dy": -10, "h": 30}, + {"dx": -20, "dy": -10, "h": 30} + ] + }); + + // ============================================= + + testStages.push({ + "message": "Same distance, behind origin", + "others": [ + {"dx": -5, "dy": 10}, + {"dx": 5, "dy": 10} + ] + }); + testStages.push({ + "others": [ + {"dx": 5, "dy": 10}, + {"dx": -5, "dy": 10} + ] + }); + testStages.push({ + "others": [ + {"dx": 2, "dy": 10}, + {"dx": 0, "dy": 10} + ] + }); + testStages.push({ + "others": [ + {"dx": 0, "dy": 10}, + {"dx": 2, "dy": 10} + ] + }); + testStages.push({ + "others": [ + {"dx": 10, "dy": 10}, + {"dx": -10, "dy": 10} + ] + }); + testStages.push({ + "others": [ + {"dx": -10, "dy": 10}, + {"dx": 10, "dy": 10} + ] + }); + testStages.push({ + "others": [ + {"dx": -7, "dy": 30}, + {"dx": 8, "dy": 30} + ] + }); + testStages.push({ + "others": [ + {"dx": 8, "dy": 30}, + {"dx": -7, "dy": 30} + ] + }); + + // ============================================= + + testStages.push({ + "message": "Same distance, different sizes, behind origin", + "others": [ + {"dx": -5, "dy": 30, "h": 10}, + {"dx": 5, "dy": 30, "h": 5} + ] + }); + testStages.push({ + "others": [ + {"dx": -5, "dy": 30, "h": 10}, + {"dx": 5, "dy": 35, "h": 5} + ] + }); + + // ============================================= + + testStages.push({ + "message": "Different distance, behind origin", + "others": [ + {"dx": 0, "dy": 11}, + {"dx": 0, "dy": 10} + ] + }); + testStages.push({ + "others": [ + {"dx": 0, "dy": 10}, + {"dx": 0, "dy": 11} + ] + }); + testStages.push({ + "others": [ + {"dx": 0, "dy": 30}, + {"dx": -8, "dy": 10} + ] + }); + testStages.push({ + "others": [ + {"dx": -8, "dy": 30}, + {"dx": 0, "dy": 10} + ] + }); + + testStages.push({ + "message": "Behind origin preference", + "others": [ + {"dx": -11, "dy": 10}, + {"dx": -10, "dy": 10} + ] + }); + testStages.push({ + "others": [ + {"dx": -10, "dy": 10}, + {"dx": -11, "dy": 10} + ] + }); + testStages.push({ + "others": [ + {"dx": -10, "dy": 40}, + {"dx": -11, "dy": 10} + ] + }); + testStages.push({ + "others": [ + {"dx": 10, "dy": 10}, + {"dx": 11, "dy": 40} + ] + }); + testStages.push({ + "others": [ + {"dx": 10, "dy": 40}, + {"dx": 11, "dy": 10} + ] + }); + testStages.push({ + "others": [ + {"dx": 10, "dy": 10}, + {"dx": 11, "dy": 40} + ] + }); + + testStages.push({ + "message": "Size vs distance behind", + "others": [ + {"dx": 0, "dy": -1, "h": 11}, + {"dx": 0, "dy": -2, "h": 12} + ] + }); + testStages.push({ + "others": [ + {"dx": 0, "dy": -2, "h": 12}, + {"dx": 0, "dy": -1, "h": 11} + ] + }); + testStages.push({ + "others": [ + {"dx": 0, "dy": 20, "h": 10}, + {"dx": 0, "dy": 25, "h": 5} + ] + }); + testStages.push({ + "others": [ + {"dx": 0, "dy": 25, "h": 5}, + {"dx": 0, "dy": 20, "h": 10} + ] + }); + testStages.push({ + "others": [ + {"dx": 0, "dy": 20, "h": 10}, + {"dx": 0, "dy": 20, "h": 5} + ] + }); + testStages.push({ + "others": [ + {"dx": 0, "dy": 20, "h": 5}, + {"dx": 0, "dy": 20, "h": 10} + ] + }); + + // ============================================= + + testStages.push({ + "message": "Behind vs wings", + "others": [ + {"dx": 0, "dy": 90}, + {"dx": -30, "dy": 5} + ] + }); + testStages.push({ + "others": [ + {"dx": 0, "dy": 90}, + {"dx": 30, "dy": 5} + ] + }); + + testStages.push({ + "message": "Not behind vs wings", + "others": [ + {"dx": 20, "dy": 20}, + {"dx": -80, "dy": 5} + ] + }); + testStages.push({ + "others": [ + {"dx": 20, "dy": 20}, + {"dx": 80, "dy": 5} + ] + }); + testStages.push({ + "others": [ + {"dx": 20, "dy": 20}, + {"dx": -80, "dy": -5} + ] + }); + testStages.push({ + "others": [ + {"dx": 20, "dy": 20}, + {"dx": 80, "dy": -5} + ] + }); + + // ============================================= + + testStages.push({ + "message": "Not behind origin", + "others": [ + {"dx": -11, "dy": 10}, + {"dx": 11, "dy": 10} + ] + }); + testStages.push({ + "others": [ + {"dx": 11, "dy": 10}, + {"dx": -11, "dy": 10} + ] + }); + testStages.push({ + "others": [ + {"dx": -12, "dy": 10}, + {"dx": 12, "dy": 10} + ] + }); + testStages.push({ + "others": [ + {"dx": 12, "dy": 10}, + {"dx": -12, "dy": 10} + ] + }); + testStages.push({ + "others": [ + {"dx": 25, "dy": 20}, + {"dx": 20, "dy": 25} + ] + }); + testStages.push({ + "others": [ + {"dx": 20, "dy": 25}, + {"dx": 25, "dy": 20} + ] + }); + testStages.push({ + "others": [ + {"dx": 26, "dy": 20}, + {"dx": 20, "dy": 25} + ] + }); + testStages.push({ + "others": [ + {"dx": 20, "dy": 25}, + {"dx": 26, "dy": 20} + ] + }); + testStages.push({ + "others": [ + {"dx": 24, "dy": 20}, + {"dx": 20, "dy": 25} + ] + }); + testStages.push({ + "others": [ + {"dx": 20, "dy": 25}, + {"dx": 24, "dy": 20} + ] + }); + + testStages.push({ + "others": [ + {"dx": 60, "dy": 210}, + {"dx": 160, "dy": 140} + ] + }); + testStages.push({ + "others": [ + {"dx": 60, "dy": 210}, + {"dx": 160, "dy": 155} + ] + }); + testStages.push({ + "others": [ + {"dx": -60, "dy": 210}, + {"dx": -160, "dy": 140} + ] + }); + testStages.push({ + "others": [ + {"dx": -60, "dy": 210}, + {"dx": -160, "dy": 155} + ] + }); + + testStages.push({ + "others": [ + {"dx": 60, "dy": 210, "w": 20, "h": 20}, + {"dx": 160, "dy": 140, "w": 20, "h": 20} + ] + }); + testStages.push({ + "others": [ + {"dx": 60, "dy": 210, "w": 20, "h": 20}, + {"dx": 160, "dy": 155, "w": 20, "h": 20} + ] + }); + testStages.push({ + "others": [ + {"dx": -70, "dy": 210, "w": 20, "h": 20}, + {"dx": -170, "dy": 140, "w": 20, "h": 20} + ] + }); + testStages.push({ + "others": [ + {"dx": -70, "dy": 210, "w": 20, "h": 20}, + {"dx": -170, "dy": 155, "w": 20, "h": 20} + ] + }); + + // ============================================= + + testStages.push({ + "message": "Tab index", + "others": [ + {"dx": 0, "dy": 30, "tab_index": 1}, + {"dx": 0, "dy": 60, "tab_index": 2} + ] + }); + testStages.push({ + "others": [ + {"dx": 0, "dy": 30, "tab_index": 2}, + {"dx": 0, "dy": 60, "tab_index": 1} + ] + }); + testStages.push({ + "others": [ + {"dx": 5, "dy": 30, "tab_index": 2}, + {"dx": -5, "dy": 30, "tab_index": 1} + ] + }); + testStages.push({ + "others": [ + {"dx": -5, "dy": 30, "tab_index": 1}, + {"dx": 5, "dy": 30, "tab_index": 2} + ] + }); + testStages.push({ + "others": [ + {"dx": 5, "dy": 30, "tab_index": 1}, + {"dx": -5, "dy": 30, "tab_index": 2} + ] + }); + testStages.push({ + "others": [ + {"dx": -5, "dy": 30, "tab_index": 2}, + {"dx": 5, "dy": 30, "tab_index": 1} + ] + }); + } +} +} diff --git a/tests/tests/swfs/avm2/tab_ordering_arrows/input.json b/tests/tests/swfs/avm2/tab_ordering_arrows/input.json new file mode 100644 index 000000000..d9f58b136 --- /dev/null +++ b/tests/tests/swfs/avm2/tab_ordering_arrows/input.json @@ -0,0 +1,700 @@ +[ + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + { "type": "KeyDown", "key_code": 40 }, + + { "type": "KeyDown", "key_code": 49 }, + + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + { "type": "KeyDown", "key_code": 38 }, + + { "type": "KeyDown", "key_code": 49 }, + + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + { "type": "KeyDown", "key_code": 37 }, + + { "type": "KeyDown", "key_code": 49 }, + + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 }, + { "type": "KeyDown", "key_code": 39 } +] diff --git a/tests/tests/swfs/avm2/tab_ordering_arrows/output.txt b/tests/tests/swfs/avm2/tab_ordering_arrows/output.txt new file mode 100644 index 000000000..0a42985c7 --- /dev/null +++ b/tests/tests/swfs/avm2/tab_ordering_arrows/output.txt @@ -0,0 +1,998 @@ +===== Stage 0 (direction 0, Initial) +Focused other0 at dx=0, dy=20, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 1 (direction 0, General direction) +Collected the tab at 0, 100000 +===== Stage 2 +Collected the tab at 0, 100000 +===== Stage 3 +Focused other0 at dx=0, dy=50, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 4 +Collected the tab at 0, 100000 +===== Stage 5 +Focused other0 at dx=50, dy=50, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 6 +Focused other0 at dx=-50, dy=50, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 7 +Collected the tab at 0, 100000 +===== Stage 8 +Collected the tab at 0, 100000 +===== Stage 9 (direction 0, Overlapping bounds) +Collected the tab at 0, 100000 +===== Stage 10 +Collected the tab at 0, 100000 +===== Stage 11 +Collected the tab at 0, 100000 +===== Stage 12 +Collected the tab at 0, 100000 +===== Stage 13 +Collected the tab at 0, 100000 +===== Stage 14 +Collected the tab at 0, 100000 +===== Stage 15 +Collected the tab at 0, 100000 +===== Stage 16 +Collected the tab at 0, 100000 +===== Stage 17 (direction 0, Specific direction) +Focused other0 at dx=50, dy=50, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 18 +Focused other1 at dx=5, dy=1, w=10, h=10 +Focused other0 at dx=50, dy=50, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 19 +Focused other0 at dx=50, dy=50, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 20 +Focused other0 at dx=50, dy=50, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 21 +Focused other0 at dx=50, dy=50, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 22 +Focused other0 at dx=50, dy=50, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 23 +Focused other1 at dx=5, dy=-10, w=10, h=21 +Focused other0 at dx=50, dy=50, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 24 +Focused other0 at dx=20, dy=-10, w=10, h=30 +Collected the tab at 0, 100000 +===== Stage 25 (direction 0, Same distance, behind origin) +Focused other0 at dx=-5, dy=10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 26 +Focused other0 at dx=5, dy=10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 27 +Focused other0 at dx=2, dy=10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 28 +Focused other0 at dx=0, dy=10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 29 +Focused other0 at dx=10, dy=10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 30 +Focused other0 at dx=-10, dy=10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 31 +Focused other0 at dx=-7, dy=30, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 32 +Focused other0 at dx=8, dy=30, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 33 (direction 0, Same distance, different sizes, behind origin) +Focused other0 at dx=-5, dy=30, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 34 +Focused other0 at dx=-5, dy=30, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 35 (direction 0, Different distance, behind origin) +Focused other1 at dx=0, dy=10, w=10, h=10 +Focused other0 at dx=0, dy=11, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 36 +Focused other0 at dx=0, dy=10, w=10, h=10 +Focused other1 at dx=0, dy=11, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 37 +Focused other1 at dx=-8, dy=10, w=10, h=10 +Focused other0 at dx=0, dy=30, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 38 +Focused other1 at dx=0, dy=10, w=10, h=10 +Focused other0 at dx=-8, dy=30, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 39 (direction 0, Behind origin preference) +Focused other1 at dx=-10, dy=10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 40 +Focused other0 at dx=-10, dy=10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 41 +Focused other0 at dx=-10, dy=40, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 42 +Focused other0 at dx=10, dy=10, w=10, h=10 +Focused other1 at dx=11, dy=40, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 43 +Focused other0 at dx=10, dy=40, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 44 +Focused other0 at dx=10, dy=10, w=10, h=10 +Focused other1 at dx=11, dy=40, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 45 (direction 0, Size vs distance behind) +Collected the tab at 0, 100000 +===== Stage 46 +Collected the tab at 0, 100000 +===== Stage 47 +Focused other0 at dx=0, dy=20, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 48 +Focused other1 at dx=0, dy=20, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 49 +Focused other0 at dx=0, dy=20, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 50 +Focused other0 at dx=0, dy=20, w=10, h=5 +Focused other1 at dx=0, dy=20, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 51 (direction 0, Behind vs wings) +Focused other0 at dx=0, dy=90, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 52 +Focused other0 at dx=0, dy=90, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 53 (direction 0, Not behind vs wings) +Focused other1 at dx=-80, dy=5, w=10, h=10 +Focused other0 at dx=20, dy=20, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 54 +Focused other1 at dx=80, dy=5, w=10, h=10 +Focused other0 at dx=20, dy=20, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 55 +Focused other0 at dx=20, dy=20, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 56 +Focused other0 at dx=20, dy=20, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 57 (direction 0, Not behind origin) +Focused other0 at dx=-11, dy=10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 58 +Focused other0 at dx=11, dy=10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 59 +Focused other0 at dx=-12, dy=10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 60 +Focused other0 at dx=12, dy=10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 61 +Focused other0 at dx=25, dy=20, w=10, h=10 +Focused other1 at dx=20, dy=25, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 62 +Focused other0 at dx=20, dy=25, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 63 +Focused other1 at dx=20, dy=25, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 64 +Focused other0 at dx=20, dy=25, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 65 +Focused other0 at dx=24, dy=20, w=10, h=10 +Focused other1 at dx=20, dy=25, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 66 +Focused other1 at dx=24, dy=20, w=10, h=10 +Focused other0 at dx=20, dy=25, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 67 +Focused other1 at dx=160, dy=140, w=10, h=10 +Focused other0 at dx=60, dy=210, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 68 +Focused other0 at dx=60, dy=210, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 69 +Focused other1 at dx=-160, dy=140, w=10, h=10 +Focused other0 at dx=-60, dy=210, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 70 +Focused other0 at dx=-60, dy=210, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 71 +Focused other1 at dx=160, dy=140, w=20, h=20 +Focused other0 at dx=60, dy=210, w=20, h=20 +Collected the tab at 0, 100000 +===== Stage 72 +Focused other0 at dx=60, dy=210, w=20, h=20 +Collected the tab at 0, 100000 +===== Stage 73 +Focused other1 at dx=-170, dy=140, w=20, h=20 +Focused other0 at dx=-70, dy=210, w=20, h=20 +Collected the tab at 0, 100000 +===== Stage 74 +Focused other0 at dx=-70, dy=210, w=20, h=20 +Collected the tab at 0, 100000 +===== Stage 75 (direction 0, Tab index) +Focused other0 at dx=0, dy=30, w=10, h=10 +Focused other1 at dx=0, dy=60, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 76 +Focused other0 at dx=0, dy=30, w=10, h=10 +Focused other1 at dx=0, dy=60, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 77 +Focused other0 at dx=5, dy=30, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 78 +Focused other0 at dx=-5, dy=30, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 79 +Focused other0 at dx=5, dy=30, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 80 +Focused other0 at dx=-5, dy=30, w=10, h=10 +Collected the tab at 0, 100000 +===== Finished +===== Changing arrow: 1 +===== Stage 0 (direction 1, Initial) +Focused other0 at dx=-10, dy=-30, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 1 (direction 1, General direction) +Collected the tab at 100000, 0 +===== Stage 2 +Collected the tab at 100000, 0 +===== Stage 3 +Focused other0 at dx=-10, dy=-60, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 4 +Collected the tab at 100000, 0 +===== Stage 5 +Focused other0 at dx=-60, dy=-60, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 6 +Focused other0 at dx=40, dy=-60, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 7 +Collected the tab at 100000, 0 +===== Stage 8 +Collected the tab at 100000, 0 +===== Stage 9 (direction 1, Overlapping bounds) +Collected the tab at 100000, 0 +===== Stage 10 +Collected the tab at 100000, 0 +===== Stage 11 +Focused other0 at dx=-10, dy=-10, w=5, h=5 +Collected the tab at 100000, 0 +===== Stage 12 +Focused other0 at dx=-5, dy=-10, w=5, h=5 +Collected the tab at 100000, 0 +===== Stage 13 +Collected the tab at 100000, 0 +===== Stage 14 +Focused other0 at dx=-10, dy=-10, w=10, h=5 +Collected the tab at 100000, 0 +===== Stage 15 +Collected the tab at 100000, 0 +===== Stage 16 +Collected the tab at 100000, 0 +===== Stage 17 (direction 1, Specific direction) +Focused other0 at dx=-60, dy=-60, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 18 +Focused other1 at dx=-15, dy=-11, w=10, h=10 +Focused other0 at dx=-60, dy=-60, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 19 +Focused other1 at dx=-15, dy=-10, w=10, h=9 +Focused other0 at dx=-60, dy=-60, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 20 +Focused other1 at dx=-15, dy=-9, w=10, h=8 +Focused other0 at dx=-60, dy=-60, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 21 +Focused other0 at dx=-60, dy=-60, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 22 +Focused other0 at dx=-60, dy=-60, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 23 +Focused other0 at dx=-60, dy=-60, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 24 +Collected the tab at 100000, 0 +===== Stage 25 (direction 1, Same distance, behind origin) +Focused other0 at dx=-5, dy=-20, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 26 +Focused other0 at dx=-15, dy=-20, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 27 +Focused other0 at dx=-12, dy=-20, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 28 +Focused other0 at dx=-10, dy=-20, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 29 +Focused other0 at dx=-20, dy=-20, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 30 +Focused other0 at dx=0, dy=-20, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 31 +Focused other0 at dx=-3, dy=-40, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 32 +Focused other0 at dx=-18, dy=-40, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 33 (direction 1, Same distance, different sizes, behind origin) +Focused other0 at dx=-5, dy=-40, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 34 +Focused other0 at dx=-5, dy=-40, w=10, h=10 +Focused other1 at dx=-15, dy=-40, w=10, h=5 +Collected the tab at 100000, 0 +===== Stage 35 (direction 1, Different distance, behind origin) +Focused other1 at dx=-10, dy=-20, w=10, h=10 +Focused other0 at dx=-10, dy=-21, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 36 +Focused other0 at dx=-10, dy=-20, w=10, h=10 +Focused other1 at dx=-10, dy=-21, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 37 +Focused other1 at dx=-2, dy=-20, w=10, h=10 +Focused other0 at dx=-10, dy=-40, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 38 +Focused other1 at dx=-10, dy=-20, w=10, h=10 +Focused other0 at dx=-2, dy=-40, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 39 (direction 1, Behind origin preference) +Focused other1 at dx=0, dy=-20, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 40 +Focused other0 at dx=0, dy=-20, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 41 +Focused other0 at dx=0, dy=-50, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 42 +Focused other0 at dx=-20, dy=-20, w=10, h=10 +Focused other1 at dx=-21, dy=-50, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 43 +Focused other0 at dx=-20, dy=-50, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 44 +Focused other0 at dx=-20, dy=-20, w=10, h=10 +Focused other1 at dx=-21, dy=-50, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 45 (direction 1, Size vs distance behind) +Collected the tab at 100000, 0 +===== Stage 46 +Collected the tab at 100000, 0 +===== Stage 47 +Focused other0 at dx=-10, dy=-30, w=10, h=10 +Focused other1 at dx=-10, dy=-30, w=10, h=5 +Collected the tab at 100000, 0 +===== Stage 48 +Focused other1 at dx=-10, dy=-30, w=10, h=10 +Focused other0 at dx=-10, dy=-30, w=10, h=5 +Collected the tab at 100000, 0 +===== Stage 49 +Focused other0 at dx=-10, dy=-30, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 50 +Focused other0 at dx=-10, dy=-25, w=10, h=5 +Collected the tab at 100000, 0 +===== Stage 51 (direction 1, Behind vs wings) +Focused other0 at dx=-10, dy=-100, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 52 +Focused other0 at dx=-10, dy=-100, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 53 (direction 1, Not behind vs wings) +Focused other0 at dx=-30, dy=-30, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 54 +Focused other0 at dx=-30, dy=-30, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 55 +Focused other0 at dx=-30, dy=-30, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 56 +Focused other0 at dx=-30, dy=-30, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 57 (direction 1, Not behind origin) +Focused other0 at dx=1, dy=-20, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 58 +Focused other0 at dx=-21, dy=-20, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 59 +Focused other0 at dx=2, dy=-20, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 60 +Focused other0 at dx=-22, dy=-20, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 61 +Focused other0 at dx=-35, dy=-30, w=10, h=10 +Focused other1 at dx=-30, dy=-35, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 62 +Focused other0 at dx=-30, dy=-35, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 63 +Focused other1 at dx=-30, dy=-35, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 64 +Focused other0 at dx=-30, dy=-35, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 65 +Focused other0 at dx=-34, dy=-30, w=10, h=10 +Focused other1 at dx=-30, dy=-35, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 66 +Focused other1 at dx=-34, dy=-30, w=10, h=10 +Focused other0 at dx=-30, dy=-35, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 67 +Focused other1 at dx=-170, dy=-150, w=10, h=10 +Focused other0 at dx=-70, dy=-220, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 68 +Focused other0 at dx=-70, dy=-220, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 69 +Focused other1 at dx=150, dy=-150, w=10, h=10 +Focused other0 at dx=50, dy=-220, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 70 +Focused other0 at dx=50, dy=-220, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 71 +Focused other1 at dx=-180, dy=-160, w=20, h=20 +Focused other0 at dx=-80, dy=-230, w=20, h=20 +Collected the tab at 100000, 0 +===== Stage 72 +Focused other0 at dx=-80, dy=-230, w=20, h=20 +Collected the tab at 100000, 0 +===== Stage 73 +Focused other1 at dx=150, dy=-160, w=20, h=20 +Focused other0 at dx=50, dy=-230, w=20, h=20 +Collected the tab at 100000, 0 +===== Stage 74 +Focused other0 at dx=50, dy=-230, w=20, h=20 +Collected the tab at 100000, 0 +===== Stage 75 (direction 1, Tab index) +Focused other0 at dx=-10, dy=-40, w=10, h=10 +Focused other1 at dx=-10, dy=-70, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 76 +Focused other0 at dx=-10, dy=-40, w=10, h=10 +Focused other1 at dx=-10, dy=-70, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 77 +Focused other0 at dx=-15, dy=-40, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 78 +Focused other0 at dx=-5, dy=-40, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 79 +Focused other0 at dx=-15, dy=-40, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 80 +Focused other0 at dx=-5, dy=-40, w=10, h=10 +Collected the tab at 100000, 0 +===== Finished +===== Changing arrow: 2 +===== Stage 0 (direction 2, Initial) +Focused other0 at dx=-30, dy=-10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 1 (direction 2, General direction) +Collected the tab at 0, 100000 +===== Stage 2 +Collected the tab at 0, 100000 +===== Stage 3 +Focused other0 at dx=-60, dy=-10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 4 +Collected the tab at 0, 100000 +===== Stage 5 +Focused other0 at dx=-60, dy=-60, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 6 +Focused other0 at dx=-60, dy=40, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 7 +Collected the tab at 0, 100000 +===== Stage 8 +Collected the tab at 0, 100000 +===== Stage 9 (direction 2, Overlapping bounds) +Collected the tab at 0, 100000 +===== Stage 10 +Collected the tab at 0, 100000 +===== Stage 11 +Collected the tab at 0, 100000 +===== Stage 12 +Collected the tab at 0, 100000 +===== Stage 13 +Collected the tab at 0, 100000 +===== Stage 14 +Collected the tab at 0, 100000 +===== Stage 15 +Collected the tab at 0, 100000 +===== Stage 16 +Collected the tab at 0, 100000 +===== Stage 17 (direction 2, Specific direction) +Focused other0 at dx=-60, dy=-60, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 18 +Focused other1 at dx=-11, dy=-15, w=10, h=10 +Focused other0 at dx=-60, dy=-60, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 19 +Focused other0 at dx=-60, dy=-60, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 20 +Focused other0 at dx=-60, dy=-60, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 21 +Focused other0 at dx=-60, dy=-60, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 22 +Focused other0 at dx=-60, dy=-60, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 23 +Focused other1 at dx=-11, dy=-15, w=21, h=10 +Focused other0 at dx=-60, dy=-60, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 24 +Focused other0 at dx=-20, dy=-30, w=30, h=10 +Collected the tab at 0, 100000 +===== Stage 25 (direction 2, Same distance, behind origin) +Focused other0 at dx=-20, dy=-5, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 26 +Focused other0 at dx=-20, dy=-15, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 27 +Focused other0 at dx=-20, dy=-12, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 28 +Focused other0 at dx=-20, dy=-10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 29 +Focused other0 at dx=-20, dy=-20, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 30 +Focused other0 at dx=-20, dy=0, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 31 +Focused other0 at dx=-40, dy=-3, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 32 +Focused other0 at dx=-40, dy=-18, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 33 (direction 2, Same distance, different sizes, behind origin) +Focused other0 at dx=-40, dy=-5, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 34 +Focused other0 at dx=-40, dy=-5, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 35 (direction 2, Different distance, behind origin) +Focused other1 at dx=-20, dy=-10, w=10, h=10 +Focused other0 at dx=-21, dy=-10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 36 +Focused other0 at dx=-20, dy=-10, w=10, h=10 +Focused other1 at dx=-21, dy=-10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 37 +Focused other1 at dx=-20, dy=-2, w=10, h=10 +Focused other0 at dx=-40, dy=-10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 38 +Focused other1 at dx=-20, dy=-10, w=10, h=10 +Focused other0 at dx=-40, dy=-2, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 39 (direction 2, Behind origin preference) +Focused other1 at dx=-20, dy=0, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 40 +Focused other0 at dx=-20, dy=0, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 41 +Focused other0 at dx=-50, dy=0, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 42 +Focused other0 at dx=-20, dy=-20, w=10, h=10 +Focused other1 at dx=-50, dy=-21, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 43 +Focused other0 at dx=-50, dy=-20, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 44 +Focused other0 at dx=-20, dy=-20, w=10, h=10 +Focused other1 at dx=-50, dy=-21, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 45 (direction 2, Size vs distance behind) +Collected the tab at 0, 100000 +===== Stage 46 +Collected the tab at 0, 100000 +===== Stage 47 +Focused other0 at dx=-30, dy=-10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 48 +Focused other1 at dx=-30, dy=-10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 49 +Focused other0 at dx=-30, dy=-10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 50 +Focused other0 at dx=-25, dy=-10, w=5, h=10 +Focused other1 at dx=-30, dy=-10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 51 (direction 2, Behind vs wings) +Focused other0 at dx=-100, dy=-10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 52 +Focused other0 at dx=-100, dy=-10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 53 (direction 2, Not behind vs wings) +Focused other0 at dx=-30, dy=-30, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 54 +Focused other0 at dx=-30, dy=-30, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 55 +Focused other0 at dx=-30, dy=-30, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 56 +Focused other0 at dx=-30, dy=-30, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 57 (direction 2, Not behind origin) +Focused other0 at dx=-20, dy=1, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 58 +Focused other0 at dx=-20, dy=-21, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 59 +Focused other0 at dx=-20, dy=2, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 60 +Focused other0 at dx=-20, dy=-22, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 61 +Focused other0 at dx=-30, dy=-35, w=10, h=10 +Focused other1 at dx=-35, dy=-30, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 62 +Focused other0 at dx=-35, dy=-30, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 63 +Focused other1 at dx=-35, dy=-30, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 64 +Focused other0 at dx=-35, dy=-30, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 65 +Focused other0 at dx=-30, dy=-34, w=10, h=10 +Focused other1 at dx=-35, dy=-30, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 66 +Focused other1 at dx=-30, dy=-34, w=10, h=10 +Focused other0 at dx=-35, dy=-30, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 67 +Focused other1 at dx=-150, dy=-170, w=10, h=10 +Focused other0 at dx=-220, dy=-70, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 68 +Focused other0 at dx=-220, dy=-70, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 69 +Focused other1 at dx=-150, dy=150, w=10, h=10 +Focused other0 at dx=-220, dy=50, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 70 +Focused other0 at dx=-220, dy=50, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 71 +Focused other1 at dx=-160, dy=-180, w=20, h=20 +Focused other0 at dx=-230, dy=-80, w=20, h=20 +Collected the tab at 0, 100000 +===== Stage 72 +Focused other0 at dx=-230, dy=-80, w=20, h=20 +Collected the tab at 0, 100000 +===== Stage 73 +Focused other1 at dx=-160, dy=150, w=20, h=20 +Focused other0 at dx=-230, dy=50, w=20, h=20 +Collected the tab at 0, 100000 +===== Stage 74 +Focused other0 at dx=-230, dy=50, w=20, h=20 +Collected the tab at 0, 100000 +===== Stage 75 (direction 2, Tab index) +Focused other0 at dx=-40, dy=-10, w=10, h=10 +Focused other1 at dx=-70, dy=-10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 76 +Focused other0 at dx=-40, dy=-10, w=10, h=10 +Focused other1 at dx=-70, dy=-10, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 77 +Focused other0 at dx=-40, dy=-15, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 78 +Focused other0 at dx=-40, dy=-5, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 79 +Focused other0 at dx=-40, dy=-15, w=10, h=10 +Collected the tab at 0, 100000 +===== Stage 80 +Focused other0 at dx=-40, dy=-5, w=10, h=10 +Collected the tab at 0, 100000 +===== Finished +===== Changing arrow: 3 +===== Stage 0 (direction 3, Initial) +Focused other0 at dx=20, dy=0, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 1 (direction 3, General direction) +Collected the tab at 100000, 0 +===== Stage 2 +Collected the tab at 100000, 0 +===== Stage 3 +Focused other0 at dx=50, dy=0, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 4 +Collected the tab at 100000, 0 +===== Stage 5 +Focused other0 at dx=50, dy=50, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 6 +Focused other0 at dx=50, dy=-50, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 7 +Collected the tab at 100000, 0 +===== Stage 8 +Collected the tab at 100000, 0 +===== Stage 9 (direction 3, Overlapping bounds) +Collected the tab at 100000, 0 +===== Stage 10 +Collected the tab at 100000, 0 +===== Stage 11 +Collected the tab at 100000, 0 +===== Stage 12 +Collected the tab at 100000, 0 +===== Stage 13 +Collected the tab at 100000, 0 +===== Stage 14 +Collected the tab at 100000, 0 +===== Stage 15 +Collected the tab at 100000, 0 +===== Stage 16 +Collected the tab at 100000, 0 +===== Stage 17 (direction 3, Specific direction) +Focused other0 at dx=50, dy=50, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 18 +Focused other1 at dx=1, dy=5, w=10, h=10 +Focused other0 at dx=50, dy=50, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 19 +Focused other0 at dx=50, dy=50, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 20 +Focused other0 at dx=50, dy=50, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 21 +Focused other0 at dx=50, dy=50, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 22 +Focused other0 at dx=50, dy=50, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 23 +Focused other1 at dx=-10, dy=5, w=21, h=10 +Focused other0 at dx=50, dy=50, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 24 +Focused other0 at dx=-10, dy=20, w=30, h=10 +Collected the tab at 100000, 0 +===== Stage 25 (direction 3, Same distance, behind origin) +Focused other0 at dx=10, dy=-5, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 26 +Focused other0 at dx=10, dy=5, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 27 +Focused other0 at dx=10, dy=2, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 28 +Focused other0 at dx=10, dy=0, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 29 +Focused other0 at dx=10, dy=10, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 30 +Focused other0 at dx=10, dy=-10, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 31 +Focused other0 at dx=30, dy=-7, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 32 +Focused other0 at dx=30, dy=8, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 33 (direction 3, Same distance, different sizes, behind origin) +Focused other0 at dx=30, dy=-5, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 34 +Focused other0 at dx=30, dy=-5, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 35 (direction 3, Different distance, behind origin) +Focused other1 at dx=10, dy=0, w=10, h=10 +Focused other0 at dx=11, dy=0, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 36 +Focused other0 at dx=10, dy=0, w=10, h=10 +Focused other1 at dx=11, dy=0, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 37 +Focused other1 at dx=10, dy=-8, w=10, h=10 +Focused other0 at dx=30, dy=0, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 38 +Focused other1 at dx=10, dy=0, w=10, h=10 +Focused other0 at dx=30, dy=-8, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 39 (direction 3, Behind origin preference) +Focused other1 at dx=10, dy=-10, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 40 +Focused other0 at dx=10, dy=-10, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 41 +Focused other0 at dx=40, dy=-10, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 42 +Focused other0 at dx=10, dy=10, w=10, h=10 +Focused other1 at dx=40, dy=11, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 43 +Focused other0 at dx=40, dy=10, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 44 +Focused other0 at dx=10, dy=10, w=10, h=10 +Focused other1 at dx=40, dy=11, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 45 (direction 3, Size vs distance behind) +Collected the tab at 100000, 0 +===== Stage 46 +Collected the tab at 100000, 0 +===== Stage 47 +Focused other0 at dx=20, dy=0, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 48 +Focused other1 at dx=20, dy=0, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 49 +Focused other0 at dx=20, dy=0, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 50 +Focused other0 at dx=20, dy=0, w=5, h=10 +Focused other1 at dx=20, dy=0, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 51 (direction 3, Behind vs wings) +Focused other0 at dx=90, dy=0, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 52 +Focused other0 at dx=90, dy=0, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 53 (direction 3, Not behind vs wings) +Focused other0 at dx=20, dy=20, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 54 +Focused other0 at dx=20, dy=20, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 55 +Focused other0 at dx=20, dy=20, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 56 +Focused other0 at dx=20, dy=20, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 57 (direction 3, Not behind origin) +Focused other0 at dx=10, dy=-11, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 58 +Focused other0 at dx=10, dy=11, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 59 +Focused other0 at dx=10, dy=-12, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 60 +Focused other0 at dx=10, dy=12, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 61 +Focused other0 at dx=20, dy=25, w=10, h=10 +Focused other1 at dx=25, dy=20, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 62 +Focused other0 at dx=25, dy=20, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 63 +Focused other1 at dx=25, dy=20, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 64 +Focused other0 at dx=25, dy=20, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 65 +Focused other0 at dx=20, dy=24, w=10, h=10 +Focused other1 at dx=25, dy=20, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 66 +Focused other1 at dx=20, dy=24, w=10, h=10 +Focused other0 at dx=25, dy=20, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 67 +Focused other1 at dx=140, dy=160, w=10, h=10 +Focused other0 at dx=210, dy=60, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 68 +Focused other0 at dx=210, dy=60, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 69 +Focused other1 at dx=140, dy=-160, w=10, h=10 +Focused other0 at dx=210, dy=-60, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 70 +Focused other0 at dx=210, dy=-60, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 71 +Focused other1 at dx=140, dy=160, w=20, h=20 +Focused other0 at dx=210, dy=60, w=20, h=20 +Collected the tab at 100000, 0 +===== Stage 72 +Focused other0 at dx=210, dy=60, w=20, h=20 +Collected the tab at 100000, 0 +===== Stage 73 +Focused other1 at dx=140, dy=-170, w=20, h=20 +Focused other0 at dx=210, dy=-70, w=20, h=20 +Collected the tab at 100000, 0 +===== Stage 74 +Focused other0 at dx=210, dy=-70, w=20, h=20 +Collected the tab at 100000, 0 +===== Stage 75 (direction 3, Tab index) +Focused other0 at dx=30, dy=0, w=10, h=10 +Focused other1 at dx=60, dy=0, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 76 +Focused other0 at dx=30, dy=0, w=10, h=10 +Focused other1 at dx=60, dy=0, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 77 +Focused other0 at dx=30, dy=5, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 78 +Focused other0 at dx=30, dy=-5, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 79 +Focused other0 at dx=30, dy=5, w=10, h=10 +Collected the tab at 100000, 0 +===== Stage 80 +Focused other0 at dx=30, dy=-5, w=10, h=10 +Collected the tab at 100000, 0 +===== Finished diff --git a/tests/tests/swfs/avm2/tab_ordering_arrows/test.swf b/tests/tests/swfs/avm2/tab_ordering_arrows/test.swf new file mode 100644 index 0000000000000000000000000000000000000000..20fbb129bfa45ba0c6d41280d8a65592f13f73f6 GIT binary patch literal 4365 zcmV+o5%TUsS5qk{A^-q*0fm_fcpKHV$7hp9ix)X@HYX%9QS3O#w(KmgxXf{;K}jRf$x0bM7277a3NC>0zoE+q<8i8YvvU!9KF>Um{FwV+EY!YF{Ml}Xt0P0JOnh^sQBtVa7}T{t;+KF7%veNOHpy}fWL`5^O>3JscK2ROf%9dyR! z0kutqjTZV6(XhB#9tzn7HnR()Rrb%dmj>c_DBGj99 ztZ84pWa;|Onmni+EoCBAAf-}?{+4J8Rs*+BK8ZuBjI>Ktuyv`lOEp5IVP*Y#p+!t{McgBW!^oT;O{+2# zS4j4zBMul1MxwEBL0VSZlf+$6O3P_dik3uw+(|~N$(ucm`)1d@=I2!2(Vdc#k!UFG z?2;k#)@Ur|2&bg}^|1T`^kAmrXeCvHW)tF4k1Ud23lB8d{NC_jgW&h}H`w~4VKoAm zkp_E2j&?^>x4BEcfIB7kB>H4b*&dVQ-D;#juUcy~PR@p~*dwRYuuFORFjm}~=bafg zHp9zSaNz+iJjnL55eIC*ig;Kauwe=9>5vqYFVsISa_Ae~*>7A#?4d+liFW7d^@ctL zgN?e;)Gc1^Ng7M0y(O-QN7bklD_Ta%F2%fNDr466$*CCJlVrEyu#Sh*W7?8(D5^w5 zS=E#_s1%sceDRR%_jbvVXguuIldBvx8ICH7oPuWerlVWr^eA;{i#h!r{w6N5diN$% zGP(=N6WYL^w=ZobLh~r30L=8mGSXw$Bvd0sW30$Brl;-P0Ot&>LLP9!4s_zxSnQPC zKAh0m*`4TA6P;mMfej`%Q)fhuCHZ6`&CjWuXKPNSq(OdeAi&R?U&}}1DqmMq$Jfo7 zFZ7~Ow?L?!9hf83&Yc|)=GM&%IL&j(t{)oMWWuj6-L9&b)b6@og8h3N?X1 zps-5{ZSGEy-GuWXkrJoFApA@*mJ))8(HZNRUptqt4J;_KvEwB65>OZi*;O6@_Uc=M{xgraS3ZRd%cU*tR@H%1gHMQ)ZT zctioN&k;Q}A~##)=7`)}=X};#&pI1fk!upU=E z!heXudQoT-g$<(6E^<+ki-}x9ABUz;(8MeR(>A`D5m>venX$9t zlx9X`9q^cSu!~w)aO843!GY7oX9CM$nCIN?^G>il_+fw1Fu4$h zTUoY3E9_tkqv!&{3ci_}Jk{f!1(wp^u3aYK;UalRVmDA9JjuNGTc$37&k0 zadrturVky}nhuvqW3oxzmIZ0S%Bi|-u1^O`5Kk%<&*#pI(%n?OFsX_GT67;UPLIa0p>Z)E3+{`AMBgeHwJp70!)sWV+4lrtbr1h z%50`}JTuh8Yv;lwPxKP6O{dqKBxpWz?XPHJTPJW8u#lMuIP!*d)(5BY%T+w0Qw=*!FJY>uA4FJ zUx4k$L&kfD{R{P8)Qv^j56~-$Hf;;~y2l!fN?D}G6on_Z;cx}gb zQCkl?oKcElbG_EhZG*b9<Bhk67p2KmDT>G}%J?0TElV>B(R#bKU>4S^4vf0;6C7@9X>9a~Pu z1TBez6(n&FBy=f}7(-H-md5Lq#BtQ24$0QMMOW z^TV7OL7yq#D+!*Hz+H(xxZ>?_eHAEme5gm%euUR(3*hEz!xW(!*BDAaQC@3Iu}Y=n z*RC^6QL5CgN8@aHZO@sp=JkEZh^x3K0tK@N>uAzU%>iHA~*^!34S^^@mzf^q(}Wb=w4o82IF8$(i+#|2}1$e7P1 zRcUwX>UD;C*i^%iRE_GpsJdFa2d-cT$?;kQ54Q?pad5g$1fTm*H6jJHd+Ak;hs3`R zEf&V_r&l%FL%15q0dBvC*=3AaOOCkN=al;B1^fs6ECe{TKMlv|qsIGVPaa(#QChCw;~3+(x#Y!}2^yrB8w6LXbX< z(gPr^B~r#BeHNu<+HX+u97qmkC3>-cM3GO%P!xLN^11{RkTj0e6``pldkV$+yrjw<7V=T;eu^fW8MpPwWm# z>_OsZxx}3&K`P~J=S}P`irtOaJ-OJv9L!~UR#V$~sQt4r_BZR8S(g`(4Qej} z`#spYm(a)WLH`ZWyKw7XHbR4GZr!Ui>T5{6ZjnI1H!Kd!SQ$zjLgFw;xNM9gVB+1W z$Iv(XC?$>|@s>pbG5%99TPPFI~@FKwJ##xf{uQK>82r9J1R7rlmjhD&9w9-H*fr76}j!S{#_`d4v*= zBC+2fW@61AI~(yhC7wXyS0J%;?UP`-Ns{2ejB$Vx&mi$@gV19bsZ(HM`C*}af1=#8%uZZpu|ojZq6lk88NKHZAb*Q+kxnU_3TFS4v<>z z?>%7Ron$?)hH0$5NZe(S!1C_4I579=UP}BNiTgnEC0Vk5C*2Qb9yLwkAxb=q#3L37 z#CX)=z$AV_iC-e|I7lWDr~1A;0VY1;Cs}It6eXTU;($d0F`ltFFk}3N63-#=JV;8i zF@9@tU=lA<;w2=0Z;?QZmn{xV;#Eq#hQ#Y2nV607hQ)zNWGHb6iNh8N#5iJcU=qhD z@fH$)1W7%_m~j}sHUjb|Avt51B?H^7-y`3l&|eVx>nP}56WVQs-lxz92z?09ifEvuYffyWHbVfj%I6Noi&phve92iZ1@X_?Yn$k zWwZGDj=Zi%UqNj<_zJ=Oe*^lw5q#paYN|h+^s)G?y2%);Cu5xDS#>kbXBV z4p#LOV+>jFXRhU^l)Vkv+d)Ualj$*l-3?>(yPKYi$^MM8cOpAHS_kaj(f&;K9?I@R z_TC(wzTThb_|w;`pUV$W_CaJH8m)u450Ca|#@%m&zmhsQ_z!@^nE?C=!znWz4N60x zqfu!LbSzdD2RfRRra(ut(j4e0RZ0UL^-4XyUC5lH|3t{2d>!D%ITrp_qW|B06I}co HkbPd22DxxO literal 0 HcmV?d00001 diff --git a/tests/tests/swfs/avm2/tab_ordering_arrows/test.toml b/tests/tests/swfs/avm2/tab_ordering_arrows/test.toml new file mode 100644 index 000000000..cf6123969 --- /dev/null +++ b/tests/tests/swfs/avm2/tab_ordering_arrows/test.toml @@ -0,0 +1 @@ +num_ticks = 1