=== modified file 'libutouch-geis/backend/xcb/geis_xcb_backend_token.c'
--- libutouch-geis/backend/xcb/geis_xcb_backend_token.c	2011-10-17 16:52:22 +0000
+++ libutouch-geis/backend/xcb/geis_xcb_backend_token.c	2011-12-06 01:12:23 +0000
@@ -38,6 +38,9 @@
 /* The maximum nuimber of regions supported. */
 #define MAX_NUM_WINDOWS 10
 
+/* A special device_id to indicate "no devices" */
+#define GEIS_XCB_NO_DEVICES ((uint16_t)(-1))
+
 
 struct XcbBackendToken
 {
@@ -291,19 +294,19 @@
 _token_select_xcb_events(XcbBackendToken token)
 {
   GeisStatus status = GEIS_STATUS_UNKNOWN_ERROR;
-  int dev;
-  int win;
-
-  for (dev = 0; dev < token->device_count; ++dev)
+  for (int dev = 0; dev < token->device_count; ++dev)
   {
-    for (win = 0; win < token->window_count; ++win)
+    if (token->devices[dev] != GEIS_XCB_NO_DEVICES)
     {
-      geis_debug("window_id=0x%08x device_id=%d",
-                 token->windows[win], token->devices[dev]);
-      geis_xcb_backend_select_events(token->be,
-                                     token->devices[dev],
-                                     token->windows[win]);
-      status = GEIS_STATUS_SUCCESS;
+      for (int win = 0; win < token->window_count; ++win)
+      {
+        geis_debug("window_id=0x%08x device_id=%d",
+                   token->windows[win], token->devices[dev]);
+        geis_xcb_backend_select_events(token->be,
+                                       token->devices[dev],
+                                       token->windows[win]);
+        status = GEIS_STATUS_SUCCESS;
+      }
     }
   }
   return status;
@@ -410,6 +413,7 @@
   GeisStatus status = GEIS_STATUS_UNKNOWN_ERROR;
   XcbBackendToken t = _xcb_token_from_geis_token(token);
   Geis geis = geis_xcb_backend_geis(t->be);
+  GeisSize match_count = 0;
 
   if (0 == strcmp(name, GEIS_DEVICE_ATTRIBUTE_NAME)
      && op == GEIS_FILTER_OP_EQ)
@@ -425,6 +429,7 @@
       if (0 == strcmp(geis_device_name(device), device_name))
       {
         status = _token_add_device_id(t, geis_device_id(device));
+        ++match_count;
       }
     }
   }
@@ -434,6 +439,7 @@
     GeisInteger device_id = *(GeisInteger*)value;
     geis_debug("attr name=\"%s\" value=%d", name, device_id);
     status = _token_add_device_id(t, device_id);
+    ++match_count;
   }
   else if (0 == strcmp(name, GEIS_DEVICE_ATTRIBUTE_DIRECT_TOUCH)
            && op == GEIS_FILTER_OP_EQ)
@@ -456,6 +462,7 @@
 	  if (geis_attr_value_to_boolean(attr) == is_direct)
 	  {
             status = _token_add_device_id(t, geis_device_id(device));
+            ++match_count;
 	  }
 	  break;
 	}
@@ -483,12 +490,21 @@
 	  if (geis_attr_value_to_boolean(attr) == is_independent)
 	  {
             status = _token_add_device_id(t, geis_device_id(device));
+            ++match_count;
 	  }
 	  break;
 	}
       }
     }
-  }
+
+  }
+
+  /* special case of no matching devices */
+  if (match_count == 0)
+  {
+    status = _token_add_device_id(t, GEIS_XCB_NO_DEVICES);
+  }
+
   return status;
 }
 

=== added file 'testsuite/geis2/lp891731.py'
--- testsuite/geis2/lp891731.py	1970-01-01 00:00:00 +0000
+++ testsuite/geis2/lp891731.py	2011-12-06 01:12:23 +0000
@@ -0,0 +1,209 @@
+#!/usr/bin/python
+#
+# When a device filter term is added to a subscription and there is no device
+# present to match the filter, the term causes ALL devices to be selected
+# instead of NONE. This is the reverse to how filters should work.
+#
+# The error occurred when filtering on  any of GEIS_DEVICE_ATTRIBUTE_NAME,
+# GEIS_DEVICE_ATTRIBUTE_DIRECT_TOUCH, or GEIS_DEVICE_ATTRIBUTE_INDEPENDENT_TOUCH
+# attributes.
+#
+# Here's how the test works.  There are two devices:  device1 is the device on
+# which all input is actaully occurring.  We have subscribed to device2 by name
+# but not device1, so we shouldn;t be seeing any gesture events coming in.  If
+# we do, the bug has obtained and we fail.  If we don't and the timer goes off,
+# assume success.
+#
+# Just to assure everything is working, there's an option to subscribe to
+# device1 as well, in which case we should see events only on device1.
+#
+# Because this test tool talks to kernel input devices (through evdev), it must
+# be run as root.
+#
+
+#
+# Copyright 2011 Canonical Ltd.
+#
+# This program is free software: you can redistribute it and/or modify it 
+# under the terms of the GNU General Public License version 3, as published 
+# by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful, but 
+# WITHOUT ANY WARRANTY; without even the implied warranties of 
+# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 
+# PURPOSE.  See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along 
+# with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+import argparse
+import evemu
+import geis
+import glib
+import os
+import sys
+
+
+class Tester(object):
+
+    def __init__(self, args):
+        super(Tester, self).__init__()
+        self._args = args
+        self._has_filter = False
+        self._device_1_id = 0
+
+        # need to guarabtee there is a device we can feed events to
+        self._device1 = evemu.Device(self._find_data_file("test_device1.prop"))
+        device2 = evemu.Device(self._find_data_file("test_device2.prop"))
+        self._device_2_name = device2.name
+
+        # need a geis instance
+        self._geis = geis.Geis(geis.GEIS_INIT_TRACK_DEVICES)
+        self._sub = geis.Subscription(self._geis)
+
+
+    def _find_data_file(self, filename):
+      f = os.path.join(os.path.dirname(os.path.realpath(sys.argv[0])), filename)
+      return open(f)
+
+    def get_fd(self):
+        return self._geis.get_configuration(geis.GEIS_CONFIGURATION_FD)
+
+    
+    def create_subscriptions(self):
+        """
+        Creates a filter to allow only gesture events from device2.
+        """
+        print "create_subscriptions"
+        filt = geis.Filter(self._geis, "lp-891731")
+        filt.add_term(geis.GEIS_FILTER_DEVICE,
+            (geis.GEIS_DEVICE_ATTRIBUTE_NAME,
+             geis.GEIS_FILTER_OP_EQ,
+             self._device_2_name))
+        self._sub.add_filter(filt)
+        self._has_filter = True
+        print ".. self._args.force=%s" % self._args.force
+        if self._args.force:
+            filt = geis.Filter(self._geis, "force")
+            filt.add_term(geis.GEIS_FILTER_DEVICE,
+                (geis.GEIS_DEVICE_ATTRIBUTE_NAME,
+                 geis.GEIS_FILTER_OP_EQ,
+                 self._device1.name))
+            self._sub.add_filter(filt)
+       
+
+    def do_init_complete(self, event):
+        """
+        Creates a subscription ONLY on the second device and generates input
+        ONLY from the first device.
+        """
+        print "do_init_complete"
+        self.create_subscriptions()
+        self._sub.activate()
+        self._device1.play(self._find_data_file("test_device1.events"))
+
+
+    def do_device_available(self, event):
+        """
+        Verifies and remembers the two devices as their reported.
+        """
+        device = event.attrs()[geis.GEIS_EVENT_ATTRIBUTE_DEVICE]
+        print "do_device_available: %s" % device.name()
+        if device.name() == self._device1.name:
+            self._device_1_id = device.id()
+            print ".. device id = %s" % self._device_1_id
+
+    def do_gesture_event(self, event):
+        print "do_gesture_event"
+        if not (self._device_1_id > 0 and self._has_filter):
+            print "devices and filter not set up before other events received."
+            sys.exit(1)
+        if self._args.dry_run:
+            return
+        groupset = event.attrs()[geis.GEIS_EVENT_ATTRIBUTE_GROUPSET]
+        if self._args.force:
+            for group in groupset:
+                for frame in group:
+                    for (k, v) in frame.attrs().iteritems():
+                        if (k == geis.GEIS_GESTURE_ATTRIBUTE_DEVICE_ID
+                           and v != self._device_1_id):
+                            print "test fail: incorrect device ID, expected %d got %d" % (self._device_1_id, v)
+                            sys.exit(1)
+            print "test successful (forced)"
+            sys.exit(0)
+        print "test failed: unsubscribed events received"
+        sys.exit(1)
+
+
+    def do_other_event(self, event):
+        print "do_other_event"
+
+
+    def dispatch_events(self):
+        """ Performs GEIS event loop processing. """
+        print "Tester.dispatch_events"
+        geis_event_action = {
+            geis.GEIS_EVENT_INIT_COMPLETE:    self.do_init_complete.im_func,
+            geis.GEIS_EVENT_GESTURE_BEGIN:    self.do_gesture_event.im_func,
+            geis.GEIS_EVENT_GESTURE_UPDATE:   self.do_gesture_event.im_func,
+            geis.GEIS_EVENT_GESTURE_END:      self.do_gesture_event.im_func,
+            geis.GEIS_EVENT_DEVICE_AVAILABLE: self.do_device_available.im_func,
+        }
+
+        status = self._geis.dispatch_events()
+        while status == geis.GEIS_STATUS_CONTINUE:
+            status = self._geis.dispatch_events()
+
+        try:
+            while True:
+                event = self._geis.next_event()
+                geis_event_action.get(event.type(),
+                                      self.do_other_event.im_func)(self, event)
+        except geis.NoMoreEvents:
+            pass
+        return True
+
+
+def dispatch_test_events(fd, condition, g):
+    print "dispatch_test_events"
+    return g.dispatch_events()
+
+
+def test_timeout():
+    print "timed out, assuming success"
+    exit(0)
+
+
+class Options(argparse.ArgumentParser):
+
+    def __init__(self):
+        super(Options, self).__init__(description='test case for LP:891731')
+        self.add_argument('-d', '--dry-run', action='store_true', dest='dry_run',
+              help='force the test to bypass by subscribing to no input source')
+        self.add_argument('-f', '--force', action='store_true', dest='force',
+              help='force the test to pass by subscribing to the input source')
+        self.add_argument('-t', '--timeout', action='store', default='5000',
+              dest='timeout', type=int,
+              help='milliseconds to wait before ending test')
+
+if __name__ == '__main__':
+    try:
+        options = Options()
+        args = options.parse_args()
+
+        tester = Tester(args)
+        ml = glib.MainLoop()
+        glib.timeout_add(args.timeout, test_timeout)
+        glib.io_add_watch(tester.get_fd(),
+                          glib.IO_IN,
+                          dispatch_test_events,
+                          tester)
+        ml.run()
+
+    except KeyboardInterrupt:
+        pass
+
+    except argparse.ArgumentError as ex:
+        print ex
+        sys,exit(1)

=== added file 'testsuite/geis2/test_device1.events'
--- testsuite/geis2/test_device1.events	1970-01-01 00:00:00 +0000
+++ testsuite/geis2/test_device1.events	2011-12-06 01:12:23 +0000
@@ -0,0 +1,210 @@
+E: 1323109478.604936 0003 0039 52
+E: 1323109478.604938 0003 0035 3367
+E: 1323109478.604939 0003 0036 2268
+E: 1323109478.604942 0003 0000 3367
+E: 1323109478.604943 0003 0001 2268
+E: 1323109478.604944 0003 0018 9
+E: 1323109478.604944 0003 001c 13
+E: 1323109478.604945 0001 0145 1
+E: 1323109478.604947 0000 0000 0
+E: 1323109478.629818 0003 0035 3363
+E: 1323109478.629822 0003 0000 3363
+E: 1323109478.629825 0003 001c 12
+E: 1323109478.629827 0000 0000 0
+E: 1323109478.641338 0003 0035 3373
+E: 1323109478.641340 0003 0036 2187
+E: 1323109478.641343 0003 0000 3373
+E: 1323109478.641343 0003 0001 2187
+E: 1323109478.641344 0003 0018 10
+E: 1323109478.641345 0003 001c 14
+E: 1323109478.641347 0000 0000 0
+E: 1323109478.653409 0003 0018 11
+E: 1323109478.653411 0003 001c 12
+E: 1323109478.653413 0000 0000 0
+E: 1323109478.665509 0003 0035 3389
+E: 1323109478.665510 0003 0036 2151
+E: 1323109478.665513 0003 0000 3389
+E: 1323109478.665514 0003 0001 2151
+E: 1323109478.665514 0003 0018 12
+E: 1323109478.665517 0000 0000 0
+E: 1323109478.676566 0003 0035 3406
+E: 1323109478.676568 0003 0036 2106
+E: 1323109478.676571 0003 0000 3406
+E: 1323109478.676572 0003 0001 2106
+E: 1323109478.676573 0003 0018 15
+E: 1323109478.676573 0003 001c 11
+E: 1323109478.676575 0000 0000 0
+E: 1323109478.688397 0003 0035 3413
+E: 1323109478.688398 0003 0036 2055
+E: 1323109478.688399 0003 0000 3413
+E: 1323109478.688400 0003 0001 2055
+E: 1323109478.688400 0003 0018 19
+E: 1323109478.688401 0003 001c 10
+E: 1323109478.688402 0000 0000 0
+E: 1323109478.701637 0003 0035 3432
+E: 1323109478.701639 0003 0036 2013
+E: 1323109478.701641 0003 0000 3432
+E: 1323109478.701642 0003 0001 2013
+E: 1323109478.701643 0003 0018 27
+E: 1323109478.701644 0003 001c 8
+E: 1323109478.701646 0000 0000 0
+E: 1323109478.724960 0003 0035 2458
+E: 1323109478.724961 0003 0036 3190
+E: 1323109478.724962 0003 002f 1
+E: 1323109478.724962 0003 0039 53
+E: 1323109478.724962 0003 0035 3424
+E: 1323109478.724962 0003 0036 1977
+E: 1323109478.724963 0001 014a 1
+E: 1323109478.724963 0003 0000 3424
+E: 1323109478.724964 0003 0001 1977
+E: 1323109478.724964 0003 0018 42
+E: 1323109478.724965 0003 001c 5
+E: 1323109478.724965 0001 0145 0
+E: 1323109478.724966 0001 014d 1
+E: 1323109478.724966 0000 0000 0
+E: 1323109478.748390 0003 002f 0
+E: 1323109478.748391 0003 0035 2380
+E: 1323109478.748391 0003 0036 3220
+E: 1323109478.748394 0003 002f 1
+E: 1323109478.748394 0003 0035 3416
+E: 1323109478.748394 0003 0036 1961
+E: 1323109478.748396 0003 0000 3416
+E: 1323109478.748396 0003 0001 1961
+E: 1323109478.748397 0003 0018 49
+E: 1323109478.748400 0000 0000 0
+E: 1323109478.772694 0003 002f 0
+E: 1323109478.772695 0003 0035 2372
+E: 1323109478.772695 0003 0036 3212
+E: 1323109478.772696 0003 002f 1
+E: 1323109478.772696 0003 0035 3412
+E: 1323109478.772697 0003 0036 1953
+E: 1323109478.772698 0003 0000 3412
+E: 1323109478.772699 0003 0001 1953
+E: 1323109478.772699 0003 0018 51
+E: 1323109478.772701 0000 0000 0
+E: 1323109478.797052 0003 002f 0
+E: 1323109478.797053 0003 0035 2402
+E: 1323109478.797054 0003 0036 3216
+E: 1323109478.797058 0003 002f 1
+E: 1323109478.797059 0003 0035 3415
+E: 1323109478.797060 0003 0036 1956
+E: 1323109478.797066 0003 0000 3415
+E: 1323109478.797066 0003 0001 1956
+E: 1323109478.797067 0003 0018 53
+E: 1323109478.797069 0000 0000 0
+E: 1323109478.821436 0003 002f 0
+E: 1323109478.821437 0003 0035 2472
+E: 1323109478.821438 0003 0036 3192
+E: 1323109478.821443 0003 002f 1
+E: 1323109478.821443 0003 0035 3506
+E: 1323109478.821444 0003 0036 1986
+E: 1323109478.821450 0003 0000 3506
+E: 1323109478.821451 0003 0001 1986
+E: 1323109478.821451 0003 0018 54
+E: 1323109478.821454 0000 0000 0
+E: 1323109478.845271 0003 002f 0
+E: 1323109478.845272 0003 0035 2592
+E: 1323109478.845272 0003 0036 3196
+E: 1323109478.845273 0003 002f 1
+E: 1323109478.845273 0003 0035 3675
+E: 1323109478.845274 0003 0036 2012
+E: 1323109478.845275 0003 0000 3675
+E: 1323109478.845275 0003 0001 2012
+E: 1323109478.845275 0003 0018 55
+E: 1323109478.845277 0000 0000 0
+E: 1323109478.870003 0003 002f 0
+E: 1323109478.870004 0003 0035 2816
+E: 1323109478.870005 0003 0036 3178
+E: 1323109478.870008 0003 002f 1
+E: 1323109478.870008 0003 0035 3866
+E: 1323109478.870009 0003 0036 2030
+E: 1323109478.870010 0003 0000 3866
+E: 1323109478.870011 0003 0001 2030
+E: 1323109478.870012 0003 0018 56
+E: 1323109478.870015 0000 0000 0
+E: 1323109478.893759 0003 002f 0
+E: 1323109478.893760 0003 0035 2994
+E: 1323109478.893760 0003 0036 3166
+E: 1323109478.893763 0003 002f 1
+E: 1323109478.893763 0003 0035 4069
+E: 1323109478.893764 0003 0036 2019
+E: 1323109478.893766 0003 0000 4069
+E: 1323109478.893767 0003 0001 2019
+E: 1323109478.893771 0000 0000 0
+E: 1323109478.918183 0003 002f 0
+E: 1323109478.918183 0003 0035 3162
+E: 1323109478.918184 0003 0036 3132
+E: 1323109478.918187 0003 002f 1
+E: 1323109478.918187 0003 0035 4214
+E: 1323109478.918188 0003 0036 2006
+E: 1323109478.918190 0003 0000 4214
+E: 1323109478.918190 0003 0001 2006
+E: 1323109478.918194 0000 0000 0
+E: 1323109478.941450 0003 002f 0
+E: 1323109478.941451 0003 0035 3250
+E: 1323109478.941452 0003 0036 3124
+E: 1323109478.941456 0003 002f 1
+E: 1323109478.941456 0003 0035 4282
+E: 1323109478.941457 0003 0036 1974
+E: 1323109478.941460 0003 0000 4282
+E: 1323109478.941461 0003 0001 1974
+E: 1323109478.941467 0000 0000 0
+E: 1323109478.966043 0003 002f 0
+E: 1323109478.966044 0003 0035 3274
+E: 1323109478.966045 0003 0036 3132
+E: 1323109478.966048 0003 002f 1
+E: 1323109478.966048 0003 0035 4296
+E: 1323109478.966049 0003 0036 1973
+E: 1323109478.966050 0003 0000 4296
+E: 1323109478.966051 0003 0001 1973
+E: 1323109478.966055 0000 0000 0
+E: 1323109478.990133 0003 002f 0
+E: 1323109478.990134 0003 0035 3282
+E: 1323109478.990135 0003 0036 3180
+E: 1323109478.990138 0003 002f 1
+E: 1323109478.990138 0003 0035 4299
+E: 1323109478.990138 0003 0036 1992
+E: 1323109478.990140 0003 0000 4299
+E: 1323109478.990141 0003 0001 1992
+E: 1323109478.990145 0000 0000 0
+E: 1323109479.014380 0003 002f 0
+E: 1323109479.014381 0003 0035 3270
+E: 1323109479.014382 0003 0036 3264
+E: 1323109479.014385 0003 002f 1
+E: 1323109479.014385 0003 0035 4142
+E: 1323109479.014386 0003 0036 3230
+E: 1323109479.014388 0001 014a 0
+E: 1323109479.014389 0003 0000 4142
+E: 1323109479.014390 0003 0001 3230
+E: 1323109479.014391 0003 0018 17
+E: 1323109479.014395 0000 0000 0
+E: 1323109479.026385 0003 002f 0
+E: 1323109479.026386 0003 0035 3326
+E: 1323109479.026387 0003 0036 3086
+E: 1323109479.026388 0003 002f 1
+E: 1323109479.026388 0003 0039 -1
+E: 1323109479.026390 0003 0000 3326
+E: 1323109479.026391 0003 0001 3086
+E: 1323109479.026392 0003 0018 7
+E: 1323109479.026393 0003 001c 15
+E: 1323109479.026394 0001 0145 1
+E: 1323109479.026395 0001 014d 0
+E: 1323109479.026396 0000 0000 0
+E: 1323109479.038191 0003 002f 0
+E: 1323109479.038192 0003 0035 3446
+E: 1323109479.038197 0003 0000 3446
+E: 1323109479.038199 0003 0018 4
+E: 1323109479.038206 0000 0000 0
+E: 1323109479.050230 0003 0039 -1
+E: 1323109479.050234 0003 0018 2
+E: 1323109479.050235 0003 001c 0
+E: 1323109479.050236 0001 0145 0
+E: 1323109479.050237 0000 0000 0
+E: 1323109479.075276 0003 0018 1
+E: 1323109479.075278 0000 0000 0
+E: 1323109479.099762 0003 0018 0
+E: 1323109479.099764 0000 0000 0
+E: 1323109479.654050 0003 0018 1
+E: 1323109479.654052 0000 0000 0
+E: 1323109479.689390 0003 0018 0
+E: 1323109479.689391 0000 0000 0

=== added file 'testsuite/geis2/test_device1.prop'
--- testsuite/geis2/test_device1.prop	1970-01-01 00:00:00 +0000
+++ testsuite/geis2/test_device1.prop	2011-12-06 01:12:23 +0000
@@ -0,0 +1,32 @@
+N: Test Device1
+I: 0011 0002 0007 01b1
+P: 09 00 00 00 00 00 00 00
+B: 00 0b 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 03 00 00 00 00 00
+B: 01 20 64 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 02 00 00 00 00 00 00 00 00
+B: 03 03 00 00 11 00 80 60 02
+B: 04 00 00 00 00 00 00 00 00
+B: 05 00 00 00 00 00 00 00 00
+B: 11 00 00 00 00 00 00 00 00
+B: 12 00 00 00 00 00 00 00 00
+B: 15 00 00 00 00 00 00 00 00
+B: 15 00 00 00 00 00 00 00 00
+A: 00 1472 5888 0 0
+A: 01 1408 4820 0 0
+A: 18 0 255 0 0
+A: 1c 0 15 0 0
+A: 2f 0 1 0 0
+A: 35 1472 5888 0 0
+A: 36 1408 4820 0 0
+A: 39 0 65535 0 0

=== added file 'testsuite/geis2/test_device2.prop'
--- testsuite/geis2/test_device2.prop	1970-01-01 00:00:00 +0000
+++ testsuite/geis2/test_device2.prop	2011-12-06 01:12:23 +0000
@@ -0,0 +1,32 @@
+N: Test Device2
+I: 0011 0002 0007 01b1
+P: 09 00 00 00 00 00 00 00
+B: 00 0b 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 03 00 00 00 00 00
+B: 01 20 64 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 01 00 00 00 00 00 00 00 00
+B: 02 00 00 00 00 00 00 00 00
+B: 03 03 00 00 11 00 80 60 02
+B: 04 00 00 00 00 00 00 00 00
+B: 05 00 00 00 00 00 00 00 00
+B: 11 00 00 00 00 00 00 00 00
+B: 12 00 00 00 00 00 00 00 00
+B: 15 00 00 00 00 00 00 00 00
+B: 15 00 00 00 00 00 00 00 00
+A: 00 1472 5888 0 0
+A: 01 1408 4820 0 0
+A: 18 0 255 0 0
+A: 1c 0 15 0 0
+A: 2f 0 1 0 0
+A: 35 1472 5888 0 0
+A: 36 1408 4820 0 0
+A: 39 0 65535 0 0

