code: function(inEvent) {
        var tl = inEvent.touches;
  
        // pointermap.size should be < tl.length here, as the touchstart has not
        // been processed yet.
        if (touch__pointermap.size >= tl.length) {
          var d = [];
          touch__pointermap.forEach(function(value, key) {
  
            // Never remove pointerId == 1, which is mouse.
            // Touch identifiers are 2 smaller than their pointerId, which is the
            // index in pointermap.
            if (key !== 1 && !this.findTouch(tl, key - 2)) {
              var p = value.out;
              d.push(p);
            }
          }, this);
          d.forEach(this.cancelOut, this);
        }
      }
docs: In some instances, a touchstart can happen without a touchend. This leaves the pointermap in a broken state. Therefore, on every touchstart, we remove the touches that did not fire a touchend event. To keep state globally consistent, we fire a pointercancel for this "abandoned" touch