function merge (/* ...objects */) {
  var k, obj
  var res = {}
  var objs = Array.prototype.slice.call(arguments)

  for (var i = 0, l = objs.length; i < l; i++) {
    obj = objs[i]
    for (k in obj) {
      if (obj.hasOwnProperty(k)) {
        res[k] = obj[k]
      }
    }
  }
  return res
}
function merge () {
  var k, obj
  var res = {}
  var objs = Array.prototype.slice.call(arguments)

  for (var i = 0, l = objs.length; i < l; i++) {
    obj = objs[i]
    for (k in obj) {
      if (obj.hasOwnProperty(k)) {
        res[k] = obj[k]
      }
    }
  }
  return res
}
function merge ( /* ...objects */ ) { var k , obj var res = { } var objs = Array . prototype . slice . call ( arguments ) for ( var i = 0 , l = objs . length ; i < l ; i ++ ) { obj = objs [ i ] for ( k in obj ) { if ( obj . hasOwnProperty ( k ) ) { res [ k ] = obj [ k ] } } } return res }
/* ------- util functions -------
/ * ------- util functions -------