code: def _websocket_mask_python(mask, data):
      # type: (bytes, bytes) -> bytes
      """Websocket masking function.
  
      `mask` is a `bytes` object of length 4; `data` is a `bytes` object of any length.
      Returns a `bytes` object of the same length as `data` with the mask applied
      as specified in section 5.3 of RFC 6455.
  
      This pure-python implementation may be replaced by an optimized version when available.
      """
      mask_arr = array.array("B", mask)
      unmasked_arr = array.array("B", data)
      for i in xrange(len(data)):
          unmasked_arr[i] = unmasked_arr[i] ^ mask_arr[i % 4]
      if PY3:
          # tostring was deprecated in py32.  It hasn't been removed,
          # but since we turn on deprecation warnings in our tests
          # we need to use the right one.
          return unmasked_arr.tobytes()
      else:
          return unmasked_arr.tostring()
  
imports: from __future__ import absolute_import, division, print_function
  import array
  import atexit
  import os
  import re
  import sys
  import zlib
label_desc: Use image node_id 8 for calling a global function with example usage: _websocket_mask_python(mask, data) and returns: unmasked_arr, unmasked_arr